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 Macie 2 SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2020-01-01@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-maciev2)
+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.MacieV2](http://hackage.haskell.org/package/amazonka-maciev2/docs/Amazonka-MacieV2.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-maciev2` 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-maciev2.cabal b/amazonka-maciev2.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-maciev2.cabal
@@ -0,0 +1,354 @@
+cabal-version:      2.2
+name:               amazonka-maciev2
+version:            2.0
+synopsis:           Amazon Macie 2 SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2020-01-01@ 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.MacieV2.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.MacieV2" 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-maciev2
+
+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.MacieV2
+    Amazonka.MacieV2.AcceptInvitation
+    Amazonka.MacieV2.BatchGetCustomDataIdentifiers
+    Amazonka.MacieV2.CreateAllowList
+    Amazonka.MacieV2.CreateClassificationJob
+    Amazonka.MacieV2.CreateCustomDataIdentifier
+    Amazonka.MacieV2.CreateFindingsFilter
+    Amazonka.MacieV2.CreateInvitations
+    Amazonka.MacieV2.CreateMember
+    Amazonka.MacieV2.CreateSampleFindings
+    Amazonka.MacieV2.DeclineInvitations
+    Amazonka.MacieV2.DeleteAllowList
+    Amazonka.MacieV2.DeleteCustomDataIdentifier
+    Amazonka.MacieV2.DeleteFindingsFilter
+    Amazonka.MacieV2.DeleteInvitations
+    Amazonka.MacieV2.DeleteMember
+    Amazonka.MacieV2.DescribeBuckets
+    Amazonka.MacieV2.DescribeClassificationJob
+    Amazonka.MacieV2.DescribeOrganizationConfiguration
+    Amazonka.MacieV2.DisableMacie
+    Amazonka.MacieV2.DisableOrganizationAdminAccount
+    Amazonka.MacieV2.DisassociateFromAdministratorAccount
+    Amazonka.MacieV2.DisassociateFromMasterAccount
+    Amazonka.MacieV2.DisassociateMember
+    Amazonka.MacieV2.EnableMacie
+    Amazonka.MacieV2.EnableOrganizationAdminAccount
+    Amazonka.MacieV2.GetAdministratorAccount
+    Amazonka.MacieV2.GetAllowList
+    Amazonka.MacieV2.GetAutomatedDiscoveryConfiguration
+    Amazonka.MacieV2.GetBucketStatistics
+    Amazonka.MacieV2.GetClassificationExportConfiguration
+    Amazonka.MacieV2.GetClassificationScope
+    Amazonka.MacieV2.GetCustomDataIdentifier
+    Amazonka.MacieV2.GetFindings
+    Amazonka.MacieV2.GetFindingsFilter
+    Amazonka.MacieV2.GetFindingsPublicationConfiguration
+    Amazonka.MacieV2.GetFindingStatistics
+    Amazonka.MacieV2.GetInvitationsCount
+    Amazonka.MacieV2.GetMacieSession
+    Amazonka.MacieV2.GetMasterAccount
+    Amazonka.MacieV2.GetMember
+    Amazonka.MacieV2.GetResourceProfile
+    Amazonka.MacieV2.GetRevealConfiguration
+    Amazonka.MacieV2.GetSensitiveDataOccurrences
+    Amazonka.MacieV2.GetSensitiveDataOccurrencesAvailability
+    Amazonka.MacieV2.GetSensitivityInspectionTemplate
+    Amazonka.MacieV2.GetUsageStatistics
+    Amazonka.MacieV2.GetUsageTotals
+    Amazonka.MacieV2.Lens
+    Amazonka.MacieV2.ListAllowLists
+    Amazonka.MacieV2.ListClassificationJobs
+    Amazonka.MacieV2.ListClassificationScopes
+    Amazonka.MacieV2.ListCustomDataIdentifiers
+    Amazonka.MacieV2.ListFindings
+    Amazonka.MacieV2.ListFindingsFilters
+    Amazonka.MacieV2.ListInvitations
+    Amazonka.MacieV2.ListManagedDataIdentifiers
+    Amazonka.MacieV2.ListMembers
+    Amazonka.MacieV2.ListOrganizationAdminAccounts
+    Amazonka.MacieV2.ListResourceProfileArtifacts
+    Amazonka.MacieV2.ListResourceProfileDetections
+    Amazonka.MacieV2.ListSensitivityInspectionTemplates
+    Amazonka.MacieV2.ListTagsForResource
+    Amazonka.MacieV2.PutClassificationExportConfiguration
+    Amazonka.MacieV2.PutFindingsPublicationConfiguration
+    Amazonka.MacieV2.SearchResources
+    Amazonka.MacieV2.TagResource
+    Amazonka.MacieV2.TestCustomDataIdentifier
+    Amazonka.MacieV2.Types
+    Amazonka.MacieV2.Types.AccessControlList
+    Amazonka.MacieV2.Types.AccountDetail
+    Amazonka.MacieV2.Types.AccountLevelPermissions
+    Amazonka.MacieV2.Types.AdminAccount
+    Amazonka.MacieV2.Types.AdminStatus
+    Amazonka.MacieV2.Types.AllowListCriteria
+    Amazonka.MacieV2.Types.AllowListStatus
+    Amazonka.MacieV2.Types.AllowListStatusCode
+    Amazonka.MacieV2.Types.AllowListSummary
+    Amazonka.MacieV2.Types.AllowsUnencryptedObjectUploads
+    Amazonka.MacieV2.Types.ApiCallDetails
+    Amazonka.MacieV2.Types.AssumedRole
+    Amazonka.MacieV2.Types.AutomatedDiscoveryStatus
+    Amazonka.MacieV2.Types.AvailabilityCode
+    Amazonka.MacieV2.Types.AwsAccount
+    Amazonka.MacieV2.Types.AwsService
+    Amazonka.MacieV2.Types.BatchGetCustomDataIdentifierSummary
+    Amazonka.MacieV2.Types.BlockPublicAccess
+    Amazonka.MacieV2.Types.BucketCountByEffectivePermission
+    Amazonka.MacieV2.Types.BucketCountByEncryptionType
+    Amazonka.MacieV2.Types.BucketCountBySharedAccessType
+    Amazonka.MacieV2.Types.BucketCountPolicyAllowsUnencryptedObjectUploads
+    Amazonka.MacieV2.Types.BucketCriteriaAdditionalProperties
+    Amazonka.MacieV2.Types.BucketLevelPermissions
+    Amazonka.MacieV2.Types.BucketMetadata
+    Amazonka.MacieV2.Types.BucketMetadataErrorCode
+    Amazonka.MacieV2.Types.BucketPermissionConfiguration
+    Amazonka.MacieV2.Types.BucketPolicy
+    Amazonka.MacieV2.Types.BucketPublicAccess
+    Amazonka.MacieV2.Types.BucketServerSideEncryption
+    Amazonka.MacieV2.Types.BucketSortCriteria
+    Amazonka.MacieV2.Types.BucketStatisticsBySensitivity
+    Amazonka.MacieV2.Types.Cell
+    Amazonka.MacieV2.Types.ClassificationDetails
+    Amazonka.MacieV2.Types.ClassificationExportConfiguration
+    Amazonka.MacieV2.Types.ClassificationResult
+    Amazonka.MacieV2.Types.ClassificationResultStatus
+    Amazonka.MacieV2.Types.ClassificationScopeSummary
+    Amazonka.MacieV2.Types.ClassificationScopeUpdateOperation
+    Amazonka.MacieV2.Types.CriteriaBlockForJob
+    Amazonka.MacieV2.Types.CriteriaForJob
+    Amazonka.MacieV2.Types.CriterionAdditionalProperties
+    Amazonka.MacieV2.Types.Currency
+    Amazonka.MacieV2.Types.CustomDataIdentifiers
+    Amazonka.MacieV2.Types.CustomDataIdentifierSummary
+    Amazonka.MacieV2.Types.CustomDetection
+    Amazonka.MacieV2.Types.DailySchedule
+    Amazonka.MacieV2.Types.DataIdentifierSeverity
+    Amazonka.MacieV2.Types.DataIdentifierType
+    Amazonka.MacieV2.Types.DayOfWeek
+    Amazonka.MacieV2.Types.DefaultDetection
+    Amazonka.MacieV2.Types.DetectedDataDetails
+    Amazonka.MacieV2.Types.Detection
+    Amazonka.MacieV2.Types.DomainDetails
+    Amazonka.MacieV2.Types.EffectivePermission
+    Amazonka.MacieV2.Types.EncryptionType
+    Amazonka.MacieV2.Types.ErrorCode
+    Amazonka.MacieV2.Types.FederatedUser
+    Amazonka.MacieV2.Types.Finding
+    Amazonka.MacieV2.Types.FindingAction
+    Amazonka.MacieV2.Types.FindingActionType
+    Amazonka.MacieV2.Types.FindingActor
+    Amazonka.MacieV2.Types.FindingCategory
+    Amazonka.MacieV2.Types.FindingCriteria
+    Amazonka.MacieV2.Types.FindingPublishingFrequency
+    Amazonka.MacieV2.Types.FindingsFilterAction
+    Amazonka.MacieV2.Types.FindingsFilterListItem
+    Amazonka.MacieV2.Types.FindingStatisticsSortAttributeName
+    Amazonka.MacieV2.Types.FindingStatisticsSortCriteria
+    Amazonka.MacieV2.Types.FindingType
+    Amazonka.MacieV2.Types.GroupBy
+    Amazonka.MacieV2.Types.GroupCount
+    Amazonka.MacieV2.Types.IamUser
+    Amazonka.MacieV2.Types.Invitation
+    Amazonka.MacieV2.Types.IpAddressDetails
+    Amazonka.MacieV2.Types.IpCity
+    Amazonka.MacieV2.Types.IpCountry
+    Amazonka.MacieV2.Types.IpGeoLocation
+    Amazonka.MacieV2.Types.IpOwner
+    Amazonka.MacieV2.Types.IsDefinedInJob
+    Amazonka.MacieV2.Types.IsMonitoredByJob
+    Amazonka.MacieV2.Types.JobComparator
+    Amazonka.MacieV2.Types.JobDetails
+    Amazonka.MacieV2.Types.JobScheduleFrequency
+    Amazonka.MacieV2.Types.JobScopeTerm
+    Amazonka.MacieV2.Types.JobScopingBlock
+    Amazonka.MacieV2.Types.JobStatus
+    Amazonka.MacieV2.Types.JobSummary
+    Amazonka.MacieV2.Types.JobType
+    Amazonka.MacieV2.Types.KeyValuePair
+    Amazonka.MacieV2.Types.LastRunErrorStatus
+    Amazonka.MacieV2.Types.LastRunErrorStatusCode
+    Amazonka.MacieV2.Types.ListJobsFilterCriteria
+    Amazonka.MacieV2.Types.ListJobsFilterKey
+    Amazonka.MacieV2.Types.ListJobsFilterTerm
+    Amazonka.MacieV2.Types.ListJobsSortAttributeName
+    Amazonka.MacieV2.Types.ListJobsSortCriteria
+    Amazonka.MacieV2.Types.MacieStatus
+    Amazonka.MacieV2.Types.ManagedDataIdentifierSelector
+    Amazonka.MacieV2.Types.ManagedDataIdentifierSummary
+    Amazonka.MacieV2.Types.MatchingBucket
+    Amazonka.MacieV2.Types.MatchingResource
+    Amazonka.MacieV2.Types.Member
+    Amazonka.MacieV2.Types.MonthlySchedule
+    Amazonka.MacieV2.Types.ObjectCountByEncryptionType
+    Amazonka.MacieV2.Types.ObjectLevelStatistics
+    Amazonka.MacieV2.Types.Occurrences
+    Amazonka.MacieV2.Types.OrderBy
+    Amazonka.MacieV2.Types.OriginType
+    Amazonka.MacieV2.Types.Page
+    Amazonka.MacieV2.Types.PolicyDetails
+    Amazonka.MacieV2.Types.Range
+    Amazonka.MacieV2.Types.Record
+    Amazonka.MacieV2.Types.RelationshipStatus
+    Amazonka.MacieV2.Types.ReplicationDetails
+    Amazonka.MacieV2.Types.ResourceProfileArtifact
+    Amazonka.MacieV2.Types.ResourcesAffected
+    Amazonka.MacieV2.Types.ResourceStatistics
+    Amazonka.MacieV2.Types.RevealConfiguration
+    Amazonka.MacieV2.Types.RevealRequestStatus
+    Amazonka.MacieV2.Types.RevealStatus
+    Amazonka.MacieV2.Types.S3Bucket
+    Amazonka.MacieV2.Types.S3BucketCriteriaForJob
+    Amazonka.MacieV2.Types.S3BucketDefinitionForJob
+    Amazonka.MacieV2.Types.S3BucketOwner
+    Amazonka.MacieV2.Types.S3ClassificationScope
+    Amazonka.MacieV2.Types.S3ClassificationScopeExclusion
+    Amazonka.MacieV2.Types.S3ClassificationScopeExclusionUpdate
+    Amazonka.MacieV2.Types.S3ClassificationScopeUpdate
+    Amazonka.MacieV2.Types.S3Destination
+    Amazonka.MacieV2.Types.S3JobDefinition
+    Amazonka.MacieV2.Types.S3Object
+    Amazonka.MacieV2.Types.S3WordsList
+    Amazonka.MacieV2.Types.ScopeFilterKey
+    Amazonka.MacieV2.Types.Scoping
+    Amazonka.MacieV2.Types.SearchResourcesBucketCriteria
+    Amazonka.MacieV2.Types.SearchResourcesComparator
+    Amazonka.MacieV2.Types.SearchResourcesCriteria
+    Amazonka.MacieV2.Types.SearchResourcesCriteriaBlock
+    Amazonka.MacieV2.Types.SearchResourcesSimpleCriterion
+    Amazonka.MacieV2.Types.SearchResourcesSimpleCriterionKey
+    Amazonka.MacieV2.Types.SearchResourcesSortAttributeName
+    Amazonka.MacieV2.Types.SearchResourcesSortCriteria
+    Amazonka.MacieV2.Types.SearchResourcesTagCriterion
+    Amazonka.MacieV2.Types.SearchResourcesTagCriterionPair
+    Amazonka.MacieV2.Types.SecurityHubConfiguration
+    Amazonka.MacieV2.Types.SensitiveDataItem
+    Amazonka.MacieV2.Types.SensitiveDataItemCategory
+    Amazonka.MacieV2.Types.SensitivityAggregations
+    Amazonka.MacieV2.Types.SensitivityInspectionTemplateExcludes
+    Amazonka.MacieV2.Types.SensitivityInspectionTemplateIncludes
+    Amazonka.MacieV2.Types.SensitivityInspectionTemplatesEntry
+    Amazonka.MacieV2.Types.ServerSideEncryption
+    Amazonka.MacieV2.Types.ServiceLimit
+    Amazonka.MacieV2.Types.SessionContext
+    Amazonka.MacieV2.Types.SessionContextAttributes
+    Amazonka.MacieV2.Types.SessionIssuer
+    Amazonka.MacieV2.Types.Severity
+    Amazonka.MacieV2.Types.SeverityDescription
+    Amazonka.MacieV2.Types.SeverityLevel
+    Amazonka.MacieV2.Types.SharedAccess
+    Amazonka.MacieV2.Types.SimpleCriterionForJob
+    Amazonka.MacieV2.Types.SimpleCriterionKeyForJob
+    Amazonka.MacieV2.Types.SimpleScopeTerm
+    Amazonka.MacieV2.Types.SortCriteria
+    Amazonka.MacieV2.Types.Statistics
+    Amazonka.MacieV2.Types.StorageClass
+    Amazonka.MacieV2.Types.SuppressDataIdentifier
+    Amazonka.MacieV2.Types.TagCriterionForJob
+    Amazonka.MacieV2.Types.TagCriterionPairForJob
+    Amazonka.MacieV2.Types.TagScopeTerm
+    Amazonka.MacieV2.Types.TagTarget
+    Amazonka.MacieV2.Types.TagValuePair
+    Amazonka.MacieV2.Types.TimeRange
+    Amazonka.MacieV2.Types.Type
+    Amazonka.MacieV2.Types.UnavailabilityReasonCode
+    Amazonka.MacieV2.Types.Unit
+    Amazonka.MacieV2.Types.UnprocessedAccount
+    Amazonka.MacieV2.Types.UsageByAccount
+    Amazonka.MacieV2.Types.UsageRecord
+    Amazonka.MacieV2.Types.UsageStatisticsFilter
+    Amazonka.MacieV2.Types.UsageStatisticsFilterComparator
+    Amazonka.MacieV2.Types.UsageStatisticsFilterKey
+    Amazonka.MacieV2.Types.UsageStatisticsSortBy
+    Amazonka.MacieV2.Types.UsageStatisticsSortKey
+    Amazonka.MacieV2.Types.UsageTotal
+    Amazonka.MacieV2.Types.UsageType
+    Amazonka.MacieV2.Types.UserIdentity
+    Amazonka.MacieV2.Types.UserIdentityRoot
+    Amazonka.MacieV2.Types.UserIdentityType
+    Amazonka.MacieV2.Types.UserPausedDetails
+    Amazonka.MacieV2.Types.WeeklySchedule
+    Amazonka.MacieV2.UntagResource
+    Amazonka.MacieV2.UpdateAllowList
+    Amazonka.MacieV2.UpdateAutomatedDiscoveryConfiguration
+    Amazonka.MacieV2.UpdateClassificationJob
+    Amazonka.MacieV2.UpdateClassificationScope
+    Amazonka.MacieV2.UpdateFindingsFilter
+    Amazonka.MacieV2.UpdateMacieSession
+    Amazonka.MacieV2.UpdateMemberSession
+    Amazonka.MacieV2.UpdateOrganizationConfiguration
+    Amazonka.MacieV2.UpdateResourceProfile
+    Amazonka.MacieV2.UpdateResourceProfileDetections
+    Amazonka.MacieV2.UpdateRevealConfiguration
+    Amazonka.MacieV2.UpdateSensitivityInspectionTemplate
+    Amazonka.MacieV2.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-maciev2-test
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
+
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.Gen.MacieV2
+    Test.Amazonka.MacieV2
+    Test.Amazonka.MacieV2.Internal
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-maciev2
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AcceptInvitation.yaml b/fixture/AcceptInvitation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AcceptInvitation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/AcceptInvitationResponse.proto b/fixture/AcceptInvitationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AcceptInvitationResponse.proto
diff --git a/fixture/BatchGetCustomDataIdentifiers.yaml b/fixture/BatchGetCustomDataIdentifiers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetCustomDataIdentifiers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/BatchGetCustomDataIdentifiersResponse.proto b/fixture/BatchGetCustomDataIdentifiersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetCustomDataIdentifiersResponse.proto
diff --git a/fixture/CreateAllowList.yaml b/fixture/CreateAllowList.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAllowList.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/CreateAllowListResponse.proto b/fixture/CreateAllowListResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAllowListResponse.proto
diff --git a/fixture/CreateClassificationJob.yaml b/fixture/CreateClassificationJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateClassificationJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/CreateClassificationJobResponse.proto b/fixture/CreateClassificationJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateClassificationJobResponse.proto
diff --git a/fixture/CreateCustomDataIdentifier.yaml b/fixture/CreateCustomDataIdentifier.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCustomDataIdentifier.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/CreateCustomDataIdentifierResponse.proto b/fixture/CreateCustomDataIdentifierResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCustomDataIdentifierResponse.proto
diff --git a/fixture/CreateFindingsFilter.yaml b/fixture/CreateFindingsFilter.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFindingsFilter.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/CreateFindingsFilterResponse.proto b/fixture/CreateFindingsFilterResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFindingsFilterResponse.proto
diff --git a/fixture/CreateInvitations.yaml b/fixture/CreateInvitations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateInvitations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/CreateInvitationsResponse.proto b/fixture/CreateInvitationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateInvitationsResponse.proto
diff --git a/fixture/CreateMember.yaml b/fixture/CreateMember.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMember.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/CreateMemberResponse.proto b/fixture/CreateMemberResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMemberResponse.proto
diff --git a/fixture/CreateSampleFindings.yaml b/fixture/CreateSampleFindings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSampleFindings.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/CreateSampleFindingsResponse.proto b/fixture/CreateSampleFindingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSampleFindingsResponse.proto
diff --git a/fixture/DeclineInvitations.yaml b/fixture/DeclineInvitations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeclineInvitations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/DeclineInvitationsResponse.proto b/fixture/DeclineInvitationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeclineInvitationsResponse.proto
diff --git a/fixture/DeleteAllowList.yaml b/fixture/DeleteAllowList.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAllowList.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/DeleteAllowListResponse.proto b/fixture/DeleteAllowListResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAllowListResponse.proto
diff --git a/fixture/DeleteCustomDataIdentifier.yaml b/fixture/DeleteCustomDataIdentifier.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCustomDataIdentifier.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/DeleteCustomDataIdentifierResponse.proto b/fixture/DeleteCustomDataIdentifierResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCustomDataIdentifierResponse.proto
diff --git a/fixture/DeleteFindingsFilter.yaml b/fixture/DeleteFindingsFilter.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFindingsFilter.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/DeleteFindingsFilterResponse.proto b/fixture/DeleteFindingsFilterResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFindingsFilterResponse.proto
diff --git a/fixture/DeleteInvitations.yaml b/fixture/DeleteInvitations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteInvitations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/DeleteInvitationsResponse.proto b/fixture/DeleteInvitationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteInvitationsResponse.proto
diff --git a/fixture/DeleteMember.yaml b/fixture/DeleteMember.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteMember.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/DeleteMemberResponse.proto b/fixture/DeleteMemberResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteMemberResponse.proto
diff --git a/fixture/DescribeBuckets.yaml b/fixture/DescribeBuckets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBuckets.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/DescribeBucketsResponse.proto b/fixture/DescribeBucketsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBucketsResponse.proto
diff --git a/fixture/DescribeClassificationJob.yaml b/fixture/DescribeClassificationJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeClassificationJob.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/DescribeClassificationJobResponse.proto b/fixture/DescribeClassificationJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeClassificationJobResponse.proto
diff --git a/fixture/DescribeOrganizationConfiguration.yaml b/fixture/DescribeOrganizationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeOrganizationConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/DescribeOrganizationConfigurationResponse.proto b/fixture/DescribeOrganizationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeOrganizationConfigurationResponse.proto
diff --git a/fixture/DisableMacie.yaml b/fixture/DisableMacie.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisableMacie.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/DisableMacieResponse.proto b/fixture/DisableMacieResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisableMacieResponse.proto
diff --git a/fixture/DisableOrganizationAdminAccount.yaml b/fixture/DisableOrganizationAdminAccount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisableOrganizationAdminAccount.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/DisableOrganizationAdminAccountResponse.proto b/fixture/DisableOrganizationAdminAccountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisableOrganizationAdminAccountResponse.proto
diff --git a/fixture/DisassociateFromAdministratorAccount.yaml b/fixture/DisassociateFromAdministratorAccount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateFromAdministratorAccount.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/DisassociateFromAdministratorAccountResponse.proto b/fixture/DisassociateFromAdministratorAccountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateFromAdministratorAccountResponse.proto
diff --git a/fixture/DisassociateFromMasterAccount.yaml b/fixture/DisassociateFromMasterAccount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateFromMasterAccount.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/DisassociateFromMasterAccountResponse.proto b/fixture/DisassociateFromMasterAccountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateFromMasterAccountResponse.proto
diff --git a/fixture/DisassociateMember.yaml b/fixture/DisassociateMember.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateMember.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/DisassociateMemberResponse.proto b/fixture/DisassociateMemberResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateMemberResponse.proto
diff --git a/fixture/EnableMacie.yaml b/fixture/EnableMacie.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/EnableMacie.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/EnableMacieResponse.proto b/fixture/EnableMacieResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/EnableMacieResponse.proto
diff --git a/fixture/EnableOrganizationAdminAccount.yaml b/fixture/EnableOrganizationAdminAccount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/EnableOrganizationAdminAccount.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/EnableOrganizationAdminAccountResponse.proto b/fixture/EnableOrganizationAdminAccountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/EnableOrganizationAdminAccountResponse.proto
diff --git a/fixture/GetAdministratorAccount.yaml b/fixture/GetAdministratorAccount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAdministratorAccount.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetAdministratorAccountResponse.proto b/fixture/GetAdministratorAccountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAdministratorAccountResponse.proto
diff --git a/fixture/GetAllowList.yaml b/fixture/GetAllowList.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAllowList.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetAllowListResponse.proto b/fixture/GetAllowListResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAllowListResponse.proto
diff --git a/fixture/GetAutomatedDiscoveryConfiguration.yaml b/fixture/GetAutomatedDiscoveryConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAutomatedDiscoveryConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetAutomatedDiscoveryConfigurationResponse.proto b/fixture/GetAutomatedDiscoveryConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAutomatedDiscoveryConfigurationResponse.proto
diff --git a/fixture/GetBucketStatistics.yaml b/fixture/GetBucketStatistics.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketStatistics.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetBucketStatisticsResponse.proto b/fixture/GetBucketStatisticsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketStatisticsResponse.proto
diff --git a/fixture/GetClassificationExportConfiguration.yaml b/fixture/GetClassificationExportConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetClassificationExportConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetClassificationExportConfigurationResponse.proto b/fixture/GetClassificationExportConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetClassificationExportConfigurationResponse.proto
diff --git a/fixture/GetClassificationScope.yaml b/fixture/GetClassificationScope.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetClassificationScope.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetClassificationScopeResponse.proto b/fixture/GetClassificationScopeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetClassificationScopeResponse.proto
diff --git a/fixture/GetCustomDataIdentifier.yaml b/fixture/GetCustomDataIdentifier.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetCustomDataIdentifier.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetCustomDataIdentifierResponse.proto b/fixture/GetCustomDataIdentifierResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetCustomDataIdentifierResponse.proto
diff --git a/fixture/GetFindingStatistics.yaml b/fixture/GetFindingStatistics.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetFindingStatistics.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetFindingStatisticsResponse.proto b/fixture/GetFindingStatisticsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetFindingStatisticsResponse.proto
diff --git a/fixture/GetFindings.yaml b/fixture/GetFindings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetFindings.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetFindingsFilter.yaml b/fixture/GetFindingsFilter.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetFindingsFilter.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetFindingsFilterResponse.proto b/fixture/GetFindingsFilterResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetFindingsFilterResponse.proto
diff --git a/fixture/GetFindingsPublicationConfiguration.yaml b/fixture/GetFindingsPublicationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetFindingsPublicationConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetFindingsPublicationConfigurationResponse.proto b/fixture/GetFindingsPublicationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetFindingsPublicationConfigurationResponse.proto
diff --git a/fixture/GetFindingsResponse.proto b/fixture/GetFindingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetFindingsResponse.proto
diff --git a/fixture/GetInvitationsCount.yaml b/fixture/GetInvitationsCount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetInvitationsCount.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetInvitationsCountResponse.proto b/fixture/GetInvitationsCountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetInvitationsCountResponse.proto
diff --git a/fixture/GetMacieSession.yaml b/fixture/GetMacieSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetMacieSession.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetMacieSessionResponse.proto b/fixture/GetMacieSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetMacieSessionResponse.proto
diff --git a/fixture/GetMasterAccount.yaml b/fixture/GetMasterAccount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetMasterAccount.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetMasterAccountResponse.proto b/fixture/GetMasterAccountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetMasterAccountResponse.proto
diff --git a/fixture/GetMember.yaml b/fixture/GetMember.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetMember.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetMemberResponse.proto b/fixture/GetMemberResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetMemberResponse.proto
diff --git a/fixture/GetResourceProfile.yaml b/fixture/GetResourceProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetResourceProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetResourceProfileResponse.proto b/fixture/GetResourceProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetResourceProfileResponse.proto
diff --git a/fixture/GetRevealConfiguration.yaml b/fixture/GetRevealConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetRevealConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetRevealConfigurationResponse.proto b/fixture/GetRevealConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetRevealConfigurationResponse.proto
diff --git a/fixture/GetSensitiveDataOccurrences.yaml b/fixture/GetSensitiveDataOccurrences.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSensitiveDataOccurrences.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetSensitiveDataOccurrencesAvailability.yaml b/fixture/GetSensitiveDataOccurrencesAvailability.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSensitiveDataOccurrencesAvailability.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetSensitiveDataOccurrencesAvailabilityResponse.proto b/fixture/GetSensitiveDataOccurrencesAvailabilityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSensitiveDataOccurrencesAvailabilityResponse.proto
diff --git a/fixture/GetSensitiveDataOccurrencesResponse.proto b/fixture/GetSensitiveDataOccurrencesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSensitiveDataOccurrencesResponse.proto
diff --git a/fixture/GetSensitivityInspectionTemplate.yaml b/fixture/GetSensitivityInspectionTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSensitivityInspectionTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetSensitivityInspectionTemplateResponse.proto b/fixture/GetSensitivityInspectionTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSensitivityInspectionTemplateResponse.proto
diff --git a/fixture/GetUsageStatistics.yaml b/fixture/GetUsageStatistics.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetUsageStatistics.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetUsageStatisticsResponse.proto b/fixture/GetUsageStatisticsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetUsageStatisticsResponse.proto
diff --git a/fixture/GetUsageTotals.yaml b/fixture/GetUsageTotals.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetUsageTotals.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/GetUsageTotalsResponse.proto b/fixture/GetUsageTotalsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetUsageTotalsResponse.proto
diff --git a/fixture/ListAllowLists.yaml b/fixture/ListAllowLists.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAllowLists.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/ListAllowListsResponse.proto b/fixture/ListAllowListsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAllowListsResponse.proto
diff --git a/fixture/ListClassificationJobs.yaml b/fixture/ListClassificationJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListClassificationJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/ListClassificationJobsResponse.proto b/fixture/ListClassificationJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListClassificationJobsResponse.proto
diff --git a/fixture/ListClassificationScopes.yaml b/fixture/ListClassificationScopes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListClassificationScopes.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/ListClassificationScopesResponse.proto b/fixture/ListClassificationScopesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListClassificationScopesResponse.proto
diff --git a/fixture/ListCustomDataIdentifiers.yaml b/fixture/ListCustomDataIdentifiers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomDataIdentifiers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/ListCustomDataIdentifiersResponse.proto b/fixture/ListCustomDataIdentifiersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomDataIdentifiersResponse.proto
diff --git a/fixture/ListFindings.yaml b/fixture/ListFindings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListFindings.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/ListFindingsFilters.yaml b/fixture/ListFindingsFilters.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListFindingsFilters.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/ListFindingsFiltersResponse.proto b/fixture/ListFindingsFiltersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListFindingsFiltersResponse.proto
diff --git a/fixture/ListFindingsResponse.proto b/fixture/ListFindingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListFindingsResponse.proto
diff --git a/fixture/ListInvitations.yaml b/fixture/ListInvitations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListInvitations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/ListInvitationsResponse.proto b/fixture/ListInvitationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListInvitationsResponse.proto
diff --git a/fixture/ListManagedDataIdentifiers.yaml b/fixture/ListManagedDataIdentifiers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListManagedDataIdentifiers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/ListManagedDataIdentifiersResponse.proto b/fixture/ListManagedDataIdentifiersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListManagedDataIdentifiersResponse.proto
diff --git a/fixture/ListMembers.yaml b/fixture/ListMembers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListMembers.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/ListMembersResponse.proto b/fixture/ListMembersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListMembersResponse.proto
diff --git a/fixture/ListOrganizationAdminAccounts.yaml b/fixture/ListOrganizationAdminAccounts.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListOrganizationAdminAccounts.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/ListOrganizationAdminAccountsResponse.proto b/fixture/ListOrganizationAdminAccountsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListOrganizationAdminAccountsResponse.proto
diff --git a/fixture/ListResourceProfileArtifacts.yaml b/fixture/ListResourceProfileArtifacts.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListResourceProfileArtifacts.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/ListResourceProfileArtifactsResponse.proto b/fixture/ListResourceProfileArtifactsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListResourceProfileArtifactsResponse.proto
diff --git a/fixture/ListResourceProfileDetections.yaml b/fixture/ListResourceProfileDetections.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListResourceProfileDetections.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/ListResourceProfileDetectionsResponse.proto b/fixture/ListResourceProfileDetectionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListResourceProfileDetectionsResponse.proto
diff --git a/fixture/ListSensitivityInspectionTemplates.yaml b/fixture/ListSensitivityInspectionTemplates.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSensitivityInspectionTemplates.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/ListSensitivityInspectionTemplatesResponse.proto b/fixture/ListSensitivityInspectionTemplatesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSensitivityInspectionTemplatesResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/PutClassificationExportConfiguration.yaml b/fixture/PutClassificationExportConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutClassificationExportConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/PutClassificationExportConfigurationResponse.proto b/fixture/PutClassificationExportConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutClassificationExportConfigurationResponse.proto
diff --git a/fixture/PutFindingsPublicationConfiguration.yaml b/fixture/PutFindingsPublicationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutFindingsPublicationConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/PutFindingsPublicationConfigurationResponse.proto b/fixture/PutFindingsPublicationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutFindingsPublicationConfigurationResponse.proto
diff --git a/fixture/SearchResources.yaml b/fixture/SearchResources.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SearchResources.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/SearchResourcesResponse.proto b/fixture/SearchResourcesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SearchResourcesResponse.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/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/TestCustomDataIdentifier.yaml b/fixture/TestCustomDataIdentifier.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TestCustomDataIdentifier.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/TestCustomDataIdentifierResponse.proto b/fixture/TestCustomDataIdentifierResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TestCustomDataIdentifierResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/UpdateAllowList.yaml b/fixture/UpdateAllowList.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAllowList.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/UpdateAllowListResponse.proto b/fixture/UpdateAllowListResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAllowListResponse.proto
diff --git a/fixture/UpdateAutomatedDiscoveryConfiguration.yaml b/fixture/UpdateAutomatedDiscoveryConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAutomatedDiscoveryConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/UpdateAutomatedDiscoveryConfigurationResponse.proto b/fixture/UpdateAutomatedDiscoveryConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAutomatedDiscoveryConfigurationResponse.proto
diff --git a/fixture/UpdateClassificationJob.yaml b/fixture/UpdateClassificationJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateClassificationJob.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/UpdateClassificationJobResponse.proto b/fixture/UpdateClassificationJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateClassificationJobResponse.proto
diff --git a/fixture/UpdateClassificationScope.yaml b/fixture/UpdateClassificationScope.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateClassificationScope.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/UpdateClassificationScopeResponse.proto b/fixture/UpdateClassificationScopeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateClassificationScopeResponse.proto
diff --git a/fixture/UpdateFindingsFilter.yaml b/fixture/UpdateFindingsFilter.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFindingsFilter.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/UpdateFindingsFilterResponse.proto b/fixture/UpdateFindingsFilterResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFindingsFilterResponse.proto
diff --git a/fixture/UpdateMacieSession.yaml b/fixture/UpdateMacieSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateMacieSession.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/UpdateMacieSessionResponse.proto b/fixture/UpdateMacieSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateMacieSessionResponse.proto
diff --git a/fixture/UpdateMemberSession.yaml b/fixture/UpdateMemberSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateMemberSession.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/UpdateMemberSessionResponse.proto b/fixture/UpdateMemberSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateMemberSessionResponse.proto
diff --git a/fixture/UpdateOrganizationConfiguration.yaml b/fixture/UpdateOrganizationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateOrganizationConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/UpdateOrganizationConfigurationResponse.proto b/fixture/UpdateOrganizationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateOrganizationConfigurationResponse.proto
diff --git a/fixture/UpdateResourceProfile.yaml b/fixture/UpdateResourceProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResourceProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/UpdateResourceProfileDetections.yaml b/fixture/UpdateResourceProfileDetections.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResourceProfileDetections.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/UpdateResourceProfileDetectionsResponse.proto b/fixture/UpdateResourceProfileDetectionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResourceProfileDetectionsResponse.proto
diff --git a/fixture/UpdateResourceProfileResponse.proto b/fixture/UpdateResourceProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResourceProfileResponse.proto
diff --git a/fixture/UpdateRevealConfiguration.yaml b/fixture/UpdateRevealConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRevealConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/UpdateRevealConfigurationResponse.proto b/fixture/UpdateRevealConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRevealConfigurationResponse.proto
diff --git a/fixture/UpdateSensitivityInspectionTemplate.yaml b/fixture/UpdateSensitivityInspectionTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSensitivityInspectionTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/macie2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  macie2.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/UpdateSensitivityInspectionTemplateResponse.proto b/fixture/UpdateSensitivityInspectionTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSensitivityInspectionTemplateResponse.proto
diff --git a/gen/Amazonka/MacieV2.hs b/gen/Amazonka/MacieV2.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2.hs
@@ -0,0 +1,1354 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.MacieV2
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2020-01-01@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon Macie
+module Amazonka.MacieV2
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** UnprocessableEntityException
+    _UnprocessableEntityException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- ** FindingRevealed
+    newFindingRevealed,
+
+    -- * Operations
+    -- $operations
+
+    -- ** AcceptInvitation
+    AcceptInvitation (AcceptInvitation'),
+    newAcceptInvitation,
+    AcceptInvitationResponse (AcceptInvitationResponse'),
+    newAcceptInvitationResponse,
+
+    -- ** BatchGetCustomDataIdentifiers
+    BatchGetCustomDataIdentifiers (BatchGetCustomDataIdentifiers'),
+    newBatchGetCustomDataIdentifiers,
+    BatchGetCustomDataIdentifiersResponse (BatchGetCustomDataIdentifiersResponse'),
+    newBatchGetCustomDataIdentifiersResponse,
+
+    -- ** CreateAllowList
+    CreateAllowList (CreateAllowList'),
+    newCreateAllowList,
+    CreateAllowListResponse (CreateAllowListResponse'),
+    newCreateAllowListResponse,
+
+    -- ** CreateClassificationJob
+    CreateClassificationJob (CreateClassificationJob'),
+    newCreateClassificationJob,
+    CreateClassificationJobResponse (CreateClassificationJobResponse'),
+    newCreateClassificationJobResponse,
+
+    -- ** CreateCustomDataIdentifier
+    CreateCustomDataIdentifier (CreateCustomDataIdentifier'),
+    newCreateCustomDataIdentifier,
+    CreateCustomDataIdentifierResponse (CreateCustomDataIdentifierResponse'),
+    newCreateCustomDataIdentifierResponse,
+
+    -- ** CreateFindingsFilter
+    CreateFindingsFilter (CreateFindingsFilter'),
+    newCreateFindingsFilter,
+    CreateFindingsFilterResponse (CreateFindingsFilterResponse'),
+    newCreateFindingsFilterResponse,
+
+    -- ** CreateInvitations
+    CreateInvitations (CreateInvitations'),
+    newCreateInvitations,
+    CreateInvitationsResponse (CreateInvitationsResponse'),
+    newCreateInvitationsResponse,
+
+    -- ** CreateMember
+    CreateMember (CreateMember'),
+    newCreateMember,
+    CreateMemberResponse (CreateMemberResponse'),
+    newCreateMemberResponse,
+
+    -- ** CreateSampleFindings
+    CreateSampleFindings (CreateSampleFindings'),
+    newCreateSampleFindings,
+    CreateSampleFindingsResponse (CreateSampleFindingsResponse'),
+    newCreateSampleFindingsResponse,
+
+    -- ** DeclineInvitations
+    DeclineInvitations (DeclineInvitations'),
+    newDeclineInvitations,
+    DeclineInvitationsResponse (DeclineInvitationsResponse'),
+    newDeclineInvitationsResponse,
+
+    -- ** DeleteAllowList
+    DeleteAllowList (DeleteAllowList'),
+    newDeleteAllowList,
+    DeleteAllowListResponse (DeleteAllowListResponse'),
+    newDeleteAllowListResponse,
+
+    -- ** DeleteCustomDataIdentifier
+    DeleteCustomDataIdentifier (DeleteCustomDataIdentifier'),
+    newDeleteCustomDataIdentifier,
+    DeleteCustomDataIdentifierResponse (DeleteCustomDataIdentifierResponse'),
+    newDeleteCustomDataIdentifierResponse,
+
+    -- ** DeleteFindingsFilter
+    DeleteFindingsFilter (DeleteFindingsFilter'),
+    newDeleteFindingsFilter,
+    DeleteFindingsFilterResponse (DeleteFindingsFilterResponse'),
+    newDeleteFindingsFilterResponse,
+
+    -- ** DeleteInvitations
+    DeleteInvitations (DeleteInvitations'),
+    newDeleteInvitations,
+    DeleteInvitationsResponse (DeleteInvitationsResponse'),
+    newDeleteInvitationsResponse,
+
+    -- ** DeleteMember
+    DeleteMember (DeleteMember'),
+    newDeleteMember,
+    DeleteMemberResponse (DeleteMemberResponse'),
+    newDeleteMemberResponse,
+
+    -- ** DescribeBuckets (Paginated)
+    DescribeBuckets (DescribeBuckets'),
+    newDescribeBuckets,
+    DescribeBucketsResponse (DescribeBucketsResponse'),
+    newDescribeBucketsResponse,
+
+    -- ** DescribeClassificationJob
+    DescribeClassificationJob (DescribeClassificationJob'),
+    newDescribeClassificationJob,
+    DescribeClassificationJobResponse (DescribeClassificationJobResponse'),
+    newDescribeClassificationJobResponse,
+
+    -- ** DescribeOrganizationConfiguration
+    DescribeOrganizationConfiguration (DescribeOrganizationConfiguration'),
+    newDescribeOrganizationConfiguration,
+    DescribeOrganizationConfigurationResponse (DescribeOrganizationConfigurationResponse'),
+    newDescribeOrganizationConfigurationResponse,
+
+    -- ** DisableMacie
+    DisableMacie (DisableMacie'),
+    newDisableMacie,
+    DisableMacieResponse (DisableMacieResponse'),
+    newDisableMacieResponse,
+
+    -- ** DisableOrganizationAdminAccount
+    DisableOrganizationAdminAccount (DisableOrganizationAdminAccount'),
+    newDisableOrganizationAdminAccount,
+    DisableOrganizationAdminAccountResponse (DisableOrganizationAdminAccountResponse'),
+    newDisableOrganizationAdminAccountResponse,
+
+    -- ** DisassociateFromAdministratorAccount
+    DisassociateFromAdministratorAccount (DisassociateFromAdministratorAccount'),
+    newDisassociateFromAdministratorAccount,
+    DisassociateFromAdministratorAccountResponse (DisassociateFromAdministratorAccountResponse'),
+    newDisassociateFromAdministratorAccountResponse,
+
+    -- ** DisassociateFromMasterAccount
+    DisassociateFromMasterAccount (DisassociateFromMasterAccount'),
+    newDisassociateFromMasterAccount,
+    DisassociateFromMasterAccountResponse (DisassociateFromMasterAccountResponse'),
+    newDisassociateFromMasterAccountResponse,
+
+    -- ** DisassociateMember
+    DisassociateMember (DisassociateMember'),
+    newDisassociateMember,
+    DisassociateMemberResponse (DisassociateMemberResponse'),
+    newDisassociateMemberResponse,
+
+    -- ** EnableMacie
+    EnableMacie (EnableMacie'),
+    newEnableMacie,
+    EnableMacieResponse (EnableMacieResponse'),
+    newEnableMacieResponse,
+
+    -- ** EnableOrganizationAdminAccount
+    EnableOrganizationAdminAccount (EnableOrganizationAdminAccount'),
+    newEnableOrganizationAdminAccount,
+    EnableOrganizationAdminAccountResponse (EnableOrganizationAdminAccountResponse'),
+    newEnableOrganizationAdminAccountResponse,
+
+    -- ** GetAdministratorAccount
+    GetAdministratorAccount (GetAdministratorAccount'),
+    newGetAdministratorAccount,
+    GetAdministratorAccountResponse (GetAdministratorAccountResponse'),
+    newGetAdministratorAccountResponse,
+
+    -- ** GetAllowList
+    GetAllowList (GetAllowList'),
+    newGetAllowList,
+    GetAllowListResponse (GetAllowListResponse'),
+    newGetAllowListResponse,
+
+    -- ** GetAutomatedDiscoveryConfiguration
+    GetAutomatedDiscoveryConfiguration (GetAutomatedDiscoveryConfiguration'),
+    newGetAutomatedDiscoveryConfiguration,
+    GetAutomatedDiscoveryConfigurationResponse (GetAutomatedDiscoveryConfigurationResponse'),
+    newGetAutomatedDiscoveryConfigurationResponse,
+
+    -- ** GetBucketStatistics
+    GetBucketStatistics (GetBucketStatistics'),
+    newGetBucketStatistics,
+    GetBucketStatisticsResponse (GetBucketStatisticsResponse'),
+    newGetBucketStatisticsResponse,
+
+    -- ** GetClassificationExportConfiguration
+    GetClassificationExportConfiguration (GetClassificationExportConfiguration'),
+    newGetClassificationExportConfiguration,
+    GetClassificationExportConfigurationResponse (GetClassificationExportConfigurationResponse'),
+    newGetClassificationExportConfigurationResponse,
+
+    -- ** GetClassificationScope
+    GetClassificationScope (GetClassificationScope'),
+    newGetClassificationScope,
+    GetClassificationScopeResponse (GetClassificationScopeResponse'),
+    newGetClassificationScopeResponse,
+
+    -- ** GetCustomDataIdentifier
+    GetCustomDataIdentifier (GetCustomDataIdentifier'),
+    newGetCustomDataIdentifier,
+    GetCustomDataIdentifierResponse (GetCustomDataIdentifierResponse'),
+    newGetCustomDataIdentifierResponse,
+
+    -- ** GetFindingStatistics
+    GetFindingStatistics (GetFindingStatistics'),
+    newGetFindingStatistics,
+    GetFindingStatisticsResponse (GetFindingStatisticsResponse'),
+    newGetFindingStatisticsResponse,
+
+    -- ** GetFindings
+    GetFindings (GetFindings'),
+    newGetFindings,
+    GetFindingsResponse (GetFindingsResponse'),
+    newGetFindingsResponse,
+
+    -- ** GetFindingsFilter
+    GetFindingsFilter (GetFindingsFilter'),
+    newGetFindingsFilter,
+    GetFindingsFilterResponse (GetFindingsFilterResponse'),
+    newGetFindingsFilterResponse,
+
+    -- ** GetFindingsPublicationConfiguration
+    GetFindingsPublicationConfiguration (GetFindingsPublicationConfiguration'),
+    newGetFindingsPublicationConfiguration,
+    GetFindingsPublicationConfigurationResponse (GetFindingsPublicationConfigurationResponse'),
+    newGetFindingsPublicationConfigurationResponse,
+
+    -- ** GetInvitationsCount
+    GetInvitationsCount (GetInvitationsCount'),
+    newGetInvitationsCount,
+    GetInvitationsCountResponse (GetInvitationsCountResponse'),
+    newGetInvitationsCountResponse,
+
+    -- ** GetMacieSession
+    GetMacieSession (GetMacieSession'),
+    newGetMacieSession,
+    GetMacieSessionResponse (GetMacieSessionResponse'),
+    newGetMacieSessionResponse,
+
+    -- ** GetMasterAccount
+    GetMasterAccount (GetMasterAccount'),
+    newGetMasterAccount,
+    GetMasterAccountResponse (GetMasterAccountResponse'),
+    newGetMasterAccountResponse,
+
+    -- ** GetMember
+    GetMember (GetMember'),
+    newGetMember,
+    GetMemberResponse (GetMemberResponse'),
+    newGetMemberResponse,
+
+    -- ** GetResourceProfile
+    GetResourceProfile (GetResourceProfile'),
+    newGetResourceProfile,
+    GetResourceProfileResponse (GetResourceProfileResponse'),
+    newGetResourceProfileResponse,
+
+    -- ** GetRevealConfiguration
+    GetRevealConfiguration (GetRevealConfiguration'),
+    newGetRevealConfiguration,
+    GetRevealConfigurationResponse (GetRevealConfigurationResponse'),
+    newGetRevealConfigurationResponse,
+
+    -- ** GetSensitiveDataOccurrences
+    GetSensitiveDataOccurrences (GetSensitiveDataOccurrences'),
+    newGetSensitiveDataOccurrences,
+    GetSensitiveDataOccurrencesResponse (GetSensitiveDataOccurrencesResponse'),
+    newGetSensitiveDataOccurrencesResponse,
+
+    -- ** GetSensitiveDataOccurrencesAvailability
+    GetSensitiveDataOccurrencesAvailability (GetSensitiveDataOccurrencesAvailability'),
+    newGetSensitiveDataOccurrencesAvailability,
+    GetSensitiveDataOccurrencesAvailabilityResponse (GetSensitiveDataOccurrencesAvailabilityResponse'),
+    newGetSensitiveDataOccurrencesAvailabilityResponse,
+
+    -- ** GetSensitivityInspectionTemplate
+    GetSensitivityInspectionTemplate (GetSensitivityInspectionTemplate'),
+    newGetSensitivityInspectionTemplate,
+    GetSensitivityInspectionTemplateResponse (GetSensitivityInspectionTemplateResponse'),
+    newGetSensitivityInspectionTemplateResponse,
+
+    -- ** GetUsageStatistics (Paginated)
+    GetUsageStatistics (GetUsageStatistics'),
+    newGetUsageStatistics,
+    GetUsageStatisticsResponse (GetUsageStatisticsResponse'),
+    newGetUsageStatisticsResponse,
+
+    -- ** GetUsageTotals
+    GetUsageTotals (GetUsageTotals'),
+    newGetUsageTotals,
+    GetUsageTotalsResponse (GetUsageTotalsResponse'),
+    newGetUsageTotalsResponse,
+
+    -- ** ListAllowLists (Paginated)
+    ListAllowLists (ListAllowLists'),
+    newListAllowLists,
+    ListAllowListsResponse (ListAllowListsResponse'),
+    newListAllowListsResponse,
+
+    -- ** ListClassificationJobs (Paginated)
+    ListClassificationJobs (ListClassificationJobs'),
+    newListClassificationJobs,
+    ListClassificationJobsResponse (ListClassificationJobsResponse'),
+    newListClassificationJobsResponse,
+
+    -- ** ListClassificationScopes (Paginated)
+    ListClassificationScopes (ListClassificationScopes'),
+    newListClassificationScopes,
+    ListClassificationScopesResponse (ListClassificationScopesResponse'),
+    newListClassificationScopesResponse,
+
+    -- ** ListCustomDataIdentifiers (Paginated)
+    ListCustomDataIdentifiers (ListCustomDataIdentifiers'),
+    newListCustomDataIdentifiers,
+    ListCustomDataIdentifiersResponse (ListCustomDataIdentifiersResponse'),
+    newListCustomDataIdentifiersResponse,
+
+    -- ** ListFindings (Paginated)
+    ListFindings (ListFindings'),
+    newListFindings,
+    ListFindingsResponse (ListFindingsResponse'),
+    newListFindingsResponse,
+
+    -- ** ListFindingsFilters (Paginated)
+    ListFindingsFilters (ListFindingsFilters'),
+    newListFindingsFilters,
+    ListFindingsFiltersResponse (ListFindingsFiltersResponse'),
+    newListFindingsFiltersResponse,
+
+    -- ** ListInvitations (Paginated)
+    ListInvitations (ListInvitations'),
+    newListInvitations,
+    ListInvitationsResponse (ListInvitationsResponse'),
+    newListInvitationsResponse,
+
+    -- ** ListManagedDataIdentifiers (Paginated)
+    ListManagedDataIdentifiers (ListManagedDataIdentifiers'),
+    newListManagedDataIdentifiers,
+    ListManagedDataIdentifiersResponse (ListManagedDataIdentifiersResponse'),
+    newListManagedDataIdentifiersResponse,
+
+    -- ** ListMembers (Paginated)
+    ListMembers (ListMembers'),
+    newListMembers,
+    ListMembersResponse (ListMembersResponse'),
+    newListMembersResponse,
+
+    -- ** ListOrganizationAdminAccounts (Paginated)
+    ListOrganizationAdminAccounts (ListOrganizationAdminAccounts'),
+    newListOrganizationAdminAccounts,
+    ListOrganizationAdminAccountsResponse (ListOrganizationAdminAccountsResponse'),
+    newListOrganizationAdminAccountsResponse,
+
+    -- ** ListResourceProfileArtifacts (Paginated)
+    ListResourceProfileArtifacts (ListResourceProfileArtifacts'),
+    newListResourceProfileArtifacts,
+    ListResourceProfileArtifactsResponse (ListResourceProfileArtifactsResponse'),
+    newListResourceProfileArtifactsResponse,
+
+    -- ** ListResourceProfileDetections (Paginated)
+    ListResourceProfileDetections (ListResourceProfileDetections'),
+    newListResourceProfileDetections,
+    ListResourceProfileDetectionsResponse (ListResourceProfileDetectionsResponse'),
+    newListResourceProfileDetectionsResponse,
+
+    -- ** ListSensitivityInspectionTemplates (Paginated)
+    ListSensitivityInspectionTemplates (ListSensitivityInspectionTemplates'),
+    newListSensitivityInspectionTemplates,
+    ListSensitivityInspectionTemplatesResponse (ListSensitivityInspectionTemplatesResponse'),
+    newListSensitivityInspectionTemplatesResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** PutClassificationExportConfiguration
+    PutClassificationExportConfiguration (PutClassificationExportConfiguration'),
+    newPutClassificationExportConfiguration,
+    PutClassificationExportConfigurationResponse (PutClassificationExportConfigurationResponse'),
+    newPutClassificationExportConfigurationResponse,
+
+    -- ** PutFindingsPublicationConfiguration
+    PutFindingsPublicationConfiguration (PutFindingsPublicationConfiguration'),
+    newPutFindingsPublicationConfiguration,
+    PutFindingsPublicationConfigurationResponse (PutFindingsPublicationConfigurationResponse'),
+    newPutFindingsPublicationConfigurationResponse,
+
+    -- ** SearchResources (Paginated)
+    SearchResources (SearchResources'),
+    newSearchResources,
+    SearchResourcesResponse (SearchResourcesResponse'),
+    newSearchResourcesResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** TestCustomDataIdentifier
+    TestCustomDataIdentifier (TestCustomDataIdentifier'),
+    newTestCustomDataIdentifier,
+    TestCustomDataIdentifierResponse (TestCustomDataIdentifierResponse'),
+    newTestCustomDataIdentifierResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateAllowList
+    UpdateAllowList (UpdateAllowList'),
+    newUpdateAllowList,
+    UpdateAllowListResponse (UpdateAllowListResponse'),
+    newUpdateAllowListResponse,
+
+    -- ** UpdateAutomatedDiscoveryConfiguration
+    UpdateAutomatedDiscoveryConfiguration (UpdateAutomatedDiscoveryConfiguration'),
+    newUpdateAutomatedDiscoveryConfiguration,
+    UpdateAutomatedDiscoveryConfigurationResponse (UpdateAutomatedDiscoveryConfigurationResponse'),
+    newUpdateAutomatedDiscoveryConfigurationResponse,
+
+    -- ** UpdateClassificationJob
+    UpdateClassificationJob (UpdateClassificationJob'),
+    newUpdateClassificationJob,
+    UpdateClassificationJobResponse (UpdateClassificationJobResponse'),
+    newUpdateClassificationJobResponse,
+
+    -- ** UpdateClassificationScope
+    UpdateClassificationScope (UpdateClassificationScope'),
+    newUpdateClassificationScope,
+    UpdateClassificationScopeResponse (UpdateClassificationScopeResponse'),
+    newUpdateClassificationScopeResponse,
+
+    -- ** UpdateFindingsFilter
+    UpdateFindingsFilter (UpdateFindingsFilter'),
+    newUpdateFindingsFilter,
+    UpdateFindingsFilterResponse (UpdateFindingsFilterResponse'),
+    newUpdateFindingsFilterResponse,
+
+    -- ** UpdateMacieSession
+    UpdateMacieSession (UpdateMacieSession'),
+    newUpdateMacieSession,
+    UpdateMacieSessionResponse (UpdateMacieSessionResponse'),
+    newUpdateMacieSessionResponse,
+
+    -- ** UpdateMemberSession
+    UpdateMemberSession (UpdateMemberSession'),
+    newUpdateMemberSession,
+    UpdateMemberSessionResponse (UpdateMemberSessionResponse'),
+    newUpdateMemberSessionResponse,
+
+    -- ** UpdateOrganizationConfiguration
+    UpdateOrganizationConfiguration (UpdateOrganizationConfiguration'),
+    newUpdateOrganizationConfiguration,
+    UpdateOrganizationConfigurationResponse (UpdateOrganizationConfigurationResponse'),
+    newUpdateOrganizationConfigurationResponse,
+
+    -- ** UpdateResourceProfile
+    UpdateResourceProfile (UpdateResourceProfile'),
+    newUpdateResourceProfile,
+    UpdateResourceProfileResponse (UpdateResourceProfileResponse'),
+    newUpdateResourceProfileResponse,
+
+    -- ** UpdateResourceProfileDetections
+    UpdateResourceProfileDetections (UpdateResourceProfileDetections'),
+    newUpdateResourceProfileDetections,
+    UpdateResourceProfileDetectionsResponse (UpdateResourceProfileDetectionsResponse'),
+    newUpdateResourceProfileDetectionsResponse,
+
+    -- ** UpdateRevealConfiguration
+    UpdateRevealConfiguration (UpdateRevealConfiguration'),
+    newUpdateRevealConfiguration,
+    UpdateRevealConfigurationResponse (UpdateRevealConfigurationResponse'),
+    newUpdateRevealConfigurationResponse,
+
+    -- ** UpdateSensitivityInspectionTemplate
+    UpdateSensitivityInspectionTemplate (UpdateSensitivityInspectionTemplate'),
+    newUpdateSensitivityInspectionTemplate,
+    UpdateSensitivityInspectionTemplateResponse (UpdateSensitivityInspectionTemplateResponse'),
+    newUpdateSensitivityInspectionTemplateResponse,
+
+    -- * Types
+
+    -- ** AdminStatus
+    AdminStatus (..),
+
+    -- ** AllowListStatusCode
+    AllowListStatusCode (..),
+
+    -- ** AllowsUnencryptedObjectUploads
+    AllowsUnencryptedObjectUploads (..),
+
+    -- ** AutomatedDiscoveryStatus
+    AutomatedDiscoveryStatus (..),
+
+    -- ** AvailabilityCode
+    AvailabilityCode (..),
+
+    -- ** BucketMetadataErrorCode
+    BucketMetadataErrorCode (..),
+
+    -- ** ClassificationScopeUpdateOperation
+    ClassificationScopeUpdateOperation (..),
+
+    -- ** Currency
+    Currency (..),
+
+    -- ** DataIdentifierSeverity
+    DataIdentifierSeverity (..),
+
+    -- ** DataIdentifierType
+    DataIdentifierType (..),
+
+    -- ** DayOfWeek
+    DayOfWeek (..),
+
+    -- ** EffectivePermission
+    EffectivePermission (..),
+
+    -- ** EncryptionType
+    EncryptionType (..),
+
+    -- ** ErrorCode
+    ErrorCode (..),
+
+    -- ** FindingActionType
+    FindingActionType (..),
+
+    -- ** FindingCategory
+    FindingCategory (..),
+
+    -- ** FindingPublishingFrequency
+    FindingPublishingFrequency (..),
+
+    -- ** FindingStatisticsSortAttributeName
+    FindingStatisticsSortAttributeName (..),
+
+    -- ** FindingType
+    FindingType (..),
+
+    -- ** FindingsFilterAction
+    FindingsFilterAction (..),
+
+    -- ** GroupBy
+    GroupBy (..),
+
+    -- ** IsDefinedInJob
+    IsDefinedInJob (..),
+
+    -- ** IsMonitoredByJob
+    IsMonitoredByJob (..),
+
+    -- ** JobComparator
+    JobComparator (..),
+
+    -- ** JobStatus
+    JobStatus (..),
+
+    -- ** JobType
+    JobType (..),
+
+    -- ** LastRunErrorStatusCode
+    LastRunErrorStatusCode (..),
+
+    -- ** ListJobsFilterKey
+    ListJobsFilterKey (..),
+
+    -- ** ListJobsSortAttributeName
+    ListJobsSortAttributeName (..),
+
+    -- ** MacieStatus
+    MacieStatus (..),
+
+    -- ** ManagedDataIdentifierSelector
+    ManagedDataIdentifierSelector (..),
+
+    -- ** OrderBy
+    OrderBy (..),
+
+    -- ** OriginType
+    OriginType (..),
+
+    -- ** RelationshipStatus
+    RelationshipStatus (..),
+
+    -- ** RevealRequestStatus
+    RevealRequestStatus (..),
+
+    -- ** RevealStatus
+    RevealStatus (..),
+
+    -- ** ScopeFilterKey
+    ScopeFilterKey (..),
+
+    -- ** SearchResourcesComparator
+    SearchResourcesComparator (..),
+
+    -- ** SearchResourcesSimpleCriterionKey
+    SearchResourcesSimpleCriterionKey (..),
+
+    -- ** SearchResourcesSortAttributeName
+    SearchResourcesSortAttributeName (..),
+
+    -- ** SensitiveDataItemCategory
+    SensitiveDataItemCategory (..),
+
+    -- ** SeverityDescription
+    SeverityDescription (..),
+
+    -- ** SharedAccess
+    SharedAccess (..),
+
+    -- ** SimpleCriterionKeyForJob
+    SimpleCriterionKeyForJob (..),
+
+    -- ** StorageClass
+    StorageClass (..),
+
+    -- ** TagTarget
+    TagTarget (..),
+
+    -- ** TimeRange
+    TimeRange (..),
+
+    -- ** Type
+    Type (..),
+
+    -- ** UnavailabilityReasonCode
+    UnavailabilityReasonCode (..),
+
+    -- ** Unit
+    Unit (..),
+
+    -- ** UsageStatisticsFilterComparator
+    UsageStatisticsFilterComparator (..),
+
+    -- ** UsageStatisticsFilterKey
+    UsageStatisticsFilterKey (..),
+
+    -- ** UsageStatisticsSortKey
+    UsageStatisticsSortKey (..),
+
+    -- ** UsageType
+    UsageType (..),
+
+    -- ** UserIdentityType
+    UserIdentityType (..),
+
+    -- ** AccessControlList
+    AccessControlList (AccessControlList'),
+    newAccessControlList,
+
+    -- ** AccountDetail
+    AccountDetail (AccountDetail'),
+    newAccountDetail,
+
+    -- ** AccountLevelPermissions
+    AccountLevelPermissions (AccountLevelPermissions'),
+    newAccountLevelPermissions,
+
+    -- ** AdminAccount
+    AdminAccount (AdminAccount'),
+    newAdminAccount,
+
+    -- ** AllowListCriteria
+    AllowListCriteria (AllowListCriteria'),
+    newAllowListCriteria,
+
+    -- ** AllowListStatus
+    AllowListStatus (AllowListStatus'),
+    newAllowListStatus,
+
+    -- ** AllowListSummary
+    AllowListSummary (AllowListSummary'),
+    newAllowListSummary,
+
+    -- ** ApiCallDetails
+    ApiCallDetails (ApiCallDetails'),
+    newApiCallDetails,
+
+    -- ** AssumedRole
+    AssumedRole (AssumedRole'),
+    newAssumedRole,
+
+    -- ** AwsAccount
+    AwsAccount (AwsAccount'),
+    newAwsAccount,
+
+    -- ** AwsService
+    AwsService (AwsService'),
+    newAwsService,
+
+    -- ** BatchGetCustomDataIdentifierSummary
+    BatchGetCustomDataIdentifierSummary (BatchGetCustomDataIdentifierSummary'),
+    newBatchGetCustomDataIdentifierSummary,
+
+    -- ** BlockPublicAccess
+    BlockPublicAccess (BlockPublicAccess'),
+    newBlockPublicAccess,
+
+    -- ** BucketCountByEffectivePermission
+    BucketCountByEffectivePermission (BucketCountByEffectivePermission'),
+    newBucketCountByEffectivePermission,
+
+    -- ** BucketCountByEncryptionType
+    BucketCountByEncryptionType (BucketCountByEncryptionType'),
+    newBucketCountByEncryptionType,
+
+    -- ** BucketCountBySharedAccessType
+    BucketCountBySharedAccessType (BucketCountBySharedAccessType'),
+    newBucketCountBySharedAccessType,
+
+    -- ** BucketCountPolicyAllowsUnencryptedObjectUploads
+    BucketCountPolicyAllowsUnencryptedObjectUploads (BucketCountPolicyAllowsUnencryptedObjectUploads'),
+    newBucketCountPolicyAllowsUnencryptedObjectUploads,
+
+    -- ** BucketCriteriaAdditionalProperties
+    BucketCriteriaAdditionalProperties (BucketCriteriaAdditionalProperties'),
+    newBucketCriteriaAdditionalProperties,
+
+    -- ** BucketLevelPermissions
+    BucketLevelPermissions (BucketLevelPermissions'),
+    newBucketLevelPermissions,
+
+    -- ** BucketMetadata
+    BucketMetadata (BucketMetadata'),
+    newBucketMetadata,
+
+    -- ** BucketPermissionConfiguration
+    BucketPermissionConfiguration (BucketPermissionConfiguration'),
+    newBucketPermissionConfiguration,
+
+    -- ** BucketPolicy
+    BucketPolicy (BucketPolicy'),
+    newBucketPolicy,
+
+    -- ** BucketPublicAccess
+    BucketPublicAccess (BucketPublicAccess'),
+    newBucketPublicAccess,
+
+    -- ** BucketServerSideEncryption
+    BucketServerSideEncryption (BucketServerSideEncryption'),
+    newBucketServerSideEncryption,
+
+    -- ** BucketSortCriteria
+    BucketSortCriteria (BucketSortCriteria'),
+    newBucketSortCriteria,
+
+    -- ** BucketStatisticsBySensitivity
+    BucketStatisticsBySensitivity (BucketStatisticsBySensitivity'),
+    newBucketStatisticsBySensitivity,
+
+    -- ** Cell
+    Cell (Cell'),
+    newCell,
+
+    -- ** ClassificationDetails
+    ClassificationDetails (ClassificationDetails'),
+    newClassificationDetails,
+
+    -- ** ClassificationExportConfiguration
+    ClassificationExportConfiguration (ClassificationExportConfiguration'),
+    newClassificationExportConfiguration,
+
+    -- ** ClassificationResult
+    ClassificationResult (ClassificationResult'),
+    newClassificationResult,
+
+    -- ** ClassificationResultStatus
+    ClassificationResultStatus (ClassificationResultStatus'),
+    newClassificationResultStatus,
+
+    -- ** ClassificationScopeSummary
+    ClassificationScopeSummary (ClassificationScopeSummary'),
+    newClassificationScopeSummary,
+
+    -- ** CriteriaBlockForJob
+    CriteriaBlockForJob (CriteriaBlockForJob'),
+    newCriteriaBlockForJob,
+
+    -- ** CriteriaForJob
+    CriteriaForJob (CriteriaForJob'),
+    newCriteriaForJob,
+
+    -- ** CriterionAdditionalProperties
+    CriterionAdditionalProperties (CriterionAdditionalProperties'),
+    newCriterionAdditionalProperties,
+
+    -- ** CustomDataIdentifierSummary
+    CustomDataIdentifierSummary (CustomDataIdentifierSummary'),
+    newCustomDataIdentifierSummary,
+
+    -- ** CustomDataIdentifiers
+    CustomDataIdentifiers (CustomDataIdentifiers'),
+    newCustomDataIdentifiers,
+
+    -- ** CustomDetection
+    CustomDetection (CustomDetection'),
+    newCustomDetection,
+
+    -- ** DailySchedule
+    DailySchedule (DailySchedule'),
+    newDailySchedule,
+
+    -- ** DefaultDetection
+    DefaultDetection (DefaultDetection'),
+    newDefaultDetection,
+
+    -- ** DetectedDataDetails
+    DetectedDataDetails (DetectedDataDetails'),
+    newDetectedDataDetails,
+
+    -- ** Detection
+    Detection (Detection'),
+    newDetection,
+
+    -- ** DomainDetails
+    DomainDetails (DomainDetails'),
+    newDomainDetails,
+
+    -- ** FederatedUser
+    FederatedUser (FederatedUser'),
+    newFederatedUser,
+
+    -- ** Finding
+    Finding (Finding'),
+    newFinding,
+
+    -- ** FindingAction
+    FindingAction (FindingAction'),
+    newFindingAction,
+
+    -- ** FindingActor
+    FindingActor (FindingActor'),
+    newFindingActor,
+
+    -- ** FindingCriteria
+    FindingCriteria (FindingCriteria'),
+    newFindingCriteria,
+
+    -- ** FindingStatisticsSortCriteria
+    FindingStatisticsSortCriteria (FindingStatisticsSortCriteria'),
+    newFindingStatisticsSortCriteria,
+
+    -- ** FindingsFilterListItem
+    FindingsFilterListItem (FindingsFilterListItem'),
+    newFindingsFilterListItem,
+
+    -- ** GroupCount
+    GroupCount (GroupCount'),
+    newGroupCount,
+
+    -- ** IamUser
+    IamUser (IamUser'),
+    newIamUser,
+
+    -- ** Invitation
+    Invitation (Invitation'),
+    newInvitation,
+
+    -- ** IpAddressDetails
+    IpAddressDetails (IpAddressDetails'),
+    newIpAddressDetails,
+
+    -- ** IpCity
+    IpCity (IpCity'),
+    newIpCity,
+
+    -- ** IpCountry
+    IpCountry (IpCountry'),
+    newIpCountry,
+
+    -- ** IpGeoLocation
+    IpGeoLocation (IpGeoLocation'),
+    newIpGeoLocation,
+
+    -- ** IpOwner
+    IpOwner (IpOwner'),
+    newIpOwner,
+
+    -- ** JobDetails
+    JobDetails (JobDetails'),
+    newJobDetails,
+
+    -- ** JobScheduleFrequency
+    JobScheduleFrequency (JobScheduleFrequency'),
+    newJobScheduleFrequency,
+
+    -- ** JobScopeTerm
+    JobScopeTerm (JobScopeTerm'),
+    newJobScopeTerm,
+
+    -- ** JobScopingBlock
+    JobScopingBlock (JobScopingBlock'),
+    newJobScopingBlock,
+
+    -- ** JobSummary
+    JobSummary (JobSummary'),
+    newJobSummary,
+
+    -- ** KeyValuePair
+    KeyValuePair (KeyValuePair'),
+    newKeyValuePair,
+
+    -- ** LastRunErrorStatus
+    LastRunErrorStatus (LastRunErrorStatus'),
+    newLastRunErrorStatus,
+
+    -- ** ListJobsFilterCriteria
+    ListJobsFilterCriteria (ListJobsFilterCriteria'),
+    newListJobsFilterCriteria,
+
+    -- ** ListJobsFilterTerm
+    ListJobsFilterTerm (ListJobsFilterTerm'),
+    newListJobsFilterTerm,
+
+    -- ** ListJobsSortCriteria
+    ListJobsSortCriteria (ListJobsSortCriteria'),
+    newListJobsSortCriteria,
+
+    -- ** ManagedDataIdentifierSummary
+    ManagedDataIdentifierSummary (ManagedDataIdentifierSummary'),
+    newManagedDataIdentifierSummary,
+
+    -- ** MatchingBucket
+    MatchingBucket (MatchingBucket'),
+    newMatchingBucket,
+
+    -- ** MatchingResource
+    MatchingResource (MatchingResource'),
+    newMatchingResource,
+
+    -- ** Member
+    Member (Member'),
+    newMember,
+
+    -- ** MonthlySchedule
+    MonthlySchedule (MonthlySchedule'),
+    newMonthlySchedule,
+
+    -- ** ObjectCountByEncryptionType
+    ObjectCountByEncryptionType (ObjectCountByEncryptionType'),
+    newObjectCountByEncryptionType,
+
+    -- ** ObjectLevelStatistics
+    ObjectLevelStatistics (ObjectLevelStatistics'),
+    newObjectLevelStatistics,
+
+    -- ** Occurrences
+    Occurrences (Occurrences'),
+    newOccurrences,
+
+    -- ** Page
+    Page (Page'),
+    newPage,
+
+    -- ** PolicyDetails
+    PolicyDetails (PolicyDetails'),
+    newPolicyDetails,
+
+    -- ** Range
+    Range (Range'),
+    newRange,
+
+    -- ** Record
+    Record (Record'),
+    newRecord,
+
+    -- ** ReplicationDetails
+    ReplicationDetails (ReplicationDetails'),
+    newReplicationDetails,
+
+    -- ** ResourceProfileArtifact
+    ResourceProfileArtifact (ResourceProfileArtifact'),
+    newResourceProfileArtifact,
+
+    -- ** ResourceStatistics
+    ResourceStatistics (ResourceStatistics'),
+    newResourceStatistics,
+
+    -- ** ResourcesAffected
+    ResourcesAffected (ResourcesAffected'),
+    newResourcesAffected,
+
+    -- ** RevealConfiguration
+    RevealConfiguration (RevealConfiguration'),
+    newRevealConfiguration,
+
+    -- ** S3Bucket
+    S3Bucket (S3Bucket'),
+    newS3Bucket,
+
+    -- ** S3BucketCriteriaForJob
+    S3BucketCriteriaForJob (S3BucketCriteriaForJob'),
+    newS3BucketCriteriaForJob,
+
+    -- ** S3BucketDefinitionForJob
+    S3BucketDefinitionForJob (S3BucketDefinitionForJob'),
+    newS3BucketDefinitionForJob,
+
+    -- ** S3BucketOwner
+    S3BucketOwner (S3BucketOwner'),
+    newS3BucketOwner,
+
+    -- ** S3ClassificationScope
+    S3ClassificationScope (S3ClassificationScope'),
+    newS3ClassificationScope,
+
+    -- ** S3ClassificationScopeExclusion
+    S3ClassificationScopeExclusion (S3ClassificationScopeExclusion'),
+    newS3ClassificationScopeExclusion,
+
+    -- ** S3ClassificationScopeExclusionUpdate
+    S3ClassificationScopeExclusionUpdate (S3ClassificationScopeExclusionUpdate'),
+    newS3ClassificationScopeExclusionUpdate,
+
+    -- ** S3ClassificationScopeUpdate
+    S3ClassificationScopeUpdate (S3ClassificationScopeUpdate'),
+    newS3ClassificationScopeUpdate,
+
+    -- ** S3Destination
+    S3Destination (S3Destination'),
+    newS3Destination,
+
+    -- ** S3JobDefinition
+    S3JobDefinition (S3JobDefinition'),
+    newS3JobDefinition,
+
+    -- ** S3Object
+    S3Object (S3Object'),
+    newS3Object,
+
+    -- ** S3WordsList
+    S3WordsList (S3WordsList'),
+    newS3WordsList,
+
+    -- ** Scoping
+    Scoping (Scoping'),
+    newScoping,
+
+    -- ** SearchResourcesBucketCriteria
+    SearchResourcesBucketCriteria (SearchResourcesBucketCriteria'),
+    newSearchResourcesBucketCriteria,
+
+    -- ** SearchResourcesCriteria
+    SearchResourcesCriteria (SearchResourcesCriteria'),
+    newSearchResourcesCriteria,
+
+    -- ** SearchResourcesCriteriaBlock
+    SearchResourcesCriteriaBlock (SearchResourcesCriteriaBlock'),
+    newSearchResourcesCriteriaBlock,
+
+    -- ** SearchResourcesSimpleCriterion
+    SearchResourcesSimpleCriterion (SearchResourcesSimpleCriterion'),
+    newSearchResourcesSimpleCriterion,
+
+    -- ** SearchResourcesSortCriteria
+    SearchResourcesSortCriteria (SearchResourcesSortCriteria'),
+    newSearchResourcesSortCriteria,
+
+    -- ** SearchResourcesTagCriterion
+    SearchResourcesTagCriterion (SearchResourcesTagCriterion'),
+    newSearchResourcesTagCriterion,
+
+    -- ** SearchResourcesTagCriterionPair
+    SearchResourcesTagCriterionPair (SearchResourcesTagCriterionPair'),
+    newSearchResourcesTagCriterionPair,
+
+    -- ** SecurityHubConfiguration
+    SecurityHubConfiguration (SecurityHubConfiguration'),
+    newSecurityHubConfiguration,
+
+    -- ** SensitiveDataItem
+    SensitiveDataItem (SensitiveDataItem'),
+    newSensitiveDataItem,
+
+    -- ** SensitivityAggregations
+    SensitivityAggregations (SensitivityAggregations'),
+    newSensitivityAggregations,
+
+    -- ** SensitivityInspectionTemplateExcludes
+    SensitivityInspectionTemplateExcludes (SensitivityInspectionTemplateExcludes'),
+    newSensitivityInspectionTemplateExcludes,
+
+    -- ** SensitivityInspectionTemplateIncludes
+    SensitivityInspectionTemplateIncludes (SensitivityInspectionTemplateIncludes'),
+    newSensitivityInspectionTemplateIncludes,
+
+    -- ** SensitivityInspectionTemplatesEntry
+    SensitivityInspectionTemplatesEntry (SensitivityInspectionTemplatesEntry'),
+    newSensitivityInspectionTemplatesEntry,
+
+    -- ** ServerSideEncryption
+    ServerSideEncryption (ServerSideEncryption'),
+    newServerSideEncryption,
+
+    -- ** ServiceLimit
+    ServiceLimit (ServiceLimit'),
+    newServiceLimit,
+
+    -- ** SessionContext
+    SessionContext (SessionContext'),
+    newSessionContext,
+
+    -- ** SessionContextAttributes
+    SessionContextAttributes (SessionContextAttributes'),
+    newSessionContextAttributes,
+
+    -- ** SessionIssuer
+    SessionIssuer (SessionIssuer'),
+    newSessionIssuer,
+
+    -- ** Severity
+    Severity (Severity'),
+    newSeverity,
+
+    -- ** SeverityLevel
+    SeverityLevel (SeverityLevel'),
+    newSeverityLevel,
+
+    -- ** SimpleCriterionForJob
+    SimpleCriterionForJob (SimpleCriterionForJob'),
+    newSimpleCriterionForJob,
+
+    -- ** SimpleScopeTerm
+    SimpleScopeTerm (SimpleScopeTerm'),
+    newSimpleScopeTerm,
+
+    -- ** SortCriteria
+    SortCriteria (SortCriteria'),
+    newSortCriteria,
+
+    -- ** Statistics
+    Statistics (Statistics'),
+    newStatistics,
+
+    -- ** SuppressDataIdentifier
+    SuppressDataIdentifier (SuppressDataIdentifier'),
+    newSuppressDataIdentifier,
+
+    -- ** TagCriterionForJob
+    TagCriterionForJob (TagCriterionForJob'),
+    newTagCriterionForJob,
+
+    -- ** TagCriterionPairForJob
+    TagCriterionPairForJob (TagCriterionPairForJob'),
+    newTagCriterionPairForJob,
+
+    -- ** TagScopeTerm
+    TagScopeTerm (TagScopeTerm'),
+    newTagScopeTerm,
+
+    -- ** TagValuePair
+    TagValuePair (TagValuePair'),
+    newTagValuePair,
+
+    -- ** UnprocessedAccount
+    UnprocessedAccount (UnprocessedAccount'),
+    newUnprocessedAccount,
+
+    -- ** UsageByAccount
+    UsageByAccount (UsageByAccount'),
+    newUsageByAccount,
+
+    -- ** UsageRecord
+    UsageRecord (UsageRecord'),
+    newUsageRecord,
+
+    -- ** UsageStatisticsFilter
+    UsageStatisticsFilter (UsageStatisticsFilter'),
+    newUsageStatisticsFilter,
+
+    -- ** UsageStatisticsSortBy
+    UsageStatisticsSortBy (UsageStatisticsSortBy'),
+    newUsageStatisticsSortBy,
+
+    -- ** UsageTotal
+    UsageTotal (UsageTotal'),
+    newUsageTotal,
+
+    -- ** UserIdentity
+    UserIdentity (UserIdentity'),
+    newUserIdentity,
+
+    -- ** UserIdentityRoot
+    UserIdentityRoot (UserIdentityRoot'),
+    newUserIdentityRoot,
+
+    -- ** UserPausedDetails
+    UserPausedDetails (UserPausedDetails'),
+    newUserPausedDetails,
+
+    -- ** WeeklySchedule
+    WeeklySchedule (WeeklySchedule'),
+    newWeeklySchedule,
+  )
+where
+
+import Amazonka.MacieV2.AcceptInvitation
+import Amazonka.MacieV2.BatchGetCustomDataIdentifiers
+import Amazonka.MacieV2.CreateAllowList
+import Amazonka.MacieV2.CreateClassificationJob
+import Amazonka.MacieV2.CreateCustomDataIdentifier
+import Amazonka.MacieV2.CreateFindingsFilter
+import Amazonka.MacieV2.CreateInvitations
+import Amazonka.MacieV2.CreateMember
+import Amazonka.MacieV2.CreateSampleFindings
+import Amazonka.MacieV2.DeclineInvitations
+import Amazonka.MacieV2.DeleteAllowList
+import Amazonka.MacieV2.DeleteCustomDataIdentifier
+import Amazonka.MacieV2.DeleteFindingsFilter
+import Amazonka.MacieV2.DeleteInvitations
+import Amazonka.MacieV2.DeleteMember
+import Amazonka.MacieV2.DescribeBuckets
+import Amazonka.MacieV2.DescribeClassificationJob
+import Amazonka.MacieV2.DescribeOrganizationConfiguration
+import Amazonka.MacieV2.DisableMacie
+import Amazonka.MacieV2.DisableOrganizationAdminAccount
+import Amazonka.MacieV2.DisassociateFromAdministratorAccount
+import Amazonka.MacieV2.DisassociateFromMasterAccount
+import Amazonka.MacieV2.DisassociateMember
+import Amazonka.MacieV2.EnableMacie
+import Amazonka.MacieV2.EnableOrganizationAdminAccount
+import Amazonka.MacieV2.GetAdministratorAccount
+import Amazonka.MacieV2.GetAllowList
+import Amazonka.MacieV2.GetAutomatedDiscoveryConfiguration
+import Amazonka.MacieV2.GetBucketStatistics
+import Amazonka.MacieV2.GetClassificationExportConfiguration
+import Amazonka.MacieV2.GetClassificationScope
+import Amazonka.MacieV2.GetCustomDataIdentifier
+import Amazonka.MacieV2.GetFindingStatistics
+import Amazonka.MacieV2.GetFindings
+import Amazonka.MacieV2.GetFindingsFilter
+import Amazonka.MacieV2.GetFindingsPublicationConfiguration
+import Amazonka.MacieV2.GetInvitationsCount
+import Amazonka.MacieV2.GetMacieSession
+import Amazonka.MacieV2.GetMasterAccount
+import Amazonka.MacieV2.GetMember
+import Amazonka.MacieV2.GetResourceProfile
+import Amazonka.MacieV2.GetRevealConfiguration
+import Amazonka.MacieV2.GetSensitiveDataOccurrences
+import Amazonka.MacieV2.GetSensitiveDataOccurrencesAvailability
+import Amazonka.MacieV2.GetSensitivityInspectionTemplate
+import Amazonka.MacieV2.GetUsageStatistics
+import Amazonka.MacieV2.GetUsageTotals
+import Amazonka.MacieV2.Lens
+import Amazonka.MacieV2.ListAllowLists
+import Amazonka.MacieV2.ListClassificationJobs
+import Amazonka.MacieV2.ListClassificationScopes
+import Amazonka.MacieV2.ListCustomDataIdentifiers
+import Amazonka.MacieV2.ListFindings
+import Amazonka.MacieV2.ListFindingsFilters
+import Amazonka.MacieV2.ListInvitations
+import Amazonka.MacieV2.ListManagedDataIdentifiers
+import Amazonka.MacieV2.ListMembers
+import Amazonka.MacieV2.ListOrganizationAdminAccounts
+import Amazonka.MacieV2.ListResourceProfileArtifacts
+import Amazonka.MacieV2.ListResourceProfileDetections
+import Amazonka.MacieV2.ListSensitivityInspectionTemplates
+import Amazonka.MacieV2.ListTagsForResource
+import Amazonka.MacieV2.PutClassificationExportConfiguration
+import Amazonka.MacieV2.PutFindingsPublicationConfiguration
+import Amazonka.MacieV2.SearchResources
+import Amazonka.MacieV2.TagResource
+import Amazonka.MacieV2.TestCustomDataIdentifier
+import Amazonka.MacieV2.Types
+import Amazonka.MacieV2.UntagResource
+import Amazonka.MacieV2.UpdateAllowList
+import Amazonka.MacieV2.UpdateAutomatedDiscoveryConfiguration
+import Amazonka.MacieV2.UpdateClassificationJob
+import Amazonka.MacieV2.UpdateClassificationScope
+import Amazonka.MacieV2.UpdateFindingsFilter
+import Amazonka.MacieV2.UpdateMacieSession
+import Amazonka.MacieV2.UpdateMemberSession
+import Amazonka.MacieV2.UpdateOrganizationConfiguration
+import Amazonka.MacieV2.UpdateResourceProfile
+import Amazonka.MacieV2.UpdateResourceProfileDetections
+import Amazonka.MacieV2.UpdateRevealConfiguration
+import Amazonka.MacieV2.UpdateSensitivityInspectionTemplate
+import Amazonka.MacieV2.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 'MacieV2'.
+
+-- $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/MacieV2/AcceptInvitation.hs b/gen/Amazonka/MacieV2/AcceptInvitation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/AcceptInvitation.hs
@@ -0,0 +1,198 @@
+{-# 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.MacieV2.AcceptInvitation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Accepts an Amazon Macie membership invitation that was received from a
+-- specific account.
+module Amazonka.MacieV2.AcceptInvitation
+  ( -- * Creating a Request
+    AcceptInvitation (..),
+    newAcceptInvitation,
+
+    -- * Request Lenses
+    acceptInvitation_administratorAccountId,
+    acceptInvitation_masterAccount,
+    acceptInvitation_invitationId,
+
+    -- * Destructuring the Response
+    AcceptInvitationResponse (..),
+    newAcceptInvitationResponse,
+
+    -- * Response Lenses
+    acceptInvitationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAcceptInvitation' smart constructor.
+data AcceptInvitation = AcceptInvitation'
+  { -- | The Amazon Web Services account ID for the account that sent the
+    -- invitation.
+    administratorAccountId :: Prelude.Maybe Prelude.Text,
+    -- | (Deprecated) The Amazon Web Services account ID for the account that
+    -- sent the invitation. This property has been replaced by the
+    -- administratorAccountId property and is retained only for backward
+    -- compatibility.
+    masterAccount :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the invitation to accept.
+    invitationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptInvitation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'administratorAccountId', 'acceptInvitation_administratorAccountId' - The Amazon Web Services account ID for the account that sent the
+-- invitation.
+--
+-- 'masterAccount', 'acceptInvitation_masterAccount' - (Deprecated) The Amazon Web Services account ID for the account that
+-- sent the invitation. This property has been replaced by the
+-- administratorAccountId property and is retained only for backward
+-- compatibility.
+--
+-- 'invitationId', 'acceptInvitation_invitationId' - The unique identifier for the invitation to accept.
+newAcceptInvitation ::
+  -- | 'invitationId'
+  Prelude.Text ->
+  AcceptInvitation
+newAcceptInvitation pInvitationId_ =
+  AcceptInvitation'
+    { administratorAccountId =
+        Prelude.Nothing,
+      masterAccount = Prelude.Nothing,
+      invitationId = pInvitationId_
+    }
+
+-- | The Amazon Web Services account ID for the account that sent the
+-- invitation.
+acceptInvitation_administratorAccountId :: Lens.Lens' AcceptInvitation (Prelude.Maybe Prelude.Text)
+acceptInvitation_administratorAccountId = Lens.lens (\AcceptInvitation' {administratorAccountId} -> administratorAccountId) (\s@AcceptInvitation' {} a -> s {administratorAccountId = a} :: AcceptInvitation)
+
+-- | (Deprecated) The Amazon Web Services account ID for the account that
+-- sent the invitation. This property has been replaced by the
+-- administratorAccountId property and is retained only for backward
+-- compatibility.
+acceptInvitation_masterAccount :: Lens.Lens' AcceptInvitation (Prelude.Maybe Prelude.Text)
+acceptInvitation_masterAccount = Lens.lens (\AcceptInvitation' {masterAccount} -> masterAccount) (\s@AcceptInvitation' {} a -> s {masterAccount = a} :: AcceptInvitation)
+
+-- | The unique identifier for the invitation to accept.
+acceptInvitation_invitationId :: Lens.Lens' AcceptInvitation Prelude.Text
+acceptInvitation_invitationId = Lens.lens (\AcceptInvitation' {invitationId} -> invitationId) (\s@AcceptInvitation' {} a -> s {invitationId = a} :: AcceptInvitation)
+
+instance Core.AWSRequest AcceptInvitation where
+  type
+    AWSResponse AcceptInvitation =
+      AcceptInvitationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AcceptInvitationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AcceptInvitation where
+  hashWithSalt _salt AcceptInvitation' {..} =
+    _salt
+      `Prelude.hashWithSalt` administratorAccountId
+      `Prelude.hashWithSalt` masterAccount
+      `Prelude.hashWithSalt` invitationId
+
+instance Prelude.NFData AcceptInvitation where
+  rnf AcceptInvitation' {..} =
+    Prelude.rnf administratorAccountId
+      `Prelude.seq` Prelude.rnf masterAccount
+      `Prelude.seq` Prelude.rnf invitationId
+
+instance Data.ToHeaders AcceptInvitation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AcceptInvitation where
+  toJSON AcceptInvitation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("administratorAccountId" Data..=)
+              Prelude.<$> administratorAccountId,
+            ("masterAccount" Data..=) Prelude.<$> masterAccount,
+            Prelude.Just ("invitationId" Data..= invitationId)
+          ]
+      )
+
+instance Data.ToPath AcceptInvitation where
+  toPath = Prelude.const "/invitations/accept"
+
+instance Data.ToQuery AcceptInvitation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAcceptInvitationResponse' smart constructor.
+data AcceptInvitationResponse = AcceptInvitationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptInvitationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'acceptInvitationResponse_httpStatus' - The response's http status code.
+newAcceptInvitationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AcceptInvitationResponse
+newAcceptInvitationResponse pHttpStatus_ =
+  AcceptInvitationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+acceptInvitationResponse_httpStatus :: Lens.Lens' AcceptInvitationResponse Prelude.Int
+acceptInvitationResponse_httpStatus = Lens.lens (\AcceptInvitationResponse' {httpStatus} -> httpStatus) (\s@AcceptInvitationResponse' {} a -> s {httpStatus = a} :: AcceptInvitationResponse)
+
+instance Prelude.NFData AcceptInvitationResponse where
+  rnf AcceptInvitationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/BatchGetCustomDataIdentifiers.hs b/gen/Amazonka/MacieV2/BatchGetCustomDataIdentifiers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/BatchGetCustomDataIdentifiers.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.BatchGetCustomDataIdentifiers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about one or more custom data identifiers.
+module Amazonka.MacieV2.BatchGetCustomDataIdentifiers
+  ( -- * Creating a Request
+    BatchGetCustomDataIdentifiers (..),
+    newBatchGetCustomDataIdentifiers,
+
+    -- * Request Lenses
+    batchGetCustomDataIdentifiers_ids,
+
+    -- * Destructuring the Response
+    BatchGetCustomDataIdentifiersResponse (..),
+    newBatchGetCustomDataIdentifiersResponse,
+
+    -- * Response Lenses
+    batchGetCustomDataIdentifiersResponse_customDataIdentifiers,
+    batchGetCustomDataIdentifiersResponse_notFoundIdentifierIds,
+    batchGetCustomDataIdentifiersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchGetCustomDataIdentifiers' smart constructor.
+data BatchGetCustomDataIdentifiers = BatchGetCustomDataIdentifiers'
+  { -- | An array of custom data identifier IDs, one for each custom data
+    -- identifier to retrieve information about.
+    ids :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetCustomDataIdentifiers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ids', 'batchGetCustomDataIdentifiers_ids' - An array of custom data identifier IDs, one for each custom data
+-- identifier to retrieve information about.
+newBatchGetCustomDataIdentifiers ::
+  BatchGetCustomDataIdentifiers
+newBatchGetCustomDataIdentifiers =
+  BatchGetCustomDataIdentifiers'
+    { ids =
+        Prelude.Nothing
+    }
+
+-- | An array of custom data identifier IDs, one for each custom data
+-- identifier to retrieve information about.
+batchGetCustomDataIdentifiers_ids :: Lens.Lens' BatchGetCustomDataIdentifiers (Prelude.Maybe [Prelude.Text])
+batchGetCustomDataIdentifiers_ids = Lens.lens (\BatchGetCustomDataIdentifiers' {ids} -> ids) (\s@BatchGetCustomDataIdentifiers' {} a -> s {ids = a} :: BatchGetCustomDataIdentifiers) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSRequest
+    BatchGetCustomDataIdentifiers
+  where
+  type
+    AWSResponse BatchGetCustomDataIdentifiers =
+      BatchGetCustomDataIdentifiersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchGetCustomDataIdentifiersResponse'
+            Prelude.<$> ( x
+                            Data..?> "customDataIdentifiers"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "notFoundIdentifierIds"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    BatchGetCustomDataIdentifiers
+  where
+  hashWithSalt _salt BatchGetCustomDataIdentifiers' {..} =
+    _salt `Prelude.hashWithSalt` ids
+
+instance Prelude.NFData BatchGetCustomDataIdentifiers where
+  rnf BatchGetCustomDataIdentifiers' {..} =
+    Prelude.rnf ids
+
+instance Data.ToHeaders BatchGetCustomDataIdentifiers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchGetCustomDataIdentifiers where
+  toJSON BatchGetCustomDataIdentifiers' {..} =
+    Data.object
+      (Prelude.catMaybes [("ids" Data..=) Prelude.<$> ids])
+
+instance Data.ToPath BatchGetCustomDataIdentifiers where
+  toPath = Prelude.const "/custom-data-identifiers/get"
+
+instance Data.ToQuery BatchGetCustomDataIdentifiers where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchGetCustomDataIdentifiersResponse' smart constructor.
+data BatchGetCustomDataIdentifiersResponse = BatchGetCustomDataIdentifiersResponse'
+  { -- | An array of objects, one for each custom data identifier that matches
+    -- the criteria specified in the request.
+    customDataIdentifiers :: Prelude.Maybe [BatchGetCustomDataIdentifierSummary],
+    -- | An array of custom data identifier IDs, one for each custom data
+    -- identifier that was specified in the request but doesn\'t correlate to
+    -- an existing custom data identifier.
+    notFoundIdentifierIds :: 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 'BatchGetCustomDataIdentifiersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'customDataIdentifiers', 'batchGetCustomDataIdentifiersResponse_customDataIdentifiers' - An array of objects, one for each custom data identifier that matches
+-- the criteria specified in the request.
+--
+-- 'notFoundIdentifierIds', 'batchGetCustomDataIdentifiersResponse_notFoundIdentifierIds' - An array of custom data identifier IDs, one for each custom data
+-- identifier that was specified in the request but doesn\'t correlate to
+-- an existing custom data identifier.
+--
+-- 'httpStatus', 'batchGetCustomDataIdentifiersResponse_httpStatus' - The response's http status code.
+newBatchGetCustomDataIdentifiersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchGetCustomDataIdentifiersResponse
+newBatchGetCustomDataIdentifiersResponse pHttpStatus_ =
+  BatchGetCustomDataIdentifiersResponse'
+    { customDataIdentifiers =
+        Prelude.Nothing,
+      notFoundIdentifierIds =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each custom data identifier that matches
+-- the criteria specified in the request.
+batchGetCustomDataIdentifiersResponse_customDataIdentifiers :: Lens.Lens' BatchGetCustomDataIdentifiersResponse (Prelude.Maybe [BatchGetCustomDataIdentifierSummary])
+batchGetCustomDataIdentifiersResponse_customDataIdentifiers = Lens.lens (\BatchGetCustomDataIdentifiersResponse' {customDataIdentifiers} -> customDataIdentifiers) (\s@BatchGetCustomDataIdentifiersResponse' {} a -> s {customDataIdentifiers = a} :: BatchGetCustomDataIdentifiersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of custom data identifier IDs, one for each custom data
+-- identifier that was specified in the request but doesn\'t correlate to
+-- an existing custom data identifier.
+batchGetCustomDataIdentifiersResponse_notFoundIdentifierIds :: Lens.Lens' BatchGetCustomDataIdentifiersResponse (Prelude.Maybe [Prelude.Text])
+batchGetCustomDataIdentifiersResponse_notFoundIdentifierIds = Lens.lens (\BatchGetCustomDataIdentifiersResponse' {notFoundIdentifierIds} -> notFoundIdentifierIds) (\s@BatchGetCustomDataIdentifiersResponse' {} a -> s {notFoundIdentifierIds = a} :: BatchGetCustomDataIdentifiersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchGetCustomDataIdentifiersResponse_httpStatus :: Lens.Lens' BatchGetCustomDataIdentifiersResponse Prelude.Int
+batchGetCustomDataIdentifiersResponse_httpStatus = Lens.lens (\BatchGetCustomDataIdentifiersResponse' {httpStatus} -> httpStatus) (\s@BatchGetCustomDataIdentifiersResponse' {} a -> s {httpStatus = a} :: BatchGetCustomDataIdentifiersResponse)
+
+instance
+  Prelude.NFData
+    BatchGetCustomDataIdentifiersResponse
+  where
+  rnf BatchGetCustomDataIdentifiersResponse' {..} =
+    Prelude.rnf customDataIdentifiers
+      `Prelude.seq` Prelude.rnf notFoundIdentifierIds
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/CreateAllowList.hs b/gen/Amazonka/MacieV2/CreateAllowList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/CreateAllowList.hs
@@ -0,0 +1,269 @@
+{-# 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.MacieV2.CreateAllowList
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates and defines the settings for an allow list.
+module Amazonka.MacieV2.CreateAllowList
+  ( -- * Creating a Request
+    CreateAllowList (..),
+    newCreateAllowList,
+
+    -- * Request Lenses
+    createAllowList_description,
+    createAllowList_tags,
+    createAllowList_criteria,
+    createAllowList_clientToken,
+    createAllowList_name,
+
+    -- * Destructuring the Response
+    CreateAllowListResponse (..),
+    newCreateAllowListResponse,
+
+    -- * Response Lenses
+    createAllowListResponse_arn,
+    createAllowListResponse_id,
+    createAllowListResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateAllowList' smart constructor.
+data CreateAllowList = CreateAllowList'
+  { -- | A custom description of the allow list. The description can contain as
+    -- many as 512 characters.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A map of key-value pairs that specifies the tags to associate with the
+    -- allow list.
+    --
+    -- An allow list can have a maximum of 50 tags. Each tag consists of a tag
+    -- key and an associated tag value. The maximum length of a tag key is 128
+    -- characters. The maximum length of a tag value is 256 characters.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The criteria that specify the text or text pattern to ignore. The
+    -- criteria can be the location and name of an S3 object that lists
+    -- specific text to ignore (s3WordsList), or a regular expression (regex)
+    -- that defines a text pattern to ignore.
+    criteria :: AllowListCriteria,
+    -- | A unique, case-sensitive token that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Text,
+    -- | A custom name for the allow list. The name can contain as many as 128
+    -- characters.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAllowList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createAllowList_description' - A custom description of the allow list. The description can contain as
+-- many as 512 characters.
+--
+-- 'tags', 'createAllowList_tags' - A map of key-value pairs that specifies the tags to associate with the
+-- allow list.
+--
+-- An allow list can have a maximum of 50 tags. Each tag consists of a tag
+-- key and an associated tag value. The maximum length of a tag key is 128
+-- characters. The maximum length of a tag value is 256 characters.
+--
+-- 'criteria', 'createAllowList_criteria' - The criteria that specify the text or text pattern to ignore. The
+-- criteria can be the location and name of an S3 object that lists
+-- specific text to ignore (s3WordsList), or a regular expression (regex)
+-- that defines a text pattern to ignore.
+--
+-- 'clientToken', 'createAllowList_clientToken' - A unique, case-sensitive token that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'name', 'createAllowList_name' - A custom name for the allow list. The name can contain as many as 128
+-- characters.
+newCreateAllowList ::
+  -- | 'criteria'
+  AllowListCriteria ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateAllowList
+newCreateAllowList pCriteria_ pClientToken_ pName_ =
+  CreateAllowList'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      criteria = pCriteria_,
+      clientToken = pClientToken_,
+      name = pName_
+    }
+
+-- | A custom description of the allow list. The description can contain as
+-- many as 512 characters.
+createAllowList_description :: Lens.Lens' CreateAllowList (Prelude.Maybe Prelude.Text)
+createAllowList_description = Lens.lens (\CreateAllowList' {description} -> description) (\s@CreateAllowList' {} a -> s {description = a} :: CreateAllowList)
+
+-- | A map of key-value pairs that specifies the tags to associate with the
+-- allow list.
+--
+-- An allow list can have a maximum of 50 tags. Each tag consists of a tag
+-- key and an associated tag value. The maximum length of a tag key is 128
+-- characters. The maximum length of a tag value is 256 characters.
+createAllowList_tags :: Lens.Lens' CreateAllowList (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createAllowList_tags = Lens.lens (\CreateAllowList' {tags} -> tags) (\s@CreateAllowList' {} a -> s {tags = a} :: CreateAllowList) Prelude.. Lens.mapping Lens.coerced
+
+-- | The criteria that specify the text or text pattern to ignore. The
+-- criteria can be the location and name of an S3 object that lists
+-- specific text to ignore (s3WordsList), or a regular expression (regex)
+-- that defines a text pattern to ignore.
+createAllowList_criteria :: Lens.Lens' CreateAllowList AllowListCriteria
+createAllowList_criteria = Lens.lens (\CreateAllowList' {criteria} -> criteria) (\s@CreateAllowList' {} a -> s {criteria = a} :: CreateAllowList)
+
+-- | A unique, case-sensitive token that you provide to ensure the
+-- idempotency of the request.
+createAllowList_clientToken :: Lens.Lens' CreateAllowList Prelude.Text
+createAllowList_clientToken = Lens.lens (\CreateAllowList' {clientToken} -> clientToken) (\s@CreateAllowList' {} a -> s {clientToken = a} :: CreateAllowList)
+
+-- | A custom name for the allow list. The name can contain as many as 128
+-- characters.
+createAllowList_name :: Lens.Lens' CreateAllowList Prelude.Text
+createAllowList_name = Lens.lens (\CreateAllowList' {name} -> name) (\s@CreateAllowList' {} a -> s {name = a} :: CreateAllowList)
+
+instance Core.AWSRequest CreateAllowList where
+  type
+    AWSResponse CreateAllowList =
+      CreateAllowListResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAllowListResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAllowList where
+  hashWithSalt _salt CreateAllowList' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` criteria
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateAllowList where
+  rnf CreateAllowList' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf criteria
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateAllowList where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAllowList where
+  toJSON CreateAllowList' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("criteria" Data..= criteria),
+            Prelude.Just ("clientToken" Data..= clientToken),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateAllowList where
+  toPath = Prelude.const "/allow-lists"
+
+instance Data.ToQuery CreateAllowList where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAllowListResponse' smart constructor.
+data CreateAllowListResponse = CreateAllowListResponse'
+  { -- | The Amazon Resource Name (ARN) of the allow list.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the allow list.
+    id :: 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 'CreateAllowListResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createAllowListResponse_arn' - The Amazon Resource Name (ARN) of the allow list.
+--
+-- 'id', 'createAllowListResponse_id' - The unique identifier for the allow list.
+--
+-- 'httpStatus', 'createAllowListResponse_httpStatus' - The response's http status code.
+newCreateAllowListResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAllowListResponse
+newCreateAllowListResponse pHttpStatus_ =
+  CreateAllowListResponse'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the allow list.
+createAllowListResponse_arn :: Lens.Lens' CreateAllowListResponse (Prelude.Maybe Prelude.Text)
+createAllowListResponse_arn = Lens.lens (\CreateAllowListResponse' {arn} -> arn) (\s@CreateAllowListResponse' {} a -> s {arn = a} :: CreateAllowListResponse)
+
+-- | The unique identifier for the allow list.
+createAllowListResponse_id :: Lens.Lens' CreateAllowListResponse (Prelude.Maybe Prelude.Text)
+createAllowListResponse_id = Lens.lens (\CreateAllowListResponse' {id} -> id) (\s@CreateAllowListResponse' {} a -> s {id = a} :: CreateAllowListResponse)
+
+-- | The response's http status code.
+createAllowListResponse_httpStatus :: Lens.Lens' CreateAllowListResponse Prelude.Int
+createAllowListResponse_httpStatus = Lens.lens (\CreateAllowListResponse' {httpStatus} -> httpStatus) (\s@CreateAllowListResponse' {} a -> s {httpStatus = a} :: CreateAllowListResponse)
+
+instance Prelude.NFData CreateAllowListResponse where
+  rnf CreateAllowListResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/CreateClassificationJob.hs b/gen/Amazonka/MacieV2/CreateClassificationJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/CreateClassificationJob.hs
@@ -0,0 +1,537 @@
+{-# 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.MacieV2.CreateClassificationJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates and defines the settings for a classification job.
+module Amazonka.MacieV2.CreateClassificationJob
+  ( -- * Creating a Request
+    CreateClassificationJob (..),
+    newCreateClassificationJob,
+
+    -- * Request Lenses
+    createClassificationJob_allowListIds,
+    createClassificationJob_customDataIdentifierIds,
+    createClassificationJob_description,
+    createClassificationJob_initialRun,
+    createClassificationJob_managedDataIdentifierIds,
+    createClassificationJob_managedDataIdentifierSelector,
+    createClassificationJob_samplingPercentage,
+    createClassificationJob_scheduleFrequency,
+    createClassificationJob_tags,
+    createClassificationJob_s3JobDefinition,
+    createClassificationJob_jobType,
+    createClassificationJob_clientToken,
+    createClassificationJob_name,
+
+    -- * Destructuring the Response
+    CreateClassificationJobResponse (..),
+    newCreateClassificationJobResponse,
+
+    -- * Response Lenses
+    createClassificationJobResponse_jobArn,
+    createClassificationJobResponse_jobId,
+    createClassificationJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateClassificationJob' smart constructor.
+data CreateClassificationJob = CreateClassificationJob'
+  { -- | An array of unique identifiers, one for each allow list for the job to
+    -- use when it analyzes data.
+    allowListIds :: Prelude.Maybe [Prelude.Text],
+    -- | An array of unique identifiers, one for each custom data identifier for
+    -- the job to use when it analyzes data. To use only managed data
+    -- identifiers, don\'t specify a value for this property and specify a
+    -- value other than NONE for the managedDataIdentifierSelector property.
+    customDataIdentifierIds :: Prelude.Maybe [Prelude.Text],
+    -- | A custom description of the job. The description can contain as many as
+    -- 200 characters.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | For a recurring job, specifies whether to analyze all existing, eligible
+    -- objects immediately after the job is created (true). To analyze only
+    -- those objects that are created or changed after you create the job and
+    -- before the job\'s first scheduled run, set this value to false.
+    --
+    -- If you configure the job to run only once, don\'t specify a value for
+    -- this property.
+    initialRun :: Prelude.Maybe Prelude.Bool,
+    -- | An array of unique identifiers, one for each managed data identifier for
+    -- the job to include (use) or exclude (not use) when it analyzes data.
+    -- Inclusion or exclusion depends on the managed data identifier selection
+    -- type that you specify for the job (managedDataIdentifierSelector).
+    --
+    -- To retrieve a list of valid values for this property, use the
+    -- ListManagedDataIdentifiers operation.
+    managedDataIdentifierIds :: Prelude.Maybe [Prelude.Text],
+    -- | The selection type to apply when determining which managed data
+    -- identifiers the job uses to analyze data. Valid values are:
+    --
+    -- -   ALL - Use all the managed data identifiers that Amazon Macie
+    --     provides. If you specify this value, don\'t specify any values for
+    --     the managedDataIdentifierIds property.
+    --
+    -- -   EXCLUDE - Use all the managed data identifiers that Macie provides
+    --     except the managed data identifiers specified by the
+    --     managedDataIdentifierIds property.
+    --
+    -- -   INCLUDE - Use only the managed data identifiers specified by the
+    --     managedDataIdentifierIds property.
+    --
+    -- -   NONE - Don\'t use any managed data identifiers. If you specify this
+    --     value, specify at least one custom data identifier for the job
+    --     (customDataIdentifierIds) and don\'t specify any values for the
+    --     managedDataIdentifierIds property.
+    --
+    -- If you don\'t specify a value for this property, the job uses all
+    -- managed data identifiers. If you don\'t specify a value for this
+    -- property or you specify ALL or EXCLUDE for a recurring job, the job also
+    -- uses new managed data identifiers as they are released.
+    managedDataIdentifierSelector :: Prelude.Maybe ManagedDataIdentifierSelector,
+    -- | The sampling depth, as a percentage, for the job to apply when
+    -- processing objects. This value determines the percentage of eligible
+    -- objects that the job analyzes. If this value is less than 100, Amazon
+    -- Macie selects the objects to analyze at random, up to the specified
+    -- percentage, and analyzes all the data in those objects.
+    samplingPercentage :: Prelude.Maybe Prelude.Int,
+    -- | The recurrence pattern for running the job. To run the job only once,
+    -- don\'t specify a value for this property and set the value for the
+    -- jobType property to ONE_TIME.
+    scheduleFrequency :: Prelude.Maybe JobScheduleFrequency,
+    -- | A map of key-value pairs that specifies the tags to associate with the
+    -- job.
+    --
+    -- A job can have a maximum of 50 tags. Each tag consists of a tag key and
+    -- an associated tag value. The maximum length of a tag key is 128
+    -- characters. The maximum length of a tag value is 256 characters.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The S3 buckets that contain the objects to analyze, and the scope of
+    -- that analysis.
+    s3JobDefinition :: S3JobDefinition,
+    -- | The schedule for running the job. Valid values are:
+    --
+    -- -   ONE_TIME - Run the job only once. If you specify this value, don\'t
+    --     specify a value for the scheduleFrequency property.
+    --
+    -- -   SCHEDULED - Run the job on a daily, weekly, or monthly basis. If you
+    --     specify this value, use the scheduleFrequency property to define the
+    --     recurrence pattern for the job.
+    jobType :: JobType,
+    -- | A unique, case-sensitive token that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Text,
+    -- | A custom name for the job. The name can contain as many as 500
+    -- characters.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateClassificationJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowListIds', 'createClassificationJob_allowListIds' - An array of unique identifiers, one for each allow list for the job to
+-- use when it analyzes data.
+--
+-- 'customDataIdentifierIds', 'createClassificationJob_customDataIdentifierIds' - An array of unique identifiers, one for each custom data identifier for
+-- the job to use when it analyzes data. To use only managed data
+-- identifiers, don\'t specify a value for this property and specify a
+-- value other than NONE for the managedDataIdentifierSelector property.
+--
+-- 'description', 'createClassificationJob_description' - A custom description of the job. The description can contain as many as
+-- 200 characters.
+--
+-- 'initialRun', 'createClassificationJob_initialRun' - For a recurring job, specifies whether to analyze all existing, eligible
+-- objects immediately after the job is created (true). To analyze only
+-- those objects that are created or changed after you create the job and
+-- before the job\'s first scheduled run, set this value to false.
+--
+-- If you configure the job to run only once, don\'t specify a value for
+-- this property.
+--
+-- 'managedDataIdentifierIds', 'createClassificationJob_managedDataIdentifierIds' - An array of unique identifiers, one for each managed data identifier for
+-- the job to include (use) or exclude (not use) when it analyzes data.
+-- Inclusion or exclusion depends on the managed data identifier selection
+-- type that you specify for the job (managedDataIdentifierSelector).
+--
+-- To retrieve a list of valid values for this property, use the
+-- ListManagedDataIdentifiers operation.
+--
+-- 'managedDataIdentifierSelector', 'createClassificationJob_managedDataIdentifierSelector' - The selection type to apply when determining which managed data
+-- identifiers the job uses to analyze data. Valid values are:
+--
+-- -   ALL - Use all the managed data identifiers that Amazon Macie
+--     provides. If you specify this value, don\'t specify any values for
+--     the managedDataIdentifierIds property.
+--
+-- -   EXCLUDE - Use all the managed data identifiers that Macie provides
+--     except the managed data identifiers specified by the
+--     managedDataIdentifierIds property.
+--
+-- -   INCLUDE - Use only the managed data identifiers specified by the
+--     managedDataIdentifierIds property.
+--
+-- -   NONE - Don\'t use any managed data identifiers. If you specify this
+--     value, specify at least one custom data identifier for the job
+--     (customDataIdentifierIds) and don\'t specify any values for the
+--     managedDataIdentifierIds property.
+--
+-- If you don\'t specify a value for this property, the job uses all
+-- managed data identifiers. If you don\'t specify a value for this
+-- property or you specify ALL or EXCLUDE for a recurring job, the job also
+-- uses new managed data identifiers as they are released.
+--
+-- 'samplingPercentage', 'createClassificationJob_samplingPercentage' - The sampling depth, as a percentage, for the job to apply when
+-- processing objects. This value determines the percentage of eligible
+-- objects that the job analyzes. If this value is less than 100, Amazon
+-- Macie selects the objects to analyze at random, up to the specified
+-- percentage, and analyzes all the data in those objects.
+--
+-- 'scheduleFrequency', 'createClassificationJob_scheduleFrequency' - The recurrence pattern for running the job. To run the job only once,
+-- don\'t specify a value for this property and set the value for the
+-- jobType property to ONE_TIME.
+--
+-- 'tags', 'createClassificationJob_tags' - A map of key-value pairs that specifies the tags to associate with the
+-- job.
+--
+-- A job can have a maximum of 50 tags. Each tag consists of a tag key and
+-- an associated tag value. The maximum length of a tag key is 128
+-- characters. The maximum length of a tag value is 256 characters.
+--
+-- 's3JobDefinition', 'createClassificationJob_s3JobDefinition' - The S3 buckets that contain the objects to analyze, and the scope of
+-- that analysis.
+--
+-- 'jobType', 'createClassificationJob_jobType' - The schedule for running the job. Valid values are:
+--
+-- -   ONE_TIME - Run the job only once. If you specify this value, don\'t
+--     specify a value for the scheduleFrequency property.
+--
+-- -   SCHEDULED - Run the job on a daily, weekly, or monthly basis. If you
+--     specify this value, use the scheduleFrequency property to define the
+--     recurrence pattern for the job.
+--
+-- 'clientToken', 'createClassificationJob_clientToken' - A unique, case-sensitive token that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'name', 'createClassificationJob_name' - A custom name for the job. The name can contain as many as 500
+-- characters.
+newCreateClassificationJob ::
+  -- | 's3JobDefinition'
+  S3JobDefinition ->
+  -- | 'jobType'
+  JobType ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateClassificationJob
+newCreateClassificationJob
+  pS3JobDefinition_
+  pJobType_
+  pClientToken_
+  pName_ =
+    CreateClassificationJob'
+      { allowListIds =
+          Prelude.Nothing,
+        customDataIdentifierIds = Prelude.Nothing,
+        description = Prelude.Nothing,
+        initialRun = Prelude.Nothing,
+        managedDataIdentifierIds = Prelude.Nothing,
+        managedDataIdentifierSelector = Prelude.Nothing,
+        samplingPercentage = Prelude.Nothing,
+        scheduleFrequency = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        s3JobDefinition = pS3JobDefinition_,
+        jobType = pJobType_,
+        clientToken = pClientToken_,
+        name = pName_
+      }
+
+-- | An array of unique identifiers, one for each allow list for the job to
+-- use when it analyzes data.
+createClassificationJob_allowListIds :: Lens.Lens' CreateClassificationJob (Prelude.Maybe [Prelude.Text])
+createClassificationJob_allowListIds = Lens.lens (\CreateClassificationJob' {allowListIds} -> allowListIds) (\s@CreateClassificationJob' {} a -> s {allowListIds = a} :: CreateClassificationJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of unique identifiers, one for each custom data identifier for
+-- the job to use when it analyzes data. To use only managed data
+-- identifiers, don\'t specify a value for this property and specify a
+-- value other than NONE for the managedDataIdentifierSelector property.
+createClassificationJob_customDataIdentifierIds :: Lens.Lens' CreateClassificationJob (Prelude.Maybe [Prelude.Text])
+createClassificationJob_customDataIdentifierIds = Lens.lens (\CreateClassificationJob' {customDataIdentifierIds} -> customDataIdentifierIds) (\s@CreateClassificationJob' {} a -> s {customDataIdentifierIds = a} :: CreateClassificationJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | A custom description of the job. The description can contain as many as
+-- 200 characters.
+createClassificationJob_description :: Lens.Lens' CreateClassificationJob (Prelude.Maybe Prelude.Text)
+createClassificationJob_description = Lens.lens (\CreateClassificationJob' {description} -> description) (\s@CreateClassificationJob' {} a -> s {description = a} :: CreateClassificationJob)
+
+-- | For a recurring job, specifies whether to analyze all existing, eligible
+-- objects immediately after the job is created (true). To analyze only
+-- those objects that are created or changed after you create the job and
+-- before the job\'s first scheduled run, set this value to false.
+--
+-- If you configure the job to run only once, don\'t specify a value for
+-- this property.
+createClassificationJob_initialRun :: Lens.Lens' CreateClassificationJob (Prelude.Maybe Prelude.Bool)
+createClassificationJob_initialRun = Lens.lens (\CreateClassificationJob' {initialRun} -> initialRun) (\s@CreateClassificationJob' {} a -> s {initialRun = a} :: CreateClassificationJob)
+
+-- | An array of unique identifiers, one for each managed data identifier for
+-- the job to include (use) or exclude (not use) when it analyzes data.
+-- Inclusion or exclusion depends on the managed data identifier selection
+-- type that you specify for the job (managedDataIdentifierSelector).
+--
+-- To retrieve a list of valid values for this property, use the
+-- ListManagedDataIdentifiers operation.
+createClassificationJob_managedDataIdentifierIds :: Lens.Lens' CreateClassificationJob (Prelude.Maybe [Prelude.Text])
+createClassificationJob_managedDataIdentifierIds = Lens.lens (\CreateClassificationJob' {managedDataIdentifierIds} -> managedDataIdentifierIds) (\s@CreateClassificationJob' {} a -> s {managedDataIdentifierIds = a} :: CreateClassificationJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The selection type to apply when determining which managed data
+-- identifiers the job uses to analyze data. Valid values are:
+--
+-- -   ALL - Use all the managed data identifiers that Amazon Macie
+--     provides. If you specify this value, don\'t specify any values for
+--     the managedDataIdentifierIds property.
+--
+-- -   EXCLUDE - Use all the managed data identifiers that Macie provides
+--     except the managed data identifiers specified by the
+--     managedDataIdentifierIds property.
+--
+-- -   INCLUDE - Use only the managed data identifiers specified by the
+--     managedDataIdentifierIds property.
+--
+-- -   NONE - Don\'t use any managed data identifiers. If you specify this
+--     value, specify at least one custom data identifier for the job
+--     (customDataIdentifierIds) and don\'t specify any values for the
+--     managedDataIdentifierIds property.
+--
+-- If you don\'t specify a value for this property, the job uses all
+-- managed data identifiers. If you don\'t specify a value for this
+-- property or you specify ALL or EXCLUDE for a recurring job, the job also
+-- uses new managed data identifiers as they are released.
+createClassificationJob_managedDataIdentifierSelector :: Lens.Lens' CreateClassificationJob (Prelude.Maybe ManagedDataIdentifierSelector)
+createClassificationJob_managedDataIdentifierSelector = Lens.lens (\CreateClassificationJob' {managedDataIdentifierSelector} -> managedDataIdentifierSelector) (\s@CreateClassificationJob' {} a -> s {managedDataIdentifierSelector = a} :: CreateClassificationJob)
+
+-- | The sampling depth, as a percentage, for the job to apply when
+-- processing objects. This value determines the percentage of eligible
+-- objects that the job analyzes. If this value is less than 100, Amazon
+-- Macie selects the objects to analyze at random, up to the specified
+-- percentage, and analyzes all the data in those objects.
+createClassificationJob_samplingPercentage :: Lens.Lens' CreateClassificationJob (Prelude.Maybe Prelude.Int)
+createClassificationJob_samplingPercentage = Lens.lens (\CreateClassificationJob' {samplingPercentage} -> samplingPercentage) (\s@CreateClassificationJob' {} a -> s {samplingPercentage = a} :: CreateClassificationJob)
+
+-- | The recurrence pattern for running the job. To run the job only once,
+-- don\'t specify a value for this property and set the value for the
+-- jobType property to ONE_TIME.
+createClassificationJob_scheduleFrequency :: Lens.Lens' CreateClassificationJob (Prelude.Maybe JobScheduleFrequency)
+createClassificationJob_scheduleFrequency = Lens.lens (\CreateClassificationJob' {scheduleFrequency} -> scheduleFrequency) (\s@CreateClassificationJob' {} a -> s {scheduleFrequency = a} :: CreateClassificationJob)
+
+-- | A map of key-value pairs that specifies the tags to associate with the
+-- job.
+--
+-- A job can have a maximum of 50 tags. Each tag consists of a tag key and
+-- an associated tag value. The maximum length of a tag key is 128
+-- characters. The maximum length of a tag value is 256 characters.
+createClassificationJob_tags :: Lens.Lens' CreateClassificationJob (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createClassificationJob_tags = Lens.lens (\CreateClassificationJob' {tags} -> tags) (\s@CreateClassificationJob' {} a -> s {tags = a} :: CreateClassificationJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The S3 buckets that contain the objects to analyze, and the scope of
+-- that analysis.
+createClassificationJob_s3JobDefinition :: Lens.Lens' CreateClassificationJob S3JobDefinition
+createClassificationJob_s3JobDefinition = Lens.lens (\CreateClassificationJob' {s3JobDefinition} -> s3JobDefinition) (\s@CreateClassificationJob' {} a -> s {s3JobDefinition = a} :: CreateClassificationJob)
+
+-- | The schedule for running the job. Valid values are:
+--
+-- -   ONE_TIME - Run the job only once. If you specify this value, don\'t
+--     specify a value for the scheduleFrequency property.
+--
+-- -   SCHEDULED - Run the job on a daily, weekly, or monthly basis. If you
+--     specify this value, use the scheduleFrequency property to define the
+--     recurrence pattern for the job.
+createClassificationJob_jobType :: Lens.Lens' CreateClassificationJob JobType
+createClassificationJob_jobType = Lens.lens (\CreateClassificationJob' {jobType} -> jobType) (\s@CreateClassificationJob' {} a -> s {jobType = a} :: CreateClassificationJob)
+
+-- | A unique, case-sensitive token that you provide to ensure the
+-- idempotency of the request.
+createClassificationJob_clientToken :: Lens.Lens' CreateClassificationJob Prelude.Text
+createClassificationJob_clientToken = Lens.lens (\CreateClassificationJob' {clientToken} -> clientToken) (\s@CreateClassificationJob' {} a -> s {clientToken = a} :: CreateClassificationJob)
+
+-- | A custom name for the job. The name can contain as many as 500
+-- characters.
+createClassificationJob_name :: Lens.Lens' CreateClassificationJob Prelude.Text
+createClassificationJob_name = Lens.lens (\CreateClassificationJob' {name} -> name) (\s@CreateClassificationJob' {} a -> s {name = a} :: CreateClassificationJob)
+
+instance Core.AWSRequest CreateClassificationJob where
+  type
+    AWSResponse CreateClassificationJob =
+      CreateClassificationJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateClassificationJobResponse'
+            Prelude.<$> (x Data..?> "jobArn")
+            Prelude.<*> (x Data..?> "jobId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateClassificationJob where
+  hashWithSalt _salt CreateClassificationJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowListIds
+      `Prelude.hashWithSalt` customDataIdentifierIds
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` initialRun
+      `Prelude.hashWithSalt` managedDataIdentifierIds
+      `Prelude.hashWithSalt` managedDataIdentifierSelector
+      `Prelude.hashWithSalt` samplingPercentage
+      `Prelude.hashWithSalt` scheduleFrequency
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` s3JobDefinition
+      `Prelude.hashWithSalt` jobType
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateClassificationJob where
+  rnf CreateClassificationJob' {..} =
+    Prelude.rnf allowListIds
+      `Prelude.seq` Prelude.rnf customDataIdentifierIds
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf initialRun
+      `Prelude.seq` Prelude.rnf managedDataIdentifierIds
+      `Prelude.seq` Prelude.rnf managedDataIdentifierSelector
+      `Prelude.seq` Prelude.rnf samplingPercentage
+      `Prelude.seq` Prelude.rnf scheduleFrequency
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf s3JobDefinition
+      `Prelude.seq` Prelude.rnf jobType
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateClassificationJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateClassificationJob where
+  toJSON CreateClassificationJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("allowListIds" Data..=) Prelude.<$> allowListIds,
+            ("customDataIdentifierIds" Data..=)
+              Prelude.<$> customDataIdentifierIds,
+            ("description" Data..=) Prelude.<$> description,
+            ("initialRun" Data..=) Prelude.<$> initialRun,
+            ("managedDataIdentifierIds" Data..=)
+              Prelude.<$> managedDataIdentifierIds,
+            ("managedDataIdentifierSelector" Data..=)
+              Prelude.<$> managedDataIdentifierSelector,
+            ("samplingPercentage" Data..=)
+              Prelude.<$> samplingPercentage,
+            ("scheduleFrequency" Data..=)
+              Prelude.<$> scheduleFrequency,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("s3JobDefinition" Data..= s3JobDefinition),
+            Prelude.Just ("jobType" Data..= jobType),
+            Prelude.Just ("clientToken" Data..= clientToken),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateClassificationJob where
+  toPath = Prelude.const "/jobs"
+
+instance Data.ToQuery CreateClassificationJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateClassificationJobResponse' smart constructor.
+data CreateClassificationJobResponse = CreateClassificationJobResponse'
+  { -- | The Amazon Resource Name (ARN) of the job.
+    jobArn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the job.
+    jobId :: 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 'CreateClassificationJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobArn', 'createClassificationJobResponse_jobArn' - The Amazon Resource Name (ARN) of the job.
+--
+-- 'jobId', 'createClassificationJobResponse_jobId' - The unique identifier for the job.
+--
+-- 'httpStatus', 'createClassificationJobResponse_httpStatus' - The response's http status code.
+newCreateClassificationJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateClassificationJobResponse
+newCreateClassificationJobResponse pHttpStatus_ =
+  CreateClassificationJobResponse'
+    { jobArn =
+        Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the job.
+createClassificationJobResponse_jobArn :: Lens.Lens' CreateClassificationJobResponse (Prelude.Maybe Prelude.Text)
+createClassificationJobResponse_jobArn = Lens.lens (\CreateClassificationJobResponse' {jobArn} -> jobArn) (\s@CreateClassificationJobResponse' {} a -> s {jobArn = a} :: CreateClassificationJobResponse)
+
+-- | The unique identifier for the job.
+createClassificationJobResponse_jobId :: Lens.Lens' CreateClassificationJobResponse (Prelude.Maybe Prelude.Text)
+createClassificationJobResponse_jobId = Lens.lens (\CreateClassificationJobResponse' {jobId} -> jobId) (\s@CreateClassificationJobResponse' {} a -> s {jobId = a} :: CreateClassificationJobResponse)
+
+-- | The response's http status code.
+createClassificationJobResponse_httpStatus :: Lens.Lens' CreateClassificationJobResponse Prelude.Int
+createClassificationJobResponse_httpStatus = Lens.lens (\CreateClassificationJobResponse' {httpStatus} -> httpStatus) (\s@CreateClassificationJobResponse' {} a -> s {httpStatus = a} :: CreateClassificationJobResponse)
+
+instance
+  Prelude.NFData
+    CreateClassificationJobResponse
+  where
+  rnf CreateClassificationJobResponse' {..} =
+    Prelude.rnf jobArn
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/CreateCustomDataIdentifier.hs b/gen/Amazonka/MacieV2/CreateCustomDataIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/CreateCustomDataIdentifier.hs
@@ -0,0 +1,420 @@
+{-# 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.MacieV2.CreateCustomDataIdentifier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates and defines the criteria and other settings for a custom data
+-- identifier.
+module Amazonka.MacieV2.CreateCustomDataIdentifier
+  ( -- * Creating a Request
+    CreateCustomDataIdentifier (..),
+    newCreateCustomDataIdentifier,
+
+    -- * Request Lenses
+    createCustomDataIdentifier_clientToken,
+    createCustomDataIdentifier_description,
+    createCustomDataIdentifier_ignoreWords,
+    createCustomDataIdentifier_keywords,
+    createCustomDataIdentifier_maximumMatchDistance,
+    createCustomDataIdentifier_severityLevels,
+    createCustomDataIdentifier_tags,
+    createCustomDataIdentifier_regex,
+    createCustomDataIdentifier_name,
+
+    -- * Destructuring the Response
+    CreateCustomDataIdentifierResponse (..),
+    newCreateCustomDataIdentifierResponse,
+
+    -- * Response Lenses
+    createCustomDataIdentifierResponse_customDataIdentifierId,
+    createCustomDataIdentifierResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateCustomDataIdentifier' smart constructor.
+data CreateCustomDataIdentifier = CreateCustomDataIdentifier'
+  { -- | A unique, case-sensitive token that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A custom description of the custom data identifier. The description can
+    -- contain as many as 512 characters.
+    --
+    -- We strongly recommend that you avoid including any sensitive data in the
+    -- description of a custom data identifier. Other users of your account
+    -- might be able to see this description, depending on the actions that
+    -- they\'re allowed to perform in Amazon Macie.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | An array that lists specific character sequences (/ignore words/) to
+    -- exclude from the results. If the text matched by the regular expression
+    -- contains any string in this array, Amazon Macie ignores it. The array
+    -- can contain as many as 10 ignore words. Each ignore word can contain
+    -- 4-90 UTF-8 characters. Ignore words are case sensitive.
+    ignoreWords :: Prelude.Maybe [Prelude.Text],
+    -- | An array that lists specific character sequences (/keywords/), one of
+    -- which must precede and be within proximity (maximumMatchDistance) of the
+    -- regular expression to match. The array can contain as many as 50
+    -- keywords. Each keyword can contain 3-90 UTF-8 characters. Keywords
+    -- aren\'t case sensitive.
+    keywords :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of characters that can exist between the end of at
+    -- least one complete character sequence specified by the keywords array
+    -- and the end of the text that matches the regex pattern. If a complete
+    -- keyword precedes all the text that matches the pattern and the keyword
+    -- is within the specified distance, Amazon Macie includes the result. The
+    -- distance can be 1-300 characters. The default value is 50.
+    maximumMatchDistance :: Prelude.Maybe Prelude.Int,
+    -- | The severity to assign to findings that the custom data identifier
+    -- produces, based on the number of occurrences of text that matches the
+    -- custom data identifier\'s detection criteria. You can specify as many as
+    -- three SeverityLevel objects in this array, one for each severity: LOW,
+    -- MEDIUM, or HIGH. If you specify more than one, the occurrences
+    -- thresholds must be in ascending order by severity, moving from LOW to
+    -- HIGH. For example, 1 for LOW, 50 for MEDIUM, and 100 for HIGH. If an S3
+    -- object contains fewer occurrences than the lowest specified threshold,
+    -- Amazon Macie doesn\'t create a finding.
+    --
+    -- If you don\'t specify any values for this array, Macie creates findings
+    -- for S3 objects that contain at least one occurrence of text that matches
+    -- the detection criteria, and Macie assigns the MEDIUM severity to those
+    -- findings.
+    severityLevels :: Prelude.Maybe [SeverityLevel],
+    -- | A map of key-value pairs that specifies the tags to associate with the
+    -- custom data identifier.
+    --
+    -- A custom data identifier can have a maximum of 50 tags. Each tag
+    -- consists of a tag key and an associated tag value. The maximum length of
+    -- a tag key is 128 characters. The maximum length of a tag value is 256
+    -- characters.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The regular expression (/regex/) that defines the pattern to match. The
+    -- expression can contain as many as 512 characters.
+    regex :: Prelude.Text,
+    -- | A custom name for the custom data identifier. The name can contain as
+    -- many as 128 characters.
+    --
+    -- We strongly recommend that you avoid including any sensitive data in the
+    -- name of a custom data identifier. Other users of your account might be
+    -- able to see this name, depending on the actions that they\'re allowed to
+    -- perform in Amazon Macie.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCustomDataIdentifier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createCustomDataIdentifier_clientToken' - A unique, case-sensitive token that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'description', 'createCustomDataIdentifier_description' - A custom description of the custom data identifier. The description can
+-- contain as many as 512 characters.
+--
+-- We strongly recommend that you avoid including any sensitive data in the
+-- description of a custom data identifier. Other users of your account
+-- might be able to see this description, depending on the actions that
+-- they\'re allowed to perform in Amazon Macie.
+--
+-- 'ignoreWords', 'createCustomDataIdentifier_ignoreWords' - An array that lists specific character sequences (/ignore words/) to
+-- exclude from the results. If the text matched by the regular expression
+-- contains any string in this array, Amazon Macie ignores it. The array
+-- can contain as many as 10 ignore words. Each ignore word can contain
+-- 4-90 UTF-8 characters. Ignore words are case sensitive.
+--
+-- 'keywords', 'createCustomDataIdentifier_keywords' - An array that lists specific character sequences (/keywords/), one of
+-- which must precede and be within proximity (maximumMatchDistance) of the
+-- regular expression to match. The array can contain as many as 50
+-- keywords. Each keyword can contain 3-90 UTF-8 characters. Keywords
+-- aren\'t case sensitive.
+--
+-- 'maximumMatchDistance', 'createCustomDataIdentifier_maximumMatchDistance' - The maximum number of characters that can exist between the end of at
+-- least one complete character sequence specified by the keywords array
+-- and the end of the text that matches the regex pattern. If a complete
+-- keyword precedes all the text that matches the pattern and the keyword
+-- is within the specified distance, Amazon Macie includes the result. The
+-- distance can be 1-300 characters. The default value is 50.
+--
+-- 'severityLevels', 'createCustomDataIdentifier_severityLevels' - The severity to assign to findings that the custom data identifier
+-- produces, based on the number of occurrences of text that matches the
+-- custom data identifier\'s detection criteria. You can specify as many as
+-- three SeverityLevel objects in this array, one for each severity: LOW,
+-- MEDIUM, or HIGH. If you specify more than one, the occurrences
+-- thresholds must be in ascending order by severity, moving from LOW to
+-- HIGH. For example, 1 for LOW, 50 for MEDIUM, and 100 for HIGH. If an S3
+-- object contains fewer occurrences than the lowest specified threshold,
+-- Amazon Macie doesn\'t create a finding.
+--
+-- If you don\'t specify any values for this array, Macie creates findings
+-- for S3 objects that contain at least one occurrence of text that matches
+-- the detection criteria, and Macie assigns the MEDIUM severity to those
+-- findings.
+--
+-- 'tags', 'createCustomDataIdentifier_tags' - A map of key-value pairs that specifies the tags to associate with the
+-- custom data identifier.
+--
+-- A custom data identifier can have a maximum of 50 tags. Each tag
+-- consists of a tag key and an associated tag value. The maximum length of
+-- a tag key is 128 characters. The maximum length of a tag value is 256
+-- characters.
+--
+-- 'regex', 'createCustomDataIdentifier_regex' - The regular expression (/regex/) that defines the pattern to match. The
+-- expression can contain as many as 512 characters.
+--
+-- 'name', 'createCustomDataIdentifier_name' - A custom name for the custom data identifier. The name can contain as
+-- many as 128 characters.
+--
+-- We strongly recommend that you avoid including any sensitive data in the
+-- name of a custom data identifier. Other users of your account might be
+-- able to see this name, depending on the actions that they\'re allowed to
+-- perform in Amazon Macie.
+newCreateCustomDataIdentifier ::
+  -- | 'regex'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateCustomDataIdentifier
+newCreateCustomDataIdentifier pRegex_ pName_ =
+  CreateCustomDataIdentifier'
+    { clientToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      ignoreWords = Prelude.Nothing,
+      keywords = Prelude.Nothing,
+      maximumMatchDistance = Prelude.Nothing,
+      severityLevels = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      regex = pRegex_,
+      name = pName_
+    }
+
+-- | A unique, case-sensitive token that you provide to ensure the
+-- idempotency of the request.
+createCustomDataIdentifier_clientToken :: Lens.Lens' CreateCustomDataIdentifier (Prelude.Maybe Prelude.Text)
+createCustomDataIdentifier_clientToken = Lens.lens (\CreateCustomDataIdentifier' {clientToken} -> clientToken) (\s@CreateCustomDataIdentifier' {} a -> s {clientToken = a} :: CreateCustomDataIdentifier)
+
+-- | A custom description of the custom data identifier. The description can
+-- contain as many as 512 characters.
+--
+-- We strongly recommend that you avoid including any sensitive data in the
+-- description of a custom data identifier. Other users of your account
+-- might be able to see this description, depending on the actions that
+-- they\'re allowed to perform in Amazon Macie.
+createCustomDataIdentifier_description :: Lens.Lens' CreateCustomDataIdentifier (Prelude.Maybe Prelude.Text)
+createCustomDataIdentifier_description = Lens.lens (\CreateCustomDataIdentifier' {description} -> description) (\s@CreateCustomDataIdentifier' {} a -> s {description = a} :: CreateCustomDataIdentifier)
+
+-- | An array that lists specific character sequences (/ignore words/) to
+-- exclude from the results. If the text matched by the regular expression
+-- contains any string in this array, Amazon Macie ignores it. The array
+-- can contain as many as 10 ignore words. Each ignore word can contain
+-- 4-90 UTF-8 characters. Ignore words are case sensitive.
+createCustomDataIdentifier_ignoreWords :: Lens.Lens' CreateCustomDataIdentifier (Prelude.Maybe [Prelude.Text])
+createCustomDataIdentifier_ignoreWords = Lens.lens (\CreateCustomDataIdentifier' {ignoreWords} -> ignoreWords) (\s@CreateCustomDataIdentifier' {} a -> s {ignoreWords = a} :: CreateCustomDataIdentifier) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array that lists specific character sequences (/keywords/), one of
+-- which must precede and be within proximity (maximumMatchDistance) of the
+-- regular expression to match. The array can contain as many as 50
+-- keywords. Each keyword can contain 3-90 UTF-8 characters. Keywords
+-- aren\'t case sensitive.
+createCustomDataIdentifier_keywords :: Lens.Lens' CreateCustomDataIdentifier (Prelude.Maybe [Prelude.Text])
+createCustomDataIdentifier_keywords = Lens.lens (\CreateCustomDataIdentifier' {keywords} -> keywords) (\s@CreateCustomDataIdentifier' {} a -> s {keywords = a} :: CreateCustomDataIdentifier) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of characters that can exist between the end of at
+-- least one complete character sequence specified by the keywords array
+-- and the end of the text that matches the regex pattern. If a complete
+-- keyword precedes all the text that matches the pattern and the keyword
+-- is within the specified distance, Amazon Macie includes the result. The
+-- distance can be 1-300 characters. The default value is 50.
+createCustomDataIdentifier_maximumMatchDistance :: Lens.Lens' CreateCustomDataIdentifier (Prelude.Maybe Prelude.Int)
+createCustomDataIdentifier_maximumMatchDistance = Lens.lens (\CreateCustomDataIdentifier' {maximumMatchDistance} -> maximumMatchDistance) (\s@CreateCustomDataIdentifier' {} a -> s {maximumMatchDistance = a} :: CreateCustomDataIdentifier)
+
+-- | The severity to assign to findings that the custom data identifier
+-- produces, based on the number of occurrences of text that matches the
+-- custom data identifier\'s detection criteria. You can specify as many as
+-- three SeverityLevel objects in this array, one for each severity: LOW,
+-- MEDIUM, or HIGH. If you specify more than one, the occurrences
+-- thresholds must be in ascending order by severity, moving from LOW to
+-- HIGH. For example, 1 for LOW, 50 for MEDIUM, and 100 for HIGH. If an S3
+-- object contains fewer occurrences than the lowest specified threshold,
+-- Amazon Macie doesn\'t create a finding.
+--
+-- If you don\'t specify any values for this array, Macie creates findings
+-- for S3 objects that contain at least one occurrence of text that matches
+-- the detection criteria, and Macie assigns the MEDIUM severity to those
+-- findings.
+createCustomDataIdentifier_severityLevels :: Lens.Lens' CreateCustomDataIdentifier (Prelude.Maybe [SeverityLevel])
+createCustomDataIdentifier_severityLevels = Lens.lens (\CreateCustomDataIdentifier' {severityLevels} -> severityLevels) (\s@CreateCustomDataIdentifier' {} a -> s {severityLevels = a} :: CreateCustomDataIdentifier) Prelude.. Lens.mapping Lens.coerced
+
+-- | A map of key-value pairs that specifies the tags to associate with the
+-- custom data identifier.
+--
+-- A custom data identifier can have a maximum of 50 tags. Each tag
+-- consists of a tag key and an associated tag value. The maximum length of
+-- a tag key is 128 characters. The maximum length of a tag value is 256
+-- characters.
+createCustomDataIdentifier_tags :: Lens.Lens' CreateCustomDataIdentifier (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createCustomDataIdentifier_tags = Lens.lens (\CreateCustomDataIdentifier' {tags} -> tags) (\s@CreateCustomDataIdentifier' {} a -> s {tags = a} :: CreateCustomDataIdentifier) Prelude.. Lens.mapping Lens.coerced
+
+-- | The regular expression (/regex/) that defines the pattern to match. The
+-- expression can contain as many as 512 characters.
+createCustomDataIdentifier_regex :: Lens.Lens' CreateCustomDataIdentifier Prelude.Text
+createCustomDataIdentifier_regex = Lens.lens (\CreateCustomDataIdentifier' {regex} -> regex) (\s@CreateCustomDataIdentifier' {} a -> s {regex = a} :: CreateCustomDataIdentifier)
+
+-- | A custom name for the custom data identifier. The name can contain as
+-- many as 128 characters.
+--
+-- We strongly recommend that you avoid including any sensitive data in the
+-- name of a custom data identifier. Other users of your account might be
+-- able to see this name, depending on the actions that they\'re allowed to
+-- perform in Amazon Macie.
+createCustomDataIdentifier_name :: Lens.Lens' CreateCustomDataIdentifier Prelude.Text
+createCustomDataIdentifier_name = Lens.lens (\CreateCustomDataIdentifier' {name} -> name) (\s@CreateCustomDataIdentifier' {} a -> s {name = a} :: CreateCustomDataIdentifier)
+
+instance Core.AWSRequest CreateCustomDataIdentifier where
+  type
+    AWSResponse CreateCustomDataIdentifier =
+      CreateCustomDataIdentifierResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateCustomDataIdentifierResponse'
+            Prelude.<$> (x Data..?> "customDataIdentifierId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateCustomDataIdentifier where
+  hashWithSalt _salt CreateCustomDataIdentifier' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` ignoreWords
+      `Prelude.hashWithSalt` keywords
+      `Prelude.hashWithSalt` maximumMatchDistance
+      `Prelude.hashWithSalt` severityLevels
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` regex
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateCustomDataIdentifier where
+  rnf CreateCustomDataIdentifier' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf ignoreWords
+      `Prelude.seq` Prelude.rnf keywords
+      `Prelude.seq` Prelude.rnf maximumMatchDistance
+      `Prelude.seq` Prelude.rnf severityLevels
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf regex
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateCustomDataIdentifier where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateCustomDataIdentifier where
+  toJSON CreateCustomDataIdentifier' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            ("ignoreWords" Data..=) Prelude.<$> ignoreWords,
+            ("keywords" Data..=) Prelude.<$> keywords,
+            ("maximumMatchDistance" Data..=)
+              Prelude.<$> maximumMatchDistance,
+            ("severityLevels" Data..=)
+              Prelude.<$> severityLevels,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("regex" Data..= regex),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateCustomDataIdentifier where
+  toPath = Prelude.const "/custom-data-identifiers"
+
+instance Data.ToQuery CreateCustomDataIdentifier where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateCustomDataIdentifierResponse' smart constructor.
+data CreateCustomDataIdentifierResponse = CreateCustomDataIdentifierResponse'
+  { -- | The unique identifier for the custom data identifier that was created.
+    customDataIdentifierId :: 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 'CreateCustomDataIdentifierResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'customDataIdentifierId', 'createCustomDataIdentifierResponse_customDataIdentifierId' - The unique identifier for the custom data identifier that was created.
+--
+-- 'httpStatus', 'createCustomDataIdentifierResponse_httpStatus' - The response's http status code.
+newCreateCustomDataIdentifierResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateCustomDataIdentifierResponse
+newCreateCustomDataIdentifierResponse pHttpStatus_ =
+  CreateCustomDataIdentifierResponse'
+    { customDataIdentifierId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier for the custom data identifier that was created.
+createCustomDataIdentifierResponse_customDataIdentifierId :: Lens.Lens' CreateCustomDataIdentifierResponse (Prelude.Maybe Prelude.Text)
+createCustomDataIdentifierResponse_customDataIdentifierId = Lens.lens (\CreateCustomDataIdentifierResponse' {customDataIdentifierId} -> customDataIdentifierId) (\s@CreateCustomDataIdentifierResponse' {} a -> s {customDataIdentifierId = a} :: CreateCustomDataIdentifierResponse)
+
+-- | The response's http status code.
+createCustomDataIdentifierResponse_httpStatus :: Lens.Lens' CreateCustomDataIdentifierResponse Prelude.Int
+createCustomDataIdentifierResponse_httpStatus = Lens.lens (\CreateCustomDataIdentifierResponse' {httpStatus} -> httpStatus) (\s@CreateCustomDataIdentifierResponse' {} a -> s {httpStatus = a} :: CreateCustomDataIdentifierResponse)
+
+instance
+  Prelude.NFData
+    CreateCustomDataIdentifierResponse
+  where
+  rnf CreateCustomDataIdentifierResponse' {..} =
+    Prelude.rnf customDataIdentifierId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/CreateFindingsFilter.hs b/gen/Amazonka/MacieV2/CreateFindingsFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/CreateFindingsFilter.hs
@@ -0,0 +1,341 @@
+{-# 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.MacieV2.CreateFindingsFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates and defines the criteria and other settings for a findings
+-- filter.
+module Amazonka.MacieV2.CreateFindingsFilter
+  ( -- * Creating a Request
+    CreateFindingsFilter (..),
+    newCreateFindingsFilter,
+
+    -- * Request Lenses
+    createFindingsFilter_clientToken,
+    createFindingsFilter_description,
+    createFindingsFilter_position,
+    createFindingsFilter_tags,
+    createFindingsFilter_action,
+    createFindingsFilter_findingCriteria,
+    createFindingsFilter_name,
+
+    -- * Destructuring the Response
+    CreateFindingsFilterResponse (..),
+    newCreateFindingsFilterResponse,
+
+    -- * Response Lenses
+    createFindingsFilterResponse_arn,
+    createFindingsFilterResponse_id,
+    createFindingsFilterResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateFindingsFilter' smart constructor.
+data CreateFindingsFilter = CreateFindingsFilter'
+  { -- | A unique, case-sensitive token that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A custom description of the filter. The description can contain as many
+    -- as 512 characters.
+    --
+    -- We strongly recommend that you avoid including any sensitive data in the
+    -- description of a filter. Other users of your account might be able to
+    -- see this description, depending on the actions that they\'re allowed to
+    -- perform in Amazon Macie.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The position of the filter in the list of saved filters on the Amazon
+    -- Macie console. This value also determines the order in which the filter
+    -- is applied to findings, relative to other filters that are also applied
+    -- to the findings.
+    position :: Prelude.Maybe Prelude.Int,
+    -- | A map of key-value pairs that specifies the tags to associate with the
+    -- filter.
+    --
+    -- A findings filter can have a maximum of 50 tags. Each tag consists of a
+    -- tag key and an associated tag value. The maximum length of a tag key is
+    -- 128 characters. The maximum length of a tag value is 256 characters.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The action to perform on findings that match the filter criteria
+    -- (findingCriteria). Valid values are: ARCHIVE, suppress (automatically
+    -- archive) the findings; and, NOOP, don\'t perform any action on the
+    -- findings.
+    action :: FindingsFilterAction,
+    -- | The criteria to use to filter findings.
+    findingCriteria :: FindingCriteria,
+    -- | A custom name for the filter. The name must contain at least 3
+    -- characters and can contain as many as 64 characters.
+    --
+    -- We strongly recommend that you avoid including any sensitive data in the
+    -- name of a filter. Other users of your account might be able to see this
+    -- name, depending on the actions that they\'re allowed to perform in
+    -- Amazon Macie.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFindingsFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createFindingsFilter_clientToken' - A unique, case-sensitive token that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'description', 'createFindingsFilter_description' - A custom description of the filter. The description can contain as many
+-- as 512 characters.
+--
+-- We strongly recommend that you avoid including any sensitive data in the
+-- description of a filter. Other users of your account might be able to
+-- see this description, depending on the actions that they\'re allowed to
+-- perform in Amazon Macie.
+--
+-- 'position', 'createFindingsFilter_position' - The position of the filter in the list of saved filters on the Amazon
+-- Macie console. This value also determines the order in which the filter
+-- is applied to findings, relative to other filters that are also applied
+-- to the findings.
+--
+-- 'tags', 'createFindingsFilter_tags' - A map of key-value pairs that specifies the tags to associate with the
+-- filter.
+--
+-- A findings filter can have a maximum of 50 tags. Each tag consists of a
+-- tag key and an associated tag value. The maximum length of a tag key is
+-- 128 characters. The maximum length of a tag value is 256 characters.
+--
+-- 'action', 'createFindingsFilter_action' - The action to perform on findings that match the filter criteria
+-- (findingCriteria). Valid values are: ARCHIVE, suppress (automatically
+-- archive) the findings; and, NOOP, don\'t perform any action on the
+-- findings.
+--
+-- 'findingCriteria', 'createFindingsFilter_findingCriteria' - The criteria to use to filter findings.
+--
+-- 'name', 'createFindingsFilter_name' - A custom name for the filter. The name must contain at least 3
+-- characters and can contain as many as 64 characters.
+--
+-- We strongly recommend that you avoid including any sensitive data in the
+-- name of a filter. Other users of your account might be able to see this
+-- name, depending on the actions that they\'re allowed to perform in
+-- Amazon Macie.
+newCreateFindingsFilter ::
+  -- | 'action'
+  FindingsFilterAction ->
+  -- | 'findingCriteria'
+  FindingCriteria ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateFindingsFilter
+newCreateFindingsFilter
+  pAction_
+  pFindingCriteria_
+  pName_ =
+    CreateFindingsFilter'
+      { clientToken =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        position = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        action = pAction_,
+        findingCriteria = pFindingCriteria_,
+        name = pName_
+      }
+
+-- | A unique, case-sensitive token that you provide to ensure the
+-- idempotency of the request.
+createFindingsFilter_clientToken :: Lens.Lens' CreateFindingsFilter (Prelude.Maybe Prelude.Text)
+createFindingsFilter_clientToken = Lens.lens (\CreateFindingsFilter' {clientToken} -> clientToken) (\s@CreateFindingsFilter' {} a -> s {clientToken = a} :: CreateFindingsFilter)
+
+-- | A custom description of the filter. The description can contain as many
+-- as 512 characters.
+--
+-- We strongly recommend that you avoid including any sensitive data in the
+-- description of a filter. Other users of your account might be able to
+-- see this description, depending on the actions that they\'re allowed to
+-- perform in Amazon Macie.
+createFindingsFilter_description :: Lens.Lens' CreateFindingsFilter (Prelude.Maybe Prelude.Text)
+createFindingsFilter_description = Lens.lens (\CreateFindingsFilter' {description} -> description) (\s@CreateFindingsFilter' {} a -> s {description = a} :: CreateFindingsFilter)
+
+-- | The position of the filter in the list of saved filters on the Amazon
+-- Macie console. This value also determines the order in which the filter
+-- is applied to findings, relative to other filters that are also applied
+-- to the findings.
+createFindingsFilter_position :: Lens.Lens' CreateFindingsFilter (Prelude.Maybe Prelude.Int)
+createFindingsFilter_position = Lens.lens (\CreateFindingsFilter' {position} -> position) (\s@CreateFindingsFilter' {} a -> s {position = a} :: CreateFindingsFilter)
+
+-- | A map of key-value pairs that specifies the tags to associate with the
+-- filter.
+--
+-- A findings filter can have a maximum of 50 tags. Each tag consists of a
+-- tag key and an associated tag value. The maximum length of a tag key is
+-- 128 characters. The maximum length of a tag value is 256 characters.
+createFindingsFilter_tags :: Lens.Lens' CreateFindingsFilter (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createFindingsFilter_tags = Lens.lens (\CreateFindingsFilter' {tags} -> tags) (\s@CreateFindingsFilter' {} a -> s {tags = a} :: CreateFindingsFilter) Prelude.. Lens.mapping Lens.coerced
+
+-- | The action to perform on findings that match the filter criteria
+-- (findingCriteria). Valid values are: ARCHIVE, suppress (automatically
+-- archive) the findings; and, NOOP, don\'t perform any action on the
+-- findings.
+createFindingsFilter_action :: Lens.Lens' CreateFindingsFilter FindingsFilterAction
+createFindingsFilter_action = Lens.lens (\CreateFindingsFilter' {action} -> action) (\s@CreateFindingsFilter' {} a -> s {action = a} :: CreateFindingsFilter)
+
+-- | The criteria to use to filter findings.
+createFindingsFilter_findingCriteria :: Lens.Lens' CreateFindingsFilter FindingCriteria
+createFindingsFilter_findingCriteria = Lens.lens (\CreateFindingsFilter' {findingCriteria} -> findingCriteria) (\s@CreateFindingsFilter' {} a -> s {findingCriteria = a} :: CreateFindingsFilter)
+
+-- | A custom name for the filter. The name must contain at least 3
+-- characters and can contain as many as 64 characters.
+--
+-- We strongly recommend that you avoid including any sensitive data in the
+-- name of a filter. Other users of your account might be able to see this
+-- name, depending on the actions that they\'re allowed to perform in
+-- Amazon Macie.
+createFindingsFilter_name :: Lens.Lens' CreateFindingsFilter Prelude.Text
+createFindingsFilter_name = Lens.lens (\CreateFindingsFilter' {name} -> name) (\s@CreateFindingsFilter' {} a -> s {name = a} :: CreateFindingsFilter)
+
+instance Core.AWSRequest CreateFindingsFilter where
+  type
+    AWSResponse CreateFindingsFilter =
+      CreateFindingsFilterResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateFindingsFilterResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateFindingsFilter where
+  hashWithSalt _salt CreateFindingsFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` position
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` action
+      `Prelude.hashWithSalt` findingCriteria
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateFindingsFilter where
+  rnf CreateFindingsFilter' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf position
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf action
+      `Prelude.seq` Prelude.rnf findingCriteria
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateFindingsFilter where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateFindingsFilter where
+  toJSON CreateFindingsFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            ("position" Data..=) Prelude.<$> position,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("action" Data..= action),
+            Prelude.Just
+              ("findingCriteria" Data..= findingCriteria),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateFindingsFilter where
+  toPath = Prelude.const "/findingsfilters"
+
+instance Data.ToQuery CreateFindingsFilter where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateFindingsFilterResponse' smart constructor.
+data CreateFindingsFilterResponse = CreateFindingsFilterResponse'
+  { -- | The Amazon Resource Name (ARN) of the filter that was created.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the filter that was created.
+    id :: 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 'CreateFindingsFilterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createFindingsFilterResponse_arn' - The Amazon Resource Name (ARN) of the filter that was created.
+--
+-- 'id', 'createFindingsFilterResponse_id' - The unique identifier for the filter that was created.
+--
+-- 'httpStatus', 'createFindingsFilterResponse_httpStatus' - The response's http status code.
+newCreateFindingsFilterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateFindingsFilterResponse
+newCreateFindingsFilterResponse pHttpStatus_ =
+  CreateFindingsFilterResponse'
+    { arn =
+        Prelude.Nothing,
+      id = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the filter that was created.
+createFindingsFilterResponse_arn :: Lens.Lens' CreateFindingsFilterResponse (Prelude.Maybe Prelude.Text)
+createFindingsFilterResponse_arn = Lens.lens (\CreateFindingsFilterResponse' {arn} -> arn) (\s@CreateFindingsFilterResponse' {} a -> s {arn = a} :: CreateFindingsFilterResponse)
+
+-- | The unique identifier for the filter that was created.
+createFindingsFilterResponse_id :: Lens.Lens' CreateFindingsFilterResponse (Prelude.Maybe Prelude.Text)
+createFindingsFilterResponse_id = Lens.lens (\CreateFindingsFilterResponse' {id} -> id) (\s@CreateFindingsFilterResponse' {} a -> s {id = a} :: CreateFindingsFilterResponse)
+
+-- | The response's http status code.
+createFindingsFilterResponse_httpStatus :: Lens.Lens' CreateFindingsFilterResponse Prelude.Int
+createFindingsFilterResponse_httpStatus = Lens.lens (\CreateFindingsFilterResponse' {httpStatus} -> httpStatus) (\s@CreateFindingsFilterResponse' {} a -> s {httpStatus = a} :: CreateFindingsFilterResponse)
+
+instance Prelude.NFData CreateFindingsFilterResponse where
+  rnf CreateFindingsFilterResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/CreateInvitations.hs b/gen/Amazonka/MacieV2/CreateInvitations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/CreateInvitations.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.MacieV2.CreateInvitations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sends an Amazon Macie membership invitation to one or more accounts.
+module Amazonka.MacieV2.CreateInvitations
+  ( -- * Creating a Request
+    CreateInvitations (..),
+    newCreateInvitations,
+
+    -- * Request Lenses
+    createInvitations_disableEmailNotification,
+    createInvitations_message,
+    createInvitations_accountIds,
+
+    -- * Destructuring the Response
+    CreateInvitationsResponse (..),
+    newCreateInvitationsResponse,
+
+    -- * Response Lenses
+    createInvitationsResponse_unprocessedAccounts,
+    createInvitationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateInvitations' smart constructor.
+data CreateInvitations = CreateInvitations'
+  { -- | Specifies whether to send the invitation as an email message. If this
+    -- value is false, Amazon Macie sends the invitation (as an email message)
+    -- to the email address that you specified for the recipient\'s account
+    -- when you associated the account with your account. The default value is
+    -- false.
+    disableEmailNotification :: Prelude.Maybe Prelude.Bool,
+    -- | Custom text to include in the email message that contains the
+    -- invitation. The text can contain as many as 80 alphanumeric characters.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | An array that lists Amazon Web Services account IDs, one for each
+    -- account to send the invitation to.
+    accountIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateInvitations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'disableEmailNotification', 'createInvitations_disableEmailNotification' - Specifies whether to send the invitation as an email message. If this
+-- value is false, Amazon Macie sends the invitation (as an email message)
+-- to the email address that you specified for the recipient\'s account
+-- when you associated the account with your account. The default value is
+-- false.
+--
+-- 'message', 'createInvitations_message' - Custom text to include in the email message that contains the
+-- invitation. The text can contain as many as 80 alphanumeric characters.
+--
+-- 'accountIds', 'createInvitations_accountIds' - An array that lists Amazon Web Services account IDs, one for each
+-- account to send the invitation to.
+newCreateInvitations ::
+  CreateInvitations
+newCreateInvitations =
+  CreateInvitations'
+    { disableEmailNotification =
+        Prelude.Nothing,
+      message = Prelude.Nothing,
+      accountIds = Prelude.mempty
+    }
+
+-- | Specifies whether to send the invitation as an email message. If this
+-- value is false, Amazon Macie sends the invitation (as an email message)
+-- to the email address that you specified for the recipient\'s account
+-- when you associated the account with your account. The default value is
+-- false.
+createInvitations_disableEmailNotification :: Lens.Lens' CreateInvitations (Prelude.Maybe Prelude.Bool)
+createInvitations_disableEmailNotification = Lens.lens (\CreateInvitations' {disableEmailNotification} -> disableEmailNotification) (\s@CreateInvitations' {} a -> s {disableEmailNotification = a} :: CreateInvitations)
+
+-- | Custom text to include in the email message that contains the
+-- invitation. The text can contain as many as 80 alphanumeric characters.
+createInvitations_message :: Lens.Lens' CreateInvitations (Prelude.Maybe Prelude.Text)
+createInvitations_message = Lens.lens (\CreateInvitations' {message} -> message) (\s@CreateInvitations' {} a -> s {message = a} :: CreateInvitations)
+
+-- | An array that lists Amazon Web Services account IDs, one for each
+-- account to send the invitation to.
+createInvitations_accountIds :: Lens.Lens' CreateInvitations [Prelude.Text]
+createInvitations_accountIds = Lens.lens (\CreateInvitations' {accountIds} -> accountIds) (\s@CreateInvitations' {} a -> s {accountIds = a} :: CreateInvitations) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateInvitations where
+  type
+    AWSResponse CreateInvitations =
+      CreateInvitationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateInvitationsResponse'
+            Prelude.<$> ( x
+                            Data..?> "unprocessedAccounts"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateInvitations where
+  hashWithSalt _salt CreateInvitations' {..} =
+    _salt
+      `Prelude.hashWithSalt` disableEmailNotification
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` accountIds
+
+instance Prelude.NFData CreateInvitations where
+  rnf CreateInvitations' {..} =
+    Prelude.rnf disableEmailNotification
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf accountIds
+
+instance Data.ToHeaders CreateInvitations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateInvitations where
+  toJSON CreateInvitations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("disableEmailNotification" Data..=)
+              Prelude.<$> disableEmailNotification,
+            ("message" Data..=) Prelude.<$> message,
+            Prelude.Just ("accountIds" Data..= accountIds)
+          ]
+      )
+
+instance Data.ToPath CreateInvitations where
+  toPath = Prelude.const "/invitations"
+
+instance Data.ToQuery CreateInvitations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateInvitationsResponse' smart constructor.
+data CreateInvitationsResponse = CreateInvitationsResponse'
+  { -- | An array of objects, one for each account whose invitation hasn\'t been
+    -- processed. Each object identifies the account and explains why the
+    -- invitation hasn\'t been processed for the account.
+    unprocessedAccounts :: Prelude.Maybe [UnprocessedAccount],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateInvitationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'unprocessedAccounts', 'createInvitationsResponse_unprocessedAccounts' - An array of objects, one for each account whose invitation hasn\'t been
+-- processed. Each object identifies the account and explains why the
+-- invitation hasn\'t been processed for the account.
+--
+-- 'httpStatus', 'createInvitationsResponse_httpStatus' - The response's http status code.
+newCreateInvitationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateInvitationsResponse
+newCreateInvitationsResponse pHttpStatus_ =
+  CreateInvitationsResponse'
+    { unprocessedAccounts =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each account whose invitation hasn\'t been
+-- processed. Each object identifies the account and explains why the
+-- invitation hasn\'t been processed for the account.
+createInvitationsResponse_unprocessedAccounts :: Lens.Lens' CreateInvitationsResponse (Prelude.Maybe [UnprocessedAccount])
+createInvitationsResponse_unprocessedAccounts = Lens.lens (\CreateInvitationsResponse' {unprocessedAccounts} -> unprocessedAccounts) (\s@CreateInvitationsResponse' {} a -> s {unprocessedAccounts = a} :: CreateInvitationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createInvitationsResponse_httpStatus :: Lens.Lens' CreateInvitationsResponse Prelude.Int
+createInvitationsResponse_httpStatus = Lens.lens (\CreateInvitationsResponse' {httpStatus} -> httpStatus) (\s@CreateInvitationsResponse' {} a -> s {httpStatus = a} :: CreateInvitationsResponse)
+
+instance Prelude.NFData CreateInvitationsResponse where
+  rnf CreateInvitationsResponse' {..} =
+    Prelude.rnf unprocessedAccounts
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/CreateMember.hs b/gen/Amazonka/MacieV2/CreateMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/CreateMember.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.CreateMember
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates an account with an Amazon Macie administrator account.
+module Amazonka.MacieV2.CreateMember
+  ( -- * Creating a Request
+    CreateMember (..),
+    newCreateMember,
+
+    -- * Request Lenses
+    createMember_tags,
+    createMember_account,
+
+    -- * Destructuring the Response
+    CreateMemberResponse (..),
+    newCreateMemberResponse,
+
+    -- * Response Lenses
+    createMemberResponse_arn,
+    createMemberResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateMember' smart constructor.
+data CreateMember = CreateMember'
+  { -- | A map of key-value pairs that specifies the tags to associate with the
+    -- account in Amazon Macie.
+    --
+    -- An account can have a maximum of 50 tags. Each tag consists of a tag key
+    -- and an associated tag value. The maximum length of a tag key is 128
+    -- characters. The maximum length of a tag value is 256 characters.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The details of the account to associate with the administrator account.
+    account :: AccountDetail
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateMember' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createMember_tags' - A map of key-value pairs that specifies the tags to associate with the
+-- account in Amazon Macie.
+--
+-- An account can have a maximum of 50 tags. Each tag consists of a tag key
+-- and an associated tag value. The maximum length of a tag key is 128
+-- characters. The maximum length of a tag value is 256 characters.
+--
+-- 'account', 'createMember_account' - The details of the account to associate with the administrator account.
+newCreateMember ::
+  -- | 'account'
+  AccountDetail ->
+  CreateMember
+newCreateMember pAccount_ =
+  CreateMember'
+    { tags = Prelude.Nothing,
+      account = pAccount_
+    }
+
+-- | A map of key-value pairs that specifies the tags to associate with the
+-- account in Amazon Macie.
+--
+-- An account can have a maximum of 50 tags. Each tag consists of a tag key
+-- and an associated tag value. The maximum length of a tag key is 128
+-- characters. The maximum length of a tag value is 256 characters.
+createMember_tags :: Lens.Lens' CreateMember (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createMember_tags = Lens.lens (\CreateMember' {tags} -> tags) (\s@CreateMember' {} a -> s {tags = a} :: CreateMember) Prelude.. Lens.mapping Lens.coerced
+
+-- | The details of the account to associate with the administrator account.
+createMember_account :: Lens.Lens' CreateMember AccountDetail
+createMember_account = Lens.lens (\CreateMember' {account} -> account) (\s@CreateMember' {} a -> s {account = a} :: CreateMember)
+
+instance Core.AWSRequest CreateMember where
+  type AWSResponse CreateMember = CreateMemberResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateMemberResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateMember where
+  hashWithSalt _salt CreateMember' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` account
+
+instance Prelude.NFData CreateMember where
+  rnf CreateMember' {..} =
+    Prelude.rnf tags `Prelude.seq` Prelude.rnf account
+
+instance Data.ToHeaders CreateMember where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateMember where
+  toJSON CreateMember' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("account" Data..= account)
+          ]
+      )
+
+instance Data.ToPath CreateMember where
+  toPath = Prelude.const "/members"
+
+instance Data.ToQuery CreateMember where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateMemberResponse' smart constructor.
+data CreateMemberResponse = CreateMemberResponse'
+  { -- | The Amazon Resource Name (ARN) of the account that was associated with
+    -- the administrator account.
+    arn :: 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 'CreateMemberResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createMemberResponse_arn' - The Amazon Resource Name (ARN) of the account that was associated with
+-- the administrator account.
+--
+-- 'httpStatus', 'createMemberResponse_httpStatus' - The response's http status code.
+newCreateMemberResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateMemberResponse
+newCreateMemberResponse pHttpStatus_ =
+  CreateMemberResponse'
+    { arn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the account that was associated with
+-- the administrator account.
+createMemberResponse_arn :: Lens.Lens' CreateMemberResponse (Prelude.Maybe Prelude.Text)
+createMemberResponse_arn = Lens.lens (\CreateMemberResponse' {arn} -> arn) (\s@CreateMemberResponse' {} a -> s {arn = a} :: CreateMemberResponse)
+
+-- | The response's http status code.
+createMemberResponse_httpStatus :: Lens.Lens' CreateMemberResponse Prelude.Int
+createMemberResponse_httpStatus = Lens.lens (\CreateMemberResponse' {httpStatus} -> httpStatus) (\s@CreateMemberResponse' {} a -> s {httpStatus = a} :: CreateMemberResponse)
+
+instance Prelude.NFData CreateMemberResponse where
+  rnf CreateMemberResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/CreateSampleFindings.hs b/gen/Amazonka/MacieV2/CreateSampleFindings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/CreateSampleFindings.hs
@@ -0,0 +1,160 @@
+{-# 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.MacieV2.CreateSampleFindings
+-- 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 sample findings.
+module Amazonka.MacieV2.CreateSampleFindings
+  ( -- * Creating a Request
+    CreateSampleFindings (..),
+    newCreateSampleFindings,
+
+    -- * Request Lenses
+    createSampleFindings_findingTypes,
+
+    -- * Destructuring the Response
+    CreateSampleFindingsResponse (..),
+    newCreateSampleFindingsResponse,
+
+    -- * Response Lenses
+    createSampleFindingsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateSampleFindings' smart constructor.
+data CreateSampleFindings = CreateSampleFindings'
+  { -- | An array of finding types, one for each type of sample finding to
+    -- create. To create a sample of every type of finding that Amazon Macie
+    -- supports, don\'t include this array in your request.
+    findingTypes :: Prelude.Maybe [FindingType]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSampleFindings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'findingTypes', 'createSampleFindings_findingTypes' - An array of finding types, one for each type of sample finding to
+-- create. To create a sample of every type of finding that Amazon Macie
+-- supports, don\'t include this array in your request.
+newCreateSampleFindings ::
+  CreateSampleFindings
+newCreateSampleFindings =
+  CreateSampleFindings'
+    { findingTypes =
+        Prelude.Nothing
+    }
+
+-- | An array of finding types, one for each type of sample finding to
+-- create. To create a sample of every type of finding that Amazon Macie
+-- supports, don\'t include this array in your request.
+createSampleFindings_findingTypes :: Lens.Lens' CreateSampleFindings (Prelude.Maybe [FindingType])
+createSampleFindings_findingTypes = Lens.lens (\CreateSampleFindings' {findingTypes} -> findingTypes) (\s@CreateSampleFindings' {} a -> s {findingTypes = a} :: CreateSampleFindings) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest CreateSampleFindings where
+  type
+    AWSResponse CreateSampleFindings =
+      CreateSampleFindingsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CreateSampleFindingsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateSampleFindings where
+  hashWithSalt _salt CreateSampleFindings' {..} =
+    _salt `Prelude.hashWithSalt` findingTypes
+
+instance Prelude.NFData CreateSampleFindings where
+  rnf CreateSampleFindings' {..} =
+    Prelude.rnf findingTypes
+
+instance Data.ToHeaders CreateSampleFindings where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateSampleFindings where
+  toJSON CreateSampleFindings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("findingTypes" Data..=) Prelude.<$> findingTypes]
+      )
+
+instance Data.ToPath CreateSampleFindings where
+  toPath = Prelude.const "/findings/sample"
+
+instance Data.ToQuery CreateSampleFindings where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateSampleFindingsResponse' smart constructor.
+data CreateSampleFindingsResponse = CreateSampleFindingsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSampleFindingsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createSampleFindingsResponse_httpStatus' - The response's http status code.
+newCreateSampleFindingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateSampleFindingsResponse
+newCreateSampleFindingsResponse pHttpStatus_ =
+  CreateSampleFindingsResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+createSampleFindingsResponse_httpStatus :: Lens.Lens' CreateSampleFindingsResponse Prelude.Int
+createSampleFindingsResponse_httpStatus = Lens.lens (\CreateSampleFindingsResponse' {httpStatus} -> httpStatus) (\s@CreateSampleFindingsResponse' {} a -> s {httpStatus = a} :: CreateSampleFindingsResponse)
+
+instance Prelude.NFData CreateSampleFindingsResponse where
+  rnf CreateSampleFindingsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/DeclineInvitations.hs b/gen/Amazonka/MacieV2/DeclineInvitations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/DeclineInvitations.hs
@@ -0,0 +1,175 @@
+{-# 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.MacieV2.DeclineInvitations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Declines Amazon Macie membership invitations that were received from
+-- specific accounts.
+module Amazonka.MacieV2.DeclineInvitations
+  ( -- * Creating a Request
+    DeclineInvitations (..),
+    newDeclineInvitations,
+
+    -- * Request Lenses
+    declineInvitations_accountIds,
+
+    -- * Destructuring the Response
+    DeclineInvitationsResponse (..),
+    newDeclineInvitationsResponse,
+
+    -- * Response Lenses
+    declineInvitationsResponse_unprocessedAccounts,
+    declineInvitationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeclineInvitations' smart constructor.
+data DeclineInvitations = DeclineInvitations'
+  { -- | An array that lists Amazon Web Services account IDs, one for each
+    -- account that sent an invitation to decline.
+    accountIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeclineInvitations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountIds', 'declineInvitations_accountIds' - An array that lists Amazon Web Services account IDs, one for each
+-- account that sent an invitation to decline.
+newDeclineInvitations ::
+  DeclineInvitations
+newDeclineInvitations =
+  DeclineInvitations' {accountIds = Prelude.mempty}
+
+-- | An array that lists Amazon Web Services account IDs, one for each
+-- account that sent an invitation to decline.
+declineInvitations_accountIds :: Lens.Lens' DeclineInvitations [Prelude.Text]
+declineInvitations_accountIds = Lens.lens (\DeclineInvitations' {accountIds} -> accountIds) (\s@DeclineInvitations' {} a -> s {accountIds = a} :: DeclineInvitations) Prelude.. Lens.coerced
+
+instance Core.AWSRequest DeclineInvitations where
+  type
+    AWSResponse DeclineInvitations =
+      DeclineInvitationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeclineInvitationsResponse'
+            Prelude.<$> ( x
+                            Data..?> "unprocessedAccounts"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeclineInvitations where
+  hashWithSalt _salt DeclineInvitations' {..} =
+    _salt `Prelude.hashWithSalt` accountIds
+
+instance Prelude.NFData DeclineInvitations where
+  rnf DeclineInvitations' {..} = Prelude.rnf accountIds
+
+instance Data.ToHeaders DeclineInvitations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeclineInvitations where
+  toJSON DeclineInvitations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("accountIds" Data..= accountIds)]
+      )
+
+instance Data.ToPath DeclineInvitations where
+  toPath = Prelude.const "/invitations/decline"
+
+instance Data.ToQuery DeclineInvitations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeclineInvitationsResponse' smart constructor.
+data DeclineInvitationsResponse = DeclineInvitationsResponse'
+  { -- | An array of objects, one for each account whose invitation hasn\'t been
+    -- declined. Each object identifies the account and explains why the
+    -- request hasn\'t been processed for that account.
+    unprocessedAccounts :: Prelude.Maybe [UnprocessedAccount],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeclineInvitationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'unprocessedAccounts', 'declineInvitationsResponse_unprocessedAccounts' - An array of objects, one for each account whose invitation hasn\'t been
+-- declined. Each object identifies the account and explains why the
+-- request hasn\'t been processed for that account.
+--
+-- 'httpStatus', 'declineInvitationsResponse_httpStatus' - The response's http status code.
+newDeclineInvitationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeclineInvitationsResponse
+newDeclineInvitationsResponse pHttpStatus_ =
+  DeclineInvitationsResponse'
+    { unprocessedAccounts =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each account whose invitation hasn\'t been
+-- declined. Each object identifies the account and explains why the
+-- request hasn\'t been processed for that account.
+declineInvitationsResponse_unprocessedAccounts :: Lens.Lens' DeclineInvitationsResponse (Prelude.Maybe [UnprocessedAccount])
+declineInvitationsResponse_unprocessedAccounts = Lens.lens (\DeclineInvitationsResponse' {unprocessedAccounts} -> unprocessedAccounts) (\s@DeclineInvitationsResponse' {} a -> s {unprocessedAccounts = a} :: DeclineInvitationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+declineInvitationsResponse_httpStatus :: Lens.Lens' DeclineInvitationsResponse Prelude.Int
+declineInvitationsResponse_httpStatus = Lens.lens (\DeclineInvitationsResponse' {httpStatus} -> httpStatus) (\s@DeclineInvitationsResponse' {} a -> s {httpStatus = a} :: DeclineInvitationsResponse)
+
+instance Prelude.NFData DeclineInvitationsResponse where
+  rnf DeclineInvitationsResponse' {..} =
+    Prelude.rnf unprocessedAccounts
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/DeleteAllowList.hs b/gen/Amazonka/MacieV2/DeleteAllowList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/DeleteAllowList.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.MacieV2.DeleteAllowList
+-- 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 allow list.
+module Amazonka.MacieV2.DeleteAllowList
+  ( -- * Creating a Request
+    DeleteAllowList (..),
+    newDeleteAllowList,
+
+    -- * Request Lenses
+    deleteAllowList_ignoreJobChecks,
+    deleteAllowList_id,
+
+    -- * Destructuring the Response
+    DeleteAllowListResponse (..),
+    newDeleteAllowListResponse,
+
+    -- * Response Lenses
+    deleteAllowListResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteAllowList' smart constructor.
+data DeleteAllowList = DeleteAllowList'
+  { -- | Specifies whether to force deletion of the allow list, even if active
+    -- classification jobs are configured to use the list.
+    --
+    -- When you try to delete an allow list, Amazon Macie checks for
+    -- classification jobs that use the list and have a status other than
+    -- COMPLETE or CANCELLED. By default, Macie rejects your request if any
+    -- jobs meet these criteria. To skip these checks and delete the list, set
+    -- this value to true. To delete the list only if no active jobs are
+    -- configured to use it, set this value to false.
+    ignoreJobChecks :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the Amazon Macie resource that the request
+    -- applies to.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAllowList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ignoreJobChecks', 'deleteAllowList_ignoreJobChecks' - Specifies whether to force deletion of the allow list, even if active
+-- classification jobs are configured to use the list.
+--
+-- When you try to delete an allow list, Amazon Macie checks for
+-- classification jobs that use the list and have a status other than
+-- COMPLETE or CANCELLED. By default, Macie rejects your request if any
+-- jobs meet these criteria. To skip these checks and delete the list, set
+-- this value to true. To delete the list only if no active jobs are
+-- configured to use it, set this value to false.
+--
+-- 'id', 'deleteAllowList_id' - The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+newDeleteAllowList ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteAllowList
+newDeleteAllowList pId_ =
+  DeleteAllowList'
+    { ignoreJobChecks = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | Specifies whether to force deletion of the allow list, even if active
+-- classification jobs are configured to use the list.
+--
+-- When you try to delete an allow list, Amazon Macie checks for
+-- classification jobs that use the list and have a status other than
+-- COMPLETE or CANCELLED. By default, Macie rejects your request if any
+-- jobs meet these criteria. To skip these checks and delete the list, set
+-- this value to true. To delete the list only if no active jobs are
+-- configured to use it, set this value to false.
+deleteAllowList_ignoreJobChecks :: Lens.Lens' DeleteAllowList (Prelude.Maybe Prelude.Text)
+deleteAllowList_ignoreJobChecks = Lens.lens (\DeleteAllowList' {ignoreJobChecks} -> ignoreJobChecks) (\s@DeleteAllowList' {} a -> s {ignoreJobChecks = a} :: DeleteAllowList)
+
+-- | The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+deleteAllowList_id :: Lens.Lens' DeleteAllowList Prelude.Text
+deleteAllowList_id = Lens.lens (\DeleteAllowList' {id} -> id) (\s@DeleteAllowList' {} a -> s {id = a} :: DeleteAllowList)
+
+instance Core.AWSRequest DeleteAllowList where
+  type
+    AWSResponse DeleteAllowList =
+      DeleteAllowListResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteAllowListResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteAllowList where
+  hashWithSalt _salt DeleteAllowList' {..} =
+    _salt
+      `Prelude.hashWithSalt` ignoreJobChecks
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteAllowList where
+  rnf DeleteAllowList' {..} =
+    Prelude.rnf ignoreJobChecks
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders DeleteAllowList where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteAllowList where
+  toPath DeleteAllowList' {..} =
+    Prelude.mconcat ["/allow-lists/", Data.toBS id]
+
+instance Data.ToQuery DeleteAllowList where
+  toQuery DeleteAllowList' {..} =
+    Prelude.mconcat
+      ["ignoreJobChecks" Data.=: ignoreJobChecks]
+
+-- | /See:/ 'newDeleteAllowListResponse' smart constructor.
+data DeleteAllowListResponse = DeleteAllowListResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAllowListResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteAllowListResponse_httpStatus' - The response's http status code.
+newDeleteAllowListResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAllowListResponse
+newDeleteAllowListResponse pHttpStatus_ =
+  DeleteAllowListResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteAllowListResponse_httpStatus :: Lens.Lens' DeleteAllowListResponse Prelude.Int
+deleteAllowListResponse_httpStatus = Lens.lens (\DeleteAllowListResponse' {httpStatus} -> httpStatus) (\s@DeleteAllowListResponse' {} a -> s {httpStatus = a} :: DeleteAllowListResponse)
+
+instance Prelude.NFData DeleteAllowListResponse where
+  rnf DeleteAllowListResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/DeleteCustomDataIdentifier.hs b/gen/Amazonka/MacieV2/DeleteCustomDataIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/DeleteCustomDataIdentifier.hs
@@ -0,0 +1,153 @@
+{-# 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.MacieV2.DeleteCustomDataIdentifier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Soft deletes a custom data identifier.
+module Amazonka.MacieV2.DeleteCustomDataIdentifier
+  ( -- * Creating a Request
+    DeleteCustomDataIdentifier (..),
+    newDeleteCustomDataIdentifier,
+
+    -- * Request Lenses
+    deleteCustomDataIdentifier_id,
+
+    -- * Destructuring the Response
+    DeleteCustomDataIdentifierResponse (..),
+    newDeleteCustomDataIdentifierResponse,
+
+    -- * Response Lenses
+    deleteCustomDataIdentifierResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteCustomDataIdentifier' smart constructor.
+data DeleteCustomDataIdentifier = DeleteCustomDataIdentifier'
+  { -- | The unique identifier for the Amazon Macie resource that the request
+    -- applies to.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCustomDataIdentifier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'deleteCustomDataIdentifier_id' - The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+newDeleteCustomDataIdentifier ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteCustomDataIdentifier
+newDeleteCustomDataIdentifier pId_ =
+  DeleteCustomDataIdentifier' {id = pId_}
+
+-- | The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+deleteCustomDataIdentifier_id :: Lens.Lens' DeleteCustomDataIdentifier Prelude.Text
+deleteCustomDataIdentifier_id = Lens.lens (\DeleteCustomDataIdentifier' {id} -> id) (\s@DeleteCustomDataIdentifier' {} a -> s {id = a} :: DeleteCustomDataIdentifier)
+
+instance Core.AWSRequest DeleteCustomDataIdentifier where
+  type
+    AWSResponse DeleteCustomDataIdentifier =
+      DeleteCustomDataIdentifierResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteCustomDataIdentifierResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteCustomDataIdentifier where
+  hashWithSalt _salt DeleteCustomDataIdentifier' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteCustomDataIdentifier where
+  rnf DeleteCustomDataIdentifier' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteCustomDataIdentifier where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteCustomDataIdentifier where
+  toPath DeleteCustomDataIdentifier' {..} =
+    Prelude.mconcat
+      ["/custom-data-identifiers/", Data.toBS id]
+
+instance Data.ToQuery DeleteCustomDataIdentifier where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteCustomDataIdentifierResponse' smart constructor.
+data DeleteCustomDataIdentifierResponse = DeleteCustomDataIdentifierResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCustomDataIdentifierResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteCustomDataIdentifierResponse_httpStatus' - The response's http status code.
+newDeleteCustomDataIdentifierResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteCustomDataIdentifierResponse
+newDeleteCustomDataIdentifierResponse pHttpStatus_ =
+  DeleteCustomDataIdentifierResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteCustomDataIdentifierResponse_httpStatus :: Lens.Lens' DeleteCustomDataIdentifierResponse Prelude.Int
+deleteCustomDataIdentifierResponse_httpStatus = Lens.lens (\DeleteCustomDataIdentifierResponse' {httpStatus} -> httpStatus) (\s@DeleteCustomDataIdentifierResponse' {} a -> s {httpStatus = a} :: DeleteCustomDataIdentifierResponse)
+
+instance
+  Prelude.NFData
+    DeleteCustomDataIdentifierResponse
+  where
+  rnf DeleteCustomDataIdentifierResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/DeleteFindingsFilter.hs b/gen/Amazonka/MacieV2/DeleteFindingsFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/DeleteFindingsFilter.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.MacieV2.DeleteFindingsFilter
+-- 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 findings filter.
+module Amazonka.MacieV2.DeleteFindingsFilter
+  ( -- * Creating a Request
+    DeleteFindingsFilter (..),
+    newDeleteFindingsFilter,
+
+    -- * Request Lenses
+    deleteFindingsFilter_id,
+
+    -- * Destructuring the Response
+    DeleteFindingsFilterResponse (..),
+    newDeleteFindingsFilterResponse,
+
+    -- * Response Lenses
+    deleteFindingsFilterResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteFindingsFilter' smart constructor.
+data DeleteFindingsFilter = DeleteFindingsFilter'
+  { -- | The unique identifier for the Amazon Macie resource that the request
+    -- applies to.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFindingsFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'deleteFindingsFilter_id' - The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+newDeleteFindingsFilter ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteFindingsFilter
+newDeleteFindingsFilter pId_ =
+  DeleteFindingsFilter' {id = pId_}
+
+-- | The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+deleteFindingsFilter_id :: Lens.Lens' DeleteFindingsFilter Prelude.Text
+deleteFindingsFilter_id = Lens.lens (\DeleteFindingsFilter' {id} -> id) (\s@DeleteFindingsFilter' {} a -> s {id = a} :: DeleteFindingsFilter)
+
+instance Core.AWSRequest DeleteFindingsFilter where
+  type
+    AWSResponse DeleteFindingsFilter =
+      DeleteFindingsFilterResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteFindingsFilterResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteFindingsFilter where
+  hashWithSalt _salt DeleteFindingsFilter' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteFindingsFilter where
+  rnf DeleteFindingsFilter' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteFindingsFilter where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteFindingsFilter where
+  toPath DeleteFindingsFilter' {..} =
+    Prelude.mconcat ["/findingsfilters/", Data.toBS id]
+
+instance Data.ToQuery DeleteFindingsFilter where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteFindingsFilterResponse' smart constructor.
+data DeleteFindingsFilterResponse = DeleteFindingsFilterResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFindingsFilterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteFindingsFilterResponse_httpStatus' - The response's http status code.
+newDeleteFindingsFilterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteFindingsFilterResponse
+newDeleteFindingsFilterResponse pHttpStatus_ =
+  DeleteFindingsFilterResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteFindingsFilterResponse_httpStatus :: Lens.Lens' DeleteFindingsFilterResponse Prelude.Int
+deleteFindingsFilterResponse_httpStatus = Lens.lens (\DeleteFindingsFilterResponse' {httpStatus} -> httpStatus) (\s@DeleteFindingsFilterResponse' {} a -> s {httpStatus = a} :: DeleteFindingsFilterResponse)
+
+instance Prelude.NFData DeleteFindingsFilterResponse where
+  rnf DeleteFindingsFilterResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/DeleteInvitations.hs b/gen/Amazonka/MacieV2/DeleteInvitations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/DeleteInvitations.hs
@@ -0,0 +1,175 @@
+{-# 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.MacieV2.DeleteInvitations
+-- 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 Amazon Macie membership invitations that were received from
+-- specific accounts.
+module Amazonka.MacieV2.DeleteInvitations
+  ( -- * Creating a Request
+    DeleteInvitations (..),
+    newDeleteInvitations,
+
+    -- * Request Lenses
+    deleteInvitations_accountIds,
+
+    -- * Destructuring the Response
+    DeleteInvitationsResponse (..),
+    newDeleteInvitationsResponse,
+
+    -- * Response Lenses
+    deleteInvitationsResponse_unprocessedAccounts,
+    deleteInvitationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteInvitations' smart constructor.
+data DeleteInvitations = DeleteInvitations'
+  { -- | An array that lists Amazon Web Services account IDs, one for each
+    -- account that sent an invitation to delete.
+    accountIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteInvitations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountIds', 'deleteInvitations_accountIds' - An array that lists Amazon Web Services account IDs, one for each
+-- account that sent an invitation to delete.
+newDeleteInvitations ::
+  DeleteInvitations
+newDeleteInvitations =
+  DeleteInvitations' {accountIds = Prelude.mempty}
+
+-- | An array that lists Amazon Web Services account IDs, one for each
+-- account that sent an invitation to delete.
+deleteInvitations_accountIds :: Lens.Lens' DeleteInvitations [Prelude.Text]
+deleteInvitations_accountIds = Lens.lens (\DeleteInvitations' {accountIds} -> accountIds) (\s@DeleteInvitations' {} a -> s {accountIds = a} :: DeleteInvitations) Prelude.. Lens.coerced
+
+instance Core.AWSRequest DeleteInvitations where
+  type
+    AWSResponse DeleteInvitations =
+      DeleteInvitationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteInvitationsResponse'
+            Prelude.<$> ( x
+                            Data..?> "unprocessedAccounts"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteInvitations where
+  hashWithSalt _salt DeleteInvitations' {..} =
+    _salt `Prelude.hashWithSalt` accountIds
+
+instance Prelude.NFData DeleteInvitations where
+  rnf DeleteInvitations' {..} = Prelude.rnf accountIds
+
+instance Data.ToHeaders DeleteInvitations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteInvitations where
+  toJSON DeleteInvitations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("accountIds" Data..= accountIds)]
+      )
+
+instance Data.ToPath DeleteInvitations where
+  toPath = Prelude.const "/invitations/delete"
+
+instance Data.ToQuery DeleteInvitations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteInvitationsResponse' smart constructor.
+data DeleteInvitationsResponse = DeleteInvitationsResponse'
+  { -- | An array of objects, one for each account whose invitation hasn\'t been
+    -- deleted. Each object identifies the account and explains why the request
+    -- hasn\'t been processed for that account.
+    unprocessedAccounts :: Prelude.Maybe [UnprocessedAccount],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteInvitationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'unprocessedAccounts', 'deleteInvitationsResponse_unprocessedAccounts' - An array of objects, one for each account whose invitation hasn\'t been
+-- deleted. Each object identifies the account and explains why the request
+-- hasn\'t been processed for that account.
+--
+-- 'httpStatus', 'deleteInvitationsResponse_httpStatus' - The response's http status code.
+newDeleteInvitationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteInvitationsResponse
+newDeleteInvitationsResponse pHttpStatus_ =
+  DeleteInvitationsResponse'
+    { unprocessedAccounts =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each account whose invitation hasn\'t been
+-- deleted. Each object identifies the account and explains why the request
+-- hasn\'t been processed for that account.
+deleteInvitationsResponse_unprocessedAccounts :: Lens.Lens' DeleteInvitationsResponse (Prelude.Maybe [UnprocessedAccount])
+deleteInvitationsResponse_unprocessedAccounts = Lens.lens (\DeleteInvitationsResponse' {unprocessedAccounts} -> unprocessedAccounts) (\s@DeleteInvitationsResponse' {} a -> s {unprocessedAccounts = a} :: DeleteInvitationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+deleteInvitationsResponse_httpStatus :: Lens.Lens' DeleteInvitationsResponse Prelude.Int
+deleteInvitationsResponse_httpStatus = Lens.lens (\DeleteInvitationsResponse' {httpStatus} -> httpStatus) (\s@DeleteInvitationsResponse' {} a -> s {httpStatus = a} :: DeleteInvitationsResponse)
+
+instance Prelude.NFData DeleteInvitationsResponse where
+  rnf DeleteInvitationsResponse' {..} =
+    Prelude.rnf unprocessedAccounts
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/DeleteMember.hs b/gen/Amazonka/MacieV2/DeleteMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/DeleteMember.hs
@@ -0,0 +1,144 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.DeleteMember
+-- 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 association between an Amazon Macie administrator account
+-- and an account.
+module Amazonka.MacieV2.DeleteMember
+  ( -- * Creating a Request
+    DeleteMember (..),
+    newDeleteMember,
+
+    -- * Request Lenses
+    deleteMember_id,
+
+    -- * Destructuring the Response
+    DeleteMemberResponse (..),
+    newDeleteMemberResponse,
+
+    -- * Response Lenses
+    deleteMemberResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteMember' smart constructor.
+data DeleteMember = DeleteMember'
+  { -- | The unique identifier for the Amazon Macie resource that the request
+    -- applies to.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteMember' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'deleteMember_id' - The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+newDeleteMember ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteMember
+newDeleteMember pId_ = DeleteMember' {id = pId_}
+
+-- | The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+deleteMember_id :: Lens.Lens' DeleteMember Prelude.Text
+deleteMember_id = Lens.lens (\DeleteMember' {id} -> id) (\s@DeleteMember' {} a -> s {id = a} :: DeleteMember)
+
+instance Core.AWSRequest DeleteMember where
+  type AWSResponse DeleteMember = DeleteMemberResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteMemberResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteMember where
+  hashWithSalt _salt DeleteMember' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteMember where
+  rnf DeleteMember' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteMember where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteMember where
+  toPath DeleteMember' {..} =
+    Prelude.mconcat ["/members/", Data.toBS id]
+
+instance Data.ToQuery DeleteMember where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteMemberResponse' smart constructor.
+data DeleteMemberResponse = DeleteMemberResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteMemberResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteMemberResponse_httpStatus' - The response's http status code.
+newDeleteMemberResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteMemberResponse
+newDeleteMemberResponse pHttpStatus_ =
+  DeleteMemberResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteMemberResponse_httpStatus :: Lens.Lens' DeleteMemberResponse Prelude.Int
+deleteMemberResponse_httpStatus = Lens.lens (\DeleteMemberResponse' {httpStatus} -> httpStatus) (\s@DeleteMemberResponse' {} a -> s {httpStatus = a} :: DeleteMemberResponse)
+
+instance Prelude.NFData DeleteMemberResponse where
+  rnf DeleteMemberResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/DescribeBuckets.hs b/gen/Amazonka/MacieV2/DescribeBuckets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/DescribeBuckets.hs
@@ -0,0 +1,257 @@
+{-# 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.MacieV2.DescribeBuckets
+-- 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 (queries) statistical data and other information about one or
+-- more S3 buckets that Amazon Macie monitors and analyzes for an account.
+--
+-- This operation returns paginated results.
+module Amazonka.MacieV2.DescribeBuckets
+  ( -- * Creating a Request
+    DescribeBuckets (..),
+    newDescribeBuckets,
+
+    -- * Request Lenses
+    describeBuckets_criteria,
+    describeBuckets_maxResults,
+    describeBuckets_nextToken,
+    describeBuckets_sortCriteria,
+
+    -- * Destructuring the Response
+    DescribeBucketsResponse (..),
+    newDescribeBucketsResponse,
+
+    -- * Response Lenses
+    describeBucketsResponse_buckets,
+    describeBucketsResponse_nextToken,
+    describeBucketsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeBuckets' smart constructor.
+data DescribeBuckets = DescribeBuckets'
+  { -- | The criteria to use to filter the query results.
+    criteria :: Prelude.Maybe (Prelude.HashMap Prelude.Text BucketCriteriaAdditionalProperties),
+    -- | The maximum number of items to include in each page of the response. The
+    -- default value is 50.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The nextToken string that specifies which page of results to return in a
+    -- paginated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The criteria to use to sort the query results.
+    sortCriteria :: Prelude.Maybe BucketSortCriteria
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeBuckets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'criteria', 'describeBuckets_criteria' - The criteria to use to filter the query results.
+--
+-- 'maxResults', 'describeBuckets_maxResults' - The maximum number of items to include in each page of the response. The
+-- default value is 50.
+--
+-- 'nextToken', 'describeBuckets_nextToken' - The nextToken string that specifies which page of results to return in a
+-- paginated response.
+--
+-- 'sortCriteria', 'describeBuckets_sortCriteria' - The criteria to use to sort the query results.
+newDescribeBuckets ::
+  DescribeBuckets
+newDescribeBuckets =
+  DescribeBuckets'
+    { criteria = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortCriteria = Prelude.Nothing
+    }
+
+-- | The criteria to use to filter the query results.
+describeBuckets_criteria :: Lens.Lens' DescribeBuckets (Prelude.Maybe (Prelude.HashMap Prelude.Text BucketCriteriaAdditionalProperties))
+describeBuckets_criteria = Lens.lens (\DescribeBuckets' {criteria} -> criteria) (\s@DescribeBuckets' {} a -> s {criteria = a} :: DescribeBuckets) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of items to include in each page of the response. The
+-- default value is 50.
+describeBuckets_maxResults :: Lens.Lens' DescribeBuckets (Prelude.Maybe Prelude.Int)
+describeBuckets_maxResults = Lens.lens (\DescribeBuckets' {maxResults} -> maxResults) (\s@DescribeBuckets' {} a -> s {maxResults = a} :: DescribeBuckets)
+
+-- | The nextToken string that specifies which page of results to return in a
+-- paginated response.
+describeBuckets_nextToken :: Lens.Lens' DescribeBuckets (Prelude.Maybe Prelude.Text)
+describeBuckets_nextToken = Lens.lens (\DescribeBuckets' {nextToken} -> nextToken) (\s@DescribeBuckets' {} a -> s {nextToken = a} :: DescribeBuckets)
+
+-- | The criteria to use to sort the query results.
+describeBuckets_sortCriteria :: Lens.Lens' DescribeBuckets (Prelude.Maybe BucketSortCriteria)
+describeBuckets_sortCriteria = Lens.lens (\DescribeBuckets' {sortCriteria} -> sortCriteria) (\s@DescribeBuckets' {} a -> s {sortCriteria = a} :: DescribeBuckets)
+
+instance Core.AWSPager DescribeBuckets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeBucketsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeBucketsResponse_buckets
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeBuckets_nextToken
+          Lens..~ rs
+          Lens.^? describeBucketsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeBuckets where
+  type
+    AWSResponse DescribeBuckets =
+      DescribeBucketsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeBucketsResponse'
+            Prelude.<$> (x Data..?> "buckets" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeBuckets where
+  hashWithSalt _salt DescribeBuckets' {..} =
+    _salt
+      `Prelude.hashWithSalt` criteria
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortCriteria
+
+instance Prelude.NFData DescribeBuckets where
+  rnf DescribeBuckets' {..} =
+    Prelude.rnf criteria
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortCriteria
+
+instance Data.ToHeaders DescribeBuckets where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeBuckets where
+  toJSON DescribeBuckets' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("criteria" Data..=) Prelude.<$> criteria,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("sortCriteria" Data..=) Prelude.<$> sortCriteria
+          ]
+      )
+
+instance Data.ToPath DescribeBuckets where
+  toPath = Prelude.const "/datasources/s3"
+
+instance Data.ToQuery DescribeBuckets where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeBucketsResponse' smart constructor.
+data DescribeBucketsResponse = DescribeBucketsResponse'
+  { -- | An array of objects, one for each bucket that matches the filter
+    -- criteria specified in the request.
+    buckets :: Prelude.Maybe [BucketMetadata],
+    -- | The string to use in a subsequent request to get the next page of
+    -- results in a paginated response. This value is null if there are no
+    -- additional pages.
+    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 'DescribeBucketsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'buckets', 'describeBucketsResponse_buckets' - An array of objects, one for each bucket that matches the filter
+-- criteria specified in the request.
+--
+-- 'nextToken', 'describeBucketsResponse_nextToken' - The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+--
+-- 'httpStatus', 'describeBucketsResponse_httpStatus' - The response's http status code.
+newDescribeBucketsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeBucketsResponse
+newDescribeBucketsResponse pHttpStatus_ =
+  DescribeBucketsResponse'
+    { buckets = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each bucket that matches the filter
+-- criteria specified in the request.
+describeBucketsResponse_buckets :: Lens.Lens' DescribeBucketsResponse (Prelude.Maybe [BucketMetadata])
+describeBucketsResponse_buckets = Lens.lens (\DescribeBucketsResponse' {buckets} -> buckets) (\s@DescribeBucketsResponse' {} a -> s {buckets = a} :: DescribeBucketsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+describeBucketsResponse_nextToken :: Lens.Lens' DescribeBucketsResponse (Prelude.Maybe Prelude.Text)
+describeBucketsResponse_nextToken = Lens.lens (\DescribeBucketsResponse' {nextToken} -> nextToken) (\s@DescribeBucketsResponse' {} a -> s {nextToken = a} :: DescribeBucketsResponse)
+
+-- | The response's http status code.
+describeBucketsResponse_httpStatus :: Lens.Lens' DescribeBucketsResponse Prelude.Int
+describeBucketsResponse_httpStatus = Lens.lens (\DescribeBucketsResponse' {httpStatus} -> httpStatus) (\s@DescribeBucketsResponse' {} a -> s {httpStatus = a} :: DescribeBucketsResponse)
+
+instance Prelude.NFData DescribeBucketsResponse where
+  rnf DescribeBucketsResponse' {..} =
+    Prelude.rnf buckets
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/DescribeClassificationJob.hs b/gen/Amazonka/MacieV2/DescribeClassificationJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/DescribeClassificationJob.hs
@@ -0,0 +1,643 @@
+{-# 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.MacieV2.DescribeClassificationJob
+-- 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 and settings for a classification job.
+module Amazonka.MacieV2.DescribeClassificationJob
+  ( -- * Creating a Request
+    DescribeClassificationJob (..),
+    newDescribeClassificationJob,
+
+    -- * Request Lenses
+    describeClassificationJob_jobId,
+
+    -- * Destructuring the Response
+    DescribeClassificationJobResponse (..),
+    newDescribeClassificationJobResponse,
+
+    -- * Response Lenses
+    describeClassificationJobResponse_allowListIds,
+    describeClassificationJobResponse_clientToken,
+    describeClassificationJobResponse_createdAt,
+    describeClassificationJobResponse_customDataIdentifierIds,
+    describeClassificationJobResponse_description,
+    describeClassificationJobResponse_initialRun,
+    describeClassificationJobResponse_jobArn,
+    describeClassificationJobResponse_jobId,
+    describeClassificationJobResponse_jobStatus,
+    describeClassificationJobResponse_jobType,
+    describeClassificationJobResponse_lastRunErrorStatus,
+    describeClassificationJobResponse_lastRunTime,
+    describeClassificationJobResponse_managedDataIdentifierIds,
+    describeClassificationJobResponse_managedDataIdentifierSelector,
+    describeClassificationJobResponse_name,
+    describeClassificationJobResponse_s3JobDefinition,
+    describeClassificationJobResponse_samplingPercentage,
+    describeClassificationJobResponse_scheduleFrequency,
+    describeClassificationJobResponse_statistics,
+    describeClassificationJobResponse_tags,
+    describeClassificationJobResponse_userPausedDetails,
+    describeClassificationJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeClassificationJob' smart constructor.
+data DescribeClassificationJob = DescribeClassificationJob'
+  { -- | The unique identifier for the classification job.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClassificationJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeClassificationJob_jobId' - The unique identifier for the classification job.
+newDescribeClassificationJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  DescribeClassificationJob
+newDescribeClassificationJob pJobId_ =
+  DescribeClassificationJob' {jobId = pJobId_}
+
+-- | The unique identifier for the classification job.
+describeClassificationJob_jobId :: Lens.Lens' DescribeClassificationJob Prelude.Text
+describeClassificationJob_jobId = Lens.lens (\DescribeClassificationJob' {jobId} -> jobId) (\s@DescribeClassificationJob' {} a -> s {jobId = a} :: DescribeClassificationJob)
+
+instance Core.AWSRequest DescribeClassificationJob where
+  type
+    AWSResponse DescribeClassificationJob =
+      DescribeClassificationJobResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeClassificationJobResponse'
+            Prelude.<$> (x Data..?> "allowListIds" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "clientToken")
+            Prelude.<*> (x Data..?> "createdAt")
+            Prelude.<*> ( x
+                            Data..?> "customDataIdentifierIds"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "initialRun")
+            Prelude.<*> (x Data..?> "jobArn")
+            Prelude.<*> (x Data..?> "jobId")
+            Prelude.<*> (x Data..?> "jobStatus")
+            Prelude.<*> (x Data..?> "jobType")
+            Prelude.<*> (x Data..?> "lastRunErrorStatus")
+            Prelude.<*> (x Data..?> "lastRunTime")
+            Prelude.<*> ( x
+                            Data..?> "managedDataIdentifierIds"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "managedDataIdentifierSelector")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "s3JobDefinition")
+            Prelude.<*> (x Data..?> "samplingPercentage")
+            Prelude.<*> (x Data..?> "scheduleFrequency")
+            Prelude.<*> (x Data..?> "statistics")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "userPausedDetails")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeClassificationJob where
+  hashWithSalt _salt DescribeClassificationJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData DescribeClassificationJob where
+  rnf DescribeClassificationJob' {..} =
+    Prelude.rnf jobId
+
+instance Data.ToHeaders DescribeClassificationJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeClassificationJob where
+  toPath DescribeClassificationJob' {..} =
+    Prelude.mconcat ["/jobs/", Data.toBS jobId]
+
+instance Data.ToQuery DescribeClassificationJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeClassificationJobResponse' smart constructor.
+data DescribeClassificationJobResponse = DescribeClassificationJobResponse'
+  { -- | An array of unique identifiers, one for each allow list that the job
+    -- uses when it analyzes data.
+    allowListIds :: Prelude.Maybe [Prelude.Text],
+    -- | The token that was provided to ensure the idempotency of the request to
+    -- create the job.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in UTC and extended ISO 8601 format, when the job was
+    -- created.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | An array of unique identifiers, one for each custom data identifier that
+    -- the job uses when it analyzes data. This value is null if the job uses
+    -- only managed data identifiers to analyze data.
+    customDataIdentifierIds :: Prelude.Maybe [Prelude.Text],
+    -- | The custom description of the job.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | For a recurring job, specifies whether you configured the job to analyze
+    -- all existing, eligible objects immediately after the job was created
+    -- (true). If you configured the job to analyze only those objects that
+    -- were created or changed after the job was created and before the job\'s
+    -- first scheduled run, this value is false. This value is also false for a
+    -- one-time job.
+    initialRun :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the job.
+    jobArn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the job.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the job. Possible values are:
+    --
+    -- -   CANCELLED - You cancelled the job or, if it\'s a one-time job, you
+    --     paused the job and didn\'t resume it within 30 days.
+    --
+    -- -   COMPLETE - For a one-time job, Amazon Macie finished processing the
+    --     data specified for the job. This value doesn\'t apply to recurring
+    --     jobs.
+    --
+    -- -   IDLE - For a recurring job, the previous scheduled run is complete
+    --     and the next scheduled run is pending. This value doesn\'t apply to
+    --     one-time jobs.
+    --
+    -- -   PAUSED - Macie started running the job but additional processing
+    --     would exceed the monthly sensitive data discovery quota for your
+    --     account or one or more member accounts that the job analyzes data
+    --     for.
+    --
+    -- -   RUNNING - For a one-time job, the job is in progress. For a
+    --     recurring job, a scheduled run is in progress.
+    --
+    -- -   USER_PAUSED - You paused the job. If you paused the job while it had
+    --     a status of RUNNING and you don\'t resume it within 30 days of
+    --     pausing it, the job or job run will expire and be cancelled,
+    --     depending on the job\'s type. To check the expiration date, refer to
+    --     the UserPausedDetails.jobExpiresAt property.
+    jobStatus :: Prelude.Maybe JobStatus,
+    -- | The schedule for running the job. Possible values are:
+    --
+    -- -   ONE_TIME - The job runs only once.
+    --
+    -- -   SCHEDULED - The job runs on a daily, weekly, or monthly basis. The
+    --     scheduleFrequency property indicates the recurrence pattern for the
+    --     job.
+    jobType :: Prelude.Maybe JobType,
+    -- | Specifies whether any account- or bucket-level access errors occurred
+    -- when the job ran. For a recurring job, this value indicates the error
+    -- status of the job\'s most recent run.
+    lastRunErrorStatus :: Prelude.Maybe LastRunErrorStatus,
+    -- | The date and time, in UTC and extended ISO 8601 format, when the job
+    -- started. If the job is a recurring job, this value indicates when the
+    -- most recent run started or, if the job hasn\'t run yet, when the job was
+    -- created.
+    lastRunTime :: Prelude.Maybe Data.ISO8601,
+    -- | An array of unique identifiers, one for each managed data identifier
+    -- that the job is explicitly configured to include (use) or exclude (not
+    -- use) when it analyzes data. Inclusion or exclusion depends on the
+    -- managed data identifier selection type specified for the job
+    -- (managedDataIdentifierSelector). This value is null if the job\'s
+    -- managed data identifier selection type is ALL or the job uses only
+    -- custom data identifiers (customDataIdentifierIds) to analyze data.
+    managedDataIdentifierIds :: Prelude.Maybe [Prelude.Text],
+    -- | The selection type that determines which managed data identifiers the
+    -- job uses to analyze data. Possible values are:
+    --
+    -- -   ALL - Use all the managed data identifiers that Amazon Macie
+    --     provides.
+    --
+    -- -   EXCLUDE - Use all the managed data identifiers that Macie provides
+    --     except the managed data identifiers specified by the
+    --     managedDataIdentifierIds property.
+    --
+    -- -   INCLUDE - Use only the managed data identifiers specified by the
+    --     managedDataIdentifierIds property.
+    --
+    -- -   NONE - Don\'t use any managed data identifiers.
+    --
+    -- If this value is null, the job uses all managed data identifiers. If
+    -- this value is null, ALL, or EXCLUDE for a recurring job, the job also
+    -- uses new managed data identifiers as they are released.
+    managedDataIdentifierSelector :: Prelude.Maybe ManagedDataIdentifierSelector,
+    -- | The custom name of the job.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The S3 buckets that contain the objects to analyze, and the scope of
+    -- that analysis.
+    s3JobDefinition :: Prelude.Maybe S3JobDefinition,
+    -- | The sampling depth, as a percentage, that determines the percentage of
+    -- eligible objects that the job analyzes.
+    samplingPercentage :: Prelude.Maybe Prelude.Int,
+    -- | The recurrence pattern for running the job. This value is null if the
+    -- job is configured to run only once.
+    scheduleFrequency :: Prelude.Maybe JobScheduleFrequency,
+    -- | The number of times that the job has run and processing statistics for
+    -- the job\'s current run.
+    statistics :: Prelude.Maybe Statistics,
+    -- | A map of key-value pairs that specifies which tags (keys and values) are
+    -- associated with the classification job.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | If the current status of the job is USER_PAUSED, specifies when the job
+    -- was paused and when the job or job run will expire and be cancelled if
+    -- it isn\'t resumed. This value is present only if the value for jobStatus
+    -- is USER_PAUSED.
+    userPausedDetails :: Prelude.Maybe UserPausedDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClassificationJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowListIds', 'describeClassificationJobResponse_allowListIds' - An array of unique identifiers, one for each allow list that the job
+-- uses when it analyzes data.
+--
+-- 'clientToken', 'describeClassificationJobResponse_clientToken' - The token that was provided to ensure the idempotency of the request to
+-- create the job.
+--
+-- 'createdAt', 'describeClassificationJobResponse_createdAt' - The date and time, in UTC and extended ISO 8601 format, when the job was
+-- created.
+--
+-- 'customDataIdentifierIds', 'describeClassificationJobResponse_customDataIdentifierIds' - An array of unique identifiers, one for each custom data identifier that
+-- the job uses when it analyzes data. This value is null if the job uses
+-- only managed data identifiers to analyze data.
+--
+-- 'description', 'describeClassificationJobResponse_description' - The custom description of the job.
+--
+-- 'initialRun', 'describeClassificationJobResponse_initialRun' - For a recurring job, specifies whether you configured the job to analyze
+-- all existing, eligible objects immediately after the job was created
+-- (true). If you configured the job to analyze only those objects that
+-- were created or changed after the job was created and before the job\'s
+-- first scheduled run, this value is false. This value is also false for a
+-- one-time job.
+--
+-- 'jobArn', 'describeClassificationJobResponse_jobArn' - The Amazon Resource Name (ARN) of the job.
+--
+-- 'jobId', 'describeClassificationJobResponse_jobId' - The unique identifier for the job.
+--
+-- 'jobStatus', 'describeClassificationJobResponse_jobStatus' - The current status of the job. Possible values are:
+--
+-- -   CANCELLED - You cancelled the job or, if it\'s a one-time job, you
+--     paused the job and didn\'t resume it within 30 days.
+--
+-- -   COMPLETE - For a one-time job, Amazon Macie finished processing the
+--     data specified for the job. This value doesn\'t apply to recurring
+--     jobs.
+--
+-- -   IDLE - For a recurring job, the previous scheduled run is complete
+--     and the next scheduled run is pending. This value doesn\'t apply to
+--     one-time jobs.
+--
+-- -   PAUSED - Macie started running the job but additional processing
+--     would exceed the monthly sensitive data discovery quota for your
+--     account or one or more member accounts that the job analyzes data
+--     for.
+--
+-- -   RUNNING - For a one-time job, the job is in progress. For a
+--     recurring job, a scheduled run is in progress.
+--
+-- -   USER_PAUSED - You paused the job. If you paused the job while it had
+--     a status of RUNNING and you don\'t resume it within 30 days of
+--     pausing it, the job or job run will expire and be cancelled,
+--     depending on the job\'s type. To check the expiration date, refer to
+--     the UserPausedDetails.jobExpiresAt property.
+--
+-- 'jobType', 'describeClassificationJobResponse_jobType' - The schedule for running the job. Possible values are:
+--
+-- -   ONE_TIME - The job runs only once.
+--
+-- -   SCHEDULED - The job runs on a daily, weekly, or monthly basis. The
+--     scheduleFrequency property indicates the recurrence pattern for the
+--     job.
+--
+-- 'lastRunErrorStatus', 'describeClassificationJobResponse_lastRunErrorStatus' - Specifies whether any account- or bucket-level access errors occurred
+-- when the job ran. For a recurring job, this value indicates the error
+-- status of the job\'s most recent run.
+--
+-- 'lastRunTime', 'describeClassificationJobResponse_lastRunTime' - The date and time, in UTC and extended ISO 8601 format, when the job
+-- started. If the job is a recurring job, this value indicates when the
+-- most recent run started or, if the job hasn\'t run yet, when the job was
+-- created.
+--
+-- 'managedDataIdentifierIds', 'describeClassificationJobResponse_managedDataIdentifierIds' - An array of unique identifiers, one for each managed data identifier
+-- that the job is explicitly configured to include (use) or exclude (not
+-- use) when it analyzes data. Inclusion or exclusion depends on the
+-- managed data identifier selection type specified for the job
+-- (managedDataIdentifierSelector). This value is null if the job\'s
+-- managed data identifier selection type is ALL or the job uses only
+-- custom data identifiers (customDataIdentifierIds) to analyze data.
+--
+-- 'managedDataIdentifierSelector', 'describeClassificationJobResponse_managedDataIdentifierSelector' - The selection type that determines which managed data identifiers the
+-- job uses to analyze data. Possible values are:
+--
+-- -   ALL - Use all the managed data identifiers that Amazon Macie
+--     provides.
+--
+-- -   EXCLUDE - Use all the managed data identifiers that Macie provides
+--     except the managed data identifiers specified by the
+--     managedDataIdentifierIds property.
+--
+-- -   INCLUDE - Use only the managed data identifiers specified by the
+--     managedDataIdentifierIds property.
+--
+-- -   NONE - Don\'t use any managed data identifiers.
+--
+-- If this value is null, the job uses all managed data identifiers. If
+-- this value is null, ALL, or EXCLUDE for a recurring job, the job also
+-- uses new managed data identifiers as they are released.
+--
+-- 'name', 'describeClassificationJobResponse_name' - The custom name of the job.
+--
+-- 's3JobDefinition', 'describeClassificationJobResponse_s3JobDefinition' - The S3 buckets that contain the objects to analyze, and the scope of
+-- that analysis.
+--
+-- 'samplingPercentage', 'describeClassificationJobResponse_samplingPercentage' - The sampling depth, as a percentage, that determines the percentage of
+-- eligible objects that the job analyzes.
+--
+-- 'scheduleFrequency', 'describeClassificationJobResponse_scheduleFrequency' - The recurrence pattern for running the job. This value is null if the
+-- job is configured to run only once.
+--
+-- 'statistics', 'describeClassificationJobResponse_statistics' - The number of times that the job has run and processing statistics for
+-- the job\'s current run.
+--
+-- 'tags', 'describeClassificationJobResponse_tags' - A map of key-value pairs that specifies which tags (keys and values) are
+-- associated with the classification job.
+--
+-- 'userPausedDetails', 'describeClassificationJobResponse_userPausedDetails' - If the current status of the job is USER_PAUSED, specifies when the job
+-- was paused and when the job or job run will expire and be cancelled if
+-- it isn\'t resumed. This value is present only if the value for jobStatus
+-- is USER_PAUSED.
+--
+-- 'httpStatus', 'describeClassificationJobResponse_httpStatus' - The response's http status code.
+newDescribeClassificationJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeClassificationJobResponse
+newDescribeClassificationJobResponse pHttpStatus_ =
+  DescribeClassificationJobResponse'
+    { allowListIds =
+        Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      customDataIdentifierIds =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      initialRun = Prelude.Nothing,
+      jobArn = Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      jobStatus = Prelude.Nothing,
+      jobType = Prelude.Nothing,
+      lastRunErrorStatus = Prelude.Nothing,
+      lastRunTime = Prelude.Nothing,
+      managedDataIdentifierIds =
+        Prelude.Nothing,
+      managedDataIdentifierSelector =
+        Prelude.Nothing,
+      name = Prelude.Nothing,
+      s3JobDefinition = Prelude.Nothing,
+      samplingPercentage = Prelude.Nothing,
+      scheduleFrequency = Prelude.Nothing,
+      statistics = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      userPausedDetails = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of unique identifiers, one for each allow list that the job
+-- uses when it analyzes data.
+describeClassificationJobResponse_allowListIds :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe [Prelude.Text])
+describeClassificationJobResponse_allowListIds = Lens.lens (\DescribeClassificationJobResponse' {allowListIds} -> allowListIds) (\s@DescribeClassificationJobResponse' {} a -> s {allowListIds = a} :: DescribeClassificationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token that was provided to ensure the idempotency of the request to
+-- create the job.
+describeClassificationJobResponse_clientToken :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe Prelude.Text)
+describeClassificationJobResponse_clientToken = Lens.lens (\DescribeClassificationJobResponse' {clientToken} -> clientToken) (\s@DescribeClassificationJobResponse' {} a -> s {clientToken = a} :: DescribeClassificationJobResponse)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the job was
+-- created.
+describeClassificationJobResponse_createdAt :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe Prelude.UTCTime)
+describeClassificationJobResponse_createdAt = Lens.lens (\DescribeClassificationJobResponse' {createdAt} -> createdAt) (\s@DescribeClassificationJobResponse' {} a -> s {createdAt = a} :: DescribeClassificationJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | An array of unique identifiers, one for each custom data identifier that
+-- the job uses when it analyzes data. This value is null if the job uses
+-- only managed data identifiers to analyze data.
+describeClassificationJobResponse_customDataIdentifierIds :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe [Prelude.Text])
+describeClassificationJobResponse_customDataIdentifierIds = Lens.lens (\DescribeClassificationJobResponse' {customDataIdentifierIds} -> customDataIdentifierIds) (\s@DescribeClassificationJobResponse' {} a -> s {customDataIdentifierIds = a} :: DescribeClassificationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The custom description of the job.
+describeClassificationJobResponse_description :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe Prelude.Text)
+describeClassificationJobResponse_description = Lens.lens (\DescribeClassificationJobResponse' {description} -> description) (\s@DescribeClassificationJobResponse' {} a -> s {description = a} :: DescribeClassificationJobResponse)
+
+-- | For a recurring job, specifies whether you configured the job to analyze
+-- all existing, eligible objects immediately after the job was created
+-- (true). If you configured the job to analyze only those objects that
+-- were created or changed after the job was created and before the job\'s
+-- first scheduled run, this value is false. This value is also false for a
+-- one-time job.
+describeClassificationJobResponse_initialRun :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe Prelude.Bool)
+describeClassificationJobResponse_initialRun = Lens.lens (\DescribeClassificationJobResponse' {initialRun} -> initialRun) (\s@DescribeClassificationJobResponse' {} a -> s {initialRun = a} :: DescribeClassificationJobResponse)
+
+-- | The Amazon Resource Name (ARN) of the job.
+describeClassificationJobResponse_jobArn :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe Prelude.Text)
+describeClassificationJobResponse_jobArn = Lens.lens (\DescribeClassificationJobResponse' {jobArn} -> jobArn) (\s@DescribeClassificationJobResponse' {} a -> s {jobArn = a} :: DescribeClassificationJobResponse)
+
+-- | The unique identifier for the job.
+describeClassificationJobResponse_jobId :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe Prelude.Text)
+describeClassificationJobResponse_jobId = Lens.lens (\DescribeClassificationJobResponse' {jobId} -> jobId) (\s@DescribeClassificationJobResponse' {} a -> s {jobId = a} :: DescribeClassificationJobResponse)
+
+-- | The current status of the job. Possible values are:
+--
+-- -   CANCELLED - You cancelled the job or, if it\'s a one-time job, you
+--     paused the job and didn\'t resume it within 30 days.
+--
+-- -   COMPLETE - For a one-time job, Amazon Macie finished processing the
+--     data specified for the job. This value doesn\'t apply to recurring
+--     jobs.
+--
+-- -   IDLE - For a recurring job, the previous scheduled run is complete
+--     and the next scheduled run is pending. This value doesn\'t apply to
+--     one-time jobs.
+--
+-- -   PAUSED - Macie started running the job but additional processing
+--     would exceed the monthly sensitive data discovery quota for your
+--     account or one or more member accounts that the job analyzes data
+--     for.
+--
+-- -   RUNNING - For a one-time job, the job is in progress. For a
+--     recurring job, a scheduled run is in progress.
+--
+-- -   USER_PAUSED - You paused the job. If you paused the job while it had
+--     a status of RUNNING and you don\'t resume it within 30 days of
+--     pausing it, the job or job run will expire and be cancelled,
+--     depending on the job\'s type. To check the expiration date, refer to
+--     the UserPausedDetails.jobExpiresAt property.
+describeClassificationJobResponse_jobStatus :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe JobStatus)
+describeClassificationJobResponse_jobStatus = Lens.lens (\DescribeClassificationJobResponse' {jobStatus} -> jobStatus) (\s@DescribeClassificationJobResponse' {} a -> s {jobStatus = a} :: DescribeClassificationJobResponse)
+
+-- | The schedule for running the job. Possible values are:
+--
+-- -   ONE_TIME - The job runs only once.
+--
+-- -   SCHEDULED - The job runs on a daily, weekly, or monthly basis. The
+--     scheduleFrequency property indicates the recurrence pattern for the
+--     job.
+describeClassificationJobResponse_jobType :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe JobType)
+describeClassificationJobResponse_jobType = Lens.lens (\DescribeClassificationJobResponse' {jobType} -> jobType) (\s@DescribeClassificationJobResponse' {} a -> s {jobType = a} :: DescribeClassificationJobResponse)
+
+-- | Specifies whether any account- or bucket-level access errors occurred
+-- when the job ran. For a recurring job, this value indicates the error
+-- status of the job\'s most recent run.
+describeClassificationJobResponse_lastRunErrorStatus :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe LastRunErrorStatus)
+describeClassificationJobResponse_lastRunErrorStatus = Lens.lens (\DescribeClassificationJobResponse' {lastRunErrorStatus} -> lastRunErrorStatus) (\s@DescribeClassificationJobResponse' {} a -> s {lastRunErrorStatus = a} :: DescribeClassificationJobResponse)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the job
+-- started. If the job is a recurring job, this value indicates when the
+-- most recent run started or, if the job hasn\'t run yet, when the job was
+-- created.
+describeClassificationJobResponse_lastRunTime :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe Prelude.UTCTime)
+describeClassificationJobResponse_lastRunTime = Lens.lens (\DescribeClassificationJobResponse' {lastRunTime} -> lastRunTime) (\s@DescribeClassificationJobResponse' {} a -> s {lastRunTime = a} :: DescribeClassificationJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | An array of unique identifiers, one for each managed data identifier
+-- that the job is explicitly configured to include (use) or exclude (not
+-- use) when it analyzes data. Inclusion or exclusion depends on the
+-- managed data identifier selection type specified for the job
+-- (managedDataIdentifierSelector). This value is null if the job\'s
+-- managed data identifier selection type is ALL or the job uses only
+-- custom data identifiers (customDataIdentifierIds) to analyze data.
+describeClassificationJobResponse_managedDataIdentifierIds :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe [Prelude.Text])
+describeClassificationJobResponse_managedDataIdentifierIds = Lens.lens (\DescribeClassificationJobResponse' {managedDataIdentifierIds} -> managedDataIdentifierIds) (\s@DescribeClassificationJobResponse' {} a -> s {managedDataIdentifierIds = a} :: DescribeClassificationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The selection type that determines which managed data identifiers the
+-- job uses to analyze data. Possible values are:
+--
+-- -   ALL - Use all the managed data identifiers that Amazon Macie
+--     provides.
+--
+-- -   EXCLUDE - Use all the managed data identifiers that Macie provides
+--     except the managed data identifiers specified by the
+--     managedDataIdentifierIds property.
+--
+-- -   INCLUDE - Use only the managed data identifiers specified by the
+--     managedDataIdentifierIds property.
+--
+-- -   NONE - Don\'t use any managed data identifiers.
+--
+-- If this value is null, the job uses all managed data identifiers. If
+-- this value is null, ALL, or EXCLUDE for a recurring job, the job also
+-- uses new managed data identifiers as they are released.
+describeClassificationJobResponse_managedDataIdentifierSelector :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe ManagedDataIdentifierSelector)
+describeClassificationJobResponse_managedDataIdentifierSelector = Lens.lens (\DescribeClassificationJobResponse' {managedDataIdentifierSelector} -> managedDataIdentifierSelector) (\s@DescribeClassificationJobResponse' {} a -> s {managedDataIdentifierSelector = a} :: DescribeClassificationJobResponse)
+
+-- | The custom name of the job.
+describeClassificationJobResponse_name :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe Prelude.Text)
+describeClassificationJobResponse_name = Lens.lens (\DescribeClassificationJobResponse' {name} -> name) (\s@DescribeClassificationJobResponse' {} a -> s {name = a} :: DescribeClassificationJobResponse)
+
+-- | The S3 buckets that contain the objects to analyze, and the scope of
+-- that analysis.
+describeClassificationJobResponse_s3JobDefinition :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe S3JobDefinition)
+describeClassificationJobResponse_s3JobDefinition = Lens.lens (\DescribeClassificationJobResponse' {s3JobDefinition} -> s3JobDefinition) (\s@DescribeClassificationJobResponse' {} a -> s {s3JobDefinition = a} :: DescribeClassificationJobResponse)
+
+-- | The sampling depth, as a percentage, that determines the percentage of
+-- eligible objects that the job analyzes.
+describeClassificationJobResponse_samplingPercentage :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe Prelude.Int)
+describeClassificationJobResponse_samplingPercentage = Lens.lens (\DescribeClassificationJobResponse' {samplingPercentage} -> samplingPercentage) (\s@DescribeClassificationJobResponse' {} a -> s {samplingPercentage = a} :: DescribeClassificationJobResponse)
+
+-- | The recurrence pattern for running the job. This value is null if the
+-- job is configured to run only once.
+describeClassificationJobResponse_scheduleFrequency :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe JobScheduleFrequency)
+describeClassificationJobResponse_scheduleFrequency = Lens.lens (\DescribeClassificationJobResponse' {scheduleFrequency} -> scheduleFrequency) (\s@DescribeClassificationJobResponse' {} a -> s {scheduleFrequency = a} :: DescribeClassificationJobResponse)
+
+-- | The number of times that the job has run and processing statistics for
+-- the job\'s current run.
+describeClassificationJobResponse_statistics :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe Statistics)
+describeClassificationJobResponse_statistics = Lens.lens (\DescribeClassificationJobResponse' {statistics} -> statistics) (\s@DescribeClassificationJobResponse' {} a -> s {statistics = a} :: DescribeClassificationJobResponse)
+
+-- | A map of key-value pairs that specifies which tags (keys and values) are
+-- associated with the classification job.
+describeClassificationJobResponse_tags :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeClassificationJobResponse_tags = Lens.lens (\DescribeClassificationJobResponse' {tags} -> tags) (\s@DescribeClassificationJobResponse' {} a -> s {tags = a} :: DescribeClassificationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the current status of the job is USER_PAUSED, specifies when the job
+-- was paused and when the job or job run will expire and be cancelled if
+-- it isn\'t resumed. This value is present only if the value for jobStatus
+-- is USER_PAUSED.
+describeClassificationJobResponse_userPausedDetails :: Lens.Lens' DescribeClassificationJobResponse (Prelude.Maybe UserPausedDetails)
+describeClassificationJobResponse_userPausedDetails = Lens.lens (\DescribeClassificationJobResponse' {userPausedDetails} -> userPausedDetails) (\s@DescribeClassificationJobResponse' {} a -> s {userPausedDetails = a} :: DescribeClassificationJobResponse)
+
+-- | The response's http status code.
+describeClassificationJobResponse_httpStatus :: Lens.Lens' DescribeClassificationJobResponse Prelude.Int
+describeClassificationJobResponse_httpStatus = Lens.lens (\DescribeClassificationJobResponse' {httpStatus} -> httpStatus) (\s@DescribeClassificationJobResponse' {} a -> s {httpStatus = a} :: DescribeClassificationJobResponse)
+
+instance
+  Prelude.NFData
+    DescribeClassificationJobResponse
+  where
+  rnf DescribeClassificationJobResponse' {..} =
+    Prelude.rnf allowListIds
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf customDataIdentifierIds
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf initialRun
+      `Prelude.seq` Prelude.rnf jobArn
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf jobStatus
+      `Prelude.seq` Prelude.rnf jobType
+      `Prelude.seq` Prelude.rnf lastRunErrorStatus
+      `Prelude.seq` Prelude.rnf lastRunTime
+      `Prelude.seq` Prelude.rnf managedDataIdentifierIds
+      `Prelude.seq` Prelude.rnf managedDataIdentifierSelector
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf s3JobDefinition
+      `Prelude.seq` Prelude.rnf samplingPercentage
+      `Prelude.seq` Prelude.rnf scheduleFrequency
+      `Prelude.seq` Prelude.rnf statistics
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf
+        userPausedDetails
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/DescribeOrganizationConfiguration.hs b/gen/Amazonka/MacieV2/DescribeOrganizationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/DescribeOrganizationConfiguration.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.MacieV2.DescribeOrganizationConfiguration
+-- 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 Amazon Macie configuration settings for an organization in
+-- Organizations.
+module Amazonka.MacieV2.DescribeOrganizationConfiguration
+  ( -- * Creating a Request
+    DescribeOrganizationConfiguration (..),
+    newDescribeOrganizationConfiguration,
+
+    -- * Destructuring the Response
+    DescribeOrganizationConfigurationResponse (..),
+    newDescribeOrganizationConfigurationResponse,
+
+    -- * Response Lenses
+    describeOrganizationConfigurationResponse_autoEnable,
+    describeOrganizationConfigurationResponse_maxAccountLimitReached,
+    describeOrganizationConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeOrganizationConfiguration' smart constructor.
+data DescribeOrganizationConfiguration = DescribeOrganizationConfiguration'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeOrganizationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDescribeOrganizationConfiguration ::
+  DescribeOrganizationConfiguration
+newDescribeOrganizationConfiguration =
+  DescribeOrganizationConfiguration'
+
+instance
+  Core.AWSRequest
+    DescribeOrganizationConfiguration
+  where
+  type
+    AWSResponse DescribeOrganizationConfiguration =
+      DescribeOrganizationConfigurationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeOrganizationConfigurationResponse'
+            Prelude.<$> (x Data..?> "autoEnable")
+            Prelude.<*> (x Data..?> "maxAccountLimitReached")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeOrganizationConfiguration
+  where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance
+  Prelude.NFData
+    DescribeOrganizationConfiguration
+  where
+  rnf _ = ()
+
+instance
+  Data.ToHeaders
+    DescribeOrganizationConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToPath
+    DescribeOrganizationConfiguration
+  where
+  toPath = Prelude.const "/admin/configuration"
+
+instance
+  Data.ToQuery
+    DescribeOrganizationConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeOrganizationConfigurationResponse' smart constructor.
+data DescribeOrganizationConfigurationResponse = DescribeOrganizationConfigurationResponse'
+  { -- | Specifies whether Amazon Macie is enabled automatically for accounts
+    -- that are added to the organization.
+    autoEnable :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether the maximum number of Amazon Macie member accounts are
+    -- part of the organization.
+    maxAccountLimitReached :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeOrganizationConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoEnable', 'describeOrganizationConfigurationResponse_autoEnable' - Specifies whether Amazon Macie is enabled automatically for accounts
+-- that are added to the organization.
+--
+-- 'maxAccountLimitReached', 'describeOrganizationConfigurationResponse_maxAccountLimitReached' - Specifies whether the maximum number of Amazon Macie member accounts are
+-- part of the organization.
+--
+-- 'httpStatus', 'describeOrganizationConfigurationResponse_httpStatus' - The response's http status code.
+newDescribeOrganizationConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeOrganizationConfigurationResponse
+newDescribeOrganizationConfigurationResponse
+  pHttpStatus_ =
+    DescribeOrganizationConfigurationResponse'
+      { autoEnable =
+          Prelude.Nothing,
+        maxAccountLimitReached =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Specifies whether Amazon Macie is enabled automatically for accounts
+-- that are added to the organization.
+describeOrganizationConfigurationResponse_autoEnable :: Lens.Lens' DescribeOrganizationConfigurationResponse (Prelude.Maybe Prelude.Bool)
+describeOrganizationConfigurationResponse_autoEnable = Lens.lens (\DescribeOrganizationConfigurationResponse' {autoEnable} -> autoEnable) (\s@DescribeOrganizationConfigurationResponse' {} a -> s {autoEnable = a} :: DescribeOrganizationConfigurationResponse)
+
+-- | Specifies whether the maximum number of Amazon Macie member accounts are
+-- part of the organization.
+describeOrganizationConfigurationResponse_maxAccountLimitReached :: Lens.Lens' DescribeOrganizationConfigurationResponse (Prelude.Maybe Prelude.Bool)
+describeOrganizationConfigurationResponse_maxAccountLimitReached = Lens.lens (\DescribeOrganizationConfigurationResponse' {maxAccountLimitReached} -> maxAccountLimitReached) (\s@DescribeOrganizationConfigurationResponse' {} a -> s {maxAccountLimitReached = a} :: DescribeOrganizationConfigurationResponse)
+
+-- | The response's http status code.
+describeOrganizationConfigurationResponse_httpStatus :: Lens.Lens' DescribeOrganizationConfigurationResponse Prelude.Int
+describeOrganizationConfigurationResponse_httpStatus = Lens.lens (\DescribeOrganizationConfigurationResponse' {httpStatus} -> httpStatus) (\s@DescribeOrganizationConfigurationResponse' {} a -> s {httpStatus = a} :: DescribeOrganizationConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DescribeOrganizationConfigurationResponse
+  where
+  rnf DescribeOrganizationConfigurationResponse' {..} =
+    Prelude.rnf autoEnable
+      `Prelude.seq` Prelude.rnf maxAccountLimitReached
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/DisableMacie.hs b/gen/Amazonka/MacieV2/DisableMacie.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/DisableMacie.hs
@@ -0,0 +1,125 @@
+{-# 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.MacieV2.DisableMacie
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disables Amazon Macie and deletes all settings and resources for a Macie
+-- account.
+module Amazonka.MacieV2.DisableMacie
+  ( -- * Creating a Request
+    DisableMacie (..),
+    newDisableMacie,
+
+    -- * Destructuring the Response
+    DisableMacieResponse (..),
+    newDisableMacieResponse,
+
+    -- * Response Lenses
+    disableMacieResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisableMacie' smart constructor.
+data DisableMacie = DisableMacie'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableMacie' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDisableMacie ::
+  DisableMacie
+newDisableMacie = DisableMacie'
+
+instance Core.AWSRequest DisableMacie where
+  type AWSResponse DisableMacie = DisableMacieResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisableMacieResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisableMacie where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData DisableMacie where
+  rnf _ = ()
+
+instance Data.ToHeaders DisableMacie where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DisableMacie where
+  toPath = Prelude.const "/macie"
+
+instance Data.ToQuery DisableMacie where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisableMacieResponse' smart constructor.
+data DisableMacieResponse = DisableMacieResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableMacieResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'disableMacieResponse_httpStatus' - The response's http status code.
+newDisableMacieResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisableMacieResponse
+newDisableMacieResponse pHttpStatus_ =
+  DisableMacieResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+disableMacieResponse_httpStatus :: Lens.Lens' DisableMacieResponse Prelude.Int
+disableMacieResponse_httpStatus = Lens.lens (\DisableMacieResponse' {httpStatus} -> httpStatus) (\s@DisableMacieResponse' {} a -> s {httpStatus = a} :: DisableMacieResponse)
+
+instance Prelude.NFData DisableMacieResponse where
+  rnf DisableMacieResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/DisableOrganizationAdminAccount.hs b/gen/Amazonka/MacieV2/DisableOrganizationAdminAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/DisableOrganizationAdminAccount.hs
@@ -0,0 +1,173 @@
+{-# 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.MacieV2.DisableOrganizationAdminAccount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disables an account as the delegated Amazon Macie administrator account
+-- for an organization in Organizations.
+module Amazonka.MacieV2.DisableOrganizationAdminAccount
+  ( -- * Creating a Request
+    DisableOrganizationAdminAccount (..),
+    newDisableOrganizationAdminAccount,
+
+    -- * Request Lenses
+    disableOrganizationAdminAccount_adminAccountId,
+
+    -- * Destructuring the Response
+    DisableOrganizationAdminAccountResponse (..),
+    newDisableOrganizationAdminAccountResponse,
+
+    -- * Response Lenses
+    disableOrganizationAdminAccountResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisableOrganizationAdminAccount' smart constructor.
+data DisableOrganizationAdminAccount = DisableOrganizationAdminAccount'
+  { -- | The Amazon Web Services account ID of the delegated Amazon Macie
+    -- administrator account.
+    adminAccountId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableOrganizationAdminAccount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'adminAccountId', 'disableOrganizationAdminAccount_adminAccountId' - The Amazon Web Services account ID of the delegated Amazon Macie
+-- administrator account.
+newDisableOrganizationAdminAccount ::
+  -- | 'adminAccountId'
+  Prelude.Text ->
+  DisableOrganizationAdminAccount
+newDisableOrganizationAdminAccount pAdminAccountId_ =
+  DisableOrganizationAdminAccount'
+    { adminAccountId =
+        pAdminAccountId_
+    }
+
+-- | The Amazon Web Services account ID of the delegated Amazon Macie
+-- administrator account.
+disableOrganizationAdminAccount_adminAccountId :: Lens.Lens' DisableOrganizationAdminAccount Prelude.Text
+disableOrganizationAdminAccount_adminAccountId = Lens.lens (\DisableOrganizationAdminAccount' {adminAccountId} -> adminAccountId) (\s@DisableOrganizationAdminAccount' {} a -> s {adminAccountId = a} :: DisableOrganizationAdminAccount)
+
+instance
+  Core.AWSRequest
+    DisableOrganizationAdminAccount
+  where
+  type
+    AWSResponse DisableOrganizationAdminAccount =
+      DisableOrganizationAdminAccountResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisableOrganizationAdminAccountResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisableOrganizationAdminAccount
+  where
+  hashWithSalt
+    _salt
+    DisableOrganizationAdminAccount' {..} =
+      _salt `Prelude.hashWithSalt` adminAccountId
+
+instance
+  Prelude.NFData
+    DisableOrganizationAdminAccount
+  where
+  rnf DisableOrganizationAdminAccount' {..} =
+    Prelude.rnf adminAccountId
+
+instance
+  Data.ToHeaders
+    DisableOrganizationAdminAccount
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DisableOrganizationAdminAccount where
+  toPath = Prelude.const "/admin"
+
+instance Data.ToQuery DisableOrganizationAdminAccount where
+  toQuery DisableOrganizationAdminAccount' {..} =
+    Prelude.mconcat
+      ["adminAccountId" Data.=: adminAccountId]
+
+-- | /See:/ 'newDisableOrganizationAdminAccountResponse' smart constructor.
+data DisableOrganizationAdminAccountResponse = DisableOrganizationAdminAccountResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableOrganizationAdminAccountResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'disableOrganizationAdminAccountResponse_httpStatus' - The response's http status code.
+newDisableOrganizationAdminAccountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisableOrganizationAdminAccountResponse
+newDisableOrganizationAdminAccountResponse
+  pHttpStatus_ =
+    DisableOrganizationAdminAccountResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+disableOrganizationAdminAccountResponse_httpStatus :: Lens.Lens' DisableOrganizationAdminAccountResponse Prelude.Int
+disableOrganizationAdminAccountResponse_httpStatus = Lens.lens (\DisableOrganizationAdminAccountResponse' {httpStatus} -> httpStatus) (\s@DisableOrganizationAdminAccountResponse' {} a -> s {httpStatus = a} :: DisableOrganizationAdminAccountResponse)
+
+instance
+  Prelude.NFData
+    DisableOrganizationAdminAccountResponse
+  where
+  rnf DisableOrganizationAdminAccountResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/DisassociateFromAdministratorAccount.hs b/gen/Amazonka/MacieV2/DisassociateFromAdministratorAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/DisassociateFromAdministratorAccount.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.MacieV2.DisassociateFromAdministratorAccount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates a member account from its Amazon Macie administrator
+-- account.
+module Amazonka.MacieV2.DisassociateFromAdministratorAccount
+  ( -- * Creating a Request
+    DisassociateFromAdministratorAccount (..),
+    newDisassociateFromAdministratorAccount,
+
+    -- * Destructuring the Response
+    DisassociateFromAdministratorAccountResponse (..),
+    newDisassociateFromAdministratorAccountResponse,
+
+    -- * Response Lenses
+    disassociateFromAdministratorAccountResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateFromAdministratorAccount' smart constructor.
+data DisassociateFromAdministratorAccount = DisassociateFromAdministratorAccount'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateFromAdministratorAccount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDisassociateFromAdministratorAccount ::
+  DisassociateFromAdministratorAccount
+newDisassociateFromAdministratorAccount =
+  DisassociateFromAdministratorAccount'
+
+instance
+  Core.AWSRequest
+    DisassociateFromAdministratorAccount
+  where
+  type
+    AWSResponse DisassociateFromAdministratorAccount =
+      DisassociateFromAdministratorAccountResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateFromAdministratorAccountResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateFromAdministratorAccount
+  where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance
+  Prelude.NFData
+    DisassociateFromAdministratorAccount
+  where
+  rnf _ = ()
+
+instance
+  Data.ToHeaders
+    DisassociateFromAdministratorAccount
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DisassociateFromAdministratorAccount
+  where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance
+  Data.ToPath
+    DisassociateFromAdministratorAccount
+  where
+  toPath = Prelude.const "/administrator/disassociate"
+
+instance
+  Data.ToQuery
+    DisassociateFromAdministratorAccount
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateFromAdministratorAccountResponse' smart constructor.
+data DisassociateFromAdministratorAccountResponse = DisassociateFromAdministratorAccountResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateFromAdministratorAccountResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'disassociateFromAdministratorAccountResponse_httpStatus' - The response's http status code.
+newDisassociateFromAdministratorAccountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateFromAdministratorAccountResponse
+newDisassociateFromAdministratorAccountResponse
+  pHttpStatus_ =
+    DisassociateFromAdministratorAccountResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+disassociateFromAdministratorAccountResponse_httpStatus :: Lens.Lens' DisassociateFromAdministratorAccountResponse Prelude.Int
+disassociateFromAdministratorAccountResponse_httpStatus = Lens.lens (\DisassociateFromAdministratorAccountResponse' {httpStatus} -> httpStatus) (\s@DisassociateFromAdministratorAccountResponse' {} a -> s {httpStatus = a} :: DisassociateFromAdministratorAccountResponse)
+
+instance
+  Prelude.NFData
+    DisassociateFromAdministratorAccountResponse
+  where
+  rnf DisassociateFromAdministratorAccountResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/DisassociateFromMasterAccount.hs b/gen/Amazonka/MacieV2/DisassociateFromMasterAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/DisassociateFromMasterAccount.hs
@@ -0,0 +1,144 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.DisassociateFromMasterAccount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- (Deprecated) Disassociates a member account from its Amazon Macie
+-- administrator account. This operation has been replaced by the
+-- DisassociateFromAdministratorAccount operation.
+module Amazonka.MacieV2.DisassociateFromMasterAccount
+  ( -- * Creating a Request
+    DisassociateFromMasterAccount (..),
+    newDisassociateFromMasterAccount,
+
+    -- * Destructuring the Response
+    DisassociateFromMasterAccountResponse (..),
+    newDisassociateFromMasterAccountResponse,
+
+    -- * Response Lenses
+    disassociateFromMasterAccountResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateFromMasterAccount' smart constructor.
+data DisassociateFromMasterAccount = DisassociateFromMasterAccount'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateFromMasterAccount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDisassociateFromMasterAccount ::
+  DisassociateFromMasterAccount
+newDisassociateFromMasterAccount =
+  DisassociateFromMasterAccount'
+
+instance
+  Core.AWSRequest
+    DisassociateFromMasterAccount
+  where
+  type
+    AWSResponse DisassociateFromMasterAccount =
+      DisassociateFromMasterAccountResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateFromMasterAccountResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateFromMasterAccount
+  where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData DisassociateFromMasterAccount where
+  rnf _ = ()
+
+instance Data.ToHeaders DisassociateFromMasterAccount where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisassociateFromMasterAccount where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath DisassociateFromMasterAccount where
+  toPath = Prelude.const "/master/disassociate"
+
+instance Data.ToQuery DisassociateFromMasterAccount where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateFromMasterAccountResponse' smart constructor.
+data DisassociateFromMasterAccountResponse = DisassociateFromMasterAccountResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateFromMasterAccountResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'disassociateFromMasterAccountResponse_httpStatus' - The response's http status code.
+newDisassociateFromMasterAccountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateFromMasterAccountResponse
+newDisassociateFromMasterAccountResponse pHttpStatus_ =
+  DisassociateFromMasterAccountResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+disassociateFromMasterAccountResponse_httpStatus :: Lens.Lens' DisassociateFromMasterAccountResponse Prelude.Int
+disassociateFromMasterAccountResponse_httpStatus = Lens.lens (\DisassociateFromMasterAccountResponse' {httpStatus} -> httpStatus) (\s@DisassociateFromMasterAccountResponse' {} a -> s {httpStatus = a} :: DisassociateFromMasterAccountResponse)
+
+instance
+  Prelude.NFData
+    DisassociateFromMasterAccountResponse
+  where
+  rnf DisassociateFromMasterAccountResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/DisassociateMember.hs b/gen/Amazonka/MacieV2/DisassociateMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/DisassociateMember.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.DisassociateMember
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates an Amazon Macie administrator account from a member
+-- account.
+module Amazonka.MacieV2.DisassociateMember
+  ( -- * Creating a Request
+    DisassociateMember (..),
+    newDisassociateMember,
+
+    -- * Request Lenses
+    disassociateMember_id,
+
+    -- * Destructuring the Response
+    DisassociateMemberResponse (..),
+    newDisassociateMemberResponse,
+
+    -- * Response Lenses
+    disassociateMemberResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateMember' smart constructor.
+data DisassociateMember = DisassociateMember'
+  { -- | The unique identifier for the Amazon Macie resource that the request
+    -- applies to.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateMember' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'disassociateMember_id' - The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+newDisassociateMember ::
+  -- | 'id'
+  Prelude.Text ->
+  DisassociateMember
+newDisassociateMember pId_ =
+  DisassociateMember' {id = pId_}
+
+-- | The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+disassociateMember_id :: Lens.Lens' DisassociateMember Prelude.Text
+disassociateMember_id = Lens.lens (\DisassociateMember' {id} -> id) (\s@DisassociateMember' {} a -> s {id = a} :: DisassociateMember)
+
+instance Core.AWSRequest DisassociateMember where
+  type
+    AWSResponse DisassociateMember =
+      DisassociateMemberResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateMemberResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisassociateMember where
+  hashWithSalt _salt DisassociateMember' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DisassociateMember where
+  rnf DisassociateMember' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DisassociateMember where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisassociateMember where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath DisassociateMember where
+  toPath DisassociateMember' {..} =
+    Prelude.mconcat
+      ["/members/disassociate/", Data.toBS id]
+
+instance Data.ToQuery DisassociateMember where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateMemberResponse' smart constructor.
+data DisassociateMemberResponse = DisassociateMemberResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateMemberResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'disassociateMemberResponse_httpStatus' - The response's http status code.
+newDisassociateMemberResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateMemberResponse
+newDisassociateMemberResponse pHttpStatus_ =
+  DisassociateMemberResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+disassociateMemberResponse_httpStatus :: Lens.Lens' DisassociateMemberResponse Prelude.Int
+disassociateMemberResponse_httpStatus = Lens.lens (\DisassociateMemberResponse' {httpStatus} -> httpStatus) (\s@DisassociateMemberResponse' {} a -> s {httpStatus = a} :: DisassociateMemberResponse)
+
+instance Prelude.NFData DisassociateMemberResponse where
+  rnf DisassociateMemberResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/EnableMacie.hs b/gen/Amazonka/MacieV2/EnableMacie.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/EnableMacie.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.MacieV2.EnableMacie
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables Amazon Macie and specifies the configuration settings for a
+-- Macie account.
+module Amazonka.MacieV2.EnableMacie
+  ( -- * Creating a Request
+    EnableMacie (..),
+    newEnableMacie,
+
+    -- * Request Lenses
+    enableMacie_clientToken,
+    enableMacie_findingPublishingFrequency,
+    enableMacie_status,
+
+    -- * Destructuring the Response
+    EnableMacieResponse (..),
+    newEnableMacieResponse,
+
+    -- * Response Lenses
+    enableMacieResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newEnableMacie' smart constructor.
+data EnableMacie = EnableMacie'
+  { -- | A unique, case-sensitive token that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Specifies how often to publish updates to policy findings for the
+    -- account. This includes publishing updates to Security Hub and Amazon
+    -- EventBridge (formerly Amazon CloudWatch Events).
+    findingPublishingFrequency :: Prelude.Maybe FindingPublishingFrequency,
+    -- | Specifies the new status for the account. To enable Amazon Macie and
+    -- start all Macie activities for the account, set this value to ENABLED.
+    status :: Prelude.Maybe MacieStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableMacie' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'enableMacie_clientToken' - A unique, case-sensitive token that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'findingPublishingFrequency', 'enableMacie_findingPublishingFrequency' - Specifies how often to publish updates to policy findings for the
+-- account. This includes publishing updates to Security Hub and Amazon
+-- EventBridge (formerly Amazon CloudWatch Events).
+--
+-- 'status', 'enableMacie_status' - Specifies the new status for the account. To enable Amazon Macie and
+-- start all Macie activities for the account, set this value to ENABLED.
+newEnableMacie ::
+  EnableMacie
+newEnableMacie =
+  EnableMacie'
+    { clientToken = Prelude.Nothing,
+      findingPublishingFrequency = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | A unique, case-sensitive token that you provide to ensure the
+-- idempotency of the request.
+enableMacie_clientToken :: Lens.Lens' EnableMacie (Prelude.Maybe Prelude.Text)
+enableMacie_clientToken = Lens.lens (\EnableMacie' {clientToken} -> clientToken) (\s@EnableMacie' {} a -> s {clientToken = a} :: EnableMacie)
+
+-- | Specifies how often to publish updates to policy findings for the
+-- account. This includes publishing updates to Security Hub and Amazon
+-- EventBridge (formerly Amazon CloudWatch Events).
+enableMacie_findingPublishingFrequency :: Lens.Lens' EnableMacie (Prelude.Maybe FindingPublishingFrequency)
+enableMacie_findingPublishingFrequency = Lens.lens (\EnableMacie' {findingPublishingFrequency} -> findingPublishingFrequency) (\s@EnableMacie' {} a -> s {findingPublishingFrequency = a} :: EnableMacie)
+
+-- | Specifies the new status for the account. To enable Amazon Macie and
+-- start all Macie activities for the account, set this value to ENABLED.
+enableMacie_status :: Lens.Lens' EnableMacie (Prelude.Maybe MacieStatus)
+enableMacie_status = Lens.lens (\EnableMacie' {status} -> status) (\s@EnableMacie' {} a -> s {status = a} :: EnableMacie)
+
+instance Core.AWSRequest EnableMacie where
+  type AWSResponse EnableMacie = EnableMacieResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          EnableMacieResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable EnableMacie where
+  hashWithSalt _salt EnableMacie' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` findingPublishingFrequency
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData EnableMacie where
+  rnf EnableMacie' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf findingPublishingFrequency
+      `Prelude.seq` Prelude.rnf status
+
+instance Data.ToHeaders EnableMacie where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON EnableMacie where
+  toJSON EnableMacie' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("findingPublishingFrequency" Data..=)
+              Prelude.<$> findingPublishingFrequency,
+            ("status" Data..=) Prelude.<$> status
+          ]
+      )
+
+instance Data.ToPath EnableMacie where
+  toPath = Prelude.const "/macie"
+
+instance Data.ToQuery EnableMacie where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newEnableMacieResponse' smart constructor.
+data EnableMacieResponse = EnableMacieResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableMacieResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'enableMacieResponse_httpStatus' - The response's http status code.
+newEnableMacieResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  EnableMacieResponse
+newEnableMacieResponse pHttpStatus_ =
+  EnableMacieResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+enableMacieResponse_httpStatus :: Lens.Lens' EnableMacieResponse Prelude.Int
+enableMacieResponse_httpStatus = Lens.lens (\EnableMacieResponse' {httpStatus} -> httpStatus) (\s@EnableMacieResponse' {} a -> s {httpStatus = a} :: EnableMacieResponse)
+
+instance Prelude.NFData EnableMacieResponse where
+  rnf EnableMacieResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/EnableOrganizationAdminAccount.hs b/gen/Amazonka/MacieV2/EnableOrganizationAdminAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/EnableOrganizationAdminAccount.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.MacieV2.EnableOrganizationAdminAccount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Designates an account as the delegated Amazon Macie administrator
+-- account for an organization in Organizations.
+module Amazonka.MacieV2.EnableOrganizationAdminAccount
+  ( -- * Creating a Request
+    EnableOrganizationAdminAccount (..),
+    newEnableOrganizationAdminAccount,
+
+    -- * Request Lenses
+    enableOrganizationAdminAccount_clientToken,
+    enableOrganizationAdminAccount_adminAccountId,
+
+    -- * Destructuring the Response
+    EnableOrganizationAdminAccountResponse (..),
+    newEnableOrganizationAdminAccountResponse,
+
+    -- * Response Lenses
+    enableOrganizationAdminAccountResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newEnableOrganizationAdminAccount' smart constructor.
+data EnableOrganizationAdminAccount = EnableOrganizationAdminAccount'
+  { -- | A unique, case-sensitive token that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services account ID for the account to designate as the
+    -- delegated Amazon Macie administrator account for the organization.
+    adminAccountId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableOrganizationAdminAccount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'enableOrganizationAdminAccount_clientToken' - A unique, case-sensitive token that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'adminAccountId', 'enableOrganizationAdminAccount_adminAccountId' - The Amazon Web Services account ID for the account to designate as the
+-- delegated Amazon Macie administrator account for the organization.
+newEnableOrganizationAdminAccount ::
+  -- | 'adminAccountId'
+  Prelude.Text ->
+  EnableOrganizationAdminAccount
+newEnableOrganizationAdminAccount pAdminAccountId_ =
+  EnableOrganizationAdminAccount'
+    { clientToken =
+        Prelude.Nothing,
+      adminAccountId = pAdminAccountId_
+    }
+
+-- | A unique, case-sensitive token that you provide to ensure the
+-- idempotency of the request.
+enableOrganizationAdminAccount_clientToken :: Lens.Lens' EnableOrganizationAdminAccount (Prelude.Maybe Prelude.Text)
+enableOrganizationAdminAccount_clientToken = Lens.lens (\EnableOrganizationAdminAccount' {clientToken} -> clientToken) (\s@EnableOrganizationAdminAccount' {} a -> s {clientToken = a} :: EnableOrganizationAdminAccount)
+
+-- | The Amazon Web Services account ID for the account to designate as the
+-- delegated Amazon Macie administrator account for the organization.
+enableOrganizationAdminAccount_adminAccountId :: Lens.Lens' EnableOrganizationAdminAccount Prelude.Text
+enableOrganizationAdminAccount_adminAccountId = Lens.lens (\EnableOrganizationAdminAccount' {adminAccountId} -> adminAccountId) (\s@EnableOrganizationAdminAccount' {} a -> s {adminAccountId = a} :: EnableOrganizationAdminAccount)
+
+instance
+  Core.AWSRequest
+    EnableOrganizationAdminAccount
+  where
+  type
+    AWSResponse EnableOrganizationAdminAccount =
+      EnableOrganizationAdminAccountResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          EnableOrganizationAdminAccountResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    EnableOrganizationAdminAccount
+  where
+  hashWithSalt
+    _salt
+    EnableOrganizationAdminAccount' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` adminAccountId
+
+instance
+  Prelude.NFData
+    EnableOrganizationAdminAccount
+  where
+  rnf EnableOrganizationAdminAccount' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf adminAccountId
+
+instance
+  Data.ToHeaders
+    EnableOrganizationAdminAccount
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON EnableOrganizationAdminAccount where
+  toJSON EnableOrganizationAdminAccount' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            Prelude.Just
+              ("adminAccountId" Data..= adminAccountId)
+          ]
+      )
+
+instance Data.ToPath EnableOrganizationAdminAccount where
+  toPath = Prelude.const "/admin"
+
+instance Data.ToQuery EnableOrganizationAdminAccount where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newEnableOrganizationAdminAccountResponse' smart constructor.
+data EnableOrganizationAdminAccountResponse = EnableOrganizationAdminAccountResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableOrganizationAdminAccountResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'enableOrganizationAdminAccountResponse_httpStatus' - The response's http status code.
+newEnableOrganizationAdminAccountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  EnableOrganizationAdminAccountResponse
+newEnableOrganizationAdminAccountResponse
+  pHttpStatus_ =
+    EnableOrganizationAdminAccountResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+enableOrganizationAdminAccountResponse_httpStatus :: Lens.Lens' EnableOrganizationAdminAccountResponse Prelude.Int
+enableOrganizationAdminAccountResponse_httpStatus = Lens.lens (\EnableOrganizationAdminAccountResponse' {httpStatus} -> httpStatus) (\s@EnableOrganizationAdminAccountResponse' {} a -> s {httpStatus = a} :: EnableOrganizationAdminAccountResponse)
+
+instance
+  Prelude.NFData
+    EnableOrganizationAdminAccountResponse
+  where
+  rnf EnableOrganizationAdminAccountResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetAdministratorAccount.hs b/gen/Amazonka/MacieV2/GetAdministratorAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetAdministratorAccount.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.GetAdministratorAccount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about the Amazon Macie administrator account for
+-- an account.
+module Amazonka.MacieV2.GetAdministratorAccount
+  ( -- * Creating a Request
+    GetAdministratorAccount (..),
+    newGetAdministratorAccount,
+
+    -- * Destructuring the Response
+    GetAdministratorAccountResponse (..),
+    newGetAdministratorAccountResponse,
+
+    -- * Response Lenses
+    getAdministratorAccountResponse_administrator,
+    getAdministratorAccountResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetAdministratorAccount' smart constructor.
+data GetAdministratorAccount = GetAdministratorAccount'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAdministratorAccount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetAdministratorAccount ::
+  GetAdministratorAccount
+newGetAdministratorAccount = GetAdministratorAccount'
+
+instance Core.AWSRequest GetAdministratorAccount where
+  type
+    AWSResponse GetAdministratorAccount =
+      GetAdministratorAccountResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAdministratorAccountResponse'
+            Prelude.<$> (x Data..?> "administrator")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAdministratorAccount where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData GetAdministratorAccount where
+  rnf _ = ()
+
+instance Data.ToHeaders GetAdministratorAccount where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetAdministratorAccount where
+  toPath = Prelude.const "/administrator"
+
+instance Data.ToQuery GetAdministratorAccount where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAdministratorAccountResponse' smart constructor.
+data GetAdministratorAccountResponse = GetAdministratorAccountResponse'
+  { -- | The Amazon Web Services account ID for the administrator account. If the
+    -- accounts are associated by an Amazon Macie membership invitation, this
+    -- object also provides details about the invitation that was sent to
+    -- establish the relationship between the accounts.
+    administrator :: Prelude.Maybe Invitation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAdministratorAccountResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'administrator', 'getAdministratorAccountResponse_administrator' - The Amazon Web Services account ID for the administrator account. If the
+-- accounts are associated by an Amazon Macie membership invitation, this
+-- object also provides details about the invitation that was sent to
+-- establish the relationship between the accounts.
+--
+-- 'httpStatus', 'getAdministratorAccountResponse_httpStatus' - The response's http status code.
+newGetAdministratorAccountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAdministratorAccountResponse
+newGetAdministratorAccountResponse pHttpStatus_ =
+  GetAdministratorAccountResponse'
+    { administrator =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Web Services account ID for the administrator account. If the
+-- accounts are associated by an Amazon Macie membership invitation, this
+-- object also provides details about the invitation that was sent to
+-- establish the relationship between the accounts.
+getAdministratorAccountResponse_administrator :: Lens.Lens' GetAdministratorAccountResponse (Prelude.Maybe Invitation)
+getAdministratorAccountResponse_administrator = Lens.lens (\GetAdministratorAccountResponse' {administrator} -> administrator) (\s@GetAdministratorAccountResponse' {} a -> s {administrator = a} :: GetAdministratorAccountResponse)
+
+-- | The response's http status code.
+getAdministratorAccountResponse_httpStatus :: Lens.Lens' GetAdministratorAccountResponse Prelude.Int
+getAdministratorAccountResponse_httpStatus = Lens.lens (\GetAdministratorAccountResponse' {httpStatus} -> httpStatus) (\s@GetAdministratorAccountResponse' {} a -> s {httpStatus = a} :: GetAdministratorAccountResponse)
+
+instance
+  Prelude.NFData
+    GetAdministratorAccountResponse
+  where
+  rnf GetAdministratorAccountResponse' {..} =
+    Prelude.rnf administrator
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetAllowList.hs b/gen/Amazonka/MacieV2/GetAllowList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetAllowList.hs
@@ -0,0 +1,274 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.GetAllowList
+-- 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 settings and status of an allow list.
+module Amazonka.MacieV2.GetAllowList
+  ( -- * Creating a Request
+    GetAllowList (..),
+    newGetAllowList,
+
+    -- * Request Lenses
+    getAllowList_id,
+
+    -- * Destructuring the Response
+    GetAllowListResponse (..),
+    newGetAllowListResponse,
+
+    -- * Response Lenses
+    getAllowListResponse_arn,
+    getAllowListResponse_createdAt,
+    getAllowListResponse_criteria,
+    getAllowListResponse_description,
+    getAllowListResponse_id,
+    getAllowListResponse_name,
+    getAllowListResponse_status,
+    getAllowListResponse_tags,
+    getAllowListResponse_updatedAt,
+    getAllowListResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetAllowList' smart constructor.
+data GetAllowList = GetAllowList'
+  { -- | The unique identifier for the Amazon Macie resource that the request
+    -- applies to.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAllowList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'getAllowList_id' - The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+newGetAllowList ::
+  -- | 'id'
+  Prelude.Text ->
+  GetAllowList
+newGetAllowList pId_ = GetAllowList' {id = pId_}
+
+-- | The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+getAllowList_id :: Lens.Lens' GetAllowList Prelude.Text
+getAllowList_id = Lens.lens (\GetAllowList' {id} -> id) (\s@GetAllowList' {} a -> s {id = a} :: GetAllowList)
+
+instance Core.AWSRequest GetAllowList where
+  type AWSResponse GetAllowList = GetAllowListResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAllowListResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "createdAt")
+            Prelude.<*> (x Data..?> "criteria")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "updatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAllowList where
+  hashWithSalt _salt GetAllowList' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetAllowList where
+  rnf GetAllowList' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetAllowList where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetAllowList where
+  toPath GetAllowList' {..} =
+    Prelude.mconcat ["/allow-lists/", Data.toBS id]
+
+instance Data.ToQuery GetAllowList where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAllowListResponse' smart constructor.
+data GetAllowListResponse = GetAllowListResponse'
+  { -- | The Amazon Resource Name (ARN) of the allow list.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in UTC and extended ISO 8601 format, when the allow
+    -- list was created in Amazon Macie.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The criteria that specify the text or text pattern to ignore. The
+    -- criteria can be the location and name of an S3 object that lists
+    -- specific text to ignore (s3WordsList), or a regular expression (regex)
+    -- that defines a text pattern to ignore.
+    criteria :: Prelude.Maybe AllowListCriteria,
+    -- | The custom description of the allow list.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the allow list.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The custom name of the allow list.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the allow list, which indicates whether Amazon
+    -- Macie can access and use the list\'s criteria.
+    status :: Prelude.Maybe AllowListStatus,
+    -- | A map of key-value pairs that specifies which tags (keys and values) are
+    -- associated with the allow list.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The date and time, in UTC and extended ISO 8601 format, when the allow
+    -- list\'s settings were most recently changed in Amazon Macie.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAllowListResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getAllowListResponse_arn' - The Amazon Resource Name (ARN) of the allow list.
+--
+-- 'createdAt', 'getAllowListResponse_createdAt' - The date and time, in UTC and extended ISO 8601 format, when the allow
+-- list was created in Amazon Macie.
+--
+-- 'criteria', 'getAllowListResponse_criteria' - The criteria that specify the text or text pattern to ignore. The
+-- criteria can be the location and name of an S3 object that lists
+-- specific text to ignore (s3WordsList), or a regular expression (regex)
+-- that defines a text pattern to ignore.
+--
+-- 'description', 'getAllowListResponse_description' - The custom description of the allow list.
+--
+-- 'id', 'getAllowListResponse_id' - The unique identifier for the allow list.
+--
+-- 'name', 'getAllowListResponse_name' - The custom name of the allow list.
+--
+-- 'status', 'getAllowListResponse_status' - The current status of the allow list, which indicates whether Amazon
+-- Macie can access and use the list\'s criteria.
+--
+-- 'tags', 'getAllowListResponse_tags' - A map of key-value pairs that specifies which tags (keys and values) are
+-- associated with the allow list.
+--
+-- 'updatedAt', 'getAllowListResponse_updatedAt' - The date and time, in UTC and extended ISO 8601 format, when the allow
+-- list\'s settings were most recently changed in Amazon Macie.
+--
+-- 'httpStatus', 'getAllowListResponse_httpStatus' - The response's http status code.
+newGetAllowListResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAllowListResponse
+newGetAllowListResponse pHttpStatus_ =
+  GetAllowListResponse'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      criteria = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the allow list.
+getAllowListResponse_arn :: Lens.Lens' GetAllowListResponse (Prelude.Maybe Prelude.Text)
+getAllowListResponse_arn = Lens.lens (\GetAllowListResponse' {arn} -> arn) (\s@GetAllowListResponse' {} a -> s {arn = a} :: GetAllowListResponse)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the allow
+-- list was created in Amazon Macie.
+getAllowListResponse_createdAt :: Lens.Lens' GetAllowListResponse (Prelude.Maybe Prelude.UTCTime)
+getAllowListResponse_createdAt = Lens.lens (\GetAllowListResponse' {createdAt} -> createdAt) (\s@GetAllowListResponse' {} a -> s {createdAt = a} :: GetAllowListResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The criteria that specify the text or text pattern to ignore. The
+-- criteria can be the location and name of an S3 object that lists
+-- specific text to ignore (s3WordsList), or a regular expression (regex)
+-- that defines a text pattern to ignore.
+getAllowListResponse_criteria :: Lens.Lens' GetAllowListResponse (Prelude.Maybe AllowListCriteria)
+getAllowListResponse_criteria = Lens.lens (\GetAllowListResponse' {criteria} -> criteria) (\s@GetAllowListResponse' {} a -> s {criteria = a} :: GetAllowListResponse)
+
+-- | The custom description of the allow list.
+getAllowListResponse_description :: Lens.Lens' GetAllowListResponse (Prelude.Maybe Prelude.Text)
+getAllowListResponse_description = Lens.lens (\GetAllowListResponse' {description} -> description) (\s@GetAllowListResponse' {} a -> s {description = a} :: GetAllowListResponse)
+
+-- | The unique identifier for the allow list.
+getAllowListResponse_id :: Lens.Lens' GetAllowListResponse (Prelude.Maybe Prelude.Text)
+getAllowListResponse_id = Lens.lens (\GetAllowListResponse' {id} -> id) (\s@GetAllowListResponse' {} a -> s {id = a} :: GetAllowListResponse)
+
+-- | The custom name of the allow list.
+getAllowListResponse_name :: Lens.Lens' GetAllowListResponse (Prelude.Maybe Prelude.Text)
+getAllowListResponse_name = Lens.lens (\GetAllowListResponse' {name} -> name) (\s@GetAllowListResponse' {} a -> s {name = a} :: GetAllowListResponse)
+
+-- | The current status of the allow list, which indicates whether Amazon
+-- Macie can access and use the list\'s criteria.
+getAllowListResponse_status :: Lens.Lens' GetAllowListResponse (Prelude.Maybe AllowListStatus)
+getAllowListResponse_status = Lens.lens (\GetAllowListResponse' {status} -> status) (\s@GetAllowListResponse' {} a -> s {status = a} :: GetAllowListResponse)
+
+-- | A map of key-value pairs that specifies which tags (keys and values) are
+-- associated with the allow list.
+getAllowListResponse_tags :: Lens.Lens' GetAllowListResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getAllowListResponse_tags = Lens.lens (\GetAllowListResponse' {tags} -> tags) (\s@GetAllowListResponse' {} a -> s {tags = a} :: GetAllowListResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the allow
+-- list\'s settings were most recently changed in Amazon Macie.
+getAllowListResponse_updatedAt :: Lens.Lens' GetAllowListResponse (Prelude.Maybe Prelude.UTCTime)
+getAllowListResponse_updatedAt = Lens.lens (\GetAllowListResponse' {updatedAt} -> updatedAt) (\s@GetAllowListResponse' {} a -> s {updatedAt = a} :: GetAllowListResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+getAllowListResponse_httpStatus :: Lens.Lens' GetAllowListResponse Prelude.Int
+getAllowListResponse_httpStatus = Lens.lens (\GetAllowListResponse' {httpStatus} -> httpStatus) (\s@GetAllowListResponse' {} a -> s {httpStatus = a} :: GetAllowListResponse)
+
+instance Prelude.NFData GetAllowListResponse where
+  rnf GetAllowListResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf criteria
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetAutomatedDiscoveryConfiguration.hs b/gen/Amazonka/MacieV2/GetAutomatedDiscoveryConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetAutomatedDiscoveryConfiguration.hs
@@ -0,0 +1,282 @@
+{-# 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.MacieV2.GetAutomatedDiscoveryConfiguration
+-- 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 configuration settings and status of automated sensitive
+-- data discovery for an account.
+module Amazonka.MacieV2.GetAutomatedDiscoveryConfiguration
+  ( -- * Creating a Request
+    GetAutomatedDiscoveryConfiguration (..),
+    newGetAutomatedDiscoveryConfiguration,
+
+    -- * Destructuring the Response
+    GetAutomatedDiscoveryConfigurationResponse (..),
+    newGetAutomatedDiscoveryConfigurationResponse,
+
+    -- * Response Lenses
+    getAutomatedDiscoveryConfigurationResponse_classificationScopeId,
+    getAutomatedDiscoveryConfigurationResponse_disabledAt,
+    getAutomatedDiscoveryConfigurationResponse_firstEnabledAt,
+    getAutomatedDiscoveryConfigurationResponse_lastUpdatedAt,
+    getAutomatedDiscoveryConfigurationResponse_sensitivityInspectionTemplateId,
+    getAutomatedDiscoveryConfigurationResponse_status,
+    getAutomatedDiscoveryConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetAutomatedDiscoveryConfiguration' smart constructor.
+data GetAutomatedDiscoveryConfiguration = GetAutomatedDiscoveryConfiguration'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAutomatedDiscoveryConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetAutomatedDiscoveryConfiguration ::
+  GetAutomatedDiscoveryConfiguration
+newGetAutomatedDiscoveryConfiguration =
+  GetAutomatedDiscoveryConfiguration'
+
+instance
+  Core.AWSRequest
+    GetAutomatedDiscoveryConfiguration
+  where
+  type
+    AWSResponse GetAutomatedDiscoveryConfiguration =
+      GetAutomatedDiscoveryConfigurationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAutomatedDiscoveryConfigurationResponse'
+            Prelude.<$> (x Data..?> "classificationScopeId")
+            Prelude.<*> (x Data..?> "disabledAt")
+            Prelude.<*> (x Data..?> "firstEnabledAt")
+            Prelude.<*> (x Data..?> "lastUpdatedAt")
+            Prelude.<*> (x Data..?> "sensitivityInspectionTemplateId")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetAutomatedDiscoveryConfiguration
+  where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance
+  Prelude.NFData
+    GetAutomatedDiscoveryConfiguration
+  where
+  rnf _ = ()
+
+instance
+  Data.ToHeaders
+    GetAutomatedDiscoveryConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToPath
+    GetAutomatedDiscoveryConfiguration
+  where
+  toPath =
+    Prelude.const "/automated-discovery/configuration"
+
+instance
+  Data.ToQuery
+    GetAutomatedDiscoveryConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAutomatedDiscoveryConfigurationResponse' smart constructor.
+data GetAutomatedDiscoveryConfigurationResponse = GetAutomatedDiscoveryConfigurationResponse'
+  { -- | The unique identifier for the classification scope that\'s used when
+    -- performing automated sensitive data discovery for the account. The
+    -- classification scope specifies S3 buckets to exclude from automated
+    -- sensitive data discovery.
+    classificationScopeId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in UTC and extended ISO 8601 format, when automated
+    -- sensitive data discovery was most recently disabled for the account.
+    -- This value is null if automated sensitive data discovery wasn\'t enabled
+    -- and subsequently disabled for the account.
+    disabledAt :: Prelude.Maybe Data.ISO8601,
+    -- | The date and time, in UTC and extended ISO 8601 format, when automated
+    -- sensitive data discovery was initially enabled for the account. This
+    -- value is null if automated sensitive data discovery has never been
+    -- enabled for the account.
+    firstEnabledAt :: Prelude.Maybe Data.ISO8601,
+    -- | The date and time, in UTC and extended ISO 8601 format, when automated
+    -- sensitive data discovery was most recently enabled or disabled for the
+    -- account.
+    lastUpdatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The unique identifier for the sensitivity inspection template that\'s
+    -- used when performing automated sensitive data discovery for the account.
+    -- The template specifies which allow lists, custom data identifiers, and
+    -- managed data identifiers to use when analyzing data.
+    sensitivityInspectionTemplateId :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the automated sensitive data discovery
+    -- configuration for the account. Possible values are: ENABLED, use the
+    -- specified settings to perform automated sensitive data discovery
+    -- activities for the account; and, DISABLED, don\'t perform automated
+    -- sensitive data discovery activities for the account.
+    status :: Prelude.Maybe AutomatedDiscoveryStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAutomatedDiscoveryConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'classificationScopeId', 'getAutomatedDiscoveryConfigurationResponse_classificationScopeId' - The unique identifier for the classification scope that\'s used when
+-- performing automated sensitive data discovery for the account. The
+-- classification scope specifies S3 buckets to exclude from automated
+-- sensitive data discovery.
+--
+-- 'disabledAt', 'getAutomatedDiscoveryConfigurationResponse_disabledAt' - The date and time, in UTC and extended ISO 8601 format, when automated
+-- sensitive data discovery was most recently disabled for the account.
+-- This value is null if automated sensitive data discovery wasn\'t enabled
+-- and subsequently disabled for the account.
+--
+-- 'firstEnabledAt', 'getAutomatedDiscoveryConfigurationResponse_firstEnabledAt' - The date and time, in UTC and extended ISO 8601 format, when automated
+-- sensitive data discovery was initially enabled for the account. This
+-- value is null if automated sensitive data discovery has never been
+-- enabled for the account.
+--
+-- 'lastUpdatedAt', 'getAutomatedDiscoveryConfigurationResponse_lastUpdatedAt' - The date and time, in UTC and extended ISO 8601 format, when automated
+-- sensitive data discovery was most recently enabled or disabled for the
+-- account.
+--
+-- 'sensitivityInspectionTemplateId', 'getAutomatedDiscoveryConfigurationResponse_sensitivityInspectionTemplateId' - The unique identifier for the sensitivity inspection template that\'s
+-- used when performing automated sensitive data discovery for the account.
+-- The template specifies which allow lists, custom data identifiers, and
+-- managed data identifiers to use when analyzing data.
+--
+-- 'status', 'getAutomatedDiscoveryConfigurationResponse_status' - The current status of the automated sensitive data discovery
+-- configuration for the account. Possible values are: ENABLED, use the
+-- specified settings to perform automated sensitive data discovery
+-- activities for the account; and, DISABLED, don\'t perform automated
+-- sensitive data discovery activities for the account.
+--
+-- 'httpStatus', 'getAutomatedDiscoveryConfigurationResponse_httpStatus' - The response's http status code.
+newGetAutomatedDiscoveryConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAutomatedDiscoveryConfigurationResponse
+newGetAutomatedDiscoveryConfigurationResponse
+  pHttpStatus_ =
+    GetAutomatedDiscoveryConfigurationResponse'
+      { classificationScopeId =
+          Prelude.Nothing,
+        disabledAt = Prelude.Nothing,
+        firstEnabledAt =
+          Prelude.Nothing,
+        lastUpdatedAt = Prelude.Nothing,
+        sensitivityInspectionTemplateId =
+          Prelude.Nothing,
+        status = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The unique identifier for the classification scope that\'s used when
+-- performing automated sensitive data discovery for the account. The
+-- classification scope specifies S3 buckets to exclude from automated
+-- sensitive data discovery.
+getAutomatedDiscoveryConfigurationResponse_classificationScopeId :: Lens.Lens' GetAutomatedDiscoveryConfigurationResponse (Prelude.Maybe Prelude.Text)
+getAutomatedDiscoveryConfigurationResponse_classificationScopeId = Lens.lens (\GetAutomatedDiscoveryConfigurationResponse' {classificationScopeId} -> classificationScopeId) (\s@GetAutomatedDiscoveryConfigurationResponse' {} a -> s {classificationScopeId = a} :: GetAutomatedDiscoveryConfigurationResponse)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when automated
+-- sensitive data discovery was most recently disabled for the account.
+-- This value is null if automated sensitive data discovery wasn\'t enabled
+-- and subsequently disabled for the account.
+getAutomatedDiscoveryConfigurationResponse_disabledAt :: Lens.Lens' GetAutomatedDiscoveryConfigurationResponse (Prelude.Maybe Prelude.UTCTime)
+getAutomatedDiscoveryConfigurationResponse_disabledAt = Lens.lens (\GetAutomatedDiscoveryConfigurationResponse' {disabledAt} -> disabledAt) (\s@GetAutomatedDiscoveryConfigurationResponse' {} a -> s {disabledAt = a} :: GetAutomatedDiscoveryConfigurationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The date and time, in UTC and extended ISO 8601 format, when automated
+-- sensitive data discovery was initially enabled for the account. This
+-- value is null if automated sensitive data discovery has never been
+-- enabled for the account.
+getAutomatedDiscoveryConfigurationResponse_firstEnabledAt :: Lens.Lens' GetAutomatedDiscoveryConfigurationResponse (Prelude.Maybe Prelude.UTCTime)
+getAutomatedDiscoveryConfigurationResponse_firstEnabledAt = Lens.lens (\GetAutomatedDiscoveryConfigurationResponse' {firstEnabledAt} -> firstEnabledAt) (\s@GetAutomatedDiscoveryConfigurationResponse' {} a -> s {firstEnabledAt = a} :: GetAutomatedDiscoveryConfigurationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The date and time, in UTC and extended ISO 8601 format, when automated
+-- sensitive data discovery was most recently enabled or disabled for the
+-- account.
+getAutomatedDiscoveryConfigurationResponse_lastUpdatedAt :: Lens.Lens' GetAutomatedDiscoveryConfigurationResponse (Prelude.Maybe Prelude.UTCTime)
+getAutomatedDiscoveryConfigurationResponse_lastUpdatedAt = Lens.lens (\GetAutomatedDiscoveryConfigurationResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@GetAutomatedDiscoveryConfigurationResponse' {} a -> s {lastUpdatedAt = a} :: GetAutomatedDiscoveryConfigurationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier for the sensitivity inspection template that\'s
+-- used when performing automated sensitive data discovery for the account.
+-- The template specifies which allow lists, custom data identifiers, and
+-- managed data identifiers to use when analyzing data.
+getAutomatedDiscoveryConfigurationResponse_sensitivityInspectionTemplateId :: Lens.Lens' GetAutomatedDiscoveryConfigurationResponse (Prelude.Maybe Prelude.Text)
+getAutomatedDiscoveryConfigurationResponse_sensitivityInspectionTemplateId = Lens.lens (\GetAutomatedDiscoveryConfigurationResponse' {sensitivityInspectionTemplateId} -> sensitivityInspectionTemplateId) (\s@GetAutomatedDiscoveryConfigurationResponse' {} a -> s {sensitivityInspectionTemplateId = a} :: GetAutomatedDiscoveryConfigurationResponse)
+
+-- | The current status of the automated sensitive data discovery
+-- configuration for the account. Possible values are: ENABLED, use the
+-- specified settings to perform automated sensitive data discovery
+-- activities for the account; and, DISABLED, don\'t perform automated
+-- sensitive data discovery activities for the account.
+getAutomatedDiscoveryConfigurationResponse_status :: Lens.Lens' GetAutomatedDiscoveryConfigurationResponse (Prelude.Maybe AutomatedDiscoveryStatus)
+getAutomatedDiscoveryConfigurationResponse_status = Lens.lens (\GetAutomatedDiscoveryConfigurationResponse' {status} -> status) (\s@GetAutomatedDiscoveryConfigurationResponse' {} a -> s {status = a} :: GetAutomatedDiscoveryConfigurationResponse)
+
+-- | The response's http status code.
+getAutomatedDiscoveryConfigurationResponse_httpStatus :: Lens.Lens' GetAutomatedDiscoveryConfigurationResponse Prelude.Int
+getAutomatedDiscoveryConfigurationResponse_httpStatus = Lens.lens (\GetAutomatedDiscoveryConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetAutomatedDiscoveryConfigurationResponse' {} a -> s {httpStatus = a} :: GetAutomatedDiscoveryConfigurationResponse)
+
+instance
+  Prelude.NFData
+    GetAutomatedDiscoveryConfigurationResponse
+  where
+  rnf GetAutomatedDiscoveryConfigurationResponse' {..} =
+    Prelude.rnf classificationScopeId
+      `Prelude.seq` Prelude.rnf disabledAt
+      `Prelude.seq` Prelude.rnf firstEnabledAt
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf sensitivityInspectionTemplateId
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetBucketStatistics.hs b/gen/Amazonka/MacieV2/GetBucketStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetBucketStatistics.hs
@@ -0,0 +1,432 @@
+{-# 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.MacieV2.GetBucketStatistics
+-- 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 (queries) aggregated statistical data about all the S3 buckets
+-- that Amazon Macie monitors and analyzes for an account.
+module Amazonka.MacieV2.GetBucketStatistics
+  ( -- * Creating a Request
+    GetBucketStatistics (..),
+    newGetBucketStatistics,
+
+    -- * Request Lenses
+    getBucketStatistics_accountId,
+
+    -- * Destructuring the Response
+    GetBucketStatisticsResponse (..),
+    newGetBucketStatisticsResponse,
+
+    -- * Response Lenses
+    getBucketStatisticsResponse_bucketCount,
+    getBucketStatisticsResponse_bucketCountByEffectivePermission,
+    getBucketStatisticsResponse_bucketCountByEncryptionType,
+    getBucketStatisticsResponse_bucketCountByObjectEncryptionRequirement,
+    getBucketStatisticsResponse_bucketCountBySharedAccessType,
+    getBucketStatisticsResponse_bucketStatisticsBySensitivity,
+    getBucketStatisticsResponse_classifiableObjectCount,
+    getBucketStatisticsResponse_classifiableSizeInBytes,
+    getBucketStatisticsResponse_lastUpdated,
+    getBucketStatisticsResponse_objectCount,
+    getBucketStatisticsResponse_sizeInBytes,
+    getBucketStatisticsResponse_sizeInBytesCompressed,
+    getBucketStatisticsResponse_unclassifiableObjectCount,
+    getBucketStatisticsResponse_unclassifiableObjectSizeInBytes,
+    getBucketStatisticsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetBucketStatistics' smart constructor.
+data GetBucketStatistics = GetBucketStatistics'
+  { -- | The unique identifier for the Amazon Web Services account.
+    accountId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetBucketStatistics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'getBucketStatistics_accountId' - The unique identifier for the Amazon Web Services account.
+newGetBucketStatistics ::
+  GetBucketStatistics
+newGetBucketStatistics =
+  GetBucketStatistics' {accountId = Prelude.Nothing}
+
+-- | The unique identifier for the Amazon Web Services account.
+getBucketStatistics_accountId :: Lens.Lens' GetBucketStatistics (Prelude.Maybe Prelude.Text)
+getBucketStatistics_accountId = Lens.lens (\GetBucketStatistics' {accountId} -> accountId) (\s@GetBucketStatistics' {} a -> s {accountId = a} :: GetBucketStatistics)
+
+instance Core.AWSRequest GetBucketStatistics where
+  type
+    AWSResponse GetBucketStatistics =
+      GetBucketStatisticsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetBucketStatisticsResponse'
+            Prelude.<$> (x Data..?> "bucketCount")
+            Prelude.<*> (x Data..?> "bucketCountByEffectivePermission")
+            Prelude.<*> (x Data..?> "bucketCountByEncryptionType")
+            Prelude.<*> ( x
+                            Data..?> "bucketCountByObjectEncryptionRequirement"
+                        )
+            Prelude.<*> (x Data..?> "bucketCountBySharedAccessType")
+            Prelude.<*> (x Data..?> "bucketStatisticsBySensitivity")
+            Prelude.<*> (x Data..?> "classifiableObjectCount")
+            Prelude.<*> (x Data..?> "classifiableSizeInBytes")
+            Prelude.<*> (x Data..?> "lastUpdated")
+            Prelude.<*> (x Data..?> "objectCount")
+            Prelude.<*> (x Data..?> "sizeInBytes")
+            Prelude.<*> (x Data..?> "sizeInBytesCompressed")
+            Prelude.<*> (x Data..?> "unclassifiableObjectCount")
+            Prelude.<*> (x Data..?> "unclassifiableObjectSizeInBytes")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetBucketStatistics where
+  hashWithSalt _salt GetBucketStatistics' {..} =
+    _salt `Prelude.hashWithSalt` accountId
+
+instance Prelude.NFData GetBucketStatistics where
+  rnf GetBucketStatistics' {..} = Prelude.rnf accountId
+
+instance Data.ToHeaders GetBucketStatistics where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetBucketStatistics where
+  toJSON GetBucketStatistics' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("accountId" Data..=) Prelude.<$> accountId]
+      )
+
+instance Data.ToPath GetBucketStatistics where
+  toPath = Prelude.const "/datasources/s3/statistics"
+
+instance Data.ToQuery GetBucketStatistics where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetBucketStatisticsResponse' smart constructor.
+data GetBucketStatisticsResponse = GetBucketStatisticsResponse'
+  { -- | The total number of buckets.
+    bucketCount :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of buckets that are publicly accessible based on a
+    -- combination of permissions settings for each bucket.
+    bucketCountByEffectivePermission :: Prelude.Maybe BucketCountByEffectivePermission,
+    -- | The total number of buckets that use certain types of server-side
+    -- encryption to encrypt new objects by default. This object also reports
+    -- the total number of buckets that don\'t encrypt new objects by default.
+    bucketCountByEncryptionType :: Prelude.Maybe BucketCountByEncryptionType,
+    -- | The total number of buckets whose bucket policies do or don\'t require
+    -- server-side encryption of objects when objects are uploaded to the
+    -- buckets.
+    bucketCountByObjectEncryptionRequirement :: Prelude.Maybe BucketCountPolicyAllowsUnencryptedObjectUploads,
+    -- | The total number of buckets that are or aren\'t shared with another
+    -- Amazon Web Services account.
+    bucketCountBySharedAccessType :: Prelude.Maybe BucketCountBySharedAccessType,
+    -- | The aggregated sensitive data discovery statistics for the buckets. If
+    -- automated sensitive data discovery is currently disabled for your
+    -- account, the value for each statistic is 0.
+    bucketStatisticsBySensitivity :: Prelude.Maybe BucketStatisticsBySensitivity,
+    -- | The total number of objects that Amazon Macie can analyze in the
+    -- buckets. These objects use a supported storage class and have a file
+    -- name extension for a supported file or storage format.
+    classifiableObjectCount :: Prelude.Maybe Prelude.Integer,
+    -- | The total storage size, in bytes, of all the objects that Amazon Macie
+    -- can analyze in the buckets. These objects use a supported storage class
+    -- and have a file name extension for a supported file or storage format.
+    --
+    -- If versioning is enabled for any of the buckets, this value is based on
+    -- the size of the latest version of each applicable object in the buckets.
+    -- This value doesn\'t reflect the storage size of all versions of all
+    -- applicable objects in the buckets.
+    classifiableSizeInBytes :: Prelude.Maybe Prelude.Integer,
+    -- | The date and time, in UTC and extended ISO 8601 format, when Amazon
+    -- Macie most recently retrieved both bucket and object metadata from
+    -- Amazon S3 for the buckets.
+    lastUpdated :: Prelude.Maybe Data.ISO8601,
+    -- | The total number of objects in the buckets.
+    objectCount :: Prelude.Maybe Prelude.Integer,
+    -- | The total storage size, in bytes, of the buckets.
+    --
+    -- If versioning is enabled for any of the buckets, this value is based on
+    -- the size of the latest version of each object in the buckets. This value
+    -- doesn\'t reflect the storage size of all versions of the objects in the
+    -- buckets.
+    sizeInBytes :: Prelude.Maybe Prelude.Integer,
+    -- | The total storage size, in bytes, of the objects that are compressed
+    -- (.gz, .gzip, .zip) files in the buckets.
+    --
+    -- If versioning is enabled for any of the buckets, this value is based on
+    -- the size of the latest version of each applicable object in the buckets.
+    -- This value doesn\'t reflect the storage size of all versions of the
+    -- applicable objects in the buckets.
+    sizeInBytesCompressed :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of objects that Amazon Macie can\'t analyze in the
+    -- buckets. These objects don\'t use a supported storage class or don\'t
+    -- have a file name extension for a supported file or storage format.
+    unclassifiableObjectCount :: Prelude.Maybe ObjectLevelStatistics,
+    -- | The total storage size, in bytes, of the objects that Amazon Macie
+    -- can\'t analyze in the buckets. These objects don\'t use a supported
+    -- storage class or don\'t have a file name extension for a supported file
+    -- or storage format.
+    unclassifiableObjectSizeInBytes :: Prelude.Maybe ObjectLevelStatistics,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetBucketStatisticsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucketCount', 'getBucketStatisticsResponse_bucketCount' - The total number of buckets.
+--
+-- 'bucketCountByEffectivePermission', 'getBucketStatisticsResponse_bucketCountByEffectivePermission' - The total number of buckets that are publicly accessible based on a
+-- combination of permissions settings for each bucket.
+--
+-- 'bucketCountByEncryptionType', 'getBucketStatisticsResponse_bucketCountByEncryptionType' - The total number of buckets that use certain types of server-side
+-- encryption to encrypt new objects by default. This object also reports
+-- the total number of buckets that don\'t encrypt new objects by default.
+--
+-- 'bucketCountByObjectEncryptionRequirement', 'getBucketStatisticsResponse_bucketCountByObjectEncryptionRequirement' - The total number of buckets whose bucket policies do or don\'t require
+-- server-side encryption of objects when objects are uploaded to the
+-- buckets.
+--
+-- 'bucketCountBySharedAccessType', 'getBucketStatisticsResponse_bucketCountBySharedAccessType' - The total number of buckets that are or aren\'t shared with another
+-- Amazon Web Services account.
+--
+-- 'bucketStatisticsBySensitivity', 'getBucketStatisticsResponse_bucketStatisticsBySensitivity' - The aggregated sensitive data discovery statistics for the buckets. If
+-- automated sensitive data discovery is currently disabled for your
+-- account, the value for each statistic is 0.
+--
+-- 'classifiableObjectCount', 'getBucketStatisticsResponse_classifiableObjectCount' - The total number of objects that Amazon Macie can analyze in the
+-- buckets. These objects use a supported storage class and have a file
+-- name extension for a supported file or storage format.
+--
+-- 'classifiableSizeInBytes', 'getBucketStatisticsResponse_classifiableSizeInBytes' - The total storage size, in bytes, of all the objects that Amazon Macie
+-- can analyze in the buckets. These objects use a supported storage class
+-- and have a file name extension for a supported file or storage format.
+--
+-- If versioning is enabled for any of the buckets, this value is based on
+-- the size of the latest version of each applicable object in the buckets.
+-- This value doesn\'t reflect the storage size of all versions of all
+-- applicable objects in the buckets.
+--
+-- 'lastUpdated', 'getBucketStatisticsResponse_lastUpdated' - The date and time, in UTC and extended ISO 8601 format, when Amazon
+-- Macie most recently retrieved both bucket and object metadata from
+-- Amazon S3 for the buckets.
+--
+-- 'objectCount', 'getBucketStatisticsResponse_objectCount' - The total number of objects in the buckets.
+--
+-- 'sizeInBytes', 'getBucketStatisticsResponse_sizeInBytes' - The total storage size, in bytes, of the buckets.
+--
+-- If versioning is enabled for any of the buckets, this value is based on
+-- the size of the latest version of each object in the buckets. This value
+-- doesn\'t reflect the storage size of all versions of the objects in the
+-- buckets.
+--
+-- 'sizeInBytesCompressed', 'getBucketStatisticsResponse_sizeInBytesCompressed' - The total storage size, in bytes, of the objects that are compressed
+-- (.gz, .gzip, .zip) files in the buckets.
+--
+-- If versioning is enabled for any of the buckets, this value is based on
+-- the size of the latest version of each applicable object in the buckets.
+-- This value doesn\'t reflect the storage size of all versions of the
+-- applicable objects in the buckets.
+--
+-- 'unclassifiableObjectCount', 'getBucketStatisticsResponse_unclassifiableObjectCount' - The total number of objects that Amazon Macie can\'t analyze in the
+-- buckets. These objects don\'t use a supported storage class or don\'t
+-- have a file name extension for a supported file or storage format.
+--
+-- 'unclassifiableObjectSizeInBytes', 'getBucketStatisticsResponse_unclassifiableObjectSizeInBytes' - The total storage size, in bytes, of the objects that Amazon Macie
+-- can\'t analyze in the buckets. These objects don\'t use a supported
+-- storage class or don\'t have a file name extension for a supported file
+-- or storage format.
+--
+-- 'httpStatus', 'getBucketStatisticsResponse_httpStatus' - The response's http status code.
+newGetBucketStatisticsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetBucketStatisticsResponse
+newGetBucketStatisticsResponse pHttpStatus_ =
+  GetBucketStatisticsResponse'
+    { bucketCount =
+        Prelude.Nothing,
+      bucketCountByEffectivePermission =
+        Prelude.Nothing,
+      bucketCountByEncryptionType = Prelude.Nothing,
+      bucketCountByObjectEncryptionRequirement =
+        Prelude.Nothing,
+      bucketCountBySharedAccessType =
+        Prelude.Nothing,
+      bucketStatisticsBySensitivity =
+        Prelude.Nothing,
+      classifiableObjectCount = Prelude.Nothing,
+      classifiableSizeInBytes = Prelude.Nothing,
+      lastUpdated = Prelude.Nothing,
+      objectCount = Prelude.Nothing,
+      sizeInBytes = Prelude.Nothing,
+      sizeInBytesCompressed = Prelude.Nothing,
+      unclassifiableObjectCount = Prelude.Nothing,
+      unclassifiableObjectSizeInBytes =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The total number of buckets.
+getBucketStatisticsResponse_bucketCount :: Lens.Lens' GetBucketStatisticsResponse (Prelude.Maybe Prelude.Integer)
+getBucketStatisticsResponse_bucketCount = Lens.lens (\GetBucketStatisticsResponse' {bucketCount} -> bucketCount) (\s@GetBucketStatisticsResponse' {} a -> s {bucketCount = a} :: GetBucketStatisticsResponse)
+
+-- | The total number of buckets that are publicly accessible based on a
+-- combination of permissions settings for each bucket.
+getBucketStatisticsResponse_bucketCountByEffectivePermission :: Lens.Lens' GetBucketStatisticsResponse (Prelude.Maybe BucketCountByEffectivePermission)
+getBucketStatisticsResponse_bucketCountByEffectivePermission = Lens.lens (\GetBucketStatisticsResponse' {bucketCountByEffectivePermission} -> bucketCountByEffectivePermission) (\s@GetBucketStatisticsResponse' {} a -> s {bucketCountByEffectivePermission = a} :: GetBucketStatisticsResponse)
+
+-- | The total number of buckets that use certain types of server-side
+-- encryption to encrypt new objects by default. This object also reports
+-- the total number of buckets that don\'t encrypt new objects by default.
+getBucketStatisticsResponse_bucketCountByEncryptionType :: Lens.Lens' GetBucketStatisticsResponse (Prelude.Maybe BucketCountByEncryptionType)
+getBucketStatisticsResponse_bucketCountByEncryptionType = Lens.lens (\GetBucketStatisticsResponse' {bucketCountByEncryptionType} -> bucketCountByEncryptionType) (\s@GetBucketStatisticsResponse' {} a -> s {bucketCountByEncryptionType = a} :: GetBucketStatisticsResponse)
+
+-- | The total number of buckets whose bucket policies do or don\'t require
+-- server-side encryption of objects when objects are uploaded to the
+-- buckets.
+getBucketStatisticsResponse_bucketCountByObjectEncryptionRequirement :: Lens.Lens' GetBucketStatisticsResponse (Prelude.Maybe BucketCountPolicyAllowsUnencryptedObjectUploads)
+getBucketStatisticsResponse_bucketCountByObjectEncryptionRequirement = Lens.lens (\GetBucketStatisticsResponse' {bucketCountByObjectEncryptionRequirement} -> bucketCountByObjectEncryptionRequirement) (\s@GetBucketStatisticsResponse' {} a -> s {bucketCountByObjectEncryptionRequirement = a} :: GetBucketStatisticsResponse)
+
+-- | The total number of buckets that are or aren\'t shared with another
+-- Amazon Web Services account.
+getBucketStatisticsResponse_bucketCountBySharedAccessType :: Lens.Lens' GetBucketStatisticsResponse (Prelude.Maybe BucketCountBySharedAccessType)
+getBucketStatisticsResponse_bucketCountBySharedAccessType = Lens.lens (\GetBucketStatisticsResponse' {bucketCountBySharedAccessType} -> bucketCountBySharedAccessType) (\s@GetBucketStatisticsResponse' {} a -> s {bucketCountBySharedAccessType = a} :: GetBucketStatisticsResponse)
+
+-- | The aggregated sensitive data discovery statistics for the buckets. If
+-- automated sensitive data discovery is currently disabled for your
+-- account, the value for each statistic is 0.
+getBucketStatisticsResponse_bucketStatisticsBySensitivity :: Lens.Lens' GetBucketStatisticsResponse (Prelude.Maybe BucketStatisticsBySensitivity)
+getBucketStatisticsResponse_bucketStatisticsBySensitivity = Lens.lens (\GetBucketStatisticsResponse' {bucketStatisticsBySensitivity} -> bucketStatisticsBySensitivity) (\s@GetBucketStatisticsResponse' {} a -> s {bucketStatisticsBySensitivity = a} :: GetBucketStatisticsResponse)
+
+-- | The total number of objects that Amazon Macie can analyze in the
+-- buckets. These objects use a supported storage class and have a file
+-- name extension for a supported file or storage format.
+getBucketStatisticsResponse_classifiableObjectCount :: Lens.Lens' GetBucketStatisticsResponse (Prelude.Maybe Prelude.Integer)
+getBucketStatisticsResponse_classifiableObjectCount = Lens.lens (\GetBucketStatisticsResponse' {classifiableObjectCount} -> classifiableObjectCount) (\s@GetBucketStatisticsResponse' {} a -> s {classifiableObjectCount = a} :: GetBucketStatisticsResponse)
+
+-- | The total storage size, in bytes, of all the objects that Amazon Macie
+-- can analyze in the buckets. These objects use a supported storage class
+-- and have a file name extension for a supported file or storage format.
+--
+-- If versioning is enabled for any of the buckets, this value is based on
+-- the size of the latest version of each applicable object in the buckets.
+-- This value doesn\'t reflect the storage size of all versions of all
+-- applicable objects in the buckets.
+getBucketStatisticsResponse_classifiableSizeInBytes :: Lens.Lens' GetBucketStatisticsResponse (Prelude.Maybe Prelude.Integer)
+getBucketStatisticsResponse_classifiableSizeInBytes = Lens.lens (\GetBucketStatisticsResponse' {classifiableSizeInBytes} -> classifiableSizeInBytes) (\s@GetBucketStatisticsResponse' {} a -> s {classifiableSizeInBytes = a} :: GetBucketStatisticsResponse)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when Amazon
+-- Macie most recently retrieved both bucket and object metadata from
+-- Amazon S3 for the buckets.
+getBucketStatisticsResponse_lastUpdated :: Lens.Lens' GetBucketStatisticsResponse (Prelude.Maybe Prelude.UTCTime)
+getBucketStatisticsResponse_lastUpdated = Lens.lens (\GetBucketStatisticsResponse' {lastUpdated} -> lastUpdated) (\s@GetBucketStatisticsResponse' {} a -> s {lastUpdated = a} :: GetBucketStatisticsResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The total number of objects in the buckets.
+getBucketStatisticsResponse_objectCount :: Lens.Lens' GetBucketStatisticsResponse (Prelude.Maybe Prelude.Integer)
+getBucketStatisticsResponse_objectCount = Lens.lens (\GetBucketStatisticsResponse' {objectCount} -> objectCount) (\s@GetBucketStatisticsResponse' {} a -> s {objectCount = a} :: GetBucketStatisticsResponse)
+
+-- | The total storage size, in bytes, of the buckets.
+--
+-- If versioning is enabled for any of the buckets, this value is based on
+-- the size of the latest version of each object in the buckets. This value
+-- doesn\'t reflect the storage size of all versions of the objects in the
+-- buckets.
+getBucketStatisticsResponse_sizeInBytes :: Lens.Lens' GetBucketStatisticsResponse (Prelude.Maybe Prelude.Integer)
+getBucketStatisticsResponse_sizeInBytes = Lens.lens (\GetBucketStatisticsResponse' {sizeInBytes} -> sizeInBytes) (\s@GetBucketStatisticsResponse' {} a -> s {sizeInBytes = a} :: GetBucketStatisticsResponse)
+
+-- | The total storage size, in bytes, of the objects that are compressed
+-- (.gz, .gzip, .zip) files in the buckets.
+--
+-- If versioning is enabled for any of the buckets, this value is based on
+-- the size of the latest version of each applicable object in the buckets.
+-- This value doesn\'t reflect the storage size of all versions of the
+-- applicable objects in the buckets.
+getBucketStatisticsResponse_sizeInBytesCompressed :: Lens.Lens' GetBucketStatisticsResponse (Prelude.Maybe Prelude.Integer)
+getBucketStatisticsResponse_sizeInBytesCompressed = Lens.lens (\GetBucketStatisticsResponse' {sizeInBytesCompressed} -> sizeInBytesCompressed) (\s@GetBucketStatisticsResponse' {} a -> s {sizeInBytesCompressed = a} :: GetBucketStatisticsResponse)
+
+-- | The total number of objects that Amazon Macie can\'t analyze in the
+-- buckets. These objects don\'t use a supported storage class or don\'t
+-- have a file name extension for a supported file or storage format.
+getBucketStatisticsResponse_unclassifiableObjectCount :: Lens.Lens' GetBucketStatisticsResponse (Prelude.Maybe ObjectLevelStatistics)
+getBucketStatisticsResponse_unclassifiableObjectCount = Lens.lens (\GetBucketStatisticsResponse' {unclassifiableObjectCount} -> unclassifiableObjectCount) (\s@GetBucketStatisticsResponse' {} a -> s {unclassifiableObjectCount = a} :: GetBucketStatisticsResponse)
+
+-- | The total storage size, in bytes, of the objects that Amazon Macie
+-- can\'t analyze in the buckets. These objects don\'t use a supported
+-- storage class or don\'t have a file name extension for a supported file
+-- or storage format.
+getBucketStatisticsResponse_unclassifiableObjectSizeInBytes :: Lens.Lens' GetBucketStatisticsResponse (Prelude.Maybe ObjectLevelStatistics)
+getBucketStatisticsResponse_unclassifiableObjectSizeInBytes = Lens.lens (\GetBucketStatisticsResponse' {unclassifiableObjectSizeInBytes} -> unclassifiableObjectSizeInBytes) (\s@GetBucketStatisticsResponse' {} a -> s {unclassifiableObjectSizeInBytes = a} :: GetBucketStatisticsResponse)
+
+-- | The response's http status code.
+getBucketStatisticsResponse_httpStatus :: Lens.Lens' GetBucketStatisticsResponse Prelude.Int
+getBucketStatisticsResponse_httpStatus = Lens.lens (\GetBucketStatisticsResponse' {httpStatus} -> httpStatus) (\s@GetBucketStatisticsResponse' {} a -> s {httpStatus = a} :: GetBucketStatisticsResponse)
+
+instance Prelude.NFData GetBucketStatisticsResponse where
+  rnf GetBucketStatisticsResponse' {..} =
+    Prelude.rnf bucketCount
+      `Prelude.seq` Prelude.rnf bucketCountByEffectivePermission
+      `Prelude.seq` Prelude.rnf bucketCountByEncryptionType
+      `Prelude.seq` Prelude.rnf bucketCountByObjectEncryptionRequirement
+      `Prelude.seq` Prelude.rnf bucketCountBySharedAccessType
+      `Prelude.seq` Prelude.rnf bucketStatisticsBySensitivity
+      `Prelude.seq` Prelude.rnf classifiableObjectCount
+      `Prelude.seq` Prelude.rnf classifiableSizeInBytes
+      `Prelude.seq` Prelude.rnf lastUpdated
+      `Prelude.seq` Prelude.rnf objectCount
+      `Prelude.seq` Prelude.rnf sizeInBytes
+      `Prelude.seq` Prelude.rnf sizeInBytesCompressed
+      `Prelude.seq` Prelude.rnf unclassifiableObjectCount
+      `Prelude.seq` Prelude.rnf
+        unclassifiableObjectSizeInBytes
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetClassificationExportConfiguration.hs b/gen/Amazonka/MacieV2/GetClassificationExportConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetClassificationExportConfiguration.hs
@@ -0,0 +1,170 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.GetClassificationExportConfiguration
+-- 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 configuration settings for storing data classification
+-- results.
+module Amazonka.MacieV2.GetClassificationExportConfiguration
+  ( -- * Creating a Request
+    GetClassificationExportConfiguration (..),
+    newGetClassificationExportConfiguration,
+
+    -- * Destructuring the Response
+    GetClassificationExportConfigurationResponse (..),
+    newGetClassificationExportConfigurationResponse,
+
+    -- * Response Lenses
+    getClassificationExportConfigurationResponse_configuration,
+    getClassificationExportConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetClassificationExportConfiguration' smart constructor.
+data GetClassificationExportConfiguration = GetClassificationExportConfiguration'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetClassificationExportConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetClassificationExportConfiguration ::
+  GetClassificationExportConfiguration
+newGetClassificationExportConfiguration =
+  GetClassificationExportConfiguration'
+
+instance
+  Core.AWSRequest
+    GetClassificationExportConfiguration
+  where
+  type
+    AWSResponse GetClassificationExportConfiguration =
+      GetClassificationExportConfigurationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetClassificationExportConfigurationResponse'
+            Prelude.<$> (x Data..?> "configuration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetClassificationExportConfiguration
+  where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance
+  Prelude.NFData
+    GetClassificationExportConfiguration
+  where
+  rnf _ = ()
+
+instance
+  Data.ToHeaders
+    GetClassificationExportConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToPath
+    GetClassificationExportConfiguration
+  where
+  toPath =
+    Prelude.const
+      "/classification-export-configuration"
+
+instance
+  Data.ToQuery
+    GetClassificationExportConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetClassificationExportConfigurationResponse' smart constructor.
+data GetClassificationExportConfigurationResponse = GetClassificationExportConfigurationResponse'
+  { -- | The location where data classification results are stored, and the
+    -- encryption settings that are used when storing results in that location.
+    configuration :: Prelude.Maybe ClassificationExportConfiguration,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetClassificationExportConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configuration', 'getClassificationExportConfigurationResponse_configuration' - The location where data classification results are stored, and the
+-- encryption settings that are used when storing results in that location.
+--
+-- 'httpStatus', 'getClassificationExportConfigurationResponse_httpStatus' - The response's http status code.
+newGetClassificationExportConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetClassificationExportConfigurationResponse
+newGetClassificationExportConfigurationResponse
+  pHttpStatus_ =
+    GetClassificationExportConfigurationResponse'
+      { configuration =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The location where data classification results are stored, and the
+-- encryption settings that are used when storing results in that location.
+getClassificationExportConfigurationResponse_configuration :: Lens.Lens' GetClassificationExportConfigurationResponse (Prelude.Maybe ClassificationExportConfiguration)
+getClassificationExportConfigurationResponse_configuration = Lens.lens (\GetClassificationExportConfigurationResponse' {configuration} -> configuration) (\s@GetClassificationExportConfigurationResponse' {} a -> s {configuration = a} :: GetClassificationExportConfigurationResponse)
+
+-- | The response's http status code.
+getClassificationExportConfigurationResponse_httpStatus :: Lens.Lens' GetClassificationExportConfigurationResponse Prelude.Int
+getClassificationExportConfigurationResponse_httpStatus = Lens.lens (\GetClassificationExportConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetClassificationExportConfigurationResponse' {} a -> s {httpStatus = a} :: GetClassificationExportConfigurationResponse)
+
+instance
+  Prelude.NFData
+    GetClassificationExportConfigurationResponse
+  where
+  rnf GetClassificationExportConfigurationResponse' {..} =
+    Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetClassificationScope.hs b/gen/Amazonka/MacieV2/GetClassificationScope.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetClassificationScope.hs
@@ -0,0 +1,192 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.GetClassificationScope
+-- 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 classification scope settings for an account.
+module Amazonka.MacieV2.GetClassificationScope
+  ( -- * Creating a Request
+    GetClassificationScope (..),
+    newGetClassificationScope,
+
+    -- * Request Lenses
+    getClassificationScope_id,
+
+    -- * Destructuring the Response
+    GetClassificationScopeResponse (..),
+    newGetClassificationScopeResponse,
+
+    -- * Response Lenses
+    getClassificationScopeResponse_id,
+    getClassificationScopeResponse_name,
+    getClassificationScopeResponse_s3,
+    getClassificationScopeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetClassificationScope' smart constructor.
+data GetClassificationScope = GetClassificationScope'
+  { -- | The unique identifier for the Amazon Macie resource that the request
+    -- applies to.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetClassificationScope' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'getClassificationScope_id' - The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+newGetClassificationScope ::
+  -- | 'id'
+  Prelude.Text ->
+  GetClassificationScope
+newGetClassificationScope pId_ =
+  GetClassificationScope' {id = pId_}
+
+-- | The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+getClassificationScope_id :: Lens.Lens' GetClassificationScope Prelude.Text
+getClassificationScope_id = Lens.lens (\GetClassificationScope' {id} -> id) (\s@GetClassificationScope' {} a -> s {id = a} :: GetClassificationScope)
+
+instance Core.AWSRequest GetClassificationScope where
+  type
+    AWSResponse GetClassificationScope =
+      GetClassificationScopeResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetClassificationScopeResponse'
+            Prelude.<$> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "s3")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetClassificationScope where
+  hashWithSalt _salt GetClassificationScope' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetClassificationScope where
+  rnf GetClassificationScope' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetClassificationScope where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetClassificationScope where
+  toPath GetClassificationScope' {..} =
+    Prelude.mconcat
+      ["/classification-scopes/", Data.toBS id]
+
+instance Data.ToQuery GetClassificationScope where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetClassificationScopeResponse' smart constructor.
+data GetClassificationScopeResponse = GetClassificationScopeResponse'
+  { -- | The unique identifier for the classification scope.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the classification scope.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The S3 buckets that are excluded from automated sensitive data
+    -- discovery.
+    s3 :: Prelude.Maybe S3ClassificationScope,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetClassificationScopeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'getClassificationScopeResponse_id' - The unique identifier for the classification scope.
+--
+-- 'name', 'getClassificationScopeResponse_name' - The name of the classification scope.
+--
+-- 's3', 'getClassificationScopeResponse_s3' - The S3 buckets that are excluded from automated sensitive data
+-- discovery.
+--
+-- 'httpStatus', 'getClassificationScopeResponse_httpStatus' - The response's http status code.
+newGetClassificationScopeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetClassificationScopeResponse
+newGetClassificationScopeResponse pHttpStatus_ =
+  GetClassificationScopeResponse'
+    { id =
+        Prelude.Nothing,
+      name = Prelude.Nothing,
+      s3 = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier for the classification scope.
+getClassificationScopeResponse_id :: Lens.Lens' GetClassificationScopeResponse (Prelude.Maybe Prelude.Text)
+getClassificationScopeResponse_id = Lens.lens (\GetClassificationScopeResponse' {id} -> id) (\s@GetClassificationScopeResponse' {} a -> s {id = a} :: GetClassificationScopeResponse)
+
+-- | The name of the classification scope.
+getClassificationScopeResponse_name :: Lens.Lens' GetClassificationScopeResponse (Prelude.Maybe Prelude.Text)
+getClassificationScopeResponse_name = Lens.lens (\GetClassificationScopeResponse' {name} -> name) (\s@GetClassificationScopeResponse' {} a -> s {name = a} :: GetClassificationScopeResponse)
+
+-- | The S3 buckets that are excluded from automated sensitive data
+-- discovery.
+getClassificationScopeResponse_s3 :: Lens.Lens' GetClassificationScopeResponse (Prelude.Maybe S3ClassificationScope)
+getClassificationScopeResponse_s3 = Lens.lens (\GetClassificationScopeResponse' {s3} -> s3) (\s@GetClassificationScopeResponse' {} a -> s {s3 = a} :: GetClassificationScopeResponse)
+
+-- | The response's http status code.
+getClassificationScopeResponse_httpStatus :: Lens.Lens' GetClassificationScopeResponse Prelude.Int
+getClassificationScopeResponse_httpStatus = Lens.lens (\GetClassificationScopeResponse' {httpStatus} -> httpStatus) (\s@GetClassificationScopeResponse' {} a -> s {httpStatus = a} :: GetClassificationScopeResponse)
+
+instance
+  Prelude.NFData
+    GetClassificationScopeResponse
+  where
+  rnf GetClassificationScopeResponse' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf s3
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetCustomDataIdentifier.hs b/gen/Amazonka/MacieV2/GetCustomDataIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetCustomDataIdentifier.hs
@@ -0,0 +1,354 @@
+{-# 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.MacieV2.GetCustomDataIdentifier
+-- 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 criteria and other settings for a custom data identifier.
+module Amazonka.MacieV2.GetCustomDataIdentifier
+  ( -- * Creating a Request
+    GetCustomDataIdentifier (..),
+    newGetCustomDataIdentifier,
+
+    -- * Request Lenses
+    getCustomDataIdentifier_id,
+
+    -- * Destructuring the Response
+    GetCustomDataIdentifierResponse (..),
+    newGetCustomDataIdentifierResponse,
+
+    -- * Response Lenses
+    getCustomDataIdentifierResponse_arn,
+    getCustomDataIdentifierResponse_createdAt,
+    getCustomDataIdentifierResponse_deleted,
+    getCustomDataIdentifierResponse_description,
+    getCustomDataIdentifierResponse_id,
+    getCustomDataIdentifierResponse_ignoreWords,
+    getCustomDataIdentifierResponse_keywords,
+    getCustomDataIdentifierResponse_maximumMatchDistance,
+    getCustomDataIdentifierResponse_name,
+    getCustomDataIdentifierResponse_regex,
+    getCustomDataIdentifierResponse_severityLevels,
+    getCustomDataIdentifierResponse_tags,
+    getCustomDataIdentifierResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetCustomDataIdentifier' smart constructor.
+data GetCustomDataIdentifier = GetCustomDataIdentifier'
+  { -- | The unique identifier for the Amazon Macie resource that the request
+    -- applies to.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCustomDataIdentifier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'getCustomDataIdentifier_id' - The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+newGetCustomDataIdentifier ::
+  -- | 'id'
+  Prelude.Text ->
+  GetCustomDataIdentifier
+newGetCustomDataIdentifier pId_ =
+  GetCustomDataIdentifier' {id = pId_}
+
+-- | The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+getCustomDataIdentifier_id :: Lens.Lens' GetCustomDataIdentifier Prelude.Text
+getCustomDataIdentifier_id = Lens.lens (\GetCustomDataIdentifier' {id} -> id) (\s@GetCustomDataIdentifier' {} a -> s {id = a} :: GetCustomDataIdentifier)
+
+instance Core.AWSRequest GetCustomDataIdentifier where
+  type
+    AWSResponse GetCustomDataIdentifier =
+      GetCustomDataIdentifierResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetCustomDataIdentifierResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "createdAt")
+            Prelude.<*> (x Data..?> "deleted")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "ignoreWords" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "keywords" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "maximumMatchDistance")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "regex")
+            Prelude.<*> (x Data..?> "severityLevels" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetCustomDataIdentifier where
+  hashWithSalt _salt GetCustomDataIdentifier' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetCustomDataIdentifier where
+  rnf GetCustomDataIdentifier' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetCustomDataIdentifier where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetCustomDataIdentifier where
+  toPath GetCustomDataIdentifier' {..} =
+    Prelude.mconcat
+      ["/custom-data-identifiers/", Data.toBS id]
+
+instance Data.ToQuery GetCustomDataIdentifier where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetCustomDataIdentifierResponse' smart constructor.
+data GetCustomDataIdentifierResponse = GetCustomDataIdentifierResponse'
+  { -- | The Amazon Resource Name (ARN) of the custom data identifier.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in UTC and extended ISO 8601 format, when the custom
+    -- data identifier was created.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | Specifies whether the custom data identifier was deleted. If you delete
+    -- a custom data identifier, Amazon Macie doesn\'t delete it permanently.
+    -- Instead, it soft deletes the identifier.
+    deleted :: Prelude.Maybe Prelude.Bool,
+    -- | The custom description of the custom data identifier.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the custom data identifier.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | An array that lists specific character sequences (/ignore words/) to
+    -- exclude from the results. If the text matched by the regular expression
+    -- contains any string in this array, Amazon Macie ignores it. Ignore words
+    -- are case sensitive.
+    ignoreWords :: Prelude.Maybe [Prelude.Text],
+    -- | An array that lists specific character sequences (/keywords/), one of
+    -- which must precede and be within proximity (maximumMatchDistance) of the
+    -- regular expression to match. Keywords aren\'t case sensitive.
+    keywords :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of characters that can exist between the end of at
+    -- least one complete character sequence specified by the keywords array
+    -- and the end of the text that matches the regex pattern. If a complete
+    -- keyword precedes all the text that matches the pattern and the keyword
+    -- is within the specified distance, Amazon Macie includes the result.
+    -- Otherwise, Macie excludes the result.
+    maximumMatchDistance :: Prelude.Maybe Prelude.Int,
+    -- | The custom name of the custom data identifier.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The regular expression (/regex/) that defines the pattern to match.
+    regex :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the severity that\'s assigned to findings that the custom data
+    -- identifier produces, based on the number of occurrences of text that
+    -- matches the custom data identifier\'s detection criteria. By default,
+    -- Amazon Macie creates findings for S3 objects that contain at least one
+    -- occurrence of text that matches the detection criteria, and Macie
+    -- assigns the MEDIUM severity to those findings.
+    severityLevels :: Prelude.Maybe [SeverityLevel],
+    -- | A map of key-value pairs that identifies the tags (keys and values) that
+    -- are associated with the custom data identifier.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCustomDataIdentifierResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getCustomDataIdentifierResponse_arn' - The Amazon Resource Name (ARN) of the custom data identifier.
+--
+-- 'createdAt', 'getCustomDataIdentifierResponse_createdAt' - The date and time, in UTC and extended ISO 8601 format, when the custom
+-- data identifier was created.
+--
+-- 'deleted', 'getCustomDataIdentifierResponse_deleted' - Specifies whether the custom data identifier was deleted. If you delete
+-- a custom data identifier, Amazon Macie doesn\'t delete it permanently.
+-- Instead, it soft deletes the identifier.
+--
+-- 'description', 'getCustomDataIdentifierResponse_description' - The custom description of the custom data identifier.
+--
+-- 'id', 'getCustomDataIdentifierResponse_id' - The unique identifier for the custom data identifier.
+--
+-- 'ignoreWords', 'getCustomDataIdentifierResponse_ignoreWords' - An array that lists specific character sequences (/ignore words/) to
+-- exclude from the results. If the text matched by the regular expression
+-- contains any string in this array, Amazon Macie ignores it. Ignore words
+-- are case sensitive.
+--
+-- 'keywords', 'getCustomDataIdentifierResponse_keywords' - An array that lists specific character sequences (/keywords/), one of
+-- which must precede and be within proximity (maximumMatchDistance) of the
+-- regular expression to match. Keywords aren\'t case sensitive.
+--
+-- 'maximumMatchDistance', 'getCustomDataIdentifierResponse_maximumMatchDistance' - The maximum number of characters that can exist between the end of at
+-- least one complete character sequence specified by the keywords array
+-- and the end of the text that matches the regex pattern. If a complete
+-- keyword precedes all the text that matches the pattern and the keyword
+-- is within the specified distance, Amazon Macie includes the result.
+-- Otherwise, Macie excludes the result.
+--
+-- 'name', 'getCustomDataIdentifierResponse_name' - The custom name of the custom data identifier.
+--
+-- 'regex', 'getCustomDataIdentifierResponse_regex' - The regular expression (/regex/) that defines the pattern to match.
+--
+-- 'severityLevels', 'getCustomDataIdentifierResponse_severityLevels' - Specifies the severity that\'s assigned to findings that the custom data
+-- identifier produces, based on the number of occurrences of text that
+-- matches the custom data identifier\'s detection criteria. By default,
+-- Amazon Macie creates findings for S3 objects that contain at least one
+-- occurrence of text that matches the detection criteria, and Macie
+-- assigns the MEDIUM severity to those findings.
+--
+-- 'tags', 'getCustomDataIdentifierResponse_tags' - A map of key-value pairs that identifies the tags (keys and values) that
+-- are associated with the custom data identifier.
+--
+-- 'httpStatus', 'getCustomDataIdentifierResponse_httpStatus' - The response's http status code.
+newGetCustomDataIdentifierResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetCustomDataIdentifierResponse
+newGetCustomDataIdentifierResponse pHttpStatus_ =
+  GetCustomDataIdentifierResponse'
+    { arn =
+        Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      deleted = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      ignoreWords = Prelude.Nothing,
+      keywords = Prelude.Nothing,
+      maximumMatchDistance = Prelude.Nothing,
+      name = Prelude.Nothing,
+      regex = Prelude.Nothing,
+      severityLevels = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the custom data identifier.
+getCustomDataIdentifierResponse_arn :: Lens.Lens' GetCustomDataIdentifierResponse (Prelude.Maybe Prelude.Text)
+getCustomDataIdentifierResponse_arn = Lens.lens (\GetCustomDataIdentifierResponse' {arn} -> arn) (\s@GetCustomDataIdentifierResponse' {} a -> s {arn = a} :: GetCustomDataIdentifierResponse)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the custom
+-- data identifier was created.
+getCustomDataIdentifierResponse_createdAt :: Lens.Lens' GetCustomDataIdentifierResponse (Prelude.Maybe Prelude.UTCTime)
+getCustomDataIdentifierResponse_createdAt = Lens.lens (\GetCustomDataIdentifierResponse' {createdAt} -> createdAt) (\s@GetCustomDataIdentifierResponse' {} a -> s {createdAt = a} :: GetCustomDataIdentifierResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Specifies whether the custom data identifier was deleted. If you delete
+-- a custom data identifier, Amazon Macie doesn\'t delete it permanently.
+-- Instead, it soft deletes the identifier.
+getCustomDataIdentifierResponse_deleted :: Lens.Lens' GetCustomDataIdentifierResponse (Prelude.Maybe Prelude.Bool)
+getCustomDataIdentifierResponse_deleted = Lens.lens (\GetCustomDataIdentifierResponse' {deleted} -> deleted) (\s@GetCustomDataIdentifierResponse' {} a -> s {deleted = a} :: GetCustomDataIdentifierResponse)
+
+-- | The custom description of the custom data identifier.
+getCustomDataIdentifierResponse_description :: Lens.Lens' GetCustomDataIdentifierResponse (Prelude.Maybe Prelude.Text)
+getCustomDataIdentifierResponse_description = Lens.lens (\GetCustomDataIdentifierResponse' {description} -> description) (\s@GetCustomDataIdentifierResponse' {} a -> s {description = a} :: GetCustomDataIdentifierResponse)
+
+-- | The unique identifier for the custom data identifier.
+getCustomDataIdentifierResponse_id :: Lens.Lens' GetCustomDataIdentifierResponse (Prelude.Maybe Prelude.Text)
+getCustomDataIdentifierResponse_id = Lens.lens (\GetCustomDataIdentifierResponse' {id} -> id) (\s@GetCustomDataIdentifierResponse' {} a -> s {id = a} :: GetCustomDataIdentifierResponse)
+
+-- | An array that lists specific character sequences (/ignore words/) to
+-- exclude from the results. If the text matched by the regular expression
+-- contains any string in this array, Amazon Macie ignores it. Ignore words
+-- are case sensitive.
+getCustomDataIdentifierResponse_ignoreWords :: Lens.Lens' GetCustomDataIdentifierResponse (Prelude.Maybe [Prelude.Text])
+getCustomDataIdentifierResponse_ignoreWords = Lens.lens (\GetCustomDataIdentifierResponse' {ignoreWords} -> ignoreWords) (\s@GetCustomDataIdentifierResponse' {} a -> s {ignoreWords = a} :: GetCustomDataIdentifierResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array that lists specific character sequences (/keywords/), one of
+-- which must precede and be within proximity (maximumMatchDistance) of the
+-- regular expression to match. Keywords aren\'t case sensitive.
+getCustomDataIdentifierResponse_keywords :: Lens.Lens' GetCustomDataIdentifierResponse (Prelude.Maybe [Prelude.Text])
+getCustomDataIdentifierResponse_keywords = Lens.lens (\GetCustomDataIdentifierResponse' {keywords} -> keywords) (\s@GetCustomDataIdentifierResponse' {} a -> s {keywords = a} :: GetCustomDataIdentifierResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of characters that can exist between the end of at
+-- least one complete character sequence specified by the keywords array
+-- and the end of the text that matches the regex pattern. If a complete
+-- keyword precedes all the text that matches the pattern and the keyword
+-- is within the specified distance, Amazon Macie includes the result.
+-- Otherwise, Macie excludes the result.
+getCustomDataIdentifierResponse_maximumMatchDistance :: Lens.Lens' GetCustomDataIdentifierResponse (Prelude.Maybe Prelude.Int)
+getCustomDataIdentifierResponse_maximumMatchDistance = Lens.lens (\GetCustomDataIdentifierResponse' {maximumMatchDistance} -> maximumMatchDistance) (\s@GetCustomDataIdentifierResponse' {} a -> s {maximumMatchDistance = a} :: GetCustomDataIdentifierResponse)
+
+-- | The custom name of the custom data identifier.
+getCustomDataIdentifierResponse_name :: Lens.Lens' GetCustomDataIdentifierResponse (Prelude.Maybe Prelude.Text)
+getCustomDataIdentifierResponse_name = Lens.lens (\GetCustomDataIdentifierResponse' {name} -> name) (\s@GetCustomDataIdentifierResponse' {} a -> s {name = a} :: GetCustomDataIdentifierResponse)
+
+-- | The regular expression (/regex/) that defines the pattern to match.
+getCustomDataIdentifierResponse_regex :: Lens.Lens' GetCustomDataIdentifierResponse (Prelude.Maybe Prelude.Text)
+getCustomDataIdentifierResponse_regex = Lens.lens (\GetCustomDataIdentifierResponse' {regex} -> regex) (\s@GetCustomDataIdentifierResponse' {} a -> s {regex = a} :: GetCustomDataIdentifierResponse)
+
+-- | Specifies the severity that\'s assigned to findings that the custom data
+-- identifier produces, based on the number of occurrences of text that
+-- matches the custom data identifier\'s detection criteria. By default,
+-- Amazon Macie creates findings for S3 objects that contain at least one
+-- occurrence of text that matches the detection criteria, and Macie
+-- assigns the MEDIUM severity to those findings.
+getCustomDataIdentifierResponse_severityLevels :: Lens.Lens' GetCustomDataIdentifierResponse (Prelude.Maybe [SeverityLevel])
+getCustomDataIdentifierResponse_severityLevels = Lens.lens (\GetCustomDataIdentifierResponse' {severityLevels} -> severityLevels) (\s@GetCustomDataIdentifierResponse' {} a -> s {severityLevels = a} :: GetCustomDataIdentifierResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A map of key-value pairs that identifies the tags (keys and values) that
+-- are associated with the custom data identifier.
+getCustomDataIdentifierResponse_tags :: Lens.Lens' GetCustomDataIdentifierResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getCustomDataIdentifierResponse_tags = Lens.lens (\GetCustomDataIdentifierResponse' {tags} -> tags) (\s@GetCustomDataIdentifierResponse' {} a -> s {tags = a} :: GetCustomDataIdentifierResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getCustomDataIdentifierResponse_httpStatus :: Lens.Lens' GetCustomDataIdentifierResponse Prelude.Int
+getCustomDataIdentifierResponse_httpStatus = Lens.lens (\GetCustomDataIdentifierResponse' {httpStatus} -> httpStatus) (\s@GetCustomDataIdentifierResponse' {} a -> s {httpStatus = a} :: GetCustomDataIdentifierResponse)
+
+instance
+  Prelude.NFData
+    GetCustomDataIdentifierResponse
+  where
+  rnf GetCustomDataIdentifierResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf deleted
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf ignoreWords
+      `Prelude.seq` Prelude.rnf keywords
+      `Prelude.seq` Prelude.rnf maximumMatchDistance
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf regex
+      `Prelude.seq` Prelude.rnf severityLevels
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetFindingStatistics.hs b/gen/Amazonka/MacieV2/GetFindingStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetFindingStatistics.hs
@@ -0,0 +1,252 @@
+{-# 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.MacieV2.GetFindingStatistics
+-- 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 (queries) aggregated statistical data about findings.
+module Amazonka.MacieV2.GetFindingStatistics
+  ( -- * Creating a Request
+    GetFindingStatistics (..),
+    newGetFindingStatistics,
+
+    -- * Request Lenses
+    getFindingStatistics_findingCriteria,
+    getFindingStatistics_size,
+    getFindingStatistics_sortCriteria,
+    getFindingStatistics_groupBy,
+
+    -- * Destructuring the Response
+    GetFindingStatisticsResponse (..),
+    newGetFindingStatisticsResponse,
+
+    -- * Response Lenses
+    getFindingStatisticsResponse_countsByGroup,
+    getFindingStatisticsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetFindingStatistics' smart constructor.
+data GetFindingStatistics = GetFindingStatistics'
+  { -- | The criteria to use to filter the query results.
+    findingCriteria :: Prelude.Maybe FindingCriteria,
+    -- | The maximum number of items to include in each page of the response.
+    size :: Prelude.Maybe Prelude.Int,
+    -- | The criteria to use to sort the query results.
+    sortCriteria :: Prelude.Maybe FindingStatisticsSortCriteria,
+    -- | The finding property to use to group the query results. Valid values
+    -- are:
+    --
+    -- -   classificationDetails.jobId - The unique identifier for the
+    --     classification job that produced the finding.
+    --
+    -- -   resourcesAffected.s3Bucket.name - The name of the S3 bucket that the
+    --     finding applies to.
+    --
+    -- -   severity.description - The severity level of the finding, such as
+    --     High or Medium.
+    --
+    -- -   type - The type of finding, such as Policy:IAMUser\/S3BucketPublic
+    --     and SensitiveData:S3Object\/Personal.
+    groupBy :: GroupBy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFindingStatistics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'findingCriteria', 'getFindingStatistics_findingCriteria' - The criteria to use to filter the query results.
+--
+-- 'size', 'getFindingStatistics_size' - The maximum number of items to include in each page of the response.
+--
+-- 'sortCriteria', 'getFindingStatistics_sortCriteria' - The criteria to use to sort the query results.
+--
+-- 'groupBy', 'getFindingStatistics_groupBy' - The finding property to use to group the query results. Valid values
+-- are:
+--
+-- -   classificationDetails.jobId - The unique identifier for the
+--     classification job that produced the finding.
+--
+-- -   resourcesAffected.s3Bucket.name - The name of the S3 bucket that the
+--     finding applies to.
+--
+-- -   severity.description - The severity level of the finding, such as
+--     High or Medium.
+--
+-- -   type - The type of finding, such as Policy:IAMUser\/S3BucketPublic
+--     and SensitiveData:S3Object\/Personal.
+newGetFindingStatistics ::
+  -- | 'groupBy'
+  GroupBy ->
+  GetFindingStatistics
+newGetFindingStatistics pGroupBy_ =
+  GetFindingStatistics'
+    { findingCriteria =
+        Prelude.Nothing,
+      size = Prelude.Nothing,
+      sortCriteria = Prelude.Nothing,
+      groupBy = pGroupBy_
+    }
+
+-- | The criteria to use to filter the query results.
+getFindingStatistics_findingCriteria :: Lens.Lens' GetFindingStatistics (Prelude.Maybe FindingCriteria)
+getFindingStatistics_findingCriteria = Lens.lens (\GetFindingStatistics' {findingCriteria} -> findingCriteria) (\s@GetFindingStatistics' {} a -> s {findingCriteria = a} :: GetFindingStatistics)
+
+-- | The maximum number of items to include in each page of the response.
+getFindingStatistics_size :: Lens.Lens' GetFindingStatistics (Prelude.Maybe Prelude.Int)
+getFindingStatistics_size = Lens.lens (\GetFindingStatistics' {size} -> size) (\s@GetFindingStatistics' {} a -> s {size = a} :: GetFindingStatistics)
+
+-- | The criteria to use to sort the query results.
+getFindingStatistics_sortCriteria :: Lens.Lens' GetFindingStatistics (Prelude.Maybe FindingStatisticsSortCriteria)
+getFindingStatistics_sortCriteria = Lens.lens (\GetFindingStatistics' {sortCriteria} -> sortCriteria) (\s@GetFindingStatistics' {} a -> s {sortCriteria = a} :: GetFindingStatistics)
+
+-- | The finding property to use to group the query results. Valid values
+-- are:
+--
+-- -   classificationDetails.jobId - The unique identifier for the
+--     classification job that produced the finding.
+--
+-- -   resourcesAffected.s3Bucket.name - The name of the S3 bucket that the
+--     finding applies to.
+--
+-- -   severity.description - The severity level of the finding, such as
+--     High or Medium.
+--
+-- -   type - The type of finding, such as Policy:IAMUser\/S3BucketPublic
+--     and SensitiveData:S3Object\/Personal.
+getFindingStatistics_groupBy :: Lens.Lens' GetFindingStatistics GroupBy
+getFindingStatistics_groupBy = Lens.lens (\GetFindingStatistics' {groupBy} -> groupBy) (\s@GetFindingStatistics' {} a -> s {groupBy = a} :: GetFindingStatistics)
+
+instance Core.AWSRequest GetFindingStatistics where
+  type
+    AWSResponse GetFindingStatistics =
+      GetFindingStatisticsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetFindingStatisticsResponse'
+            Prelude.<$> (x Data..?> "countsByGroup" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetFindingStatistics where
+  hashWithSalt _salt GetFindingStatistics' {..} =
+    _salt
+      `Prelude.hashWithSalt` findingCriteria
+      `Prelude.hashWithSalt` size
+      `Prelude.hashWithSalt` sortCriteria
+      `Prelude.hashWithSalt` groupBy
+
+instance Prelude.NFData GetFindingStatistics where
+  rnf GetFindingStatistics' {..} =
+    Prelude.rnf findingCriteria
+      `Prelude.seq` Prelude.rnf size
+      `Prelude.seq` Prelude.rnf sortCriteria
+      `Prelude.seq` Prelude.rnf groupBy
+
+instance Data.ToHeaders GetFindingStatistics where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetFindingStatistics where
+  toJSON GetFindingStatistics' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("findingCriteria" Data..=)
+              Prelude.<$> findingCriteria,
+            ("size" Data..=) Prelude.<$> size,
+            ("sortCriteria" Data..=) Prelude.<$> sortCriteria,
+            Prelude.Just ("groupBy" Data..= groupBy)
+          ]
+      )
+
+instance Data.ToPath GetFindingStatistics where
+  toPath = Prelude.const "/findings/statistics"
+
+instance Data.ToQuery GetFindingStatistics where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetFindingStatisticsResponse' smart constructor.
+data GetFindingStatisticsResponse = GetFindingStatisticsResponse'
+  { -- | An array of objects, one for each group of findings that matches the
+    -- filter criteria specified in the request.
+    countsByGroup :: Prelude.Maybe [GroupCount],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFindingStatisticsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'countsByGroup', 'getFindingStatisticsResponse_countsByGroup' - An array of objects, one for each group of findings that matches the
+-- filter criteria specified in the request.
+--
+-- 'httpStatus', 'getFindingStatisticsResponse_httpStatus' - The response's http status code.
+newGetFindingStatisticsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetFindingStatisticsResponse
+newGetFindingStatisticsResponse pHttpStatus_ =
+  GetFindingStatisticsResponse'
+    { countsByGroup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each group of findings that matches the
+-- filter criteria specified in the request.
+getFindingStatisticsResponse_countsByGroup :: Lens.Lens' GetFindingStatisticsResponse (Prelude.Maybe [GroupCount])
+getFindingStatisticsResponse_countsByGroup = Lens.lens (\GetFindingStatisticsResponse' {countsByGroup} -> countsByGroup) (\s@GetFindingStatisticsResponse' {} a -> s {countsByGroup = a} :: GetFindingStatisticsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getFindingStatisticsResponse_httpStatus :: Lens.Lens' GetFindingStatisticsResponse Prelude.Int
+getFindingStatisticsResponse_httpStatus = Lens.lens (\GetFindingStatisticsResponse' {httpStatus} -> httpStatus) (\s@GetFindingStatisticsResponse' {} a -> s {httpStatus = a} :: GetFindingStatisticsResponse)
+
+instance Prelude.NFData GetFindingStatisticsResponse where
+  rnf GetFindingStatisticsResponse' {..} =
+    Prelude.rnf countsByGroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetFindings.hs b/gen/Amazonka/MacieV2/GetFindings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetFindings.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.GetFindings
+-- 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 details of one or more findings.
+module Amazonka.MacieV2.GetFindings
+  ( -- * Creating a Request
+    GetFindings (..),
+    newGetFindings,
+
+    -- * Request Lenses
+    getFindings_sortCriteria,
+    getFindings_findingIds,
+
+    -- * Destructuring the Response
+    GetFindingsResponse (..),
+    newGetFindingsResponse,
+
+    -- * Response Lenses
+    getFindingsResponse_findings,
+    getFindingsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetFindings' smart constructor.
+data GetFindings = GetFindings'
+  { -- | The criteria for sorting the results of the request.
+    sortCriteria :: Prelude.Maybe SortCriteria,
+    -- | An array of strings that lists the unique identifiers for the findings
+    -- to retrieve. You can specify as many as 50 unique identifiers in this
+    -- array.
+    findingIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFindings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sortCriteria', 'getFindings_sortCriteria' - The criteria for sorting the results of the request.
+--
+-- 'findingIds', 'getFindings_findingIds' - An array of strings that lists the unique identifiers for the findings
+-- to retrieve. You can specify as many as 50 unique identifiers in this
+-- array.
+newGetFindings ::
+  GetFindings
+newGetFindings =
+  GetFindings'
+    { sortCriteria = Prelude.Nothing,
+      findingIds = Prelude.mempty
+    }
+
+-- | The criteria for sorting the results of the request.
+getFindings_sortCriteria :: Lens.Lens' GetFindings (Prelude.Maybe SortCriteria)
+getFindings_sortCriteria = Lens.lens (\GetFindings' {sortCriteria} -> sortCriteria) (\s@GetFindings' {} a -> s {sortCriteria = a} :: GetFindings)
+
+-- | An array of strings that lists the unique identifiers for the findings
+-- to retrieve. You can specify as many as 50 unique identifiers in this
+-- array.
+getFindings_findingIds :: Lens.Lens' GetFindings [Prelude.Text]
+getFindings_findingIds = Lens.lens (\GetFindings' {findingIds} -> findingIds) (\s@GetFindings' {} a -> s {findingIds = a} :: GetFindings) Prelude.. Lens.coerced
+
+instance Core.AWSRequest GetFindings where
+  type AWSResponse GetFindings = GetFindingsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetFindingsResponse'
+            Prelude.<$> (x Data..?> "findings" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetFindings where
+  hashWithSalt _salt GetFindings' {..} =
+    _salt
+      `Prelude.hashWithSalt` sortCriteria
+      `Prelude.hashWithSalt` findingIds
+
+instance Prelude.NFData GetFindings where
+  rnf GetFindings' {..} =
+    Prelude.rnf sortCriteria
+      `Prelude.seq` Prelude.rnf findingIds
+
+instance Data.ToHeaders GetFindings where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetFindings where
+  toJSON GetFindings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("sortCriteria" Data..=) Prelude.<$> sortCriteria,
+            Prelude.Just ("findingIds" Data..= findingIds)
+          ]
+      )
+
+instance Data.ToPath GetFindings where
+  toPath = Prelude.const "/findings/describe"
+
+instance Data.ToQuery GetFindings where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetFindingsResponse' smart constructor.
+data GetFindingsResponse = GetFindingsResponse'
+  { -- | An array of objects, one for each finding that matches the criteria
+    -- specified in the request.
+    findings :: Prelude.Maybe [Finding],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFindingsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'findings', 'getFindingsResponse_findings' - An array of objects, one for each finding that matches the criteria
+-- specified in the request.
+--
+-- 'httpStatus', 'getFindingsResponse_httpStatus' - The response's http status code.
+newGetFindingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetFindingsResponse
+newGetFindingsResponse pHttpStatus_ =
+  GetFindingsResponse'
+    { findings = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each finding that matches the criteria
+-- specified in the request.
+getFindingsResponse_findings :: Lens.Lens' GetFindingsResponse (Prelude.Maybe [Finding])
+getFindingsResponse_findings = Lens.lens (\GetFindingsResponse' {findings} -> findings) (\s@GetFindingsResponse' {} a -> s {findings = a} :: GetFindingsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getFindingsResponse_httpStatus :: Lens.Lens' GetFindingsResponse Prelude.Int
+getFindingsResponse_httpStatus = Lens.lens (\GetFindingsResponse' {httpStatus} -> httpStatus) (\s@GetFindingsResponse' {} a -> s {httpStatus = a} :: GetFindingsResponse)
+
+instance Prelude.NFData GetFindingsResponse where
+  rnf GetFindingsResponse' {..} =
+    Prelude.rnf findings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetFindingsFilter.hs b/gen/Amazonka/MacieV2/GetFindingsFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetFindingsFilter.hs
@@ -0,0 +1,266 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.GetFindingsFilter
+-- 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 criteria and other settings for a findings filter.
+module Amazonka.MacieV2.GetFindingsFilter
+  ( -- * Creating a Request
+    GetFindingsFilter (..),
+    newGetFindingsFilter,
+
+    -- * Request Lenses
+    getFindingsFilter_id,
+
+    -- * Destructuring the Response
+    GetFindingsFilterResponse (..),
+    newGetFindingsFilterResponse,
+
+    -- * Response Lenses
+    getFindingsFilterResponse_action,
+    getFindingsFilterResponse_arn,
+    getFindingsFilterResponse_description,
+    getFindingsFilterResponse_findingCriteria,
+    getFindingsFilterResponse_id,
+    getFindingsFilterResponse_name,
+    getFindingsFilterResponse_position,
+    getFindingsFilterResponse_tags,
+    getFindingsFilterResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetFindingsFilter' smart constructor.
+data GetFindingsFilter = GetFindingsFilter'
+  { -- | The unique identifier for the Amazon Macie resource that the request
+    -- applies to.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFindingsFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'getFindingsFilter_id' - The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+newGetFindingsFilter ::
+  -- | 'id'
+  Prelude.Text ->
+  GetFindingsFilter
+newGetFindingsFilter pId_ =
+  GetFindingsFilter' {id = pId_}
+
+-- | The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+getFindingsFilter_id :: Lens.Lens' GetFindingsFilter Prelude.Text
+getFindingsFilter_id = Lens.lens (\GetFindingsFilter' {id} -> id) (\s@GetFindingsFilter' {} a -> s {id = a} :: GetFindingsFilter)
+
+instance Core.AWSRequest GetFindingsFilter where
+  type
+    AWSResponse GetFindingsFilter =
+      GetFindingsFilterResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetFindingsFilterResponse'
+            Prelude.<$> (x Data..?> "action")
+            Prelude.<*> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "findingCriteria")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "position")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetFindingsFilter where
+  hashWithSalt _salt GetFindingsFilter' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetFindingsFilter where
+  rnf GetFindingsFilter' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetFindingsFilter where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetFindingsFilter where
+  toPath GetFindingsFilter' {..} =
+    Prelude.mconcat ["/findingsfilters/", Data.toBS id]
+
+instance Data.ToQuery GetFindingsFilter where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetFindingsFilterResponse' smart constructor.
+data GetFindingsFilterResponse = GetFindingsFilterResponse'
+  { -- | The action that\'s performed on findings that match the filter criteria
+    -- (findingCriteria). Possible values are: ARCHIVE, suppress (automatically
+    -- archive) the findings; and, NOOP, don\'t perform any action on the
+    -- findings.
+    action :: Prelude.Maybe FindingsFilterAction,
+    -- | The Amazon Resource Name (ARN) of the filter.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The custom description of the filter.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The criteria that\'s used to filter findings.
+    findingCriteria :: Prelude.Maybe FindingCriteria,
+    -- | The unique identifier for the filter.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The custom name of the filter.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The position of the filter in the list of saved filters on the Amazon
+    -- Macie console. This value also determines the order in which the filter
+    -- is applied to findings, relative to other filters that are also applied
+    -- to the findings.
+    position :: Prelude.Maybe Prelude.Int,
+    -- | A map of key-value pairs that specifies which tags (keys and values) are
+    -- associated with the filter.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFindingsFilterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'action', 'getFindingsFilterResponse_action' - The action that\'s performed on findings that match the filter criteria
+-- (findingCriteria). Possible values are: ARCHIVE, suppress (automatically
+-- archive) the findings; and, NOOP, don\'t perform any action on the
+-- findings.
+--
+-- 'arn', 'getFindingsFilterResponse_arn' - The Amazon Resource Name (ARN) of the filter.
+--
+-- 'description', 'getFindingsFilterResponse_description' - The custom description of the filter.
+--
+-- 'findingCriteria', 'getFindingsFilterResponse_findingCriteria' - The criteria that\'s used to filter findings.
+--
+-- 'id', 'getFindingsFilterResponse_id' - The unique identifier for the filter.
+--
+-- 'name', 'getFindingsFilterResponse_name' - The custom name of the filter.
+--
+-- 'position', 'getFindingsFilterResponse_position' - The position of the filter in the list of saved filters on the Amazon
+-- Macie console. This value also determines the order in which the filter
+-- is applied to findings, relative to other filters that are also applied
+-- to the findings.
+--
+-- 'tags', 'getFindingsFilterResponse_tags' - A map of key-value pairs that specifies which tags (keys and values) are
+-- associated with the filter.
+--
+-- 'httpStatus', 'getFindingsFilterResponse_httpStatus' - The response's http status code.
+newGetFindingsFilterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetFindingsFilterResponse
+newGetFindingsFilterResponse pHttpStatus_ =
+  GetFindingsFilterResponse'
+    { action =
+        Prelude.Nothing,
+      arn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      findingCriteria = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      position = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The action that\'s performed on findings that match the filter criteria
+-- (findingCriteria). Possible values are: ARCHIVE, suppress (automatically
+-- archive) the findings; and, NOOP, don\'t perform any action on the
+-- findings.
+getFindingsFilterResponse_action :: Lens.Lens' GetFindingsFilterResponse (Prelude.Maybe FindingsFilterAction)
+getFindingsFilterResponse_action = Lens.lens (\GetFindingsFilterResponse' {action} -> action) (\s@GetFindingsFilterResponse' {} a -> s {action = a} :: GetFindingsFilterResponse)
+
+-- | The Amazon Resource Name (ARN) of the filter.
+getFindingsFilterResponse_arn :: Lens.Lens' GetFindingsFilterResponse (Prelude.Maybe Prelude.Text)
+getFindingsFilterResponse_arn = Lens.lens (\GetFindingsFilterResponse' {arn} -> arn) (\s@GetFindingsFilterResponse' {} a -> s {arn = a} :: GetFindingsFilterResponse)
+
+-- | The custom description of the filter.
+getFindingsFilterResponse_description :: Lens.Lens' GetFindingsFilterResponse (Prelude.Maybe Prelude.Text)
+getFindingsFilterResponse_description = Lens.lens (\GetFindingsFilterResponse' {description} -> description) (\s@GetFindingsFilterResponse' {} a -> s {description = a} :: GetFindingsFilterResponse)
+
+-- | The criteria that\'s used to filter findings.
+getFindingsFilterResponse_findingCriteria :: Lens.Lens' GetFindingsFilterResponse (Prelude.Maybe FindingCriteria)
+getFindingsFilterResponse_findingCriteria = Lens.lens (\GetFindingsFilterResponse' {findingCriteria} -> findingCriteria) (\s@GetFindingsFilterResponse' {} a -> s {findingCriteria = a} :: GetFindingsFilterResponse)
+
+-- | The unique identifier for the filter.
+getFindingsFilterResponse_id :: Lens.Lens' GetFindingsFilterResponse (Prelude.Maybe Prelude.Text)
+getFindingsFilterResponse_id = Lens.lens (\GetFindingsFilterResponse' {id} -> id) (\s@GetFindingsFilterResponse' {} a -> s {id = a} :: GetFindingsFilterResponse)
+
+-- | The custom name of the filter.
+getFindingsFilterResponse_name :: Lens.Lens' GetFindingsFilterResponse (Prelude.Maybe Prelude.Text)
+getFindingsFilterResponse_name = Lens.lens (\GetFindingsFilterResponse' {name} -> name) (\s@GetFindingsFilterResponse' {} a -> s {name = a} :: GetFindingsFilterResponse)
+
+-- | The position of the filter in the list of saved filters on the Amazon
+-- Macie console. This value also determines the order in which the filter
+-- is applied to findings, relative to other filters that are also applied
+-- to the findings.
+getFindingsFilterResponse_position :: Lens.Lens' GetFindingsFilterResponse (Prelude.Maybe Prelude.Int)
+getFindingsFilterResponse_position = Lens.lens (\GetFindingsFilterResponse' {position} -> position) (\s@GetFindingsFilterResponse' {} a -> s {position = a} :: GetFindingsFilterResponse)
+
+-- | A map of key-value pairs that specifies which tags (keys and values) are
+-- associated with the filter.
+getFindingsFilterResponse_tags :: Lens.Lens' GetFindingsFilterResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getFindingsFilterResponse_tags = Lens.lens (\GetFindingsFilterResponse' {tags} -> tags) (\s@GetFindingsFilterResponse' {} a -> s {tags = a} :: GetFindingsFilterResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getFindingsFilterResponse_httpStatus :: Lens.Lens' GetFindingsFilterResponse Prelude.Int
+getFindingsFilterResponse_httpStatus = Lens.lens (\GetFindingsFilterResponse' {httpStatus} -> httpStatus) (\s@GetFindingsFilterResponse' {} a -> s {httpStatus = a} :: GetFindingsFilterResponse)
+
+instance Prelude.NFData GetFindingsFilterResponse where
+  rnf GetFindingsFilterResponse' {..} =
+    Prelude.rnf action
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf findingCriteria
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf position
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetFindingsPublicationConfiguration.hs b/gen/Amazonka/MacieV2/GetFindingsPublicationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetFindingsPublicationConfiguration.hs
@@ -0,0 +1,169 @@
+{-# 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.MacieV2.GetFindingsPublicationConfiguration
+-- 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 configuration settings for publishing findings to Security
+-- Hub.
+module Amazonka.MacieV2.GetFindingsPublicationConfiguration
+  ( -- * Creating a Request
+    GetFindingsPublicationConfiguration (..),
+    newGetFindingsPublicationConfiguration,
+
+    -- * Destructuring the Response
+    GetFindingsPublicationConfigurationResponse (..),
+    newGetFindingsPublicationConfigurationResponse,
+
+    -- * Response Lenses
+    getFindingsPublicationConfigurationResponse_securityHubConfiguration,
+    getFindingsPublicationConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetFindingsPublicationConfiguration' smart constructor.
+data GetFindingsPublicationConfiguration = GetFindingsPublicationConfiguration'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFindingsPublicationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetFindingsPublicationConfiguration ::
+  GetFindingsPublicationConfiguration
+newGetFindingsPublicationConfiguration =
+  GetFindingsPublicationConfiguration'
+
+instance
+  Core.AWSRequest
+    GetFindingsPublicationConfiguration
+  where
+  type
+    AWSResponse GetFindingsPublicationConfiguration =
+      GetFindingsPublicationConfigurationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetFindingsPublicationConfigurationResponse'
+            Prelude.<$> (x Data..?> "securityHubConfiguration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetFindingsPublicationConfiguration
+  where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance
+  Prelude.NFData
+    GetFindingsPublicationConfiguration
+  where
+  rnf _ = ()
+
+instance
+  Data.ToHeaders
+    GetFindingsPublicationConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToPath
+    GetFindingsPublicationConfiguration
+  where
+  toPath =
+    Prelude.const "/findings-publication-configuration"
+
+instance
+  Data.ToQuery
+    GetFindingsPublicationConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetFindingsPublicationConfigurationResponse' smart constructor.
+data GetFindingsPublicationConfigurationResponse = GetFindingsPublicationConfigurationResponse'
+  { -- | The configuration settings that determine which findings are published
+    -- to Security Hub.
+    securityHubConfiguration :: Prelude.Maybe SecurityHubConfiguration,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFindingsPublicationConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'securityHubConfiguration', 'getFindingsPublicationConfigurationResponse_securityHubConfiguration' - The configuration settings that determine which findings are published
+-- to Security Hub.
+--
+-- 'httpStatus', 'getFindingsPublicationConfigurationResponse_httpStatus' - The response's http status code.
+newGetFindingsPublicationConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetFindingsPublicationConfigurationResponse
+newGetFindingsPublicationConfigurationResponse
+  pHttpStatus_ =
+    GetFindingsPublicationConfigurationResponse'
+      { securityHubConfiguration =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The configuration settings that determine which findings are published
+-- to Security Hub.
+getFindingsPublicationConfigurationResponse_securityHubConfiguration :: Lens.Lens' GetFindingsPublicationConfigurationResponse (Prelude.Maybe SecurityHubConfiguration)
+getFindingsPublicationConfigurationResponse_securityHubConfiguration = Lens.lens (\GetFindingsPublicationConfigurationResponse' {securityHubConfiguration} -> securityHubConfiguration) (\s@GetFindingsPublicationConfigurationResponse' {} a -> s {securityHubConfiguration = a} :: GetFindingsPublicationConfigurationResponse)
+
+-- | The response's http status code.
+getFindingsPublicationConfigurationResponse_httpStatus :: Lens.Lens' GetFindingsPublicationConfigurationResponse Prelude.Int
+getFindingsPublicationConfigurationResponse_httpStatus = Lens.lens (\GetFindingsPublicationConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetFindingsPublicationConfigurationResponse' {} a -> s {httpStatus = a} :: GetFindingsPublicationConfigurationResponse)
+
+instance
+  Prelude.NFData
+    GetFindingsPublicationConfigurationResponse
+  where
+  rnf GetFindingsPublicationConfigurationResponse' {..} =
+    Prelude.rnf securityHubConfiguration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetInvitationsCount.hs b/gen/Amazonka/MacieV2/GetInvitationsCount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetInvitationsCount.hs
@@ -0,0 +1,145 @@
+{-# 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.MacieV2.GetInvitationsCount
+-- 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 count of Amazon Macie membership invitations that were
+-- received by an account.
+module Amazonka.MacieV2.GetInvitationsCount
+  ( -- * Creating a Request
+    GetInvitationsCount (..),
+    newGetInvitationsCount,
+
+    -- * Destructuring the Response
+    GetInvitationsCountResponse (..),
+    newGetInvitationsCountResponse,
+
+    -- * Response Lenses
+    getInvitationsCountResponse_invitationsCount,
+    getInvitationsCountResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetInvitationsCount' smart constructor.
+data GetInvitationsCount = GetInvitationsCount'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetInvitationsCount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetInvitationsCount ::
+  GetInvitationsCount
+newGetInvitationsCount = GetInvitationsCount'
+
+instance Core.AWSRequest GetInvitationsCount where
+  type
+    AWSResponse GetInvitationsCount =
+      GetInvitationsCountResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetInvitationsCountResponse'
+            Prelude.<$> (x Data..?> "invitationsCount")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetInvitationsCount where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData GetInvitationsCount where
+  rnf _ = ()
+
+instance Data.ToHeaders GetInvitationsCount where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetInvitationsCount where
+  toPath = Prelude.const "/invitations/count"
+
+instance Data.ToQuery GetInvitationsCount where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetInvitationsCountResponse' smart constructor.
+data GetInvitationsCountResponse = GetInvitationsCountResponse'
+  { -- | The total number of invitations that were received by the account, not
+    -- including the currently accepted invitation.
+    invitationsCount :: Prelude.Maybe Prelude.Integer,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetInvitationsCountResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'invitationsCount', 'getInvitationsCountResponse_invitationsCount' - The total number of invitations that were received by the account, not
+-- including the currently accepted invitation.
+--
+-- 'httpStatus', 'getInvitationsCountResponse_httpStatus' - The response's http status code.
+newGetInvitationsCountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetInvitationsCountResponse
+newGetInvitationsCountResponse pHttpStatus_ =
+  GetInvitationsCountResponse'
+    { invitationsCount =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The total number of invitations that were received by the account, not
+-- including the currently accepted invitation.
+getInvitationsCountResponse_invitationsCount :: Lens.Lens' GetInvitationsCountResponse (Prelude.Maybe Prelude.Integer)
+getInvitationsCountResponse_invitationsCount = Lens.lens (\GetInvitationsCountResponse' {invitationsCount} -> invitationsCount) (\s@GetInvitationsCountResponse' {} a -> s {invitationsCount = a} :: GetInvitationsCountResponse)
+
+-- | The response's http status code.
+getInvitationsCountResponse_httpStatus :: Lens.Lens' GetInvitationsCountResponse Prelude.Int
+getInvitationsCountResponse_httpStatus = Lens.lens (\GetInvitationsCountResponse' {httpStatus} -> httpStatus) (\s@GetInvitationsCountResponse' {} a -> s {httpStatus = a} :: GetInvitationsCountResponse)
+
+instance Prelude.NFData GetInvitationsCountResponse where
+  rnf GetInvitationsCountResponse' {..} =
+    Prelude.rnf invitationsCount
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetMacieSession.hs b/gen/Amazonka/MacieV2/GetMacieSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetMacieSession.hs
@@ -0,0 +1,217 @@
+{-# 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.MacieV2.GetMacieSession
+-- 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 and configuration settings for an Amazon Macie
+-- account.
+module Amazonka.MacieV2.GetMacieSession
+  ( -- * Creating a Request
+    GetMacieSession (..),
+    newGetMacieSession,
+
+    -- * Destructuring the Response
+    GetMacieSessionResponse (..),
+    newGetMacieSessionResponse,
+
+    -- * Response Lenses
+    getMacieSessionResponse_createdAt,
+    getMacieSessionResponse_findingPublishingFrequency,
+    getMacieSessionResponse_serviceRole,
+    getMacieSessionResponse_status,
+    getMacieSessionResponse_updatedAt,
+    getMacieSessionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetMacieSession' smart constructor.
+data GetMacieSession = GetMacieSession'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMacieSession' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetMacieSession ::
+  GetMacieSession
+newGetMacieSession = GetMacieSession'
+
+instance Core.AWSRequest GetMacieSession where
+  type
+    AWSResponse GetMacieSession =
+      GetMacieSessionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetMacieSessionResponse'
+            Prelude.<$> (x Data..?> "createdAt")
+            Prelude.<*> (x Data..?> "findingPublishingFrequency")
+            Prelude.<*> (x Data..?> "serviceRole")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "updatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetMacieSession where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData GetMacieSession where
+  rnf _ = ()
+
+instance Data.ToHeaders GetMacieSession where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetMacieSession where
+  toPath = Prelude.const "/macie"
+
+instance Data.ToQuery GetMacieSession where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetMacieSessionResponse' smart constructor.
+data GetMacieSessionResponse = GetMacieSessionResponse'
+  { -- | The date and time, in UTC and extended ISO 8601 format, when the Amazon
+    -- Macie account was created.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The frequency with which Amazon Macie publishes updates to policy
+    -- findings for the account. This includes publishing updates to Security
+    -- Hub and Amazon EventBridge (formerly Amazon CloudWatch Events).
+    findingPublishingFrequency :: Prelude.Maybe FindingPublishingFrequency,
+    -- | The Amazon Resource Name (ARN) of the service-linked role that allows
+    -- Amazon Macie to monitor and analyze data in Amazon Web Services
+    -- resources for the account.
+    serviceRole :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the Amazon Macie account. Possible values are:
+    -- PAUSED, the account is enabled but all Macie activities are suspended
+    -- (paused) for the account; and, ENABLED, the account is enabled and all
+    -- Macie activities are enabled for the account.
+    status :: Prelude.Maybe MacieStatus,
+    -- | The date and time, in UTC and extended ISO 8601 format, of the most
+    -- recent change to the status of the Amazon Macie account.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMacieSessionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAt', 'getMacieSessionResponse_createdAt' - The date and time, in UTC and extended ISO 8601 format, when the Amazon
+-- Macie account was created.
+--
+-- 'findingPublishingFrequency', 'getMacieSessionResponse_findingPublishingFrequency' - The frequency with which Amazon Macie publishes updates to policy
+-- findings for the account. This includes publishing updates to Security
+-- Hub and Amazon EventBridge (formerly Amazon CloudWatch Events).
+--
+-- 'serviceRole', 'getMacieSessionResponse_serviceRole' - The Amazon Resource Name (ARN) of the service-linked role that allows
+-- Amazon Macie to monitor and analyze data in Amazon Web Services
+-- resources for the account.
+--
+-- 'status', 'getMacieSessionResponse_status' - The current status of the Amazon Macie account. Possible values are:
+-- PAUSED, the account is enabled but all Macie activities are suspended
+-- (paused) for the account; and, ENABLED, the account is enabled and all
+-- Macie activities are enabled for the account.
+--
+-- 'updatedAt', 'getMacieSessionResponse_updatedAt' - The date and time, in UTC and extended ISO 8601 format, of the most
+-- recent change to the status of the Amazon Macie account.
+--
+-- 'httpStatus', 'getMacieSessionResponse_httpStatus' - The response's http status code.
+newGetMacieSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetMacieSessionResponse
+newGetMacieSessionResponse pHttpStatus_ =
+  GetMacieSessionResponse'
+    { createdAt =
+        Prelude.Nothing,
+      findingPublishingFrequency = Prelude.Nothing,
+      serviceRole = Prelude.Nothing,
+      status = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the Amazon
+-- Macie account was created.
+getMacieSessionResponse_createdAt :: Lens.Lens' GetMacieSessionResponse (Prelude.Maybe Prelude.UTCTime)
+getMacieSessionResponse_createdAt = Lens.lens (\GetMacieSessionResponse' {createdAt} -> createdAt) (\s@GetMacieSessionResponse' {} a -> s {createdAt = a} :: GetMacieSessionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The frequency with which Amazon Macie publishes updates to policy
+-- findings for the account. This includes publishing updates to Security
+-- Hub and Amazon EventBridge (formerly Amazon CloudWatch Events).
+getMacieSessionResponse_findingPublishingFrequency :: Lens.Lens' GetMacieSessionResponse (Prelude.Maybe FindingPublishingFrequency)
+getMacieSessionResponse_findingPublishingFrequency = Lens.lens (\GetMacieSessionResponse' {findingPublishingFrequency} -> findingPublishingFrequency) (\s@GetMacieSessionResponse' {} a -> s {findingPublishingFrequency = a} :: GetMacieSessionResponse)
+
+-- | The Amazon Resource Name (ARN) of the service-linked role that allows
+-- Amazon Macie to monitor and analyze data in Amazon Web Services
+-- resources for the account.
+getMacieSessionResponse_serviceRole :: Lens.Lens' GetMacieSessionResponse (Prelude.Maybe Prelude.Text)
+getMacieSessionResponse_serviceRole = Lens.lens (\GetMacieSessionResponse' {serviceRole} -> serviceRole) (\s@GetMacieSessionResponse' {} a -> s {serviceRole = a} :: GetMacieSessionResponse)
+
+-- | The current status of the Amazon Macie account. Possible values are:
+-- PAUSED, the account is enabled but all Macie activities are suspended
+-- (paused) for the account; and, ENABLED, the account is enabled and all
+-- Macie activities are enabled for the account.
+getMacieSessionResponse_status :: Lens.Lens' GetMacieSessionResponse (Prelude.Maybe MacieStatus)
+getMacieSessionResponse_status = Lens.lens (\GetMacieSessionResponse' {status} -> status) (\s@GetMacieSessionResponse' {} a -> s {status = a} :: GetMacieSessionResponse)
+
+-- | The date and time, in UTC and extended ISO 8601 format, of the most
+-- recent change to the status of the Amazon Macie account.
+getMacieSessionResponse_updatedAt :: Lens.Lens' GetMacieSessionResponse (Prelude.Maybe Prelude.UTCTime)
+getMacieSessionResponse_updatedAt = Lens.lens (\GetMacieSessionResponse' {updatedAt} -> updatedAt) (\s@GetMacieSessionResponse' {} a -> s {updatedAt = a} :: GetMacieSessionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+getMacieSessionResponse_httpStatus :: Lens.Lens' GetMacieSessionResponse Prelude.Int
+getMacieSessionResponse_httpStatus = Lens.lens (\GetMacieSessionResponse' {httpStatus} -> httpStatus) (\s@GetMacieSessionResponse' {} a -> s {httpStatus = a} :: GetMacieSessionResponse)
+
+instance Prelude.NFData GetMacieSessionResponse where
+  rnf GetMacieSessionResponse' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf findingPublishingFrequency
+      `Prelude.seq` Prelude.rnf serviceRole
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetMasterAccount.hs b/gen/Amazonka/MacieV2/GetMasterAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetMasterAccount.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.GetMasterAccount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- (Deprecated) Retrieves information about the Amazon Macie administrator
+-- account for an account. This operation has been replaced by the
+-- GetAdministratorAccount operation.
+module Amazonka.MacieV2.GetMasterAccount
+  ( -- * Creating a Request
+    GetMasterAccount (..),
+    newGetMasterAccount,
+
+    -- * Destructuring the Response
+    GetMasterAccountResponse (..),
+    newGetMasterAccountResponse,
+
+    -- * Response Lenses
+    getMasterAccountResponse_master,
+    getMasterAccountResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetMasterAccount' smart constructor.
+data GetMasterAccount = GetMasterAccount'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMasterAccount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetMasterAccount ::
+  GetMasterAccount
+newGetMasterAccount = GetMasterAccount'
+
+instance Core.AWSRequest GetMasterAccount where
+  type
+    AWSResponse GetMasterAccount =
+      GetMasterAccountResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetMasterAccountResponse'
+            Prelude.<$> (x Data..?> "master")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetMasterAccount where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData GetMasterAccount where
+  rnf _ = ()
+
+instance Data.ToHeaders GetMasterAccount where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetMasterAccount where
+  toPath = Prelude.const "/master"
+
+instance Data.ToQuery GetMasterAccount where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetMasterAccountResponse' smart constructor.
+data GetMasterAccountResponse = GetMasterAccountResponse'
+  { -- | (Deprecated) The Amazon Web Services account ID for the administrator
+    -- account. If the accounts are associated by a Macie membership
+    -- invitation, this object also provides details about the invitation that
+    -- was sent to establish the relationship between the accounts.
+    master :: Prelude.Maybe Invitation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMasterAccountResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'master', 'getMasterAccountResponse_master' - (Deprecated) The Amazon Web Services account ID for the administrator
+-- account. If the accounts are associated by a Macie membership
+-- invitation, this object also provides details about the invitation that
+-- was sent to establish the relationship between the accounts.
+--
+-- 'httpStatus', 'getMasterAccountResponse_httpStatus' - The response's http status code.
+newGetMasterAccountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetMasterAccountResponse
+newGetMasterAccountResponse pHttpStatus_ =
+  GetMasterAccountResponse'
+    { master = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | (Deprecated) The Amazon Web Services account ID for the administrator
+-- account. If the accounts are associated by a Macie membership
+-- invitation, this object also provides details about the invitation that
+-- was sent to establish the relationship between the accounts.
+getMasterAccountResponse_master :: Lens.Lens' GetMasterAccountResponse (Prelude.Maybe Invitation)
+getMasterAccountResponse_master = Lens.lens (\GetMasterAccountResponse' {master} -> master) (\s@GetMasterAccountResponse' {} a -> s {master = a} :: GetMasterAccountResponse)
+
+-- | The response's http status code.
+getMasterAccountResponse_httpStatus :: Lens.Lens' GetMasterAccountResponse Prelude.Int
+getMasterAccountResponse_httpStatus = Lens.lens (\GetMasterAccountResponse' {httpStatus} -> httpStatus) (\s@GetMasterAccountResponse' {} a -> s {httpStatus = a} :: GetMasterAccountResponse)
+
+instance Prelude.NFData GetMasterAccountResponse where
+  rnf GetMasterAccountResponse' {..} =
+    Prelude.rnf master
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetMember.hs b/gen/Amazonka/MacieV2/GetMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetMember.hs
@@ -0,0 +1,278 @@
+{-# 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.MacieV2.GetMember
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about an account that\'s associated with an Amazon
+-- Macie administrator account.
+module Amazonka.MacieV2.GetMember
+  ( -- * Creating a Request
+    GetMember (..),
+    newGetMember,
+
+    -- * Request Lenses
+    getMember_id,
+
+    -- * Destructuring the Response
+    GetMemberResponse (..),
+    newGetMemberResponse,
+
+    -- * Response Lenses
+    getMemberResponse_accountId,
+    getMemberResponse_administratorAccountId,
+    getMemberResponse_arn,
+    getMemberResponse_email,
+    getMemberResponse_invitedAt,
+    getMemberResponse_masterAccountId,
+    getMemberResponse_relationshipStatus,
+    getMemberResponse_tags,
+    getMemberResponse_updatedAt,
+    getMemberResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetMember' smart constructor.
+data GetMember = GetMember'
+  { -- | The unique identifier for the Amazon Macie resource that the request
+    -- applies to.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMember' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'getMember_id' - The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+newGetMember ::
+  -- | 'id'
+  Prelude.Text ->
+  GetMember
+newGetMember pId_ = GetMember' {id = pId_}
+
+-- | The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+getMember_id :: Lens.Lens' GetMember Prelude.Text
+getMember_id = Lens.lens (\GetMember' {id} -> id) (\s@GetMember' {} a -> s {id = a} :: GetMember)
+
+instance Core.AWSRequest GetMember where
+  type AWSResponse GetMember = GetMemberResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetMemberResponse'
+            Prelude.<$> (x Data..?> "accountId")
+            Prelude.<*> (x Data..?> "administratorAccountId")
+            Prelude.<*> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "email")
+            Prelude.<*> (x Data..?> "invitedAt")
+            Prelude.<*> (x Data..?> "masterAccountId")
+            Prelude.<*> (x Data..?> "relationshipStatus")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "updatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetMember where
+  hashWithSalt _salt GetMember' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetMember where
+  rnf GetMember' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetMember where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetMember where
+  toPath GetMember' {..} =
+    Prelude.mconcat ["/members/", Data.toBS id]
+
+instance Data.ToQuery GetMember where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetMemberResponse' smart constructor.
+data GetMemberResponse = GetMemberResponse'
+  { -- | The Amazon Web Services account ID for the account.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services account ID for the administrator account.
+    administratorAccountId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the account.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The email address for the account.
+    email :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in UTC and extended ISO 8601 format, when an Amazon
+    -- Macie membership invitation was last sent to the account. This value is
+    -- null if an invitation hasn\'t been sent to the account.
+    invitedAt :: Prelude.Maybe Data.ISO8601,
+    -- | (Deprecated) The Amazon Web Services account ID for the administrator
+    -- account. This property has been replaced by the administratorAccountId
+    -- property and is retained only for backward compatibility.
+    masterAccountId :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the relationship between the account and the
+    -- administrator account.
+    relationshipStatus :: Prelude.Maybe RelationshipStatus,
+    -- | A map of key-value pairs that specifies which tags (keys and values) are
+    -- associated with the account in Amazon Macie.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The date and time, in UTC and extended ISO 8601 format, of the most
+    -- recent change to the status of the relationship between the account and
+    -- the administrator account.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMemberResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'getMemberResponse_accountId' - The Amazon Web Services account ID for the account.
+--
+-- 'administratorAccountId', 'getMemberResponse_administratorAccountId' - The Amazon Web Services account ID for the administrator account.
+--
+-- 'arn', 'getMemberResponse_arn' - The Amazon Resource Name (ARN) of the account.
+--
+-- 'email', 'getMemberResponse_email' - The email address for the account.
+--
+-- 'invitedAt', 'getMemberResponse_invitedAt' - The date and time, in UTC and extended ISO 8601 format, when an Amazon
+-- Macie membership invitation was last sent to the account. This value is
+-- null if an invitation hasn\'t been sent to the account.
+--
+-- 'masterAccountId', 'getMemberResponse_masterAccountId' - (Deprecated) The Amazon Web Services account ID for the administrator
+-- account. This property has been replaced by the administratorAccountId
+-- property and is retained only for backward compatibility.
+--
+-- 'relationshipStatus', 'getMemberResponse_relationshipStatus' - The current status of the relationship between the account and the
+-- administrator account.
+--
+-- 'tags', 'getMemberResponse_tags' - A map of key-value pairs that specifies which tags (keys and values) are
+-- associated with the account in Amazon Macie.
+--
+-- 'updatedAt', 'getMemberResponse_updatedAt' - The date and time, in UTC and extended ISO 8601 format, of the most
+-- recent change to the status of the relationship between the account and
+-- the administrator account.
+--
+-- 'httpStatus', 'getMemberResponse_httpStatus' - The response's http status code.
+newGetMemberResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetMemberResponse
+newGetMemberResponse pHttpStatus_ =
+  GetMemberResponse'
+    { accountId = Prelude.Nothing,
+      administratorAccountId = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      email = Prelude.Nothing,
+      invitedAt = Prelude.Nothing,
+      masterAccountId = Prelude.Nothing,
+      relationshipStatus = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Web Services account ID for the account.
+getMemberResponse_accountId :: Lens.Lens' GetMemberResponse (Prelude.Maybe Prelude.Text)
+getMemberResponse_accountId = Lens.lens (\GetMemberResponse' {accountId} -> accountId) (\s@GetMemberResponse' {} a -> s {accountId = a} :: GetMemberResponse)
+
+-- | The Amazon Web Services account ID for the administrator account.
+getMemberResponse_administratorAccountId :: Lens.Lens' GetMemberResponse (Prelude.Maybe Prelude.Text)
+getMemberResponse_administratorAccountId = Lens.lens (\GetMemberResponse' {administratorAccountId} -> administratorAccountId) (\s@GetMemberResponse' {} a -> s {administratorAccountId = a} :: GetMemberResponse)
+
+-- | The Amazon Resource Name (ARN) of the account.
+getMemberResponse_arn :: Lens.Lens' GetMemberResponse (Prelude.Maybe Prelude.Text)
+getMemberResponse_arn = Lens.lens (\GetMemberResponse' {arn} -> arn) (\s@GetMemberResponse' {} a -> s {arn = a} :: GetMemberResponse)
+
+-- | The email address for the account.
+getMemberResponse_email :: Lens.Lens' GetMemberResponse (Prelude.Maybe Prelude.Text)
+getMemberResponse_email = Lens.lens (\GetMemberResponse' {email} -> email) (\s@GetMemberResponse' {} a -> s {email = a} :: GetMemberResponse)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when an Amazon
+-- Macie membership invitation was last sent to the account. This value is
+-- null if an invitation hasn\'t been sent to the account.
+getMemberResponse_invitedAt :: Lens.Lens' GetMemberResponse (Prelude.Maybe Prelude.UTCTime)
+getMemberResponse_invitedAt = Lens.lens (\GetMemberResponse' {invitedAt} -> invitedAt) (\s@GetMemberResponse' {} a -> s {invitedAt = a} :: GetMemberResponse) Prelude.. Lens.mapping Data._Time
+
+-- | (Deprecated) The Amazon Web Services account ID for the administrator
+-- account. This property has been replaced by the administratorAccountId
+-- property and is retained only for backward compatibility.
+getMemberResponse_masterAccountId :: Lens.Lens' GetMemberResponse (Prelude.Maybe Prelude.Text)
+getMemberResponse_masterAccountId = Lens.lens (\GetMemberResponse' {masterAccountId} -> masterAccountId) (\s@GetMemberResponse' {} a -> s {masterAccountId = a} :: GetMemberResponse)
+
+-- | The current status of the relationship between the account and the
+-- administrator account.
+getMemberResponse_relationshipStatus :: Lens.Lens' GetMemberResponse (Prelude.Maybe RelationshipStatus)
+getMemberResponse_relationshipStatus = Lens.lens (\GetMemberResponse' {relationshipStatus} -> relationshipStatus) (\s@GetMemberResponse' {} a -> s {relationshipStatus = a} :: GetMemberResponse)
+
+-- | A map of key-value pairs that specifies which tags (keys and values) are
+-- associated with the account in Amazon Macie.
+getMemberResponse_tags :: Lens.Lens' GetMemberResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getMemberResponse_tags = Lens.lens (\GetMemberResponse' {tags} -> tags) (\s@GetMemberResponse' {} a -> s {tags = a} :: GetMemberResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date and time, in UTC and extended ISO 8601 format, of the most
+-- recent change to the status of the relationship between the account and
+-- the administrator account.
+getMemberResponse_updatedAt :: Lens.Lens' GetMemberResponse (Prelude.Maybe Prelude.UTCTime)
+getMemberResponse_updatedAt = Lens.lens (\GetMemberResponse' {updatedAt} -> updatedAt) (\s@GetMemberResponse' {} a -> s {updatedAt = a} :: GetMemberResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+getMemberResponse_httpStatus :: Lens.Lens' GetMemberResponse Prelude.Int
+getMemberResponse_httpStatus = Lens.lens (\GetMemberResponse' {httpStatus} -> httpStatus) (\s@GetMemberResponse' {} a -> s {httpStatus = a} :: GetMemberResponse)
+
+instance Prelude.NFData GetMemberResponse where
+  rnf GetMemberResponse' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf administratorAccountId
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf email
+      `Prelude.seq` Prelude.rnf invitedAt
+      `Prelude.seq` Prelude.rnf masterAccountId
+      `Prelude.seq` Prelude.rnf relationshipStatus
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetResourceProfile.hs b/gen/Amazonka/MacieV2/GetResourceProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetResourceProfile.hs
@@ -0,0 +1,234 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.GetResourceProfile
+-- 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 (queries) sensitive data discovery statistics and the
+-- sensitivity score for an S3 bucket.
+module Amazonka.MacieV2.GetResourceProfile
+  ( -- * Creating a Request
+    GetResourceProfile (..),
+    newGetResourceProfile,
+
+    -- * Request Lenses
+    getResourceProfile_resourceArn,
+
+    -- * Destructuring the Response
+    GetResourceProfileResponse (..),
+    newGetResourceProfileResponse,
+
+    -- * Response Lenses
+    getResourceProfileResponse_profileUpdatedAt,
+    getResourceProfileResponse_sensitivityScore,
+    getResourceProfileResponse_sensitivityScoreOverridden,
+    getResourceProfileResponse_statistics,
+    getResourceProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetResourceProfile' smart constructor.
+data GetResourceProfile = GetResourceProfile'
+  { -- | The Amazon Resource Name (ARN) of the S3 bucket that the request applies
+    -- to.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetResourceProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getResourceProfile_resourceArn' - The Amazon Resource Name (ARN) of the S3 bucket that the request applies
+-- to.
+newGetResourceProfile ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  GetResourceProfile
+newGetResourceProfile pResourceArn_ =
+  GetResourceProfile' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the S3 bucket that the request applies
+-- to.
+getResourceProfile_resourceArn :: Lens.Lens' GetResourceProfile Prelude.Text
+getResourceProfile_resourceArn = Lens.lens (\GetResourceProfile' {resourceArn} -> resourceArn) (\s@GetResourceProfile' {} a -> s {resourceArn = a} :: GetResourceProfile)
+
+instance Core.AWSRequest GetResourceProfile where
+  type
+    AWSResponse GetResourceProfile =
+      GetResourceProfileResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetResourceProfileResponse'
+            Prelude.<$> (x Data..?> "profileUpdatedAt")
+            Prelude.<*> (x Data..?> "sensitivityScore")
+            Prelude.<*> (x Data..?> "sensitivityScoreOverridden")
+            Prelude.<*> (x Data..?> "statistics")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetResourceProfile where
+  hashWithSalt _salt GetResourceProfile' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData GetResourceProfile where
+  rnf GetResourceProfile' {..} = Prelude.rnf resourceArn
+
+instance Data.ToHeaders GetResourceProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetResourceProfile where
+  toPath = Prelude.const "/resource-profiles"
+
+instance Data.ToQuery GetResourceProfile where
+  toQuery GetResourceProfile' {..} =
+    Prelude.mconcat ["resourceArn" Data.=: resourceArn]
+
+-- | /See:/ 'newGetResourceProfileResponse' smart constructor.
+data GetResourceProfileResponse = GetResourceProfileResponse'
+  { -- | The date and time, in UTC and extended ISO 8601 format, when Amazon
+    -- Macie most recently recalculated sensitive data discovery statistics and
+    -- details for the bucket. If the bucket\'s sensitivity score is calculated
+    -- automatically, this includes the score.
+    profileUpdatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The current sensitivity score for the bucket, ranging from -1 (no
+    -- analysis due to an error) to 100 (sensitive). By default, this score is
+    -- calculated automatically based on the amount of data that Amazon Macie
+    -- has analyzed in the bucket and the amount of sensitive data that Macie
+    -- has found in the bucket.
+    sensitivityScore :: Prelude.Maybe Prelude.Int,
+    -- | Specifies whether the bucket\'s current sensitivity score was set
+    -- manually. If this value is true, the score was manually changed to 100.
+    -- If this value is false, the score was calculated automatically by Amazon
+    -- Macie.
+    sensitivityScoreOverridden :: Prelude.Maybe Prelude.Bool,
+    -- | The sensitive data discovery statistics for the bucket. The statistics
+    -- capture the results of automated sensitive data discovery activities
+    -- that Amazon Macie has performed for the bucket.
+    statistics :: Prelude.Maybe ResourceStatistics,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetResourceProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'profileUpdatedAt', 'getResourceProfileResponse_profileUpdatedAt' - The date and time, in UTC and extended ISO 8601 format, when Amazon
+-- Macie most recently recalculated sensitive data discovery statistics and
+-- details for the bucket. If the bucket\'s sensitivity score is calculated
+-- automatically, this includes the score.
+--
+-- 'sensitivityScore', 'getResourceProfileResponse_sensitivityScore' - The current sensitivity score for the bucket, ranging from -1 (no
+-- analysis due to an error) to 100 (sensitive). By default, this score is
+-- calculated automatically based on the amount of data that Amazon Macie
+-- has analyzed in the bucket and the amount of sensitive data that Macie
+-- has found in the bucket.
+--
+-- 'sensitivityScoreOverridden', 'getResourceProfileResponse_sensitivityScoreOverridden' - Specifies whether the bucket\'s current sensitivity score was set
+-- manually. If this value is true, the score was manually changed to 100.
+-- If this value is false, the score was calculated automatically by Amazon
+-- Macie.
+--
+-- 'statistics', 'getResourceProfileResponse_statistics' - The sensitive data discovery statistics for the bucket. The statistics
+-- capture the results of automated sensitive data discovery activities
+-- that Amazon Macie has performed for the bucket.
+--
+-- 'httpStatus', 'getResourceProfileResponse_httpStatus' - The response's http status code.
+newGetResourceProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetResourceProfileResponse
+newGetResourceProfileResponse pHttpStatus_ =
+  GetResourceProfileResponse'
+    { profileUpdatedAt =
+        Prelude.Nothing,
+      sensitivityScore = Prelude.Nothing,
+      sensitivityScoreOverridden = Prelude.Nothing,
+      statistics = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The date and time, in UTC and extended ISO 8601 format, when Amazon
+-- Macie most recently recalculated sensitive data discovery statistics and
+-- details for the bucket. If the bucket\'s sensitivity score is calculated
+-- automatically, this includes the score.
+getResourceProfileResponse_profileUpdatedAt :: Lens.Lens' GetResourceProfileResponse (Prelude.Maybe Prelude.UTCTime)
+getResourceProfileResponse_profileUpdatedAt = Lens.lens (\GetResourceProfileResponse' {profileUpdatedAt} -> profileUpdatedAt) (\s@GetResourceProfileResponse' {} a -> s {profileUpdatedAt = a} :: GetResourceProfileResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The current sensitivity score for the bucket, ranging from -1 (no
+-- analysis due to an error) to 100 (sensitive). By default, this score is
+-- calculated automatically based on the amount of data that Amazon Macie
+-- has analyzed in the bucket and the amount of sensitive data that Macie
+-- has found in the bucket.
+getResourceProfileResponse_sensitivityScore :: Lens.Lens' GetResourceProfileResponse (Prelude.Maybe Prelude.Int)
+getResourceProfileResponse_sensitivityScore = Lens.lens (\GetResourceProfileResponse' {sensitivityScore} -> sensitivityScore) (\s@GetResourceProfileResponse' {} a -> s {sensitivityScore = a} :: GetResourceProfileResponse)
+
+-- | Specifies whether the bucket\'s current sensitivity score was set
+-- manually. If this value is true, the score was manually changed to 100.
+-- If this value is false, the score was calculated automatically by Amazon
+-- Macie.
+getResourceProfileResponse_sensitivityScoreOverridden :: Lens.Lens' GetResourceProfileResponse (Prelude.Maybe Prelude.Bool)
+getResourceProfileResponse_sensitivityScoreOverridden = Lens.lens (\GetResourceProfileResponse' {sensitivityScoreOverridden} -> sensitivityScoreOverridden) (\s@GetResourceProfileResponse' {} a -> s {sensitivityScoreOverridden = a} :: GetResourceProfileResponse)
+
+-- | The sensitive data discovery statistics for the bucket. The statistics
+-- capture the results of automated sensitive data discovery activities
+-- that Amazon Macie has performed for the bucket.
+getResourceProfileResponse_statistics :: Lens.Lens' GetResourceProfileResponse (Prelude.Maybe ResourceStatistics)
+getResourceProfileResponse_statistics = Lens.lens (\GetResourceProfileResponse' {statistics} -> statistics) (\s@GetResourceProfileResponse' {} a -> s {statistics = a} :: GetResourceProfileResponse)
+
+-- | The response's http status code.
+getResourceProfileResponse_httpStatus :: Lens.Lens' GetResourceProfileResponse Prelude.Int
+getResourceProfileResponse_httpStatus = Lens.lens (\GetResourceProfileResponse' {httpStatus} -> httpStatus) (\s@GetResourceProfileResponse' {} a -> s {httpStatus = a} :: GetResourceProfileResponse)
+
+instance Prelude.NFData GetResourceProfileResponse where
+  rnf GetResourceProfileResponse' {..} =
+    Prelude.rnf profileUpdatedAt
+      `Prelude.seq` Prelude.rnf sensitivityScore
+      `Prelude.seq` Prelude.rnf sensitivityScoreOverridden
+      `Prelude.seq` Prelude.rnf statistics
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetRevealConfiguration.hs b/gen/Amazonka/MacieV2/GetRevealConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetRevealConfiguration.hs
@@ -0,0 +1,148 @@
+{-# 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.MacieV2.GetRevealConfiguration
+-- 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 and configuration settings for retrieving
+-- occurrences of sensitive data reported by findings.
+module Amazonka.MacieV2.GetRevealConfiguration
+  ( -- * Creating a Request
+    GetRevealConfiguration (..),
+    newGetRevealConfiguration,
+
+    -- * Destructuring the Response
+    GetRevealConfigurationResponse (..),
+    newGetRevealConfigurationResponse,
+
+    -- * Response Lenses
+    getRevealConfigurationResponse_configuration,
+    getRevealConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetRevealConfiguration' smart constructor.
+data GetRevealConfiguration = GetRevealConfiguration'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRevealConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetRevealConfiguration ::
+  GetRevealConfiguration
+newGetRevealConfiguration = GetRevealConfiguration'
+
+instance Core.AWSRequest GetRevealConfiguration where
+  type
+    AWSResponse GetRevealConfiguration =
+      GetRevealConfigurationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetRevealConfigurationResponse'
+            Prelude.<$> (x Data..?> "configuration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetRevealConfiguration where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData GetRevealConfiguration where
+  rnf _ = ()
+
+instance Data.ToHeaders GetRevealConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetRevealConfiguration where
+  toPath = Prelude.const "/reveal-configuration"
+
+instance Data.ToQuery GetRevealConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetRevealConfigurationResponse' smart constructor.
+data GetRevealConfigurationResponse = GetRevealConfigurationResponse'
+  { -- | The current configuration settings and the status of the configuration
+    -- for the account.
+    configuration :: Prelude.Maybe RevealConfiguration,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRevealConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configuration', 'getRevealConfigurationResponse_configuration' - The current configuration settings and the status of the configuration
+-- for the account.
+--
+-- 'httpStatus', 'getRevealConfigurationResponse_httpStatus' - The response's http status code.
+newGetRevealConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetRevealConfigurationResponse
+newGetRevealConfigurationResponse pHttpStatus_ =
+  GetRevealConfigurationResponse'
+    { configuration =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The current configuration settings and the status of the configuration
+-- for the account.
+getRevealConfigurationResponse_configuration :: Lens.Lens' GetRevealConfigurationResponse (Prelude.Maybe RevealConfiguration)
+getRevealConfigurationResponse_configuration = Lens.lens (\GetRevealConfigurationResponse' {configuration} -> configuration) (\s@GetRevealConfigurationResponse' {} a -> s {configuration = a} :: GetRevealConfigurationResponse)
+
+-- | The response's http status code.
+getRevealConfigurationResponse_httpStatus :: Lens.Lens' GetRevealConfigurationResponse Prelude.Int
+getRevealConfigurationResponse_httpStatus = Lens.lens (\GetRevealConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetRevealConfigurationResponse' {} a -> s {httpStatus = a} :: GetRevealConfigurationResponse)
+
+instance
+  Prelude.NFData
+    GetRevealConfigurationResponse
+  where
+  rnf GetRevealConfigurationResponse' {..} =
+    Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetSensitiveDataOccurrences.hs b/gen/Amazonka/MacieV2/GetSensitiveDataOccurrences.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetSensitiveDataOccurrences.hs
@@ -0,0 +1,236 @@
+{-# 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.MacieV2.GetSensitiveDataOccurrences
+-- 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 occurrences of sensitive data reported by a finding.
+module Amazonka.MacieV2.GetSensitiveDataOccurrences
+  ( -- * Creating a Request
+    GetSensitiveDataOccurrences (..),
+    newGetSensitiveDataOccurrences,
+
+    -- * Request Lenses
+    getSensitiveDataOccurrences_findingId,
+
+    -- * Destructuring the Response
+    GetSensitiveDataOccurrencesResponse (..),
+    newGetSensitiveDataOccurrencesResponse,
+
+    -- * Response Lenses
+    getSensitiveDataOccurrencesResponse_error,
+    getSensitiveDataOccurrencesResponse_sensitiveDataOccurrences,
+    getSensitiveDataOccurrencesResponse_status,
+    getSensitiveDataOccurrencesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetSensitiveDataOccurrences' smart constructor.
+data GetSensitiveDataOccurrences = GetSensitiveDataOccurrences'
+  { -- | The unique identifier for the finding.
+    findingId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSensitiveDataOccurrences' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'findingId', 'getSensitiveDataOccurrences_findingId' - The unique identifier for the finding.
+newGetSensitiveDataOccurrences ::
+  -- | 'findingId'
+  Prelude.Text ->
+  GetSensitiveDataOccurrences
+newGetSensitiveDataOccurrences pFindingId_ =
+  GetSensitiveDataOccurrences'
+    { findingId =
+        pFindingId_
+    }
+
+-- | The unique identifier for the finding.
+getSensitiveDataOccurrences_findingId :: Lens.Lens' GetSensitiveDataOccurrences Prelude.Text
+getSensitiveDataOccurrences_findingId = Lens.lens (\GetSensitiveDataOccurrences' {findingId} -> findingId) (\s@GetSensitiveDataOccurrences' {} a -> s {findingId = a} :: GetSensitiveDataOccurrences)
+
+instance Core.AWSRequest GetSensitiveDataOccurrences where
+  type
+    AWSResponse GetSensitiveDataOccurrences =
+      GetSensitiveDataOccurrencesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetSensitiveDataOccurrencesResponse'
+            Prelude.<$> (x Data..?> "error")
+            Prelude.<*> ( x
+                            Data..?> "sensitiveDataOccurrences"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetSensitiveDataOccurrences where
+  hashWithSalt _salt GetSensitiveDataOccurrences' {..} =
+    _salt `Prelude.hashWithSalt` findingId
+
+instance Prelude.NFData GetSensitiveDataOccurrences where
+  rnf GetSensitiveDataOccurrences' {..} =
+    Prelude.rnf findingId
+
+instance Data.ToHeaders GetSensitiveDataOccurrences where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetSensitiveDataOccurrences where
+  toPath GetSensitiveDataOccurrences' {..} =
+    Prelude.mconcat
+      ["/findings/", Data.toBS findingId, "/reveal"]
+
+instance Data.ToQuery GetSensitiveDataOccurrences where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetSensitiveDataOccurrencesResponse' smart constructor.
+data GetSensitiveDataOccurrencesResponse = GetSensitiveDataOccurrencesResponse'
+  { -- | If an error occurred when Amazon Macie attempted to retrieve occurrences
+    -- of sensitive data reported by the finding, a description of the error
+    -- that occurred. This value is null if the status (status) of the request
+    -- is PROCESSING or SUCCESS.
+    error :: Prelude.Maybe Prelude.Text,
+    -- | A map that specifies 1-100 types of sensitive data reported by the
+    -- finding and, for each type, 1-10 occurrences of sensitive data.
+    sensitiveDataOccurrences :: Prelude.Maybe (Prelude.HashMap Prelude.Text [DetectedDataDetails]),
+    -- | The status of the request to retrieve occurrences of sensitive data
+    -- reported by the finding. Possible values are:
+    --
+    -- -   ERROR - An error occurred when Amazon Macie attempted to locate,
+    --     retrieve, or encrypt the sensitive data. The error value indicates
+    --     the nature of the error that occurred.
+    --
+    -- -   PROCESSING - Macie is processing the request.
+    --
+    -- -   SUCCESS - Macie successfully located, retrieved, and encrypted the
+    --     sensitive data.
+    status :: Prelude.Maybe RevealRequestStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSensitiveDataOccurrencesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'error', 'getSensitiveDataOccurrencesResponse_error' - If an error occurred when Amazon Macie attempted to retrieve occurrences
+-- of sensitive data reported by the finding, a description of the error
+-- that occurred. This value is null if the status (status) of the request
+-- is PROCESSING or SUCCESS.
+--
+-- 'sensitiveDataOccurrences', 'getSensitiveDataOccurrencesResponse_sensitiveDataOccurrences' - A map that specifies 1-100 types of sensitive data reported by the
+-- finding and, for each type, 1-10 occurrences of sensitive data.
+--
+-- 'status', 'getSensitiveDataOccurrencesResponse_status' - The status of the request to retrieve occurrences of sensitive data
+-- reported by the finding. Possible values are:
+--
+-- -   ERROR - An error occurred when Amazon Macie attempted to locate,
+--     retrieve, or encrypt the sensitive data. The error value indicates
+--     the nature of the error that occurred.
+--
+-- -   PROCESSING - Macie is processing the request.
+--
+-- -   SUCCESS - Macie successfully located, retrieved, and encrypted the
+--     sensitive data.
+--
+-- 'httpStatus', 'getSensitiveDataOccurrencesResponse_httpStatus' - The response's http status code.
+newGetSensitiveDataOccurrencesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetSensitiveDataOccurrencesResponse
+newGetSensitiveDataOccurrencesResponse pHttpStatus_ =
+  GetSensitiveDataOccurrencesResponse'
+    { error =
+        Prelude.Nothing,
+      sensitiveDataOccurrences =
+        Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If an error occurred when Amazon Macie attempted to retrieve occurrences
+-- of sensitive data reported by the finding, a description of the error
+-- that occurred. This value is null if the status (status) of the request
+-- is PROCESSING or SUCCESS.
+getSensitiveDataOccurrencesResponse_error :: Lens.Lens' GetSensitiveDataOccurrencesResponse (Prelude.Maybe Prelude.Text)
+getSensitiveDataOccurrencesResponse_error = Lens.lens (\GetSensitiveDataOccurrencesResponse' {error} -> error) (\s@GetSensitiveDataOccurrencesResponse' {} a -> s {error = a} :: GetSensitiveDataOccurrencesResponse)
+
+-- | A map that specifies 1-100 types of sensitive data reported by the
+-- finding and, for each type, 1-10 occurrences of sensitive data.
+getSensitiveDataOccurrencesResponse_sensitiveDataOccurrences :: Lens.Lens' GetSensitiveDataOccurrencesResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text [DetectedDataDetails]))
+getSensitiveDataOccurrencesResponse_sensitiveDataOccurrences = Lens.lens (\GetSensitiveDataOccurrencesResponse' {sensitiveDataOccurrences} -> sensitiveDataOccurrences) (\s@GetSensitiveDataOccurrencesResponse' {} a -> s {sensitiveDataOccurrences = a} :: GetSensitiveDataOccurrencesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the request to retrieve occurrences of sensitive data
+-- reported by the finding. Possible values are:
+--
+-- -   ERROR - An error occurred when Amazon Macie attempted to locate,
+--     retrieve, or encrypt the sensitive data. The error value indicates
+--     the nature of the error that occurred.
+--
+-- -   PROCESSING - Macie is processing the request.
+--
+-- -   SUCCESS - Macie successfully located, retrieved, and encrypted the
+--     sensitive data.
+getSensitiveDataOccurrencesResponse_status :: Lens.Lens' GetSensitiveDataOccurrencesResponse (Prelude.Maybe RevealRequestStatus)
+getSensitiveDataOccurrencesResponse_status = Lens.lens (\GetSensitiveDataOccurrencesResponse' {status} -> status) (\s@GetSensitiveDataOccurrencesResponse' {} a -> s {status = a} :: GetSensitiveDataOccurrencesResponse)
+
+-- | The response's http status code.
+getSensitiveDataOccurrencesResponse_httpStatus :: Lens.Lens' GetSensitiveDataOccurrencesResponse Prelude.Int
+getSensitiveDataOccurrencesResponse_httpStatus = Lens.lens (\GetSensitiveDataOccurrencesResponse' {httpStatus} -> httpStatus) (\s@GetSensitiveDataOccurrencesResponse' {} a -> s {httpStatus = a} :: GetSensitiveDataOccurrencesResponse)
+
+instance
+  Prelude.NFData
+    GetSensitiveDataOccurrencesResponse
+  where
+  rnf GetSensitiveDataOccurrencesResponse' {..} =
+    Prelude.rnf error
+      `Prelude.seq` Prelude.rnf sensitiveDataOccurrences
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetSensitiveDataOccurrencesAvailability.hs b/gen/Amazonka/MacieV2/GetSensitiveDataOccurrencesAvailability.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetSensitiveDataOccurrencesAvailability.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.MacieV2.GetSensitiveDataOccurrencesAvailability
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Checks whether occurrences of sensitive data can be retrieved for a
+-- finding.
+module Amazonka.MacieV2.GetSensitiveDataOccurrencesAvailability
+  ( -- * Creating a Request
+    GetSensitiveDataOccurrencesAvailability (..),
+    newGetSensitiveDataOccurrencesAvailability,
+
+    -- * Request Lenses
+    getSensitiveDataOccurrencesAvailability_findingId,
+
+    -- * Destructuring the Response
+    GetSensitiveDataOccurrencesAvailabilityResponse (..),
+    newGetSensitiveDataOccurrencesAvailabilityResponse,
+
+    -- * Response Lenses
+    getSensitiveDataOccurrencesAvailabilityResponse_code,
+    getSensitiveDataOccurrencesAvailabilityResponse_reasons,
+    getSensitiveDataOccurrencesAvailabilityResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetSensitiveDataOccurrencesAvailability' smart constructor.
+data GetSensitiveDataOccurrencesAvailability = GetSensitiveDataOccurrencesAvailability'
+  { -- | The unique identifier for the finding.
+    findingId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSensitiveDataOccurrencesAvailability' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'findingId', 'getSensitiveDataOccurrencesAvailability_findingId' - The unique identifier for the finding.
+newGetSensitiveDataOccurrencesAvailability ::
+  -- | 'findingId'
+  Prelude.Text ->
+  GetSensitiveDataOccurrencesAvailability
+newGetSensitiveDataOccurrencesAvailability
+  pFindingId_ =
+    GetSensitiveDataOccurrencesAvailability'
+      { findingId =
+          pFindingId_
+      }
+
+-- | The unique identifier for the finding.
+getSensitiveDataOccurrencesAvailability_findingId :: Lens.Lens' GetSensitiveDataOccurrencesAvailability Prelude.Text
+getSensitiveDataOccurrencesAvailability_findingId = Lens.lens (\GetSensitiveDataOccurrencesAvailability' {findingId} -> findingId) (\s@GetSensitiveDataOccurrencesAvailability' {} a -> s {findingId = a} :: GetSensitiveDataOccurrencesAvailability)
+
+instance
+  Core.AWSRequest
+    GetSensitiveDataOccurrencesAvailability
+  where
+  type
+    AWSResponse
+      GetSensitiveDataOccurrencesAvailability =
+      GetSensitiveDataOccurrencesAvailabilityResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetSensitiveDataOccurrencesAvailabilityResponse'
+            Prelude.<$> (x Data..?> "code")
+            Prelude.<*> (x Data..?> "reasons" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetSensitiveDataOccurrencesAvailability
+  where
+  hashWithSalt
+    _salt
+    GetSensitiveDataOccurrencesAvailability' {..} =
+      _salt `Prelude.hashWithSalt` findingId
+
+instance
+  Prelude.NFData
+    GetSensitiveDataOccurrencesAvailability
+  where
+  rnf GetSensitiveDataOccurrencesAvailability' {..} =
+    Prelude.rnf findingId
+
+instance
+  Data.ToHeaders
+    GetSensitiveDataOccurrencesAvailability
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToPath
+    GetSensitiveDataOccurrencesAvailability
+  where
+  toPath GetSensitiveDataOccurrencesAvailability' {..} =
+    Prelude.mconcat
+      [ "/findings/",
+        Data.toBS findingId,
+        "/reveal/availability"
+      ]
+
+instance
+  Data.ToQuery
+    GetSensitiveDataOccurrencesAvailability
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetSensitiveDataOccurrencesAvailabilityResponse' smart constructor.
+data GetSensitiveDataOccurrencesAvailabilityResponse = GetSensitiveDataOccurrencesAvailabilityResponse'
+  { -- | Specifies whether occurrences of sensitive data can be retrieved for the
+    -- finding. Possible values are: AVAILABLE, the sensitive data can be
+    -- retrieved; and, UNAVAILABLE, the sensitive data can\'t be retrieved. If
+    -- this value is UNAVAILABLE, the reasons array indicates why the data
+    -- can\'t be retrieved.
+    code :: Prelude.Maybe AvailabilityCode,
+    -- | Specifies why occurrences of sensitive data can\'t be retrieved for the
+    -- finding. Possible values are:
+    --
+    -- -   INVALID_CLASSIFICATION_RESULT - Amazon Macie can\'t verify the
+    --     location of the sensitive data to retrieve. There isn\'t a
+    --     corresponding sensitive data discovery result for the finding. Or
+    --     the sensitive data discovery result specified by the
+    --     ClassificationDetails.detailedResultsLocation field of the finding
+    --     isn\'t available, is malformed or corrupted, or uses an unsupported
+    --     storage format.
+    --
+    -- -   OBJECT_EXCEEDS_SIZE_QUOTA - The storage size of the affected S3
+    --     object exceeds the size quota for retrieving occurrences of
+    --     sensitive data.
+    --
+    -- -   OBJECT_UNAVAILABLE - The affected S3 object isn\'t available. The
+    --     object might have been renamed, moved, or deleted. Or the object was
+    --     changed after Macie created the finding.
+    --
+    -- -   UNSUPPORTED_FINDING_TYPE - The specified finding isn\'t a sensitive
+    --     data finding.
+    --
+    -- -   UNSUPPORTED_OBJECT_TYPE - The affected S3 object uses a file or
+    --     storage format that Macie doesn\'t support for retrieving
+    --     occurrences of sensitive data.
+    --
+    -- This value is null if sensitive data can be retrieved for the finding.
+    reasons :: Prelude.Maybe [UnavailabilityReasonCode],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSensitiveDataOccurrencesAvailabilityResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getSensitiveDataOccurrencesAvailabilityResponse_code' - Specifies whether occurrences of sensitive data can be retrieved for the
+-- finding. Possible values are: AVAILABLE, the sensitive data can be
+-- retrieved; and, UNAVAILABLE, the sensitive data can\'t be retrieved. If
+-- this value is UNAVAILABLE, the reasons array indicates why the data
+-- can\'t be retrieved.
+--
+-- 'reasons', 'getSensitiveDataOccurrencesAvailabilityResponse_reasons' - Specifies why occurrences of sensitive data can\'t be retrieved for the
+-- finding. Possible values are:
+--
+-- -   INVALID_CLASSIFICATION_RESULT - Amazon Macie can\'t verify the
+--     location of the sensitive data to retrieve. There isn\'t a
+--     corresponding sensitive data discovery result for the finding. Or
+--     the sensitive data discovery result specified by the
+--     ClassificationDetails.detailedResultsLocation field of the finding
+--     isn\'t available, is malformed or corrupted, or uses an unsupported
+--     storage format.
+--
+-- -   OBJECT_EXCEEDS_SIZE_QUOTA - The storage size of the affected S3
+--     object exceeds the size quota for retrieving occurrences of
+--     sensitive data.
+--
+-- -   OBJECT_UNAVAILABLE - The affected S3 object isn\'t available. The
+--     object might have been renamed, moved, or deleted. Or the object was
+--     changed after Macie created the finding.
+--
+-- -   UNSUPPORTED_FINDING_TYPE - The specified finding isn\'t a sensitive
+--     data finding.
+--
+-- -   UNSUPPORTED_OBJECT_TYPE - The affected S3 object uses a file or
+--     storage format that Macie doesn\'t support for retrieving
+--     occurrences of sensitive data.
+--
+-- This value is null if sensitive data can be retrieved for the finding.
+--
+-- 'httpStatus', 'getSensitiveDataOccurrencesAvailabilityResponse_httpStatus' - The response's http status code.
+newGetSensitiveDataOccurrencesAvailabilityResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetSensitiveDataOccurrencesAvailabilityResponse
+newGetSensitiveDataOccurrencesAvailabilityResponse
+  pHttpStatus_ =
+    GetSensitiveDataOccurrencesAvailabilityResponse'
+      { code =
+          Prelude.Nothing,
+        reasons = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Specifies whether occurrences of sensitive data can be retrieved for the
+-- finding. Possible values are: AVAILABLE, the sensitive data can be
+-- retrieved; and, UNAVAILABLE, the sensitive data can\'t be retrieved. If
+-- this value is UNAVAILABLE, the reasons array indicates why the data
+-- can\'t be retrieved.
+getSensitiveDataOccurrencesAvailabilityResponse_code :: Lens.Lens' GetSensitiveDataOccurrencesAvailabilityResponse (Prelude.Maybe AvailabilityCode)
+getSensitiveDataOccurrencesAvailabilityResponse_code = Lens.lens (\GetSensitiveDataOccurrencesAvailabilityResponse' {code} -> code) (\s@GetSensitiveDataOccurrencesAvailabilityResponse' {} a -> s {code = a} :: GetSensitiveDataOccurrencesAvailabilityResponse)
+
+-- | Specifies why occurrences of sensitive data can\'t be retrieved for the
+-- finding. Possible values are:
+--
+-- -   INVALID_CLASSIFICATION_RESULT - Amazon Macie can\'t verify the
+--     location of the sensitive data to retrieve. There isn\'t a
+--     corresponding sensitive data discovery result for the finding. Or
+--     the sensitive data discovery result specified by the
+--     ClassificationDetails.detailedResultsLocation field of the finding
+--     isn\'t available, is malformed or corrupted, or uses an unsupported
+--     storage format.
+--
+-- -   OBJECT_EXCEEDS_SIZE_QUOTA - The storage size of the affected S3
+--     object exceeds the size quota for retrieving occurrences of
+--     sensitive data.
+--
+-- -   OBJECT_UNAVAILABLE - The affected S3 object isn\'t available. The
+--     object might have been renamed, moved, or deleted. Or the object was
+--     changed after Macie created the finding.
+--
+-- -   UNSUPPORTED_FINDING_TYPE - The specified finding isn\'t a sensitive
+--     data finding.
+--
+-- -   UNSUPPORTED_OBJECT_TYPE - The affected S3 object uses a file or
+--     storage format that Macie doesn\'t support for retrieving
+--     occurrences of sensitive data.
+--
+-- This value is null if sensitive data can be retrieved for the finding.
+getSensitiveDataOccurrencesAvailabilityResponse_reasons :: Lens.Lens' GetSensitiveDataOccurrencesAvailabilityResponse (Prelude.Maybe [UnavailabilityReasonCode])
+getSensitiveDataOccurrencesAvailabilityResponse_reasons = Lens.lens (\GetSensitiveDataOccurrencesAvailabilityResponse' {reasons} -> reasons) (\s@GetSensitiveDataOccurrencesAvailabilityResponse' {} a -> s {reasons = a} :: GetSensitiveDataOccurrencesAvailabilityResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getSensitiveDataOccurrencesAvailabilityResponse_httpStatus :: Lens.Lens' GetSensitiveDataOccurrencesAvailabilityResponse Prelude.Int
+getSensitiveDataOccurrencesAvailabilityResponse_httpStatus = Lens.lens (\GetSensitiveDataOccurrencesAvailabilityResponse' {httpStatus} -> httpStatus) (\s@GetSensitiveDataOccurrencesAvailabilityResponse' {} a -> s {httpStatus = a} :: GetSensitiveDataOccurrencesAvailabilityResponse)
+
+instance
+  Prelude.NFData
+    GetSensitiveDataOccurrencesAvailabilityResponse
+  where
+  rnf
+    GetSensitiveDataOccurrencesAvailabilityResponse' {..} =
+      Prelude.rnf code
+        `Prelude.seq` Prelude.rnf reasons
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetSensitivityInspectionTemplate.hs b/gen/Amazonka/MacieV2/GetSensitivityInspectionTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetSensitivityInspectionTemplate.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.GetSensitivityInspectionTemplate
+-- 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 settings for the sensitivity inspection template for an
+-- account.
+module Amazonka.MacieV2.GetSensitivityInspectionTemplate
+  ( -- * Creating a Request
+    GetSensitivityInspectionTemplate (..),
+    newGetSensitivityInspectionTemplate,
+
+    -- * Request Lenses
+    getSensitivityInspectionTemplate_id,
+
+    -- * Destructuring the Response
+    GetSensitivityInspectionTemplateResponse (..),
+    newGetSensitivityInspectionTemplateResponse,
+
+    -- * Response Lenses
+    getSensitivityInspectionTemplateResponse_description,
+    getSensitivityInspectionTemplateResponse_excludes,
+    getSensitivityInspectionTemplateResponse_includes,
+    getSensitivityInspectionTemplateResponse_name,
+    getSensitivityInspectionTemplateResponse_sensitivityInspectionTemplateId,
+    getSensitivityInspectionTemplateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetSensitivityInspectionTemplate' smart constructor.
+data GetSensitivityInspectionTemplate = GetSensitivityInspectionTemplate'
+  { -- | The unique identifier for the Amazon Macie resource that the request
+    -- applies to.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSensitivityInspectionTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'getSensitivityInspectionTemplate_id' - The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+newGetSensitivityInspectionTemplate ::
+  -- | 'id'
+  Prelude.Text ->
+  GetSensitivityInspectionTemplate
+newGetSensitivityInspectionTemplate pId_ =
+  GetSensitivityInspectionTemplate' {id = pId_}
+
+-- | The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+getSensitivityInspectionTemplate_id :: Lens.Lens' GetSensitivityInspectionTemplate Prelude.Text
+getSensitivityInspectionTemplate_id = Lens.lens (\GetSensitivityInspectionTemplate' {id} -> id) (\s@GetSensitivityInspectionTemplate' {} a -> s {id = a} :: GetSensitivityInspectionTemplate)
+
+instance
+  Core.AWSRequest
+    GetSensitivityInspectionTemplate
+  where
+  type
+    AWSResponse GetSensitivityInspectionTemplate =
+      GetSensitivityInspectionTemplateResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetSensitivityInspectionTemplateResponse'
+            Prelude.<$> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "excludes")
+            Prelude.<*> (x Data..?> "includes")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "sensitivityInspectionTemplateId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetSensitivityInspectionTemplate
+  where
+  hashWithSalt
+    _salt
+    GetSensitivityInspectionTemplate' {..} =
+      _salt `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    GetSensitivityInspectionTemplate
+  where
+  rnf GetSensitivityInspectionTemplate' {..} =
+    Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    GetSensitivityInspectionTemplate
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetSensitivityInspectionTemplate where
+  toPath GetSensitivityInspectionTemplate' {..} =
+    Prelude.mconcat
+      ["/templates/sensitivity-inspections/", Data.toBS id]
+
+instance
+  Data.ToQuery
+    GetSensitivityInspectionTemplate
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetSensitivityInspectionTemplateResponse' smart constructor.
+data GetSensitivityInspectionTemplateResponse = GetSensitivityInspectionTemplateResponse'
+  { -- | The custom description of the template.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The managed data identifiers that are explicitly excluded (not used)
+    -- when analyzing data.
+    excludes :: Prelude.Maybe SensitivityInspectionTemplateExcludes,
+    -- | The allow lists, custom data identifiers, and managed data identifiers
+    -- that are included (used) when analyzing data.
+    includes :: Prelude.Maybe SensitivityInspectionTemplateIncludes,
+    -- | The name of the template.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the template.
+    sensitivityInspectionTemplateId :: 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 'GetSensitivityInspectionTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getSensitivityInspectionTemplateResponse_description' - The custom description of the template.
+--
+-- 'excludes', 'getSensitivityInspectionTemplateResponse_excludes' - The managed data identifiers that are explicitly excluded (not used)
+-- when analyzing data.
+--
+-- 'includes', 'getSensitivityInspectionTemplateResponse_includes' - The allow lists, custom data identifiers, and managed data identifiers
+-- that are included (used) when analyzing data.
+--
+-- 'name', 'getSensitivityInspectionTemplateResponse_name' - The name of the template.
+--
+-- 'sensitivityInspectionTemplateId', 'getSensitivityInspectionTemplateResponse_sensitivityInspectionTemplateId' - The unique identifier for the template.
+--
+-- 'httpStatus', 'getSensitivityInspectionTemplateResponse_httpStatus' - The response's http status code.
+newGetSensitivityInspectionTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetSensitivityInspectionTemplateResponse
+newGetSensitivityInspectionTemplateResponse
+  pHttpStatus_ =
+    GetSensitivityInspectionTemplateResponse'
+      { description =
+          Prelude.Nothing,
+        excludes = Prelude.Nothing,
+        includes = Prelude.Nothing,
+        name = Prelude.Nothing,
+        sensitivityInspectionTemplateId =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The custom description of the template.
+getSensitivityInspectionTemplateResponse_description :: Lens.Lens' GetSensitivityInspectionTemplateResponse (Prelude.Maybe Prelude.Text)
+getSensitivityInspectionTemplateResponse_description = Lens.lens (\GetSensitivityInspectionTemplateResponse' {description} -> description) (\s@GetSensitivityInspectionTemplateResponse' {} a -> s {description = a} :: GetSensitivityInspectionTemplateResponse)
+
+-- | The managed data identifiers that are explicitly excluded (not used)
+-- when analyzing data.
+getSensitivityInspectionTemplateResponse_excludes :: Lens.Lens' GetSensitivityInspectionTemplateResponse (Prelude.Maybe SensitivityInspectionTemplateExcludes)
+getSensitivityInspectionTemplateResponse_excludes = Lens.lens (\GetSensitivityInspectionTemplateResponse' {excludes} -> excludes) (\s@GetSensitivityInspectionTemplateResponse' {} a -> s {excludes = a} :: GetSensitivityInspectionTemplateResponse)
+
+-- | The allow lists, custom data identifiers, and managed data identifiers
+-- that are included (used) when analyzing data.
+getSensitivityInspectionTemplateResponse_includes :: Lens.Lens' GetSensitivityInspectionTemplateResponse (Prelude.Maybe SensitivityInspectionTemplateIncludes)
+getSensitivityInspectionTemplateResponse_includes = Lens.lens (\GetSensitivityInspectionTemplateResponse' {includes} -> includes) (\s@GetSensitivityInspectionTemplateResponse' {} a -> s {includes = a} :: GetSensitivityInspectionTemplateResponse)
+
+-- | The name of the template.
+getSensitivityInspectionTemplateResponse_name :: Lens.Lens' GetSensitivityInspectionTemplateResponse (Prelude.Maybe Prelude.Text)
+getSensitivityInspectionTemplateResponse_name = Lens.lens (\GetSensitivityInspectionTemplateResponse' {name} -> name) (\s@GetSensitivityInspectionTemplateResponse' {} a -> s {name = a} :: GetSensitivityInspectionTemplateResponse)
+
+-- | The unique identifier for the template.
+getSensitivityInspectionTemplateResponse_sensitivityInspectionTemplateId :: Lens.Lens' GetSensitivityInspectionTemplateResponse (Prelude.Maybe Prelude.Text)
+getSensitivityInspectionTemplateResponse_sensitivityInspectionTemplateId = Lens.lens (\GetSensitivityInspectionTemplateResponse' {sensitivityInspectionTemplateId} -> sensitivityInspectionTemplateId) (\s@GetSensitivityInspectionTemplateResponse' {} a -> s {sensitivityInspectionTemplateId = a} :: GetSensitivityInspectionTemplateResponse)
+
+-- | The response's http status code.
+getSensitivityInspectionTemplateResponse_httpStatus :: Lens.Lens' GetSensitivityInspectionTemplateResponse Prelude.Int
+getSensitivityInspectionTemplateResponse_httpStatus = Lens.lens (\GetSensitivityInspectionTemplateResponse' {httpStatus} -> httpStatus) (\s@GetSensitivityInspectionTemplateResponse' {} a -> s {httpStatus = a} :: GetSensitivityInspectionTemplateResponse)
+
+instance
+  Prelude.NFData
+    GetSensitivityInspectionTemplateResponse
+  where
+  rnf GetSensitivityInspectionTemplateResponse' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf excludes
+      `Prelude.seq` Prelude.rnf includes
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf sensitivityInspectionTemplateId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetUsageStatistics.hs b/gen/Amazonka/MacieV2/GetUsageStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetUsageStatistics.hs
@@ -0,0 +1,304 @@
+{-# 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.MacieV2.GetUsageStatistics
+-- 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 (queries) quotas and aggregated usage data for one or more
+-- accounts.
+--
+-- This operation returns paginated results.
+module Amazonka.MacieV2.GetUsageStatistics
+  ( -- * Creating a Request
+    GetUsageStatistics (..),
+    newGetUsageStatistics,
+
+    -- * Request Lenses
+    getUsageStatistics_filterBy,
+    getUsageStatistics_maxResults,
+    getUsageStatistics_nextToken,
+    getUsageStatistics_sortBy,
+    getUsageStatistics_timeRange,
+
+    -- * Destructuring the Response
+    GetUsageStatisticsResponse (..),
+    newGetUsageStatisticsResponse,
+
+    -- * Response Lenses
+    getUsageStatisticsResponse_nextToken,
+    getUsageStatisticsResponse_records,
+    getUsageStatisticsResponse_timeRange,
+    getUsageStatisticsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetUsageStatistics' smart constructor.
+data GetUsageStatistics = GetUsageStatistics'
+  { -- | An array of objects, one for each condition to use to filter the query
+    -- results. If you specify more than one condition, Amazon Macie uses an
+    -- AND operator to join the conditions.
+    filterBy :: Prelude.Maybe [UsageStatisticsFilter],
+    -- | The maximum number of items to include in each page of the response.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The nextToken string that specifies which page of results to return in a
+    -- paginated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The criteria to use to sort the query results.
+    sortBy :: Prelude.Maybe UsageStatisticsSortBy,
+    -- | The inclusive time period to query usage data for. Valid values are:
+    -- MONTH_TO_DATE, for the current calendar month to date; and,
+    -- PAST_30_DAYS, for the preceding 30 days. If you don\'t specify a value,
+    -- Amazon Macie provides usage data for the preceding 30 days.
+    timeRange :: Prelude.Maybe TimeRange
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetUsageStatistics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filterBy', 'getUsageStatistics_filterBy' - An array of objects, one for each condition to use to filter the query
+-- results. If you specify more than one condition, Amazon Macie uses an
+-- AND operator to join the conditions.
+--
+-- 'maxResults', 'getUsageStatistics_maxResults' - The maximum number of items to include in each page of the response.
+--
+-- 'nextToken', 'getUsageStatistics_nextToken' - The nextToken string that specifies which page of results to return in a
+-- paginated response.
+--
+-- 'sortBy', 'getUsageStatistics_sortBy' - The criteria to use to sort the query results.
+--
+-- 'timeRange', 'getUsageStatistics_timeRange' - The inclusive time period to query usage data for. Valid values are:
+-- MONTH_TO_DATE, for the current calendar month to date; and,
+-- PAST_30_DAYS, for the preceding 30 days. If you don\'t specify a value,
+-- Amazon Macie provides usage data for the preceding 30 days.
+newGetUsageStatistics ::
+  GetUsageStatistics
+newGetUsageStatistics =
+  GetUsageStatistics'
+    { filterBy = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortBy = Prelude.Nothing,
+      timeRange = Prelude.Nothing
+    }
+
+-- | An array of objects, one for each condition to use to filter the query
+-- results. If you specify more than one condition, Amazon Macie uses an
+-- AND operator to join the conditions.
+getUsageStatistics_filterBy :: Lens.Lens' GetUsageStatistics (Prelude.Maybe [UsageStatisticsFilter])
+getUsageStatistics_filterBy = Lens.lens (\GetUsageStatistics' {filterBy} -> filterBy) (\s@GetUsageStatistics' {} a -> s {filterBy = a} :: GetUsageStatistics) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of items to include in each page of the response.
+getUsageStatistics_maxResults :: Lens.Lens' GetUsageStatistics (Prelude.Maybe Prelude.Int)
+getUsageStatistics_maxResults = Lens.lens (\GetUsageStatistics' {maxResults} -> maxResults) (\s@GetUsageStatistics' {} a -> s {maxResults = a} :: GetUsageStatistics)
+
+-- | The nextToken string that specifies which page of results to return in a
+-- paginated response.
+getUsageStatistics_nextToken :: Lens.Lens' GetUsageStatistics (Prelude.Maybe Prelude.Text)
+getUsageStatistics_nextToken = Lens.lens (\GetUsageStatistics' {nextToken} -> nextToken) (\s@GetUsageStatistics' {} a -> s {nextToken = a} :: GetUsageStatistics)
+
+-- | The criteria to use to sort the query results.
+getUsageStatistics_sortBy :: Lens.Lens' GetUsageStatistics (Prelude.Maybe UsageStatisticsSortBy)
+getUsageStatistics_sortBy = Lens.lens (\GetUsageStatistics' {sortBy} -> sortBy) (\s@GetUsageStatistics' {} a -> s {sortBy = a} :: GetUsageStatistics)
+
+-- | The inclusive time period to query usage data for. Valid values are:
+-- MONTH_TO_DATE, for the current calendar month to date; and,
+-- PAST_30_DAYS, for the preceding 30 days. If you don\'t specify a value,
+-- Amazon Macie provides usage data for the preceding 30 days.
+getUsageStatistics_timeRange :: Lens.Lens' GetUsageStatistics (Prelude.Maybe TimeRange)
+getUsageStatistics_timeRange = Lens.lens (\GetUsageStatistics' {timeRange} -> timeRange) (\s@GetUsageStatistics' {} a -> s {timeRange = a} :: GetUsageStatistics)
+
+instance Core.AWSPager GetUsageStatistics where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getUsageStatisticsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getUsageStatisticsResponse_records
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getUsageStatistics_nextToken
+          Lens..~ rs
+          Lens.^? getUsageStatisticsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetUsageStatistics where
+  type
+    AWSResponse GetUsageStatistics =
+      GetUsageStatisticsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetUsageStatisticsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "records" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "timeRange")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetUsageStatistics where
+  hashWithSalt _salt GetUsageStatistics' {..} =
+    _salt
+      `Prelude.hashWithSalt` filterBy
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortBy
+      `Prelude.hashWithSalt` timeRange
+
+instance Prelude.NFData GetUsageStatistics where
+  rnf GetUsageStatistics' {..} =
+    Prelude.rnf filterBy
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortBy
+      `Prelude.seq` Prelude.rnf timeRange
+
+instance Data.ToHeaders GetUsageStatistics where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetUsageStatistics where
+  toJSON GetUsageStatistics' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filterBy" Data..=) Prelude.<$> filterBy,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("sortBy" Data..=) Prelude.<$> sortBy,
+            ("timeRange" Data..=) Prelude.<$> timeRange
+          ]
+      )
+
+instance Data.ToPath GetUsageStatistics where
+  toPath = Prelude.const "/usage/statistics"
+
+instance Data.ToQuery GetUsageStatistics where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetUsageStatisticsResponse' smart constructor.
+data GetUsageStatisticsResponse = GetUsageStatisticsResponse'
+  { -- | The string to use in a subsequent request to get the next page of
+    -- results in a paginated response. This value is null if there are no
+    -- additional pages.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of objects that contains the results of the query. Each object
+    -- contains the data for an account that matches the filter criteria
+    -- specified in the request.
+    records :: Prelude.Maybe [UsageRecord],
+    -- | The inclusive time period that the usage data applies to. Possible
+    -- values are: MONTH_TO_DATE, for the current calendar month to date; and,
+    -- PAST_30_DAYS, for the preceding 30 days.
+    timeRange :: Prelude.Maybe TimeRange,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetUsageStatisticsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getUsageStatisticsResponse_nextToken' - The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+--
+-- 'records', 'getUsageStatisticsResponse_records' - An array of objects that contains the results of the query. Each object
+-- contains the data for an account that matches the filter criteria
+-- specified in the request.
+--
+-- 'timeRange', 'getUsageStatisticsResponse_timeRange' - The inclusive time period that the usage data applies to. Possible
+-- values are: MONTH_TO_DATE, for the current calendar month to date; and,
+-- PAST_30_DAYS, for the preceding 30 days.
+--
+-- 'httpStatus', 'getUsageStatisticsResponse_httpStatus' - The response's http status code.
+newGetUsageStatisticsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetUsageStatisticsResponse
+newGetUsageStatisticsResponse pHttpStatus_ =
+  GetUsageStatisticsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      records = Prelude.Nothing,
+      timeRange = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+getUsageStatisticsResponse_nextToken :: Lens.Lens' GetUsageStatisticsResponse (Prelude.Maybe Prelude.Text)
+getUsageStatisticsResponse_nextToken = Lens.lens (\GetUsageStatisticsResponse' {nextToken} -> nextToken) (\s@GetUsageStatisticsResponse' {} a -> s {nextToken = a} :: GetUsageStatisticsResponse)
+
+-- | An array of objects that contains the results of the query. Each object
+-- contains the data for an account that matches the filter criteria
+-- specified in the request.
+getUsageStatisticsResponse_records :: Lens.Lens' GetUsageStatisticsResponse (Prelude.Maybe [UsageRecord])
+getUsageStatisticsResponse_records = Lens.lens (\GetUsageStatisticsResponse' {records} -> records) (\s@GetUsageStatisticsResponse' {} a -> s {records = a} :: GetUsageStatisticsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The inclusive time period that the usage data applies to. Possible
+-- values are: MONTH_TO_DATE, for the current calendar month to date; and,
+-- PAST_30_DAYS, for the preceding 30 days.
+getUsageStatisticsResponse_timeRange :: Lens.Lens' GetUsageStatisticsResponse (Prelude.Maybe TimeRange)
+getUsageStatisticsResponse_timeRange = Lens.lens (\GetUsageStatisticsResponse' {timeRange} -> timeRange) (\s@GetUsageStatisticsResponse' {} a -> s {timeRange = a} :: GetUsageStatisticsResponse)
+
+-- | The response's http status code.
+getUsageStatisticsResponse_httpStatus :: Lens.Lens' GetUsageStatisticsResponse Prelude.Int
+getUsageStatisticsResponse_httpStatus = Lens.lens (\GetUsageStatisticsResponse' {httpStatus} -> httpStatus) (\s@GetUsageStatisticsResponse' {} a -> s {httpStatus = a} :: GetUsageStatisticsResponse)
+
+instance Prelude.NFData GetUsageStatisticsResponse where
+  rnf GetUsageStatisticsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf records
+      `Prelude.seq` Prelude.rnf timeRange
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/GetUsageTotals.hs b/gen/Amazonka/MacieV2/GetUsageTotals.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/GetUsageTotals.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.MacieV2.GetUsageTotals
+-- 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 (queries) aggregated usage data for an account.
+module Amazonka.MacieV2.GetUsageTotals
+  ( -- * Creating a Request
+    GetUsageTotals (..),
+    newGetUsageTotals,
+
+    -- * Request Lenses
+    getUsageTotals_timeRange,
+
+    -- * Destructuring the Response
+    GetUsageTotalsResponse (..),
+    newGetUsageTotalsResponse,
+
+    -- * Response Lenses
+    getUsageTotalsResponse_timeRange,
+    getUsageTotalsResponse_usageTotals,
+    getUsageTotalsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetUsageTotals' smart constructor.
+data GetUsageTotals = GetUsageTotals'
+  { -- | The inclusive time period to retrieve the data for. Valid values are:
+    -- MONTH_TO_DATE, for the current calendar month to date; and,
+    -- PAST_30_DAYS, for the preceding 30 days. If you don\'t specify a value
+    -- for this parameter, Amazon Macie provides aggregated usage data for the
+    -- preceding 30 days.
+    timeRange :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetUsageTotals' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'timeRange', 'getUsageTotals_timeRange' - The inclusive time period to retrieve the data for. Valid values are:
+-- MONTH_TO_DATE, for the current calendar month to date; and,
+-- PAST_30_DAYS, for the preceding 30 days. If you don\'t specify a value
+-- for this parameter, Amazon Macie provides aggregated usage data for the
+-- preceding 30 days.
+newGetUsageTotals ::
+  GetUsageTotals
+newGetUsageTotals =
+  GetUsageTotals' {timeRange = Prelude.Nothing}
+
+-- | The inclusive time period to retrieve the data for. Valid values are:
+-- MONTH_TO_DATE, for the current calendar month to date; and,
+-- PAST_30_DAYS, for the preceding 30 days. If you don\'t specify a value
+-- for this parameter, Amazon Macie provides aggregated usage data for the
+-- preceding 30 days.
+getUsageTotals_timeRange :: Lens.Lens' GetUsageTotals (Prelude.Maybe Prelude.Text)
+getUsageTotals_timeRange = Lens.lens (\GetUsageTotals' {timeRange} -> timeRange) (\s@GetUsageTotals' {} a -> s {timeRange = a} :: GetUsageTotals)
+
+instance Core.AWSRequest GetUsageTotals where
+  type
+    AWSResponse GetUsageTotals =
+      GetUsageTotalsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetUsageTotalsResponse'
+            Prelude.<$> (x Data..?> "timeRange")
+            Prelude.<*> (x Data..?> "usageTotals" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetUsageTotals where
+  hashWithSalt _salt GetUsageTotals' {..} =
+    _salt `Prelude.hashWithSalt` timeRange
+
+instance Prelude.NFData GetUsageTotals where
+  rnf GetUsageTotals' {..} = Prelude.rnf timeRange
+
+instance Data.ToHeaders GetUsageTotals where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetUsageTotals where
+  toPath = Prelude.const "/usage"
+
+instance Data.ToQuery GetUsageTotals where
+  toQuery GetUsageTotals' {..} =
+    Prelude.mconcat ["timeRange" Data.=: timeRange]
+
+-- | /See:/ 'newGetUsageTotalsResponse' smart constructor.
+data GetUsageTotalsResponse = GetUsageTotalsResponse'
+  { -- | The inclusive time period that the usage data applies to. Possible
+    -- values are: MONTH_TO_DATE, for the current calendar month to date; and,
+    -- PAST_30_DAYS, for the preceding 30 days.
+    timeRange :: Prelude.Maybe TimeRange,
+    -- | An array of objects that contains the results of the query. Each object
+    -- contains the data for a specific usage metric.
+    usageTotals :: Prelude.Maybe [UsageTotal],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetUsageTotalsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'timeRange', 'getUsageTotalsResponse_timeRange' - The inclusive time period that the usage data applies to. Possible
+-- values are: MONTH_TO_DATE, for the current calendar month to date; and,
+-- PAST_30_DAYS, for the preceding 30 days.
+--
+-- 'usageTotals', 'getUsageTotalsResponse_usageTotals' - An array of objects that contains the results of the query. Each object
+-- contains the data for a specific usage metric.
+--
+-- 'httpStatus', 'getUsageTotalsResponse_httpStatus' - The response's http status code.
+newGetUsageTotalsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetUsageTotalsResponse
+newGetUsageTotalsResponse pHttpStatus_ =
+  GetUsageTotalsResponse'
+    { timeRange =
+        Prelude.Nothing,
+      usageTotals = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The inclusive time period that the usage data applies to. Possible
+-- values are: MONTH_TO_DATE, for the current calendar month to date; and,
+-- PAST_30_DAYS, for the preceding 30 days.
+getUsageTotalsResponse_timeRange :: Lens.Lens' GetUsageTotalsResponse (Prelude.Maybe TimeRange)
+getUsageTotalsResponse_timeRange = Lens.lens (\GetUsageTotalsResponse' {timeRange} -> timeRange) (\s@GetUsageTotalsResponse' {} a -> s {timeRange = a} :: GetUsageTotalsResponse)
+
+-- | An array of objects that contains the results of the query. Each object
+-- contains the data for a specific usage metric.
+getUsageTotalsResponse_usageTotals :: Lens.Lens' GetUsageTotalsResponse (Prelude.Maybe [UsageTotal])
+getUsageTotalsResponse_usageTotals = Lens.lens (\GetUsageTotalsResponse' {usageTotals} -> usageTotals) (\s@GetUsageTotalsResponse' {} a -> s {usageTotals = a} :: GetUsageTotalsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getUsageTotalsResponse_httpStatus :: Lens.Lens' GetUsageTotalsResponse Prelude.Int
+getUsageTotalsResponse_httpStatus = Lens.lens (\GetUsageTotalsResponse' {httpStatus} -> httpStatus) (\s@GetUsageTotalsResponse' {} a -> s {httpStatus = a} :: GetUsageTotalsResponse)
+
+instance Prelude.NFData GetUsageTotalsResponse where
+  rnf GetUsageTotalsResponse' {..} =
+    Prelude.rnf timeRange
+      `Prelude.seq` Prelude.rnf usageTotals
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/Lens.hs b/gen/Amazonka/MacieV2/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Lens.hs
@@ -0,0 +1,1535 @@
+{-# 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.MacieV2.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.MacieV2.Lens
+  ( -- * Operations
+
+    -- ** AcceptInvitation
+    acceptInvitation_administratorAccountId,
+    acceptInvitation_masterAccount,
+    acceptInvitation_invitationId,
+    acceptInvitationResponse_httpStatus,
+
+    -- ** BatchGetCustomDataIdentifiers
+    batchGetCustomDataIdentifiers_ids,
+    batchGetCustomDataIdentifiersResponse_customDataIdentifiers,
+    batchGetCustomDataIdentifiersResponse_notFoundIdentifierIds,
+    batchGetCustomDataIdentifiersResponse_httpStatus,
+
+    -- ** CreateAllowList
+    createAllowList_description,
+    createAllowList_tags,
+    createAllowList_criteria,
+    createAllowList_clientToken,
+    createAllowList_name,
+    createAllowListResponse_arn,
+    createAllowListResponse_id,
+    createAllowListResponse_httpStatus,
+
+    -- ** CreateClassificationJob
+    createClassificationJob_allowListIds,
+    createClassificationJob_customDataIdentifierIds,
+    createClassificationJob_description,
+    createClassificationJob_initialRun,
+    createClassificationJob_managedDataIdentifierIds,
+    createClassificationJob_managedDataIdentifierSelector,
+    createClassificationJob_samplingPercentage,
+    createClassificationJob_scheduleFrequency,
+    createClassificationJob_tags,
+    createClassificationJob_s3JobDefinition,
+    createClassificationJob_jobType,
+    createClassificationJob_clientToken,
+    createClassificationJob_name,
+    createClassificationJobResponse_jobArn,
+    createClassificationJobResponse_jobId,
+    createClassificationJobResponse_httpStatus,
+
+    -- ** CreateCustomDataIdentifier
+    createCustomDataIdentifier_clientToken,
+    createCustomDataIdentifier_description,
+    createCustomDataIdentifier_ignoreWords,
+    createCustomDataIdentifier_keywords,
+    createCustomDataIdentifier_maximumMatchDistance,
+    createCustomDataIdentifier_severityLevels,
+    createCustomDataIdentifier_tags,
+    createCustomDataIdentifier_regex,
+    createCustomDataIdentifier_name,
+    createCustomDataIdentifierResponse_customDataIdentifierId,
+    createCustomDataIdentifierResponse_httpStatus,
+
+    -- ** CreateFindingsFilter
+    createFindingsFilter_clientToken,
+    createFindingsFilter_description,
+    createFindingsFilter_position,
+    createFindingsFilter_tags,
+    createFindingsFilter_action,
+    createFindingsFilter_findingCriteria,
+    createFindingsFilter_name,
+    createFindingsFilterResponse_arn,
+    createFindingsFilterResponse_id,
+    createFindingsFilterResponse_httpStatus,
+
+    -- ** CreateInvitations
+    createInvitations_disableEmailNotification,
+    createInvitations_message,
+    createInvitations_accountIds,
+    createInvitationsResponse_unprocessedAccounts,
+    createInvitationsResponse_httpStatus,
+
+    -- ** CreateMember
+    createMember_tags,
+    createMember_account,
+    createMemberResponse_arn,
+    createMemberResponse_httpStatus,
+
+    -- ** CreateSampleFindings
+    createSampleFindings_findingTypes,
+    createSampleFindingsResponse_httpStatus,
+
+    -- ** DeclineInvitations
+    declineInvitations_accountIds,
+    declineInvitationsResponse_unprocessedAccounts,
+    declineInvitationsResponse_httpStatus,
+
+    -- ** DeleteAllowList
+    deleteAllowList_ignoreJobChecks,
+    deleteAllowList_id,
+    deleteAllowListResponse_httpStatus,
+
+    -- ** DeleteCustomDataIdentifier
+    deleteCustomDataIdentifier_id,
+    deleteCustomDataIdentifierResponse_httpStatus,
+
+    -- ** DeleteFindingsFilter
+    deleteFindingsFilter_id,
+    deleteFindingsFilterResponse_httpStatus,
+
+    -- ** DeleteInvitations
+    deleteInvitations_accountIds,
+    deleteInvitationsResponse_unprocessedAccounts,
+    deleteInvitationsResponse_httpStatus,
+
+    -- ** DeleteMember
+    deleteMember_id,
+    deleteMemberResponse_httpStatus,
+
+    -- ** DescribeBuckets
+    describeBuckets_criteria,
+    describeBuckets_maxResults,
+    describeBuckets_nextToken,
+    describeBuckets_sortCriteria,
+    describeBucketsResponse_buckets,
+    describeBucketsResponse_nextToken,
+    describeBucketsResponse_httpStatus,
+
+    -- ** DescribeClassificationJob
+    describeClassificationJob_jobId,
+    describeClassificationJobResponse_allowListIds,
+    describeClassificationJobResponse_clientToken,
+    describeClassificationJobResponse_createdAt,
+    describeClassificationJobResponse_customDataIdentifierIds,
+    describeClassificationJobResponse_description,
+    describeClassificationJobResponse_initialRun,
+    describeClassificationJobResponse_jobArn,
+    describeClassificationJobResponse_jobId,
+    describeClassificationJobResponse_jobStatus,
+    describeClassificationJobResponse_jobType,
+    describeClassificationJobResponse_lastRunErrorStatus,
+    describeClassificationJobResponse_lastRunTime,
+    describeClassificationJobResponse_managedDataIdentifierIds,
+    describeClassificationJobResponse_managedDataIdentifierSelector,
+    describeClassificationJobResponse_name,
+    describeClassificationJobResponse_s3JobDefinition,
+    describeClassificationJobResponse_samplingPercentage,
+    describeClassificationJobResponse_scheduleFrequency,
+    describeClassificationJobResponse_statistics,
+    describeClassificationJobResponse_tags,
+    describeClassificationJobResponse_userPausedDetails,
+    describeClassificationJobResponse_httpStatus,
+
+    -- ** DescribeOrganizationConfiguration
+    describeOrganizationConfigurationResponse_autoEnable,
+    describeOrganizationConfigurationResponse_maxAccountLimitReached,
+    describeOrganizationConfigurationResponse_httpStatus,
+
+    -- ** DisableMacie
+    disableMacieResponse_httpStatus,
+
+    -- ** DisableOrganizationAdminAccount
+    disableOrganizationAdminAccount_adminAccountId,
+    disableOrganizationAdminAccountResponse_httpStatus,
+
+    -- ** DisassociateFromAdministratorAccount
+    disassociateFromAdministratorAccountResponse_httpStatus,
+
+    -- ** DisassociateFromMasterAccount
+    disassociateFromMasterAccountResponse_httpStatus,
+
+    -- ** DisassociateMember
+    disassociateMember_id,
+    disassociateMemberResponse_httpStatus,
+
+    -- ** EnableMacie
+    enableMacie_clientToken,
+    enableMacie_findingPublishingFrequency,
+    enableMacie_status,
+    enableMacieResponse_httpStatus,
+
+    -- ** EnableOrganizationAdminAccount
+    enableOrganizationAdminAccount_clientToken,
+    enableOrganizationAdminAccount_adminAccountId,
+    enableOrganizationAdminAccountResponse_httpStatus,
+
+    -- ** GetAdministratorAccount
+    getAdministratorAccountResponse_administrator,
+    getAdministratorAccountResponse_httpStatus,
+
+    -- ** GetAllowList
+    getAllowList_id,
+    getAllowListResponse_arn,
+    getAllowListResponse_createdAt,
+    getAllowListResponse_criteria,
+    getAllowListResponse_description,
+    getAllowListResponse_id,
+    getAllowListResponse_name,
+    getAllowListResponse_status,
+    getAllowListResponse_tags,
+    getAllowListResponse_updatedAt,
+    getAllowListResponse_httpStatus,
+
+    -- ** GetAutomatedDiscoveryConfiguration
+    getAutomatedDiscoveryConfigurationResponse_classificationScopeId,
+    getAutomatedDiscoveryConfigurationResponse_disabledAt,
+    getAutomatedDiscoveryConfigurationResponse_firstEnabledAt,
+    getAutomatedDiscoveryConfigurationResponse_lastUpdatedAt,
+    getAutomatedDiscoveryConfigurationResponse_sensitivityInspectionTemplateId,
+    getAutomatedDiscoveryConfigurationResponse_status,
+    getAutomatedDiscoveryConfigurationResponse_httpStatus,
+
+    -- ** GetBucketStatistics
+    getBucketStatistics_accountId,
+    getBucketStatisticsResponse_bucketCount,
+    getBucketStatisticsResponse_bucketCountByEffectivePermission,
+    getBucketStatisticsResponse_bucketCountByEncryptionType,
+    getBucketStatisticsResponse_bucketCountByObjectEncryptionRequirement,
+    getBucketStatisticsResponse_bucketCountBySharedAccessType,
+    getBucketStatisticsResponse_bucketStatisticsBySensitivity,
+    getBucketStatisticsResponse_classifiableObjectCount,
+    getBucketStatisticsResponse_classifiableSizeInBytes,
+    getBucketStatisticsResponse_lastUpdated,
+    getBucketStatisticsResponse_objectCount,
+    getBucketStatisticsResponse_sizeInBytes,
+    getBucketStatisticsResponse_sizeInBytesCompressed,
+    getBucketStatisticsResponse_unclassifiableObjectCount,
+    getBucketStatisticsResponse_unclassifiableObjectSizeInBytes,
+    getBucketStatisticsResponse_httpStatus,
+
+    -- ** GetClassificationExportConfiguration
+    getClassificationExportConfigurationResponse_configuration,
+    getClassificationExportConfigurationResponse_httpStatus,
+
+    -- ** GetClassificationScope
+    getClassificationScope_id,
+    getClassificationScopeResponse_id,
+    getClassificationScopeResponse_name,
+    getClassificationScopeResponse_s3,
+    getClassificationScopeResponse_httpStatus,
+
+    -- ** GetCustomDataIdentifier
+    getCustomDataIdentifier_id,
+    getCustomDataIdentifierResponse_arn,
+    getCustomDataIdentifierResponse_createdAt,
+    getCustomDataIdentifierResponse_deleted,
+    getCustomDataIdentifierResponse_description,
+    getCustomDataIdentifierResponse_id,
+    getCustomDataIdentifierResponse_ignoreWords,
+    getCustomDataIdentifierResponse_keywords,
+    getCustomDataIdentifierResponse_maximumMatchDistance,
+    getCustomDataIdentifierResponse_name,
+    getCustomDataIdentifierResponse_regex,
+    getCustomDataIdentifierResponse_severityLevels,
+    getCustomDataIdentifierResponse_tags,
+    getCustomDataIdentifierResponse_httpStatus,
+
+    -- ** GetFindingStatistics
+    getFindingStatistics_findingCriteria,
+    getFindingStatistics_size,
+    getFindingStatistics_sortCriteria,
+    getFindingStatistics_groupBy,
+    getFindingStatisticsResponse_countsByGroup,
+    getFindingStatisticsResponse_httpStatus,
+
+    -- ** GetFindings
+    getFindings_sortCriteria,
+    getFindings_findingIds,
+    getFindingsResponse_findings,
+    getFindingsResponse_httpStatus,
+
+    -- ** GetFindingsFilter
+    getFindingsFilter_id,
+    getFindingsFilterResponse_action,
+    getFindingsFilterResponse_arn,
+    getFindingsFilterResponse_description,
+    getFindingsFilterResponse_findingCriteria,
+    getFindingsFilterResponse_id,
+    getFindingsFilterResponse_name,
+    getFindingsFilterResponse_position,
+    getFindingsFilterResponse_tags,
+    getFindingsFilterResponse_httpStatus,
+
+    -- ** GetFindingsPublicationConfiguration
+    getFindingsPublicationConfigurationResponse_securityHubConfiguration,
+    getFindingsPublicationConfigurationResponse_httpStatus,
+
+    -- ** GetInvitationsCount
+    getInvitationsCountResponse_invitationsCount,
+    getInvitationsCountResponse_httpStatus,
+
+    -- ** GetMacieSession
+    getMacieSessionResponse_createdAt,
+    getMacieSessionResponse_findingPublishingFrequency,
+    getMacieSessionResponse_serviceRole,
+    getMacieSessionResponse_status,
+    getMacieSessionResponse_updatedAt,
+    getMacieSessionResponse_httpStatus,
+
+    -- ** GetMasterAccount
+    getMasterAccountResponse_master,
+    getMasterAccountResponse_httpStatus,
+
+    -- ** GetMember
+    getMember_id,
+    getMemberResponse_accountId,
+    getMemberResponse_administratorAccountId,
+    getMemberResponse_arn,
+    getMemberResponse_email,
+    getMemberResponse_invitedAt,
+    getMemberResponse_masterAccountId,
+    getMemberResponse_relationshipStatus,
+    getMemberResponse_tags,
+    getMemberResponse_updatedAt,
+    getMemberResponse_httpStatus,
+
+    -- ** GetResourceProfile
+    getResourceProfile_resourceArn,
+    getResourceProfileResponse_profileUpdatedAt,
+    getResourceProfileResponse_sensitivityScore,
+    getResourceProfileResponse_sensitivityScoreOverridden,
+    getResourceProfileResponse_statistics,
+    getResourceProfileResponse_httpStatus,
+
+    -- ** GetRevealConfiguration
+    getRevealConfigurationResponse_configuration,
+    getRevealConfigurationResponse_httpStatus,
+
+    -- ** GetSensitiveDataOccurrences
+    getSensitiveDataOccurrences_findingId,
+    getSensitiveDataOccurrencesResponse_error,
+    getSensitiveDataOccurrencesResponse_sensitiveDataOccurrences,
+    getSensitiveDataOccurrencesResponse_status,
+    getSensitiveDataOccurrencesResponse_httpStatus,
+
+    -- ** GetSensitiveDataOccurrencesAvailability
+    getSensitiveDataOccurrencesAvailability_findingId,
+    getSensitiveDataOccurrencesAvailabilityResponse_code,
+    getSensitiveDataOccurrencesAvailabilityResponse_reasons,
+    getSensitiveDataOccurrencesAvailabilityResponse_httpStatus,
+
+    -- ** GetSensitivityInspectionTemplate
+    getSensitivityInspectionTemplate_id,
+    getSensitivityInspectionTemplateResponse_description,
+    getSensitivityInspectionTemplateResponse_excludes,
+    getSensitivityInspectionTemplateResponse_includes,
+    getSensitivityInspectionTemplateResponse_name,
+    getSensitivityInspectionTemplateResponse_sensitivityInspectionTemplateId,
+    getSensitivityInspectionTemplateResponse_httpStatus,
+
+    -- ** GetUsageStatistics
+    getUsageStatistics_filterBy,
+    getUsageStatistics_maxResults,
+    getUsageStatistics_nextToken,
+    getUsageStatistics_sortBy,
+    getUsageStatistics_timeRange,
+    getUsageStatisticsResponse_nextToken,
+    getUsageStatisticsResponse_records,
+    getUsageStatisticsResponse_timeRange,
+    getUsageStatisticsResponse_httpStatus,
+
+    -- ** GetUsageTotals
+    getUsageTotals_timeRange,
+    getUsageTotalsResponse_timeRange,
+    getUsageTotalsResponse_usageTotals,
+    getUsageTotalsResponse_httpStatus,
+
+    -- ** ListAllowLists
+    listAllowLists_maxResults,
+    listAllowLists_nextToken,
+    listAllowListsResponse_allowLists,
+    listAllowListsResponse_nextToken,
+    listAllowListsResponse_httpStatus,
+
+    -- ** ListClassificationJobs
+    listClassificationJobs_filterCriteria,
+    listClassificationJobs_maxResults,
+    listClassificationJobs_nextToken,
+    listClassificationJobs_sortCriteria,
+    listClassificationJobsResponse_items,
+    listClassificationJobsResponse_nextToken,
+    listClassificationJobsResponse_httpStatus,
+
+    -- ** ListClassificationScopes
+    listClassificationScopes_name,
+    listClassificationScopes_nextToken,
+    listClassificationScopesResponse_classificationScopes,
+    listClassificationScopesResponse_nextToken,
+    listClassificationScopesResponse_httpStatus,
+
+    -- ** ListCustomDataIdentifiers
+    listCustomDataIdentifiers_maxResults,
+    listCustomDataIdentifiers_nextToken,
+    listCustomDataIdentifiersResponse_items,
+    listCustomDataIdentifiersResponse_nextToken,
+    listCustomDataIdentifiersResponse_httpStatus,
+
+    -- ** ListFindings
+    listFindings_findingCriteria,
+    listFindings_maxResults,
+    listFindings_nextToken,
+    listFindings_sortCriteria,
+    listFindingsResponse_findingIds,
+    listFindingsResponse_nextToken,
+    listFindingsResponse_httpStatus,
+
+    -- ** ListFindingsFilters
+    listFindingsFilters_maxResults,
+    listFindingsFilters_nextToken,
+    listFindingsFiltersResponse_findingsFilterListItems,
+    listFindingsFiltersResponse_nextToken,
+    listFindingsFiltersResponse_httpStatus,
+
+    -- ** ListInvitations
+    listInvitations_maxResults,
+    listInvitations_nextToken,
+    listInvitationsResponse_invitations,
+    listInvitationsResponse_nextToken,
+    listInvitationsResponse_httpStatus,
+
+    -- ** ListManagedDataIdentifiers
+    listManagedDataIdentifiers_nextToken,
+    listManagedDataIdentifiersResponse_items,
+    listManagedDataIdentifiersResponse_nextToken,
+    listManagedDataIdentifiersResponse_httpStatus,
+
+    -- ** ListMembers
+    listMembers_maxResults,
+    listMembers_nextToken,
+    listMembers_onlyAssociated,
+    listMembersResponse_members,
+    listMembersResponse_nextToken,
+    listMembersResponse_httpStatus,
+
+    -- ** ListOrganizationAdminAccounts
+    listOrganizationAdminAccounts_maxResults,
+    listOrganizationAdminAccounts_nextToken,
+    listOrganizationAdminAccountsResponse_adminAccounts,
+    listOrganizationAdminAccountsResponse_nextToken,
+    listOrganizationAdminAccountsResponse_httpStatus,
+
+    -- ** ListResourceProfileArtifacts
+    listResourceProfileArtifacts_nextToken,
+    listResourceProfileArtifacts_resourceArn,
+    listResourceProfileArtifactsResponse_artifacts,
+    listResourceProfileArtifactsResponse_nextToken,
+    listResourceProfileArtifactsResponse_httpStatus,
+
+    -- ** ListResourceProfileDetections
+    listResourceProfileDetections_maxResults,
+    listResourceProfileDetections_nextToken,
+    listResourceProfileDetections_resourceArn,
+    listResourceProfileDetectionsResponse_detections,
+    listResourceProfileDetectionsResponse_nextToken,
+    listResourceProfileDetectionsResponse_httpStatus,
+
+    -- ** ListSensitivityInspectionTemplates
+    listSensitivityInspectionTemplates_maxResults,
+    listSensitivityInspectionTemplates_nextToken,
+    listSensitivityInspectionTemplatesResponse_nextToken,
+    listSensitivityInspectionTemplatesResponse_sensitivityInspectionTemplates,
+    listSensitivityInspectionTemplatesResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** PutClassificationExportConfiguration
+    putClassificationExportConfiguration_configuration,
+    putClassificationExportConfigurationResponse_configuration,
+    putClassificationExportConfigurationResponse_httpStatus,
+
+    -- ** PutFindingsPublicationConfiguration
+    putFindingsPublicationConfiguration_clientToken,
+    putFindingsPublicationConfiguration_securityHubConfiguration,
+    putFindingsPublicationConfigurationResponse_httpStatus,
+
+    -- ** SearchResources
+    searchResources_bucketCriteria,
+    searchResources_maxResults,
+    searchResources_nextToken,
+    searchResources_sortCriteria,
+    searchResourcesResponse_matchingResources,
+    searchResourcesResponse_nextToken,
+    searchResourcesResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** TestCustomDataIdentifier
+    testCustomDataIdentifier_ignoreWords,
+    testCustomDataIdentifier_keywords,
+    testCustomDataIdentifier_maximumMatchDistance,
+    testCustomDataIdentifier_regex,
+    testCustomDataIdentifier_sampleText,
+    testCustomDataIdentifierResponse_matchCount,
+    testCustomDataIdentifierResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_tagKeys,
+    untagResource_resourceArn,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateAllowList
+    updateAllowList_description,
+    updateAllowList_id,
+    updateAllowList_criteria,
+    updateAllowList_name,
+    updateAllowListResponse_arn,
+    updateAllowListResponse_id,
+    updateAllowListResponse_httpStatus,
+
+    -- ** UpdateAutomatedDiscoveryConfiguration
+    updateAutomatedDiscoveryConfiguration_status,
+    updateAutomatedDiscoveryConfigurationResponse_httpStatus,
+
+    -- ** UpdateClassificationJob
+    updateClassificationJob_jobId,
+    updateClassificationJob_jobStatus,
+    updateClassificationJobResponse_httpStatus,
+
+    -- ** UpdateClassificationScope
+    updateClassificationScope_s3,
+    updateClassificationScope_id,
+    updateClassificationScopeResponse_httpStatus,
+
+    -- ** UpdateFindingsFilter
+    updateFindingsFilter_action,
+    updateFindingsFilter_clientToken,
+    updateFindingsFilter_description,
+    updateFindingsFilter_findingCriteria,
+    updateFindingsFilter_name,
+    updateFindingsFilter_position,
+    updateFindingsFilter_id,
+    updateFindingsFilterResponse_arn,
+    updateFindingsFilterResponse_id,
+    updateFindingsFilterResponse_httpStatus,
+
+    -- ** UpdateMacieSession
+    updateMacieSession_findingPublishingFrequency,
+    updateMacieSession_status,
+    updateMacieSessionResponse_httpStatus,
+
+    -- ** UpdateMemberSession
+    updateMemberSession_id,
+    updateMemberSession_status,
+    updateMemberSessionResponse_httpStatus,
+
+    -- ** UpdateOrganizationConfiguration
+    updateOrganizationConfiguration_autoEnable,
+    updateOrganizationConfigurationResponse_httpStatus,
+
+    -- ** UpdateResourceProfile
+    updateResourceProfile_sensitivityScoreOverride,
+    updateResourceProfile_resourceArn,
+    updateResourceProfileResponse_httpStatus,
+
+    -- ** UpdateResourceProfileDetections
+    updateResourceProfileDetections_suppressDataIdentifiers,
+    updateResourceProfileDetections_resourceArn,
+    updateResourceProfileDetectionsResponse_httpStatus,
+
+    -- ** UpdateRevealConfiguration
+    updateRevealConfiguration_configuration,
+    updateRevealConfigurationResponse_configuration,
+    updateRevealConfigurationResponse_httpStatus,
+
+    -- ** UpdateSensitivityInspectionTemplate
+    updateSensitivityInspectionTemplate_description,
+    updateSensitivityInspectionTemplate_excludes,
+    updateSensitivityInspectionTemplate_includes,
+    updateSensitivityInspectionTemplate_id,
+    updateSensitivityInspectionTemplateResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AccessControlList
+    accessControlList_allowsPublicReadAccess,
+    accessControlList_allowsPublicWriteAccess,
+
+    -- ** AccountDetail
+    accountDetail_email,
+    accountDetail_accountId,
+
+    -- ** AccountLevelPermissions
+    accountLevelPermissions_blockPublicAccess,
+
+    -- ** AdminAccount
+    adminAccount_accountId,
+    adminAccount_status,
+
+    -- ** AllowListCriteria
+    allowListCriteria_regex,
+    allowListCriteria_s3WordsList,
+
+    -- ** AllowListStatus
+    allowListStatus_description,
+    allowListStatus_code,
+
+    -- ** AllowListSummary
+    allowListSummary_arn,
+    allowListSummary_createdAt,
+    allowListSummary_description,
+    allowListSummary_id,
+    allowListSummary_name,
+    allowListSummary_updatedAt,
+
+    -- ** ApiCallDetails
+    apiCallDetails_api,
+    apiCallDetails_apiServiceName,
+    apiCallDetails_firstSeen,
+    apiCallDetails_lastSeen,
+
+    -- ** AssumedRole
+    assumedRole_accessKeyId,
+    assumedRole_accountId,
+    assumedRole_arn,
+    assumedRole_principalId,
+    assumedRole_sessionContext,
+
+    -- ** AwsAccount
+    awsAccount_accountId,
+    awsAccount_principalId,
+
+    -- ** AwsService
+    awsService_invokedBy,
+
+    -- ** BatchGetCustomDataIdentifierSummary
+    batchGetCustomDataIdentifierSummary_arn,
+    batchGetCustomDataIdentifierSummary_createdAt,
+    batchGetCustomDataIdentifierSummary_deleted,
+    batchGetCustomDataIdentifierSummary_description,
+    batchGetCustomDataIdentifierSummary_id,
+    batchGetCustomDataIdentifierSummary_name,
+
+    -- ** BlockPublicAccess
+    blockPublicAccess_blockPublicAcls,
+    blockPublicAccess_blockPublicPolicy,
+    blockPublicAccess_ignorePublicAcls,
+    blockPublicAccess_restrictPublicBuckets,
+
+    -- ** BucketCountByEffectivePermission
+    bucketCountByEffectivePermission_publiclyAccessible,
+    bucketCountByEffectivePermission_publiclyReadable,
+    bucketCountByEffectivePermission_publiclyWritable,
+    bucketCountByEffectivePermission_unknown,
+
+    -- ** BucketCountByEncryptionType
+    bucketCountByEncryptionType_kmsManaged,
+    bucketCountByEncryptionType_s3Managed,
+    bucketCountByEncryptionType_unencrypted,
+    bucketCountByEncryptionType_unknown,
+
+    -- ** BucketCountBySharedAccessType
+    bucketCountBySharedAccessType_external,
+    bucketCountBySharedAccessType_internal,
+    bucketCountBySharedAccessType_notShared,
+    bucketCountBySharedAccessType_unknown,
+
+    -- ** BucketCountPolicyAllowsUnencryptedObjectUploads
+    bucketCountPolicyAllowsUnencryptedObjectUploads_allowsUnencryptedObjectUploads,
+    bucketCountPolicyAllowsUnencryptedObjectUploads_deniesUnencryptedObjectUploads,
+    bucketCountPolicyAllowsUnencryptedObjectUploads_unknown,
+
+    -- ** BucketCriteriaAdditionalProperties
+    bucketCriteriaAdditionalProperties_eq,
+    bucketCriteriaAdditionalProperties_gt,
+    bucketCriteriaAdditionalProperties_gte,
+    bucketCriteriaAdditionalProperties_lt,
+    bucketCriteriaAdditionalProperties_lte,
+    bucketCriteriaAdditionalProperties_neq,
+    bucketCriteriaAdditionalProperties_prefix,
+
+    -- ** BucketLevelPermissions
+    bucketLevelPermissions_accessControlList,
+    bucketLevelPermissions_blockPublicAccess,
+    bucketLevelPermissions_bucketPolicy,
+
+    -- ** BucketMetadata
+    bucketMetadata_accountId,
+    bucketMetadata_allowsUnencryptedObjectUploads,
+    bucketMetadata_bucketArn,
+    bucketMetadata_bucketCreatedAt,
+    bucketMetadata_bucketName,
+    bucketMetadata_classifiableObjectCount,
+    bucketMetadata_classifiableSizeInBytes,
+    bucketMetadata_errorCode,
+    bucketMetadata_errorMessage,
+    bucketMetadata_jobDetails,
+    bucketMetadata_lastAutomatedDiscoveryTime,
+    bucketMetadata_lastUpdated,
+    bucketMetadata_objectCount,
+    bucketMetadata_objectCountByEncryptionType,
+    bucketMetadata_publicAccess,
+    bucketMetadata_region,
+    bucketMetadata_replicationDetails,
+    bucketMetadata_sensitivityScore,
+    bucketMetadata_serverSideEncryption,
+    bucketMetadata_sharedAccess,
+    bucketMetadata_sizeInBytes,
+    bucketMetadata_sizeInBytesCompressed,
+    bucketMetadata_tags,
+    bucketMetadata_unclassifiableObjectCount,
+    bucketMetadata_unclassifiableObjectSizeInBytes,
+    bucketMetadata_versioning,
+
+    -- ** BucketPermissionConfiguration
+    bucketPermissionConfiguration_accountLevelPermissions,
+    bucketPermissionConfiguration_bucketLevelPermissions,
+
+    -- ** BucketPolicy
+    bucketPolicy_allowsPublicReadAccess,
+    bucketPolicy_allowsPublicWriteAccess,
+
+    -- ** BucketPublicAccess
+    bucketPublicAccess_effectivePermission,
+    bucketPublicAccess_permissionConfiguration,
+
+    -- ** BucketServerSideEncryption
+    bucketServerSideEncryption_kmsMasterKeyId,
+    bucketServerSideEncryption_type,
+
+    -- ** BucketSortCriteria
+    bucketSortCriteria_attributeName,
+    bucketSortCriteria_orderBy,
+
+    -- ** BucketStatisticsBySensitivity
+    bucketStatisticsBySensitivity_classificationError,
+    bucketStatisticsBySensitivity_notClassified,
+    bucketStatisticsBySensitivity_notSensitive,
+    bucketStatisticsBySensitivity_sensitive,
+
+    -- ** Cell
+    cell_cellReference,
+    cell_column,
+    cell_columnName,
+    cell_row,
+
+    -- ** ClassificationDetails
+    classificationDetails_detailedResultsLocation,
+    classificationDetails_jobArn,
+    classificationDetails_jobId,
+    classificationDetails_originType,
+    classificationDetails_result,
+
+    -- ** ClassificationExportConfiguration
+    classificationExportConfiguration_s3Destination,
+
+    -- ** ClassificationResult
+    classificationResult_additionalOccurrences,
+    classificationResult_customDataIdentifiers,
+    classificationResult_mimeType,
+    classificationResult_sensitiveData,
+    classificationResult_sizeClassified,
+    classificationResult_status,
+
+    -- ** ClassificationResultStatus
+    classificationResultStatus_code,
+    classificationResultStatus_reason,
+
+    -- ** ClassificationScopeSummary
+    classificationScopeSummary_id,
+    classificationScopeSummary_name,
+
+    -- ** CriteriaBlockForJob
+    criteriaBlockForJob_and,
+
+    -- ** CriteriaForJob
+    criteriaForJob_simpleCriterion,
+    criteriaForJob_tagCriterion,
+
+    -- ** CriterionAdditionalProperties
+    criterionAdditionalProperties_eq,
+    criterionAdditionalProperties_eqExactMatch,
+    criterionAdditionalProperties_gt,
+    criterionAdditionalProperties_gte,
+    criterionAdditionalProperties_lt,
+    criterionAdditionalProperties_lte,
+    criterionAdditionalProperties_neq,
+
+    -- ** CustomDataIdentifierSummary
+    customDataIdentifierSummary_arn,
+    customDataIdentifierSummary_createdAt,
+    customDataIdentifierSummary_description,
+    customDataIdentifierSummary_id,
+    customDataIdentifierSummary_name,
+
+    -- ** CustomDataIdentifiers
+    customDataIdentifiers_detections,
+    customDataIdentifiers_totalCount,
+
+    -- ** CustomDetection
+    customDetection_arn,
+    customDetection_count,
+    customDetection_name,
+    customDetection_occurrences,
+
+    -- ** DailySchedule
+
+    -- ** DefaultDetection
+    defaultDetection_count,
+    defaultDetection_occurrences,
+    defaultDetection_type,
+
+    -- ** DetectedDataDetails
+    detectedDataDetails_value,
+
+    -- ** Detection
+    detection_arn,
+    detection_count,
+    detection_id,
+    detection_name,
+    detection_suppressed,
+    detection_type,
+
+    -- ** DomainDetails
+    domainDetails_domainName,
+
+    -- ** FederatedUser
+    federatedUser_accessKeyId,
+    federatedUser_accountId,
+    federatedUser_arn,
+    federatedUser_principalId,
+    federatedUser_sessionContext,
+
+    -- ** Finding
+    finding_accountId,
+    finding_archived,
+    finding_category,
+    finding_classificationDetails,
+    finding_count,
+    finding_createdAt,
+    finding_description,
+    finding_id,
+    finding_partition,
+    finding_policyDetails,
+    finding_region,
+    finding_resourcesAffected,
+    finding_sample,
+    finding_schemaVersion,
+    finding_severity,
+    finding_title,
+    finding_type,
+    finding_updatedAt,
+
+    -- ** FindingAction
+    findingAction_actionType,
+    findingAction_apiCallDetails,
+
+    -- ** FindingActor
+    findingActor_domainDetails,
+    findingActor_ipAddressDetails,
+    findingActor_userIdentity,
+
+    -- ** FindingCriteria
+    findingCriteria_criterion,
+
+    -- ** FindingStatisticsSortCriteria
+    findingStatisticsSortCriteria_attributeName,
+    findingStatisticsSortCriteria_orderBy,
+
+    -- ** FindingsFilterListItem
+    findingsFilterListItem_action,
+    findingsFilterListItem_arn,
+    findingsFilterListItem_id,
+    findingsFilterListItem_name,
+    findingsFilterListItem_tags,
+
+    -- ** GroupCount
+    groupCount_count,
+    groupCount_groupKey,
+
+    -- ** IamUser
+    iamUser_accountId,
+    iamUser_arn,
+    iamUser_principalId,
+    iamUser_userName,
+
+    -- ** Invitation
+    invitation_accountId,
+    invitation_invitationId,
+    invitation_invitedAt,
+    invitation_relationshipStatus,
+
+    -- ** IpAddressDetails
+    ipAddressDetails_ipAddressV4,
+    ipAddressDetails_ipCity,
+    ipAddressDetails_ipCountry,
+    ipAddressDetails_ipGeoLocation,
+    ipAddressDetails_ipOwner,
+
+    -- ** IpCity
+    ipCity_name,
+
+    -- ** IpCountry
+    ipCountry_code,
+    ipCountry_name,
+
+    -- ** IpGeoLocation
+    ipGeoLocation_lat,
+    ipGeoLocation_lon,
+
+    -- ** IpOwner
+    ipOwner_asn,
+    ipOwner_asnOrg,
+    ipOwner_isp,
+    ipOwner_org,
+
+    -- ** JobDetails
+    jobDetails_isDefinedInJob,
+    jobDetails_isMonitoredByJob,
+    jobDetails_lastJobId,
+    jobDetails_lastJobRunTime,
+
+    -- ** JobScheduleFrequency
+    jobScheduleFrequency_dailySchedule,
+    jobScheduleFrequency_monthlySchedule,
+    jobScheduleFrequency_weeklySchedule,
+
+    -- ** JobScopeTerm
+    jobScopeTerm_simpleScopeTerm,
+    jobScopeTerm_tagScopeTerm,
+
+    -- ** JobScopingBlock
+    jobScopingBlock_and,
+
+    -- ** JobSummary
+    jobSummary_bucketCriteria,
+    jobSummary_bucketDefinitions,
+    jobSummary_createdAt,
+    jobSummary_jobId,
+    jobSummary_jobStatus,
+    jobSummary_jobType,
+    jobSummary_lastRunErrorStatus,
+    jobSummary_name,
+    jobSummary_userPausedDetails,
+
+    -- ** KeyValuePair
+    keyValuePair_key,
+    keyValuePair_value,
+
+    -- ** LastRunErrorStatus
+    lastRunErrorStatus_code,
+
+    -- ** ListJobsFilterCriteria
+    listJobsFilterCriteria_excludes,
+    listJobsFilterCriteria_includes,
+
+    -- ** ListJobsFilterTerm
+    listJobsFilterTerm_comparator,
+    listJobsFilterTerm_key,
+    listJobsFilterTerm_values,
+
+    -- ** ListJobsSortCriteria
+    listJobsSortCriteria_attributeName,
+    listJobsSortCriteria_orderBy,
+
+    -- ** ManagedDataIdentifierSummary
+    managedDataIdentifierSummary_category,
+    managedDataIdentifierSummary_id,
+
+    -- ** MatchingBucket
+    matchingBucket_accountId,
+    matchingBucket_bucketName,
+    matchingBucket_classifiableObjectCount,
+    matchingBucket_classifiableSizeInBytes,
+    matchingBucket_errorCode,
+    matchingBucket_errorMessage,
+    matchingBucket_jobDetails,
+    matchingBucket_lastAutomatedDiscoveryTime,
+    matchingBucket_objectCount,
+    matchingBucket_objectCountByEncryptionType,
+    matchingBucket_sensitivityScore,
+    matchingBucket_sizeInBytes,
+    matchingBucket_sizeInBytesCompressed,
+    matchingBucket_unclassifiableObjectCount,
+    matchingBucket_unclassifiableObjectSizeInBytes,
+
+    -- ** MatchingResource
+    matchingResource_matchingBucket,
+
+    -- ** Member
+    member_accountId,
+    member_administratorAccountId,
+    member_arn,
+    member_email,
+    member_invitedAt,
+    member_masterAccountId,
+    member_relationshipStatus,
+    member_tags,
+    member_updatedAt,
+
+    -- ** MonthlySchedule
+    monthlySchedule_dayOfMonth,
+
+    -- ** ObjectCountByEncryptionType
+    objectCountByEncryptionType_customerManaged,
+    objectCountByEncryptionType_kmsManaged,
+    objectCountByEncryptionType_s3Managed,
+    objectCountByEncryptionType_unencrypted,
+    objectCountByEncryptionType_unknown,
+
+    -- ** ObjectLevelStatistics
+    objectLevelStatistics_fileType,
+    objectLevelStatistics_storageClass,
+    objectLevelStatistics_total,
+
+    -- ** Occurrences
+    occurrences_cells,
+    occurrences_lineRanges,
+    occurrences_offsetRanges,
+    occurrences_pages,
+    occurrences_records,
+
+    -- ** Page
+    page_lineRange,
+    page_offsetRange,
+    page_pageNumber,
+
+    -- ** PolicyDetails
+    policyDetails_action,
+    policyDetails_actor,
+
+    -- ** Range
+    range_end,
+    range_start,
+    range_startColumn,
+
+    -- ** Record
+    record_jsonPath,
+    record_recordIndex,
+
+    -- ** ReplicationDetails
+    replicationDetails_replicated,
+    replicationDetails_replicatedExternally,
+    replicationDetails_replicationAccounts,
+
+    -- ** ResourceProfileArtifact
+    resourceProfileArtifact_sensitive,
+    resourceProfileArtifact_classificationResultStatus,
+    resourceProfileArtifact_arn,
+
+    -- ** ResourceStatistics
+    resourceStatistics_totalBytesClassified,
+    resourceStatistics_totalDetections,
+    resourceStatistics_totalDetectionsSuppressed,
+    resourceStatistics_totalItemsClassified,
+    resourceStatistics_totalItemsSensitive,
+    resourceStatistics_totalItemsSkipped,
+    resourceStatistics_totalItemsSkippedInvalidEncryption,
+    resourceStatistics_totalItemsSkippedInvalidKms,
+    resourceStatistics_totalItemsSkippedPermissionDenied,
+
+    -- ** ResourcesAffected
+    resourcesAffected_s3Bucket,
+    resourcesAffected_s3Object,
+
+    -- ** RevealConfiguration
+    revealConfiguration_kmsKeyId,
+    revealConfiguration_status,
+
+    -- ** S3Bucket
+    s3Bucket_allowsUnencryptedObjectUploads,
+    s3Bucket_arn,
+    s3Bucket_createdAt,
+    s3Bucket_defaultServerSideEncryption,
+    s3Bucket_name,
+    s3Bucket_owner,
+    s3Bucket_publicAccess,
+    s3Bucket_tags,
+
+    -- ** S3BucketCriteriaForJob
+    s3BucketCriteriaForJob_excludes,
+    s3BucketCriteriaForJob_includes,
+
+    -- ** S3BucketDefinitionForJob
+    s3BucketDefinitionForJob_accountId,
+    s3BucketDefinitionForJob_buckets,
+
+    -- ** S3BucketOwner
+    s3BucketOwner_displayName,
+    s3BucketOwner_id,
+
+    -- ** S3ClassificationScope
+    s3ClassificationScope_excludes,
+
+    -- ** S3ClassificationScopeExclusion
+    s3ClassificationScopeExclusion_bucketNames,
+
+    -- ** S3ClassificationScopeExclusionUpdate
+    s3ClassificationScopeExclusionUpdate_bucketNames,
+    s3ClassificationScopeExclusionUpdate_operation,
+
+    -- ** S3ClassificationScopeUpdate
+    s3ClassificationScopeUpdate_excludes,
+
+    -- ** S3Destination
+    s3Destination_keyPrefix,
+    s3Destination_bucketName,
+    s3Destination_kmsKeyArn,
+
+    -- ** S3JobDefinition
+    s3JobDefinition_bucketCriteria,
+    s3JobDefinition_bucketDefinitions,
+    s3JobDefinition_scoping,
+
+    -- ** S3Object
+    s3Object_bucketArn,
+    s3Object_eTag,
+    s3Object_extension,
+    s3Object_key,
+    s3Object_lastModified,
+    s3Object_path,
+    s3Object_publicAccess,
+    s3Object_serverSideEncryption,
+    s3Object_size,
+    s3Object_storageClass,
+    s3Object_tags,
+    s3Object_versionId,
+
+    -- ** S3WordsList
+    s3WordsList_bucketName,
+    s3WordsList_objectKey,
+
+    -- ** Scoping
+    scoping_excludes,
+    scoping_includes,
+
+    -- ** SearchResourcesBucketCriteria
+    searchResourcesBucketCriteria_excludes,
+    searchResourcesBucketCriteria_includes,
+
+    -- ** SearchResourcesCriteria
+    searchResourcesCriteria_simpleCriterion,
+    searchResourcesCriteria_tagCriterion,
+
+    -- ** SearchResourcesCriteriaBlock
+    searchResourcesCriteriaBlock_and,
+
+    -- ** SearchResourcesSimpleCriterion
+    searchResourcesSimpleCriterion_comparator,
+    searchResourcesSimpleCriterion_key,
+    searchResourcesSimpleCriterion_values,
+
+    -- ** SearchResourcesSortCriteria
+    searchResourcesSortCriteria_attributeName,
+    searchResourcesSortCriteria_orderBy,
+
+    -- ** SearchResourcesTagCriterion
+    searchResourcesTagCriterion_comparator,
+    searchResourcesTagCriterion_tagValues,
+
+    -- ** SearchResourcesTagCriterionPair
+    searchResourcesTagCriterionPair_key,
+    searchResourcesTagCriterionPair_value,
+
+    -- ** SecurityHubConfiguration
+    securityHubConfiguration_publishPolicyFindings,
+    securityHubConfiguration_publishClassificationFindings,
+
+    -- ** SensitiveDataItem
+    sensitiveDataItem_category,
+    sensitiveDataItem_detections,
+    sensitiveDataItem_totalCount,
+
+    -- ** SensitivityAggregations
+    sensitivityAggregations_classifiableSizeInBytes,
+    sensitivityAggregations_publiclyAccessibleCount,
+    sensitivityAggregations_totalCount,
+    sensitivityAggregations_totalSizeInBytes,
+
+    -- ** SensitivityInspectionTemplateExcludes
+    sensitivityInspectionTemplateExcludes_managedDataIdentifierIds,
+
+    -- ** SensitivityInspectionTemplateIncludes
+    sensitivityInspectionTemplateIncludes_allowListIds,
+    sensitivityInspectionTemplateIncludes_customDataIdentifierIds,
+    sensitivityInspectionTemplateIncludes_managedDataIdentifierIds,
+
+    -- ** SensitivityInspectionTemplatesEntry
+    sensitivityInspectionTemplatesEntry_id,
+    sensitivityInspectionTemplatesEntry_name,
+
+    -- ** ServerSideEncryption
+    serverSideEncryption_encryptionType,
+    serverSideEncryption_kmsMasterKeyId,
+
+    -- ** ServiceLimit
+    serviceLimit_isServiceLimited,
+    serviceLimit_unit,
+    serviceLimit_value,
+
+    -- ** SessionContext
+    sessionContext_attributes,
+    sessionContext_sessionIssuer,
+
+    -- ** SessionContextAttributes
+    sessionContextAttributes_creationDate,
+    sessionContextAttributes_mfaAuthenticated,
+
+    -- ** SessionIssuer
+    sessionIssuer_accountId,
+    sessionIssuer_arn,
+    sessionIssuer_principalId,
+    sessionIssuer_type,
+    sessionIssuer_userName,
+
+    -- ** Severity
+    severity_description,
+    severity_score,
+
+    -- ** SeverityLevel
+    severityLevel_occurrencesThreshold,
+    severityLevel_severity,
+
+    -- ** SimpleCriterionForJob
+    simpleCriterionForJob_comparator,
+    simpleCriterionForJob_key,
+    simpleCriterionForJob_values,
+
+    -- ** SimpleScopeTerm
+    simpleScopeTerm_comparator,
+    simpleScopeTerm_key,
+    simpleScopeTerm_values,
+
+    -- ** SortCriteria
+    sortCriteria_attributeName,
+    sortCriteria_orderBy,
+
+    -- ** Statistics
+    statistics_approximateNumberOfObjectsToProcess,
+    statistics_numberOfRuns,
+
+    -- ** SuppressDataIdentifier
+    suppressDataIdentifier_id,
+    suppressDataIdentifier_type,
+
+    -- ** TagCriterionForJob
+    tagCriterionForJob_comparator,
+    tagCriterionForJob_tagValues,
+
+    -- ** TagCriterionPairForJob
+    tagCriterionPairForJob_key,
+    tagCriterionPairForJob_value,
+
+    -- ** TagScopeTerm
+    tagScopeTerm_comparator,
+    tagScopeTerm_key,
+    tagScopeTerm_tagValues,
+    tagScopeTerm_target,
+
+    -- ** TagValuePair
+    tagValuePair_key,
+    tagValuePair_value,
+
+    -- ** UnprocessedAccount
+    unprocessedAccount_accountId,
+    unprocessedAccount_errorCode,
+    unprocessedAccount_errorMessage,
+
+    -- ** UsageByAccount
+    usageByAccount_currency,
+    usageByAccount_estimatedCost,
+    usageByAccount_serviceLimit,
+    usageByAccount_type,
+
+    -- ** UsageRecord
+    usageRecord_accountId,
+    usageRecord_automatedDiscoveryFreeTrialStartDate,
+    usageRecord_freeTrialStartDate,
+    usageRecord_usage,
+
+    -- ** UsageStatisticsFilter
+    usageStatisticsFilter_comparator,
+    usageStatisticsFilter_key,
+    usageStatisticsFilter_values,
+
+    -- ** UsageStatisticsSortBy
+    usageStatisticsSortBy_key,
+    usageStatisticsSortBy_orderBy,
+
+    -- ** UsageTotal
+    usageTotal_currency,
+    usageTotal_estimatedCost,
+    usageTotal_type,
+
+    -- ** UserIdentity
+    userIdentity_assumedRole,
+    userIdentity_awsAccount,
+    userIdentity_awsService,
+    userIdentity_federatedUser,
+    userIdentity_iamUser,
+    userIdentity_root,
+    userIdentity_type,
+
+    -- ** UserIdentityRoot
+    userIdentityRoot_accountId,
+    userIdentityRoot_arn,
+    userIdentityRoot_principalId,
+
+    -- ** UserPausedDetails
+    userPausedDetails_jobExpiresAt,
+    userPausedDetails_jobImminentExpirationHealthEventArn,
+    userPausedDetails_jobPausedAt,
+
+    -- ** WeeklySchedule
+    weeklySchedule_dayOfWeek,
+  )
+where
+
+import Amazonka.MacieV2.AcceptInvitation
+import Amazonka.MacieV2.BatchGetCustomDataIdentifiers
+import Amazonka.MacieV2.CreateAllowList
+import Amazonka.MacieV2.CreateClassificationJob
+import Amazonka.MacieV2.CreateCustomDataIdentifier
+import Amazonka.MacieV2.CreateFindingsFilter
+import Amazonka.MacieV2.CreateInvitations
+import Amazonka.MacieV2.CreateMember
+import Amazonka.MacieV2.CreateSampleFindings
+import Amazonka.MacieV2.DeclineInvitations
+import Amazonka.MacieV2.DeleteAllowList
+import Amazonka.MacieV2.DeleteCustomDataIdentifier
+import Amazonka.MacieV2.DeleteFindingsFilter
+import Amazonka.MacieV2.DeleteInvitations
+import Amazonka.MacieV2.DeleteMember
+import Amazonka.MacieV2.DescribeBuckets
+import Amazonka.MacieV2.DescribeClassificationJob
+import Amazonka.MacieV2.DescribeOrganizationConfiguration
+import Amazonka.MacieV2.DisableMacie
+import Amazonka.MacieV2.DisableOrganizationAdminAccount
+import Amazonka.MacieV2.DisassociateFromAdministratorAccount
+import Amazonka.MacieV2.DisassociateFromMasterAccount
+import Amazonka.MacieV2.DisassociateMember
+import Amazonka.MacieV2.EnableMacie
+import Amazonka.MacieV2.EnableOrganizationAdminAccount
+import Amazonka.MacieV2.GetAdministratorAccount
+import Amazonka.MacieV2.GetAllowList
+import Amazonka.MacieV2.GetAutomatedDiscoveryConfiguration
+import Amazonka.MacieV2.GetBucketStatistics
+import Amazonka.MacieV2.GetClassificationExportConfiguration
+import Amazonka.MacieV2.GetClassificationScope
+import Amazonka.MacieV2.GetCustomDataIdentifier
+import Amazonka.MacieV2.GetFindingStatistics
+import Amazonka.MacieV2.GetFindings
+import Amazonka.MacieV2.GetFindingsFilter
+import Amazonka.MacieV2.GetFindingsPublicationConfiguration
+import Amazonka.MacieV2.GetInvitationsCount
+import Amazonka.MacieV2.GetMacieSession
+import Amazonka.MacieV2.GetMasterAccount
+import Amazonka.MacieV2.GetMember
+import Amazonka.MacieV2.GetResourceProfile
+import Amazonka.MacieV2.GetRevealConfiguration
+import Amazonka.MacieV2.GetSensitiveDataOccurrences
+import Amazonka.MacieV2.GetSensitiveDataOccurrencesAvailability
+import Amazonka.MacieV2.GetSensitivityInspectionTemplate
+import Amazonka.MacieV2.GetUsageStatistics
+import Amazonka.MacieV2.GetUsageTotals
+import Amazonka.MacieV2.ListAllowLists
+import Amazonka.MacieV2.ListClassificationJobs
+import Amazonka.MacieV2.ListClassificationScopes
+import Amazonka.MacieV2.ListCustomDataIdentifiers
+import Amazonka.MacieV2.ListFindings
+import Amazonka.MacieV2.ListFindingsFilters
+import Amazonka.MacieV2.ListInvitations
+import Amazonka.MacieV2.ListManagedDataIdentifiers
+import Amazonka.MacieV2.ListMembers
+import Amazonka.MacieV2.ListOrganizationAdminAccounts
+import Amazonka.MacieV2.ListResourceProfileArtifacts
+import Amazonka.MacieV2.ListResourceProfileDetections
+import Amazonka.MacieV2.ListSensitivityInspectionTemplates
+import Amazonka.MacieV2.ListTagsForResource
+import Amazonka.MacieV2.PutClassificationExportConfiguration
+import Amazonka.MacieV2.PutFindingsPublicationConfiguration
+import Amazonka.MacieV2.SearchResources
+import Amazonka.MacieV2.TagResource
+import Amazonka.MacieV2.TestCustomDataIdentifier
+import Amazonka.MacieV2.Types.AccessControlList
+import Amazonka.MacieV2.Types.AccountDetail
+import Amazonka.MacieV2.Types.AccountLevelPermissions
+import Amazonka.MacieV2.Types.AdminAccount
+import Amazonka.MacieV2.Types.AllowListCriteria
+import Amazonka.MacieV2.Types.AllowListStatus
+import Amazonka.MacieV2.Types.AllowListSummary
+import Amazonka.MacieV2.Types.ApiCallDetails
+import Amazonka.MacieV2.Types.AssumedRole
+import Amazonka.MacieV2.Types.AwsAccount
+import Amazonka.MacieV2.Types.AwsService
+import Amazonka.MacieV2.Types.BatchGetCustomDataIdentifierSummary
+import Amazonka.MacieV2.Types.BlockPublicAccess
+import Amazonka.MacieV2.Types.BucketCountByEffectivePermission
+import Amazonka.MacieV2.Types.BucketCountByEncryptionType
+import Amazonka.MacieV2.Types.BucketCountBySharedAccessType
+import Amazonka.MacieV2.Types.BucketCountPolicyAllowsUnencryptedObjectUploads
+import Amazonka.MacieV2.Types.BucketCriteriaAdditionalProperties
+import Amazonka.MacieV2.Types.BucketLevelPermissions
+import Amazonka.MacieV2.Types.BucketMetadata
+import Amazonka.MacieV2.Types.BucketPermissionConfiguration
+import Amazonka.MacieV2.Types.BucketPolicy
+import Amazonka.MacieV2.Types.BucketPublicAccess
+import Amazonka.MacieV2.Types.BucketServerSideEncryption
+import Amazonka.MacieV2.Types.BucketSortCriteria
+import Amazonka.MacieV2.Types.BucketStatisticsBySensitivity
+import Amazonka.MacieV2.Types.Cell
+import Amazonka.MacieV2.Types.ClassificationDetails
+import Amazonka.MacieV2.Types.ClassificationExportConfiguration
+import Amazonka.MacieV2.Types.ClassificationResult
+import Amazonka.MacieV2.Types.ClassificationResultStatus
+import Amazonka.MacieV2.Types.ClassificationScopeSummary
+import Amazonka.MacieV2.Types.CriteriaBlockForJob
+import Amazonka.MacieV2.Types.CriteriaForJob
+import Amazonka.MacieV2.Types.CriterionAdditionalProperties
+import Amazonka.MacieV2.Types.CustomDataIdentifierSummary
+import Amazonka.MacieV2.Types.CustomDataIdentifiers
+import Amazonka.MacieV2.Types.CustomDetection
+import Amazonka.MacieV2.Types.DailySchedule
+import Amazonka.MacieV2.Types.DefaultDetection
+import Amazonka.MacieV2.Types.DetectedDataDetails
+import Amazonka.MacieV2.Types.Detection
+import Amazonka.MacieV2.Types.DomainDetails
+import Amazonka.MacieV2.Types.FederatedUser
+import Amazonka.MacieV2.Types.Finding
+import Amazonka.MacieV2.Types.FindingAction
+import Amazonka.MacieV2.Types.FindingActor
+import Amazonka.MacieV2.Types.FindingCriteria
+import Amazonka.MacieV2.Types.FindingStatisticsSortCriteria
+import Amazonka.MacieV2.Types.FindingsFilterListItem
+import Amazonka.MacieV2.Types.GroupCount
+import Amazonka.MacieV2.Types.IamUser
+import Amazonka.MacieV2.Types.Invitation
+import Amazonka.MacieV2.Types.IpAddressDetails
+import Amazonka.MacieV2.Types.IpCity
+import Amazonka.MacieV2.Types.IpCountry
+import Amazonka.MacieV2.Types.IpGeoLocation
+import Amazonka.MacieV2.Types.IpOwner
+import Amazonka.MacieV2.Types.JobDetails
+import Amazonka.MacieV2.Types.JobScheduleFrequency
+import Amazonka.MacieV2.Types.JobScopeTerm
+import Amazonka.MacieV2.Types.JobScopingBlock
+import Amazonka.MacieV2.Types.JobSummary
+import Amazonka.MacieV2.Types.KeyValuePair
+import Amazonka.MacieV2.Types.LastRunErrorStatus
+import Amazonka.MacieV2.Types.ListJobsFilterCriteria
+import Amazonka.MacieV2.Types.ListJobsFilterTerm
+import Amazonka.MacieV2.Types.ListJobsSortCriteria
+import Amazonka.MacieV2.Types.ManagedDataIdentifierSummary
+import Amazonka.MacieV2.Types.MatchingBucket
+import Amazonka.MacieV2.Types.MatchingResource
+import Amazonka.MacieV2.Types.Member
+import Amazonka.MacieV2.Types.MonthlySchedule
+import Amazonka.MacieV2.Types.ObjectCountByEncryptionType
+import Amazonka.MacieV2.Types.ObjectLevelStatistics
+import Amazonka.MacieV2.Types.Occurrences
+import Amazonka.MacieV2.Types.Page
+import Amazonka.MacieV2.Types.PolicyDetails
+import Amazonka.MacieV2.Types.Range
+import Amazonka.MacieV2.Types.Record
+import Amazonka.MacieV2.Types.ReplicationDetails
+import Amazonka.MacieV2.Types.ResourceProfileArtifact
+import Amazonka.MacieV2.Types.ResourceStatistics
+import Amazonka.MacieV2.Types.ResourcesAffected
+import Amazonka.MacieV2.Types.RevealConfiguration
+import Amazonka.MacieV2.Types.S3Bucket
+import Amazonka.MacieV2.Types.S3BucketCriteriaForJob
+import Amazonka.MacieV2.Types.S3BucketDefinitionForJob
+import Amazonka.MacieV2.Types.S3BucketOwner
+import Amazonka.MacieV2.Types.S3ClassificationScope
+import Amazonka.MacieV2.Types.S3ClassificationScopeExclusion
+import Amazonka.MacieV2.Types.S3ClassificationScopeExclusionUpdate
+import Amazonka.MacieV2.Types.S3ClassificationScopeUpdate
+import Amazonka.MacieV2.Types.S3Destination
+import Amazonka.MacieV2.Types.S3JobDefinition
+import Amazonka.MacieV2.Types.S3Object
+import Amazonka.MacieV2.Types.S3WordsList
+import Amazonka.MacieV2.Types.Scoping
+import Amazonka.MacieV2.Types.SearchResourcesBucketCriteria
+import Amazonka.MacieV2.Types.SearchResourcesCriteria
+import Amazonka.MacieV2.Types.SearchResourcesCriteriaBlock
+import Amazonka.MacieV2.Types.SearchResourcesSimpleCriterion
+import Amazonka.MacieV2.Types.SearchResourcesSortCriteria
+import Amazonka.MacieV2.Types.SearchResourcesTagCriterion
+import Amazonka.MacieV2.Types.SearchResourcesTagCriterionPair
+import Amazonka.MacieV2.Types.SecurityHubConfiguration
+import Amazonka.MacieV2.Types.SensitiveDataItem
+import Amazonka.MacieV2.Types.SensitivityAggregations
+import Amazonka.MacieV2.Types.SensitivityInspectionTemplateExcludes
+import Amazonka.MacieV2.Types.SensitivityInspectionTemplateIncludes
+import Amazonka.MacieV2.Types.SensitivityInspectionTemplatesEntry
+import Amazonka.MacieV2.Types.ServerSideEncryption
+import Amazonka.MacieV2.Types.ServiceLimit
+import Amazonka.MacieV2.Types.SessionContext
+import Amazonka.MacieV2.Types.SessionContextAttributes
+import Amazonka.MacieV2.Types.SessionIssuer
+import Amazonka.MacieV2.Types.Severity
+import Amazonka.MacieV2.Types.SeverityLevel
+import Amazonka.MacieV2.Types.SimpleCriterionForJob
+import Amazonka.MacieV2.Types.SimpleScopeTerm
+import Amazonka.MacieV2.Types.SortCriteria
+import Amazonka.MacieV2.Types.Statistics
+import Amazonka.MacieV2.Types.SuppressDataIdentifier
+import Amazonka.MacieV2.Types.TagCriterionForJob
+import Amazonka.MacieV2.Types.TagCriterionPairForJob
+import Amazonka.MacieV2.Types.TagScopeTerm
+import Amazonka.MacieV2.Types.TagValuePair
+import Amazonka.MacieV2.Types.UnprocessedAccount
+import Amazonka.MacieV2.Types.UsageByAccount
+import Amazonka.MacieV2.Types.UsageRecord
+import Amazonka.MacieV2.Types.UsageStatisticsFilter
+import Amazonka.MacieV2.Types.UsageStatisticsSortBy
+import Amazonka.MacieV2.Types.UsageTotal
+import Amazonka.MacieV2.Types.UserIdentity
+import Amazonka.MacieV2.Types.UserIdentityRoot
+import Amazonka.MacieV2.Types.UserPausedDetails
+import Amazonka.MacieV2.Types.WeeklySchedule
+import Amazonka.MacieV2.UntagResource
+import Amazonka.MacieV2.UpdateAllowList
+import Amazonka.MacieV2.UpdateAutomatedDiscoveryConfiguration
+import Amazonka.MacieV2.UpdateClassificationJob
+import Amazonka.MacieV2.UpdateClassificationScope
+import Amazonka.MacieV2.UpdateFindingsFilter
+import Amazonka.MacieV2.UpdateMacieSession
+import Amazonka.MacieV2.UpdateMemberSession
+import Amazonka.MacieV2.UpdateOrganizationConfiguration
+import Amazonka.MacieV2.UpdateResourceProfile
+import Amazonka.MacieV2.UpdateResourceProfileDetections
+import Amazonka.MacieV2.UpdateRevealConfiguration
+import Amazonka.MacieV2.UpdateSensitivityInspectionTemplate
diff --git a/gen/Amazonka/MacieV2/ListAllowLists.hs b/gen/Amazonka/MacieV2/ListAllowLists.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/ListAllowLists.hs
@@ -0,0 +1,224 @@
+{-# 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.MacieV2.ListAllowLists
+-- 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 a subset of information about all the allow lists for an
+-- account.
+--
+-- This operation returns paginated results.
+module Amazonka.MacieV2.ListAllowLists
+  ( -- * Creating a Request
+    ListAllowLists (..),
+    newListAllowLists,
+
+    -- * Request Lenses
+    listAllowLists_maxResults,
+    listAllowLists_nextToken,
+
+    -- * Destructuring the Response
+    ListAllowListsResponse (..),
+    newListAllowListsResponse,
+
+    -- * Response Lenses
+    listAllowListsResponse_allowLists,
+    listAllowListsResponse_nextToken,
+    listAllowListsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAllowLists' smart constructor.
+data ListAllowLists = ListAllowLists'
+  { -- | The maximum number of items to include in each page of a paginated
+    -- response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The nextToken string that specifies which page of results to return in a
+    -- paginated response.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAllowLists' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAllowLists_maxResults' - The maximum number of items to include in each page of a paginated
+-- response.
+--
+-- 'nextToken', 'listAllowLists_nextToken' - The nextToken string that specifies which page of results to return in a
+-- paginated response.
+newListAllowLists ::
+  ListAllowLists
+newListAllowLists =
+  ListAllowLists'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of items to include in each page of a paginated
+-- response.
+listAllowLists_maxResults :: Lens.Lens' ListAllowLists (Prelude.Maybe Prelude.Natural)
+listAllowLists_maxResults = Lens.lens (\ListAllowLists' {maxResults} -> maxResults) (\s@ListAllowLists' {} a -> s {maxResults = a} :: ListAllowLists)
+
+-- | The nextToken string that specifies which page of results to return in a
+-- paginated response.
+listAllowLists_nextToken :: Lens.Lens' ListAllowLists (Prelude.Maybe Prelude.Text)
+listAllowLists_nextToken = Lens.lens (\ListAllowLists' {nextToken} -> nextToken) (\s@ListAllowLists' {} a -> s {nextToken = a} :: ListAllowLists)
+
+instance Core.AWSPager ListAllowLists where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAllowListsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listAllowListsResponse_allowLists
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAllowLists_nextToken
+          Lens..~ rs
+          Lens.^? listAllowListsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListAllowLists where
+  type
+    AWSResponse ListAllowLists =
+      ListAllowListsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAllowListsResponse'
+            Prelude.<$> (x Data..?> "allowLists" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAllowLists where
+  hashWithSalt _salt ListAllowLists' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListAllowLists where
+  rnf ListAllowLists' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListAllowLists where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListAllowLists where
+  toPath = Prelude.const "/allow-lists"
+
+instance Data.ToQuery ListAllowLists where
+  toQuery ListAllowLists' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListAllowListsResponse' smart constructor.
+data ListAllowListsResponse = ListAllowListsResponse'
+  { -- | An array of objects, one for each allow list.
+    allowLists :: Prelude.Maybe [AllowListSummary],
+    -- | The string to use in a subsequent request to get the next page of
+    -- results in a paginated response. This value is null if there are no
+    -- additional pages.
+    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 'ListAllowListsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowLists', 'listAllowListsResponse_allowLists' - An array of objects, one for each allow list.
+--
+-- 'nextToken', 'listAllowListsResponse_nextToken' - The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+--
+-- 'httpStatus', 'listAllowListsResponse_httpStatus' - The response's http status code.
+newListAllowListsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAllowListsResponse
+newListAllowListsResponse pHttpStatus_ =
+  ListAllowListsResponse'
+    { allowLists =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each allow list.
+listAllowListsResponse_allowLists :: Lens.Lens' ListAllowListsResponse (Prelude.Maybe [AllowListSummary])
+listAllowListsResponse_allowLists = Lens.lens (\ListAllowListsResponse' {allowLists} -> allowLists) (\s@ListAllowListsResponse' {} a -> s {allowLists = a} :: ListAllowListsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+listAllowListsResponse_nextToken :: Lens.Lens' ListAllowListsResponse (Prelude.Maybe Prelude.Text)
+listAllowListsResponse_nextToken = Lens.lens (\ListAllowListsResponse' {nextToken} -> nextToken) (\s@ListAllowListsResponse' {} a -> s {nextToken = a} :: ListAllowListsResponse)
+
+-- | The response's http status code.
+listAllowListsResponse_httpStatus :: Lens.Lens' ListAllowListsResponse Prelude.Int
+listAllowListsResponse_httpStatus = Lens.lens (\ListAllowListsResponse' {httpStatus} -> httpStatus) (\s@ListAllowListsResponse' {} a -> s {httpStatus = a} :: ListAllowListsResponse)
+
+instance Prelude.NFData ListAllowListsResponse where
+  rnf ListAllowListsResponse' {..} =
+    Prelude.rnf allowLists
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/ListClassificationJobs.hs b/gen/Amazonka/MacieV2/ListClassificationJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/ListClassificationJobs.hs
@@ -0,0 +1,259 @@
+{-# 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.MacieV2.ListClassificationJobs
+-- 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 a subset of information about one or more classification jobs.
+--
+-- This operation returns paginated results.
+module Amazonka.MacieV2.ListClassificationJobs
+  ( -- * Creating a Request
+    ListClassificationJobs (..),
+    newListClassificationJobs,
+
+    -- * Request Lenses
+    listClassificationJobs_filterCriteria,
+    listClassificationJobs_maxResults,
+    listClassificationJobs_nextToken,
+    listClassificationJobs_sortCriteria,
+
+    -- * Destructuring the Response
+    ListClassificationJobsResponse (..),
+    newListClassificationJobsResponse,
+
+    -- * Response Lenses
+    listClassificationJobsResponse_items,
+    listClassificationJobsResponse_nextToken,
+    listClassificationJobsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListClassificationJobs' smart constructor.
+data ListClassificationJobs = ListClassificationJobs'
+  { -- | The criteria to use to filter the results.
+    filterCriteria :: Prelude.Maybe ListJobsFilterCriteria,
+    -- | The maximum number of items to include in each page of the response.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The nextToken string that specifies which page of results to return in a
+    -- paginated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The criteria to use to sort the results.
+    sortCriteria :: Prelude.Maybe ListJobsSortCriteria
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListClassificationJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filterCriteria', 'listClassificationJobs_filterCriteria' - The criteria to use to filter the results.
+--
+-- 'maxResults', 'listClassificationJobs_maxResults' - The maximum number of items to include in each page of the response.
+--
+-- 'nextToken', 'listClassificationJobs_nextToken' - The nextToken string that specifies which page of results to return in a
+-- paginated response.
+--
+-- 'sortCriteria', 'listClassificationJobs_sortCriteria' - The criteria to use to sort the results.
+newListClassificationJobs ::
+  ListClassificationJobs
+newListClassificationJobs =
+  ListClassificationJobs'
+    { filterCriteria =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortCriteria = Prelude.Nothing
+    }
+
+-- | The criteria to use to filter the results.
+listClassificationJobs_filterCriteria :: Lens.Lens' ListClassificationJobs (Prelude.Maybe ListJobsFilterCriteria)
+listClassificationJobs_filterCriteria = Lens.lens (\ListClassificationJobs' {filterCriteria} -> filterCriteria) (\s@ListClassificationJobs' {} a -> s {filterCriteria = a} :: ListClassificationJobs)
+
+-- | The maximum number of items to include in each page of the response.
+listClassificationJobs_maxResults :: Lens.Lens' ListClassificationJobs (Prelude.Maybe Prelude.Int)
+listClassificationJobs_maxResults = Lens.lens (\ListClassificationJobs' {maxResults} -> maxResults) (\s@ListClassificationJobs' {} a -> s {maxResults = a} :: ListClassificationJobs)
+
+-- | The nextToken string that specifies which page of results to return in a
+-- paginated response.
+listClassificationJobs_nextToken :: Lens.Lens' ListClassificationJobs (Prelude.Maybe Prelude.Text)
+listClassificationJobs_nextToken = Lens.lens (\ListClassificationJobs' {nextToken} -> nextToken) (\s@ListClassificationJobs' {} a -> s {nextToken = a} :: ListClassificationJobs)
+
+-- | The criteria to use to sort the results.
+listClassificationJobs_sortCriteria :: Lens.Lens' ListClassificationJobs (Prelude.Maybe ListJobsSortCriteria)
+listClassificationJobs_sortCriteria = Lens.lens (\ListClassificationJobs' {sortCriteria} -> sortCriteria) (\s@ListClassificationJobs' {} a -> s {sortCriteria = a} :: ListClassificationJobs)
+
+instance Core.AWSPager ListClassificationJobs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listClassificationJobsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listClassificationJobsResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listClassificationJobs_nextToken
+          Lens..~ rs
+          Lens.^? listClassificationJobsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListClassificationJobs where
+  type
+    AWSResponse ListClassificationJobs =
+      ListClassificationJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListClassificationJobsResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListClassificationJobs where
+  hashWithSalt _salt ListClassificationJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` filterCriteria
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortCriteria
+
+instance Prelude.NFData ListClassificationJobs where
+  rnf ListClassificationJobs' {..} =
+    Prelude.rnf filterCriteria
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortCriteria
+
+instance Data.ToHeaders ListClassificationJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListClassificationJobs where
+  toJSON ListClassificationJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filterCriteria" Data..=)
+              Prelude.<$> filterCriteria,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("sortCriteria" Data..=) Prelude.<$> sortCriteria
+          ]
+      )
+
+instance Data.ToPath ListClassificationJobs where
+  toPath = Prelude.const "/jobs/list"
+
+instance Data.ToQuery ListClassificationJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListClassificationJobsResponse' smart constructor.
+data ListClassificationJobsResponse = ListClassificationJobsResponse'
+  { -- | An array of objects, one for each job that matches the filter criteria
+    -- specified in the request.
+    items :: Prelude.Maybe [JobSummary],
+    -- | The string to use in a subsequent request to get the next page of
+    -- results in a paginated response. This value is null if there are no
+    -- additional pages.
+    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 'ListClassificationJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listClassificationJobsResponse_items' - An array of objects, one for each job that matches the filter criteria
+-- specified in the request.
+--
+-- 'nextToken', 'listClassificationJobsResponse_nextToken' - The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+--
+-- 'httpStatus', 'listClassificationJobsResponse_httpStatus' - The response's http status code.
+newListClassificationJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListClassificationJobsResponse
+newListClassificationJobsResponse pHttpStatus_ =
+  ListClassificationJobsResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each job that matches the filter criteria
+-- specified in the request.
+listClassificationJobsResponse_items :: Lens.Lens' ListClassificationJobsResponse (Prelude.Maybe [JobSummary])
+listClassificationJobsResponse_items = Lens.lens (\ListClassificationJobsResponse' {items} -> items) (\s@ListClassificationJobsResponse' {} a -> s {items = a} :: ListClassificationJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+listClassificationJobsResponse_nextToken :: Lens.Lens' ListClassificationJobsResponse (Prelude.Maybe Prelude.Text)
+listClassificationJobsResponse_nextToken = Lens.lens (\ListClassificationJobsResponse' {nextToken} -> nextToken) (\s@ListClassificationJobsResponse' {} a -> s {nextToken = a} :: ListClassificationJobsResponse)
+
+-- | The response's http status code.
+listClassificationJobsResponse_httpStatus :: Lens.Lens' ListClassificationJobsResponse Prelude.Int
+listClassificationJobsResponse_httpStatus = Lens.lens (\ListClassificationJobsResponse' {httpStatus} -> httpStatus) (\s@ListClassificationJobsResponse' {} a -> s {httpStatus = a} :: ListClassificationJobsResponse)
+
+instance
+  Prelude.NFData
+    ListClassificationJobsResponse
+  where
+  rnf ListClassificationJobsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/ListClassificationScopes.hs b/gen/Amazonka/MacieV2/ListClassificationScopes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/ListClassificationScopes.hs
@@ -0,0 +1,231 @@
+{-# 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.MacieV2.ListClassificationScopes
+-- 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 a subset of information about the classification scope for an
+-- account.
+--
+-- This operation returns paginated results.
+module Amazonka.MacieV2.ListClassificationScopes
+  ( -- * Creating a Request
+    ListClassificationScopes (..),
+    newListClassificationScopes,
+
+    -- * Request Lenses
+    listClassificationScopes_name,
+    listClassificationScopes_nextToken,
+
+    -- * Destructuring the Response
+    ListClassificationScopesResponse (..),
+    newListClassificationScopesResponse,
+
+    -- * Response Lenses
+    listClassificationScopesResponse_classificationScopes,
+    listClassificationScopesResponse_nextToken,
+    listClassificationScopesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListClassificationScopes' smart constructor.
+data ListClassificationScopes = ListClassificationScopes'
+  { -- | The name of the classification scope to retrieve the unique identifier
+    -- for.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The nextToken string that specifies which page of results to return in a
+    -- paginated response.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListClassificationScopes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listClassificationScopes_name' - The name of the classification scope to retrieve the unique identifier
+-- for.
+--
+-- 'nextToken', 'listClassificationScopes_nextToken' - The nextToken string that specifies which page of results to return in a
+-- paginated response.
+newListClassificationScopes ::
+  ListClassificationScopes
+newListClassificationScopes =
+  ListClassificationScopes'
+    { name = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The name of the classification scope to retrieve the unique identifier
+-- for.
+listClassificationScopes_name :: Lens.Lens' ListClassificationScopes (Prelude.Maybe Prelude.Text)
+listClassificationScopes_name = Lens.lens (\ListClassificationScopes' {name} -> name) (\s@ListClassificationScopes' {} a -> s {name = a} :: ListClassificationScopes)
+
+-- | The nextToken string that specifies which page of results to return in a
+-- paginated response.
+listClassificationScopes_nextToken :: Lens.Lens' ListClassificationScopes (Prelude.Maybe Prelude.Text)
+listClassificationScopes_nextToken = Lens.lens (\ListClassificationScopes' {nextToken} -> nextToken) (\s@ListClassificationScopes' {} a -> s {nextToken = a} :: ListClassificationScopes)
+
+instance Core.AWSPager ListClassificationScopes where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listClassificationScopesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listClassificationScopesResponse_classificationScopes
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listClassificationScopes_nextToken
+          Lens..~ rs
+          Lens.^? listClassificationScopesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListClassificationScopes where
+  type
+    AWSResponse ListClassificationScopes =
+      ListClassificationScopesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListClassificationScopesResponse'
+            Prelude.<$> ( x
+                            Data..?> "classificationScopes"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListClassificationScopes where
+  hashWithSalt _salt ListClassificationScopes' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListClassificationScopes where
+  rnf ListClassificationScopes' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListClassificationScopes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListClassificationScopes where
+  toPath = Prelude.const "/classification-scopes"
+
+instance Data.ToQuery ListClassificationScopes where
+  toQuery ListClassificationScopes' {..} =
+    Prelude.mconcat
+      ["name" Data.=: name, "nextToken" Data.=: nextToken]
+
+-- | /See:/ 'newListClassificationScopesResponse' smart constructor.
+data ListClassificationScopesResponse = ListClassificationScopesResponse'
+  { -- | An array that specifies the unique identifier and name of the
+    -- classification scope for the account.
+    classificationScopes :: Prelude.Maybe [ClassificationScopeSummary],
+    -- | The string to use in a subsequent request to get the next page of
+    -- results in a paginated response. This value is null if there are no
+    -- additional pages.
+    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 'ListClassificationScopesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'classificationScopes', 'listClassificationScopesResponse_classificationScopes' - An array that specifies the unique identifier and name of the
+-- classification scope for the account.
+--
+-- 'nextToken', 'listClassificationScopesResponse_nextToken' - The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+--
+-- 'httpStatus', 'listClassificationScopesResponse_httpStatus' - The response's http status code.
+newListClassificationScopesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListClassificationScopesResponse
+newListClassificationScopesResponse pHttpStatus_ =
+  ListClassificationScopesResponse'
+    { classificationScopes =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array that specifies the unique identifier and name of the
+-- classification scope for the account.
+listClassificationScopesResponse_classificationScopes :: Lens.Lens' ListClassificationScopesResponse (Prelude.Maybe [ClassificationScopeSummary])
+listClassificationScopesResponse_classificationScopes = Lens.lens (\ListClassificationScopesResponse' {classificationScopes} -> classificationScopes) (\s@ListClassificationScopesResponse' {} a -> s {classificationScopes = a} :: ListClassificationScopesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+listClassificationScopesResponse_nextToken :: Lens.Lens' ListClassificationScopesResponse (Prelude.Maybe Prelude.Text)
+listClassificationScopesResponse_nextToken = Lens.lens (\ListClassificationScopesResponse' {nextToken} -> nextToken) (\s@ListClassificationScopesResponse' {} a -> s {nextToken = a} :: ListClassificationScopesResponse)
+
+-- | The response's http status code.
+listClassificationScopesResponse_httpStatus :: Lens.Lens' ListClassificationScopesResponse Prelude.Int
+listClassificationScopesResponse_httpStatus = Lens.lens (\ListClassificationScopesResponse' {httpStatus} -> httpStatus) (\s@ListClassificationScopesResponse' {} a -> s {httpStatus = a} :: ListClassificationScopesResponse)
+
+instance
+  Prelude.NFData
+    ListClassificationScopesResponse
+  where
+  rnf ListClassificationScopesResponse' {..} =
+    Prelude.rnf classificationScopes
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/ListCustomDataIdentifiers.hs b/gen/Amazonka/MacieV2/ListCustomDataIdentifiers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/ListCustomDataIdentifiers.hs
@@ -0,0 +1,231 @@
+{-# 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.MacieV2.ListCustomDataIdentifiers
+-- 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 a subset of information about all the custom data identifiers
+-- for an account.
+--
+-- This operation returns paginated results.
+module Amazonka.MacieV2.ListCustomDataIdentifiers
+  ( -- * Creating a Request
+    ListCustomDataIdentifiers (..),
+    newListCustomDataIdentifiers,
+
+    -- * Request Lenses
+    listCustomDataIdentifiers_maxResults,
+    listCustomDataIdentifiers_nextToken,
+
+    -- * Destructuring the Response
+    ListCustomDataIdentifiersResponse (..),
+    newListCustomDataIdentifiersResponse,
+
+    -- * Response Lenses
+    listCustomDataIdentifiersResponse_items,
+    listCustomDataIdentifiersResponse_nextToken,
+    listCustomDataIdentifiersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListCustomDataIdentifiers' smart constructor.
+data ListCustomDataIdentifiers = ListCustomDataIdentifiers'
+  { -- | The maximum number of items to include in each page of the response.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The nextToken string that specifies which page of results to return in a
+    -- paginated response.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCustomDataIdentifiers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listCustomDataIdentifiers_maxResults' - The maximum number of items to include in each page of the response.
+--
+-- 'nextToken', 'listCustomDataIdentifiers_nextToken' - The nextToken string that specifies which page of results to return in a
+-- paginated response.
+newListCustomDataIdentifiers ::
+  ListCustomDataIdentifiers
+newListCustomDataIdentifiers =
+  ListCustomDataIdentifiers'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of items to include in each page of the response.
+listCustomDataIdentifiers_maxResults :: Lens.Lens' ListCustomDataIdentifiers (Prelude.Maybe Prelude.Int)
+listCustomDataIdentifiers_maxResults = Lens.lens (\ListCustomDataIdentifiers' {maxResults} -> maxResults) (\s@ListCustomDataIdentifiers' {} a -> s {maxResults = a} :: ListCustomDataIdentifiers)
+
+-- | The nextToken string that specifies which page of results to return in a
+-- paginated response.
+listCustomDataIdentifiers_nextToken :: Lens.Lens' ListCustomDataIdentifiers (Prelude.Maybe Prelude.Text)
+listCustomDataIdentifiers_nextToken = Lens.lens (\ListCustomDataIdentifiers' {nextToken} -> nextToken) (\s@ListCustomDataIdentifiers' {} a -> s {nextToken = a} :: ListCustomDataIdentifiers)
+
+instance Core.AWSPager ListCustomDataIdentifiers where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listCustomDataIdentifiersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listCustomDataIdentifiersResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listCustomDataIdentifiers_nextToken
+          Lens..~ rs
+          Lens.^? listCustomDataIdentifiersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListCustomDataIdentifiers where
+  type
+    AWSResponse ListCustomDataIdentifiers =
+      ListCustomDataIdentifiersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListCustomDataIdentifiersResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListCustomDataIdentifiers where
+  hashWithSalt _salt ListCustomDataIdentifiers' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListCustomDataIdentifiers where
+  rnf ListCustomDataIdentifiers' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListCustomDataIdentifiers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListCustomDataIdentifiers where
+  toJSON ListCustomDataIdentifiers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListCustomDataIdentifiers where
+  toPath =
+    Prelude.const "/custom-data-identifiers/list"
+
+instance Data.ToQuery ListCustomDataIdentifiers where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListCustomDataIdentifiersResponse' smart constructor.
+data ListCustomDataIdentifiersResponse = ListCustomDataIdentifiersResponse'
+  { -- | An array of objects, one for each custom data identifier.
+    items :: Prelude.Maybe [CustomDataIdentifierSummary],
+    -- | The string to use in a subsequent request to get the next page of
+    -- results in a paginated response. This value is null if there are no
+    -- additional pages.
+    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 'ListCustomDataIdentifiersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listCustomDataIdentifiersResponse_items' - An array of objects, one for each custom data identifier.
+--
+-- 'nextToken', 'listCustomDataIdentifiersResponse_nextToken' - The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+--
+-- 'httpStatus', 'listCustomDataIdentifiersResponse_httpStatus' - The response's http status code.
+newListCustomDataIdentifiersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListCustomDataIdentifiersResponse
+newListCustomDataIdentifiersResponse pHttpStatus_ =
+  ListCustomDataIdentifiersResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each custom data identifier.
+listCustomDataIdentifiersResponse_items :: Lens.Lens' ListCustomDataIdentifiersResponse (Prelude.Maybe [CustomDataIdentifierSummary])
+listCustomDataIdentifiersResponse_items = Lens.lens (\ListCustomDataIdentifiersResponse' {items} -> items) (\s@ListCustomDataIdentifiersResponse' {} a -> s {items = a} :: ListCustomDataIdentifiersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+listCustomDataIdentifiersResponse_nextToken :: Lens.Lens' ListCustomDataIdentifiersResponse (Prelude.Maybe Prelude.Text)
+listCustomDataIdentifiersResponse_nextToken = Lens.lens (\ListCustomDataIdentifiersResponse' {nextToken} -> nextToken) (\s@ListCustomDataIdentifiersResponse' {} a -> s {nextToken = a} :: ListCustomDataIdentifiersResponse)
+
+-- | The response's http status code.
+listCustomDataIdentifiersResponse_httpStatus :: Lens.Lens' ListCustomDataIdentifiersResponse Prelude.Int
+listCustomDataIdentifiersResponse_httpStatus = Lens.lens (\ListCustomDataIdentifiersResponse' {httpStatus} -> httpStatus) (\s@ListCustomDataIdentifiersResponse' {} a -> s {httpStatus = a} :: ListCustomDataIdentifiersResponse)
+
+instance
+  Prelude.NFData
+    ListCustomDataIdentifiersResponse
+  where
+  rnf ListCustomDataIdentifiersResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/ListFindings.hs b/gen/Amazonka/MacieV2/ListFindings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/ListFindings.hs
@@ -0,0 +1,252 @@
+{-# 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.MacieV2.ListFindings
+-- 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 a subset of information about one or more findings.
+--
+-- This operation returns paginated results.
+module Amazonka.MacieV2.ListFindings
+  ( -- * Creating a Request
+    ListFindings (..),
+    newListFindings,
+
+    -- * Request Lenses
+    listFindings_findingCriteria,
+    listFindings_maxResults,
+    listFindings_nextToken,
+    listFindings_sortCriteria,
+
+    -- * Destructuring the Response
+    ListFindingsResponse (..),
+    newListFindingsResponse,
+
+    -- * Response Lenses
+    listFindingsResponse_findingIds,
+    listFindingsResponse_nextToken,
+    listFindingsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListFindings' smart constructor.
+data ListFindings = ListFindings'
+  { -- | The criteria to use to filter the results.
+    findingCriteria :: Prelude.Maybe FindingCriteria,
+    -- | The maximum number of items to include in each page of the response.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The nextToken string that specifies which page of results to return in a
+    -- paginated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The criteria to use to sort the results.
+    sortCriteria :: Prelude.Maybe SortCriteria
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListFindings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'findingCriteria', 'listFindings_findingCriteria' - The criteria to use to filter the results.
+--
+-- 'maxResults', 'listFindings_maxResults' - The maximum number of items to include in each page of the response.
+--
+-- 'nextToken', 'listFindings_nextToken' - The nextToken string that specifies which page of results to return in a
+-- paginated response.
+--
+-- 'sortCriteria', 'listFindings_sortCriteria' - The criteria to use to sort the results.
+newListFindings ::
+  ListFindings
+newListFindings =
+  ListFindings'
+    { findingCriteria = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortCriteria = Prelude.Nothing
+    }
+
+-- | The criteria to use to filter the results.
+listFindings_findingCriteria :: Lens.Lens' ListFindings (Prelude.Maybe FindingCriteria)
+listFindings_findingCriteria = Lens.lens (\ListFindings' {findingCriteria} -> findingCriteria) (\s@ListFindings' {} a -> s {findingCriteria = a} :: ListFindings)
+
+-- | The maximum number of items to include in each page of the response.
+listFindings_maxResults :: Lens.Lens' ListFindings (Prelude.Maybe Prelude.Int)
+listFindings_maxResults = Lens.lens (\ListFindings' {maxResults} -> maxResults) (\s@ListFindings' {} a -> s {maxResults = a} :: ListFindings)
+
+-- | The nextToken string that specifies which page of results to return in a
+-- paginated response.
+listFindings_nextToken :: Lens.Lens' ListFindings (Prelude.Maybe Prelude.Text)
+listFindings_nextToken = Lens.lens (\ListFindings' {nextToken} -> nextToken) (\s@ListFindings' {} a -> s {nextToken = a} :: ListFindings)
+
+-- | The criteria to use to sort the results.
+listFindings_sortCriteria :: Lens.Lens' ListFindings (Prelude.Maybe SortCriteria)
+listFindings_sortCriteria = Lens.lens (\ListFindings' {sortCriteria} -> sortCriteria) (\s@ListFindings' {} a -> s {sortCriteria = a} :: ListFindings)
+
+instance Core.AWSPager ListFindings where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listFindingsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listFindingsResponse_findingIds
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listFindings_nextToken
+          Lens..~ rs
+          Lens.^? listFindingsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListFindings where
+  type AWSResponse ListFindings = ListFindingsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListFindingsResponse'
+            Prelude.<$> (x Data..?> "findingIds" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListFindings where
+  hashWithSalt _salt ListFindings' {..} =
+    _salt
+      `Prelude.hashWithSalt` findingCriteria
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortCriteria
+
+instance Prelude.NFData ListFindings where
+  rnf ListFindings' {..} =
+    Prelude.rnf findingCriteria
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortCriteria
+
+instance Data.ToHeaders ListFindings where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListFindings where
+  toJSON ListFindings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("findingCriteria" Data..=)
+              Prelude.<$> findingCriteria,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("sortCriteria" Data..=) Prelude.<$> sortCriteria
+          ]
+      )
+
+instance Data.ToPath ListFindings where
+  toPath = Prelude.const "/findings"
+
+instance Data.ToQuery ListFindings where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListFindingsResponse' smart constructor.
+data ListFindingsResponse = ListFindingsResponse'
+  { -- | An array of strings, where each string is the unique identifier for a
+    -- finding that matches the filter criteria specified in the request.
+    findingIds :: Prelude.Maybe [Prelude.Text],
+    -- | The string to use in a subsequent request to get the next page of
+    -- results in a paginated response. This value is null if there are no
+    -- additional pages.
+    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 'ListFindingsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'findingIds', 'listFindingsResponse_findingIds' - An array of strings, where each string is the unique identifier for a
+-- finding that matches the filter criteria specified in the request.
+--
+-- 'nextToken', 'listFindingsResponse_nextToken' - The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+--
+-- 'httpStatus', 'listFindingsResponse_httpStatus' - The response's http status code.
+newListFindingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListFindingsResponse
+newListFindingsResponse pHttpStatus_ =
+  ListFindingsResponse'
+    { findingIds = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of strings, where each string is the unique identifier for a
+-- finding that matches the filter criteria specified in the request.
+listFindingsResponse_findingIds :: Lens.Lens' ListFindingsResponse (Prelude.Maybe [Prelude.Text])
+listFindingsResponse_findingIds = Lens.lens (\ListFindingsResponse' {findingIds} -> findingIds) (\s@ListFindingsResponse' {} a -> s {findingIds = a} :: ListFindingsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+listFindingsResponse_nextToken :: Lens.Lens' ListFindingsResponse (Prelude.Maybe Prelude.Text)
+listFindingsResponse_nextToken = Lens.lens (\ListFindingsResponse' {nextToken} -> nextToken) (\s@ListFindingsResponse' {} a -> s {nextToken = a} :: ListFindingsResponse)
+
+-- | The response's http status code.
+listFindingsResponse_httpStatus :: Lens.Lens' ListFindingsResponse Prelude.Int
+listFindingsResponse_httpStatus = Lens.lens (\ListFindingsResponse' {httpStatus} -> httpStatus) (\s@ListFindingsResponse' {} a -> s {httpStatus = a} :: ListFindingsResponse)
+
+instance Prelude.NFData ListFindingsResponse where
+  rnf ListFindingsResponse' {..} =
+    Prelude.rnf findingIds
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/ListFindingsFilters.hs b/gen/Amazonka/MacieV2/ListFindingsFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/ListFindingsFilters.hs
@@ -0,0 +1,230 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.ListFindingsFilters
+-- 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 a subset of information about all the findings filters for an
+-- account.
+--
+-- This operation returns paginated results.
+module Amazonka.MacieV2.ListFindingsFilters
+  ( -- * Creating a Request
+    ListFindingsFilters (..),
+    newListFindingsFilters,
+
+    -- * Request Lenses
+    listFindingsFilters_maxResults,
+    listFindingsFilters_nextToken,
+
+    -- * Destructuring the Response
+    ListFindingsFiltersResponse (..),
+    newListFindingsFiltersResponse,
+
+    -- * Response Lenses
+    listFindingsFiltersResponse_findingsFilterListItems,
+    listFindingsFiltersResponse_nextToken,
+    listFindingsFiltersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListFindingsFilters' smart constructor.
+data ListFindingsFilters = ListFindingsFilters'
+  { -- | The maximum number of items to include in each page of a paginated
+    -- response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The nextToken string that specifies which page of results to return in a
+    -- paginated response.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListFindingsFilters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listFindingsFilters_maxResults' - The maximum number of items to include in each page of a paginated
+-- response.
+--
+-- 'nextToken', 'listFindingsFilters_nextToken' - The nextToken string that specifies which page of results to return in a
+-- paginated response.
+newListFindingsFilters ::
+  ListFindingsFilters
+newListFindingsFilters =
+  ListFindingsFilters'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of items to include in each page of a paginated
+-- response.
+listFindingsFilters_maxResults :: Lens.Lens' ListFindingsFilters (Prelude.Maybe Prelude.Natural)
+listFindingsFilters_maxResults = Lens.lens (\ListFindingsFilters' {maxResults} -> maxResults) (\s@ListFindingsFilters' {} a -> s {maxResults = a} :: ListFindingsFilters)
+
+-- | The nextToken string that specifies which page of results to return in a
+-- paginated response.
+listFindingsFilters_nextToken :: Lens.Lens' ListFindingsFilters (Prelude.Maybe Prelude.Text)
+listFindingsFilters_nextToken = Lens.lens (\ListFindingsFilters' {nextToken} -> nextToken) (\s@ListFindingsFilters' {} a -> s {nextToken = a} :: ListFindingsFilters)
+
+instance Core.AWSPager ListFindingsFilters where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listFindingsFiltersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listFindingsFiltersResponse_findingsFilterListItems
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listFindingsFilters_nextToken
+          Lens..~ rs
+          Lens.^? listFindingsFiltersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListFindingsFilters where
+  type
+    AWSResponse ListFindingsFilters =
+      ListFindingsFiltersResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListFindingsFiltersResponse'
+            Prelude.<$> ( x
+                            Data..?> "findingsFilterListItems"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListFindingsFilters where
+  hashWithSalt _salt ListFindingsFilters' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListFindingsFilters where
+  rnf ListFindingsFilters' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListFindingsFilters where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListFindingsFilters where
+  toPath = Prelude.const "/findingsfilters"
+
+instance Data.ToQuery ListFindingsFilters where
+  toQuery ListFindingsFilters' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListFindingsFiltersResponse' smart constructor.
+data ListFindingsFiltersResponse = ListFindingsFiltersResponse'
+  { -- | An array of objects, one for each filter that\'s associated with the
+    -- account.
+    findingsFilterListItems :: Prelude.Maybe [FindingsFilterListItem],
+    -- | The string to use in a subsequent request to get the next page of
+    -- results in a paginated response. This value is null if there are no
+    -- additional pages.
+    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 'ListFindingsFiltersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'findingsFilterListItems', 'listFindingsFiltersResponse_findingsFilterListItems' - An array of objects, one for each filter that\'s associated with the
+-- account.
+--
+-- 'nextToken', 'listFindingsFiltersResponse_nextToken' - The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+--
+-- 'httpStatus', 'listFindingsFiltersResponse_httpStatus' - The response's http status code.
+newListFindingsFiltersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListFindingsFiltersResponse
+newListFindingsFiltersResponse pHttpStatus_ =
+  ListFindingsFiltersResponse'
+    { findingsFilterListItems =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each filter that\'s associated with the
+-- account.
+listFindingsFiltersResponse_findingsFilterListItems :: Lens.Lens' ListFindingsFiltersResponse (Prelude.Maybe [FindingsFilterListItem])
+listFindingsFiltersResponse_findingsFilterListItems = Lens.lens (\ListFindingsFiltersResponse' {findingsFilterListItems} -> findingsFilterListItems) (\s@ListFindingsFiltersResponse' {} a -> s {findingsFilterListItems = a} :: ListFindingsFiltersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+listFindingsFiltersResponse_nextToken :: Lens.Lens' ListFindingsFiltersResponse (Prelude.Maybe Prelude.Text)
+listFindingsFiltersResponse_nextToken = Lens.lens (\ListFindingsFiltersResponse' {nextToken} -> nextToken) (\s@ListFindingsFiltersResponse' {} a -> s {nextToken = a} :: ListFindingsFiltersResponse)
+
+-- | The response's http status code.
+listFindingsFiltersResponse_httpStatus :: Lens.Lens' ListFindingsFiltersResponse Prelude.Int
+listFindingsFiltersResponse_httpStatus = Lens.lens (\ListFindingsFiltersResponse' {httpStatus} -> httpStatus) (\s@ListFindingsFiltersResponse' {} a -> s {httpStatus = a} :: ListFindingsFiltersResponse)
+
+instance Prelude.NFData ListFindingsFiltersResponse where
+  rnf ListFindingsFiltersResponse' {..} =
+    Prelude.rnf findingsFilterListItems
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/ListInvitations.hs b/gen/Amazonka/MacieV2/ListInvitations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/ListInvitations.hs
@@ -0,0 +1,227 @@
+{-# 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.MacieV2.ListInvitations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about the Amazon Macie membership invitations that
+-- were received by an account.
+--
+-- This operation returns paginated results.
+module Amazonka.MacieV2.ListInvitations
+  ( -- * Creating a Request
+    ListInvitations (..),
+    newListInvitations,
+
+    -- * Request Lenses
+    listInvitations_maxResults,
+    listInvitations_nextToken,
+
+    -- * Destructuring the Response
+    ListInvitationsResponse (..),
+    newListInvitationsResponse,
+
+    -- * Response Lenses
+    listInvitationsResponse_invitations,
+    listInvitationsResponse_nextToken,
+    listInvitationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListInvitations' smart constructor.
+data ListInvitations = ListInvitations'
+  { -- | The maximum number of items to include in each page of a paginated
+    -- response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The nextToken string that specifies which page of results to return in a
+    -- paginated response.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListInvitations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listInvitations_maxResults' - The maximum number of items to include in each page of a paginated
+-- response.
+--
+-- 'nextToken', 'listInvitations_nextToken' - The nextToken string that specifies which page of results to return in a
+-- paginated response.
+newListInvitations ::
+  ListInvitations
+newListInvitations =
+  ListInvitations'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of items to include in each page of a paginated
+-- response.
+listInvitations_maxResults :: Lens.Lens' ListInvitations (Prelude.Maybe Prelude.Natural)
+listInvitations_maxResults = Lens.lens (\ListInvitations' {maxResults} -> maxResults) (\s@ListInvitations' {} a -> s {maxResults = a} :: ListInvitations)
+
+-- | The nextToken string that specifies which page of results to return in a
+-- paginated response.
+listInvitations_nextToken :: Lens.Lens' ListInvitations (Prelude.Maybe Prelude.Text)
+listInvitations_nextToken = Lens.lens (\ListInvitations' {nextToken} -> nextToken) (\s@ListInvitations' {} a -> s {nextToken = a} :: ListInvitations)
+
+instance Core.AWSPager ListInvitations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listInvitationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listInvitationsResponse_invitations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listInvitations_nextToken
+          Lens..~ rs
+          Lens.^? listInvitationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListInvitations where
+  type
+    AWSResponse ListInvitations =
+      ListInvitationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListInvitationsResponse'
+            Prelude.<$> (x Data..?> "invitations" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListInvitations where
+  hashWithSalt _salt ListInvitations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListInvitations where
+  rnf ListInvitations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListInvitations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListInvitations where
+  toPath = Prelude.const "/invitations"
+
+instance Data.ToQuery ListInvitations where
+  toQuery ListInvitations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListInvitationsResponse' smart constructor.
+data ListInvitationsResponse = ListInvitationsResponse'
+  { -- | An array of objects, one for each invitation that was received by the
+    -- account.
+    invitations :: Prelude.Maybe [Invitation],
+    -- | The string to use in a subsequent request to get the next page of
+    -- results in a paginated response. This value is null if there are no
+    -- additional pages.
+    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 'ListInvitationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'invitations', 'listInvitationsResponse_invitations' - An array of objects, one for each invitation that was received by the
+-- account.
+--
+-- 'nextToken', 'listInvitationsResponse_nextToken' - The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+--
+-- 'httpStatus', 'listInvitationsResponse_httpStatus' - The response's http status code.
+newListInvitationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListInvitationsResponse
+newListInvitationsResponse pHttpStatus_ =
+  ListInvitationsResponse'
+    { invitations =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each invitation that was received by the
+-- account.
+listInvitationsResponse_invitations :: Lens.Lens' ListInvitationsResponse (Prelude.Maybe [Invitation])
+listInvitationsResponse_invitations = Lens.lens (\ListInvitationsResponse' {invitations} -> invitations) (\s@ListInvitationsResponse' {} a -> s {invitations = a} :: ListInvitationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+listInvitationsResponse_nextToken :: Lens.Lens' ListInvitationsResponse (Prelude.Maybe Prelude.Text)
+listInvitationsResponse_nextToken = Lens.lens (\ListInvitationsResponse' {nextToken} -> nextToken) (\s@ListInvitationsResponse' {} a -> s {nextToken = a} :: ListInvitationsResponse)
+
+-- | The response's http status code.
+listInvitationsResponse_httpStatus :: Lens.Lens' ListInvitationsResponse Prelude.Int
+listInvitationsResponse_httpStatus = Lens.lens (\ListInvitationsResponse' {httpStatus} -> httpStatus) (\s@ListInvitationsResponse' {} a -> s {httpStatus = a} :: ListInvitationsResponse)
+
+instance Prelude.NFData ListInvitationsResponse where
+  rnf ListInvitationsResponse' {..} =
+    Prelude.rnf invitations
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/ListManagedDataIdentifiers.hs b/gen/Amazonka/MacieV2/ListManagedDataIdentifiers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/ListManagedDataIdentifiers.hs
@@ -0,0 +1,216 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.ListManagedDataIdentifiers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about all the managed data identifiers that Amazon
+-- Macie currently provides.
+--
+-- This operation returns paginated results.
+module Amazonka.MacieV2.ListManagedDataIdentifiers
+  ( -- * Creating a Request
+    ListManagedDataIdentifiers (..),
+    newListManagedDataIdentifiers,
+
+    -- * Request Lenses
+    listManagedDataIdentifiers_nextToken,
+
+    -- * Destructuring the Response
+    ListManagedDataIdentifiersResponse (..),
+    newListManagedDataIdentifiersResponse,
+
+    -- * Response Lenses
+    listManagedDataIdentifiersResponse_items,
+    listManagedDataIdentifiersResponse_nextToken,
+    listManagedDataIdentifiersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListManagedDataIdentifiers' smart constructor.
+data ListManagedDataIdentifiers = ListManagedDataIdentifiers'
+  { -- | The nextToken string that specifies which page of results to return in a
+    -- paginated response.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListManagedDataIdentifiers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listManagedDataIdentifiers_nextToken' - The nextToken string that specifies which page of results to return in a
+-- paginated response.
+newListManagedDataIdentifiers ::
+  ListManagedDataIdentifiers
+newListManagedDataIdentifiers =
+  ListManagedDataIdentifiers'
+    { nextToken =
+        Prelude.Nothing
+    }
+
+-- | The nextToken string that specifies which page of results to return in a
+-- paginated response.
+listManagedDataIdentifiers_nextToken :: Lens.Lens' ListManagedDataIdentifiers (Prelude.Maybe Prelude.Text)
+listManagedDataIdentifiers_nextToken = Lens.lens (\ListManagedDataIdentifiers' {nextToken} -> nextToken) (\s@ListManagedDataIdentifiers' {} a -> s {nextToken = a} :: ListManagedDataIdentifiers)
+
+instance Core.AWSPager ListManagedDataIdentifiers where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listManagedDataIdentifiersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listManagedDataIdentifiersResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listManagedDataIdentifiers_nextToken
+          Lens..~ rs
+          Lens.^? listManagedDataIdentifiersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListManagedDataIdentifiers where
+  type
+    AWSResponse ListManagedDataIdentifiers =
+      ListManagedDataIdentifiersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListManagedDataIdentifiersResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListManagedDataIdentifiers where
+  hashWithSalt _salt ListManagedDataIdentifiers' {..} =
+    _salt `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListManagedDataIdentifiers where
+  rnf ListManagedDataIdentifiers' {..} =
+    Prelude.rnf nextToken
+
+instance Data.ToHeaders ListManagedDataIdentifiers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListManagedDataIdentifiers where
+  toJSON ListManagedDataIdentifiers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("nextToken" Data..=) Prelude.<$> nextToken]
+      )
+
+instance Data.ToPath ListManagedDataIdentifiers where
+  toPath =
+    Prelude.const "/managed-data-identifiers/list"
+
+instance Data.ToQuery ListManagedDataIdentifiers where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListManagedDataIdentifiersResponse' smart constructor.
+data ListManagedDataIdentifiersResponse = ListManagedDataIdentifiersResponse'
+  { -- | An array of objects, one for each managed data identifier.
+    items :: Prelude.Maybe [ManagedDataIdentifierSummary],
+    -- | The string to use in a subsequent request to get the next page of
+    -- results in a paginated response. This value is null if there are no
+    -- additional pages.
+    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 'ListManagedDataIdentifiersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listManagedDataIdentifiersResponse_items' - An array of objects, one for each managed data identifier.
+--
+-- 'nextToken', 'listManagedDataIdentifiersResponse_nextToken' - The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+--
+-- 'httpStatus', 'listManagedDataIdentifiersResponse_httpStatus' - The response's http status code.
+newListManagedDataIdentifiersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListManagedDataIdentifiersResponse
+newListManagedDataIdentifiersResponse pHttpStatus_ =
+  ListManagedDataIdentifiersResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each managed data identifier.
+listManagedDataIdentifiersResponse_items :: Lens.Lens' ListManagedDataIdentifiersResponse (Prelude.Maybe [ManagedDataIdentifierSummary])
+listManagedDataIdentifiersResponse_items = Lens.lens (\ListManagedDataIdentifiersResponse' {items} -> items) (\s@ListManagedDataIdentifiersResponse' {} a -> s {items = a} :: ListManagedDataIdentifiersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+listManagedDataIdentifiersResponse_nextToken :: Lens.Lens' ListManagedDataIdentifiersResponse (Prelude.Maybe Prelude.Text)
+listManagedDataIdentifiersResponse_nextToken = Lens.lens (\ListManagedDataIdentifiersResponse' {nextToken} -> nextToken) (\s@ListManagedDataIdentifiersResponse' {} a -> s {nextToken = a} :: ListManagedDataIdentifiersResponse)
+
+-- | The response's http status code.
+listManagedDataIdentifiersResponse_httpStatus :: Lens.Lens' ListManagedDataIdentifiersResponse Prelude.Int
+listManagedDataIdentifiersResponse_httpStatus = Lens.lens (\ListManagedDataIdentifiersResponse' {httpStatus} -> httpStatus) (\s@ListManagedDataIdentifiersResponse' {} a -> s {httpStatus = a} :: ListManagedDataIdentifiersResponse)
+
+instance
+  Prelude.NFData
+    ListManagedDataIdentifiersResponse
+  where
+  rnf ListManagedDataIdentifiersResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/ListMembers.hs b/gen/Amazonka/MacieV2/ListMembers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/ListMembers.hs
@@ -0,0 +1,246 @@
+{-# 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.MacieV2.ListMembers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about the accounts that are associated with an
+-- Amazon Macie administrator account.
+--
+-- This operation returns paginated results.
+module Amazonka.MacieV2.ListMembers
+  ( -- * Creating a Request
+    ListMembers (..),
+    newListMembers,
+
+    -- * Request Lenses
+    listMembers_maxResults,
+    listMembers_nextToken,
+    listMembers_onlyAssociated,
+
+    -- * Destructuring the Response
+    ListMembersResponse (..),
+    newListMembersResponse,
+
+    -- * Response Lenses
+    listMembersResponse_members,
+    listMembersResponse_nextToken,
+    listMembersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListMembers' smart constructor.
+data ListMembers = ListMembers'
+  { -- | The maximum number of items to include in each page of a paginated
+    -- response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The nextToken string that specifies which page of results to return in a
+    -- paginated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Specifies which accounts to include in the response, based on the status
+    -- of an account\'s relationship with the administrator account. By
+    -- default, the response includes only current member accounts. To include
+    -- all accounts, set this value to false.
+    onlyAssociated :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListMembers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listMembers_maxResults' - The maximum number of items to include in each page of a paginated
+-- response.
+--
+-- 'nextToken', 'listMembers_nextToken' - The nextToken string that specifies which page of results to return in a
+-- paginated response.
+--
+-- 'onlyAssociated', 'listMembers_onlyAssociated' - Specifies which accounts to include in the response, based on the status
+-- of an account\'s relationship with the administrator account. By
+-- default, the response includes only current member accounts. To include
+-- all accounts, set this value to false.
+newListMembers ::
+  ListMembers
+newListMembers =
+  ListMembers'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      onlyAssociated = Prelude.Nothing
+    }
+
+-- | The maximum number of items to include in each page of a paginated
+-- response.
+listMembers_maxResults :: Lens.Lens' ListMembers (Prelude.Maybe Prelude.Natural)
+listMembers_maxResults = Lens.lens (\ListMembers' {maxResults} -> maxResults) (\s@ListMembers' {} a -> s {maxResults = a} :: ListMembers)
+
+-- | The nextToken string that specifies which page of results to return in a
+-- paginated response.
+listMembers_nextToken :: Lens.Lens' ListMembers (Prelude.Maybe Prelude.Text)
+listMembers_nextToken = Lens.lens (\ListMembers' {nextToken} -> nextToken) (\s@ListMembers' {} a -> s {nextToken = a} :: ListMembers)
+
+-- | Specifies which accounts to include in the response, based on the status
+-- of an account\'s relationship with the administrator account. By
+-- default, the response includes only current member accounts. To include
+-- all accounts, set this value to false.
+listMembers_onlyAssociated :: Lens.Lens' ListMembers (Prelude.Maybe Prelude.Text)
+listMembers_onlyAssociated = Lens.lens (\ListMembers' {onlyAssociated} -> onlyAssociated) (\s@ListMembers' {} a -> s {onlyAssociated = a} :: ListMembers)
+
+instance Core.AWSPager ListMembers where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listMembersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listMembersResponse_members
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listMembers_nextToken
+          Lens..~ rs
+          Lens.^? listMembersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListMembers where
+  type AWSResponse ListMembers = ListMembersResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListMembersResponse'
+            Prelude.<$> (x Data..?> "members" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListMembers where
+  hashWithSalt _salt ListMembers' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` onlyAssociated
+
+instance Prelude.NFData ListMembers where
+  rnf ListMembers' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf onlyAssociated
+
+instance Data.ToHeaders ListMembers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListMembers where
+  toPath = Prelude.const "/members"
+
+instance Data.ToQuery ListMembers where
+  toQuery ListMembers' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "onlyAssociated" Data.=: onlyAssociated
+      ]
+
+-- | /See:/ 'newListMembersResponse' smart constructor.
+data ListMembersResponse = ListMembersResponse'
+  { -- | An array of objects, one for each account that\'s associated with the
+    -- administrator account and matches the criteria specified in the request.
+    members :: Prelude.Maybe [Member],
+    -- | The string to use in a subsequent request to get the next page of
+    -- results in a paginated response. This value is null if there are no
+    -- additional pages.
+    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 'ListMembersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'members', 'listMembersResponse_members' - An array of objects, one for each account that\'s associated with the
+-- administrator account and matches the criteria specified in the request.
+--
+-- 'nextToken', 'listMembersResponse_nextToken' - The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+--
+-- 'httpStatus', 'listMembersResponse_httpStatus' - The response's http status code.
+newListMembersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListMembersResponse
+newListMembersResponse pHttpStatus_ =
+  ListMembersResponse'
+    { members = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each account that\'s associated with the
+-- administrator account and matches the criteria specified in the request.
+listMembersResponse_members :: Lens.Lens' ListMembersResponse (Prelude.Maybe [Member])
+listMembersResponse_members = Lens.lens (\ListMembersResponse' {members} -> members) (\s@ListMembersResponse' {} a -> s {members = a} :: ListMembersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+listMembersResponse_nextToken :: Lens.Lens' ListMembersResponse (Prelude.Maybe Prelude.Text)
+listMembersResponse_nextToken = Lens.lens (\ListMembersResponse' {nextToken} -> nextToken) (\s@ListMembersResponse' {} a -> s {nextToken = a} :: ListMembersResponse)
+
+-- | The response's http status code.
+listMembersResponse_httpStatus :: Lens.Lens' ListMembersResponse Prelude.Int
+listMembersResponse_httpStatus = Lens.lens (\ListMembersResponse' {httpStatus} -> httpStatus) (\s@ListMembersResponse' {} a -> s {httpStatus = a} :: ListMembersResponse)
+
+instance Prelude.NFData ListMembersResponse where
+  rnf ListMembersResponse' {..} =
+    Prelude.rnf members
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/ListOrganizationAdminAccounts.hs b/gen/Amazonka/MacieV2/ListOrganizationAdminAccounts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/ListOrganizationAdminAccounts.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.ListOrganizationAdminAccounts
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about the delegated Amazon Macie administrator
+-- account for an organization in Organizations.
+--
+-- This operation returns paginated results.
+module Amazonka.MacieV2.ListOrganizationAdminAccounts
+  ( -- * Creating a Request
+    ListOrganizationAdminAccounts (..),
+    newListOrganizationAdminAccounts,
+
+    -- * Request Lenses
+    listOrganizationAdminAccounts_maxResults,
+    listOrganizationAdminAccounts_nextToken,
+
+    -- * Destructuring the Response
+    ListOrganizationAdminAccountsResponse (..),
+    newListOrganizationAdminAccountsResponse,
+
+    -- * Response Lenses
+    listOrganizationAdminAccountsResponse_adminAccounts,
+    listOrganizationAdminAccountsResponse_nextToken,
+    listOrganizationAdminAccountsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListOrganizationAdminAccounts' smart constructor.
+data ListOrganizationAdminAccounts = ListOrganizationAdminAccounts'
+  { -- | The maximum number of items to include in each page of a paginated
+    -- response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The nextToken string that specifies which page of results to return in a
+    -- paginated response.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListOrganizationAdminAccounts' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listOrganizationAdminAccounts_maxResults' - The maximum number of items to include in each page of a paginated
+-- response.
+--
+-- 'nextToken', 'listOrganizationAdminAccounts_nextToken' - The nextToken string that specifies which page of results to return in a
+-- paginated response.
+newListOrganizationAdminAccounts ::
+  ListOrganizationAdminAccounts
+newListOrganizationAdminAccounts =
+  ListOrganizationAdminAccounts'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of items to include in each page of a paginated
+-- response.
+listOrganizationAdminAccounts_maxResults :: Lens.Lens' ListOrganizationAdminAccounts (Prelude.Maybe Prelude.Natural)
+listOrganizationAdminAccounts_maxResults = Lens.lens (\ListOrganizationAdminAccounts' {maxResults} -> maxResults) (\s@ListOrganizationAdminAccounts' {} a -> s {maxResults = a} :: ListOrganizationAdminAccounts)
+
+-- | The nextToken string that specifies which page of results to return in a
+-- paginated response.
+listOrganizationAdminAccounts_nextToken :: Lens.Lens' ListOrganizationAdminAccounts (Prelude.Maybe Prelude.Text)
+listOrganizationAdminAccounts_nextToken = Lens.lens (\ListOrganizationAdminAccounts' {nextToken} -> nextToken) (\s@ListOrganizationAdminAccounts' {} a -> s {nextToken = a} :: ListOrganizationAdminAccounts)
+
+instance Core.AWSPager ListOrganizationAdminAccounts where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listOrganizationAdminAccountsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listOrganizationAdminAccountsResponse_adminAccounts
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listOrganizationAdminAccounts_nextToken
+          Lens..~ rs
+          Lens.^? listOrganizationAdminAccountsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    ListOrganizationAdminAccounts
+  where
+  type
+    AWSResponse ListOrganizationAdminAccounts =
+      ListOrganizationAdminAccountsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListOrganizationAdminAccountsResponse'
+            Prelude.<$> (x Data..?> "adminAccounts" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListOrganizationAdminAccounts
+  where
+  hashWithSalt _salt ListOrganizationAdminAccounts' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListOrganizationAdminAccounts where
+  rnf ListOrganizationAdminAccounts' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListOrganizationAdminAccounts where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListOrganizationAdminAccounts where
+  toPath = Prelude.const "/admin"
+
+instance Data.ToQuery ListOrganizationAdminAccounts where
+  toQuery ListOrganizationAdminAccounts' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListOrganizationAdminAccountsResponse' smart constructor.
+data ListOrganizationAdminAccountsResponse = ListOrganizationAdminAccountsResponse'
+  { -- | An array of objects, one for each delegated Amazon Macie administrator
+    -- account for the organization. Only one of these accounts can have a
+    -- status of ENABLED.
+    adminAccounts :: Prelude.Maybe [AdminAccount],
+    -- | The string to use in a subsequent request to get the next page of
+    -- results in a paginated response. This value is null if there are no
+    -- additional pages.
+    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 'ListOrganizationAdminAccountsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'adminAccounts', 'listOrganizationAdminAccountsResponse_adminAccounts' - An array of objects, one for each delegated Amazon Macie administrator
+-- account for the organization. Only one of these accounts can have a
+-- status of ENABLED.
+--
+-- 'nextToken', 'listOrganizationAdminAccountsResponse_nextToken' - The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+--
+-- 'httpStatus', 'listOrganizationAdminAccountsResponse_httpStatus' - The response's http status code.
+newListOrganizationAdminAccountsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListOrganizationAdminAccountsResponse
+newListOrganizationAdminAccountsResponse pHttpStatus_ =
+  ListOrganizationAdminAccountsResponse'
+    { adminAccounts =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each delegated Amazon Macie administrator
+-- account for the organization. Only one of these accounts can have a
+-- status of ENABLED.
+listOrganizationAdminAccountsResponse_adminAccounts :: Lens.Lens' ListOrganizationAdminAccountsResponse (Prelude.Maybe [AdminAccount])
+listOrganizationAdminAccountsResponse_adminAccounts = Lens.lens (\ListOrganizationAdminAccountsResponse' {adminAccounts} -> adminAccounts) (\s@ListOrganizationAdminAccountsResponse' {} a -> s {adminAccounts = a} :: ListOrganizationAdminAccountsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+listOrganizationAdminAccountsResponse_nextToken :: Lens.Lens' ListOrganizationAdminAccountsResponse (Prelude.Maybe Prelude.Text)
+listOrganizationAdminAccountsResponse_nextToken = Lens.lens (\ListOrganizationAdminAccountsResponse' {nextToken} -> nextToken) (\s@ListOrganizationAdminAccountsResponse' {} a -> s {nextToken = a} :: ListOrganizationAdminAccountsResponse)
+
+-- | The response's http status code.
+listOrganizationAdminAccountsResponse_httpStatus :: Lens.Lens' ListOrganizationAdminAccountsResponse Prelude.Int
+listOrganizationAdminAccountsResponse_httpStatus = Lens.lens (\ListOrganizationAdminAccountsResponse' {httpStatus} -> httpStatus) (\s@ListOrganizationAdminAccountsResponse' {} a -> s {httpStatus = a} :: ListOrganizationAdminAccountsResponse)
+
+instance
+  Prelude.NFData
+    ListOrganizationAdminAccountsResponse
+  where
+  rnf ListOrganizationAdminAccountsResponse' {..} =
+    Prelude.rnf adminAccounts
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/ListResourceProfileArtifacts.hs b/gen/Amazonka/MacieV2/ListResourceProfileArtifacts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/ListResourceProfileArtifacts.hs
@@ -0,0 +1,236 @@
+{-# 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.MacieV2.ListResourceProfileArtifacts
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about objects that were selected from an S3 bucket
+-- for automated sensitive data discovery.
+--
+-- This operation returns paginated results.
+module Amazonka.MacieV2.ListResourceProfileArtifacts
+  ( -- * Creating a Request
+    ListResourceProfileArtifacts (..),
+    newListResourceProfileArtifacts,
+
+    -- * Request Lenses
+    listResourceProfileArtifacts_nextToken,
+    listResourceProfileArtifacts_resourceArn,
+
+    -- * Destructuring the Response
+    ListResourceProfileArtifactsResponse (..),
+    newListResourceProfileArtifactsResponse,
+
+    -- * Response Lenses
+    listResourceProfileArtifactsResponse_artifacts,
+    listResourceProfileArtifactsResponse_nextToken,
+    listResourceProfileArtifactsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListResourceProfileArtifacts' smart constructor.
+data ListResourceProfileArtifacts = ListResourceProfileArtifacts'
+  { -- | The nextToken string that specifies which page of results to return in a
+    -- paginated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the S3 bucket that the request applies
+    -- to.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListResourceProfileArtifacts' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listResourceProfileArtifacts_nextToken' - The nextToken string that specifies which page of results to return in a
+-- paginated response.
+--
+-- 'resourceArn', 'listResourceProfileArtifacts_resourceArn' - The Amazon Resource Name (ARN) of the S3 bucket that the request applies
+-- to.
+newListResourceProfileArtifacts ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListResourceProfileArtifacts
+newListResourceProfileArtifacts pResourceArn_ =
+  ListResourceProfileArtifacts'
+    { nextToken =
+        Prelude.Nothing,
+      resourceArn = pResourceArn_
+    }
+
+-- | The nextToken string that specifies which page of results to return in a
+-- paginated response.
+listResourceProfileArtifacts_nextToken :: Lens.Lens' ListResourceProfileArtifacts (Prelude.Maybe Prelude.Text)
+listResourceProfileArtifacts_nextToken = Lens.lens (\ListResourceProfileArtifacts' {nextToken} -> nextToken) (\s@ListResourceProfileArtifacts' {} a -> s {nextToken = a} :: ListResourceProfileArtifacts)
+
+-- | The Amazon Resource Name (ARN) of the S3 bucket that the request applies
+-- to.
+listResourceProfileArtifacts_resourceArn :: Lens.Lens' ListResourceProfileArtifacts Prelude.Text
+listResourceProfileArtifacts_resourceArn = Lens.lens (\ListResourceProfileArtifacts' {resourceArn} -> resourceArn) (\s@ListResourceProfileArtifacts' {} a -> s {resourceArn = a} :: ListResourceProfileArtifacts)
+
+instance Core.AWSPager ListResourceProfileArtifacts where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listResourceProfileArtifactsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listResourceProfileArtifactsResponse_artifacts
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listResourceProfileArtifacts_nextToken
+          Lens..~ rs
+          Lens.^? listResourceProfileArtifactsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListResourceProfileArtifacts where
+  type
+    AWSResponse ListResourceProfileArtifacts =
+      ListResourceProfileArtifactsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListResourceProfileArtifactsResponse'
+            Prelude.<$> (x Data..?> "artifacts" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListResourceProfileArtifacts
+  where
+  hashWithSalt _salt ListResourceProfileArtifacts' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListResourceProfileArtifacts where
+  rnf ListResourceProfileArtifacts' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListResourceProfileArtifacts where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListResourceProfileArtifacts where
+  toPath = Prelude.const "/resource-profiles/artifacts"
+
+instance Data.ToQuery ListResourceProfileArtifacts where
+  toQuery ListResourceProfileArtifacts' {..} =
+    Prelude.mconcat
+      [ "nextToken" Data.=: nextToken,
+        "resourceArn" Data.=: resourceArn
+      ]
+
+-- | /See:/ 'newListResourceProfileArtifactsResponse' smart constructor.
+data ListResourceProfileArtifactsResponse = ListResourceProfileArtifactsResponse'
+  { -- | An array of objects, one for each S3 object that Amazon Macie selected
+    -- for analysis.
+    artifacts :: Prelude.Maybe [ResourceProfileArtifact],
+    -- | The string to use in a subsequent request to get the next page of
+    -- results in a paginated response. This value is null if there are no
+    -- additional pages.
+    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 'ListResourceProfileArtifactsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'artifacts', 'listResourceProfileArtifactsResponse_artifacts' - An array of objects, one for each S3 object that Amazon Macie selected
+-- for analysis.
+--
+-- 'nextToken', 'listResourceProfileArtifactsResponse_nextToken' - The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+--
+-- 'httpStatus', 'listResourceProfileArtifactsResponse_httpStatus' - The response's http status code.
+newListResourceProfileArtifactsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListResourceProfileArtifactsResponse
+newListResourceProfileArtifactsResponse pHttpStatus_ =
+  ListResourceProfileArtifactsResponse'
+    { artifacts =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each S3 object that Amazon Macie selected
+-- for analysis.
+listResourceProfileArtifactsResponse_artifacts :: Lens.Lens' ListResourceProfileArtifactsResponse (Prelude.Maybe [ResourceProfileArtifact])
+listResourceProfileArtifactsResponse_artifacts = Lens.lens (\ListResourceProfileArtifactsResponse' {artifacts} -> artifacts) (\s@ListResourceProfileArtifactsResponse' {} a -> s {artifacts = a} :: ListResourceProfileArtifactsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+listResourceProfileArtifactsResponse_nextToken :: Lens.Lens' ListResourceProfileArtifactsResponse (Prelude.Maybe Prelude.Text)
+listResourceProfileArtifactsResponse_nextToken = Lens.lens (\ListResourceProfileArtifactsResponse' {nextToken} -> nextToken) (\s@ListResourceProfileArtifactsResponse' {} a -> s {nextToken = a} :: ListResourceProfileArtifactsResponse)
+
+-- | The response's http status code.
+listResourceProfileArtifactsResponse_httpStatus :: Lens.Lens' ListResourceProfileArtifactsResponse Prelude.Int
+listResourceProfileArtifactsResponse_httpStatus = Lens.lens (\ListResourceProfileArtifactsResponse' {httpStatus} -> httpStatus) (\s@ListResourceProfileArtifactsResponse' {} a -> s {httpStatus = a} :: ListResourceProfileArtifactsResponse)
+
+instance
+  Prelude.NFData
+    ListResourceProfileArtifactsResponse
+  where
+  rnf ListResourceProfileArtifactsResponse' {..} =
+    Prelude.rnf artifacts
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/ListResourceProfileDetections.hs b/gen/Amazonka/MacieV2/ListResourceProfileDetections.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/ListResourceProfileDetections.hs
@@ -0,0 +1,262 @@
+{-# 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.MacieV2.ListResourceProfileDetections
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about the types and amount of sensitive data that
+-- Amazon Macie found in an S3 bucket.
+--
+-- This operation returns paginated results.
+module Amazonka.MacieV2.ListResourceProfileDetections
+  ( -- * Creating a Request
+    ListResourceProfileDetections (..),
+    newListResourceProfileDetections,
+
+    -- * Request Lenses
+    listResourceProfileDetections_maxResults,
+    listResourceProfileDetections_nextToken,
+    listResourceProfileDetections_resourceArn,
+
+    -- * Destructuring the Response
+    ListResourceProfileDetectionsResponse (..),
+    newListResourceProfileDetectionsResponse,
+
+    -- * Response Lenses
+    listResourceProfileDetectionsResponse_detections,
+    listResourceProfileDetectionsResponse_nextToken,
+    listResourceProfileDetectionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListResourceProfileDetections' smart constructor.
+data ListResourceProfileDetections = ListResourceProfileDetections'
+  { -- | The maximum number of items to include in each page of a paginated
+    -- response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The nextToken string that specifies which page of results to return in a
+    -- paginated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the S3 bucket that the request applies
+    -- to.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListResourceProfileDetections' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listResourceProfileDetections_maxResults' - The maximum number of items to include in each page of a paginated
+-- response.
+--
+-- 'nextToken', 'listResourceProfileDetections_nextToken' - The nextToken string that specifies which page of results to return in a
+-- paginated response.
+--
+-- 'resourceArn', 'listResourceProfileDetections_resourceArn' - The Amazon Resource Name (ARN) of the S3 bucket that the request applies
+-- to.
+newListResourceProfileDetections ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListResourceProfileDetections
+newListResourceProfileDetections pResourceArn_ =
+  ListResourceProfileDetections'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      resourceArn = pResourceArn_
+    }
+
+-- | The maximum number of items to include in each page of a paginated
+-- response.
+listResourceProfileDetections_maxResults :: Lens.Lens' ListResourceProfileDetections (Prelude.Maybe Prelude.Natural)
+listResourceProfileDetections_maxResults = Lens.lens (\ListResourceProfileDetections' {maxResults} -> maxResults) (\s@ListResourceProfileDetections' {} a -> s {maxResults = a} :: ListResourceProfileDetections)
+
+-- | The nextToken string that specifies which page of results to return in a
+-- paginated response.
+listResourceProfileDetections_nextToken :: Lens.Lens' ListResourceProfileDetections (Prelude.Maybe Prelude.Text)
+listResourceProfileDetections_nextToken = Lens.lens (\ListResourceProfileDetections' {nextToken} -> nextToken) (\s@ListResourceProfileDetections' {} a -> s {nextToken = a} :: ListResourceProfileDetections)
+
+-- | The Amazon Resource Name (ARN) of the S3 bucket that the request applies
+-- to.
+listResourceProfileDetections_resourceArn :: Lens.Lens' ListResourceProfileDetections Prelude.Text
+listResourceProfileDetections_resourceArn = Lens.lens (\ListResourceProfileDetections' {resourceArn} -> resourceArn) (\s@ListResourceProfileDetections' {} a -> s {resourceArn = a} :: ListResourceProfileDetections)
+
+instance Core.AWSPager ListResourceProfileDetections where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listResourceProfileDetectionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listResourceProfileDetectionsResponse_detections
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listResourceProfileDetections_nextToken
+          Lens..~ rs
+          Lens.^? listResourceProfileDetectionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    ListResourceProfileDetections
+  where
+  type
+    AWSResponse ListResourceProfileDetections =
+      ListResourceProfileDetectionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListResourceProfileDetectionsResponse'
+            Prelude.<$> (x Data..?> "detections" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListResourceProfileDetections
+  where
+  hashWithSalt _salt ListResourceProfileDetections' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListResourceProfileDetections where
+  rnf ListResourceProfileDetections' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListResourceProfileDetections where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListResourceProfileDetections where
+  toPath =
+    Prelude.const "/resource-profiles/detections"
+
+instance Data.ToQuery ListResourceProfileDetections where
+  toQuery ListResourceProfileDetections' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "resourceArn" Data.=: resourceArn
+      ]
+
+-- | /See:/ 'newListResourceProfileDetectionsResponse' smart constructor.
+data ListResourceProfileDetectionsResponse = ListResourceProfileDetectionsResponse'
+  { -- | An array of objects, one for each type of sensitive data that Amazon
+    -- Macie found in the bucket. Each object reports the number of occurrences
+    -- of the specified type and provides information about the custom data
+    -- identifier or managed data identifier that detected the data.
+    detections :: Prelude.Maybe [Detection],
+    -- | The string to use in a subsequent request to get the next page of
+    -- results in a paginated response. This value is null if there are no
+    -- additional pages.
+    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 'ListResourceProfileDetectionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detections', 'listResourceProfileDetectionsResponse_detections' - An array of objects, one for each type of sensitive data that Amazon
+-- Macie found in the bucket. Each object reports the number of occurrences
+-- of the specified type and provides information about the custom data
+-- identifier or managed data identifier that detected the data.
+--
+-- 'nextToken', 'listResourceProfileDetectionsResponse_nextToken' - The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+--
+-- 'httpStatus', 'listResourceProfileDetectionsResponse_httpStatus' - The response's http status code.
+newListResourceProfileDetectionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListResourceProfileDetectionsResponse
+newListResourceProfileDetectionsResponse pHttpStatus_ =
+  ListResourceProfileDetectionsResponse'
+    { detections =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each type of sensitive data that Amazon
+-- Macie found in the bucket. Each object reports the number of occurrences
+-- of the specified type and provides information about the custom data
+-- identifier or managed data identifier that detected the data.
+listResourceProfileDetectionsResponse_detections :: Lens.Lens' ListResourceProfileDetectionsResponse (Prelude.Maybe [Detection])
+listResourceProfileDetectionsResponse_detections = Lens.lens (\ListResourceProfileDetectionsResponse' {detections} -> detections) (\s@ListResourceProfileDetectionsResponse' {} a -> s {detections = a} :: ListResourceProfileDetectionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+listResourceProfileDetectionsResponse_nextToken :: Lens.Lens' ListResourceProfileDetectionsResponse (Prelude.Maybe Prelude.Text)
+listResourceProfileDetectionsResponse_nextToken = Lens.lens (\ListResourceProfileDetectionsResponse' {nextToken} -> nextToken) (\s@ListResourceProfileDetectionsResponse' {} a -> s {nextToken = a} :: ListResourceProfileDetectionsResponse)
+
+-- | The response's http status code.
+listResourceProfileDetectionsResponse_httpStatus :: Lens.Lens' ListResourceProfileDetectionsResponse Prelude.Int
+listResourceProfileDetectionsResponse_httpStatus = Lens.lens (\ListResourceProfileDetectionsResponse' {httpStatus} -> httpStatus) (\s@ListResourceProfileDetectionsResponse' {} a -> s {httpStatus = a} :: ListResourceProfileDetectionsResponse)
+
+instance
+  Prelude.NFData
+    ListResourceProfileDetectionsResponse
+  where
+  rnf ListResourceProfileDetectionsResponse' {..} =
+    Prelude.rnf detections
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/ListSensitivityInspectionTemplates.hs b/gen/Amazonka/MacieV2/ListSensitivityInspectionTemplates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/ListSensitivityInspectionTemplates.hs
@@ -0,0 +1,260 @@
+{-# 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.MacieV2.ListSensitivityInspectionTemplates
+-- 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 a subset of information about the sensitivity inspection
+-- template for an account.
+--
+-- This operation returns paginated results.
+module Amazonka.MacieV2.ListSensitivityInspectionTemplates
+  ( -- * Creating a Request
+    ListSensitivityInspectionTemplates (..),
+    newListSensitivityInspectionTemplates,
+
+    -- * Request Lenses
+    listSensitivityInspectionTemplates_maxResults,
+    listSensitivityInspectionTemplates_nextToken,
+
+    -- * Destructuring the Response
+    ListSensitivityInspectionTemplatesResponse (..),
+    newListSensitivityInspectionTemplatesResponse,
+
+    -- * Response Lenses
+    listSensitivityInspectionTemplatesResponse_nextToken,
+    listSensitivityInspectionTemplatesResponse_sensitivityInspectionTemplates,
+    listSensitivityInspectionTemplatesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSensitivityInspectionTemplates' smart constructor.
+data ListSensitivityInspectionTemplates = ListSensitivityInspectionTemplates'
+  { -- | The maximum number of items to include in each page of a paginated
+    -- response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The nextToken string that specifies which page of results to return in a
+    -- paginated response.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSensitivityInspectionTemplates' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listSensitivityInspectionTemplates_maxResults' - The maximum number of items to include in each page of a paginated
+-- response.
+--
+-- 'nextToken', 'listSensitivityInspectionTemplates_nextToken' - The nextToken string that specifies which page of results to return in a
+-- paginated response.
+newListSensitivityInspectionTemplates ::
+  ListSensitivityInspectionTemplates
+newListSensitivityInspectionTemplates =
+  ListSensitivityInspectionTemplates'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of items to include in each page of a paginated
+-- response.
+listSensitivityInspectionTemplates_maxResults :: Lens.Lens' ListSensitivityInspectionTemplates (Prelude.Maybe Prelude.Natural)
+listSensitivityInspectionTemplates_maxResults = Lens.lens (\ListSensitivityInspectionTemplates' {maxResults} -> maxResults) (\s@ListSensitivityInspectionTemplates' {} a -> s {maxResults = a} :: ListSensitivityInspectionTemplates)
+
+-- | The nextToken string that specifies which page of results to return in a
+-- paginated response.
+listSensitivityInspectionTemplates_nextToken :: Lens.Lens' ListSensitivityInspectionTemplates (Prelude.Maybe Prelude.Text)
+listSensitivityInspectionTemplates_nextToken = Lens.lens (\ListSensitivityInspectionTemplates' {nextToken} -> nextToken) (\s@ListSensitivityInspectionTemplates' {} a -> s {nextToken = a} :: ListSensitivityInspectionTemplates)
+
+instance
+  Core.AWSPager
+    ListSensitivityInspectionTemplates
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSensitivityInspectionTemplatesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listSensitivityInspectionTemplatesResponse_sensitivityInspectionTemplates
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSensitivityInspectionTemplates_nextToken
+          Lens..~ rs
+          Lens.^? listSensitivityInspectionTemplatesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    ListSensitivityInspectionTemplates
+  where
+  type
+    AWSResponse ListSensitivityInspectionTemplates =
+      ListSensitivityInspectionTemplatesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSensitivityInspectionTemplatesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "sensitivityInspectionTemplates"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListSensitivityInspectionTemplates
+  where
+  hashWithSalt
+    _salt
+    ListSensitivityInspectionTemplates' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    ListSensitivityInspectionTemplates
+  where
+  rnf ListSensitivityInspectionTemplates' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    ListSensitivityInspectionTemplates
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToPath
+    ListSensitivityInspectionTemplates
+  where
+  toPath =
+    Prelude.const "/templates/sensitivity-inspections"
+
+instance
+  Data.ToQuery
+    ListSensitivityInspectionTemplates
+  where
+  toQuery ListSensitivityInspectionTemplates' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListSensitivityInspectionTemplatesResponse' smart constructor.
+data ListSensitivityInspectionTemplatesResponse = ListSensitivityInspectionTemplatesResponse'
+  { -- | The string to use in a subsequent request to get the next page of
+    -- results in a paginated response. This value is null if there are no
+    -- additional pages.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array that specifies the unique identifier and name of the
+    -- sensitivity inspection template for the account.
+    sensitivityInspectionTemplates :: Prelude.Maybe [SensitivityInspectionTemplatesEntry],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSensitivityInspectionTemplatesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listSensitivityInspectionTemplatesResponse_nextToken' - The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+--
+-- 'sensitivityInspectionTemplates', 'listSensitivityInspectionTemplatesResponse_sensitivityInspectionTemplates' - An array that specifies the unique identifier and name of the
+-- sensitivity inspection template for the account.
+--
+-- 'httpStatus', 'listSensitivityInspectionTemplatesResponse_httpStatus' - The response's http status code.
+newListSensitivityInspectionTemplatesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSensitivityInspectionTemplatesResponse
+newListSensitivityInspectionTemplatesResponse
+  pHttpStatus_ =
+    ListSensitivityInspectionTemplatesResponse'
+      { nextToken =
+          Prelude.Nothing,
+        sensitivityInspectionTemplates =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+listSensitivityInspectionTemplatesResponse_nextToken :: Lens.Lens' ListSensitivityInspectionTemplatesResponse (Prelude.Maybe Prelude.Text)
+listSensitivityInspectionTemplatesResponse_nextToken = Lens.lens (\ListSensitivityInspectionTemplatesResponse' {nextToken} -> nextToken) (\s@ListSensitivityInspectionTemplatesResponse' {} a -> s {nextToken = a} :: ListSensitivityInspectionTemplatesResponse)
+
+-- | An array that specifies the unique identifier and name of the
+-- sensitivity inspection template for the account.
+listSensitivityInspectionTemplatesResponse_sensitivityInspectionTemplates :: Lens.Lens' ListSensitivityInspectionTemplatesResponse (Prelude.Maybe [SensitivityInspectionTemplatesEntry])
+listSensitivityInspectionTemplatesResponse_sensitivityInspectionTemplates = Lens.lens (\ListSensitivityInspectionTemplatesResponse' {sensitivityInspectionTemplates} -> sensitivityInspectionTemplates) (\s@ListSensitivityInspectionTemplatesResponse' {} a -> s {sensitivityInspectionTemplates = a} :: ListSensitivityInspectionTemplatesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSensitivityInspectionTemplatesResponse_httpStatus :: Lens.Lens' ListSensitivityInspectionTemplatesResponse Prelude.Int
+listSensitivityInspectionTemplatesResponse_httpStatus = Lens.lens (\ListSensitivityInspectionTemplatesResponse' {httpStatus} -> httpStatus) (\s@ListSensitivityInspectionTemplatesResponse' {} a -> s {httpStatus = a} :: ListSensitivityInspectionTemplatesResponse)
+
+instance
+  Prelude.NFData
+    ListSensitivityInspectionTemplatesResponse
+  where
+  rnf ListSensitivityInspectionTemplatesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sensitivityInspectionTemplates
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/ListTagsForResource.hs b/gen/Amazonka/MacieV2/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/ListTagsForResource.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.MacieV2.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)
+--
+-- Retrieves the tags (keys and values) that are associated with an Amazon
+-- Macie resource.
+module Amazonka.MacieV2.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.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 Amazon Resource Name (ARN) of the resource.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the resource.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | A map of key-value pairs that specifies which tags (keys and values) are
+    -- associated with the resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - A map of key-value pairs that specifies which tags (keys and values) are
+-- associated with the resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A map of key-value pairs that specifies which tags (keys and values) are
+-- associated with the resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/PutClassificationExportConfiguration.hs b/gen/Amazonka/MacieV2/PutClassificationExportConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/PutClassificationExportConfiguration.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.MacieV2.PutClassificationExportConfiguration
+-- 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 the configuration settings for storing data
+-- classification results.
+module Amazonka.MacieV2.PutClassificationExportConfiguration
+  ( -- * Creating a Request
+    PutClassificationExportConfiguration (..),
+    newPutClassificationExportConfiguration,
+
+    -- * Request Lenses
+    putClassificationExportConfiguration_configuration,
+
+    -- * Destructuring the Response
+    PutClassificationExportConfigurationResponse (..),
+    newPutClassificationExportConfigurationResponse,
+
+    -- * Response Lenses
+    putClassificationExportConfigurationResponse_configuration,
+    putClassificationExportConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutClassificationExportConfiguration' smart constructor.
+data PutClassificationExportConfiguration = PutClassificationExportConfiguration'
+  { -- | The location to store data classification results in, and the encryption
+    -- settings to use when storing results in that location.
+    configuration :: ClassificationExportConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutClassificationExportConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configuration', 'putClassificationExportConfiguration_configuration' - The location to store data classification results in, and the encryption
+-- settings to use when storing results in that location.
+newPutClassificationExportConfiguration ::
+  -- | 'configuration'
+  ClassificationExportConfiguration ->
+  PutClassificationExportConfiguration
+newPutClassificationExportConfiguration
+  pConfiguration_ =
+    PutClassificationExportConfiguration'
+      { configuration =
+          pConfiguration_
+      }
+
+-- | The location to store data classification results in, and the encryption
+-- settings to use when storing results in that location.
+putClassificationExportConfiguration_configuration :: Lens.Lens' PutClassificationExportConfiguration ClassificationExportConfiguration
+putClassificationExportConfiguration_configuration = Lens.lens (\PutClassificationExportConfiguration' {configuration} -> configuration) (\s@PutClassificationExportConfiguration' {} a -> s {configuration = a} :: PutClassificationExportConfiguration)
+
+instance
+  Core.AWSRequest
+    PutClassificationExportConfiguration
+  where
+  type
+    AWSResponse PutClassificationExportConfiguration =
+      PutClassificationExportConfigurationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutClassificationExportConfigurationResponse'
+            Prelude.<$> (x Data..?> "configuration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutClassificationExportConfiguration
+  where
+  hashWithSalt
+    _salt
+    PutClassificationExportConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` configuration
+
+instance
+  Prelude.NFData
+    PutClassificationExportConfiguration
+  where
+  rnf PutClassificationExportConfiguration' {..} =
+    Prelude.rnf configuration
+
+instance
+  Data.ToHeaders
+    PutClassificationExportConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    PutClassificationExportConfiguration
+  where
+  toJSON PutClassificationExportConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("configuration" Data..= configuration)
+          ]
+      )
+
+instance
+  Data.ToPath
+    PutClassificationExportConfiguration
+  where
+  toPath =
+    Prelude.const
+      "/classification-export-configuration"
+
+instance
+  Data.ToQuery
+    PutClassificationExportConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutClassificationExportConfigurationResponse' smart constructor.
+data PutClassificationExportConfigurationResponse = PutClassificationExportConfigurationResponse'
+  { -- | The location where the data classification results are stored, and the
+    -- encryption settings that are used when storing results in that location.
+    configuration :: Prelude.Maybe ClassificationExportConfiguration,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutClassificationExportConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configuration', 'putClassificationExportConfigurationResponse_configuration' - The location where the data classification results are stored, and the
+-- encryption settings that are used when storing results in that location.
+--
+-- 'httpStatus', 'putClassificationExportConfigurationResponse_httpStatus' - The response's http status code.
+newPutClassificationExportConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutClassificationExportConfigurationResponse
+newPutClassificationExportConfigurationResponse
+  pHttpStatus_ =
+    PutClassificationExportConfigurationResponse'
+      { configuration =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The location where the data classification results are stored, and the
+-- encryption settings that are used when storing results in that location.
+putClassificationExportConfigurationResponse_configuration :: Lens.Lens' PutClassificationExportConfigurationResponse (Prelude.Maybe ClassificationExportConfiguration)
+putClassificationExportConfigurationResponse_configuration = Lens.lens (\PutClassificationExportConfigurationResponse' {configuration} -> configuration) (\s@PutClassificationExportConfigurationResponse' {} a -> s {configuration = a} :: PutClassificationExportConfigurationResponse)
+
+-- | The response's http status code.
+putClassificationExportConfigurationResponse_httpStatus :: Lens.Lens' PutClassificationExportConfigurationResponse Prelude.Int
+putClassificationExportConfigurationResponse_httpStatus = Lens.lens (\PutClassificationExportConfigurationResponse' {httpStatus} -> httpStatus) (\s@PutClassificationExportConfigurationResponse' {} a -> s {httpStatus = a} :: PutClassificationExportConfigurationResponse)
+
+instance
+  Prelude.NFData
+    PutClassificationExportConfigurationResponse
+  where
+  rnf PutClassificationExportConfigurationResponse' {..} =
+    Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/PutFindingsPublicationConfiguration.hs b/gen/Amazonka/MacieV2/PutFindingsPublicationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/PutFindingsPublicationConfiguration.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.MacieV2.PutFindingsPublicationConfiguration
+-- 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 configuration settings for publishing findings to Security
+-- Hub.
+module Amazonka.MacieV2.PutFindingsPublicationConfiguration
+  ( -- * Creating a Request
+    PutFindingsPublicationConfiguration (..),
+    newPutFindingsPublicationConfiguration,
+
+    -- * Request Lenses
+    putFindingsPublicationConfiguration_clientToken,
+    putFindingsPublicationConfiguration_securityHubConfiguration,
+
+    -- * Destructuring the Response
+    PutFindingsPublicationConfigurationResponse (..),
+    newPutFindingsPublicationConfigurationResponse,
+
+    -- * Response Lenses
+    putFindingsPublicationConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutFindingsPublicationConfiguration' smart constructor.
+data PutFindingsPublicationConfiguration = PutFindingsPublicationConfiguration'
+  { -- | A unique, case-sensitive token that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The configuration settings that determine which findings to publish to
+    -- Security Hub.
+    securityHubConfiguration :: Prelude.Maybe SecurityHubConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutFindingsPublicationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'putFindingsPublicationConfiguration_clientToken' - A unique, case-sensitive token that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'securityHubConfiguration', 'putFindingsPublicationConfiguration_securityHubConfiguration' - The configuration settings that determine which findings to publish to
+-- Security Hub.
+newPutFindingsPublicationConfiguration ::
+  PutFindingsPublicationConfiguration
+newPutFindingsPublicationConfiguration =
+  PutFindingsPublicationConfiguration'
+    { clientToken =
+        Prelude.Nothing,
+      securityHubConfiguration =
+        Prelude.Nothing
+    }
+
+-- | A unique, case-sensitive token that you provide to ensure the
+-- idempotency of the request.
+putFindingsPublicationConfiguration_clientToken :: Lens.Lens' PutFindingsPublicationConfiguration (Prelude.Maybe Prelude.Text)
+putFindingsPublicationConfiguration_clientToken = Lens.lens (\PutFindingsPublicationConfiguration' {clientToken} -> clientToken) (\s@PutFindingsPublicationConfiguration' {} a -> s {clientToken = a} :: PutFindingsPublicationConfiguration)
+
+-- | The configuration settings that determine which findings to publish to
+-- Security Hub.
+putFindingsPublicationConfiguration_securityHubConfiguration :: Lens.Lens' PutFindingsPublicationConfiguration (Prelude.Maybe SecurityHubConfiguration)
+putFindingsPublicationConfiguration_securityHubConfiguration = Lens.lens (\PutFindingsPublicationConfiguration' {securityHubConfiguration} -> securityHubConfiguration) (\s@PutFindingsPublicationConfiguration' {} a -> s {securityHubConfiguration = a} :: PutFindingsPublicationConfiguration)
+
+instance
+  Core.AWSRequest
+    PutFindingsPublicationConfiguration
+  where
+  type
+    AWSResponse PutFindingsPublicationConfiguration =
+      PutFindingsPublicationConfigurationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutFindingsPublicationConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutFindingsPublicationConfiguration
+  where
+  hashWithSalt
+    _salt
+    PutFindingsPublicationConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` securityHubConfiguration
+
+instance
+  Prelude.NFData
+    PutFindingsPublicationConfiguration
+  where
+  rnf PutFindingsPublicationConfiguration' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf securityHubConfiguration
+
+instance
+  Data.ToHeaders
+    PutFindingsPublicationConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    PutFindingsPublicationConfiguration
+  where
+  toJSON PutFindingsPublicationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("securityHubConfiguration" Data..=)
+              Prelude.<$> securityHubConfiguration
+          ]
+      )
+
+instance
+  Data.ToPath
+    PutFindingsPublicationConfiguration
+  where
+  toPath =
+    Prelude.const "/findings-publication-configuration"
+
+instance
+  Data.ToQuery
+    PutFindingsPublicationConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutFindingsPublicationConfigurationResponse' smart constructor.
+data PutFindingsPublicationConfigurationResponse = PutFindingsPublicationConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutFindingsPublicationConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putFindingsPublicationConfigurationResponse_httpStatus' - The response's http status code.
+newPutFindingsPublicationConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutFindingsPublicationConfigurationResponse
+newPutFindingsPublicationConfigurationResponse
+  pHttpStatus_ =
+    PutFindingsPublicationConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+putFindingsPublicationConfigurationResponse_httpStatus :: Lens.Lens' PutFindingsPublicationConfigurationResponse Prelude.Int
+putFindingsPublicationConfigurationResponse_httpStatus = Lens.lens (\PutFindingsPublicationConfigurationResponse' {httpStatus} -> httpStatus) (\s@PutFindingsPublicationConfigurationResponse' {} a -> s {httpStatus = a} :: PutFindingsPublicationConfigurationResponse)
+
+instance
+  Prelude.NFData
+    PutFindingsPublicationConfigurationResponse
+  where
+  rnf PutFindingsPublicationConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/SearchResources.hs b/gen/Amazonka/MacieV2/SearchResources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/SearchResources.hs
@@ -0,0 +1,266 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.SearchResources
+-- 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 (queries) statistical data and other information about Amazon
+-- Web Services resources that Amazon Macie monitors and analyzes.
+--
+-- This operation returns paginated results.
+module Amazonka.MacieV2.SearchResources
+  ( -- * Creating a Request
+    SearchResources (..),
+    newSearchResources,
+
+    -- * Request Lenses
+    searchResources_bucketCriteria,
+    searchResources_maxResults,
+    searchResources_nextToken,
+    searchResources_sortCriteria,
+
+    -- * Destructuring the Response
+    SearchResourcesResponse (..),
+    newSearchResourcesResponse,
+
+    -- * Response Lenses
+    searchResourcesResponse_matchingResources,
+    searchResourcesResponse_nextToken,
+    searchResourcesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchResources' smart constructor.
+data SearchResources = SearchResources'
+  { -- | The filter conditions that determine which S3 buckets to include or
+    -- exclude from the query results.
+    bucketCriteria :: Prelude.Maybe SearchResourcesBucketCriteria,
+    -- | The maximum number of items to include in each page of the response. The
+    -- default value is 50.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The nextToken string that specifies which page of results to return in a
+    -- paginated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The criteria to use to sort the results.
+    sortCriteria :: Prelude.Maybe SearchResourcesSortCriteria
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchResources' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucketCriteria', 'searchResources_bucketCriteria' - The filter conditions that determine which S3 buckets to include or
+-- exclude from the query results.
+--
+-- 'maxResults', 'searchResources_maxResults' - The maximum number of items to include in each page of the response. The
+-- default value is 50.
+--
+-- 'nextToken', 'searchResources_nextToken' - The nextToken string that specifies which page of results to return in a
+-- paginated response.
+--
+-- 'sortCriteria', 'searchResources_sortCriteria' - The criteria to use to sort the results.
+newSearchResources ::
+  SearchResources
+newSearchResources =
+  SearchResources'
+    { bucketCriteria = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortCriteria = Prelude.Nothing
+    }
+
+-- | The filter conditions that determine which S3 buckets to include or
+-- exclude from the query results.
+searchResources_bucketCriteria :: Lens.Lens' SearchResources (Prelude.Maybe SearchResourcesBucketCriteria)
+searchResources_bucketCriteria = Lens.lens (\SearchResources' {bucketCriteria} -> bucketCriteria) (\s@SearchResources' {} a -> s {bucketCriteria = a} :: SearchResources)
+
+-- | The maximum number of items to include in each page of the response. The
+-- default value is 50.
+searchResources_maxResults :: Lens.Lens' SearchResources (Prelude.Maybe Prelude.Int)
+searchResources_maxResults = Lens.lens (\SearchResources' {maxResults} -> maxResults) (\s@SearchResources' {} a -> s {maxResults = a} :: SearchResources)
+
+-- | The nextToken string that specifies which page of results to return in a
+-- paginated response.
+searchResources_nextToken :: Lens.Lens' SearchResources (Prelude.Maybe Prelude.Text)
+searchResources_nextToken = Lens.lens (\SearchResources' {nextToken} -> nextToken) (\s@SearchResources' {} a -> s {nextToken = a} :: SearchResources)
+
+-- | The criteria to use to sort the results.
+searchResources_sortCriteria :: Lens.Lens' SearchResources (Prelude.Maybe SearchResourcesSortCriteria)
+searchResources_sortCriteria = Lens.lens (\SearchResources' {sortCriteria} -> sortCriteria) (\s@SearchResources' {} a -> s {sortCriteria = a} :: SearchResources)
+
+instance Core.AWSPager SearchResources where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? searchResourcesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? searchResourcesResponse_matchingResources
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& searchResources_nextToken
+          Lens..~ rs
+          Lens.^? searchResourcesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest SearchResources where
+  type
+    AWSResponse SearchResources =
+      SearchResourcesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchResourcesResponse'
+            Prelude.<$> ( x
+                            Data..?> "matchingResources"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SearchResources where
+  hashWithSalt _salt SearchResources' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucketCriteria
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortCriteria
+
+instance Prelude.NFData SearchResources where
+  rnf SearchResources' {..} =
+    Prelude.rnf bucketCriteria
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortCriteria
+
+instance Data.ToHeaders SearchResources where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchResources where
+  toJSON SearchResources' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("bucketCriteria" Data..=)
+              Prelude.<$> bucketCriteria,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("sortCriteria" Data..=) Prelude.<$> sortCriteria
+          ]
+      )
+
+instance Data.ToPath SearchResources where
+  toPath =
+    Prelude.const "/datasources/search-resources"
+
+instance Data.ToQuery SearchResources where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSearchResourcesResponse' smart constructor.
+data SearchResourcesResponse = SearchResourcesResponse'
+  { -- | An array of objects, one for each resource that matches the filter
+    -- criteria specified in the request.
+    matchingResources :: Prelude.Maybe [MatchingResource],
+    -- | The string to use in a subsequent request to get the next page of
+    -- results in a paginated response. This value is null if there are no
+    -- additional pages.
+    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 'SearchResourcesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'matchingResources', 'searchResourcesResponse_matchingResources' - An array of objects, one for each resource that matches the filter
+-- criteria specified in the request.
+--
+-- 'nextToken', 'searchResourcesResponse_nextToken' - The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+--
+-- 'httpStatus', 'searchResourcesResponse_httpStatus' - The response's http status code.
+newSearchResourcesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchResourcesResponse
+newSearchResourcesResponse pHttpStatus_ =
+  SearchResourcesResponse'
+    { matchingResources =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects, one for each resource that matches the filter
+-- criteria specified in the request.
+searchResourcesResponse_matchingResources :: Lens.Lens' SearchResourcesResponse (Prelude.Maybe [MatchingResource])
+searchResourcesResponse_matchingResources = Lens.lens (\SearchResourcesResponse' {matchingResources} -> matchingResources) (\s@SearchResourcesResponse' {} a -> s {matchingResources = a} :: SearchResourcesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The string to use in a subsequent request to get the next page of
+-- results in a paginated response. This value is null if there are no
+-- additional pages.
+searchResourcesResponse_nextToken :: Lens.Lens' SearchResourcesResponse (Prelude.Maybe Prelude.Text)
+searchResourcesResponse_nextToken = Lens.lens (\SearchResourcesResponse' {nextToken} -> nextToken) (\s@SearchResourcesResponse' {} a -> s {nextToken = a} :: SearchResourcesResponse)
+
+-- | The response's http status code.
+searchResourcesResponse_httpStatus :: Lens.Lens' SearchResourcesResponse Prelude.Int
+searchResourcesResponse_httpStatus = Lens.lens (\SearchResourcesResponse' {httpStatus} -> httpStatus) (\s@SearchResourcesResponse' {} a -> s {httpStatus = a} :: SearchResourcesResponse)
+
+instance Prelude.NFData SearchResourcesResponse where
+  rnf SearchResourcesResponse' {..} =
+    Prelude.rnf matchingResources
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/TagResource.hs b/gen/Amazonka/MacieV2/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/TagResource.hs
@@ -0,0 +1,179 @@
+{-# 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.MacieV2.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds or updates one or more tags (keys and values) that are associated
+-- with an Amazon Macie resource.
+module Amazonka.MacieV2.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.MacieV2.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 Amazon Resource Name (ARN) of the resource.
+    resourceArn :: Prelude.Text,
+    -- | A map of key-value pairs that specifies the tags to associate with the
+    -- resource.
+    --
+    -- A resource can have a maximum of 50 tags. Each tag consists of a tag key
+    -- and an associated tag value. The maximum length of a tag key is 128
+    -- characters. The maximum length of a tag value is 256 characters.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+--
+-- 'tags', 'tagResource_tags' - A map of key-value pairs that specifies the tags to associate with the
+-- resource.
+--
+-- A resource can have a maximum of 50 tags. Each tag consists of a tag key
+-- and an associated tag value. The maximum length of a tag key is 128
+-- characters. The maximum length of a tag value is 256 characters.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | A map of key-value pairs that specifies the tags to associate with the
+-- resource.
+--
+-- A resource can have a maximum of 50 tags. Each tag consists of a tag key
+-- and an associated tag value. The maximum length of a tag key is 128
+-- characters. The maximum length of a tag value is 256 characters.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/TestCustomDataIdentifier.hs b/gen/Amazonka/MacieV2/TestCustomDataIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/TestCustomDataIdentifier.hs
@@ -0,0 +1,277 @@
+{-# 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.MacieV2.TestCustomDataIdentifier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Tests a custom data identifier.
+module Amazonka.MacieV2.TestCustomDataIdentifier
+  ( -- * Creating a Request
+    TestCustomDataIdentifier (..),
+    newTestCustomDataIdentifier,
+
+    -- * Request Lenses
+    testCustomDataIdentifier_ignoreWords,
+    testCustomDataIdentifier_keywords,
+    testCustomDataIdentifier_maximumMatchDistance,
+    testCustomDataIdentifier_regex,
+    testCustomDataIdentifier_sampleText,
+
+    -- * Destructuring the Response
+    TestCustomDataIdentifierResponse (..),
+    newTestCustomDataIdentifierResponse,
+
+    -- * Response Lenses
+    testCustomDataIdentifierResponse_matchCount,
+    testCustomDataIdentifierResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTestCustomDataIdentifier' smart constructor.
+data TestCustomDataIdentifier = TestCustomDataIdentifier'
+  { -- | An array that lists specific character sequences (/ignore words/) to
+    -- exclude from the results. If the text matched by the regular expression
+    -- contains any string in this array, Amazon Macie ignores it. The array
+    -- can contain as many as 10 ignore words. Each ignore word can contain
+    -- 4-90 UTF-8 characters. Ignore words are case sensitive.
+    ignoreWords :: Prelude.Maybe [Prelude.Text],
+    -- | An array that lists specific character sequences (/keywords/), one of
+    -- which must precede and be within proximity (maximumMatchDistance) of the
+    -- regular expression to match. The array can contain as many as 50
+    -- keywords. Each keyword can contain 3-90 UTF-8 characters. Keywords
+    -- aren\'t case sensitive.
+    keywords :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of characters that can exist between the end of at
+    -- least one complete character sequence specified by the keywords array
+    -- and the end of the text that matches the regex pattern. If a complete
+    -- keyword precedes all the text that matches the pattern and the keyword
+    -- is within the specified distance, Amazon Macie includes the result. The
+    -- distance can be 1-300 characters. The default value is 50.
+    maximumMatchDistance :: Prelude.Maybe Prelude.Int,
+    -- | The regular expression (/regex/) that defines the pattern to match. The
+    -- expression can contain as many as 512 characters.
+    regex :: Prelude.Text,
+    -- | The sample text to inspect by using the custom data identifier. The text
+    -- can contain as many as 1,000 characters.
+    sampleText :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TestCustomDataIdentifier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ignoreWords', 'testCustomDataIdentifier_ignoreWords' - An array that lists specific character sequences (/ignore words/) to
+-- exclude from the results. If the text matched by the regular expression
+-- contains any string in this array, Amazon Macie ignores it. The array
+-- can contain as many as 10 ignore words. Each ignore word can contain
+-- 4-90 UTF-8 characters. Ignore words are case sensitive.
+--
+-- 'keywords', 'testCustomDataIdentifier_keywords' - An array that lists specific character sequences (/keywords/), one of
+-- which must precede and be within proximity (maximumMatchDistance) of the
+-- regular expression to match. The array can contain as many as 50
+-- keywords. Each keyword can contain 3-90 UTF-8 characters. Keywords
+-- aren\'t case sensitive.
+--
+-- 'maximumMatchDistance', 'testCustomDataIdentifier_maximumMatchDistance' - The maximum number of characters that can exist between the end of at
+-- least one complete character sequence specified by the keywords array
+-- and the end of the text that matches the regex pattern. If a complete
+-- keyword precedes all the text that matches the pattern and the keyword
+-- is within the specified distance, Amazon Macie includes the result. The
+-- distance can be 1-300 characters. The default value is 50.
+--
+-- 'regex', 'testCustomDataIdentifier_regex' - The regular expression (/regex/) that defines the pattern to match. The
+-- expression can contain as many as 512 characters.
+--
+-- 'sampleText', 'testCustomDataIdentifier_sampleText' - The sample text to inspect by using the custom data identifier. The text
+-- can contain as many as 1,000 characters.
+newTestCustomDataIdentifier ::
+  -- | 'regex'
+  Prelude.Text ->
+  -- | 'sampleText'
+  Prelude.Text ->
+  TestCustomDataIdentifier
+newTestCustomDataIdentifier pRegex_ pSampleText_ =
+  TestCustomDataIdentifier'
+    { ignoreWords =
+        Prelude.Nothing,
+      keywords = Prelude.Nothing,
+      maximumMatchDistance = Prelude.Nothing,
+      regex = pRegex_,
+      sampleText = pSampleText_
+    }
+
+-- | An array that lists specific character sequences (/ignore words/) to
+-- exclude from the results. If the text matched by the regular expression
+-- contains any string in this array, Amazon Macie ignores it. The array
+-- can contain as many as 10 ignore words. Each ignore word can contain
+-- 4-90 UTF-8 characters. Ignore words are case sensitive.
+testCustomDataIdentifier_ignoreWords :: Lens.Lens' TestCustomDataIdentifier (Prelude.Maybe [Prelude.Text])
+testCustomDataIdentifier_ignoreWords = Lens.lens (\TestCustomDataIdentifier' {ignoreWords} -> ignoreWords) (\s@TestCustomDataIdentifier' {} a -> s {ignoreWords = a} :: TestCustomDataIdentifier) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array that lists specific character sequences (/keywords/), one of
+-- which must precede and be within proximity (maximumMatchDistance) of the
+-- regular expression to match. The array can contain as many as 50
+-- keywords. Each keyword can contain 3-90 UTF-8 characters. Keywords
+-- aren\'t case sensitive.
+testCustomDataIdentifier_keywords :: Lens.Lens' TestCustomDataIdentifier (Prelude.Maybe [Prelude.Text])
+testCustomDataIdentifier_keywords = Lens.lens (\TestCustomDataIdentifier' {keywords} -> keywords) (\s@TestCustomDataIdentifier' {} a -> s {keywords = a} :: TestCustomDataIdentifier) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of characters that can exist between the end of at
+-- least one complete character sequence specified by the keywords array
+-- and the end of the text that matches the regex pattern. If a complete
+-- keyword precedes all the text that matches the pattern and the keyword
+-- is within the specified distance, Amazon Macie includes the result. The
+-- distance can be 1-300 characters. The default value is 50.
+testCustomDataIdentifier_maximumMatchDistance :: Lens.Lens' TestCustomDataIdentifier (Prelude.Maybe Prelude.Int)
+testCustomDataIdentifier_maximumMatchDistance = Lens.lens (\TestCustomDataIdentifier' {maximumMatchDistance} -> maximumMatchDistance) (\s@TestCustomDataIdentifier' {} a -> s {maximumMatchDistance = a} :: TestCustomDataIdentifier)
+
+-- | The regular expression (/regex/) that defines the pattern to match. The
+-- expression can contain as many as 512 characters.
+testCustomDataIdentifier_regex :: Lens.Lens' TestCustomDataIdentifier Prelude.Text
+testCustomDataIdentifier_regex = Lens.lens (\TestCustomDataIdentifier' {regex} -> regex) (\s@TestCustomDataIdentifier' {} a -> s {regex = a} :: TestCustomDataIdentifier)
+
+-- | The sample text to inspect by using the custom data identifier. The text
+-- can contain as many as 1,000 characters.
+testCustomDataIdentifier_sampleText :: Lens.Lens' TestCustomDataIdentifier Prelude.Text
+testCustomDataIdentifier_sampleText = Lens.lens (\TestCustomDataIdentifier' {sampleText} -> sampleText) (\s@TestCustomDataIdentifier' {} a -> s {sampleText = a} :: TestCustomDataIdentifier)
+
+instance Core.AWSRequest TestCustomDataIdentifier where
+  type
+    AWSResponse TestCustomDataIdentifier =
+      TestCustomDataIdentifierResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          TestCustomDataIdentifierResponse'
+            Prelude.<$> (x Data..?> "matchCount")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TestCustomDataIdentifier where
+  hashWithSalt _salt TestCustomDataIdentifier' {..} =
+    _salt
+      `Prelude.hashWithSalt` ignoreWords
+      `Prelude.hashWithSalt` keywords
+      `Prelude.hashWithSalt` maximumMatchDistance
+      `Prelude.hashWithSalt` regex
+      `Prelude.hashWithSalt` sampleText
+
+instance Prelude.NFData TestCustomDataIdentifier where
+  rnf TestCustomDataIdentifier' {..} =
+    Prelude.rnf ignoreWords
+      `Prelude.seq` Prelude.rnf keywords
+      `Prelude.seq` Prelude.rnf maximumMatchDistance
+      `Prelude.seq` Prelude.rnf regex
+      `Prelude.seq` Prelude.rnf sampleText
+
+instance Data.ToHeaders TestCustomDataIdentifier where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TestCustomDataIdentifier where
+  toJSON TestCustomDataIdentifier' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ignoreWords" Data..=) Prelude.<$> ignoreWords,
+            ("keywords" Data..=) Prelude.<$> keywords,
+            ("maximumMatchDistance" Data..=)
+              Prelude.<$> maximumMatchDistance,
+            Prelude.Just ("regex" Data..= regex),
+            Prelude.Just ("sampleText" Data..= sampleText)
+          ]
+      )
+
+instance Data.ToPath TestCustomDataIdentifier where
+  toPath =
+    Prelude.const "/custom-data-identifiers/test"
+
+instance Data.ToQuery TestCustomDataIdentifier where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTestCustomDataIdentifierResponse' smart constructor.
+data TestCustomDataIdentifierResponse = TestCustomDataIdentifierResponse'
+  { -- | The number of occurrences of sample text that matched the criteria
+    -- specified by the custom data identifier.
+    matchCount :: Prelude.Maybe Prelude.Int,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TestCustomDataIdentifierResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'matchCount', 'testCustomDataIdentifierResponse_matchCount' - The number of occurrences of sample text that matched the criteria
+-- specified by the custom data identifier.
+--
+-- 'httpStatus', 'testCustomDataIdentifierResponse_httpStatus' - The response's http status code.
+newTestCustomDataIdentifierResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TestCustomDataIdentifierResponse
+newTestCustomDataIdentifierResponse pHttpStatus_ =
+  TestCustomDataIdentifierResponse'
+    { matchCount =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The number of occurrences of sample text that matched the criteria
+-- specified by the custom data identifier.
+testCustomDataIdentifierResponse_matchCount :: Lens.Lens' TestCustomDataIdentifierResponse (Prelude.Maybe Prelude.Int)
+testCustomDataIdentifierResponse_matchCount = Lens.lens (\TestCustomDataIdentifierResponse' {matchCount} -> matchCount) (\s@TestCustomDataIdentifierResponse' {} a -> s {matchCount = a} :: TestCustomDataIdentifierResponse)
+
+-- | The response's http status code.
+testCustomDataIdentifierResponse_httpStatus :: Lens.Lens' TestCustomDataIdentifierResponse Prelude.Int
+testCustomDataIdentifierResponse_httpStatus = Lens.lens (\TestCustomDataIdentifierResponse' {httpStatus} -> httpStatus) (\s@TestCustomDataIdentifierResponse' {} a -> s {httpStatus = a} :: TestCustomDataIdentifierResponse)
+
+instance
+  Prelude.NFData
+    TestCustomDataIdentifierResponse
+  where
+  rnf TestCustomDataIdentifierResponse' {..} =
+    Prelude.rnf matchCount
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/Types.hs b/gen/Amazonka/MacieV2/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types.hs
@@ -0,0 +1,1540 @@
+{-# 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.MacieV2.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.MacieV2.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _ThrottlingException,
+    _UnprocessableEntityException,
+    _ValidationException,
+
+    -- * AdminStatus
+    AdminStatus (..),
+
+    -- * AllowListStatusCode
+    AllowListStatusCode (..),
+
+    -- * AllowsUnencryptedObjectUploads
+    AllowsUnencryptedObjectUploads (..),
+
+    -- * AutomatedDiscoveryStatus
+    AutomatedDiscoveryStatus (..),
+
+    -- * AvailabilityCode
+    AvailabilityCode (..),
+
+    -- * BucketMetadataErrorCode
+    BucketMetadataErrorCode (..),
+
+    -- * ClassificationScopeUpdateOperation
+    ClassificationScopeUpdateOperation (..),
+
+    -- * Currency
+    Currency (..),
+
+    -- * DataIdentifierSeverity
+    DataIdentifierSeverity (..),
+
+    -- * DataIdentifierType
+    DataIdentifierType (..),
+
+    -- * DayOfWeek
+    DayOfWeek (..),
+
+    -- * EffectivePermission
+    EffectivePermission (..),
+
+    -- * EncryptionType
+    EncryptionType (..),
+
+    -- * ErrorCode
+    ErrorCode (..),
+
+    -- * FindingActionType
+    FindingActionType (..),
+
+    -- * FindingCategory
+    FindingCategory (..),
+
+    -- * FindingPublishingFrequency
+    FindingPublishingFrequency (..),
+
+    -- * FindingStatisticsSortAttributeName
+    FindingStatisticsSortAttributeName (..),
+
+    -- * FindingType
+    FindingType (..),
+
+    -- * FindingsFilterAction
+    FindingsFilterAction (..),
+
+    -- * GroupBy
+    GroupBy (..),
+
+    -- * IsDefinedInJob
+    IsDefinedInJob (..),
+
+    -- * IsMonitoredByJob
+    IsMonitoredByJob (..),
+
+    -- * JobComparator
+    JobComparator (..),
+
+    -- * JobStatus
+    JobStatus (..),
+
+    -- * JobType
+    JobType (..),
+
+    -- * LastRunErrorStatusCode
+    LastRunErrorStatusCode (..),
+
+    -- * ListJobsFilterKey
+    ListJobsFilterKey (..),
+
+    -- * ListJobsSortAttributeName
+    ListJobsSortAttributeName (..),
+
+    -- * MacieStatus
+    MacieStatus (..),
+
+    -- * ManagedDataIdentifierSelector
+    ManagedDataIdentifierSelector (..),
+
+    -- * OrderBy
+    OrderBy (..),
+
+    -- * OriginType
+    OriginType (..),
+
+    -- * RelationshipStatus
+    RelationshipStatus (..),
+
+    -- * RevealRequestStatus
+    RevealRequestStatus (..),
+
+    -- * RevealStatus
+    RevealStatus (..),
+
+    -- * ScopeFilterKey
+    ScopeFilterKey (..),
+
+    -- * SearchResourcesComparator
+    SearchResourcesComparator (..),
+
+    -- * SearchResourcesSimpleCriterionKey
+    SearchResourcesSimpleCriterionKey (..),
+
+    -- * SearchResourcesSortAttributeName
+    SearchResourcesSortAttributeName (..),
+
+    -- * SensitiveDataItemCategory
+    SensitiveDataItemCategory (..),
+
+    -- * SeverityDescription
+    SeverityDescription (..),
+
+    -- * SharedAccess
+    SharedAccess (..),
+
+    -- * SimpleCriterionKeyForJob
+    SimpleCriterionKeyForJob (..),
+
+    -- * StorageClass
+    StorageClass (..),
+
+    -- * TagTarget
+    TagTarget (..),
+
+    -- * TimeRange
+    TimeRange (..),
+
+    -- * Type
+    Type (..),
+
+    -- * UnavailabilityReasonCode
+    UnavailabilityReasonCode (..),
+
+    -- * Unit
+    Unit (..),
+
+    -- * UsageStatisticsFilterComparator
+    UsageStatisticsFilterComparator (..),
+
+    -- * UsageStatisticsFilterKey
+    UsageStatisticsFilterKey (..),
+
+    -- * UsageStatisticsSortKey
+    UsageStatisticsSortKey (..),
+
+    -- * UsageType
+    UsageType (..),
+
+    -- * UserIdentityType
+    UserIdentityType (..),
+
+    -- * AccessControlList
+    AccessControlList (..),
+    newAccessControlList,
+    accessControlList_allowsPublicReadAccess,
+    accessControlList_allowsPublicWriteAccess,
+
+    -- * AccountDetail
+    AccountDetail (..),
+    newAccountDetail,
+    accountDetail_email,
+    accountDetail_accountId,
+
+    -- * AccountLevelPermissions
+    AccountLevelPermissions (..),
+    newAccountLevelPermissions,
+    accountLevelPermissions_blockPublicAccess,
+
+    -- * AdminAccount
+    AdminAccount (..),
+    newAdminAccount,
+    adminAccount_accountId,
+    adminAccount_status,
+
+    -- * AllowListCriteria
+    AllowListCriteria (..),
+    newAllowListCriteria,
+    allowListCriteria_regex,
+    allowListCriteria_s3WordsList,
+
+    -- * AllowListStatus
+    AllowListStatus (..),
+    newAllowListStatus,
+    allowListStatus_description,
+    allowListStatus_code,
+
+    -- * AllowListSummary
+    AllowListSummary (..),
+    newAllowListSummary,
+    allowListSummary_arn,
+    allowListSummary_createdAt,
+    allowListSummary_description,
+    allowListSummary_id,
+    allowListSummary_name,
+    allowListSummary_updatedAt,
+
+    -- * ApiCallDetails
+    ApiCallDetails (..),
+    newApiCallDetails,
+    apiCallDetails_api,
+    apiCallDetails_apiServiceName,
+    apiCallDetails_firstSeen,
+    apiCallDetails_lastSeen,
+
+    -- * AssumedRole
+    AssumedRole (..),
+    newAssumedRole,
+    assumedRole_accessKeyId,
+    assumedRole_accountId,
+    assumedRole_arn,
+    assumedRole_principalId,
+    assumedRole_sessionContext,
+
+    -- * AwsAccount
+    AwsAccount (..),
+    newAwsAccount,
+    awsAccount_accountId,
+    awsAccount_principalId,
+
+    -- * AwsService
+    AwsService (..),
+    newAwsService,
+    awsService_invokedBy,
+
+    -- * BatchGetCustomDataIdentifierSummary
+    BatchGetCustomDataIdentifierSummary (..),
+    newBatchGetCustomDataIdentifierSummary,
+    batchGetCustomDataIdentifierSummary_arn,
+    batchGetCustomDataIdentifierSummary_createdAt,
+    batchGetCustomDataIdentifierSummary_deleted,
+    batchGetCustomDataIdentifierSummary_description,
+    batchGetCustomDataIdentifierSummary_id,
+    batchGetCustomDataIdentifierSummary_name,
+
+    -- * BlockPublicAccess
+    BlockPublicAccess (..),
+    newBlockPublicAccess,
+    blockPublicAccess_blockPublicAcls,
+    blockPublicAccess_blockPublicPolicy,
+    blockPublicAccess_ignorePublicAcls,
+    blockPublicAccess_restrictPublicBuckets,
+
+    -- * BucketCountByEffectivePermission
+    BucketCountByEffectivePermission (..),
+    newBucketCountByEffectivePermission,
+    bucketCountByEffectivePermission_publiclyAccessible,
+    bucketCountByEffectivePermission_publiclyReadable,
+    bucketCountByEffectivePermission_publiclyWritable,
+    bucketCountByEffectivePermission_unknown,
+
+    -- * BucketCountByEncryptionType
+    BucketCountByEncryptionType (..),
+    newBucketCountByEncryptionType,
+    bucketCountByEncryptionType_kmsManaged,
+    bucketCountByEncryptionType_s3Managed,
+    bucketCountByEncryptionType_unencrypted,
+    bucketCountByEncryptionType_unknown,
+
+    -- * BucketCountBySharedAccessType
+    BucketCountBySharedAccessType (..),
+    newBucketCountBySharedAccessType,
+    bucketCountBySharedAccessType_external,
+    bucketCountBySharedAccessType_internal,
+    bucketCountBySharedAccessType_notShared,
+    bucketCountBySharedAccessType_unknown,
+
+    -- * BucketCountPolicyAllowsUnencryptedObjectUploads
+    BucketCountPolicyAllowsUnencryptedObjectUploads (..),
+    newBucketCountPolicyAllowsUnencryptedObjectUploads,
+    bucketCountPolicyAllowsUnencryptedObjectUploads_allowsUnencryptedObjectUploads,
+    bucketCountPolicyAllowsUnencryptedObjectUploads_deniesUnencryptedObjectUploads,
+    bucketCountPolicyAllowsUnencryptedObjectUploads_unknown,
+
+    -- * BucketCriteriaAdditionalProperties
+    BucketCriteriaAdditionalProperties (..),
+    newBucketCriteriaAdditionalProperties,
+    bucketCriteriaAdditionalProperties_eq,
+    bucketCriteriaAdditionalProperties_gt,
+    bucketCriteriaAdditionalProperties_gte,
+    bucketCriteriaAdditionalProperties_lt,
+    bucketCriteriaAdditionalProperties_lte,
+    bucketCriteriaAdditionalProperties_neq,
+    bucketCriteriaAdditionalProperties_prefix,
+
+    -- * BucketLevelPermissions
+    BucketLevelPermissions (..),
+    newBucketLevelPermissions,
+    bucketLevelPermissions_accessControlList,
+    bucketLevelPermissions_blockPublicAccess,
+    bucketLevelPermissions_bucketPolicy,
+
+    -- * BucketMetadata
+    BucketMetadata (..),
+    newBucketMetadata,
+    bucketMetadata_accountId,
+    bucketMetadata_allowsUnencryptedObjectUploads,
+    bucketMetadata_bucketArn,
+    bucketMetadata_bucketCreatedAt,
+    bucketMetadata_bucketName,
+    bucketMetadata_classifiableObjectCount,
+    bucketMetadata_classifiableSizeInBytes,
+    bucketMetadata_errorCode,
+    bucketMetadata_errorMessage,
+    bucketMetadata_jobDetails,
+    bucketMetadata_lastAutomatedDiscoveryTime,
+    bucketMetadata_lastUpdated,
+    bucketMetadata_objectCount,
+    bucketMetadata_objectCountByEncryptionType,
+    bucketMetadata_publicAccess,
+    bucketMetadata_region,
+    bucketMetadata_replicationDetails,
+    bucketMetadata_sensitivityScore,
+    bucketMetadata_serverSideEncryption,
+    bucketMetadata_sharedAccess,
+    bucketMetadata_sizeInBytes,
+    bucketMetadata_sizeInBytesCompressed,
+    bucketMetadata_tags,
+    bucketMetadata_unclassifiableObjectCount,
+    bucketMetadata_unclassifiableObjectSizeInBytes,
+    bucketMetadata_versioning,
+
+    -- * BucketPermissionConfiguration
+    BucketPermissionConfiguration (..),
+    newBucketPermissionConfiguration,
+    bucketPermissionConfiguration_accountLevelPermissions,
+    bucketPermissionConfiguration_bucketLevelPermissions,
+
+    -- * BucketPolicy
+    BucketPolicy (..),
+    newBucketPolicy,
+    bucketPolicy_allowsPublicReadAccess,
+    bucketPolicy_allowsPublicWriteAccess,
+
+    -- * BucketPublicAccess
+    BucketPublicAccess (..),
+    newBucketPublicAccess,
+    bucketPublicAccess_effectivePermission,
+    bucketPublicAccess_permissionConfiguration,
+
+    -- * BucketServerSideEncryption
+    BucketServerSideEncryption (..),
+    newBucketServerSideEncryption,
+    bucketServerSideEncryption_kmsMasterKeyId,
+    bucketServerSideEncryption_type,
+
+    -- * BucketSortCriteria
+    BucketSortCriteria (..),
+    newBucketSortCriteria,
+    bucketSortCriteria_attributeName,
+    bucketSortCriteria_orderBy,
+
+    -- * BucketStatisticsBySensitivity
+    BucketStatisticsBySensitivity (..),
+    newBucketStatisticsBySensitivity,
+    bucketStatisticsBySensitivity_classificationError,
+    bucketStatisticsBySensitivity_notClassified,
+    bucketStatisticsBySensitivity_notSensitive,
+    bucketStatisticsBySensitivity_sensitive,
+
+    -- * Cell
+    Cell (..),
+    newCell,
+    cell_cellReference,
+    cell_column,
+    cell_columnName,
+    cell_row,
+
+    -- * ClassificationDetails
+    ClassificationDetails (..),
+    newClassificationDetails,
+    classificationDetails_detailedResultsLocation,
+    classificationDetails_jobArn,
+    classificationDetails_jobId,
+    classificationDetails_originType,
+    classificationDetails_result,
+
+    -- * ClassificationExportConfiguration
+    ClassificationExportConfiguration (..),
+    newClassificationExportConfiguration,
+    classificationExportConfiguration_s3Destination,
+
+    -- * ClassificationResult
+    ClassificationResult (..),
+    newClassificationResult,
+    classificationResult_additionalOccurrences,
+    classificationResult_customDataIdentifiers,
+    classificationResult_mimeType,
+    classificationResult_sensitiveData,
+    classificationResult_sizeClassified,
+    classificationResult_status,
+
+    -- * ClassificationResultStatus
+    ClassificationResultStatus (..),
+    newClassificationResultStatus,
+    classificationResultStatus_code,
+    classificationResultStatus_reason,
+
+    -- * ClassificationScopeSummary
+    ClassificationScopeSummary (..),
+    newClassificationScopeSummary,
+    classificationScopeSummary_id,
+    classificationScopeSummary_name,
+
+    -- * CriteriaBlockForJob
+    CriteriaBlockForJob (..),
+    newCriteriaBlockForJob,
+    criteriaBlockForJob_and,
+
+    -- * CriteriaForJob
+    CriteriaForJob (..),
+    newCriteriaForJob,
+    criteriaForJob_simpleCriterion,
+    criteriaForJob_tagCriterion,
+
+    -- * CriterionAdditionalProperties
+    CriterionAdditionalProperties (..),
+    newCriterionAdditionalProperties,
+    criterionAdditionalProperties_eq,
+    criterionAdditionalProperties_eqExactMatch,
+    criterionAdditionalProperties_gt,
+    criterionAdditionalProperties_gte,
+    criterionAdditionalProperties_lt,
+    criterionAdditionalProperties_lte,
+    criterionAdditionalProperties_neq,
+
+    -- * CustomDataIdentifierSummary
+    CustomDataIdentifierSummary (..),
+    newCustomDataIdentifierSummary,
+    customDataIdentifierSummary_arn,
+    customDataIdentifierSummary_createdAt,
+    customDataIdentifierSummary_description,
+    customDataIdentifierSummary_id,
+    customDataIdentifierSummary_name,
+
+    -- * CustomDataIdentifiers
+    CustomDataIdentifiers (..),
+    newCustomDataIdentifiers,
+    customDataIdentifiers_detections,
+    customDataIdentifiers_totalCount,
+
+    -- * CustomDetection
+    CustomDetection (..),
+    newCustomDetection,
+    customDetection_arn,
+    customDetection_count,
+    customDetection_name,
+    customDetection_occurrences,
+
+    -- * DailySchedule
+    DailySchedule (..),
+    newDailySchedule,
+
+    -- * DefaultDetection
+    DefaultDetection (..),
+    newDefaultDetection,
+    defaultDetection_count,
+    defaultDetection_occurrences,
+    defaultDetection_type,
+
+    -- * DetectedDataDetails
+    DetectedDataDetails (..),
+    newDetectedDataDetails,
+    detectedDataDetails_value,
+
+    -- * Detection
+    Detection (..),
+    newDetection,
+    detection_arn,
+    detection_count,
+    detection_id,
+    detection_name,
+    detection_suppressed,
+    detection_type,
+
+    -- * DomainDetails
+    DomainDetails (..),
+    newDomainDetails,
+    domainDetails_domainName,
+
+    -- * FederatedUser
+    FederatedUser (..),
+    newFederatedUser,
+    federatedUser_accessKeyId,
+    federatedUser_accountId,
+    federatedUser_arn,
+    federatedUser_principalId,
+    federatedUser_sessionContext,
+
+    -- * Finding
+    Finding (..),
+    newFinding,
+    finding_accountId,
+    finding_archived,
+    finding_category,
+    finding_classificationDetails,
+    finding_count,
+    finding_createdAt,
+    finding_description,
+    finding_id,
+    finding_partition,
+    finding_policyDetails,
+    finding_region,
+    finding_resourcesAffected,
+    finding_sample,
+    finding_schemaVersion,
+    finding_severity,
+    finding_title,
+    finding_type,
+    finding_updatedAt,
+
+    -- * FindingAction
+    FindingAction (..),
+    newFindingAction,
+    findingAction_actionType,
+    findingAction_apiCallDetails,
+
+    -- * FindingActor
+    FindingActor (..),
+    newFindingActor,
+    findingActor_domainDetails,
+    findingActor_ipAddressDetails,
+    findingActor_userIdentity,
+
+    -- * FindingCriteria
+    FindingCriteria (..),
+    newFindingCriteria,
+    findingCriteria_criterion,
+
+    -- * FindingStatisticsSortCriteria
+    FindingStatisticsSortCriteria (..),
+    newFindingStatisticsSortCriteria,
+    findingStatisticsSortCriteria_attributeName,
+    findingStatisticsSortCriteria_orderBy,
+
+    -- * FindingsFilterListItem
+    FindingsFilterListItem (..),
+    newFindingsFilterListItem,
+    findingsFilterListItem_action,
+    findingsFilterListItem_arn,
+    findingsFilterListItem_id,
+    findingsFilterListItem_name,
+    findingsFilterListItem_tags,
+
+    -- * GroupCount
+    GroupCount (..),
+    newGroupCount,
+    groupCount_count,
+    groupCount_groupKey,
+
+    -- * IamUser
+    IamUser (..),
+    newIamUser,
+    iamUser_accountId,
+    iamUser_arn,
+    iamUser_principalId,
+    iamUser_userName,
+
+    -- * Invitation
+    Invitation (..),
+    newInvitation,
+    invitation_accountId,
+    invitation_invitationId,
+    invitation_invitedAt,
+    invitation_relationshipStatus,
+
+    -- * IpAddressDetails
+    IpAddressDetails (..),
+    newIpAddressDetails,
+    ipAddressDetails_ipAddressV4,
+    ipAddressDetails_ipCity,
+    ipAddressDetails_ipCountry,
+    ipAddressDetails_ipGeoLocation,
+    ipAddressDetails_ipOwner,
+
+    -- * IpCity
+    IpCity (..),
+    newIpCity,
+    ipCity_name,
+
+    -- * IpCountry
+    IpCountry (..),
+    newIpCountry,
+    ipCountry_code,
+    ipCountry_name,
+
+    -- * IpGeoLocation
+    IpGeoLocation (..),
+    newIpGeoLocation,
+    ipGeoLocation_lat,
+    ipGeoLocation_lon,
+
+    -- * IpOwner
+    IpOwner (..),
+    newIpOwner,
+    ipOwner_asn,
+    ipOwner_asnOrg,
+    ipOwner_isp,
+    ipOwner_org,
+
+    -- * JobDetails
+    JobDetails (..),
+    newJobDetails,
+    jobDetails_isDefinedInJob,
+    jobDetails_isMonitoredByJob,
+    jobDetails_lastJobId,
+    jobDetails_lastJobRunTime,
+
+    -- * JobScheduleFrequency
+    JobScheduleFrequency (..),
+    newJobScheduleFrequency,
+    jobScheduleFrequency_dailySchedule,
+    jobScheduleFrequency_monthlySchedule,
+    jobScheduleFrequency_weeklySchedule,
+
+    -- * JobScopeTerm
+    JobScopeTerm (..),
+    newJobScopeTerm,
+    jobScopeTerm_simpleScopeTerm,
+    jobScopeTerm_tagScopeTerm,
+
+    -- * JobScopingBlock
+    JobScopingBlock (..),
+    newJobScopingBlock,
+    jobScopingBlock_and,
+
+    -- * JobSummary
+    JobSummary (..),
+    newJobSummary,
+    jobSummary_bucketCriteria,
+    jobSummary_bucketDefinitions,
+    jobSummary_createdAt,
+    jobSummary_jobId,
+    jobSummary_jobStatus,
+    jobSummary_jobType,
+    jobSummary_lastRunErrorStatus,
+    jobSummary_name,
+    jobSummary_userPausedDetails,
+
+    -- * KeyValuePair
+    KeyValuePair (..),
+    newKeyValuePair,
+    keyValuePair_key,
+    keyValuePair_value,
+
+    -- * LastRunErrorStatus
+    LastRunErrorStatus (..),
+    newLastRunErrorStatus,
+    lastRunErrorStatus_code,
+
+    -- * ListJobsFilterCriteria
+    ListJobsFilterCriteria (..),
+    newListJobsFilterCriteria,
+    listJobsFilterCriteria_excludes,
+    listJobsFilterCriteria_includes,
+
+    -- * ListJobsFilterTerm
+    ListJobsFilterTerm (..),
+    newListJobsFilterTerm,
+    listJobsFilterTerm_comparator,
+    listJobsFilterTerm_key,
+    listJobsFilterTerm_values,
+
+    -- * ListJobsSortCriteria
+    ListJobsSortCriteria (..),
+    newListJobsSortCriteria,
+    listJobsSortCriteria_attributeName,
+    listJobsSortCriteria_orderBy,
+
+    -- * ManagedDataIdentifierSummary
+    ManagedDataIdentifierSummary (..),
+    newManagedDataIdentifierSummary,
+    managedDataIdentifierSummary_category,
+    managedDataIdentifierSummary_id,
+
+    -- * MatchingBucket
+    MatchingBucket (..),
+    newMatchingBucket,
+    matchingBucket_accountId,
+    matchingBucket_bucketName,
+    matchingBucket_classifiableObjectCount,
+    matchingBucket_classifiableSizeInBytes,
+    matchingBucket_errorCode,
+    matchingBucket_errorMessage,
+    matchingBucket_jobDetails,
+    matchingBucket_lastAutomatedDiscoveryTime,
+    matchingBucket_objectCount,
+    matchingBucket_objectCountByEncryptionType,
+    matchingBucket_sensitivityScore,
+    matchingBucket_sizeInBytes,
+    matchingBucket_sizeInBytesCompressed,
+    matchingBucket_unclassifiableObjectCount,
+    matchingBucket_unclassifiableObjectSizeInBytes,
+
+    -- * MatchingResource
+    MatchingResource (..),
+    newMatchingResource,
+    matchingResource_matchingBucket,
+
+    -- * Member
+    Member (..),
+    newMember,
+    member_accountId,
+    member_administratorAccountId,
+    member_arn,
+    member_email,
+    member_invitedAt,
+    member_masterAccountId,
+    member_relationshipStatus,
+    member_tags,
+    member_updatedAt,
+
+    -- * MonthlySchedule
+    MonthlySchedule (..),
+    newMonthlySchedule,
+    monthlySchedule_dayOfMonth,
+
+    -- * ObjectCountByEncryptionType
+    ObjectCountByEncryptionType (..),
+    newObjectCountByEncryptionType,
+    objectCountByEncryptionType_customerManaged,
+    objectCountByEncryptionType_kmsManaged,
+    objectCountByEncryptionType_s3Managed,
+    objectCountByEncryptionType_unencrypted,
+    objectCountByEncryptionType_unknown,
+
+    -- * ObjectLevelStatistics
+    ObjectLevelStatistics (..),
+    newObjectLevelStatistics,
+    objectLevelStatistics_fileType,
+    objectLevelStatistics_storageClass,
+    objectLevelStatistics_total,
+
+    -- * Occurrences
+    Occurrences (..),
+    newOccurrences,
+    occurrences_cells,
+    occurrences_lineRanges,
+    occurrences_offsetRanges,
+    occurrences_pages,
+    occurrences_records,
+
+    -- * Page
+    Page (..),
+    newPage,
+    page_lineRange,
+    page_offsetRange,
+    page_pageNumber,
+
+    -- * PolicyDetails
+    PolicyDetails (..),
+    newPolicyDetails,
+    policyDetails_action,
+    policyDetails_actor,
+
+    -- * Range
+    Range (..),
+    newRange,
+    range_end,
+    range_start,
+    range_startColumn,
+
+    -- * Record
+    Record (..),
+    newRecord,
+    record_jsonPath,
+    record_recordIndex,
+
+    -- * ReplicationDetails
+    ReplicationDetails (..),
+    newReplicationDetails,
+    replicationDetails_replicated,
+    replicationDetails_replicatedExternally,
+    replicationDetails_replicationAccounts,
+
+    -- * ResourceProfileArtifact
+    ResourceProfileArtifact (..),
+    newResourceProfileArtifact,
+    resourceProfileArtifact_sensitive,
+    resourceProfileArtifact_classificationResultStatus,
+    resourceProfileArtifact_arn,
+
+    -- * ResourceStatistics
+    ResourceStatistics (..),
+    newResourceStatistics,
+    resourceStatistics_totalBytesClassified,
+    resourceStatistics_totalDetections,
+    resourceStatistics_totalDetectionsSuppressed,
+    resourceStatistics_totalItemsClassified,
+    resourceStatistics_totalItemsSensitive,
+    resourceStatistics_totalItemsSkipped,
+    resourceStatistics_totalItemsSkippedInvalidEncryption,
+    resourceStatistics_totalItemsSkippedInvalidKms,
+    resourceStatistics_totalItemsSkippedPermissionDenied,
+
+    -- * ResourcesAffected
+    ResourcesAffected (..),
+    newResourcesAffected,
+    resourcesAffected_s3Bucket,
+    resourcesAffected_s3Object,
+
+    -- * RevealConfiguration
+    RevealConfiguration (..),
+    newRevealConfiguration,
+    revealConfiguration_kmsKeyId,
+    revealConfiguration_status,
+
+    -- * S3Bucket
+    S3Bucket (..),
+    newS3Bucket,
+    s3Bucket_allowsUnencryptedObjectUploads,
+    s3Bucket_arn,
+    s3Bucket_createdAt,
+    s3Bucket_defaultServerSideEncryption,
+    s3Bucket_name,
+    s3Bucket_owner,
+    s3Bucket_publicAccess,
+    s3Bucket_tags,
+
+    -- * S3BucketCriteriaForJob
+    S3BucketCriteriaForJob (..),
+    newS3BucketCriteriaForJob,
+    s3BucketCriteriaForJob_excludes,
+    s3BucketCriteriaForJob_includes,
+
+    -- * S3BucketDefinitionForJob
+    S3BucketDefinitionForJob (..),
+    newS3BucketDefinitionForJob,
+    s3BucketDefinitionForJob_accountId,
+    s3BucketDefinitionForJob_buckets,
+
+    -- * S3BucketOwner
+    S3BucketOwner (..),
+    newS3BucketOwner,
+    s3BucketOwner_displayName,
+    s3BucketOwner_id,
+
+    -- * S3ClassificationScope
+    S3ClassificationScope (..),
+    newS3ClassificationScope,
+    s3ClassificationScope_excludes,
+
+    -- * S3ClassificationScopeExclusion
+    S3ClassificationScopeExclusion (..),
+    newS3ClassificationScopeExclusion,
+    s3ClassificationScopeExclusion_bucketNames,
+
+    -- * S3ClassificationScopeExclusionUpdate
+    S3ClassificationScopeExclusionUpdate (..),
+    newS3ClassificationScopeExclusionUpdate,
+    s3ClassificationScopeExclusionUpdate_bucketNames,
+    s3ClassificationScopeExclusionUpdate_operation,
+
+    -- * S3ClassificationScopeUpdate
+    S3ClassificationScopeUpdate (..),
+    newS3ClassificationScopeUpdate,
+    s3ClassificationScopeUpdate_excludes,
+
+    -- * S3Destination
+    S3Destination (..),
+    newS3Destination,
+    s3Destination_keyPrefix,
+    s3Destination_bucketName,
+    s3Destination_kmsKeyArn,
+
+    -- * S3JobDefinition
+    S3JobDefinition (..),
+    newS3JobDefinition,
+    s3JobDefinition_bucketCriteria,
+    s3JobDefinition_bucketDefinitions,
+    s3JobDefinition_scoping,
+
+    -- * S3Object
+    S3Object (..),
+    newS3Object,
+    s3Object_bucketArn,
+    s3Object_eTag,
+    s3Object_extension,
+    s3Object_key,
+    s3Object_lastModified,
+    s3Object_path,
+    s3Object_publicAccess,
+    s3Object_serverSideEncryption,
+    s3Object_size,
+    s3Object_storageClass,
+    s3Object_tags,
+    s3Object_versionId,
+
+    -- * S3WordsList
+    S3WordsList (..),
+    newS3WordsList,
+    s3WordsList_bucketName,
+    s3WordsList_objectKey,
+
+    -- * Scoping
+    Scoping (..),
+    newScoping,
+    scoping_excludes,
+    scoping_includes,
+
+    -- * SearchResourcesBucketCriteria
+    SearchResourcesBucketCriteria (..),
+    newSearchResourcesBucketCriteria,
+    searchResourcesBucketCriteria_excludes,
+    searchResourcesBucketCriteria_includes,
+
+    -- * SearchResourcesCriteria
+    SearchResourcesCriteria (..),
+    newSearchResourcesCriteria,
+    searchResourcesCriteria_simpleCriterion,
+    searchResourcesCriteria_tagCriterion,
+
+    -- * SearchResourcesCriteriaBlock
+    SearchResourcesCriteriaBlock (..),
+    newSearchResourcesCriteriaBlock,
+    searchResourcesCriteriaBlock_and,
+
+    -- * SearchResourcesSimpleCriterion
+    SearchResourcesSimpleCriterion (..),
+    newSearchResourcesSimpleCriterion,
+    searchResourcesSimpleCriterion_comparator,
+    searchResourcesSimpleCriterion_key,
+    searchResourcesSimpleCriterion_values,
+
+    -- * SearchResourcesSortCriteria
+    SearchResourcesSortCriteria (..),
+    newSearchResourcesSortCriteria,
+    searchResourcesSortCriteria_attributeName,
+    searchResourcesSortCriteria_orderBy,
+
+    -- * SearchResourcesTagCriterion
+    SearchResourcesTagCriterion (..),
+    newSearchResourcesTagCriterion,
+    searchResourcesTagCriterion_comparator,
+    searchResourcesTagCriterion_tagValues,
+
+    -- * SearchResourcesTagCriterionPair
+    SearchResourcesTagCriterionPair (..),
+    newSearchResourcesTagCriterionPair,
+    searchResourcesTagCriterionPair_key,
+    searchResourcesTagCriterionPair_value,
+
+    -- * SecurityHubConfiguration
+    SecurityHubConfiguration (..),
+    newSecurityHubConfiguration,
+    securityHubConfiguration_publishPolicyFindings,
+    securityHubConfiguration_publishClassificationFindings,
+
+    -- * SensitiveDataItem
+    SensitiveDataItem (..),
+    newSensitiveDataItem,
+    sensitiveDataItem_category,
+    sensitiveDataItem_detections,
+    sensitiveDataItem_totalCount,
+
+    -- * SensitivityAggregations
+    SensitivityAggregations (..),
+    newSensitivityAggregations,
+    sensitivityAggregations_classifiableSizeInBytes,
+    sensitivityAggregations_publiclyAccessibleCount,
+    sensitivityAggregations_totalCount,
+    sensitivityAggregations_totalSizeInBytes,
+
+    -- * SensitivityInspectionTemplateExcludes
+    SensitivityInspectionTemplateExcludes (..),
+    newSensitivityInspectionTemplateExcludes,
+    sensitivityInspectionTemplateExcludes_managedDataIdentifierIds,
+
+    -- * SensitivityInspectionTemplateIncludes
+    SensitivityInspectionTemplateIncludes (..),
+    newSensitivityInspectionTemplateIncludes,
+    sensitivityInspectionTemplateIncludes_allowListIds,
+    sensitivityInspectionTemplateIncludes_customDataIdentifierIds,
+    sensitivityInspectionTemplateIncludes_managedDataIdentifierIds,
+
+    -- * SensitivityInspectionTemplatesEntry
+    SensitivityInspectionTemplatesEntry (..),
+    newSensitivityInspectionTemplatesEntry,
+    sensitivityInspectionTemplatesEntry_id,
+    sensitivityInspectionTemplatesEntry_name,
+
+    -- * ServerSideEncryption
+    ServerSideEncryption (..),
+    newServerSideEncryption,
+    serverSideEncryption_encryptionType,
+    serverSideEncryption_kmsMasterKeyId,
+
+    -- * ServiceLimit
+    ServiceLimit (..),
+    newServiceLimit,
+    serviceLimit_isServiceLimited,
+    serviceLimit_unit,
+    serviceLimit_value,
+
+    -- * SessionContext
+    SessionContext (..),
+    newSessionContext,
+    sessionContext_attributes,
+    sessionContext_sessionIssuer,
+
+    -- * SessionContextAttributes
+    SessionContextAttributes (..),
+    newSessionContextAttributes,
+    sessionContextAttributes_creationDate,
+    sessionContextAttributes_mfaAuthenticated,
+
+    -- * SessionIssuer
+    SessionIssuer (..),
+    newSessionIssuer,
+    sessionIssuer_accountId,
+    sessionIssuer_arn,
+    sessionIssuer_principalId,
+    sessionIssuer_type,
+    sessionIssuer_userName,
+
+    -- * Severity
+    Severity (..),
+    newSeverity,
+    severity_description,
+    severity_score,
+
+    -- * SeverityLevel
+    SeverityLevel (..),
+    newSeverityLevel,
+    severityLevel_occurrencesThreshold,
+    severityLevel_severity,
+
+    -- * SimpleCriterionForJob
+    SimpleCriterionForJob (..),
+    newSimpleCriterionForJob,
+    simpleCriterionForJob_comparator,
+    simpleCriterionForJob_key,
+    simpleCriterionForJob_values,
+
+    -- * SimpleScopeTerm
+    SimpleScopeTerm (..),
+    newSimpleScopeTerm,
+    simpleScopeTerm_comparator,
+    simpleScopeTerm_key,
+    simpleScopeTerm_values,
+
+    -- * SortCriteria
+    SortCriteria (..),
+    newSortCriteria,
+    sortCriteria_attributeName,
+    sortCriteria_orderBy,
+
+    -- * Statistics
+    Statistics (..),
+    newStatistics,
+    statistics_approximateNumberOfObjectsToProcess,
+    statistics_numberOfRuns,
+
+    -- * SuppressDataIdentifier
+    SuppressDataIdentifier (..),
+    newSuppressDataIdentifier,
+    suppressDataIdentifier_id,
+    suppressDataIdentifier_type,
+
+    -- * TagCriterionForJob
+    TagCriterionForJob (..),
+    newTagCriterionForJob,
+    tagCriterionForJob_comparator,
+    tagCriterionForJob_tagValues,
+
+    -- * TagCriterionPairForJob
+    TagCriterionPairForJob (..),
+    newTagCriterionPairForJob,
+    tagCriterionPairForJob_key,
+    tagCriterionPairForJob_value,
+
+    -- * TagScopeTerm
+    TagScopeTerm (..),
+    newTagScopeTerm,
+    tagScopeTerm_comparator,
+    tagScopeTerm_key,
+    tagScopeTerm_tagValues,
+    tagScopeTerm_target,
+
+    -- * TagValuePair
+    TagValuePair (..),
+    newTagValuePair,
+    tagValuePair_key,
+    tagValuePair_value,
+
+    -- * UnprocessedAccount
+    UnprocessedAccount (..),
+    newUnprocessedAccount,
+    unprocessedAccount_accountId,
+    unprocessedAccount_errorCode,
+    unprocessedAccount_errorMessage,
+
+    -- * UsageByAccount
+    UsageByAccount (..),
+    newUsageByAccount,
+    usageByAccount_currency,
+    usageByAccount_estimatedCost,
+    usageByAccount_serviceLimit,
+    usageByAccount_type,
+
+    -- * UsageRecord
+    UsageRecord (..),
+    newUsageRecord,
+    usageRecord_accountId,
+    usageRecord_automatedDiscoveryFreeTrialStartDate,
+    usageRecord_freeTrialStartDate,
+    usageRecord_usage,
+
+    -- * UsageStatisticsFilter
+    UsageStatisticsFilter (..),
+    newUsageStatisticsFilter,
+    usageStatisticsFilter_comparator,
+    usageStatisticsFilter_key,
+    usageStatisticsFilter_values,
+
+    -- * UsageStatisticsSortBy
+    UsageStatisticsSortBy (..),
+    newUsageStatisticsSortBy,
+    usageStatisticsSortBy_key,
+    usageStatisticsSortBy_orderBy,
+
+    -- * UsageTotal
+    UsageTotal (..),
+    newUsageTotal,
+    usageTotal_currency,
+    usageTotal_estimatedCost,
+    usageTotal_type,
+
+    -- * UserIdentity
+    UserIdentity (..),
+    newUserIdentity,
+    userIdentity_assumedRole,
+    userIdentity_awsAccount,
+    userIdentity_awsService,
+    userIdentity_federatedUser,
+    userIdentity_iamUser,
+    userIdentity_root,
+    userIdentity_type,
+
+    -- * UserIdentityRoot
+    UserIdentityRoot (..),
+    newUserIdentityRoot,
+    userIdentityRoot_accountId,
+    userIdentityRoot_arn,
+    userIdentityRoot_principalId,
+
+    -- * UserPausedDetails
+    UserPausedDetails (..),
+    newUserPausedDetails,
+    userPausedDetails_jobExpiresAt,
+    userPausedDetails_jobImminentExpirationHealthEventArn,
+    userPausedDetails_jobPausedAt,
+
+    -- * WeeklySchedule
+    WeeklySchedule (..),
+    newWeeklySchedule,
+    weeklySchedule_dayOfWeek,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.MacieV2.Types.AccessControlList
+import Amazonka.MacieV2.Types.AccountDetail
+import Amazonka.MacieV2.Types.AccountLevelPermissions
+import Amazonka.MacieV2.Types.AdminAccount
+import Amazonka.MacieV2.Types.AdminStatus
+import Amazonka.MacieV2.Types.AllowListCriteria
+import Amazonka.MacieV2.Types.AllowListStatus
+import Amazonka.MacieV2.Types.AllowListStatusCode
+import Amazonka.MacieV2.Types.AllowListSummary
+import Amazonka.MacieV2.Types.AllowsUnencryptedObjectUploads
+import Amazonka.MacieV2.Types.ApiCallDetails
+import Amazonka.MacieV2.Types.AssumedRole
+import Amazonka.MacieV2.Types.AutomatedDiscoveryStatus
+import Amazonka.MacieV2.Types.AvailabilityCode
+import Amazonka.MacieV2.Types.AwsAccount
+import Amazonka.MacieV2.Types.AwsService
+import Amazonka.MacieV2.Types.BatchGetCustomDataIdentifierSummary
+import Amazonka.MacieV2.Types.BlockPublicAccess
+import Amazonka.MacieV2.Types.BucketCountByEffectivePermission
+import Amazonka.MacieV2.Types.BucketCountByEncryptionType
+import Amazonka.MacieV2.Types.BucketCountBySharedAccessType
+import Amazonka.MacieV2.Types.BucketCountPolicyAllowsUnencryptedObjectUploads
+import Amazonka.MacieV2.Types.BucketCriteriaAdditionalProperties
+import Amazonka.MacieV2.Types.BucketLevelPermissions
+import Amazonka.MacieV2.Types.BucketMetadata
+import Amazonka.MacieV2.Types.BucketMetadataErrorCode
+import Amazonka.MacieV2.Types.BucketPermissionConfiguration
+import Amazonka.MacieV2.Types.BucketPolicy
+import Amazonka.MacieV2.Types.BucketPublicAccess
+import Amazonka.MacieV2.Types.BucketServerSideEncryption
+import Amazonka.MacieV2.Types.BucketSortCriteria
+import Amazonka.MacieV2.Types.BucketStatisticsBySensitivity
+import Amazonka.MacieV2.Types.Cell
+import Amazonka.MacieV2.Types.ClassificationDetails
+import Amazonka.MacieV2.Types.ClassificationExportConfiguration
+import Amazonka.MacieV2.Types.ClassificationResult
+import Amazonka.MacieV2.Types.ClassificationResultStatus
+import Amazonka.MacieV2.Types.ClassificationScopeSummary
+import Amazonka.MacieV2.Types.ClassificationScopeUpdateOperation
+import Amazonka.MacieV2.Types.CriteriaBlockForJob
+import Amazonka.MacieV2.Types.CriteriaForJob
+import Amazonka.MacieV2.Types.CriterionAdditionalProperties
+import Amazonka.MacieV2.Types.Currency
+import Amazonka.MacieV2.Types.CustomDataIdentifierSummary
+import Amazonka.MacieV2.Types.CustomDataIdentifiers
+import Amazonka.MacieV2.Types.CustomDetection
+import Amazonka.MacieV2.Types.DailySchedule
+import Amazonka.MacieV2.Types.DataIdentifierSeverity
+import Amazonka.MacieV2.Types.DataIdentifierType
+import Amazonka.MacieV2.Types.DayOfWeek
+import Amazonka.MacieV2.Types.DefaultDetection
+import Amazonka.MacieV2.Types.DetectedDataDetails
+import Amazonka.MacieV2.Types.Detection
+import Amazonka.MacieV2.Types.DomainDetails
+import Amazonka.MacieV2.Types.EffectivePermission
+import Amazonka.MacieV2.Types.EncryptionType
+import Amazonka.MacieV2.Types.ErrorCode
+import Amazonka.MacieV2.Types.FederatedUser
+import Amazonka.MacieV2.Types.Finding
+import Amazonka.MacieV2.Types.FindingAction
+import Amazonka.MacieV2.Types.FindingActionType
+import Amazonka.MacieV2.Types.FindingActor
+import Amazonka.MacieV2.Types.FindingCategory
+import Amazonka.MacieV2.Types.FindingCriteria
+import Amazonka.MacieV2.Types.FindingPublishingFrequency
+import Amazonka.MacieV2.Types.FindingStatisticsSortAttributeName
+import Amazonka.MacieV2.Types.FindingStatisticsSortCriteria
+import Amazonka.MacieV2.Types.FindingType
+import Amazonka.MacieV2.Types.FindingsFilterAction
+import Amazonka.MacieV2.Types.FindingsFilterListItem
+import Amazonka.MacieV2.Types.GroupBy
+import Amazonka.MacieV2.Types.GroupCount
+import Amazonka.MacieV2.Types.IamUser
+import Amazonka.MacieV2.Types.Invitation
+import Amazonka.MacieV2.Types.IpAddressDetails
+import Amazonka.MacieV2.Types.IpCity
+import Amazonka.MacieV2.Types.IpCountry
+import Amazonka.MacieV2.Types.IpGeoLocation
+import Amazonka.MacieV2.Types.IpOwner
+import Amazonka.MacieV2.Types.IsDefinedInJob
+import Amazonka.MacieV2.Types.IsMonitoredByJob
+import Amazonka.MacieV2.Types.JobComparator
+import Amazonka.MacieV2.Types.JobDetails
+import Amazonka.MacieV2.Types.JobScheduleFrequency
+import Amazonka.MacieV2.Types.JobScopeTerm
+import Amazonka.MacieV2.Types.JobScopingBlock
+import Amazonka.MacieV2.Types.JobStatus
+import Amazonka.MacieV2.Types.JobSummary
+import Amazonka.MacieV2.Types.JobType
+import Amazonka.MacieV2.Types.KeyValuePair
+import Amazonka.MacieV2.Types.LastRunErrorStatus
+import Amazonka.MacieV2.Types.LastRunErrorStatusCode
+import Amazonka.MacieV2.Types.ListJobsFilterCriteria
+import Amazonka.MacieV2.Types.ListJobsFilterKey
+import Amazonka.MacieV2.Types.ListJobsFilterTerm
+import Amazonka.MacieV2.Types.ListJobsSortAttributeName
+import Amazonka.MacieV2.Types.ListJobsSortCriteria
+import Amazonka.MacieV2.Types.MacieStatus
+import Amazonka.MacieV2.Types.ManagedDataIdentifierSelector
+import Amazonka.MacieV2.Types.ManagedDataIdentifierSummary
+import Amazonka.MacieV2.Types.MatchingBucket
+import Amazonka.MacieV2.Types.MatchingResource
+import Amazonka.MacieV2.Types.Member
+import Amazonka.MacieV2.Types.MonthlySchedule
+import Amazonka.MacieV2.Types.ObjectCountByEncryptionType
+import Amazonka.MacieV2.Types.ObjectLevelStatistics
+import Amazonka.MacieV2.Types.Occurrences
+import Amazonka.MacieV2.Types.OrderBy
+import Amazonka.MacieV2.Types.OriginType
+import Amazonka.MacieV2.Types.Page
+import Amazonka.MacieV2.Types.PolicyDetails
+import Amazonka.MacieV2.Types.Range
+import Amazonka.MacieV2.Types.Record
+import Amazonka.MacieV2.Types.RelationshipStatus
+import Amazonka.MacieV2.Types.ReplicationDetails
+import Amazonka.MacieV2.Types.ResourceProfileArtifact
+import Amazonka.MacieV2.Types.ResourceStatistics
+import Amazonka.MacieV2.Types.ResourcesAffected
+import Amazonka.MacieV2.Types.RevealConfiguration
+import Amazonka.MacieV2.Types.RevealRequestStatus
+import Amazonka.MacieV2.Types.RevealStatus
+import Amazonka.MacieV2.Types.S3Bucket
+import Amazonka.MacieV2.Types.S3BucketCriteriaForJob
+import Amazonka.MacieV2.Types.S3BucketDefinitionForJob
+import Amazonka.MacieV2.Types.S3BucketOwner
+import Amazonka.MacieV2.Types.S3ClassificationScope
+import Amazonka.MacieV2.Types.S3ClassificationScopeExclusion
+import Amazonka.MacieV2.Types.S3ClassificationScopeExclusionUpdate
+import Amazonka.MacieV2.Types.S3ClassificationScopeUpdate
+import Amazonka.MacieV2.Types.S3Destination
+import Amazonka.MacieV2.Types.S3JobDefinition
+import Amazonka.MacieV2.Types.S3Object
+import Amazonka.MacieV2.Types.S3WordsList
+import Amazonka.MacieV2.Types.ScopeFilterKey
+import Amazonka.MacieV2.Types.Scoping
+import Amazonka.MacieV2.Types.SearchResourcesBucketCriteria
+import Amazonka.MacieV2.Types.SearchResourcesComparator
+import Amazonka.MacieV2.Types.SearchResourcesCriteria
+import Amazonka.MacieV2.Types.SearchResourcesCriteriaBlock
+import Amazonka.MacieV2.Types.SearchResourcesSimpleCriterion
+import Amazonka.MacieV2.Types.SearchResourcesSimpleCriterionKey
+import Amazonka.MacieV2.Types.SearchResourcesSortAttributeName
+import Amazonka.MacieV2.Types.SearchResourcesSortCriteria
+import Amazonka.MacieV2.Types.SearchResourcesTagCriterion
+import Amazonka.MacieV2.Types.SearchResourcesTagCriterionPair
+import Amazonka.MacieV2.Types.SecurityHubConfiguration
+import Amazonka.MacieV2.Types.SensitiveDataItem
+import Amazonka.MacieV2.Types.SensitiveDataItemCategory
+import Amazonka.MacieV2.Types.SensitivityAggregations
+import Amazonka.MacieV2.Types.SensitivityInspectionTemplateExcludes
+import Amazonka.MacieV2.Types.SensitivityInspectionTemplateIncludes
+import Amazonka.MacieV2.Types.SensitivityInspectionTemplatesEntry
+import Amazonka.MacieV2.Types.ServerSideEncryption
+import Amazonka.MacieV2.Types.ServiceLimit
+import Amazonka.MacieV2.Types.SessionContext
+import Amazonka.MacieV2.Types.SessionContextAttributes
+import Amazonka.MacieV2.Types.SessionIssuer
+import Amazonka.MacieV2.Types.Severity
+import Amazonka.MacieV2.Types.SeverityDescription
+import Amazonka.MacieV2.Types.SeverityLevel
+import Amazonka.MacieV2.Types.SharedAccess
+import Amazonka.MacieV2.Types.SimpleCriterionForJob
+import Amazonka.MacieV2.Types.SimpleCriterionKeyForJob
+import Amazonka.MacieV2.Types.SimpleScopeTerm
+import Amazonka.MacieV2.Types.SortCriteria
+import Amazonka.MacieV2.Types.Statistics
+import Amazonka.MacieV2.Types.StorageClass
+import Amazonka.MacieV2.Types.SuppressDataIdentifier
+import Amazonka.MacieV2.Types.TagCriterionForJob
+import Amazonka.MacieV2.Types.TagCriterionPairForJob
+import Amazonka.MacieV2.Types.TagScopeTerm
+import Amazonka.MacieV2.Types.TagTarget
+import Amazonka.MacieV2.Types.TagValuePair
+import Amazonka.MacieV2.Types.TimeRange
+import Amazonka.MacieV2.Types.Type
+import Amazonka.MacieV2.Types.UnavailabilityReasonCode
+import Amazonka.MacieV2.Types.Unit
+import Amazonka.MacieV2.Types.UnprocessedAccount
+import Amazonka.MacieV2.Types.UsageByAccount
+import Amazonka.MacieV2.Types.UsageRecord
+import Amazonka.MacieV2.Types.UsageStatisticsFilter
+import Amazonka.MacieV2.Types.UsageStatisticsFilterComparator
+import Amazonka.MacieV2.Types.UsageStatisticsFilterKey
+import Amazonka.MacieV2.Types.UsageStatisticsSortBy
+import Amazonka.MacieV2.Types.UsageStatisticsSortKey
+import Amazonka.MacieV2.Types.UsageTotal
+import Amazonka.MacieV2.Types.UsageType
+import Amazonka.MacieV2.Types.UserIdentity
+import Amazonka.MacieV2.Types.UserIdentityRoot
+import Amazonka.MacieV2.Types.UserIdentityType
+import Amazonka.MacieV2.Types.UserPausedDetails
+import Amazonka.MacieV2.Types.WeeklySchedule
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2020-01-01@ of the Amazon Macie 2 SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "MacieV2",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "macie2",
+      Core.signingName = "macie2",
+      Core.version = "2020-01-01",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "MacieV2",
+      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
+
+-- | Provides information about an error that occurred due to insufficient
+-- access to a specified resource.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | Provides information about an error that occurred due to a versioning
+-- conflict for a specified resource.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | Provides information about an error that occurred due to an unknown
+-- internal server error, exception, or failure.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | Provides information about an error that occurred because a specified
+-- resource wasn\'t found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | Provides information about an error that occurred due to one or more
+-- service quotas for an account.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | Provides information about an error that occurred because too many
+-- requests were sent during a certain amount of time.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | Provides information about an error that occurred due to an
+-- unprocessable entity.
+_UnprocessableEntityException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnprocessableEntityException =
+  Core._MatchServiceError
+    defaultService
+    "UnprocessableEntityException"
+    Prelude.. Core.hasStatus 422
+
+-- | Provides information about an error that occurred due to a syntax error
+-- in a request.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/MacieV2/Types/AccessControlList.hs b/gen/Amazonka/MacieV2/Types/AccessControlList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/AccessControlList.hs
@@ -0,0 +1,92 @@
+{-# 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.MacieV2.Types.AccessControlList
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.AccessControlList 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 information about the permissions settings of the bucket-level
+-- access control list (ACL) for an S3 bucket.
+--
+-- /See:/ 'newAccessControlList' smart constructor.
+data AccessControlList = AccessControlList'
+  { -- | Specifies whether the ACL grants the general public with read access
+    -- permissions for the bucket.
+    allowsPublicReadAccess :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether the ACL grants the general public with write access
+    -- permissions for the bucket.
+    allowsPublicWriteAccess :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccessControlList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowsPublicReadAccess', 'accessControlList_allowsPublicReadAccess' - Specifies whether the ACL grants the general public with read access
+-- permissions for the bucket.
+--
+-- 'allowsPublicWriteAccess', 'accessControlList_allowsPublicWriteAccess' - Specifies whether the ACL grants the general public with write access
+-- permissions for the bucket.
+newAccessControlList ::
+  AccessControlList
+newAccessControlList =
+  AccessControlList'
+    { allowsPublicReadAccess =
+        Prelude.Nothing,
+      allowsPublicWriteAccess = Prelude.Nothing
+    }
+
+-- | Specifies whether the ACL grants the general public with read access
+-- permissions for the bucket.
+accessControlList_allowsPublicReadAccess :: Lens.Lens' AccessControlList (Prelude.Maybe Prelude.Bool)
+accessControlList_allowsPublicReadAccess = Lens.lens (\AccessControlList' {allowsPublicReadAccess} -> allowsPublicReadAccess) (\s@AccessControlList' {} a -> s {allowsPublicReadAccess = a} :: AccessControlList)
+
+-- | Specifies whether the ACL grants the general public with write access
+-- permissions for the bucket.
+accessControlList_allowsPublicWriteAccess :: Lens.Lens' AccessControlList (Prelude.Maybe Prelude.Bool)
+accessControlList_allowsPublicWriteAccess = Lens.lens (\AccessControlList' {allowsPublicWriteAccess} -> allowsPublicWriteAccess) (\s@AccessControlList' {} a -> s {allowsPublicWriteAccess = a} :: AccessControlList)
+
+instance Data.FromJSON AccessControlList where
+  parseJSON =
+    Data.withObject
+      "AccessControlList"
+      ( \x ->
+          AccessControlList'
+            Prelude.<$> (x Data..:? "allowsPublicReadAccess")
+            Prelude.<*> (x Data..:? "allowsPublicWriteAccess")
+      )
+
+instance Prelude.Hashable AccessControlList where
+  hashWithSalt _salt AccessControlList' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowsPublicReadAccess
+      `Prelude.hashWithSalt` allowsPublicWriteAccess
+
+instance Prelude.NFData AccessControlList where
+  rnf AccessControlList' {..} =
+    Prelude.rnf allowsPublicReadAccess
+      `Prelude.seq` Prelude.rnf allowsPublicWriteAccess
diff --git a/gen/Amazonka/MacieV2/Types/AccountDetail.hs b/gen/Amazonka/MacieV2/Types/AccountDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/AccountDetail.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.AccountDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.AccountDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the details of an account to associate with an Amazon Macie
+-- administrator account.
+--
+-- /See:/ 'newAccountDetail' smart constructor.
+data AccountDetail = AccountDetail'
+  { -- | The email address for the account.
+    email :: Prelude.Text,
+    -- | The Amazon Web Services account ID for the account.
+    accountId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccountDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'email', 'accountDetail_email' - The email address for the account.
+--
+-- 'accountId', 'accountDetail_accountId' - The Amazon Web Services account ID for the account.
+newAccountDetail ::
+  -- | 'email'
+  Prelude.Text ->
+  -- | 'accountId'
+  Prelude.Text ->
+  AccountDetail
+newAccountDetail pEmail_ pAccountId_ =
+  AccountDetail'
+    { email = pEmail_,
+      accountId = pAccountId_
+    }
+
+-- | The email address for the account.
+accountDetail_email :: Lens.Lens' AccountDetail Prelude.Text
+accountDetail_email = Lens.lens (\AccountDetail' {email} -> email) (\s@AccountDetail' {} a -> s {email = a} :: AccountDetail)
+
+-- | The Amazon Web Services account ID for the account.
+accountDetail_accountId :: Lens.Lens' AccountDetail Prelude.Text
+accountDetail_accountId = Lens.lens (\AccountDetail' {accountId} -> accountId) (\s@AccountDetail' {} a -> s {accountId = a} :: AccountDetail)
+
+instance Prelude.Hashable AccountDetail where
+  hashWithSalt _salt AccountDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` email
+      `Prelude.hashWithSalt` accountId
+
+instance Prelude.NFData AccountDetail where
+  rnf AccountDetail' {..} =
+    Prelude.rnf email
+      `Prelude.seq` Prelude.rnf accountId
+
+instance Data.ToJSON AccountDetail where
+  toJSON AccountDetail' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("email" Data..= email),
+            Prelude.Just ("accountId" Data..= accountId)
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/AccountLevelPermissions.hs b/gen/Amazonka/MacieV2/Types/AccountLevelPermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/AccountLevelPermissions.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.AccountLevelPermissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.AccountLevelPermissions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.BlockPublicAccess
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the account-level permissions settings that
+-- apply to an S3 bucket.
+--
+-- /See:/ 'newAccountLevelPermissions' smart constructor.
+data AccountLevelPermissions = AccountLevelPermissions'
+  { -- | The block public access settings for the Amazon Web Services account
+    -- that owns the bucket.
+    blockPublicAccess :: Prelude.Maybe BlockPublicAccess
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccountLevelPermissions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blockPublicAccess', 'accountLevelPermissions_blockPublicAccess' - The block public access settings for the Amazon Web Services account
+-- that owns the bucket.
+newAccountLevelPermissions ::
+  AccountLevelPermissions
+newAccountLevelPermissions =
+  AccountLevelPermissions'
+    { blockPublicAccess =
+        Prelude.Nothing
+    }
+
+-- | The block public access settings for the Amazon Web Services account
+-- that owns the bucket.
+accountLevelPermissions_blockPublicAccess :: Lens.Lens' AccountLevelPermissions (Prelude.Maybe BlockPublicAccess)
+accountLevelPermissions_blockPublicAccess = Lens.lens (\AccountLevelPermissions' {blockPublicAccess} -> blockPublicAccess) (\s@AccountLevelPermissions' {} a -> s {blockPublicAccess = a} :: AccountLevelPermissions)
+
+instance Data.FromJSON AccountLevelPermissions where
+  parseJSON =
+    Data.withObject
+      "AccountLevelPermissions"
+      ( \x ->
+          AccountLevelPermissions'
+            Prelude.<$> (x Data..:? "blockPublicAccess")
+      )
+
+instance Prelude.Hashable AccountLevelPermissions where
+  hashWithSalt _salt AccountLevelPermissions' {..} =
+    _salt `Prelude.hashWithSalt` blockPublicAccess
+
+instance Prelude.NFData AccountLevelPermissions where
+  rnf AccountLevelPermissions' {..} =
+    Prelude.rnf blockPublicAccess
diff --git a/gen/Amazonka/MacieV2/Types/AdminAccount.hs b/gen/Amazonka/MacieV2/Types/AdminAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/AdminAccount.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.AdminAccount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.AdminAccount where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.AdminStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the delegated Amazon Macie administrator
+-- account for an organization in Organizations.
+--
+-- /See:/ 'newAdminAccount' smart constructor.
+data AdminAccount = AdminAccount'
+  { -- | The Amazon Web Services account ID for the account.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the account as the delegated Amazon Macie
+    -- administrator account for the organization.
+    status :: Prelude.Maybe AdminStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AdminAccount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'adminAccount_accountId' - The Amazon Web Services account ID for the account.
+--
+-- 'status', 'adminAccount_status' - The current status of the account as the delegated Amazon Macie
+-- administrator account for the organization.
+newAdminAccount ::
+  AdminAccount
+newAdminAccount =
+  AdminAccount'
+    { accountId = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Web Services account ID for the account.
+adminAccount_accountId :: Lens.Lens' AdminAccount (Prelude.Maybe Prelude.Text)
+adminAccount_accountId = Lens.lens (\AdminAccount' {accountId} -> accountId) (\s@AdminAccount' {} a -> s {accountId = a} :: AdminAccount)
+
+-- | The current status of the account as the delegated Amazon Macie
+-- administrator account for the organization.
+adminAccount_status :: Lens.Lens' AdminAccount (Prelude.Maybe AdminStatus)
+adminAccount_status = Lens.lens (\AdminAccount' {status} -> status) (\s@AdminAccount' {} a -> s {status = a} :: AdminAccount)
+
+instance Data.FromJSON AdminAccount where
+  parseJSON =
+    Data.withObject
+      "AdminAccount"
+      ( \x ->
+          AdminAccount'
+            Prelude.<$> (x Data..:? "accountId")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable AdminAccount where
+  hashWithSalt _salt AdminAccount' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData AdminAccount where
+  rnf AdminAccount' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/MacieV2/Types/AdminStatus.hs b/gen/Amazonka/MacieV2/Types/AdminStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/AdminStatus.hs
@@ -0,0 +1,74 @@
+{-# 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.MacieV2.Types.AdminStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.AdminStatus
+  ( AdminStatus
+      ( ..,
+        AdminStatus_DISABLING_IN_PROGRESS,
+        AdminStatus_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The current status of an account as the delegated Amazon Macie
+-- administrator account for an organization in Organizations. Possible
+-- values are:
+newtype AdminStatus = AdminStatus'
+  { fromAdminStatus ::
+      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 AdminStatus_DISABLING_IN_PROGRESS :: AdminStatus
+pattern AdminStatus_DISABLING_IN_PROGRESS = AdminStatus' "DISABLING_IN_PROGRESS"
+
+pattern AdminStatus_ENABLED :: AdminStatus
+pattern AdminStatus_ENABLED = AdminStatus' "ENABLED"
+
+{-# COMPLETE
+  AdminStatus_DISABLING_IN_PROGRESS,
+  AdminStatus_ENABLED,
+  AdminStatus'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/AllowListCriteria.hs b/gen/Amazonka/MacieV2/Types/AllowListCriteria.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/AllowListCriteria.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.AllowListCriteria
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.AllowListCriteria where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.S3WordsList
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the criteria for an allow list. The criteria must specify a
+-- regular expression (regex) or an S3 object (s3WordsList). It can\'t
+-- specify both.
+--
+-- /See:/ 'newAllowListCriteria' smart constructor.
+data AllowListCriteria = AllowListCriteria'
+  { -- | The regular expression (/regex/) that defines the text pattern to
+    -- ignore. The expression can contain as many as 512 characters.
+    regex :: Prelude.Maybe Prelude.Text,
+    -- | The location and name of the S3 object that lists specific text to
+    -- ignore.
+    s3WordsList :: Prelude.Maybe S3WordsList
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AllowListCriteria' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'regex', 'allowListCriteria_regex' - The regular expression (/regex/) that defines the text pattern to
+-- ignore. The expression can contain as many as 512 characters.
+--
+-- 's3WordsList', 'allowListCriteria_s3WordsList' - The location and name of the S3 object that lists specific text to
+-- ignore.
+newAllowListCriteria ::
+  AllowListCriteria
+newAllowListCriteria =
+  AllowListCriteria'
+    { regex = Prelude.Nothing,
+      s3WordsList = Prelude.Nothing
+    }
+
+-- | The regular expression (/regex/) that defines the text pattern to
+-- ignore. The expression can contain as many as 512 characters.
+allowListCriteria_regex :: Lens.Lens' AllowListCriteria (Prelude.Maybe Prelude.Text)
+allowListCriteria_regex = Lens.lens (\AllowListCriteria' {regex} -> regex) (\s@AllowListCriteria' {} a -> s {regex = a} :: AllowListCriteria)
+
+-- | The location and name of the S3 object that lists specific text to
+-- ignore.
+allowListCriteria_s3WordsList :: Lens.Lens' AllowListCriteria (Prelude.Maybe S3WordsList)
+allowListCriteria_s3WordsList = Lens.lens (\AllowListCriteria' {s3WordsList} -> s3WordsList) (\s@AllowListCriteria' {} a -> s {s3WordsList = a} :: AllowListCriteria)
+
+instance Data.FromJSON AllowListCriteria where
+  parseJSON =
+    Data.withObject
+      "AllowListCriteria"
+      ( \x ->
+          AllowListCriteria'
+            Prelude.<$> (x Data..:? "regex")
+            Prelude.<*> (x Data..:? "s3WordsList")
+      )
+
+instance Prelude.Hashable AllowListCriteria where
+  hashWithSalt _salt AllowListCriteria' {..} =
+    _salt
+      `Prelude.hashWithSalt` regex
+      `Prelude.hashWithSalt` s3WordsList
+
+instance Prelude.NFData AllowListCriteria where
+  rnf AllowListCriteria' {..} =
+    Prelude.rnf regex
+      `Prelude.seq` Prelude.rnf s3WordsList
+
+instance Data.ToJSON AllowListCriteria where
+  toJSON AllowListCriteria' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("regex" Data..=) Prelude.<$> regex,
+            ("s3WordsList" Data..=) Prelude.<$> s3WordsList
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/AllowListStatus.hs b/gen/Amazonka/MacieV2/Types/AllowListStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/AllowListStatus.hs
@@ -0,0 +1,229 @@
+{-# 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.MacieV2.Types.AllowListStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.AllowListStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.AllowListStatusCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the current status of an allow list, which
+-- indicates whether Amazon Macie can access and use the list\'s criteria.
+--
+-- /See:/ 'newAllowListStatus' smart constructor.
+data AllowListStatus = AllowListStatus'
+  { -- | A brief description of the status of the allow list. Amazon Macie uses
+    -- this value to provide additional information about an error that
+    -- occurred when Macie tried to access and use the list\'s criteria.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the allow list. If the list\'s criteria specify a
+    -- regular expression (regex), this value is typically OK. Amazon Macie can
+    -- compile the expression.
+    --
+    -- If the list\'s criteria specify an S3 object, possible values are:
+    --
+    -- -   OK - Macie can retrieve and parse the contents of the object.
+    --
+    -- -   S3_OBJECT_ACCESS_DENIED - Macie isn\'t allowed to access the object
+    --     or the object is encrypted with a customer managed KMS key that
+    --     Macie isn\'t allowed to use. Check the bucket policy and other
+    --     permissions settings for the bucket and the object. If the object is
+    --     encrypted, also ensure that it\'s encrypted with a key that Macie is
+    --     allowed to use.
+    --
+    -- -   S3_OBJECT_EMPTY - Macie can retrieve the object but the object
+    --     doesn\'t contain any content. Ensure that the object contains the
+    --     correct entries. Also ensure that the list\'s criteria specify the
+    --     correct bucket and object names.
+    --
+    -- -   S3_OBJECT_NOT_FOUND - The object doesn\'t exist in Amazon S3. Ensure
+    --     that the list\'s criteria specify the correct bucket and object
+    --     names.
+    --
+    -- -   S3_OBJECT_OVERSIZE - Macie can retrieve the object. However, the
+    --     object contains too many entries or its storage size exceeds the
+    --     quota for an allow list. Try breaking the list into multiple files
+    --     and ensure that each file doesn\'t exceed any quotas. Then configure
+    --     list settings in Macie for each file.
+    --
+    -- -   S3_THROTTLED - Amazon S3 throttled the request to retrieve the
+    --     object. Wait a few minutes and then try again.
+    --
+    -- -   S3_USER_ACCESS_DENIED - Amazon S3 denied the request to retrieve the
+    --     object. If the specified object exists, you\'re not allowed to
+    --     access it or it\'s encrypted with an KMS key that you\'re not
+    --     allowed to use. Work with your Amazon Web Services administrator to
+    --     ensure that the list\'s criteria specify the correct bucket and
+    --     object names, and you have read access to the bucket and the object.
+    --     If the object is encrypted, also ensure that it\'s encrypted with a
+    --     key that you\'re allowed to use.
+    --
+    -- -   UNKNOWN_ERROR - A transient or internal error occurred when Macie
+    --     attempted to retrieve or parse the object. Wait a few minutes and
+    --     then try again. A list can also have this status if it\'s encrypted
+    --     with a key that Amazon S3 and Macie can\'t access or use.
+    code :: AllowListStatusCode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AllowListStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'allowListStatus_description' - A brief description of the status of the allow list. Amazon Macie uses
+-- this value to provide additional information about an error that
+-- occurred when Macie tried to access and use the list\'s criteria.
+--
+-- 'code', 'allowListStatus_code' - The current status of the allow list. If the list\'s criteria specify a
+-- regular expression (regex), this value is typically OK. Amazon Macie can
+-- compile the expression.
+--
+-- If the list\'s criteria specify an S3 object, possible values are:
+--
+-- -   OK - Macie can retrieve and parse the contents of the object.
+--
+-- -   S3_OBJECT_ACCESS_DENIED - Macie isn\'t allowed to access the object
+--     or the object is encrypted with a customer managed KMS key that
+--     Macie isn\'t allowed to use. Check the bucket policy and other
+--     permissions settings for the bucket and the object. If the object is
+--     encrypted, also ensure that it\'s encrypted with a key that Macie is
+--     allowed to use.
+--
+-- -   S3_OBJECT_EMPTY - Macie can retrieve the object but the object
+--     doesn\'t contain any content. Ensure that the object contains the
+--     correct entries. Also ensure that the list\'s criteria specify the
+--     correct bucket and object names.
+--
+-- -   S3_OBJECT_NOT_FOUND - The object doesn\'t exist in Amazon S3. Ensure
+--     that the list\'s criteria specify the correct bucket and object
+--     names.
+--
+-- -   S3_OBJECT_OVERSIZE - Macie can retrieve the object. However, the
+--     object contains too many entries or its storage size exceeds the
+--     quota for an allow list. Try breaking the list into multiple files
+--     and ensure that each file doesn\'t exceed any quotas. Then configure
+--     list settings in Macie for each file.
+--
+-- -   S3_THROTTLED - Amazon S3 throttled the request to retrieve the
+--     object. Wait a few minutes and then try again.
+--
+-- -   S3_USER_ACCESS_DENIED - Amazon S3 denied the request to retrieve the
+--     object. If the specified object exists, you\'re not allowed to
+--     access it or it\'s encrypted with an KMS key that you\'re not
+--     allowed to use. Work with your Amazon Web Services administrator to
+--     ensure that the list\'s criteria specify the correct bucket and
+--     object names, and you have read access to the bucket and the object.
+--     If the object is encrypted, also ensure that it\'s encrypted with a
+--     key that you\'re allowed to use.
+--
+-- -   UNKNOWN_ERROR - A transient or internal error occurred when Macie
+--     attempted to retrieve or parse the object. Wait a few minutes and
+--     then try again. A list can also have this status if it\'s encrypted
+--     with a key that Amazon S3 and Macie can\'t access or use.
+newAllowListStatus ::
+  -- | 'code'
+  AllowListStatusCode ->
+  AllowListStatus
+newAllowListStatus pCode_ =
+  AllowListStatus'
+    { description = Prelude.Nothing,
+      code = pCode_
+    }
+
+-- | A brief description of the status of the allow list. Amazon Macie uses
+-- this value to provide additional information about an error that
+-- occurred when Macie tried to access and use the list\'s criteria.
+allowListStatus_description :: Lens.Lens' AllowListStatus (Prelude.Maybe Prelude.Text)
+allowListStatus_description = Lens.lens (\AllowListStatus' {description} -> description) (\s@AllowListStatus' {} a -> s {description = a} :: AllowListStatus)
+
+-- | The current status of the allow list. If the list\'s criteria specify a
+-- regular expression (regex), this value is typically OK. Amazon Macie can
+-- compile the expression.
+--
+-- If the list\'s criteria specify an S3 object, possible values are:
+--
+-- -   OK - Macie can retrieve and parse the contents of the object.
+--
+-- -   S3_OBJECT_ACCESS_DENIED - Macie isn\'t allowed to access the object
+--     or the object is encrypted with a customer managed KMS key that
+--     Macie isn\'t allowed to use. Check the bucket policy and other
+--     permissions settings for the bucket and the object. If the object is
+--     encrypted, also ensure that it\'s encrypted with a key that Macie is
+--     allowed to use.
+--
+-- -   S3_OBJECT_EMPTY - Macie can retrieve the object but the object
+--     doesn\'t contain any content. Ensure that the object contains the
+--     correct entries. Also ensure that the list\'s criteria specify the
+--     correct bucket and object names.
+--
+-- -   S3_OBJECT_NOT_FOUND - The object doesn\'t exist in Amazon S3. Ensure
+--     that the list\'s criteria specify the correct bucket and object
+--     names.
+--
+-- -   S3_OBJECT_OVERSIZE - Macie can retrieve the object. However, the
+--     object contains too many entries or its storage size exceeds the
+--     quota for an allow list. Try breaking the list into multiple files
+--     and ensure that each file doesn\'t exceed any quotas. Then configure
+--     list settings in Macie for each file.
+--
+-- -   S3_THROTTLED - Amazon S3 throttled the request to retrieve the
+--     object. Wait a few minutes and then try again.
+--
+-- -   S3_USER_ACCESS_DENIED - Amazon S3 denied the request to retrieve the
+--     object. If the specified object exists, you\'re not allowed to
+--     access it or it\'s encrypted with an KMS key that you\'re not
+--     allowed to use. Work with your Amazon Web Services administrator to
+--     ensure that the list\'s criteria specify the correct bucket and
+--     object names, and you have read access to the bucket and the object.
+--     If the object is encrypted, also ensure that it\'s encrypted with a
+--     key that you\'re allowed to use.
+--
+-- -   UNKNOWN_ERROR - A transient or internal error occurred when Macie
+--     attempted to retrieve or parse the object. Wait a few minutes and
+--     then try again. A list can also have this status if it\'s encrypted
+--     with a key that Amazon S3 and Macie can\'t access or use.
+allowListStatus_code :: Lens.Lens' AllowListStatus AllowListStatusCode
+allowListStatus_code = Lens.lens (\AllowListStatus' {code} -> code) (\s@AllowListStatus' {} a -> s {code = a} :: AllowListStatus)
+
+instance Data.FromJSON AllowListStatus where
+  parseJSON =
+    Data.withObject
+      "AllowListStatus"
+      ( \x ->
+          AllowListStatus'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..: "code")
+      )
+
+instance Prelude.Hashable AllowListStatus where
+  hashWithSalt _salt AllowListStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` code
+
+instance Prelude.NFData AllowListStatus where
+  rnf AllowListStatus' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf code
diff --git a/gen/Amazonka/MacieV2/Types/AllowListStatusCode.hs b/gen/Amazonka/MacieV2/Types/AllowListStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/AllowListStatusCode.hs
@@ -0,0 +1,103 @@
+{-# 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.MacieV2.Types.AllowListStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.AllowListStatusCode
+  ( AllowListStatusCode
+      ( ..,
+        AllowListStatusCode_OK,
+        AllowListStatusCode_S3_OBJECT_ACCESS_DENIED,
+        AllowListStatusCode_S3_OBJECT_EMPTY,
+        AllowListStatusCode_S3_OBJECT_NOT_FOUND,
+        AllowListStatusCode_S3_OBJECT_OVERSIZE,
+        AllowListStatusCode_S3_THROTTLED,
+        AllowListStatusCode_S3_USER_ACCESS_DENIED,
+        AllowListStatusCode_UNKNOWN_ERROR
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Indicates the current status of an allow list. Depending on the type of
+-- criteria that the list specifies, possible values are:
+newtype AllowListStatusCode = AllowListStatusCode'
+  { fromAllowListStatusCode ::
+      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 AllowListStatusCode_OK :: AllowListStatusCode
+pattern AllowListStatusCode_OK = AllowListStatusCode' "OK"
+
+pattern AllowListStatusCode_S3_OBJECT_ACCESS_DENIED :: AllowListStatusCode
+pattern AllowListStatusCode_S3_OBJECT_ACCESS_DENIED = AllowListStatusCode' "S3_OBJECT_ACCESS_DENIED"
+
+pattern AllowListStatusCode_S3_OBJECT_EMPTY :: AllowListStatusCode
+pattern AllowListStatusCode_S3_OBJECT_EMPTY = AllowListStatusCode' "S3_OBJECT_EMPTY"
+
+pattern AllowListStatusCode_S3_OBJECT_NOT_FOUND :: AllowListStatusCode
+pattern AllowListStatusCode_S3_OBJECT_NOT_FOUND = AllowListStatusCode' "S3_OBJECT_NOT_FOUND"
+
+pattern AllowListStatusCode_S3_OBJECT_OVERSIZE :: AllowListStatusCode
+pattern AllowListStatusCode_S3_OBJECT_OVERSIZE = AllowListStatusCode' "S3_OBJECT_OVERSIZE"
+
+pattern AllowListStatusCode_S3_THROTTLED :: AllowListStatusCode
+pattern AllowListStatusCode_S3_THROTTLED = AllowListStatusCode' "S3_THROTTLED"
+
+pattern AllowListStatusCode_S3_USER_ACCESS_DENIED :: AllowListStatusCode
+pattern AllowListStatusCode_S3_USER_ACCESS_DENIED = AllowListStatusCode' "S3_USER_ACCESS_DENIED"
+
+pattern AllowListStatusCode_UNKNOWN_ERROR :: AllowListStatusCode
+pattern AllowListStatusCode_UNKNOWN_ERROR = AllowListStatusCode' "UNKNOWN_ERROR"
+
+{-# COMPLETE
+  AllowListStatusCode_OK,
+  AllowListStatusCode_S3_OBJECT_ACCESS_DENIED,
+  AllowListStatusCode_S3_OBJECT_EMPTY,
+  AllowListStatusCode_S3_OBJECT_NOT_FOUND,
+  AllowListStatusCode_S3_OBJECT_OVERSIZE,
+  AllowListStatusCode_S3_THROTTLED,
+  AllowListStatusCode_S3_USER_ACCESS_DENIED,
+  AllowListStatusCode_UNKNOWN_ERROR,
+  AllowListStatusCode'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/AllowListSummary.hs b/gen/Amazonka/MacieV2/Types/AllowListSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/AllowListSummary.hs
@@ -0,0 +1,138 @@
+{-# 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.MacieV2.Types.AllowListSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.AllowListSummary 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 a subset of information about an allow list.
+--
+-- /See:/ 'newAllowListSummary' smart constructor.
+data AllowListSummary = AllowListSummary'
+  { -- | The Amazon Resource Name (ARN) of the allow list.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in UTC and extended ISO 8601 format, when the allow
+    -- list was created in Amazon Macie.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The custom description of the allow list.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the allow list.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The custom name of the allow list.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in UTC and extended ISO 8601 format, when the allow
+    -- list\'s settings were most recently changed in Amazon Macie.
+    updatedAt :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AllowListSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'allowListSummary_arn' - The Amazon Resource Name (ARN) of the allow list.
+--
+-- 'createdAt', 'allowListSummary_createdAt' - The date and time, in UTC and extended ISO 8601 format, when the allow
+-- list was created in Amazon Macie.
+--
+-- 'description', 'allowListSummary_description' - The custom description of the allow list.
+--
+-- 'id', 'allowListSummary_id' - The unique identifier for the allow list.
+--
+-- 'name', 'allowListSummary_name' - The custom name of the allow list.
+--
+-- 'updatedAt', 'allowListSummary_updatedAt' - The date and time, in UTC and extended ISO 8601 format, when the allow
+-- list\'s settings were most recently changed in Amazon Macie.
+newAllowListSummary ::
+  AllowListSummary
+newAllowListSummary =
+  AllowListSummary'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      updatedAt = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the allow list.
+allowListSummary_arn :: Lens.Lens' AllowListSummary (Prelude.Maybe Prelude.Text)
+allowListSummary_arn = Lens.lens (\AllowListSummary' {arn} -> arn) (\s@AllowListSummary' {} a -> s {arn = a} :: AllowListSummary)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the allow
+-- list was created in Amazon Macie.
+allowListSummary_createdAt :: Lens.Lens' AllowListSummary (Prelude.Maybe Prelude.UTCTime)
+allowListSummary_createdAt = Lens.lens (\AllowListSummary' {createdAt} -> createdAt) (\s@AllowListSummary' {} a -> s {createdAt = a} :: AllowListSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The custom description of the allow list.
+allowListSummary_description :: Lens.Lens' AllowListSummary (Prelude.Maybe Prelude.Text)
+allowListSummary_description = Lens.lens (\AllowListSummary' {description} -> description) (\s@AllowListSummary' {} a -> s {description = a} :: AllowListSummary)
+
+-- | The unique identifier for the allow list.
+allowListSummary_id :: Lens.Lens' AllowListSummary (Prelude.Maybe Prelude.Text)
+allowListSummary_id = Lens.lens (\AllowListSummary' {id} -> id) (\s@AllowListSummary' {} a -> s {id = a} :: AllowListSummary)
+
+-- | The custom name of the allow list.
+allowListSummary_name :: Lens.Lens' AllowListSummary (Prelude.Maybe Prelude.Text)
+allowListSummary_name = Lens.lens (\AllowListSummary' {name} -> name) (\s@AllowListSummary' {} a -> s {name = a} :: AllowListSummary)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the allow
+-- list\'s settings were most recently changed in Amazon Macie.
+allowListSummary_updatedAt :: Lens.Lens' AllowListSummary (Prelude.Maybe Prelude.UTCTime)
+allowListSummary_updatedAt = Lens.lens (\AllowListSummary' {updatedAt} -> updatedAt) (\s@AllowListSummary' {} a -> s {updatedAt = a} :: AllowListSummary) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON AllowListSummary where
+  parseJSON =
+    Data.withObject
+      "AllowListSummary"
+      ( \x ->
+          AllowListSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "updatedAt")
+      )
+
+instance Prelude.Hashable AllowListSummary where
+  hashWithSalt _salt AllowListSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData AllowListSummary where
+  rnf AllowListSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/MacieV2/Types/AllowsUnencryptedObjectUploads.hs b/gen/Amazonka/MacieV2/Types/AllowsUnencryptedObjectUploads.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/AllowsUnencryptedObjectUploads.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.MacieV2.Types.AllowsUnencryptedObjectUploads
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.AllowsUnencryptedObjectUploads
+  ( AllowsUnencryptedObjectUploads
+      ( ..,
+        AllowsUnencryptedObjectUploads_FALSE,
+        AllowsUnencryptedObjectUploads_TRUE,
+        AllowsUnencryptedObjectUploads_UNKNOWN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AllowsUnencryptedObjectUploads = AllowsUnencryptedObjectUploads'
+  { fromAllowsUnencryptedObjectUploads ::
+      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 AllowsUnencryptedObjectUploads_FALSE :: AllowsUnencryptedObjectUploads
+pattern AllowsUnencryptedObjectUploads_FALSE = AllowsUnencryptedObjectUploads' "FALSE"
+
+pattern AllowsUnencryptedObjectUploads_TRUE :: AllowsUnencryptedObjectUploads
+pattern AllowsUnencryptedObjectUploads_TRUE = AllowsUnencryptedObjectUploads' "TRUE"
+
+pattern AllowsUnencryptedObjectUploads_UNKNOWN :: AllowsUnencryptedObjectUploads
+pattern AllowsUnencryptedObjectUploads_UNKNOWN = AllowsUnencryptedObjectUploads' "UNKNOWN"
+
+{-# COMPLETE
+  AllowsUnencryptedObjectUploads_FALSE,
+  AllowsUnencryptedObjectUploads_TRUE,
+  AllowsUnencryptedObjectUploads_UNKNOWN,
+  AllowsUnencryptedObjectUploads'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/ApiCallDetails.hs b/gen/Amazonka/MacieV2/Types/ApiCallDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ApiCallDetails.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.MacieV2.Types.ApiCallDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ApiCallDetails 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 information about an API operation that an entity invoked for
+-- an affected resource.
+--
+-- /See:/ 'newApiCallDetails' smart constructor.
+data ApiCallDetails = ApiCallDetails'
+  { -- | The name of the operation that was invoked most recently and produced
+    -- the finding.
+    api :: Prelude.Maybe Prelude.Text,
+    -- | The URL of the Amazon Web Service that provides the operation, for
+    -- example: s3.amazonaws.com.
+    apiServiceName :: Prelude.Maybe Prelude.Text,
+    -- | The first date and time, in UTC and extended ISO 8601 format, when any
+    -- operation was invoked and produced the finding.
+    firstSeen :: Prelude.Maybe Data.ISO8601,
+    -- | The most recent date and time, in UTC and extended ISO 8601 format, when
+    -- the specified operation (api) was invoked and produced the finding.
+    lastSeen :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApiCallDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'api', 'apiCallDetails_api' - The name of the operation that was invoked most recently and produced
+-- the finding.
+--
+-- 'apiServiceName', 'apiCallDetails_apiServiceName' - The URL of the Amazon Web Service that provides the operation, for
+-- example: s3.amazonaws.com.
+--
+-- 'firstSeen', 'apiCallDetails_firstSeen' - The first date and time, in UTC and extended ISO 8601 format, when any
+-- operation was invoked and produced the finding.
+--
+-- 'lastSeen', 'apiCallDetails_lastSeen' - The most recent date and time, in UTC and extended ISO 8601 format, when
+-- the specified operation (api) was invoked and produced the finding.
+newApiCallDetails ::
+  ApiCallDetails
+newApiCallDetails =
+  ApiCallDetails'
+    { api = Prelude.Nothing,
+      apiServiceName = Prelude.Nothing,
+      firstSeen = Prelude.Nothing,
+      lastSeen = Prelude.Nothing
+    }
+
+-- | The name of the operation that was invoked most recently and produced
+-- the finding.
+apiCallDetails_api :: Lens.Lens' ApiCallDetails (Prelude.Maybe Prelude.Text)
+apiCallDetails_api = Lens.lens (\ApiCallDetails' {api} -> api) (\s@ApiCallDetails' {} a -> s {api = a} :: ApiCallDetails)
+
+-- | The URL of the Amazon Web Service that provides the operation, for
+-- example: s3.amazonaws.com.
+apiCallDetails_apiServiceName :: Lens.Lens' ApiCallDetails (Prelude.Maybe Prelude.Text)
+apiCallDetails_apiServiceName = Lens.lens (\ApiCallDetails' {apiServiceName} -> apiServiceName) (\s@ApiCallDetails' {} a -> s {apiServiceName = a} :: ApiCallDetails)
+
+-- | The first date and time, in UTC and extended ISO 8601 format, when any
+-- operation was invoked and produced the finding.
+apiCallDetails_firstSeen :: Lens.Lens' ApiCallDetails (Prelude.Maybe Prelude.UTCTime)
+apiCallDetails_firstSeen = Lens.lens (\ApiCallDetails' {firstSeen} -> firstSeen) (\s@ApiCallDetails' {} a -> s {firstSeen = a} :: ApiCallDetails) Prelude.. Lens.mapping Data._Time
+
+-- | The most recent date and time, in UTC and extended ISO 8601 format, when
+-- the specified operation (api) was invoked and produced the finding.
+apiCallDetails_lastSeen :: Lens.Lens' ApiCallDetails (Prelude.Maybe Prelude.UTCTime)
+apiCallDetails_lastSeen = Lens.lens (\ApiCallDetails' {lastSeen} -> lastSeen) (\s@ApiCallDetails' {} a -> s {lastSeen = a} :: ApiCallDetails) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON ApiCallDetails where
+  parseJSON =
+    Data.withObject
+      "ApiCallDetails"
+      ( \x ->
+          ApiCallDetails'
+            Prelude.<$> (x Data..:? "api")
+            Prelude.<*> (x Data..:? "apiServiceName")
+            Prelude.<*> (x Data..:? "firstSeen")
+            Prelude.<*> (x Data..:? "lastSeen")
+      )
+
+instance Prelude.Hashable ApiCallDetails where
+  hashWithSalt _salt ApiCallDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` api
+      `Prelude.hashWithSalt` apiServiceName
+      `Prelude.hashWithSalt` firstSeen
+      `Prelude.hashWithSalt` lastSeen
+
+instance Prelude.NFData ApiCallDetails where
+  rnf ApiCallDetails' {..} =
+    Prelude.rnf api
+      `Prelude.seq` Prelude.rnf apiServiceName
+      `Prelude.seq` Prelude.rnf firstSeen
+      `Prelude.seq` Prelude.rnf lastSeen
diff --git a/gen/Amazonka/MacieV2/Types/AssumedRole.hs b/gen/Amazonka/MacieV2/Types/AssumedRole.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/AssumedRole.hs
@@ -0,0 +1,136 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.AssumedRole
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.AssumedRole where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.SessionContext
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about an identity that performed an action on an
+-- affected resource by using temporary security credentials. The
+-- credentials were obtained using the AssumeRole operation of the Security
+-- Token Service (STS) API.
+--
+-- /See:/ 'newAssumedRole' smart constructor.
+data AssumedRole = AssumedRole'
+  { -- | The Amazon Web Services access key ID that identifies the credentials.
+    accessKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the Amazon Web Services account that owns the
+    -- entity that was used to get the credentials.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the entity that was used to get the
+    -- credentials.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the entity that was used to get the
+    -- credentials.
+    principalId :: Prelude.Maybe Prelude.Text,
+    -- | The details of the session that was created for the credentials,
+    -- including the entity that issued the session.
+    sessionContext :: Prelude.Maybe SessionContext
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssumedRole' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessKeyId', 'assumedRole_accessKeyId' - The Amazon Web Services access key ID that identifies the credentials.
+--
+-- 'accountId', 'assumedRole_accountId' - The unique identifier for the Amazon Web Services account that owns the
+-- entity that was used to get the credentials.
+--
+-- 'arn', 'assumedRole_arn' - The Amazon Resource Name (ARN) of the entity that was used to get the
+-- credentials.
+--
+-- 'principalId', 'assumedRole_principalId' - The unique identifier for the entity that was used to get the
+-- credentials.
+--
+-- 'sessionContext', 'assumedRole_sessionContext' - The details of the session that was created for the credentials,
+-- including the entity that issued the session.
+newAssumedRole ::
+  AssumedRole
+newAssumedRole =
+  AssumedRole'
+    { accessKeyId = Prelude.Nothing,
+      accountId = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      principalId = Prelude.Nothing,
+      sessionContext = Prelude.Nothing
+    }
+
+-- | The Amazon Web Services access key ID that identifies the credentials.
+assumedRole_accessKeyId :: Lens.Lens' AssumedRole (Prelude.Maybe Prelude.Text)
+assumedRole_accessKeyId = Lens.lens (\AssumedRole' {accessKeyId} -> accessKeyId) (\s@AssumedRole' {} a -> s {accessKeyId = a} :: AssumedRole)
+
+-- | The unique identifier for the Amazon Web Services account that owns the
+-- entity that was used to get the credentials.
+assumedRole_accountId :: Lens.Lens' AssumedRole (Prelude.Maybe Prelude.Text)
+assumedRole_accountId = Lens.lens (\AssumedRole' {accountId} -> accountId) (\s@AssumedRole' {} a -> s {accountId = a} :: AssumedRole)
+
+-- | The Amazon Resource Name (ARN) of the entity that was used to get the
+-- credentials.
+assumedRole_arn :: Lens.Lens' AssumedRole (Prelude.Maybe Prelude.Text)
+assumedRole_arn = Lens.lens (\AssumedRole' {arn} -> arn) (\s@AssumedRole' {} a -> s {arn = a} :: AssumedRole)
+
+-- | The unique identifier for the entity that was used to get the
+-- credentials.
+assumedRole_principalId :: Lens.Lens' AssumedRole (Prelude.Maybe Prelude.Text)
+assumedRole_principalId = Lens.lens (\AssumedRole' {principalId} -> principalId) (\s@AssumedRole' {} a -> s {principalId = a} :: AssumedRole)
+
+-- | The details of the session that was created for the credentials,
+-- including the entity that issued the session.
+assumedRole_sessionContext :: Lens.Lens' AssumedRole (Prelude.Maybe SessionContext)
+assumedRole_sessionContext = Lens.lens (\AssumedRole' {sessionContext} -> sessionContext) (\s@AssumedRole' {} a -> s {sessionContext = a} :: AssumedRole)
+
+instance Data.FromJSON AssumedRole where
+  parseJSON =
+    Data.withObject
+      "AssumedRole"
+      ( \x ->
+          AssumedRole'
+            Prelude.<$> (x Data..:? "accessKeyId")
+            Prelude.<*> (x Data..:? "accountId")
+            Prelude.<*> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "principalId")
+            Prelude.<*> (x Data..:? "sessionContext")
+      )
+
+instance Prelude.Hashable AssumedRole where
+  hashWithSalt _salt AssumedRole' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessKeyId
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` principalId
+      `Prelude.hashWithSalt` sessionContext
+
+instance Prelude.NFData AssumedRole where
+  rnf AssumedRole' {..} =
+    Prelude.rnf accessKeyId
+      `Prelude.seq` Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf principalId
+      `Prelude.seq` Prelude.rnf sessionContext
diff --git a/gen/Amazonka/MacieV2/Types/AutomatedDiscoveryStatus.hs b/gen/Amazonka/MacieV2/Types/AutomatedDiscoveryStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/AutomatedDiscoveryStatus.hs
@@ -0,0 +1,73 @@
+{-# 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.MacieV2.Types.AutomatedDiscoveryStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.AutomatedDiscoveryStatus
+  ( AutomatedDiscoveryStatus
+      ( ..,
+        AutomatedDiscoveryStatus_DISABLED,
+        AutomatedDiscoveryStatus_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status of the automated sensitive data discovery configuration for
+-- an Amazon Macie account. Valid values are:
+newtype AutomatedDiscoveryStatus = AutomatedDiscoveryStatus'
+  { fromAutomatedDiscoveryStatus ::
+      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 AutomatedDiscoveryStatus_DISABLED :: AutomatedDiscoveryStatus
+pattern AutomatedDiscoveryStatus_DISABLED = AutomatedDiscoveryStatus' "DISABLED"
+
+pattern AutomatedDiscoveryStatus_ENABLED :: AutomatedDiscoveryStatus
+pattern AutomatedDiscoveryStatus_ENABLED = AutomatedDiscoveryStatus' "ENABLED"
+
+{-# COMPLETE
+  AutomatedDiscoveryStatus_DISABLED,
+  AutomatedDiscoveryStatus_ENABLED,
+  AutomatedDiscoveryStatus'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/AvailabilityCode.hs b/gen/Amazonka/MacieV2/Types/AvailabilityCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/AvailabilityCode.hs
@@ -0,0 +1,73 @@
+{-# 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.MacieV2.Types.AvailabilityCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.AvailabilityCode
+  ( AvailabilityCode
+      ( ..,
+        AvailabilityCode_AVAILABLE,
+        AvailabilityCode_UNAVAILABLE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies whether occurrences of sensitive data can be retrieved for a
+-- finding. Possible values are:
+newtype AvailabilityCode = AvailabilityCode'
+  { fromAvailabilityCode ::
+      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 AvailabilityCode_AVAILABLE :: AvailabilityCode
+pattern AvailabilityCode_AVAILABLE = AvailabilityCode' "AVAILABLE"
+
+pattern AvailabilityCode_UNAVAILABLE :: AvailabilityCode
+pattern AvailabilityCode_UNAVAILABLE = AvailabilityCode' "UNAVAILABLE"
+
+{-# COMPLETE
+  AvailabilityCode_AVAILABLE,
+  AvailabilityCode_UNAVAILABLE,
+  AvailabilityCode'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/AwsAccount.hs b/gen/Amazonka/MacieV2/Types/AwsAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/AwsAccount.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.MacieV2.Types.AwsAccount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.AwsAccount 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 information about an Amazon Web Services account and entity
+-- that performed an action on an affected resource. The action was
+-- performed using the credentials for an Amazon Web Services account other
+-- than your own account.
+--
+-- /See:/ 'newAwsAccount' smart constructor.
+data AwsAccount = AwsAccount'
+  { -- | The unique identifier for the Amazon Web Services account.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the entity that performed the action.
+    principalId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AwsAccount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'awsAccount_accountId' - The unique identifier for the Amazon Web Services account.
+--
+-- 'principalId', 'awsAccount_principalId' - The unique identifier for the entity that performed the action.
+newAwsAccount ::
+  AwsAccount
+newAwsAccount =
+  AwsAccount'
+    { accountId = Prelude.Nothing,
+      principalId = Prelude.Nothing
+    }
+
+-- | The unique identifier for the Amazon Web Services account.
+awsAccount_accountId :: Lens.Lens' AwsAccount (Prelude.Maybe Prelude.Text)
+awsAccount_accountId = Lens.lens (\AwsAccount' {accountId} -> accountId) (\s@AwsAccount' {} a -> s {accountId = a} :: AwsAccount)
+
+-- | The unique identifier for the entity that performed the action.
+awsAccount_principalId :: Lens.Lens' AwsAccount (Prelude.Maybe Prelude.Text)
+awsAccount_principalId = Lens.lens (\AwsAccount' {principalId} -> principalId) (\s@AwsAccount' {} a -> s {principalId = a} :: AwsAccount)
+
+instance Data.FromJSON AwsAccount where
+  parseJSON =
+    Data.withObject
+      "AwsAccount"
+      ( \x ->
+          AwsAccount'
+            Prelude.<$> (x Data..:? "accountId")
+            Prelude.<*> (x Data..:? "principalId")
+      )
+
+instance Prelude.Hashable AwsAccount where
+  hashWithSalt _salt AwsAccount' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` principalId
+
+instance Prelude.NFData AwsAccount where
+  rnf AwsAccount' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf principalId
diff --git a/gen/Amazonka/MacieV2/Types/AwsService.hs b/gen/Amazonka/MacieV2/Types/AwsService.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/AwsService.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.MacieV2.Types.AwsService
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.AwsService 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 information about an Amazon Web Service that performed an
+-- action on an affected resource.
+--
+-- /See:/ 'newAwsService' smart constructor.
+data AwsService = AwsService'
+  { -- | The name of the Amazon Web Service that performed the action.
+    invokedBy :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AwsService' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'invokedBy', 'awsService_invokedBy' - The name of the Amazon Web Service that performed the action.
+newAwsService ::
+  AwsService
+newAwsService =
+  AwsService' {invokedBy = Prelude.Nothing}
+
+-- | The name of the Amazon Web Service that performed the action.
+awsService_invokedBy :: Lens.Lens' AwsService (Prelude.Maybe Prelude.Text)
+awsService_invokedBy = Lens.lens (\AwsService' {invokedBy} -> invokedBy) (\s@AwsService' {} a -> s {invokedBy = a} :: AwsService)
+
+instance Data.FromJSON AwsService where
+  parseJSON =
+    Data.withObject
+      "AwsService"
+      ( \x ->
+          AwsService' Prelude.<$> (x Data..:? "invokedBy")
+      )
+
+instance Prelude.Hashable AwsService where
+  hashWithSalt _salt AwsService' {..} =
+    _salt `Prelude.hashWithSalt` invokedBy
+
+instance Prelude.NFData AwsService where
+  rnf AwsService' {..} = Prelude.rnf invokedBy
diff --git a/gen/Amazonka/MacieV2/Types/BatchGetCustomDataIdentifierSummary.hs b/gen/Amazonka/MacieV2/Types/BatchGetCustomDataIdentifierSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/BatchGetCustomDataIdentifierSummary.hs
@@ -0,0 +1,153 @@
+{-# 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.MacieV2.Types.BatchGetCustomDataIdentifierSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.BatchGetCustomDataIdentifierSummary 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 information about a custom data identifier.
+--
+-- /See:/ 'newBatchGetCustomDataIdentifierSummary' smart constructor.
+data BatchGetCustomDataIdentifierSummary = BatchGetCustomDataIdentifierSummary'
+  { -- | The Amazon Resource Name (ARN) of the custom data identifier.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in UTC and extended ISO 8601 format, when the custom
+    -- data identifier was created.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | Specifies whether the custom data identifier was deleted. If you delete
+    -- a custom data identifier, Amazon Macie doesn\'t delete it permanently.
+    -- Instead, it soft deletes the identifier.
+    deleted :: Prelude.Maybe Prelude.Bool,
+    -- | The custom description of the custom data identifier.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the custom data identifier.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The custom name of the custom data identifier.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetCustomDataIdentifierSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'batchGetCustomDataIdentifierSummary_arn' - The Amazon Resource Name (ARN) of the custom data identifier.
+--
+-- 'createdAt', 'batchGetCustomDataIdentifierSummary_createdAt' - The date and time, in UTC and extended ISO 8601 format, when the custom
+-- data identifier was created.
+--
+-- 'deleted', 'batchGetCustomDataIdentifierSummary_deleted' - Specifies whether the custom data identifier was deleted. If you delete
+-- a custom data identifier, Amazon Macie doesn\'t delete it permanently.
+-- Instead, it soft deletes the identifier.
+--
+-- 'description', 'batchGetCustomDataIdentifierSummary_description' - The custom description of the custom data identifier.
+--
+-- 'id', 'batchGetCustomDataIdentifierSummary_id' - The unique identifier for the custom data identifier.
+--
+-- 'name', 'batchGetCustomDataIdentifierSummary_name' - The custom name of the custom data identifier.
+newBatchGetCustomDataIdentifierSummary ::
+  BatchGetCustomDataIdentifierSummary
+newBatchGetCustomDataIdentifierSummary =
+  BatchGetCustomDataIdentifierSummary'
+    { arn =
+        Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      deleted = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the custom data identifier.
+batchGetCustomDataIdentifierSummary_arn :: Lens.Lens' BatchGetCustomDataIdentifierSummary (Prelude.Maybe Prelude.Text)
+batchGetCustomDataIdentifierSummary_arn = Lens.lens (\BatchGetCustomDataIdentifierSummary' {arn} -> arn) (\s@BatchGetCustomDataIdentifierSummary' {} a -> s {arn = a} :: BatchGetCustomDataIdentifierSummary)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the custom
+-- data identifier was created.
+batchGetCustomDataIdentifierSummary_createdAt :: Lens.Lens' BatchGetCustomDataIdentifierSummary (Prelude.Maybe Prelude.UTCTime)
+batchGetCustomDataIdentifierSummary_createdAt = Lens.lens (\BatchGetCustomDataIdentifierSummary' {createdAt} -> createdAt) (\s@BatchGetCustomDataIdentifierSummary' {} a -> s {createdAt = a} :: BatchGetCustomDataIdentifierSummary) Prelude.. Lens.mapping Data._Time
+
+-- | Specifies whether the custom data identifier was deleted. If you delete
+-- a custom data identifier, Amazon Macie doesn\'t delete it permanently.
+-- Instead, it soft deletes the identifier.
+batchGetCustomDataIdentifierSummary_deleted :: Lens.Lens' BatchGetCustomDataIdentifierSummary (Prelude.Maybe Prelude.Bool)
+batchGetCustomDataIdentifierSummary_deleted = Lens.lens (\BatchGetCustomDataIdentifierSummary' {deleted} -> deleted) (\s@BatchGetCustomDataIdentifierSummary' {} a -> s {deleted = a} :: BatchGetCustomDataIdentifierSummary)
+
+-- | The custom description of the custom data identifier.
+batchGetCustomDataIdentifierSummary_description :: Lens.Lens' BatchGetCustomDataIdentifierSummary (Prelude.Maybe Prelude.Text)
+batchGetCustomDataIdentifierSummary_description = Lens.lens (\BatchGetCustomDataIdentifierSummary' {description} -> description) (\s@BatchGetCustomDataIdentifierSummary' {} a -> s {description = a} :: BatchGetCustomDataIdentifierSummary)
+
+-- | The unique identifier for the custom data identifier.
+batchGetCustomDataIdentifierSummary_id :: Lens.Lens' BatchGetCustomDataIdentifierSummary (Prelude.Maybe Prelude.Text)
+batchGetCustomDataIdentifierSummary_id = Lens.lens (\BatchGetCustomDataIdentifierSummary' {id} -> id) (\s@BatchGetCustomDataIdentifierSummary' {} a -> s {id = a} :: BatchGetCustomDataIdentifierSummary)
+
+-- | The custom name of the custom data identifier.
+batchGetCustomDataIdentifierSummary_name :: Lens.Lens' BatchGetCustomDataIdentifierSummary (Prelude.Maybe Prelude.Text)
+batchGetCustomDataIdentifierSummary_name = Lens.lens (\BatchGetCustomDataIdentifierSummary' {name} -> name) (\s@BatchGetCustomDataIdentifierSummary' {} a -> s {name = a} :: BatchGetCustomDataIdentifierSummary)
+
+instance
+  Data.FromJSON
+    BatchGetCustomDataIdentifierSummary
+  where
+  parseJSON =
+    Data.withObject
+      "BatchGetCustomDataIdentifierSummary"
+      ( \x ->
+          BatchGetCustomDataIdentifierSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "deleted")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance
+  Prelude.Hashable
+    BatchGetCustomDataIdentifierSummary
+  where
+  hashWithSalt
+    _salt
+    BatchGetCustomDataIdentifierSummary' {..} =
+      _salt
+        `Prelude.hashWithSalt` arn
+        `Prelude.hashWithSalt` createdAt
+        `Prelude.hashWithSalt` deleted
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` id
+        `Prelude.hashWithSalt` name
+
+instance
+  Prelude.NFData
+    BatchGetCustomDataIdentifierSummary
+  where
+  rnf BatchGetCustomDataIdentifierSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf deleted
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/MacieV2/Types/BlockPublicAccess.hs b/gen/Amazonka/MacieV2/Types/BlockPublicAccess.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/BlockPublicAccess.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.BlockPublicAccess
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.BlockPublicAccess 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 information about the block public access settings for an S3
+-- bucket. These settings can apply to a bucket at the account or bucket
+-- level. For detailed information about each setting, see
+-- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html Blocking public access to your Amazon S3 storage>
+-- in the /Amazon Simple Storage Service User Guide/.
+--
+-- /See:/ 'newBlockPublicAccess' smart constructor.
+data BlockPublicAccess = BlockPublicAccess'
+  { -- | Specifies whether Amazon S3 blocks public access control lists (ACLs)
+    -- for the bucket and objects in the bucket.
+    blockPublicAcls :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether Amazon S3 blocks public bucket policies for the
+    -- bucket.
+    blockPublicPolicy :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether Amazon S3 ignores public ACLs for the bucket and
+    -- objects in the bucket.
+    ignorePublicAcls :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether Amazon S3 restricts public bucket policies for the
+    -- bucket.
+    restrictPublicBuckets :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BlockPublicAccess' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blockPublicAcls', 'blockPublicAccess_blockPublicAcls' - Specifies whether Amazon S3 blocks public access control lists (ACLs)
+-- for the bucket and objects in the bucket.
+--
+-- 'blockPublicPolicy', 'blockPublicAccess_blockPublicPolicy' - Specifies whether Amazon S3 blocks public bucket policies for the
+-- bucket.
+--
+-- 'ignorePublicAcls', 'blockPublicAccess_ignorePublicAcls' - Specifies whether Amazon S3 ignores public ACLs for the bucket and
+-- objects in the bucket.
+--
+-- 'restrictPublicBuckets', 'blockPublicAccess_restrictPublicBuckets' - Specifies whether Amazon S3 restricts public bucket policies for the
+-- bucket.
+newBlockPublicAccess ::
+  BlockPublicAccess
+newBlockPublicAccess =
+  BlockPublicAccess'
+    { blockPublicAcls =
+        Prelude.Nothing,
+      blockPublicPolicy = Prelude.Nothing,
+      ignorePublicAcls = Prelude.Nothing,
+      restrictPublicBuckets = Prelude.Nothing
+    }
+
+-- | Specifies whether Amazon S3 blocks public access control lists (ACLs)
+-- for the bucket and objects in the bucket.
+blockPublicAccess_blockPublicAcls :: Lens.Lens' BlockPublicAccess (Prelude.Maybe Prelude.Bool)
+blockPublicAccess_blockPublicAcls = Lens.lens (\BlockPublicAccess' {blockPublicAcls} -> blockPublicAcls) (\s@BlockPublicAccess' {} a -> s {blockPublicAcls = a} :: BlockPublicAccess)
+
+-- | Specifies whether Amazon S3 blocks public bucket policies for the
+-- bucket.
+blockPublicAccess_blockPublicPolicy :: Lens.Lens' BlockPublicAccess (Prelude.Maybe Prelude.Bool)
+blockPublicAccess_blockPublicPolicy = Lens.lens (\BlockPublicAccess' {blockPublicPolicy} -> blockPublicPolicy) (\s@BlockPublicAccess' {} a -> s {blockPublicPolicy = a} :: BlockPublicAccess)
+
+-- | Specifies whether Amazon S3 ignores public ACLs for the bucket and
+-- objects in the bucket.
+blockPublicAccess_ignorePublicAcls :: Lens.Lens' BlockPublicAccess (Prelude.Maybe Prelude.Bool)
+blockPublicAccess_ignorePublicAcls = Lens.lens (\BlockPublicAccess' {ignorePublicAcls} -> ignorePublicAcls) (\s@BlockPublicAccess' {} a -> s {ignorePublicAcls = a} :: BlockPublicAccess)
+
+-- | Specifies whether Amazon S3 restricts public bucket policies for the
+-- bucket.
+blockPublicAccess_restrictPublicBuckets :: Lens.Lens' BlockPublicAccess (Prelude.Maybe Prelude.Bool)
+blockPublicAccess_restrictPublicBuckets = Lens.lens (\BlockPublicAccess' {restrictPublicBuckets} -> restrictPublicBuckets) (\s@BlockPublicAccess' {} a -> s {restrictPublicBuckets = a} :: BlockPublicAccess)
+
+instance Data.FromJSON BlockPublicAccess where
+  parseJSON =
+    Data.withObject
+      "BlockPublicAccess"
+      ( \x ->
+          BlockPublicAccess'
+            Prelude.<$> (x Data..:? "blockPublicAcls")
+            Prelude.<*> (x Data..:? "blockPublicPolicy")
+            Prelude.<*> (x Data..:? "ignorePublicAcls")
+            Prelude.<*> (x Data..:? "restrictPublicBuckets")
+      )
+
+instance Prelude.Hashable BlockPublicAccess where
+  hashWithSalt _salt BlockPublicAccess' {..} =
+    _salt
+      `Prelude.hashWithSalt` blockPublicAcls
+      `Prelude.hashWithSalt` blockPublicPolicy
+      `Prelude.hashWithSalt` ignorePublicAcls
+      `Prelude.hashWithSalt` restrictPublicBuckets
+
+instance Prelude.NFData BlockPublicAccess where
+  rnf BlockPublicAccess' {..} =
+    Prelude.rnf blockPublicAcls
+      `Prelude.seq` Prelude.rnf blockPublicPolicy
+      `Prelude.seq` Prelude.rnf ignorePublicAcls
+      `Prelude.seq` Prelude.rnf restrictPublicBuckets
diff --git a/gen/Amazonka/MacieV2/Types/BucketCountByEffectivePermission.hs b/gen/Amazonka/MacieV2/Types/BucketCountByEffectivePermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/BucketCountByEffectivePermission.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.BucketCountByEffectivePermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.BucketCountByEffectivePermission 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 information about the number of S3 buckets that are publicly
+-- accessible based on a combination of permissions settings for each
+-- bucket.
+--
+-- /See:/ 'newBucketCountByEffectivePermission' smart constructor.
+data BucketCountByEffectivePermission = BucketCountByEffectivePermission'
+  { -- | The total number of buckets that allow the general public to have read
+    -- or write access to the bucket.
+    publiclyAccessible :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of buckets that allow the general public to have read
+    -- access to the bucket.
+    publiclyReadable :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of buckets that allow the general public to have write
+    -- access to the bucket.
+    publiclyWritable :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of buckets that Amazon Macie wasn\'t able to evaluate
+    -- permissions settings for. Macie can\'t determine whether these buckets
+    -- are publicly accessible.
+    unknown :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BucketCountByEffectivePermission' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'publiclyAccessible', 'bucketCountByEffectivePermission_publiclyAccessible' - The total number of buckets that allow the general public to have read
+-- or write access to the bucket.
+--
+-- 'publiclyReadable', 'bucketCountByEffectivePermission_publiclyReadable' - The total number of buckets that allow the general public to have read
+-- access to the bucket.
+--
+-- 'publiclyWritable', 'bucketCountByEffectivePermission_publiclyWritable' - The total number of buckets that allow the general public to have write
+-- access to the bucket.
+--
+-- 'unknown', 'bucketCountByEffectivePermission_unknown' - The total number of buckets that Amazon Macie wasn\'t able to evaluate
+-- permissions settings for. Macie can\'t determine whether these buckets
+-- are publicly accessible.
+newBucketCountByEffectivePermission ::
+  BucketCountByEffectivePermission
+newBucketCountByEffectivePermission =
+  BucketCountByEffectivePermission'
+    { publiclyAccessible =
+        Prelude.Nothing,
+      publiclyReadable = Prelude.Nothing,
+      publiclyWritable = Prelude.Nothing,
+      unknown = Prelude.Nothing
+    }
+
+-- | The total number of buckets that allow the general public to have read
+-- or write access to the bucket.
+bucketCountByEffectivePermission_publiclyAccessible :: Lens.Lens' BucketCountByEffectivePermission (Prelude.Maybe Prelude.Integer)
+bucketCountByEffectivePermission_publiclyAccessible = Lens.lens (\BucketCountByEffectivePermission' {publiclyAccessible} -> publiclyAccessible) (\s@BucketCountByEffectivePermission' {} a -> s {publiclyAccessible = a} :: BucketCountByEffectivePermission)
+
+-- | The total number of buckets that allow the general public to have read
+-- access to the bucket.
+bucketCountByEffectivePermission_publiclyReadable :: Lens.Lens' BucketCountByEffectivePermission (Prelude.Maybe Prelude.Integer)
+bucketCountByEffectivePermission_publiclyReadable = Lens.lens (\BucketCountByEffectivePermission' {publiclyReadable} -> publiclyReadable) (\s@BucketCountByEffectivePermission' {} a -> s {publiclyReadable = a} :: BucketCountByEffectivePermission)
+
+-- | The total number of buckets that allow the general public to have write
+-- access to the bucket.
+bucketCountByEffectivePermission_publiclyWritable :: Lens.Lens' BucketCountByEffectivePermission (Prelude.Maybe Prelude.Integer)
+bucketCountByEffectivePermission_publiclyWritable = Lens.lens (\BucketCountByEffectivePermission' {publiclyWritable} -> publiclyWritable) (\s@BucketCountByEffectivePermission' {} a -> s {publiclyWritable = a} :: BucketCountByEffectivePermission)
+
+-- | The total number of buckets that Amazon Macie wasn\'t able to evaluate
+-- permissions settings for. Macie can\'t determine whether these buckets
+-- are publicly accessible.
+bucketCountByEffectivePermission_unknown :: Lens.Lens' BucketCountByEffectivePermission (Prelude.Maybe Prelude.Integer)
+bucketCountByEffectivePermission_unknown = Lens.lens (\BucketCountByEffectivePermission' {unknown} -> unknown) (\s@BucketCountByEffectivePermission' {} a -> s {unknown = a} :: BucketCountByEffectivePermission)
+
+instance
+  Data.FromJSON
+    BucketCountByEffectivePermission
+  where
+  parseJSON =
+    Data.withObject
+      "BucketCountByEffectivePermission"
+      ( \x ->
+          BucketCountByEffectivePermission'
+            Prelude.<$> (x Data..:? "publiclyAccessible")
+            Prelude.<*> (x Data..:? "publiclyReadable")
+            Prelude.<*> (x Data..:? "publiclyWritable")
+            Prelude.<*> (x Data..:? "unknown")
+      )
+
+instance
+  Prelude.Hashable
+    BucketCountByEffectivePermission
+  where
+  hashWithSalt
+    _salt
+    BucketCountByEffectivePermission' {..} =
+      _salt
+        `Prelude.hashWithSalt` publiclyAccessible
+        `Prelude.hashWithSalt` publiclyReadable
+        `Prelude.hashWithSalt` publiclyWritable
+        `Prelude.hashWithSalt` unknown
+
+instance
+  Prelude.NFData
+    BucketCountByEffectivePermission
+  where
+  rnf BucketCountByEffectivePermission' {..} =
+    Prelude.rnf publiclyAccessible
+      `Prelude.seq` Prelude.rnf publiclyReadable
+      `Prelude.seq` Prelude.rnf publiclyWritable
+      `Prelude.seq` Prelude.rnf unknown
diff --git a/gen/Amazonka/MacieV2/Types/BucketCountByEncryptionType.hs b/gen/Amazonka/MacieV2/Types/BucketCountByEncryptionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/BucketCountByEncryptionType.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.BucketCountByEncryptionType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.BucketCountByEncryptionType 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 information about the number of S3 buckets that use certain
+-- types of server-side encryption by default or don\'t encrypt new objects
+-- by default. For detailed information about these settings, see
+-- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-encryption.html Setting default server-side encryption behavior for Amazon S3 buckets>
+-- in the /Amazon Simple Storage Service User Guide/.
+--
+-- /See:/ 'newBucketCountByEncryptionType' smart constructor.
+data BucketCountByEncryptionType = BucketCountByEncryptionType'
+  { -- | The total number of buckets that use an KMS key to encrypt new objects
+    -- by default, either an Amazon Web Services managed key or a customer
+    -- managed key. These buckets use KMS encryption (SSE-KMS) by default.
+    kmsManaged :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of buckets that use an Amazon S3 managed key to encrypt
+    -- new objects by default. These buckets use Amazon S3 managed encryption
+    -- (SSE-S3) by default.
+    s3Managed :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of buckets that don\'t encrypt new objects by default.
+    -- Default encryption is disabled for these buckets.
+    unencrypted :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of buckets that Amazon Macie doesn\'t have current
+    -- encryption metadata for. Macie can\'t provide current data about the
+    -- default encryption settings for these buckets.
+    unknown :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BucketCountByEncryptionType' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'kmsManaged', 'bucketCountByEncryptionType_kmsManaged' - The total number of buckets that use an KMS key to encrypt new objects
+-- by default, either an Amazon Web Services managed key or a customer
+-- managed key. These buckets use KMS encryption (SSE-KMS) by default.
+--
+-- 's3Managed', 'bucketCountByEncryptionType_s3Managed' - The total number of buckets that use an Amazon S3 managed key to encrypt
+-- new objects by default. These buckets use Amazon S3 managed encryption
+-- (SSE-S3) by default.
+--
+-- 'unencrypted', 'bucketCountByEncryptionType_unencrypted' - The total number of buckets that don\'t encrypt new objects by default.
+-- Default encryption is disabled for these buckets.
+--
+-- 'unknown', 'bucketCountByEncryptionType_unknown' - The total number of buckets that Amazon Macie doesn\'t have current
+-- encryption metadata for. Macie can\'t provide current data about the
+-- default encryption settings for these buckets.
+newBucketCountByEncryptionType ::
+  BucketCountByEncryptionType
+newBucketCountByEncryptionType =
+  BucketCountByEncryptionType'
+    { kmsManaged =
+        Prelude.Nothing,
+      s3Managed = Prelude.Nothing,
+      unencrypted = Prelude.Nothing,
+      unknown = Prelude.Nothing
+    }
+
+-- | The total number of buckets that use an KMS key to encrypt new objects
+-- by default, either an Amazon Web Services managed key or a customer
+-- managed key. These buckets use KMS encryption (SSE-KMS) by default.
+bucketCountByEncryptionType_kmsManaged :: Lens.Lens' BucketCountByEncryptionType (Prelude.Maybe Prelude.Integer)
+bucketCountByEncryptionType_kmsManaged = Lens.lens (\BucketCountByEncryptionType' {kmsManaged} -> kmsManaged) (\s@BucketCountByEncryptionType' {} a -> s {kmsManaged = a} :: BucketCountByEncryptionType)
+
+-- | The total number of buckets that use an Amazon S3 managed key to encrypt
+-- new objects by default. These buckets use Amazon S3 managed encryption
+-- (SSE-S3) by default.
+bucketCountByEncryptionType_s3Managed :: Lens.Lens' BucketCountByEncryptionType (Prelude.Maybe Prelude.Integer)
+bucketCountByEncryptionType_s3Managed = Lens.lens (\BucketCountByEncryptionType' {s3Managed} -> s3Managed) (\s@BucketCountByEncryptionType' {} a -> s {s3Managed = a} :: BucketCountByEncryptionType)
+
+-- | The total number of buckets that don\'t encrypt new objects by default.
+-- Default encryption is disabled for these buckets.
+bucketCountByEncryptionType_unencrypted :: Lens.Lens' BucketCountByEncryptionType (Prelude.Maybe Prelude.Integer)
+bucketCountByEncryptionType_unencrypted = Lens.lens (\BucketCountByEncryptionType' {unencrypted} -> unencrypted) (\s@BucketCountByEncryptionType' {} a -> s {unencrypted = a} :: BucketCountByEncryptionType)
+
+-- | The total number of buckets that Amazon Macie doesn\'t have current
+-- encryption metadata for. Macie can\'t provide current data about the
+-- default encryption settings for these buckets.
+bucketCountByEncryptionType_unknown :: Lens.Lens' BucketCountByEncryptionType (Prelude.Maybe Prelude.Integer)
+bucketCountByEncryptionType_unknown = Lens.lens (\BucketCountByEncryptionType' {unknown} -> unknown) (\s@BucketCountByEncryptionType' {} a -> s {unknown = a} :: BucketCountByEncryptionType)
+
+instance Data.FromJSON BucketCountByEncryptionType where
+  parseJSON =
+    Data.withObject
+      "BucketCountByEncryptionType"
+      ( \x ->
+          BucketCountByEncryptionType'
+            Prelude.<$> (x Data..:? "kmsManaged")
+            Prelude.<*> (x Data..:? "s3Managed")
+            Prelude.<*> (x Data..:? "unencrypted")
+            Prelude.<*> (x Data..:? "unknown")
+      )
+
+instance Prelude.Hashable BucketCountByEncryptionType where
+  hashWithSalt _salt BucketCountByEncryptionType' {..} =
+    _salt
+      `Prelude.hashWithSalt` kmsManaged
+      `Prelude.hashWithSalt` s3Managed
+      `Prelude.hashWithSalt` unencrypted
+      `Prelude.hashWithSalt` unknown
+
+instance Prelude.NFData BucketCountByEncryptionType where
+  rnf BucketCountByEncryptionType' {..} =
+    Prelude.rnf kmsManaged
+      `Prelude.seq` Prelude.rnf s3Managed
+      `Prelude.seq` Prelude.rnf unencrypted
+      `Prelude.seq` Prelude.rnf unknown
diff --git a/gen/Amazonka/MacieV2/Types/BucketCountBySharedAccessType.hs b/gen/Amazonka/MacieV2/Types/BucketCountBySharedAccessType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/BucketCountBySharedAccessType.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.BucketCountBySharedAccessType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.BucketCountBySharedAccessType 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 information about the number of S3 buckets that are or aren\'t
+-- shared with other Amazon Web Services accounts.
+--
+-- /See:/ 'newBucketCountBySharedAccessType' smart constructor.
+data BucketCountBySharedAccessType = BucketCountBySharedAccessType'
+  { -- | The total number of buckets that are shared with an Amazon Web Services
+    -- account that isn\'t part of the same Amazon Macie organization.
+    external :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of buckets that are shared with an Amazon Web Services
+    -- account that\'s part of the same Amazon Macie organization.
+    internal :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of buckets that aren\'t shared with other Amazon Web
+    -- Services accounts.
+    notShared :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of buckets that Amazon Macie wasn\'t able to evaluate
+    -- shared access settings for. Macie can\'t determine whether these buckets
+    -- are shared with other Amazon Web Services accounts.
+    unknown :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BucketCountBySharedAccessType' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'external', 'bucketCountBySharedAccessType_external' - The total number of buckets that are shared with an Amazon Web Services
+-- account that isn\'t part of the same Amazon Macie organization.
+--
+-- 'internal', 'bucketCountBySharedAccessType_internal' - The total number of buckets that are shared with an Amazon Web Services
+-- account that\'s part of the same Amazon Macie organization.
+--
+-- 'notShared', 'bucketCountBySharedAccessType_notShared' - The total number of buckets that aren\'t shared with other Amazon Web
+-- Services accounts.
+--
+-- 'unknown', 'bucketCountBySharedAccessType_unknown' - The total number of buckets that Amazon Macie wasn\'t able to evaluate
+-- shared access settings for. Macie can\'t determine whether these buckets
+-- are shared with other Amazon Web Services accounts.
+newBucketCountBySharedAccessType ::
+  BucketCountBySharedAccessType
+newBucketCountBySharedAccessType =
+  BucketCountBySharedAccessType'
+    { external =
+        Prelude.Nothing,
+      internal = Prelude.Nothing,
+      notShared = Prelude.Nothing,
+      unknown = Prelude.Nothing
+    }
+
+-- | The total number of buckets that are shared with an Amazon Web Services
+-- account that isn\'t part of the same Amazon Macie organization.
+bucketCountBySharedAccessType_external :: Lens.Lens' BucketCountBySharedAccessType (Prelude.Maybe Prelude.Integer)
+bucketCountBySharedAccessType_external = Lens.lens (\BucketCountBySharedAccessType' {external} -> external) (\s@BucketCountBySharedAccessType' {} a -> s {external = a} :: BucketCountBySharedAccessType)
+
+-- | The total number of buckets that are shared with an Amazon Web Services
+-- account that\'s part of the same Amazon Macie organization.
+bucketCountBySharedAccessType_internal :: Lens.Lens' BucketCountBySharedAccessType (Prelude.Maybe Prelude.Integer)
+bucketCountBySharedAccessType_internal = Lens.lens (\BucketCountBySharedAccessType' {internal} -> internal) (\s@BucketCountBySharedAccessType' {} a -> s {internal = a} :: BucketCountBySharedAccessType)
+
+-- | The total number of buckets that aren\'t shared with other Amazon Web
+-- Services accounts.
+bucketCountBySharedAccessType_notShared :: Lens.Lens' BucketCountBySharedAccessType (Prelude.Maybe Prelude.Integer)
+bucketCountBySharedAccessType_notShared = Lens.lens (\BucketCountBySharedAccessType' {notShared} -> notShared) (\s@BucketCountBySharedAccessType' {} a -> s {notShared = a} :: BucketCountBySharedAccessType)
+
+-- | The total number of buckets that Amazon Macie wasn\'t able to evaluate
+-- shared access settings for. Macie can\'t determine whether these buckets
+-- are shared with other Amazon Web Services accounts.
+bucketCountBySharedAccessType_unknown :: Lens.Lens' BucketCountBySharedAccessType (Prelude.Maybe Prelude.Integer)
+bucketCountBySharedAccessType_unknown = Lens.lens (\BucketCountBySharedAccessType' {unknown} -> unknown) (\s@BucketCountBySharedAccessType' {} a -> s {unknown = a} :: BucketCountBySharedAccessType)
+
+instance Data.FromJSON BucketCountBySharedAccessType where
+  parseJSON =
+    Data.withObject
+      "BucketCountBySharedAccessType"
+      ( \x ->
+          BucketCountBySharedAccessType'
+            Prelude.<$> (x Data..:? "external")
+            Prelude.<*> (x Data..:? "internal")
+            Prelude.<*> (x Data..:? "notShared")
+            Prelude.<*> (x Data..:? "unknown")
+      )
+
+instance
+  Prelude.Hashable
+    BucketCountBySharedAccessType
+  where
+  hashWithSalt _salt BucketCountBySharedAccessType' {..} =
+    _salt
+      `Prelude.hashWithSalt` external
+      `Prelude.hashWithSalt` internal
+      `Prelude.hashWithSalt` notShared
+      `Prelude.hashWithSalt` unknown
+
+instance Prelude.NFData BucketCountBySharedAccessType where
+  rnf BucketCountBySharedAccessType' {..} =
+    Prelude.rnf external
+      `Prelude.seq` Prelude.rnf internal
+      `Prelude.seq` Prelude.rnf notShared
+      `Prelude.seq` Prelude.rnf unknown
diff --git a/gen/Amazonka/MacieV2/Types/BucketCountPolicyAllowsUnencryptedObjectUploads.hs b/gen/Amazonka/MacieV2/Types/BucketCountPolicyAllowsUnencryptedObjectUploads.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/BucketCountPolicyAllowsUnencryptedObjectUploads.hs
@@ -0,0 +1,154 @@
+{-# 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.MacieV2.Types.BucketCountPolicyAllowsUnencryptedObjectUploads
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.BucketCountPolicyAllowsUnencryptedObjectUploads 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 information about the number of S3 buckets whose bucket
+-- policies do or don\'t require server-side encryption of objects when
+-- objects are uploaded to the buckets.
+--
+-- /See:/ 'newBucketCountPolicyAllowsUnencryptedObjectUploads' smart constructor.
+data BucketCountPolicyAllowsUnencryptedObjectUploads = BucketCountPolicyAllowsUnencryptedObjectUploads'
+  { -- | The total number of buckets that don\'t have a bucket policy or have a
+    -- bucket policy that doesn\'t require server-side encryption of new
+    -- objects. If a bucket policy exists, the policy doesn\'t require
+    -- PutObject requests to include a valid server-side encryption header: the
+    -- x-amz-server-side-encryption header with a value of AES256 or aws:kms,
+    -- or the x-amz-server-side-encryption-customer-algorithm header with a
+    -- value of AES256.
+    allowsUnencryptedObjectUploads :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of buckets whose bucket policies require server-side
+    -- encryption of new objects. PutObject requests for these buckets must
+    -- include a valid server-side encryption header: the
+    -- x-amz-server-side-encryption header with a value of AES256 or aws:kms,
+    -- or the x-amz-server-side-encryption-customer-algorithm header with a
+    -- value of AES256.
+    deniesUnencryptedObjectUploads :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of buckets that Amazon Macie wasn\'t able to evaluate
+    -- server-side encryption requirements for. Macie can\'t determine whether
+    -- the bucket policies for these buckets require server-side encryption of
+    -- new objects.
+    unknown :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BucketCountPolicyAllowsUnencryptedObjectUploads' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowsUnencryptedObjectUploads', 'bucketCountPolicyAllowsUnencryptedObjectUploads_allowsUnencryptedObjectUploads' - The total number of buckets that don\'t have a bucket policy or have a
+-- bucket policy that doesn\'t require server-side encryption of new
+-- objects. If a bucket policy exists, the policy doesn\'t require
+-- PutObject requests to include a valid server-side encryption header: the
+-- x-amz-server-side-encryption header with a value of AES256 or aws:kms,
+-- or the x-amz-server-side-encryption-customer-algorithm header with a
+-- value of AES256.
+--
+-- 'deniesUnencryptedObjectUploads', 'bucketCountPolicyAllowsUnencryptedObjectUploads_deniesUnencryptedObjectUploads' - The total number of buckets whose bucket policies require server-side
+-- encryption of new objects. PutObject requests for these buckets must
+-- include a valid server-side encryption header: the
+-- x-amz-server-side-encryption header with a value of AES256 or aws:kms,
+-- or the x-amz-server-side-encryption-customer-algorithm header with a
+-- value of AES256.
+--
+-- 'unknown', 'bucketCountPolicyAllowsUnencryptedObjectUploads_unknown' - The total number of buckets that Amazon Macie wasn\'t able to evaluate
+-- server-side encryption requirements for. Macie can\'t determine whether
+-- the bucket policies for these buckets require server-side encryption of
+-- new objects.
+newBucketCountPolicyAllowsUnencryptedObjectUploads ::
+  BucketCountPolicyAllowsUnencryptedObjectUploads
+newBucketCountPolicyAllowsUnencryptedObjectUploads =
+  BucketCountPolicyAllowsUnencryptedObjectUploads'
+    { allowsUnencryptedObjectUploads =
+        Prelude.Nothing,
+      deniesUnencryptedObjectUploads =
+        Prelude.Nothing,
+      unknown = Prelude.Nothing
+    }
+
+-- | The total number of buckets that don\'t have a bucket policy or have a
+-- bucket policy that doesn\'t require server-side encryption of new
+-- objects. If a bucket policy exists, the policy doesn\'t require
+-- PutObject requests to include a valid server-side encryption header: the
+-- x-amz-server-side-encryption header with a value of AES256 or aws:kms,
+-- or the x-amz-server-side-encryption-customer-algorithm header with a
+-- value of AES256.
+bucketCountPolicyAllowsUnencryptedObjectUploads_allowsUnencryptedObjectUploads :: Lens.Lens' BucketCountPolicyAllowsUnencryptedObjectUploads (Prelude.Maybe Prelude.Integer)
+bucketCountPolicyAllowsUnencryptedObjectUploads_allowsUnencryptedObjectUploads = Lens.lens (\BucketCountPolicyAllowsUnencryptedObjectUploads' {allowsUnencryptedObjectUploads} -> allowsUnencryptedObjectUploads) (\s@BucketCountPolicyAllowsUnencryptedObjectUploads' {} a -> s {allowsUnencryptedObjectUploads = a} :: BucketCountPolicyAllowsUnencryptedObjectUploads)
+
+-- | The total number of buckets whose bucket policies require server-side
+-- encryption of new objects. PutObject requests for these buckets must
+-- include a valid server-side encryption header: the
+-- x-amz-server-side-encryption header with a value of AES256 or aws:kms,
+-- or the x-amz-server-side-encryption-customer-algorithm header with a
+-- value of AES256.
+bucketCountPolicyAllowsUnencryptedObjectUploads_deniesUnencryptedObjectUploads :: Lens.Lens' BucketCountPolicyAllowsUnencryptedObjectUploads (Prelude.Maybe Prelude.Integer)
+bucketCountPolicyAllowsUnencryptedObjectUploads_deniesUnencryptedObjectUploads = Lens.lens (\BucketCountPolicyAllowsUnencryptedObjectUploads' {deniesUnencryptedObjectUploads} -> deniesUnencryptedObjectUploads) (\s@BucketCountPolicyAllowsUnencryptedObjectUploads' {} a -> s {deniesUnencryptedObjectUploads = a} :: BucketCountPolicyAllowsUnencryptedObjectUploads)
+
+-- | The total number of buckets that Amazon Macie wasn\'t able to evaluate
+-- server-side encryption requirements for. Macie can\'t determine whether
+-- the bucket policies for these buckets require server-side encryption of
+-- new objects.
+bucketCountPolicyAllowsUnencryptedObjectUploads_unknown :: Lens.Lens' BucketCountPolicyAllowsUnencryptedObjectUploads (Prelude.Maybe Prelude.Integer)
+bucketCountPolicyAllowsUnencryptedObjectUploads_unknown = Lens.lens (\BucketCountPolicyAllowsUnencryptedObjectUploads' {unknown} -> unknown) (\s@BucketCountPolicyAllowsUnencryptedObjectUploads' {} a -> s {unknown = a} :: BucketCountPolicyAllowsUnencryptedObjectUploads)
+
+instance
+  Data.FromJSON
+    BucketCountPolicyAllowsUnencryptedObjectUploads
+  where
+  parseJSON =
+    Data.withObject
+      "BucketCountPolicyAllowsUnencryptedObjectUploads"
+      ( \x ->
+          BucketCountPolicyAllowsUnencryptedObjectUploads'
+            Prelude.<$> (x Data..:? "allowsUnencryptedObjectUploads")
+            Prelude.<*> (x Data..:? "deniesUnencryptedObjectUploads")
+            Prelude.<*> (x Data..:? "unknown")
+      )
+
+instance
+  Prelude.Hashable
+    BucketCountPolicyAllowsUnencryptedObjectUploads
+  where
+  hashWithSalt
+    _salt
+    BucketCountPolicyAllowsUnencryptedObjectUploads' {..} =
+      _salt
+        `Prelude.hashWithSalt` allowsUnencryptedObjectUploads
+        `Prelude.hashWithSalt` deniesUnencryptedObjectUploads
+        `Prelude.hashWithSalt` unknown
+
+instance
+  Prelude.NFData
+    BucketCountPolicyAllowsUnencryptedObjectUploads
+  where
+  rnf
+    BucketCountPolicyAllowsUnencryptedObjectUploads' {..} =
+      Prelude.rnf allowsUnencryptedObjectUploads
+        `Prelude.seq` Prelude.rnf deniesUnencryptedObjectUploads
+        `Prelude.seq` Prelude.rnf unknown
diff --git a/gen/Amazonka/MacieV2/Types/BucketCriteriaAdditionalProperties.hs b/gen/Amazonka/MacieV2/Types/BucketCriteriaAdditionalProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/BucketCriteriaAdditionalProperties.hs
@@ -0,0 +1,168 @@
+{-# 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.MacieV2.Types.BucketCriteriaAdditionalProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.BucketCriteriaAdditionalProperties where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the operator to use in a property-based condition that filters
+-- the results of a query for information about S3 buckets.
+--
+-- /See:/ 'newBucketCriteriaAdditionalProperties' smart constructor.
+data BucketCriteriaAdditionalProperties = BucketCriteriaAdditionalProperties'
+  { -- | The value for the property matches (equals) the specified value. If you
+    -- specify multiple values, Amazon Macie uses OR logic to join the values.
+    eq :: Prelude.Maybe [Prelude.Text],
+    -- | The value for the property is greater than the specified value.
+    gt :: Prelude.Maybe Prelude.Integer,
+    -- | The value for the property is greater than or equal to the specified
+    -- value.
+    gte :: Prelude.Maybe Prelude.Integer,
+    -- | The value for the property is less than the specified value.
+    lt :: Prelude.Maybe Prelude.Integer,
+    -- | The value for the property is less than or equal to the specified value.
+    lte :: Prelude.Maybe Prelude.Integer,
+    -- | The value for the property doesn\'t match (doesn\'t equal) the specified
+    -- value. If you specify multiple values, Amazon Macie uses OR logic to
+    -- join the values.
+    neq :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the bucket begins with the specified value.
+    prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BucketCriteriaAdditionalProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eq', 'bucketCriteriaAdditionalProperties_eq' - The value for the property matches (equals) the specified value. If you
+-- specify multiple values, Amazon Macie uses OR logic to join the values.
+--
+-- 'gt', 'bucketCriteriaAdditionalProperties_gt' - The value for the property is greater than the specified value.
+--
+-- 'gte', 'bucketCriteriaAdditionalProperties_gte' - The value for the property is greater than or equal to the specified
+-- value.
+--
+-- 'lt', 'bucketCriteriaAdditionalProperties_lt' - The value for the property is less than the specified value.
+--
+-- 'lte', 'bucketCriteriaAdditionalProperties_lte' - The value for the property is less than or equal to the specified value.
+--
+-- 'neq', 'bucketCriteriaAdditionalProperties_neq' - The value for the property doesn\'t match (doesn\'t equal) the specified
+-- value. If you specify multiple values, Amazon Macie uses OR logic to
+-- join the values.
+--
+-- 'prefix', 'bucketCriteriaAdditionalProperties_prefix' - The name of the bucket begins with the specified value.
+newBucketCriteriaAdditionalProperties ::
+  BucketCriteriaAdditionalProperties
+newBucketCriteriaAdditionalProperties =
+  BucketCriteriaAdditionalProperties'
+    { eq =
+        Prelude.Nothing,
+      gt = Prelude.Nothing,
+      gte = Prelude.Nothing,
+      lt = Prelude.Nothing,
+      lte = Prelude.Nothing,
+      neq = Prelude.Nothing,
+      prefix = Prelude.Nothing
+    }
+
+-- | The value for the property matches (equals) the specified value. If you
+-- specify multiple values, Amazon Macie uses OR logic to join the values.
+bucketCriteriaAdditionalProperties_eq :: Lens.Lens' BucketCriteriaAdditionalProperties (Prelude.Maybe [Prelude.Text])
+bucketCriteriaAdditionalProperties_eq = Lens.lens (\BucketCriteriaAdditionalProperties' {eq} -> eq) (\s@BucketCriteriaAdditionalProperties' {} a -> s {eq = a} :: BucketCriteriaAdditionalProperties) Prelude.. Lens.mapping Lens.coerced
+
+-- | The value for the property is greater than the specified value.
+bucketCriteriaAdditionalProperties_gt :: Lens.Lens' BucketCriteriaAdditionalProperties (Prelude.Maybe Prelude.Integer)
+bucketCriteriaAdditionalProperties_gt = Lens.lens (\BucketCriteriaAdditionalProperties' {gt} -> gt) (\s@BucketCriteriaAdditionalProperties' {} a -> s {gt = a} :: BucketCriteriaAdditionalProperties)
+
+-- | The value for the property is greater than or equal to the specified
+-- value.
+bucketCriteriaAdditionalProperties_gte :: Lens.Lens' BucketCriteriaAdditionalProperties (Prelude.Maybe Prelude.Integer)
+bucketCriteriaAdditionalProperties_gte = Lens.lens (\BucketCriteriaAdditionalProperties' {gte} -> gte) (\s@BucketCriteriaAdditionalProperties' {} a -> s {gte = a} :: BucketCriteriaAdditionalProperties)
+
+-- | The value for the property is less than the specified value.
+bucketCriteriaAdditionalProperties_lt :: Lens.Lens' BucketCriteriaAdditionalProperties (Prelude.Maybe Prelude.Integer)
+bucketCriteriaAdditionalProperties_lt = Lens.lens (\BucketCriteriaAdditionalProperties' {lt} -> lt) (\s@BucketCriteriaAdditionalProperties' {} a -> s {lt = a} :: BucketCriteriaAdditionalProperties)
+
+-- | The value for the property is less than or equal to the specified value.
+bucketCriteriaAdditionalProperties_lte :: Lens.Lens' BucketCriteriaAdditionalProperties (Prelude.Maybe Prelude.Integer)
+bucketCriteriaAdditionalProperties_lte = Lens.lens (\BucketCriteriaAdditionalProperties' {lte} -> lte) (\s@BucketCriteriaAdditionalProperties' {} a -> s {lte = a} :: BucketCriteriaAdditionalProperties)
+
+-- | The value for the property doesn\'t match (doesn\'t equal) the specified
+-- value. If you specify multiple values, Amazon Macie uses OR logic to
+-- join the values.
+bucketCriteriaAdditionalProperties_neq :: Lens.Lens' BucketCriteriaAdditionalProperties (Prelude.Maybe [Prelude.Text])
+bucketCriteriaAdditionalProperties_neq = Lens.lens (\BucketCriteriaAdditionalProperties' {neq} -> neq) (\s@BucketCriteriaAdditionalProperties' {} a -> s {neq = a} :: BucketCriteriaAdditionalProperties) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the bucket begins with the specified value.
+bucketCriteriaAdditionalProperties_prefix :: Lens.Lens' BucketCriteriaAdditionalProperties (Prelude.Maybe Prelude.Text)
+bucketCriteriaAdditionalProperties_prefix = Lens.lens (\BucketCriteriaAdditionalProperties' {prefix} -> prefix) (\s@BucketCriteriaAdditionalProperties' {} a -> s {prefix = a} :: BucketCriteriaAdditionalProperties)
+
+instance
+  Prelude.Hashable
+    BucketCriteriaAdditionalProperties
+  where
+  hashWithSalt
+    _salt
+    BucketCriteriaAdditionalProperties' {..} =
+      _salt
+        `Prelude.hashWithSalt` eq
+        `Prelude.hashWithSalt` gt
+        `Prelude.hashWithSalt` gte
+        `Prelude.hashWithSalt` lt
+        `Prelude.hashWithSalt` lte
+        `Prelude.hashWithSalt` neq
+        `Prelude.hashWithSalt` prefix
+
+instance
+  Prelude.NFData
+    BucketCriteriaAdditionalProperties
+  where
+  rnf BucketCriteriaAdditionalProperties' {..} =
+    Prelude.rnf eq
+      `Prelude.seq` Prelude.rnf gt
+      `Prelude.seq` Prelude.rnf gte
+      `Prelude.seq` Prelude.rnf lt
+      `Prelude.seq` Prelude.rnf lte
+      `Prelude.seq` Prelude.rnf neq
+      `Prelude.seq` Prelude.rnf prefix
+
+instance
+  Data.ToJSON
+    BucketCriteriaAdditionalProperties
+  where
+  toJSON BucketCriteriaAdditionalProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("eq" Data..=) Prelude.<$> eq,
+            ("gt" Data..=) Prelude.<$> gt,
+            ("gte" Data..=) Prelude.<$> gte,
+            ("lt" Data..=) Prelude.<$> lt,
+            ("lte" Data..=) Prelude.<$> lte,
+            ("neq" Data..=) Prelude.<$> neq,
+            ("prefix" Data..=) Prelude.<$> prefix
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/BucketLevelPermissions.hs b/gen/Amazonka/MacieV2/Types/BucketLevelPermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/BucketLevelPermissions.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.MacieV2.Types.BucketLevelPermissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.BucketLevelPermissions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.AccessControlList
+import Amazonka.MacieV2.Types.BlockPublicAccess
+import Amazonka.MacieV2.Types.BucketPolicy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the bucket-level permissions settings for an
+-- S3 bucket.
+--
+-- /See:/ 'newBucketLevelPermissions' smart constructor.
+data BucketLevelPermissions = BucketLevelPermissions'
+  { -- | The permissions settings of the access control list (ACL) for the
+    -- bucket. This value is null if an ACL hasn\'t been defined for the
+    -- bucket.
+    accessControlList :: Prelude.Maybe AccessControlList,
+    -- | The block public access settings for the bucket.
+    blockPublicAccess :: Prelude.Maybe BlockPublicAccess,
+    -- | The permissions settings of the bucket policy for the bucket. This value
+    -- is null if a bucket policy hasn\'t been defined for the bucket.
+    bucketPolicy :: Prelude.Maybe BucketPolicy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BucketLevelPermissions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessControlList', 'bucketLevelPermissions_accessControlList' - The permissions settings of the access control list (ACL) for the
+-- bucket. This value is null if an ACL hasn\'t been defined for the
+-- bucket.
+--
+-- 'blockPublicAccess', 'bucketLevelPermissions_blockPublicAccess' - The block public access settings for the bucket.
+--
+-- 'bucketPolicy', 'bucketLevelPermissions_bucketPolicy' - The permissions settings of the bucket policy for the bucket. This value
+-- is null if a bucket policy hasn\'t been defined for the bucket.
+newBucketLevelPermissions ::
+  BucketLevelPermissions
+newBucketLevelPermissions =
+  BucketLevelPermissions'
+    { accessControlList =
+        Prelude.Nothing,
+      blockPublicAccess = Prelude.Nothing,
+      bucketPolicy = Prelude.Nothing
+    }
+
+-- | The permissions settings of the access control list (ACL) for the
+-- bucket. This value is null if an ACL hasn\'t been defined for the
+-- bucket.
+bucketLevelPermissions_accessControlList :: Lens.Lens' BucketLevelPermissions (Prelude.Maybe AccessControlList)
+bucketLevelPermissions_accessControlList = Lens.lens (\BucketLevelPermissions' {accessControlList} -> accessControlList) (\s@BucketLevelPermissions' {} a -> s {accessControlList = a} :: BucketLevelPermissions)
+
+-- | The block public access settings for the bucket.
+bucketLevelPermissions_blockPublicAccess :: Lens.Lens' BucketLevelPermissions (Prelude.Maybe BlockPublicAccess)
+bucketLevelPermissions_blockPublicAccess = Lens.lens (\BucketLevelPermissions' {blockPublicAccess} -> blockPublicAccess) (\s@BucketLevelPermissions' {} a -> s {blockPublicAccess = a} :: BucketLevelPermissions)
+
+-- | The permissions settings of the bucket policy for the bucket. This value
+-- is null if a bucket policy hasn\'t been defined for the bucket.
+bucketLevelPermissions_bucketPolicy :: Lens.Lens' BucketLevelPermissions (Prelude.Maybe BucketPolicy)
+bucketLevelPermissions_bucketPolicy = Lens.lens (\BucketLevelPermissions' {bucketPolicy} -> bucketPolicy) (\s@BucketLevelPermissions' {} a -> s {bucketPolicy = a} :: BucketLevelPermissions)
+
+instance Data.FromJSON BucketLevelPermissions where
+  parseJSON =
+    Data.withObject
+      "BucketLevelPermissions"
+      ( \x ->
+          BucketLevelPermissions'
+            Prelude.<$> (x Data..:? "accessControlList")
+            Prelude.<*> (x Data..:? "blockPublicAccess")
+            Prelude.<*> (x Data..:? "bucketPolicy")
+      )
+
+instance Prelude.Hashable BucketLevelPermissions where
+  hashWithSalt _salt BucketLevelPermissions' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessControlList
+      `Prelude.hashWithSalt` blockPublicAccess
+      `Prelude.hashWithSalt` bucketPolicy
+
+instance Prelude.NFData BucketLevelPermissions where
+  rnf BucketLevelPermissions' {..} =
+    Prelude.rnf accessControlList
+      `Prelude.seq` Prelude.rnf blockPublicAccess
+      `Prelude.seq` Prelude.rnf bucketPolicy
diff --git a/gen/Amazonka/MacieV2/Types/BucketMetadata.hs b/gen/Amazonka/MacieV2/Types/BucketMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/BucketMetadata.hs
@@ -0,0 +1,648 @@
+{-# 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.MacieV2.Types.BucketMetadata
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.BucketMetadata where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.AllowsUnencryptedObjectUploads
+import Amazonka.MacieV2.Types.BucketMetadataErrorCode
+import Amazonka.MacieV2.Types.BucketPublicAccess
+import Amazonka.MacieV2.Types.BucketServerSideEncryption
+import Amazonka.MacieV2.Types.JobDetails
+import Amazonka.MacieV2.Types.KeyValuePair
+import Amazonka.MacieV2.Types.ObjectCountByEncryptionType
+import Amazonka.MacieV2.Types.ObjectLevelStatistics
+import Amazonka.MacieV2.Types.ReplicationDetails
+import Amazonka.MacieV2.Types.SharedAccess
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides statistical data and other information about an S3 bucket that
+-- Amazon Macie monitors and analyzes for your account. If an error occurs
+-- when Macie attempts to retrieve and process metadata from Amazon S3 for
+-- the bucket and the bucket\'s objects, the value for the versioning
+-- property is false and the value for most other properties is null. Key
+-- exceptions are accountId, bucketArn, bucketCreatedAt, bucketName,
+-- lastUpdated, and region. To identify the cause of the error, refer to
+-- the errorCode and errorMessage values.
+--
+-- /See:/ 'newBucketMetadata' smart constructor.
+data BucketMetadata = BucketMetadata'
+  { -- | The unique identifier for the Amazon Web Services account that owns the
+    -- bucket.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether the bucket policy for the bucket requires server-side
+    -- encryption of objects when objects are uploaded to the bucket. Possible
+    -- values are:
+    --
+    -- -   FALSE - The bucket policy requires server-side encryption of new
+    --     objects. PutObject requests must include a valid server-side
+    --     encryption header.
+    --
+    -- -   TRUE - The bucket doesn\'t have a bucket policy or it has a bucket
+    --     policy that doesn\'t require server-side encryption of new objects.
+    --     If a bucket policy exists, it doesn\'t require PutObject requests to
+    --     include a valid server-side encryption header.
+    --
+    -- -   UNKNOWN - Amazon Macie can\'t determine whether the bucket policy
+    --     requires server-side encryption of new objects.
+    --
+    -- Valid server-side encryption headers are: x-amz-server-side-encryption
+    -- with a value of AES256 or aws:kms, and
+    -- x-amz-server-side-encryption-customer-algorithm with a value of AES256.
+    allowsUnencryptedObjectUploads :: Prelude.Maybe AllowsUnencryptedObjectUploads,
+    -- | The Amazon Resource Name (ARN) of the bucket.
+    bucketArn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in UTC and extended ISO 8601 format, when the bucket
+    -- was created, or changes such as edits to the bucket\'s policy were most
+    -- recently made to the bucket.
+    bucketCreatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The name of the bucket.
+    bucketName :: Prelude.Maybe Prelude.Text,
+    -- | The total number of objects that Amazon Macie can analyze in the bucket.
+    -- These objects use a supported storage class and have a file name
+    -- extension for a supported file or storage format.
+    classifiableObjectCount :: Prelude.Maybe Prelude.Integer,
+    -- | The total storage size, in bytes, of the objects that Amazon Macie can
+    -- analyze in the bucket. These objects use a supported storage class and
+    -- have a file name extension for a supported file or storage format.
+    --
+    -- If versioning is enabled for the bucket, Macie calculates this value
+    -- based on the size of the latest version of each applicable object in the
+    -- bucket. This value doesn\'t reflect the storage size of all versions of
+    -- each applicable object in the bucket.
+    classifiableSizeInBytes :: Prelude.Maybe Prelude.Integer,
+    -- | Specifies the error code for an error that prevented Amazon Macie from
+    -- retrieving and processing information about the bucket and the bucket\'s
+    -- objects. If this value is ACCESS_DENIED, Macie doesn\'t have permission
+    -- to retrieve the information. For example, the bucket has a restrictive
+    -- bucket policy and Amazon S3 denied the request. If this value is null,
+    -- Macie was able to retrieve and process the information.
+    errorCode :: Prelude.Maybe BucketMetadataErrorCode,
+    -- | A brief description of the error (errorCode) that prevented Amazon Macie
+    -- from retrieving and processing information about the bucket and the
+    -- bucket\'s objects. This value is null if Macie was able to retrieve and
+    -- process the information.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether any one-time or recurring classification jobs are
+    -- configured to analyze data in the bucket, and, if so, the details of the
+    -- job that ran most recently.
+    jobDetails :: Prelude.Maybe JobDetails,
+    -- | The date and time, in UTC and extended ISO 8601 format, when Amazon
+    -- Macie most recently performed automated sensitive data discovery for the
+    -- bucket. This value is null if automated sensitive data discovery is
+    -- currently disabled for your account.
+    lastAutomatedDiscoveryTime :: Prelude.Maybe Data.ISO8601,
+    -- | The date and time, in UTC and extended ISO 8601 format, when Amazon
+    -- Macie most recently retrieved both bucket and object metadata from
+    -- Amazon S3 for the bucket.
+    lastUpdated :: Prelude.Maybe Data.ISO8601,
+    -- | The total number of objects in the bucket.
+    objectCount :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of objects that are in the bucket, grouped by
+    -- server-side encryption type. This includes a grouping that reports the
+    -- total number of objects that aren\'t encrypted or use client-side
+    -- encryption.
+    objectCountByEncryptionType :: Prelude.Maybe ObjectCountByEncryptionType,
+    -- | Specifies whether the bucket is publicly accessible due to the
+    -- combination of permissions settings that apply to the bucket, and
+    -- provides information about those settings.
+    publicAccess :: Prelude.Maybe BucketPublicAccess,
+    -- | The Amazon Web Services Region that hosts the bucket.
+    region :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether the bucket is configured to replicate one or more
+    -- objects to buckets for other Amazon Web Services accounts and, if so,
+    -- which accounts.
+    replicationDetails :: Prelude.Maybe ReplicationDetails,
+    -- | The sensitivity score for the bucket, ranging from -1 (no analysis due
+    -- to an error) to 100 (sensitive). This value is null if automated
+    -- sensitive data discovery is currently disabled for your account.
+    sensitivityScore :: Prelude.Maybe Prelude.Int,
+    -- | Specifies whether the bucket encrypts new objects by default and, if so,
+    -- the type of server-side encryption that\'s used.
+    serverSideEncryption :: Prelude.Maybe BucketServerSideEncryption,
+    -- | Specifies whether the bucket is shared with another Amazon Web Services
+    -- account. Possible values are:
+    --
+    -- -   EXTERNAL - The bucket is shared with an Amazon Web Services account
+    --     that isn\'t part of the same Amazon Macie organization.
+    --
+    -- -   INTERNAL - The bucket is shared with an Amazon Web Services account
+    --     that\'s part of the same Amazon Macie organization.
+    --
+    -- -   NOT_SHARED - The bucket isn\'t shared with other Amazon Web Services
+    --     accounts.
+    --
+    -- -   UNKNOWN - Amazon Macie wasn\'t able to evaluate the shared access
+    --     settings for the bucket.
+    sharedAccess :: Prelude.Maybe SharedAccess,
+    -- | The total storage size, in bytes, of the bucket.
+    --
+    -- If versioning is enabled for the bucket, Amazon Macie calculates this
+    -- value based on the size of the latest version of each object in the
+    -- bucket. This value doesn\'t reflect the storage size of all versions of
+    -- each object in the bucket.
+    sizeInBytes :: Prelude.Maybe Prelude.Integer,
+    -- | The total storage size, in bytes, of the objects that are compressed
+    -- (.gz, .gzip, .zip) files in the bucket.
+    --
+    -- If versioning is enabled for the bucket, Amazon Macie calculates this
+    -- value based on the size of the latest version of each applicable object
+    -- in the bucket. This value doesn\'t reflect the storage size of all
+    -- versions of each applicable object in the bucket.
+    sizeInBytesCompressed :: Prelude.Maybe Prelude.Integer,
+    -- | An array that specifies the tags (keys and values) that are associated
+    -- with the bucket.
+    tags :: Prelude.Maybe [KeyValuePair],
+    -- | The total number of objects that Amazon Macie can\'t analyze in the
+    -- bucket. These objects don\'t use a supported storage class or don\'t
+    -- have a file name extension for a supported file or storage format.
+    unclassifiableObjectCount :: Prelude.Maybe ObjectLevelStatistics,
+    -- | The total storage size, in bytes, of the objects that Amazon Macie
+    -- can\'t analyze in the bucket. These objects don\'t use a supported
+    -- storage class or don\'t have a file name extension for a supported file
+    -- or storage format.
+    unclassifiableObjectSizeInBytes :: Prelude.Maybe ObjectLevelStatistics,
+    -- | Specifies whether versioning is enabled for the bucket.
+    versioning :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BucketMetadata' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'bucketMetadata_accountId' - The unique identifier for the Amazon Web Services account that owns the
+-- bucket.
+--
+-- 'allowsUnencryptedObjectUploads', 'bucketMetadata_allowsUnencryptedObjectUploads' - Specifies whether the bucket policy for the bucket requires server-side
+-- encryption of objects when objects are uploaded to the bucket. Possible
+-- values are:
+--
+-- -   FALSE - The bucket policy requires server-side encryption of new
+--     objects. PutObject requests must include a valid server-side
+--     encryption header.
+--
+-- -   TRUE - The bucket doesn\'t have a bucket policy or it has a bucket
+--     policy that doesn\'t require server-side encryption of new objects.
+--     If a bucket policy exists, it doesn\'t require PutObject requests to
+--     include a valid server-side encryption header.
+--
+-- -   UNKNOWN - Amazon Macie can\'t determine whether the bucket policy
+--     requires server-side encryption of new objects.
+--
+-- Valid server-side encryption headers are: x-amz-server-side-encryption
+-- with a value of AES256 or aws:kms, and
+-- x-amz-server-side-encryption-customer-algorithm with a value of AES256.
+--
+-- 'bucketArn', 'bucketMetadata_bucketArn' - The Amazon Resource Name (ARN) of the bucket.
+--
+-- 'bucketCreatedAt', 'bucketMetadata_bucketCreatedAt' - The date and time, in UTC and extended ISO 8601 format, when the bucket
+-- was created, or changes such as edits to the bucket\'s policy were most
+-- recently made to the bucket.
+--
+-- 'bucketName', 'bucketMetadata_bucketName' - The name of the bucket.
+--
+-- 'classifiableObjectCount', 'bucketMetadata_classifiableObjectCount' - The total number of objects that Amazon Macie can analyze in the bucket.
+-- These objects use a supported storage class and have a file name
+-- extension for a supported file or storage format.
+--
+-- 'classifiableSizeInBytes', 'bucketMetadata_classifiableSizeInBytes' - The total storage size, in bytes, of the objects that Amazon Macie can
+-- analyze in the bucket. These objects use a supported storage class and
+-- have a file name extension for a supported file or storage format.
+--
+-- If versioning is enabled for the bucket, Macie calculates this value
+-- based on the size of the latest version of each applicable object in the
+-- bucket. This value doesn\'t reflect the storage size of all versions of
+-- each applicable object in the bucket.
+--
+-- 'errorCode', 'bucketMetadata_errorCode' - Specifies the error code for an error that prevented Amazon Macie from
+-- retrieving and processing information about the bucket and the bucket\'s
+-- objects. If this value is ACCESS_DENIED, Macie doesn\'t have permission
+-- to retrieve the information. For example, the bucket has a restrictive
+-- bucket policy and Amazon S3 denied the request. If this value is null,
+-- Macie was able to retrieve and process the information.
+--
+-- 'errorMessage', 'bucketMetadata_errorMessage' - A brief description of the error (errorCode) that prevented Amazon Macie
+-- from retrieving and processing information about the bucket and the
+-- bucket\'s objects. This value is null if Macie was able to retrieve and
+-- process the information.
+--
+-- 'jobDetails', 'bucketMetadata_jobDetails' - Specifies whether any one-time or recurring classification jobs are
+-- configured to analyze data in the bucket, and, if so, the details of the
+-- job that ran most recently.
+--
+-- 'lastAutomatedDiscoveryTime', 'bucketMetadata_lastAutomatedDiscoveryTime' - The date and time, in UTC and extended ISO 8601 format, when Amazon
+-- Macie most recently performed automated sensitive data discovery for the
+-- bucket. This value is null if automated sensitive data discovery is
+-- currently disabled for your account.
+--
+-- 'lastUpdated', 'bucketMetadata_lastUpdated' - The date and time, in UTC and extended ISO 8601 format, when Amazon
+-- Macie most recently retrieved both bucket and object metadata from
+-- Amazon S3 for the bucket.
+--
+-- 'objectCount', 'bucketMetadata_objectCount' - The total number of objects in the bucket.
+--
+-- 'objectCountByEncryptionType', 'bucketMetadata_objectCountByEncryptionType' - The total number of objects that are in the bucket, grouped by
+-- server-side encryption type. This includes a grouping that reports the
+-- total number of objects that aren\'t encrypted or use client-side
+-- encryption.
+--
+-- 'publicAccess', 'bucketMetadata_publicAccess' - Specifies whether the bucket is publicly accessible due to the
+-- combination of permissions settings that apply to the bucket, and
+-- provides information about those settings.
+--
+-- 'region', 'bucketMetadata_region' - The Amazon Web Services Region that hosts the bucket.
+--
+-- 'replicationDetails', 'bucketMetadata_replicationDetails' - Specifies whether the bucket is configured to replicate one or more
+-- objects to buckets for other Amazon Web Services accounts and, if so,
+-- which accounts.
+--
+-- 'sensitivityScore', 'bucketMetadata_sensitivityScore' - The sensitivity score for the bucket, ranging from -1 (no analysis due
+-- to an error) to 100 (sensitive). This value is null if automated
+-- sensitive data discovery is currently disabled for your account.
+--
+-- 'serverSideEncryption', 'bucketMetadata_serverSideEncryption' - Specifies whether the bucket encrypts new objects by default and, if so,
+-- the type of server-side encryption that\'s used.
+--
+-- 'sharedAccess', 'bucketMetadata_sharedAccess' - Specifies whether the bucket is shared with another Amazon Web Services
+-- account. Possible values are:
+--
+-- -   EXTERNAL - The bucket is shared with an Amazon Web Services account
+--     that isn\'t part of the same Amazon Macie organization.
+--
+-- -   INTERNAL - The bucket is shared with an Amazon Web Services account
+--     that\'s part of the same Amazon Macie organization.
+--
+-- -   NOT_SHARED - The bucket isn\'t shared with other Amazon Web Services
+--     accounts.
+--
+-- -   UNKNOWN - Amazon Macie wasn\'t able to evaluate the shared access
+--     settings for the bucket.
+--
+-- 'sizeInBytes', 'bucketMetadata_sizeInBytes' - The total storage size, in bytes, of the bucket.
+--
+-- If versioning is enabled for the bucket, Amazon Macie calculates this
+-- value based on the size of the latest version of each object in the
+-- bucket. This value doesn\'t reflect the storage size of all versions of
+-- each object in the bucket.
+--
+-- 'sizeInBytesCompressed', 'bucketMetadata_sizeInBytesCompressed' - The total storage size, in bytes, of the objects that are compressed
+-- (.gz, .gzip, .zip) files in the bucket.
+--
+-- If versioning is enabled for the bucket, Amazon Macie calculates this
+-- value based on the size of the latest version of each applicable object
+-- in the bucket. This value doesn\'t reflect the storage size of all
+-- versions of each applicable object in the bucket.
+--
+-- 'tags', 'bucketMetadata_tags' - An array that specifies the tags (keys and values) that are associated
+-- with the bucket.
+--
+-- 'unclassifiableObjectCount', 'bucketMetadata_unclassifiableObjectCount' - The total number of objects that Amazon Macie can\'t analyze in the
+-- bucket. These objects don\'t use a supported storage class or don\'t
+-- have a file name extension for a supported file or storage format.
+--
+-- 'unclassifiableObjectSizeInBytes', 'bucketMetadata_unclassifiableObjectSizeInBytes' - The total storage size, in bytes, of the objects that Amazon Macie
+-- can\'t analyze in the bucket. These objects don\'t use a supported
+-- storage class or don\'t have a file name extension for a supported file
+-- or storage format.
+--
+-- 'versioning', 'bucketMetadata_versioning' - Specifies whether versioning is enabled for the bucket.
+newBucketMetadata ::
+  BucketMetadata
+newBucketMetadata =
+  BucketMetadata'
+    { accountId = Prelude.Nothing,
+      allowsUnencryptedObjectUploads = Prelude.Nothing,
+      bucketArn = Prelude.Nothing,
+      bucketCreatedAt = Prelude.Nothing,
+      bucketName = Prelude.Nothing,
+      classifiableObjectCount = Prelude.Nothing,
+      classifiableSizeInBytes = Prelude.Nothing,
+      errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      jobDetails = Prelude.Nothing,
+      lastAutomatedDiscoveryTime = Prelude.Nothing,
+      lastUpdated = Prelude.Nothing,
+      objectCount = Prelude.Nothing,
+      objectCountByEncryptionType = Prelude.Nothing,
+      publicAccess = Prelude.Nothing,
+      region = Prelude.Nothing,
+      replicationDetails = Prelude.Nothing,
+      sensitivityScore = Prelude.Nothing,
+      serverSideEncryption = Prelude.Nothing,
+      sharedAccess = Prelude.Nothing,
+      sizeInBytes = Prelude.Nothing,
+      sizeInBytesCompressed = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      unclassifiableObjectCount = Prelude.Nothing,
+      unclassifiableObjectSizeInBytes = Prelude.Nothing,
+      versioning = Prelude.Nothing
+    }
+
+-- | The unique identifier for the Amazon Web Services account that owns the
+-- bucket.
+bucketMetadata_accountId :: Lens.Lens' BucketMetadata (Prelude.Maybe Prelude.Text)
+bucketMetadata_accountId = Lens.lens (\BucketMetadata' {accountId} -> accountId) (\s@BucketMetadata' {} a -> s {accountId = a} :: BucketMetadata)
+
+-- | Specifies whether the bucket policy for the bucket requires server-side
+-- encryption of objects when objects are uploaded to the bucket. Possible
+-- values are:
+--
+-- -   FALSE - The bucket policy requires server-side encryption of new
+--     objects. PutObject requests must include a valid server-side
+--     encryption header.
+--
+-- -   TRUE - The bucket doesn\'t have a bucket policy or it has a bucket
+--     policy that doesn\'t require server-side encryption of new objects.
+--     If a bucket policy exists, it doesn\'t require PutObject requests to
+--     include a valid server-side encryption header.
+--
+-- -   UNKNOWN - Amazon Macie can\'t determine whether the bucket policy
+--     requires server-side encryption of new objects.
+--
+-- Valid server-side encryption headers are: x-amz-server-side-encryption
+-- with a value of AES256 or aws:kms, and
+-- x-amz-server-side-encryption-customer-algorithm with a value of AES256.
+bucketMetadata_allowsUnencryptedObjectUploads :: Lens.Lens' BucketMetadata (Prelude.Maybe AllowsUnencryptedObjectUploads)
+bucketMetadata_allowsUnencryptedObjectUploads = Lens.lens (\BucketMetadata' {allowsUnencryptedObjectUploads} -> allowsUnencryptedObjectUploads) (\s@BucketMetadata' {} a -> s {allowsUnencryptedObjectUploads = a} :: BucketMetadata)
+
+-- | The Amazon Resource Name (ARN) of the bucket.
+bucketMetadata_bucketArn :: Lens.Lens' BucketMetadata (Prelude.Maybe Prelude.Text)
+bucketMetadata_bucketArn = Lens.lens (\BucketMetadata' {bucketArn} -> bucketArn) (\s@BucketMetadata' {} a -> s {bucketArn = a} :: BucketMetadata)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the bucket
+-- was created, or changes such as edits to the bucket\'s policy were most
+-- recently made to the bucket.
+bucketMetadata_bucketCreatedAt :: Lens.Lens' BucketMetadata (Prelude.Maybe Prelude.UTCTime)
+bucketMetadata_bucketCreatedAt = Lens.lens (\BucketMetadata' {bucketCreatedAt} -> bucketCreatedAt) (\s@BucketMetadata' {} a -> s {bucketCreatedAt = a} :: BucketMetadata) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the bucket.
+bucketMetadata_bucketName :: Lens.Lens' BucketMetadata (Prelude.Maybe Prelude.Text)
+bucketMetadata_bucketName = Lens.lens (\BucketMetadata' {bucketName} -> bucketName) (\s@BucketMetadata' {} a -> s {bucketName = a} :: BucketMetadata)
+
+-- | The total number of objects that Amazon Macie can analyze in the bucket.
+-- These objects use a supported storage class and have a file name
+-- extension for a supported file or storage format.
+bucketMetadata_classifiableObjectCount :: Lens.Lens' BucketMetadata (Prelude.Maybe Prelude.Integer)
+bucketMetadata_classifiableObjectCount = Lens.lens (\BucketMetadata' {classifiableObjectCount} -> classifiableObjectCount) (\s@BucketMetadata' {} a -> s {classifiableObjectCount = a} :: BucketMetadata)
+
+-- | The total storage size, in bytes, of the objects that Amazon Macie can
+-- analyze in the bucket. These objects use a supported storage class and
+-- have a file name extension for a supported file or storage format.
+--
+-- If versioning is enabled for the bucket, Macie calculates this value
+-- based on the size of the latest version of each applicable object in the
+-- bucket. This value doesn\'t reflect the storage size of all versions of
+-- each applicable object in the bucket.
+bucketMetadata_classifiableSizeInBytes :: Lens.Lens' BucketMetadata (Prelude.Maybe Prelude.Integer)
+bucketMetadata_classifiableSizeInBytes = Lens.lens (\BucketMetadata' {classifiableSizeInBytes} -> classifiableSizeInBytes) (\s@BucketMetadata' {} a -> s {classifiableSizeInBytes = a} :: BucketMetadata)
+
+-- | Specifies the error code for an error that prevented Amazon Macie from
+-- retrieving and processing information about the bucket and the bucket\'s
+-- objects. If this value is ACCESS_DENIED, Macie doesn\'t have permission
+-- to retrieve the information. For example, the bucket has a restrictive
+-- bucket policy and Amazon S3 denied the request. If this value is null,
+-- Macie was able to retrieve and process the information.
+bucketMetadata_errorCode :: Lens.Lens' BucketMetadata (Prelude.Maybe BucketMetadataErrorCode)
+bucketMetadata_errorCode = Lens.lens (\BucketMetadata' {errorCode} -> errorCode) (\s@BucketMetadata' {} a -> s {errorCode = a} :: BucketMetadata)
+
+-- | A brief description of the error (errorCode) that prevented Amazon Macie
+-- from retrieving and processing information about the bucket and the
+-- bucket\'s objects. This value is null if Macie was able to retrieve and
+-- process the information.
+bucketMetadata_errorMessage :: Lens.Lens' BucketMetadata (Prelude.Maybe Prelude.Text)
+bucketMetadata_errorMessage = Lens.lens (\BucketMetadata' {errorMessage} -> errorMessage) (\s@BucketMetadata' {} a -> s {errorMessage = a} :: BucketMetadata)
+
+-- | Specifies whether any one-time or recurring classification jobs are
+-- configured to analyze data in the bucket, and, if so, the details of the
+-- job that ran most recently.
+bucketMetadata_jobDetails :: Lens.Lens' BucketMetadata (Prelude.Maybe JobDetails)
+bucketMetadata_jobDetails = Lens.lens (\BucketMetadata' {jobDetails} -> jobDetails) (\s@BucketMetadata' {} a -> s {jobDetails = a} :: BucketMetadata)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when Amazon
+-- Macie most recently performed automated sensitive data discovery for the
+-- bucket. This value is null if automated sensitive data discovery is
+-- currently disabled for your account.
+bucketMetadata_lastAutomatedDiscoveryTime :: Lens.Lens' BucketMetadata (Prelude.Maybe Prelude.UTCTime)
+bucketMetadata_lastAutomatedDiscoveryTime = Lens.lens (\BucketMetadata' {lastAutomatedDiscoveryTime} -> lastAutomatedDiscoveryTime) (\s@BucketMetadata' {} a -> s {lastAutomatedDiscoveryTime = a} :: BucketMetadata) Prelude.. Lens.mapping Data._Time
+
+-- | The date and time, in UTC and extended ISO 8601 format, when Amazon
+-- Macie most recently retrieved both bucket and object metadata from
+-- Amazon S3 for the bucket.
+bucketMetadata_lastUpdated :: Lens.Lens' BucketMetadata (Prelude.Maybe Prelude.UTCTime)
+bucketMetadata_lastUpdated = Lens.lens (\BucketMetadata' {lastUpdated} -> lastUpdated) (\s@BucketMetadata' {} a -> s {lastUpdated = a} :: BucketMetadata) Prelude.. Lens.mapping Data._Time
+
+-- | The total number of objects in the bucket.
+bucketMetadata_objectCount :: Lens.Lens' BucketMetadata (Prelude.Maybe Prelude.Integer)
+bucketMetadata_objectCount = Lens.lens (\BucketMetadata' {objectCount} -> objectCount) (\s@BucketMetadata' {} a -> s {objectCount = a} :: BucketMetadata)
+
+-- | The total number of objects that are in the bucket, grouped by
+-- server-side encryption type. This includes a grouping that reports the
+-- total number of objects that aren\'t encrypted or use client-side
+-- encryption.
+bucketMetadata_objectCountByEncryptionType :: Lens.Lens' BucketMetadata (Prelude.Maybe ObjectCountByEncryptionType)
+bucketMetadata_objectCountByEncryptionType = Lens.lens (\BucketMetadata' {objectCountByEncryptionType} -> objectCountByEncryptionType) (\s@BucketMetadata' {} a -> s {objectCountByEncryptionType = a} :: BucketMetadata)
+
+-- | Specifies whether the bucket is publicly accessible due to the
+-- combination of permissions settings that apply to the bucket, and
+-- provides information about those settings.
+bucketMetadata_publicAccess :: Lens.Lens' BucketMetadata (Prelude.Maybe BucketPublicAccess)
+bucketMetadata_publicAccess = Lens.lens (\BucketMetadata' {publicAccess} -> publicAccess) (\s@BucketMetadata' {} a -> s {publicAccess = a} :: BucketMetadata)
+
+-- | The Amazon Web Services Region that hosts the bucket.
+bucketMetadata_region :: Lens.Lens' BucketMetadata (Prelude.Maybe Prelude.Text)
+bucketMetadata_region = Lens.lens (\BucketMetadata' {region} -> region) (\s@BucketMetadata' {} a -> s {region = a} :: BucketMetadata)
+
+-- | Specifies whether the bucket is configured to replicate one or more
+-- objects to buckets for other Amazon Web Services accounts and, if so,
+-- which accounts.
+bucketMetadata_replicationDetails :: Lens.Lens' BucketMetadata (Prelude.Maybe ReplicationDetails)
+bucketMetadata_replicationDetails = Lens.lens (\BucketMetadata' {replicationDetails} -> replicationDetails) (\s@BucketMetadata' {} a -> s {replicationDetails = a} :: BucketMetadata)
+
+-- | The sensitivity score for the bucket, ranging from -1 (no analysis due
+-- to an error) to 100 (sensitive). This value is null if automated
+-- sensitive data discovery is currently disabled for your account.
+bucketMetadata_sensitivityScore :: Lens.Lens' BucketMetadata (Prelude.Maybe Prelude.Int)
+bucketMetadata_sensitivityScore = Lens.lens (\BucketMetadata' {sensitivityScore} -> sensitivityScore) (\s@BucketMetadata' {} a -> s {sensitivityScore = a} :: BucketMetadata)
+
+-- | Specifies whether the bucket encrypts new objects by default and, if so,
+-- the type of server-side encryption that\'s used.
+bucketMetadata_serverSideEncryption :: Lens.Lens' BucketMetadata (Prelude.Maybe BucketServerSideEncryption)
+bucketMetadata_serverSideEncryption = Lens.lens (\BucketMetadata' {serverSideEncryption} -> serverSideEncryption) (\s@BucketMetadata' {} a -> s {serverSideEncryption = a} :: BucketMetadata)
+
+-- | Specifies whether the bucket is shared with another Amazon Web Services
+-- account. Possible values are:
+--
+-- -   EXTERNAL - The bucket is shared with an Amazon Web Services account
+--     that isn\'t part of the same Amazon Macie organization.
+--
+-- -   INTERNAL - The bucket is shared with an Amazon Web Services account
+--     that\'s part of the same Amazon Macie organization.
+--
+-- -   NOT_SHARED - The bucket isn\'t shared with other Amazon Web Services
+--     accounts.
+--
+-- -   UNKNOWN - Amazon Macie wasn\'t able to evaluate the shared access
+--     settings for the bucket.
+bucketMetadata_sharedAccess :: Lens.Lens' BucketMetadata (Prelude.Maybe SharedAccess)
+bucketMetadata_sharedAccess = Lens.lens (\BucketMetadata' {sharedAccess} -> sharedAccess) (\s@BucketMetadata' {} a -> s {sharedAccess = a} :: BucketMetadata)
+
+-- | The total storage size, in bytes, of the bucket.
+--
+-- If versioning is enabled for the bucket, Amazon Macie calculates this
+-- value based on the size of the latest version of each object in the
+-- bucket. This value doesn\'t reflect the storage size of all versions of
+-- each object in the bucket.
+bucketMetadata_sizeInBytes :: Lens.Lens' BucketMetadata (Prelude.Maybe Prelude.Integer)
+bucketMetadata_sizeInBytes = Lens.lens (\BucketMetadata' {sizeInBytes} -> sizeInBytes) (\s@BucketMetadata' {} a -> s {sizeInBytes = a} :: BucketMetadata)
+
+-- | The total storage size, in bytes, of the objects that are compressed
+-- (.gz, .gzip, .zip) files in the bucket.
+--
+-- If versioning is enabled for the bucket, Amazon Macie calculates this
+-- value based on the size of the latest version of each applicable object
+-- in the bucket. This value doesn\'t reflect the storage size of all
+-- versions of each applicable object in the bucket.
+bucketMetadata_sizeInBytesCompressed :: Lens.Lens' BucketMetadata (Prelude.Maybe Prelude.Integer)
+bucketMetadata_sizeInBytesCompressed = Lens.lens (\BucketMetadata' {sizeInBytesCompressed} -> sizeInBytesCompressed) (\s@BucketMetadata' {} a -> s {sizeInBytesCompressed = a} :: BucketMetadata)
+
+-- | An array that specifies the tags (keys and values) that are associated
+-- with the bucket.
+bucketMetadata_tags :: Lens.Lens' BucketMetadata (Prelude.Maybe [KeyValuePair])
+bucketMetadata_tags = Lens.lens (\BucketMetadata' {tags} -> tags) (\s@BucketMetadata' {} a -> s {tags = a} :: BucketMetadata) Prelude.. Lens.mapping Lens.coerced
+
+-- | The total number of objects that Amazon Macie can\'t analyze in the
+-- bucket. These objects don\'t use a supported storage class or don\'t
+-- have a file name extension for a supported file or storage format.
+bucketMetadata_unclassifiableObjectCount :: Lens.Lens' BucketMetadata (Prelude.Maybe ObjectLevelStatistics)
+bucketMetadata_unclassifiableObjectCount = Lens.lens (\BucketMetadata' {unclassifiableObjectCount} -> unclassifiableObjectCount) (\s@BucketMetadata' {} a -> s {unclassifiableObjectCount = a} :: BucketMetadata)
+
+-- | The total storage size, in bytes, of the objects that Amazon Macie
+-- can\'t analyze in the bucket. These objects don\'t use a supported
+-- storage class or don\'t have a file name extension for a supported file
+-- or storage format.
+bucketMetadata_unclassifiableObjectSizeInBytes :: Lens.Lens' BucketMetadata (Prelude.Maybe ObjectLevelStatistics)
+bucketMetadata_unclassifiableObjectSizeInBytes = Lens.lens (\BucketMetadata' {unclassifiableObjectSizeInBytes} -> unclassifiableObjectSizeInBytes) (\s@BucketMetadata' {} a -> s {unclassifiableObjectSizeInBytes = a} :: BucketMetadata)
+
+-- | Specifies whether versioning is enabled for the bucket.
+bucketMetadata_versioning :: Lens.Lens' BucketMetadata (Prelude.Maybe Prelude.Bool)
+bucketMetadata_versioning = Lens.lens (\BucketMetadata' {versioning} -> versioning) (\s@BucketMetadata' {} a -> s {versioning = a} :: BucketMetadata)
+
+instance Data.FromJSON BucketMetadata where
+  parseJSON =
+    Data.withObject
+      "BucketMetadata"
+      ( \x ->
+          BucketMetadata'
+            Prelude.<$> (x Data..:? "accountId")
+            Prelude.<*> (x Data..:? "allowsUnencryptedObjectUploads")
+            Prelude.<*> (x Data..:? "bucketArn")
+            Prelude.<*> (x Data..:? "bucketCreatedAt")
+            Prelude.<*> (x Data..:? "bucketName")
+            Prelude.<*> (x Data..:? "classifiableObjectCount")
+            Prelude.<*> (x Data..:? "classifiableSizeInBytes")
+            Prelude.<*> (x Data..:? "errorCode")
+            Prelude.<*> (x Data..:? "errorMessage")
+            Prelude.<*> (x Data..:? "jobDetails")
+            Prelude.<*> (x Data..:? "lastAutomatedDiscoveryTime")
+            Prelude.<*> (x Data..:? "lastUpdated")
+            Prelude.<*> (x Data..:? "objectCount")
+            Prelude.<*> (x Data..:? "objectCountByEncryptionType")
+            Prelude.<*> (x Data..:? "publicAccess")
+            Prelude.<*> (x Data..:? "region")
+            Prelude.<*> (x Data..:? "replicationDetails")
+            Prelude.<*> (x Data..:? "sensitivityScore")
+            Prelude.<*> (x Data..:? "serverSideEncryption")
+            Prelude.<*> (x Data..:? "sharedAccess")
+            Prelude.<*> (x Data..:? "sizeInBytes")
+            Prelude.<*> (x Data..:? "sizeInBytesCompressed")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "unclassifiableObjectCount")
+            Prelude.<*> (x Data..:? "unclassifiableObjectSizeInBytes")
+            Prelude.<*> (x Data..:? "versioning")
+      )
+
+instance Prelude.Hashable BucketMetadata where
+  hashWithSalt _salt BucketMetadata' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` allowsUnencryptedObjectUploads
+      `Prelude.hashWithSalt` bucketArn
+      `Prelude.hashWithSalt` bucketCreatedAt
+      `Prelude.hashWithSalt` bucketName
+      `Prelude.hashWithSalt` classifiableObjectCount
+      `Prelude.hashWithSalt` classifiableSizeInBytes
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` jobDetails
+      `Prelude.hashWithSalt` lastAutomatedDiscoveryTime
+      `Prelude.hashWithSalt` lastUpdated
+      `Prelude.hashWithSalt` objectCount
+      `Prelude.hashWithSalt` objectCountByEncryptionType
+      `Prelude.hashWithSalt` publicAccess
+      `Prelude.hashWithSalt` region
+      `Prelude.hashWithSalt` replicationDetails
+      `Prelude.hashWithSalt` sensitivityScore
+      `Prelude.hashWithSalt` serverSideEncryption
+      `Prelude.hashWithSalt` sharedAccess
+      `Prelude.hashWithSalt` sizeInBytes
+      `Prelude.hashWithSalt` sizeInBytesCompressed
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` unclassifiableObjectCount
+      `Prelude.hashWithSalt` unclassifiableObjectSizeInBytes
+      `Prelude.hashWithSalt` versioning
+
+instance Prelude.NFData BucketMetadata where
+  rnf BucketMetadata' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf allowsUnencryptedObjectUploads
+      `Prelude.seq` Prelude.rnf bucketArn
+      `Prelude.seq` Prelude.rnf bucketCreatedAt
+      `Prelude.seq` Prelude.rnf bucketName
+      `Prelude.seq` Prelude.rnf classifiableObjectCount
+      `Prelude.seq` Prelude.rnf classifiableSizeInBytes
+      `Prelude.seq` Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf jobDetails
+      `Prelude.seq` Prelude.rnf lastAutomatedDiscoveryTime
+      `Prelude.seq` Prelude.rnf lastUpdated
+      `Prelude.seq` Prelude.rnf objectCount
+      `Prelude.seq` Prelude.rnf objectCountByEncryptionType
+      `Prelude.seq` Prelude.rnf publicAccess
+      `Prelude.seq` Prelude.rnf region
+      `Prelude.seq` Prelude.rnf replicationDetails
+      `Prelude.seq` Prelude.rnf sensitivityScore
+      `Prelude.seq` Prelude.rnf serverSideEncryption
+      `Prelude.seq` Prelude.rnf sharedAccess
+      `Prelude.seq` Prelude.rnf sizeInBytes
+      `Prelude.seq` Prelude.rnf
+        sizeInBytesCompressed
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf
+        unclassifiableObjectCount
+      `Prelude.seq` Prelude.rnf
+        unclassifiableObjectSizeInBytes
+      `Prelude.seq` Prelude.rnf
+        versioning
diff --git a/gen/Amazonka/MacieV2/Types/BucketMetadataErrorCode.hs b/gen/Amazonka/MacieV2/Types/BucketMetadataErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/BucketMetadataErrorCode.hs
@@ -0,0 +1,69 @@
+{-# 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.MacieV2.Types.BucketMetadataErrorCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.BucketMetadataErrorCode
+  ( BucketMetadataErrorCode
+      ( ..,
+        BucketMetadataErrorCode_ACCESS_DENIED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The error code for an error that prevented Amazon Macie from retrieving
+-- and processing metadata from Amazon S3 for an S3 bucket and the
+-- bucket\'s objects.
+newtype BucketMetadataErrorCode = BucketMetadataErrorCode'
+  { fromBucketMetadataErrorCode ::
+      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 BucketMetadataErrorCode_ACCESS_DENIED :: BucketMetadataErrorCode
+pattern BucketMetadataErrorCode_ACCESS_DENIED = BucketMetadataErrorCode' "ACCESS_DENIED"
+
+{-# COMPLETE
+  BucketMetadataErrorCode_ACCESS_DENIED,
+  BucketMetadataErrorCode'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/BucketPermissionConfiguration.hs b/gen/Amazonka/MacieV2/Types/BucketPermissionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/BucketPermissionConfiguration.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.BucketPermissionConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.BucketPermissionConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.AccountLevelPermissions
+import Amazonka.MacieV2.Types.BucketLevelPermissions
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the account-level and bucket-level
+-- permissions settings for an S3 bucket.
+--
+-- /See:/ 'newBucketPermissionConfiguration' smart constructor.
+data BucketPermissionConfiguration = BucketPermissionConfiguration'
+  { -- | The account-level permissions settings that apply to the bucket.
+    accountLevelPermissions :: Prelude.Maybe AccountLevelPermissions,
+    -- | The bucket-level permissions settings for the bucket.
+    bucketLevelPermissions :: Prelude.Maybe BucketLevelPermissions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BucketPermissionConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountLevelPermissions', 'bucketPermissionConfiguration_accountLevelPermissions' - The account-level permissions settings that apply to the bucket.
+--
+-- 'bucketLevelPermissions', 'bucketPermissionConfiguration_bucketLevelPermissions' - The bucket-level permissions settings for the bucket.
+newBucketPermissionConfiguration ::
+  BucketPermissionConfiguration
+newBucketPermissionConfiguration =
+  BucketPermissionConfiguration'
+    { accountLevelPermissions =
+        Prelude.Nothing,
+      bucketLevelPermissions = Prelude.Nothing
+    }
+
+-- | The account-level permissions settings that apply to the bucket.
+bucketPermissionConfiguration_accountLevelPermissions :: Lens.Lens' BucketPermissionConfiguration (Prelude.Maybe AccountLevelPermissions)
+bucketPermissionConfiguration_accountLevelPermissions = Lens.lens (\BucketPermissionConfiguration' {accountLevelPermissions} -> accountLevelPermissions) (\s@BucketPermissionConfiguration' {} a -> s {accountLevelPermissions = a} :: BucketPermissionConfiguration)
+
+-- | The bucket-level permissions settings for the bucket.
+bucketPermissionConfiguration_bucketLevelPermissions :: Lens.Lens' BucketPermissionConfiguration (Prelude.Maybe BucketLevelPermissions)
+bucketPermissionConfiguration_bucketLevelPermissions = Lens.lens (\BucketPermissionConfiguration' {bucketLevelPermissions} -> bucketLevelPermissions) (\s@BucketPermissionConfiguration' {} a -> s {bucketLevelPermissions = a} :: BucketPermissionConfiguration)
+
+instance Data.FromJSON BucketPermissionConfiguration where
+  parseJSON =
+    Data.withObject
+      "BucketPermissionConfiguration"
+      ( \x ->
+          BucketPermissionConfiguration'
+            Prelude.<$> (x Data..:? "accountLevelPermissions")
+            Prelude.<*> (x Data..:? "bucketLevelPermissions")
+      )
+
+instance
+  Prelude.Hashable
+    BucketPermissionConfiguration
+  where
+  hashWithSalt _salt BucketPermissionConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountLevelPermissions
+      `Prelude.hashWithSalt` bucketLevelPermissions
+
+instance Prelude.NFData BucketPermissionConfiguration where
+  rnf BucketPermissionConfiguration' {..} =
+    Prelude.rnf accountLevelPermissions
+      `Prelude.seq` Prelude.rnf bucketLevelPermissions
diff --git a/gen/Amazonka/MacieV2/Types/BucketPolicy.hs b/gen/Amazonka/MacieV2/Types/BucketPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/BucketPolicy.hs
@@ -0,0 +1,92 @@
+{-# 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.MacieV2.Types.BucketPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.BucketPolicy 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 information about the permissions settings of the bucket policy
+-- for an S3 bucket.
+--
+-- /See:/ 'newBucketPolicy' smart constructor.
+data BucketPolicy = BucketPolicy'
+  { -- | Specifies whether the bucket policy allows the general public to have
+    -- read access to the bucket.
+    allowsPublicReadAccess :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether the bucket policy allows the general public to have
+    -- write access to the bucket.
+    allowsPublicWriteAccess :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BucketPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowsPublicReadAccess', 'bucketPolicy_allowsPublicReadAccess' - Specifies whether the bucket policy allows the general public to have
+-- read access to the bucket.
+--
+-- 'allowsPublicWriteAccess', 'bucketPolicy_allowsPublicWriteAccess' - Specifies whether the bucket policy allows the general public to have
+-- write access to the bucket.
+newBucketPolicy ::
+  BucketPolicy
+newBucketPolicy =
+  BucketPolicy'
+    { allowsPublicReadAccess =
+        Prelude.Nothing,
+      allowsPublicWriteAccess = Prelude.Nothing
+    }
+
+-- | Specifies whether the bucket policy allows the general public to have
+-- read access to the bucket.
+bucketPolicy_allowsPublicReadAccess :: Lens.Lens' BucketPolicy (Prelude.Maybe Prelude.Bool)
+bucketPolicy_allowsPublicReadAccess = Lens.lens (\BucketPolicy' {allowsPublicReadAccess} -> allowsPublicReadAccess) (\s@BucketPolicy' {} a -> s {allowsPublicReadAccess = a} :: BucketPolicy)
+
+-- | Specifies whether the bucket policy allows the general public to have
+-- write access to the bucket.
+bucketPolicy_allowsPublicWriteAccess :: Lens.Lens' BucketPolicy (Prelude.Maybe Prelude.Bool)
+bucketPolicy_allowsPublicWriteAccess = Lens.lens (\BucketPolicy' {allowsPublicWriteAccess} -> allowsPublicWriteAccess) (\s@BucketPolicy' {} a -> s {allowsPublicWriteAccess = a} :: BucketPolicy)
+
+instance Data.FromJSON BucketPolicy where
+  parseJSON =
+    Data.withObject
+      "BucketPolicy"
+      ( \x ->
+          BucketPolicy'
+            Prelude.<$> (x Data..:? "allowsPublicReadAccess")
+            Prelude.<*> (x Data..:? "allowsPublicWriteAccess")
+      )
+
+instance Prelude.Hashable BucketPolicy where
+  hashWithSalt _salt BucketPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowsPublicReadAccess
+      `Prelude.hashWithSalt` allowsPublicWriteAccess
+
+instance Prelude.NFData BucketPolicy where
+  rnf BucketPolicy' {..} =
+    Prelude.rnf allowsPublicReadAccess
+      `Prelude.seq` Prelude.rnf allowsPublicWriteAccess
diff --git a/gen/Amazonka/MacieV2/Types/BucketPublicAccess.hs b/gen/Amazonka/MacieV2/Types/BucketPublicAccess.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/BucketPublicAccess.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.MacieV2.Types.BucketPublicAccess
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.BucketPublicAccess where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.BucketPermissionConfiguration
+import Amazonka.MacieV2.Types.EffectivePermission
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the permissions settings that determine
+-- whether an S3 bucket is publicly accessible.
+--
+-- /See:/ 'newBucketPublicAccess' smart constructor.
+data BucketPublicAccess = BucketPublicAccess'
+  { -- | Specifies whether the bucket is publicly accessible due to the
+    -- combination of permissions settings that apply to the bucket. Possible
+    -- values are:
+    --
+    -- -   NOT_PUBLIC - The bucket isn\'t publicly accessible.
+    --
+    -- -   PUBLIC - The bucket is publicly accessible.
+    --
+    -- -   UNKNOWN - Amazon Macie can\'t determine whether the bucket is
+    --     publicly accessible.
+    effectivePermission :: Prelude.Maybe EffectivePermission,
+    -- | The account-level and bucket-level permissions settings for the bucket.
+    permissionConfiguration :: Prelude.Maybe BucketPermissionConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BucketPublicAccess' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'effectivePermission', 'bucketPublicAccess_effectivePermission' - Specifies whether the bucket is publicly accessible due to the
+-- combination of permissions settings that apply to the bucket. Possible
+-- values are:
+--
+-- -   NOT_PUBLIC - The bucket isn\'t publicly accessible.
+--
+-- -   PUBLIC - The bucket is publicly accessible.
+--
+-- -   UNKNOWN - Amazon Macie can\'t determine whether the bucket is
+--     publicly accessible.
+--
+-- 'permissionConfiguration', 'bucketPublicAccess_permissionConfiguration' - The account-level and bucket-level permissions settings for the bucket.
+newBucketPublicAccess ::
+  BucketPublicAccess
+newBucketPublicAccess =
+  BucketPublicAccess'
+    { effectivePermission =
+        Prelude.Nothing,
+      permissionConfiguration = Prelude.Nothing
+    }
+
+-- | Specifies whether the bucket is publicly accessible due to the
+-- combination of permissions settings that apply to the bucket. Possible
+-- values are:
+--
+-- -   NOT_PUBLIC - The bucket isn\'t publicly accessible.
+--
+-- -   PUBLIC - The bucket is publicly accessible.
+--
+-- -   UNKNOWN - Amazon Macie can\'t determine whether the bucket is
+--     publicly accessible.
+bucketPublicAccess_effectivePermission :: Lens.Lens' BucketPublicAccess (Prelude.Maybe EffectivePermission)
+bucketPublicAccess_effectivePermission = Lens.lens (\BucketPublicAccess' {effectivePermission} -> effectivePermission) (\s@BucketPublicAccess' {} a -> s {effectivePermission = a} :: BucketPublicAccess)
+
+-- | The account-level and bucket-level permissions settings for the bucket.
+bucketPublicAccess_permissionConfiguration :: Lens.Lens' BucketPublicAccess (Prelude.Maybe BucketPermissionConfiguration)
+bucketPublicAccess_permissionConfiguration = Lens.lens (\BucketPublicAccess' {permissionConfiguration} -> permissionConfiguration) (\s@BucketPublicAccess' {} a -> s {permissionConfiguration = a} :: BucketPublicAccess)
+
+instance Data.FromJSON BucketPublicAccess where
+  parseJSON =
+    Data.withObject
+      "BucketPublicAccess"
+      ( \x ->
+          BucketPublicAccess'
+            Prelude.<$> (x Data..:? "effectivePermission")
+            Prelude.<*> (x Data..:? "permissionConfiguration")
+      )
+
+instance Prelude.Hashable BucketPublicAccess where
+  hashWithSalt _salt BucketPublicAccess' {..} =
+    _salt
+      `Prelude.hashWithSalt` effectivePermission
+      `Prelude.hashWithSalt` permissionConfiguration
+
+instance Prelude.NFData BucketPublicAccess where
+  rnf BucketPublicAccess' {..} =
+    Prelude.rnf effectivePermission
+      `Prelude.seq` Prelude.rnf permissionConfiguration
diff --git a/gen/Amazonka/MacieV2/Types/BucketServerSideEncryption.hs b/gen/Amazonka/MacieV2/Types/BucketServerSideEncryption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/BucketServerSideEncryption.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.BucketServerSideEncryption
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.BucketServerSideEncryption where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.Type
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the default server-side encryption settings
+-- for an S3 bucket. For detailed information about these settings, see
+-- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-encryption.html Setting default server-side encryption behavior for Amazon S3 buckets>
+-- in the /Amazon Simple Storage Service User Guide/.
+--
+-- /See:/ 'newBucketServerSideEncryption' smart constructor.
+data BucketServerSideEncryption = BucketServerSideEncryption'
+  { -- | The Amazon Resource Name (ARN) or unique identifier (key ID) for the KMS
+    -- key that\'s used by default to encrypt objects that are added to the
+    -- bucket. This value is null if the bucket uses an Amazon S3 managed key
+    -- to encrypt new objects or the bucket doesn\'t encrypt new objects by
+    -- default.
+    kmsMasterKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The type of server-side encryption that\'s used by default when storing
+    -- new objects in the bucket. Possible values are:
+    --
+    -- -   AES256 - New objects are encrypted with an Amazon S3 managed key.
+    --     They use SSE-S3 encryption.
+    --
+    -- -   aws:kms - New objects are encrypted with an KMS key
+    --     (kmsMasterKeyId), either an Amazon Web Services managed key or a
+    --     customer managed key. They use SSE-KMS encryption.
+    --
+    -- -   NONE - New objects aren\'t encrypted by default. Default encryption
+    --     is disabled for the bucket.
+    type' :: Prelude.Maybe Type
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BucketServerSideEncryption' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'kmsMasterKeyId', 'bucketServerSideEncryption_kmsMasterKeyId' - The Amazon Resource Name (ARN) or unique identifier (key ID) for the KMS
+-- key that\'s used by default to encrypt objects that are added to the
+-- bucket. This value is null if the bucket uses an Amazon S3 managed key
+-- to encrypt new objects or the bucket doesn\'t encrypt new objects by
+-- default.
+--
+-- 'type'', 'bucketServerSideEncryption_type' - The type of server-side encryption that\'s used by default when storing
+-- new objects in the bucket. Possible values are:
+--
+-- -   AES256 - New objects are encrypted with an Amazon S3 managed key.
+--     They use SSE-S3 encryption.
+--
+-- -   aws:kms - New objects are encrypted with an KMS key
+--     (kmsMasterKeyId), either an Amazon Web Services managed key or a
+--     customer managed key. They use SSE-KMS encryption.
+--
+-- -   NONE - New objects aren\'t encrypted by default. Default encryption
+--     is disabled for the bucket.
+newBucketServerSideEncryption ::
+  BucketServerSideEncryption
+newBucketServerSideEncryption =
+  BucketServerSideEncryption'
+    { kmsMasterKeyId =
+        Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) or unique identifier (key ID) for the KMS
+-- key that\'s used by default to encrypt objects that are added to the
+-- bucket. This value is null if the bucket uses an Amazon S3 managed key
+-- to encrypt new objects or the bucket doesn\'t encrypt new objects by
+-- default.
+bucketServerSideEncryption_kmsMasterKeyId :: Lens.Lens' BucketServerSideEncryption (Prelude.Maybe Prelude.Text)
+bucketServerSideEncryption_kmsMasterKeyId = Lens.lens (\BucketServerSideEncryption' {kmsMasterKeyId} -> kmsMasterKeyId) (\s@BucketServerSideEncryption' {} a -> s {kmsMasterKeyId = a} :: BucketServerSideEncryption)
+
+-- | The type of server-side encryption that\'s used by default when storing
+-- new objects in the bucket. Possible values are:
+--
+-- -   AES256 - New objects are encrypted with an Amazon S3 managed key.
+--     They use SSE-S3 encryption.
+--
+-- -   aws:kms - New objects are encrypted with an KMS key
+--     (kmsMasterKeyId), either an Amazon Web Services managed key or a
+--     customer managed key. They use SSE-KMS encryption.
+--
+-- -   NONE - New objects aren\'t encrypted by default. Default encryption
+--     is disabled for the bucket.
+bucketServerSideEncryption_type :: Lens.Lens' BucketServerSideEncryption (Prelude.Maybe Type)
+bucketServerSideEncryption_type = Lens.lens (\BucketServerSideEncryption' {type'} -> type') (\s@BucketServerSideEncryption' {} a -> s {type' = a} :: BucketServerSideEncryption)
+
+instance Data.FromJSON BucketServerSideEncryption where
+  parseJSON =
+    Data.withObject
+      "BucketServerSideEncryption"
+      ( \x ->
+          BucketServerSideEncryption'
+            Prelude.<$> (x Data..:? "kmsMasterKeyId")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable BucketServerSideEncryption where
+  hashWithSalt _salt BucketServerSideEncryption' {..} =
+    _salt
+      `Prelude.hashWithSalt` kmsMasterKeyId
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData BucketServerSideEncryption where
+  rnf BucketServerSideEncryption' {..} =
+    Prelude.rnf kmsMasterKeyId
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/MacieV2/Types/BucketSortCriteria.hs b/gen/Amazonka/MacieV2/Types/BucketSortCriteria.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/BucketSortCriteria.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.BucketSortCriteria
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.BucketSortCriteria where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.OrderBy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies criteria for sorting the results of a query for information
+-- about S3 buckets.
+--
+-- /See:/ 'newBucketSortCriteria' smart constructor.
+data BucketSortCriteria = BucketSortCriteria'
+  { -- | The name of the bucket property to sort the results by. This value can
+    -- be one of the following properties that Amazon Macie defines as bucket
+    -- metadata: accountId, bucketName, classifiableObjectCount,
+    -- classifiableSizeInBytes, objectCount, sensitivityScore, or sizeInBytes.
+    attributeName :: Prelude.Maybe Prelude.Text,
+    -- | The sort order to apply to the results, based on the value specified by
+    -- the attributeName property. Valid values are: ASC, sort the results in
+    -- ascending order; and, DESC, sort the results in descending order.
+    orderBy :: Prelude.Maybe OrderBy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BucketSortCriteria' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributeName', 'bucketSortCriteria_attributeName' - The name of the bucket property to sort the results by. This value can
+-- be one of the following properties that Amazon Macie defines as bucket
+-- metadata: accountId, bucketName, classifiableObjectCount,
+-- classifiableSizeInBytes, objectCount, sensitivityScore, or sizeInBytes.
+--
+-- 'orderBy', 'bucketSortCriteria_orderBy' - The sort order to apply to the results, based on the value specified by
+-- the attributeName property. Valid values are: ASC, sort the results in
+-- ascending order; and, DESC, sort the results in descending order.
+newBucketSortCriteria ::
+  BucketSortCriteria
+newBucketSortCriteria =
+  BucketSortCriteria'
+    { attributeName =
+        Prelude.Nothing,
+      orderBy = Prelude.Nothing
+    }
+
+-- | The name of the bucket property to sort the results by. This value can
+-- be one of the following properties that Amazon Macie defines as bucket
+-- metadata: accountId, bucketName, classifiableObjectCount,
+-- classifiableSizeInBytes, objectCount, sensitivityScore, or sizeInBytes.
+bucketSortCriteria_attributeName :: Lens.Lens' BucketSortCriteria (Prelude.Maybe Prelude.Text)
+bucketSortCriteria_attributeName = Lens.lens (\BucketSortCriteria' {attributeName} -> attributeName) (\s@BucketSortCriteria' {} a -> s {attributeName = a} :: BucketSortCriteria)
+
+-- | The sort order to apply to the results, based on the value specified by
+-- the attributeName property. Valid values are: ASC, sort the results in
+-- ascending order; and, DESC, sort the results in descending order.
+bucketSortCriteria_orderBy :: Lens.Lens' BucketSortCriteria (Prelude.Maybe OrderBy)
+bucketSortCriteria_orderBy = Lens.lens (\BucketSortCriteria' {orderBy} -> orderBy) (\s@BucketSortCriteria' {} a -> s {orderBy = a} :: BucketSortCriteria)
+
+instance Prelude.Hashable BucketSortCriteria where
+  hashWithSalt _salt BucketSortCriteria' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributeName
+      `Prelude.hashWithSalt` orderBy
+
+instance Prelude.NFData BucketSortCriteria where
+  rnf BucketSortCriteria' {..} =
+    Prelude.rnf attributeName
+      `Prelude.seq` Prelude.rnf orderBy
+
+instance Data.ToJSON BucketSortCriteria where
+  toJSON BucketSortCriteria' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("attributeName" Data..=) Prelude.<$> attributeName,
+            ("orderBy" Data..=) Prelude.<$> orderBy
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/BucketStatisticsBySensitivity.hs b/gen/Amazonka/MacieV2/Types/BucketStatisticsBySensitivity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/BucketStatisticsBySensitivity.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.BucketStatisticsBySensitivity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.BucketStatisticsBySensitivity where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.SensitivityAggregations
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides aggregated statistical data for sensitive data discovery
+-- metrics that apply to S3 buckets, grouped by bucket sensitivity score
+-- (sensitivityScore). If automated sensitive data discovery is currently
+-- disabled for your account, the value for each metric is 0.
+--
+-- /See:/ 'newBucketStatisticsBySensitivity' smart constructor.
+data BucketStatisticsBySensitivity = BucketStatisticsBySensitivity'
+  { -- | The aggregated statistical data for all buckets that have a sensitivity
+    -- score of -1.
+    classificationError :: Prelude.Maybe SensitivityAggregations,
+    -- | The aggregated statistical data for all buckets that have a sensitivity
+    -- score of 50.
+    notClassified :: Prelude.Maybe SensitivityAggregations,
+    -- | The aggregated statistical data for all buckets that have a sensitivity
+    -- score of 0-49.
+    notSensitive :: Prelude.Maybe SensitivityAggregations,
+    -- | The aggregated statistical data for all buckets that have a sensitivity
+    -- score of 51-100.
+    sensitive :: Prelude.Maybe SensitivityAggregations
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BucketStatisticsBySensitivity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'classificationError', 'bucketStatisticsBySensitivity_classificationError' - The aggregated statistical data for all buckets that have a sensitivity
+-- score of -1.
+--
+-- 'notClassified', 'bucketStatisticsBySensitivity_notClassified' - The aggregated statistical data for all buckets that have a sensitivity
+-- score of 50.
+--
+-- 'notSensitive', 'bucketStatisticsBySensitivity_notSensitive' - The aggregated statistical data for all buckets that have a sensitivity
+-- score of 0-49.
+--
+-- 'sensitive', 'bucketStatisticsBySensitivity_sensitive' - The aggregated statistical data for all buckets that have a sensitivity
+-- score of 51-100.
+newBucketStatisticsBySensitivity ::
+  BucketStatisticsBySensitivity
+newBucketStatisticsBySensitivity =
+  BucketStatisticsBySensitivity'
+    { classificationError =
+        Prelude.Nothing,
+      notClassified = Prelude.Nothing,
+      notSensitive = Prelude.Nothing,
+      sensitive = Prelude.Nothing
+    }
+
+-- | The aggregated statistical data for all buckets that have a sensitivity
+-- score of -1.
+bucketStatisticsBySensitivity_classificationError :: Lens.Lens' BucketStatisticsBySensitivity (Prelude.Maybe SensitivityAggregations)
+bucketStatisticsBySensitivity_classificationError = Lens.lens (\BucketStatisticsBySensitivity' {classificationError} -> classificationError) (\s@BucketStatisticsBySensitivity' {} a -> s {classificationError = a} :: BucketStatisticsBySensitivity)
+
+-- | The aggregated statistical data for all buckets that have a sensitivity
+-- score of 50.
+bucketStatisticsBySensitivity_notClassified :: Lens.Lens' BucketStatisticsBySensitivity (Prelude.Maybe SensitivityAggregations)
+bucketStatisticsBySensitivity_notClassified = Lens.lens (\BucketStatisticsBySensitivity' {notClassified} -> notClassified) (\s@BucketStatisticsBySensitivity' {} a -> s {notClassified = a} :: BucketStatisticsBySensitivity)
+
+-- | The aggregated statistical data for all buckets that have a sensitivity
+-- score of 0-49.
+bucketStatisticsBySensitivity_notSensitive :: Lens.Lens' BucketStatisticsBySensitivity (Prelude.Maybe SensitivityAggregations)
+bucketStatisticsBySensitivity_notSensitive = Lens.lens (\BucketStatisticsBySensitivity' {notSensitive} -> notSensitive) (\s@BucketStatisticsBySensitivity' {} a -> s {notSensitive = a} :: BucketStatisticsBySensitivity)
+
+-- | The aggregated statistical data for all buckets that have a sensitivity
+-- score of 51-100.
+bucketStatisticsBySensitivity_sensitive :: Lens.Lens' BucketStatisticsBySensitivity (Prelude.Maybe SensitivityAggregations)
+bucketStatisticsBySensitivity_sensitive = Lens.lens (\BucketStatisticsBySensitivity' {sensitive} -> sensitive) (\s@BucketStatisticsBySensitivity' {} a -> s {sensitive = a} :: BucketStatisticsBySensitivity)
+
+instance Data.FromJSON BucketStatisticsBySensitivity where
+  parseJSON =
+    Data.withObject
+      "BucketStatisticsBySensitivity"
+      ( \x ->
+          BucketStatisticsBySensitivity'
+            Prelude.<$> (x Data..:? "classificationError")
+            Prelude.<*> (x Data..:? "notClassified")
+            Prelude.<*> (x Data..:? "notSensitive")
+            Prelude.<*> (x Data..:? "sensitive")
+      )
+
+instance
+  Prelude.Hashable
+    BucketStatisticsBySensitivity
+  where
+  hashWithSalt _salt BucketStatisticsBySensitivity' {..} =
+    _salt
+      `Prelude.hashWithSalt` classificationError
+      `Prelude.hashWithSalt` notClassified
+      `Prelude.hashWithSalt` notSensitive
+      `Prelude.hashWithSalt` sensitive
+
+instance Prelude.NFData BucketStatisticsBySensitivity where
+  rnf BucketStatisticsBySensitivity' {..} =
+    Prelude.rnf classificationError
+      `Prelude.seq` Prelude.rnf notClassified
+      `Prelude.seq` Prelude.rnf notSensitive
+      `Prelude.seq` Prelude.rnf sensitive
diff --git a/gen/Amazonka/MacieV2/Types/Cell.hs b/gen/Amazonka/MacieV2/Types/Cell.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/Cell.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.MacieV2.Types.Cell
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.Cell where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the location of an occurrence of sensitive data in a Microsoft
+-- Excel workbook, CSV file, or TSV file.
+--
+-- /See:/ 'newCell' smart constructor.
+data Cell = Cell'
+  { -- | The location of the cell, as an absolute cell reference, that contains
+    -- the sensitive data, for example Sheet2!C5 for cell C5 on Sheet2 in a
+    -- Microsoft Excel workbook. This value is null for CSV and TSV files.
+    cellReference :: Prelude.Maybe Prelude.Text,
+    -- | The column number of the column that contains the sensitive data. For a
+    -- Microsoft Excel workbook, this value correlates to the alphabetical
+    -- character(s) for a column identifier, for example: 1 for column A, 2 for
+    -- column B, and so on.
+    column :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the column that contains the sensitive data, if available.
+    columnName :: Prelude.Maybe Prelude.Text,
+    -- | The row number of the row that contains the sensitive data.
+    row :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Cell' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cellReference', 'cell_cellReference' - The location of the cell, as an absolute cell reference, that contains
+-- the sensitive data, for example Sheet2!C5 for cell C5 on Sheet2 in a
+-- Microsoft Excel workbook. This value is null for CSV and TSV files.
+--
+-- 'column', 'cell_column' - The column number of the column that contains the sensitive data. For a
+-- Microsoft Excel workbook, this value correlates to the alphabetical
+-- character(s) for a column identifier, for example: 1 for column A, 2 for
+-- column B, and so on.
+--
+-- 'columnName', 'cell_columnName' - The name of the column that contains the sensitive data, if available.
+--
+-- 'row', 'cell_row' - The row number of the row that contains the sensitive data.
+newCell ::
+  Cell
+newCell =
+  Cell'
+    { cellReference = Prelude.Nothing,
+      column = Prelude.Nothing,
+      columnName = Prelude.Nothing,
+      row = Prelude.Nothing
+    }
+
+-- | The location of the cell, as an absolute cell reference, that contains
+-- the sensitive data, for example Sheet2!C5 for cell C5 on Sheet2 in a
+-- Microsoft Excel workbook. This value is null for CSV and TSV files.
+cell_cellReference :: Lens.Lens' Cell (Prelude.Maybe Prelude.Text)
+cell_cellReference = Lens.lens (\Cell' {cellReference} -> cellReference) (\s@Cell' {} a -> s {cellReference = a} :: Cell)
+
+-- | The column number of the column that contains the sensitive data. For a
+-- Microsoft Excel workbook, this value correlates to the alphabetical
+-- character(s) for a column identifier, for example: 1 for column A, 2 for
+-- column B, and so on.
+cell_column :: Lens.Lens' Cell (Prelude.Maybe Prelude.Integer)
+cell_column = Lens.lens (\Cell' {column} -> column) (\s@Cell' {} a -> s {column = a} :: Cell)
+
+-- | The name of the column that contains the sensitive data, if available.
+cell_columnName :: Lens.Lens' Cell (Prelude.Maybe Prelude.Text)
+cell_columnName = Lens.lens (\Cell' {columnName} -> columnName) (\s@Cell' {} a -> s {columnName = a} :: Cell)
+
+-- | The row number of the row that contains the sensitive data.
+cell_row :: Lens.Lens' Cell (Prelude.Maybe Prelude.Integer)
+cell_row = Lens.lens (\Cell' {row} -> row) (\s@Cell' {} a -> s {row = a} :: Cell)
+
+instance Data.FromJSON Cell where
+  parseJSON =
+    Data.withObject
+      "Cell"
+      ( \x ->
+          Cell'
+            Prelude.<$> (x Data..:? "cellReference")
+            Prelude.<*> (x Data..:? "column")
+            Prelude.<*> (x Data..:? "columnName")
+            Prelude.<*> (x Data..:? "row")
+      )
+
+instance Prelude.Hashable Cell where
+  hashWithSalt _salt Cell' {..} =
+    _salt
+      `Prelude.hashWithSalt` cellReference
+      `Prelude.hashWithSalt` column
+      `Prelude.hashWithSalt` columnName
+      `Prelude.hashWithSalt` row
+
+instance Prelude.NFData Cell where
+  rnf Cell' {..} =
+    Prelude.rnf cellReference
+      `Prelude.seq` Prelude.rnf column
+      `Prelude.seq` Prelude.rnf columnName
+      `Prelude.seq` Prelude.rnf row
diff --git a/gen/Amazonka/MacieV2/Types/ClassificationDetails.hs b/gen/Amazonka/MacieV2/Types/ClassificationDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ClassificationDetails.hs
@@ -0,0 +1,154 @@
+{-# 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.MacieV2.Types.ClassificationDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ClassificationDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.ClassificationResult
+import Amazonka.MacieV2.Types.OriginType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about a sensitive data finding and the details of
+-- the finding.
+--
+-- /See:/ 'newClassificationDetails' smart constructor.
+data ClassificationDetails = ClassificationDetails'
+  { -- | The path to the folder or file in Amazon S3 that contains the
+    -- corresponding sensitive data discovery result for the finding. If a
+    -- finding applies to a large archive or compressed file, this value is the
+    -- path to a folder. Otherwise, this value is the path to a file.
+    detailedResultsLocation :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the classification job that produced
+    -- the finding. This value is null if the origin of the finding
+    -- (originType) is AUTOMATED_SENSITIVE_DATA_DISCOVERY.
+    jobArn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the classification job that produced the
+    -- finding. This value is null if the origin of the finding (originType) is
+    -- AUTOMATED_SENSITIVE_DATA_DISCOVERY.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies how Amazon Macie found the sensitive data that produced the
+    -- finding. Possible values are: SENSITIVE_DATA_DISCOVERY_JOB, for a
+    -- classification job; and, AUTOMATED_SENSITIVE_DATA_DISCOVERY, for
+    -- automated sensitive data discovery.
+    originType :: Prelude.Maybe OriginType,
+    -- | The status and other details of the finding.
+    result :: Prelude.Maybe ClassificationResult
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClassificationDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detailedResultsLocation', 'classificationDetails_detailedResultsLocation' - The path to the folder or file in Amazon S3 that contains the
+-- corresponding sensitive data discovery result for the finding. If a
+-- finding applies to a large archive or compressed file, this value is the
+-- path to a folder. Otherwise, this value is the path to a file.
+--
+-- 'jobArn', 'classificationDetails_jobArn' - The Amazon Resource Name (ARN) of the classification job that produced
+-- the finding. This value is null if the origin of the finding
+-- (originType) is AUTOMATED_SENSITIVE_DATA_DISCOVERY.
+--
+-- 'jobId', 'classificationDetails_jobId' - The unique identifier for the classification job that produced the
+-- finding. This value is null if the origin of the finding (originType) is
+-- AUTOMATED_SENSITIVE_DATA_DISCOVERY.
+--
+-- 'originType', 'classificationDetails_originType' - Specifies how Amazon Macie found the sensitive data that produced the
+-- finding. Possible values are: SENSITIVE_DATA_DISCOVERY_JOB, for a
+-- classification job; and, AUTOMATED_SENSITIVE_DATA_DISCOVERY, for
+-- automated sensitive data discovery.
+--
+-- 'result', 'classificationDetails_result' - The status and other details of the finding.
+newClassificationDetails ::
+  ClassificationDetails
+newClassificationDetails =
+  ClassificationDetails'
+    { detailedResultsLocation =
+        Prelude.Nothing,
+      jobArn = Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      originType = Prelude.Nothing,
+      result = Prelude.Nothing
+    }
+
+-- | The path to the folder or file in Amazon S3 that contains the
+-- corresponding sensitive data discovery result for the finding. If a
+-- finding applies to a large archive or compressed file, this value is the
+-- path to a folder. Otherwise, this value is the path to a file.
+classificationDetails_detailedResultsLocation :: Lens.Lens' ClassificationDetails (Prelude.Maybe Prelude.Text)
+classificationDetails_detailedResultsLocation = Lens.lens (\ClassificationDetails' {detailedResultsLocation} -> detailedResultsLocation) (\s@ClassificationDetails' {} a -> s {detailedResultsLocation = a} :: ClassificationDetails)
+
+-- | The Amazon Resource Name (ARN) of the classification job that produced
+-- the finding. This value is null if the origin of the finding
+-- (originType) is AUTOMATED_SENSITIVE_DATA_DISCOVERY.
+classificationDetails_jobArn :: Lens.Lens' ClassificationDetails (Prelude.Maybe Prelude.Text)
+classificationDetails_jobArn = Lens.lens (\ClassificationDetails' {jobArn} -> jobArn) (\s@ClassificationDetails' {} a -> s {jobArn = a} :: ClassificationDetails)
+
+-- | The unique identifier for the classification job that produced the
+-- finding. This value is null if the origin of the finding (originType) is
+-- AUTOMATED_SENSITIVE_DATA_DISCOVERY.
+classificationDetails_jobId :: Lens.Lens' ClassificationDetails (Prelude.Maybe Prelude.Text)
+classificationDetails_jobId = Lens.lens (\ClassificationDetails' {jobId} -> jobId) (\s@ClassificationDetails' {} a -> s {jobId = a} :: ClassificationDetails)
+
+-- | Specifies how Amazon Macie found the sensitive data that produced the
+-- finding. Possible values are: SENSITIVE_DATA_DISCOVERY_JOB, for a
+-- classification job; and, AUTOMATED_SENSITIVE_DATA_DISCOVERY, for
+-- automated sensitive data discovery.
+classificationDetails_originType :: Lens.Lens' ClassificationDetails (Prelude.Maybe OriginType)
+classificationDetails_originType = Lens.lens (\ClassificationDetails' {originType} -> originType) (\s@ClassificationDetails' {} a -> s {originType = a} :: ClassificationDetails)
+
+-- | The status and other details of the finding.
+classificationDetails_result :: Lens.Lens' ClassificationDetails (Prelude.Maybe ClassificationResult)
+classificationDetails_result = Lens.lens (\ClassificationDetails' {result} -> result) (\s@ClassificationDetails' {} a -> s {result = a} :: ClassificationDetails)
+
+instance Data.FromJSON ClassificationDetails where
+  parseJSON =
+    Data.withObject
+      "ClassificationDetails"
+      ( \x ->
+          ClassificationDetails'
+            Prelude.<$> (x Data..:? "detailedResultsLocation")
+            Prelude.<*> (x Data..:? "jobArn")
+            Prelude.<*> (x Data..:? "jobId")
+            Prelude.<*> (x Data..:? "originType")
+            Prelude.<*> (x Data..:? "result")
+      )
+
+instance Prelude.Hashable ClassificationDetails where
+  hashWithSalt _salt ClassificationDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` detailedResultsLocation
+      `Prelude.hashWithSalt` jobArn
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` originType
+      `Prelude.hashWithSalt` result
+
+instance Prelude.NFData ClassificationDetails where
+  rnf ClassificationDetails' {..} =
+    Prelude.rnf detailedResultsLocation
+      `Prelude.seq` Prelude.rnf jobArn
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf originType
+      `Prelude.seq` Prelude.rnf result
diff --git a/gen/Amazonka/MacieV2/Types/ClassificationExportConfiguration.hs b/gen/Amazonka/MacieV2/Types/ClassificationExportConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ClassificationExportConfiguration.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.ClassificationExportConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ClassificationExportConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.S3Destination
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies where to store data classification results, and the encryption
+-- settings to use when storing results in that location. The location must
+-- be an S3 bucket.
+--
+-- /See:/ 'newClassificationExportConfiguration' smart constructor.
+data ClassificationExportConfiguration = ClassificationExportConfiguration'
+  { -- | The S3 bucket to store data classification results in, and the
+    -- encryption settings to use when storing results in that bucket.
+    s3Destination :: Prelude.Maybe S3Destination
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClassificationExportConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Destination', 'classificationExportConfiguration_s3Destination' - The S3 bucket to store data classification results in, and the
+-- encryption settings to use when storing results in that bucket.
+newClassificationExportConfiguration ::
+  ClassificationExportConfiguration
+newClassificationExportConfiguration =
+  ClassificationExportConfiguration'
+    { s3Destination =
+        Prelude.Nothing
+    }
+
+-- | The S3 bucket to store data classification results in, and the
+-- encryption settings to use when storing results in that bucket.
+classificationExportConfiguration_s3Destination :: Lens.Lens' ClassificationExportConfiguration (Prelude.Maybe S3Destination)
+classificationExportConfiguration_s3Destination = Lens.lens (\ClassificationExportConfiguration' {s3Destination} -> s3Destination) (\s@ClassificationExportConfiguration' {} a -> s {s3Destination = a} :: ClassificationExportConfiguration)
+
+instance
+  Data.FromJSON
+    ClassificationExportConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "ClassificationExportConfiguration"
+      ( \x ->
+          ClassificationExportConfiguration'
+            Prelude.<$> (x Data..:? "s3Destination")
+      )
+
+instance
+  Prelude.Hashable
+    ClassificationExportConfiguration
+  where
+  hashWithSalt
+    _salt
+    ClassificationExportConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` s3Destination
+
+instance
+  Prelude.NFData
+    ClassificationExportConfiguration
+  where
+  rnf ClassificationExportConfiguration' {..} =
+    Prelude.rnf s3Destination
+
+instance
+  Data.ToJSON
+    ClassificationExportConfiguration
+  where
+  toJSON ClassificationExportConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("s3Destination" Data..=)
+              Prelude.<$> s3Destination
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/ClassificationResult.hs b/gen/Amazonka/MacieV2/Types/ClassificationResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ClassificationResult.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.ClassificationResult
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ClassificationResult where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.ClassificationResultStatus
+import Amazonka.MacieV2.Types.CustomDataIdentifiers
+import Amazonka.MacieV2.Types.SensitiveDataItem
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the details of a sensitive data finding, including the types,
+-- number of occurrences, and locations of the sensitive data that was
+-- detected.
+--
+-- /See:/ 'newClassificationResult' smart constructor.
+data ClassificationResult = ClassificationResult'
+  { -- | Specifies whether Amazon Macie detected additional occurrences of
+    -- sensitive data in the S3 object. A finding includes location data for a
+    -- maximum of 15 occurrences of sensitive data.
+    --
+    -- This value can help you determine whether to investigate additional
+    -- occurrences of sensitive data in an object. You can do this by referring
+    -- to the corresponding sensitive data discovery result for the finding
+    -- (ClassificationDetails.detailedResultsLocation).
+    additionalOccurrences :: Prelude.Maybe Prelude.Bool,
+    -- | The custom data identifiers that detected the sensitive data and the
+    -- number of occurrences of the data that they detected.
+    customDataIdentifiers :: Prelude.Maybe CustomDataIdentifiers,
+    -- | The type of content, as a MIME type, that the finding applies to. For
+    -- example, application\/gzip, for a GNU Gzip compressed archive file, or
+    -- application\/pdf, for an Adobe Portable Document Format file.
+    mimeType :: Prelude.Maybe Prelude.Text,
+    -- | The category, types, and number of occurrences of the sensitive data
+    -- that produced the finding.
+    sensitiveData :: Prelude.Maybe [SensitiveDataItem],
+    -- | The total size, in bytes, of the data that the finding applies to.
+    sizeClassified :: Prelude.Maybe Prelude.Integer,
+    -- | The status of the finding.
+    status :: Prelude.Maybe ClassificationResultStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClassificationResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'additionalOccurrences', 'classificationResult_additionalOccurrences' - Specifies whether Amazon Macie detected additional occurrences of
+-- sensitive data in the S3 object. A finding includes location data for a
+-- maximum of 15 occurrences of sensitive data.
+--
+-- This value can help you determine whether to investigate additional
+-- occurrences of sensitive data in an object. You can do this by referring
+-- to the corresponding sensitive data discovery result for the finding
+-- (ClassificationDetails.detailedResultsLocation).
+--
+-- 'customDataIdentifiers', 'classificationResult_customDataIdentifiers' - The custom data identifiers that detected the sensitive data and the
+-- number of occurrences of the data that they detected.
+--
+-- 'mimeType', 'classificationResult_mimeType' - The type of content, as a MIME type, that the finding applies to. For
+-- example, application\/gzip, for a GNU Gzip compressed archive file, or
+-- application\/pdf, for an Adobe Portable Document Format file.
+--
+-- 'sensitiveData', 'classificationResult_sensitiveData' - The category, types, and number of occurrences of the sensitive data
+-- that produced the finding.
+--
+-- 'sizeClassified', 'classificationResult_sizeClassified' - The total size, in bytes, of the data that the finding applies to.
+--
+-- 'status', 'classificationResult_status' - The status of the finding.
+newClassificationResult ::
+  ClassificationResult
+newClassificationResult =
+  ClassificationResult'
+    { additionalOccurrences =
+        Prelude.Nothing,
+      customDataIdentifiers = Prelude.Nothing,
+      mimeType = Prelude.Nothing,
+      sensitiveData = Prelude.Nothing,
+      sizeClassified = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | Specifies whether Amazon Macie detected additional occurrences of
+-- sensitive data in the S3 object. A finding includes location data for a
+-- maximum of 15 occurrences of sensitive data.
+--
+-- This value can help you determine whether to investigate additional
+-- occurrences of sensitive data in an object. You can do this by referring
+-- to the corresponding sensitive data discovery result for the finding
+-- (ClassificationDetails.detailedResultsLocation).
+classificationResult_additionalOccurrences :: Lens.Lens' ClassificationResult (Prelude.Maybe Prelude.Bool)
+classificationResult_additionalOccurrences = Lens.lens (\ClassificationResult' {additionalOccurrences} -> additionalOccurrences) (\s@ClassificationResult' {} a -> s {additionalOccurrences = a} :: ClassificationResult)
+
+-- | The custom data identifiers that detected the sensitive data and the
+-- number of occurrences of the data that they detected.
+classificationResult_customDataIdentifiers :: Lens.Lens' ClassificationResult (Prelude.Maybe CustomDataIdentifiers)
+classificationResult_customDataIdentifiers = Lens.lens (\ClassificationResult' {customDataIdentifiers} -> customDataIdentifiers) (\s@ClassificationResult' {} a -> s {customDataIdentifiers = a} :: ClassificationResult)
+
+-- | The type of content, as a MIME type, that the finding applies to. For
+-- example, application\/gzip, for a GNU Gzip compressed archive file, or
+-- application\/pdf, for an Adobe Portable Document Format file.
+classificationResult_mimeType :: Lens.Lens' ClassificationResult (Prelude.Maybe Prelude.Text)
+classificationResult_mimeType = Lens.lens (\ClassificationResult' {mimeType} -> mimeType) (\s@ClassificationResult' {} a -> s {mimeType = a} :: ClassificationResult)
+
+-- | The category, types, and number of occurrences of the sensitive data
+-- that produced the finding.
+classificationResult_sensitiveData :: Lens.Lens' ClassificationResult (Prelude.Maybe [SensitiveDataItem])
+classificationResult_sensitiveData = Lens.lens (\ClassificationResult' {sensitiveData} -> sensitiveData) (\s@ClassificationResult' {} a -> s {sensitiveData = a} :: ClassificationResult) Prelude.. Lens.mapping Lens.coerced
+
+-- | The total size, in bytes, of the data that the finding applies to.
+classificationResult_sizeClassified :: Lens.Lens' ClassificationResult (Prelude.Maybe Prelude.Integer)
+classificationResult_sizeClassified = Lens.lens (\ClassificationResult' {sizeClassified} -> sizeClassified) (\s@ClassificationResult' {} a -> s {sizeClassified = a} :: ClassificationResult)
+
+-- | The status of the finding.
+classificationResult_status :: Lens.Lens' ClassificationResult (Prelude.Maybe ClassificationResultStatus)
+classificationResult_status = Lens.lens (\ClassificationResult' {status} -> status) (\s@ClassificationResult' {} a -> s {status = a} :: ClassificationResult)
+
+instance Data.FromJSON ClassificationResult where
+  parseJSON =
+    Data.withObject
+      "ClassificationResult"
+      ( \x ->
+          ClassificationResult'
+            Prelude.<$> (x Data..:? "additionalOccurrences")
+            Prelude.<*> (x Data..:? "customDataIdentifiers")
+            Prelude.<*> (x Data..:? "mimeType")
+            Prelude.<*> (x Data..:? "sensitiveData" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "sizeClassified")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable ClassificationResult where
+  hashWithSalt _salt ClassificationResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalOccurrences
+      `Prelude.hashWithSalt` customDataIdentifiers
+      `Prelude.hashWithSalt` mimeType
+      `Prelude.hashWithSalt` sensitiveData
+      `Prelude.hashWithSalt` sizeClassified
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ClassificationResult where
+  rnf ClassificationResult' {..} =
+    Prelude.rnf additionalOccurrences
+      `Prelude.seq` Prelude.rnf customDataIdentifiers
+      `Prelude.seq` Prelude.rnf mimeType
+      `Prelude.seq` Prelude.rnf sensitiveData
+      `Prelude.seq` Prelude.rnf sizeClassified
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/MacieV2/Types/ClassificationResultStatus.hs b/gen/Amazonka/MacieV2/Types/ClassificationResultStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ClassificationResultStatus.hs
@@ -0,0 +1,380 @@
+{-# 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.MacieV2.Types.ClassificationResultStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ClassificationResultStatus 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 information about the status of a sensitive data finding.
+--
+-- /See:/ 'newClassificationResultStatus' smart constructor.
+data ClassificationResultStatus = ClassificationResultStatus'
+  { -- | The status of the finding. Possible values are:
+    --
+    -- -   COMPLETE - Amazon Macie successfully completed its analysis of the
+    --     S3 object that the finding applies to.
+    --
+    -- -   PARTIAL - Macie analyzed only a subset of the data in the S3 object
+    --     that the finding applies to. For example, the object is an archive
+    --     file that contains files in an unsupported format.
+    --
+    -- -   SKIPPED - Macie wasn\'t able to analyze the S3 object that the
+    --     finding applies to. For example, the object is a file that uses an
+    --     unsupported format.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | A brief description of the status of the finding. This value is null if
+    -- the status (code) of the finding is COMPLETE.
+    --
+    -- Amazon Macie uses this value to notify you of any errors, warnings, or
+    -- considerations that might impact your analysis of the finding and the
+    -- affected S3 object. Possible values are:
+    --
+    -- -   ARCHIVE_CONTAINS_UNPROCESSED_FILES - The object is an archive file
+    --     and Macie extracted and analyzed only some or none of the files in
+    --     the archive. To determine which files Macie analyzed, if any, you
+    --     can refer to the corresponding sensitive data discovery result for
+    --     the finding (ClassificationDetails.detailedResultsLocation).
+    --
+    -- -   ARCHIVE_EXCEEDS_SIZE_LIMIT - The object is an archive file whose
+    --     total storage size exceeds the size quota for this type of archive.
+    --
+    -- -   ARCHIVE_NESTING_LEVEL_OVER_LIMIT - The object is an archive file
+    --     whose nested depth exceeds the quota for the maximum number of
+    --     nested levels that Macie analyzes for this type of archive.
+    --
+    -- -   ARCHIVE_TOTAL_BYTES_EXTRACTED_OVER_LIMIT - The object is an archive
+    --     file that exceeds the quota for the maximum amount of data that
+    --     Macie extracts and analyzes for this type of archive.
+    --
+    -- -   ARCHIVE_TOTAL_DOCUMENTS_PROCESSED_OVER_LIMIT - The object is an
+    --     archive file that contains more than the maximum number of files
+    --     that Macie extracts and analyzes for this type of archive.
+    --
+    -- -   FILE_EXCEEDS_SIZE_LIMIT - The storage size of the object exceeds the
+    --     size quota for this type of file.
+    --
+    -- -   INVALID_ENCRYPTION - The object is encrypted using server-side
+    --     encryption but Macie isn’t allowed to use the key. Macie can’t
+    --     decrypt and analyze the object.
+    --
+    -- -   INVALID_KMS_KEY - The object is encrypted with an KMS key that was
+    --     disabled or is being deleted. Macie can’t decrypt and analyze the
+    --     object.
+    --
+    -- -   INVALID_OBJECT_STATE - The object doesn’t use a supported Amazon S3
+    --     storage class. For more information, see
+    --     <https://docs.aws.amazon.com/macie/latest/user/data-classification.html Discovering sensitive data>
+    --     in the /Amazon Macie User Guide/.
+    --
+    -- -   JSON_NESTING_LEVEL_OVER_LIMIT - The object contains JSON data and
+    --     the nested depth of the data exceeds the quota for the number of
+    --     nested levels that Macie analyzes for this type of file.
+    --
+    -- -   MALFORMED_FILE - The object is a malformed or corrupted file. An
+    --     error occurred when Macie attempted to detect the file’s type or
+    --     extract data from the file.
+    --
+    -- -   OBJECT_VERSION_MISMATCH - The object was changed while Macie was
+    --     analyzing it.
+    --
+    -- -   NO_SUCH_BUCKET_AVAILABLE - The object was in a bucket that was
+    --     deleted shortly before or when Macie attempted to analyze the
+    --     object.
+    --
+    -- -   MALFORMED_OR_FILE_SIZE_EXCEEDS_LIMIT - The object is a Microsoft
+    --     Office file that is malformed or exceeds the size quota for this
+    --     type of file. If the file is malformed, an error occurred when Macie
+    --     attempted to extract data from the file.
+    --
+    -- -   OOXML_UNCOMPRESSED_SIZE_EXCEEDS_LIMIT - The object is an Office Open
+    --     XML file that exceeds the size quota for this type of file.
+    --
+    -- -   OOXML_UNCOMPRESSED_RATIO_EXCEEDS_LIMIT - The object is an Office
+    --     Open XML file whose compression ratio exceeds the compression quota
+    --     for this type of file.
+    --
+    -- -   PERMISSION_DENIED - Macie isn’t allowed to access the object. The
+    --     object’s permissions settings prevent Macie from analyzing the
+    --     object.
+    --
+    -- -   SOURCE_OBJECT_NO_LONGER_AVAILABLE - The object was deleted shortly
+    --     before or when Macie attempted to analyze it.
+    --
+    -- -   UNABLE_TO_PARSE_FILE - The object is a file that contains structured
+    --     data and an error occurred when Macie attempted to parse the data.
+    --
+    -- -   UNSUPPORTED_FILE_TYPE_EXCEPTION - The object is a file that uses an
+    --     unsupported file or storage format. For more information, see
+    --     <https://docs.aws.amazon.com/macie/latest/user/discovery-supported-formats.html Supported file and storage formats>
+    --     in the /Amazon Macie User Guide/.
+    --
+    -- For information about sensitive data discovery quotas for files, see
+    -- <https://docs.aws.amazon.com/macie/latest/user/macie-quotas.html Amazon Macie quotas>
+    -- in the /Amazon Macie User Guide/.
+    reason :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClassificationResultStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'classificationResultStatus_code' - The status of the finding. Possible values are:
+--
+-- -   COMPLETE - Amazon Macie successfully completed its analysis of the
+--     S3 object that the finding applies to.
+--
+-- -   PARTIAL - Macie analyzed only a subset of the data in the S3 object
+--     that the finding applies to. For example, the object is an archive
+--     file that contains files in an unsupported format.
+--
+-- -   SKIPPED - Macie wasn\'t able to analyze the S3 object that the
+--     finding applies to. For example, the object is a file that uses an
+--     unsupported format.
+--
+-- 'reason', 'classificationResultStatus_reason' - A brief description of the status of the finding. This value is null if
+-- the status (code) of the finding is COMPLETE.
+--
+-- Amazon Macie uses this value to notify you of any errors, warnings, or
+-- considerations that might impact your analysis of the finding and the
+-- affected S3 object. Possible values are:
+--
+-- -   ARCHIVE_CONTAINS_UNPROCESSED_FILES - The object is an archive file
+--     and Macie extracted and analyzed only some or none of the files in
+--     the archive. To determine which files Macie analyzed, if any, you
+--     can refer to the corresponding sensitive data discovery result for
+--     the finding (ClassificationDetails.detailedResultsLocation).
+--
+-- -   ARCHIVE_EXCEEDS_SIZE_LIMIT - The object is an archive file whose
+--     total storage size exceeds the size quota for this type of archive.
+--
+-- -   ARCHIVE_NESTING_LEVEL_OVER_LIMIT - The object is an archive file
+--     whose nested depth exceeds the quota for the maximum number of
+--     nested levels that Macie analyzes for this type of archive.
+--
+-- -   ARCHIVE_TOTAL_BYTES_EXTRACTED_OVER_LIMIT - The object is an archive
+--     file that exceeds the quota for the maximum amount of data that
+--     Macie extracts and analyzes for this type of archive.
+--
+-- -   ARCHIVE_TOTAL_DOCUMENTS_PROCESSED_OVER_LIMIT - The object is an
+--     archive file that contains more than the maximum number of files
+--     that Macie extracts and analyzes for this type of archive.
+--
+-- -   FILE_EXCEEDS_SIZE_LIMIT - The storage size of the object exceeds the
+--     size quota for this type of file.
+--
+-- -   INVALID_ENCRYPTION - The object is encrypted using server-side
+--     encryption but Macie isn’t allowed to use the key. Macie can’t
+--     decrypt and analyze the object.
+--
+-- -   INVALID_KMS_KEY - The object is encrypted with an KMS key that was
+--     disabled or is being deleted. Macie can’t decrypt and analyze the
+--     object.
+--
+-- -   INVALID_OBJECT_STATE - The object doesn’t use a supported Amazon S3
+--     storage class. For more information, see
+--     <https://docs.aws.amazon.com/macie/latest/user/data-classification.html Discovering sensitive data>
+--     in the /Amazon Macie User Guide/.
+--
+-- -   JSON_NESTING_LEVEL_OVER_LIMIT - The object contains JSON data and
+--     the nested depth of the data exceeds the quota for the number of
+--     nested levels that Macie analyzes for this type of file.
+--
+-- -   MALFORMED_FILE - The object is a malformed or corrupted file. An
+--     error occurred when Macie attempted to detect the file’s type or
+--     extract data from the file.
+--
+-- -   OBJECT_VERSION_MISMATCH - The object was changed while Macie was
+--     analyzing it.
+--
+-- -   NO_SUCH_BUCKET_AVAILABLE - The object was in a bucket that was
+--     deleted shortly before or when Macie attempted to analyze the
+--     object.
+--
+-- -   MALFORMED_OR_FILE_SIZE_EXCEEDS_LIMIT - The object is a Microsoft
+--     Office file that is malformed or exceeds the size quota for this
+--     type of file. If the file is malformed, an error occurred when Macie
+--     attempted to extract data from the file.
+--
+-- -   OOXML_UNCOMPRESSED_SIZE_EXCEEDS_LIMIT - The object is an Office Open
+--     XML file that exceeds the size quota for this type of file.
+--
+-- -   OOXML_UNCOMPRESSED_RATIO_EXCEEDS_LIMIT - The object is an Office
+--     Open XML file whose compression ratio exceeds the compression quota
+--     for this type of file.
+--
+-- -   PERMISSION_DENIED - Macie isn’t allowed to access the object. The
+--     object’s permissions settings prevent Macie from analyzing the
+--     object.
+--
+-- -   SOURCE_OBJECT_NO_LONGER_AVAILABLE - The object was deleted shortly
+--     before or when Macie attempted to analyze it.
+--
+-- -   UNABLE_TO_PARSE_FILE - The object is a file that contains structured
+--     data and an error occurred when Macie attempted to parse the data.
+--
+-- -   UNSUPPORTED_FILE_TYPE_EXCEPTION - The object is a file that uses an
+--     unsupported file or storage format. For more information, see
+--     <https://docs.aws.amazon.com/macie/latest/user/discovery-supported-formats.html Supported file and storage formats>
+--     in the /Amazon Macie User Guide/.
+--
+-- For information about sensitive data discovery quotas for files, see
+-- <https://docs.aws.amazon.com/macie/latest/user/macie-quotas.html Amazon Macie quotas>
+-- in the /Amazon Macie User Guide/.
+newClassificationResultStatus ::
+  ClassificationResultStatus
+newClassificationResultStatus =
+  ClassificationResultStatus'
+    { code = Prelude.Nothing,
+      reason = Prelude.Nothing
+    }
+
+-- | The status of the finding. Possible values are:
+--
+-- -   COMPLETE - Amazon Macie successfully completed its analysis of the
+--     S3 object that the finding applies to.
+--
+-- -   PARTIAL - Macie analyzed only a subset of the data in the S3 object
+--     that the finding applies to. For example, the object is an archive
+--     file that contains files in an unsupported format.
+--
+-- -   SKIPPED - Macie wasn\'t able to analyze the S3 object that the
+--     finding applies to. For example, the object is a file that uses an
+--     unsupported format.
+classificationResultStatus_code :: Lens.Lens' ClassificationResultStatus (Prelude.Maybe Prelude.Text)
+classificationResultStatus_code = Lens.lens (\ClassificationResultStatus' {code} -> code) (\s@ClassificationResultStatus' {} a -> s {code = a} :: ClassificationResultStatus)
+
+-- | A brief description of the status of the finding. This value is null if
+-- the status (code) of the finding is COMPLETE.
+--
+-- Amazon Macie uses this value to notify you of any errors, warnings, or
+-- considerations that might impact your analysis of the finding and the
+-- affected S3 object. Possible values are:
+--
+-- -   ARCHIVE_CONTAINS_UNPROCESSED_FILES - The object is an archive file
+--     and Macie extracted and analyzed only some or none of the files in
+--     the archive. To determine which files Macie analyzed, if any, you
+--     can refer to the corresponding sensitive data discovery result for
+--     the finding (ClassificationDetails.detailedResultsLocation).
+--
+-- -   ARCHIVE_EXCEEDS_SIZE_LIMIT - The object is an archive file whose
+--     total storage size exceeds the size quota for this type of archive.
+--
+-- -   ARCHIVE_NESTING_LEVEL_OVER_LIMIT - The object is an archive file
+--     whose nested depth exceeds the quota for the maximum number of
+--     nested levels that Macie analyzes for this type of archive.
+--
+-- -   ARCHIVE_TOTAL_BYTES_EXTRACTED_OVER_LIMIT - The object is an archive
+--     file that exceeds the quota for the maximum amount of data that
+--     Macie extracts and analyzes for this type of archive.
+--
+-- -   ARCHIVE_TOTAL_DOCUMENTS_PROCESSED_OVER_LIMIT - The object is an
+--     archive file that contains more than the maximum number of files
+--     that Macie extracts and analyzes for this type of archive.
+--
+-- -   FILE_EXCEEDS_SIZE_LIMIT - The storage size of the object exceeds the
+--     size quota for this type of file.
+--
+-- -   INVALID_ENCRYPTION - The object is encrypted using server-side
+--     encryption but Macie isn’t allowed to use the key. Macie can’t
+--     decrypt and analyze the object.
+--
+-- -   INVALID_KMS_KEY - The object is encrypted with an KMS key that was
+--     disabled or is being deleted. Macie can’t decrypt and analyze the
+--     object.
+--
+-- -   INVALID_OBJECT_STATE - The object doesn’t use a supported Amazon S3
+--     storage class. For more information, see
+--     <https://docs.aws.amazon.com/macie/latest/user/data-classification.html Discovering sensitive data>
+--     in the /Amazon Macie User Guide/.
+--
+-- -   JSON_NESTING_LEVEL_OVER_LIMIT - The object contains JSON data and
+--     the nested depth of the data exceeds the quota for the number of
+--     nested levels that Macie analyzes for this type of file.
+--
+-- -   MALFORMED_FILE - The object is a malformed or corrupted file. An
+--     error occurred when Macie attempted to detect the file’s type or
+--     extract data from the file.
+--
+-- -   OBJECT_VERSION_MISMATCH - The object was changed while Macie was
+--     analyzing it.
+--
+-- -   NO_SUCH_BUCKET_AVAILABLE - The object was in a bucket that was
+--     deleted shortly before or when Macie attempted to analyze the
+--     object.
+--
+-- -   MALFORMED_OR_FILE_SIZE_EXCEEDS_LIMIT - The object is a Microsoft
+--     Office file that is malformed or exceeds the size quota for this
+--     type of file. If the file is malformed, an error occurred when Macie
+--     attempted to extract data from the file.
+--
+-- -   OOXML_UNCOMPRESSED_SIZE_EXCEEDS_LIMIT - The object is an Office Open
+--     XML file that exceeds the size quota for this type of file.
+--
+-- -   OOXML_UNCOMPRESSED_RATIO_EXCEEDS_LIMIT - The object is an Office
+--     Open XML file whose compression ratio exceeds the compression quota
+--     for this type of file.
+--
+-- -   PERMISSION_DENIED - Macie isn’t allowed to access the object. The
+--     object’s permissions settings prevent Macie from analyzing the
+--     object.
+--
+-- -   SOURCE_OBJECT_NO_LONGER_AVAILABLE - The object was deleted shortly
+--     before or when Macie attempted to analyze it.
+--
+-- -   UNABLE_TO_PARSE_FILE - The object is a file that contains structured
+--     data and an error occurred when Macie attempted to parse the data.
+--
+-- -   UNSUPPORTED_FILE_TYPE_EXCEPTION - The object is a file that uses an
+--     unsupported file or storage format. For more information, see
+--     <https://docs.aws.amazon.com/macie/latest/user/discovery-supported-formats.html Supported file and storage formats>
+--     in the /Amazon Macie User Guide/.
+--
+-- For information about sensitive data discovery quotas for files, see
+-- <https://docs.aws.amazon.com/macie/latest/user/macie-quotas.html Amazon Macie quotas>
+-- in the /Amazon Macie User Guide/.
+classificationResultStatus_reason :: Lens.Lens' ClassificationResultStatus (Prelude.Maybe Prelude.Text)
+classificationResultStatus_reason = Lens.lens (\ClassificationResultStatus' {reason} -> reason) (\s@ClassificationResultStatus' {} a -> s {reason = a} :: ClassificationResultStatus)
+
+instance Data.FromJSON ClassificationResultStatus where
+  parseJSON =
+    Data.withObject
+      "ClassificationResultStatus"
+      ( \x ->
+          ClassificationResultStatus'
+            Prelude.<$> (x Data..:? "code")
+            Prelude.<*> (x Data..:? "reason")
+      )
+
+instance Prelude.Hashable ClassificationResultStatus where
+  hashWithSalt _salt ClassificationResultStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` reason
+
+instance Prelude.NFData ClassificationResultStatus where
+  rnf ClassificationResultStatus' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf reason
diff --git a/gen/Amazonka/MacieV2/Types/ClassificationScopeSummary.hs b/gen/Amazonka/MacieV2/Types/ClassificationScopeSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ClassificationScopeSummary.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.MacieV2.Types.ClassificationScopeSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ClassificationScopeSummary 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 information about the classification scope for an Amazon Macie
+-- account. Macie uses the scope\'s settings when it performs automated
+-- sensitive data discovery for the account.
+--
+-- /See:/ 'newClassificationScopeSummary' smart constructor.
+data ClassificationScopeSummary = ClassificationScopeSummary'
+  { -- | The unique identifier for the classification scope.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the classification scope.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClassificationScopeSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'classificationScopeSummary_id' - The unique identifier for the classification scope.
+--
+-- 'name', 'classificationScopeSummary_name' - The name of the classification scope.
+newClassificationScopeSummary ::
+  ClassificationScopeSummary
+newClassificationScopeSummary =
+  ClassificationScopeSummary'
+    { id = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The unique identifier for the classification scope.
+classificationScopeSummary_id :: Lens.Lens' ClassificationScopeSummary (Prelude.Maybe Prelude.Text)
+classificationScopeSummary_id = Lens.lens (\ClassificationScopeSummary' {id} -> id) (\s@ClassificationScopeSummary' {} a -> s {id = a} :: ClassificationScopeSummary)
+
+-- | The name of the classification scope.
+classificationScopeSummary_name :: Lens.Lens' ClassificationScopeSummary (Prelude.Maybe Prelude.Text)
+classificationScopeSummary_name = Lens.lens (\ClassificationScopeSummary' {name} -> name) (\s@ClassificationScopeSummary' {} a -> s {name = a} :: ClassificationScopeSummary)
+
+instance Data.FromJSON ClassificationScopeSummary where
+  parseJSON =
+    Data.withObject
+      "ClassificationScopeSummary"
+      ( \x ->
+          ClassificationScopeSummary'
+            Prelude.<$> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable ClassificationScopeSummary where
+  hashWithSalt _salt ClassificationScopeSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData ClassificationScopeSummary where
+  rnf ClassificationScopeSummary' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/MacieV2/Types/ClassificationScopeUpdateOperation.hs b/gen/Amazonka/MacieV2/Types/ClassificationScopeUpdateOperation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ClassificationScopeUpdateOperation.hs
@@ -0,0 +1,79 @@
+{-# 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.MacieV2.Types.ClassificationScopeUpdateOperation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ClassificationScopeUpdateOperation
+  ( ClassificationScopeUpdateOperation
+      ( ..,
+        ClassificationScopeUpdateOperation_ADD,
+        ClassificationScopeUpdateOperation_REMOVE,
+        ClassificationScopeUpdateOperation_REPLACE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies how to apply changes to the S3 bucket exclusion list defined
+-- by the classification scope for an Amazon Macie account. Valid values
+-- are:
+newtype ClassificationScopeUpdateOperation = ClassificationScopeUpdateOperation'
+  { fromClassificationScopeUpdateOperation ::
+      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 ClassificationScopeUpdateOperation_ADD :: ClassificationScopeUpdateOperation
+pattern ClassificationScopeUpdateOperation_ADD = ClassificationScopeUpdateOperation' "ADD"
+
+pattern ClassificationScopeUpdateOperation_REMOVE :: ClassificationScopeUpdateOperation
+pattern ClassificationScopeUpdateOperation_REMOVE = ClassificationScopeUpdateOperation' "REMOVE"
+
+pattern ClassificationScopeUpdateOperation_REPLACE :: ClassificationScopeUpdateOperation
+pattern ClassificationScopeUpdateOperation_REPLACE = ClassificationScopeUpdateOperation' "REPLACE"
+
+{-# COMPLETE
+  ClassificationScopeUpdateOperation_ADD,
+  ClassificationScopeUpdateOperation_REMOVE,
+  ClassificationScopeUpdateOperation_REPLACE,
+  ClassificationScopeUpdateOperation'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/CriteriaBlockForJob.hs b/gen/Amazonka/MacieV2/Types/CriteriaBlockForJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/CriteriaBlockForJob.hs
@@ -0,0 +1,82 @@
+{-# 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.MacieV2.Types.CriteriaBlockForJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.CriteriaBlockForJob where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.CriteriaForJob
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies one or more property- and tag-based conditions that define
+-- criteria for including or excluding S3 buckets from a classification
+-- job.
+--
+-- /See:/ 'newCriteriaBlockForJob' smart constructor.
+data CriteriaBlockForJob = CriteriaBlockForJob'
+  { -- | An array of conditions, one for each condition that determines which
+    -- buckets to include or exclude from the job. If you specify more than one
+    -- condition, Amazon Macie uses AND logic to join the conditions.
+    and :: Prelude.Maybe [CriteriaForJob]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CriteriaBlockForJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'and', 'criteriaBlockForJob_and' - An array of conditions, one for each condition that determines which
+-- buckets to include or exclude from the job. If you specify more than one
+-- condition, Amazon Macie uses AND logic to join the conditions.
+newCriteriaBlockForJob ::
+  CriteriaBlockForJob
+newCriteriaBlockForJob =
+  CriteriaBlockForJob' {and = Prelude.Nothing}
+
+-- | An array of conditions, one for each condition that determines which
+-- buckets to include or exclude from the job. If you specify more than one
+-- condition, Amazon Macie uses AND logic to join the conditions.
+criteriaBlockForJob_and :: Lens.Lens' CriteriaBlockForJob (Prelude.Maybe [CriteriaForJob])
+criteriaBlockForJob_and = Lens.lens (\CriteriaBlockForJob' {and} -> and) (\s@CriteriaBlockForJob' {} a -> s {and = a} :: CriteriaBlockForJob) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON CriteriaBlockForJob where
+  parseJSON =
+    Data.withObject
+      "CriteriaBlockForJob"
+      ( \x ->
+          CriteriaBlockForJob'
+            Prelude.<$> (x Data..:? "and" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable CriteriaBlockForJob where
+  hashWithSalt _salt CriteriaBlockForJob' {..} =
+    _salt `Prelude.hashWithSalt` and
+
+instance Prelude.NFData CriteriaBlockForJob where
+  rnf CriteriaBlockForJob' {..} = Prelude.rnf and
+
+instance Data.ToJSON CriteriaBlockForJob where
+  toJSON CriteriaBlockForJob' {..} =
+    Data.object
+      (Prelude.catMaybes [("and" Data..=) Prelude.<$> and])
diff --git a/gen/Amazonka/MacieV2/Types/CriteriaForJob.hs b/gen/Amazonka/MacieV2/Types/CriteriaForJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/CriteriaForJob.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.CriteriaForJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.CriteriaForJob where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.SimpleCriterionForJob
+import Amazonka.MacieV2.Types.TagCriterionForJob
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a property- or tag-based condition that defines criteria for
+-- including or excluding S3 buckets from a classification job.
+--
+-- /See:/ 'newCriteriaForJob' smart constructor.
+data CriteriaForJob = CriteriaForJob'
+  { -- | A property-based condition that defines a property, operator, and one or
+    -- more values for including or excluding buckets from the job.
+    simpleCriterion :: Prelude.Maybe SimpleCriterionForJob,
+    -- | A tag-based condition that defines an operator and tag keys, tag values,
+    -- or tag key and value pairs for including or excluding buckets from the
+    -- job.
+    tagCriterion :: Prelude.Maybe TagCriterionForJob
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CriteriaForJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'simpleCriterion', 'criteriaForJob_simpleCriterion' - A property-based condition that defines a property, operator, and one or
+-- more values for including or excluding buckets from the job.
+--
+-- 'tagCriterion', 'criteriaForJob_tagCriterion' - A tag-based condition that defines an operator and tag keys, tag values,
+-- or tag key and value pairs for including or excluding buckets from the
+-- job.
+newCriteriaForJob ::
+  CriteriaForJob
+newCriteriaForJob =
+  CriteriaForJob'
+    { simpleCriterion = Prelude.Nothing,
+      tagCriterion = Prelude.Nothing
+    }
+
+-- | A property-based condition that defines a property, operator, and one or
+-- more values for including or excluding buckets from the job.
+criteriaForJob_simpleCriterion :: Lens.Lens' CriteriaForJob (Prelude.Maybe SimpleCriterionForJob)
+criteriaForJob_simpleCriterion = Lens.lens (\CriteriaForJob' {simpleCriterion} -> simpleCriterion) (\s@CriteriaForJob' {} a -> s {simpleCriterion = a} :: CriteriaForJob)
+
+-- | A tag-based condition that defines an operator and tag keys, tag values,
+-- or tag key and value pairs for including or excluding buckets from the
+-- job.
+criteriaForJob_tagCriterion :: Lens.Lens' CriteriaForJob (Prelude.Maybe TagCriterionForJob)
+criteriaForJob_tagCriterion = Lens.lens (\CriteriaForJob' {tagCriterion} -> tagCriterion) (\s@CriteriaForJob' {} a -> s {tagCriterion = a} :: CriteriaForJob)
+
+instance Data.FromJSON CriteriaForJob where
+  parseJSON =
+    Data.withObject
+      "CriteriaForJob"
+      ( \x ->
+          CriteriaForJob'
+            Prelude.<$> (x Data..:? "simpleCriterion")
+            Prelude.<*> (x Data..:? "tagCriterion")
+      )
+
+instance Prelude.Hashable CriteriaForJob where
+  hashWithSalt _salt CriteriaForJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` simpleCriterion
+      `Prelude.hashWithSalt` tagCriterion
+
+instance Prelude.NFData CriteriaForJob where
+  rnf CriteriaForJob' {..} =
+    Prelude.rnf simpleCriterion
+      `Prelude.seq` Prelude.rnf tagCriterion
+
+instance Data.ToJSON CriteriaForJob where
+  toJSON CriteriaForJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("simpleCriterion" Data..=)
+              Prelude.<$> simpleCriterion,
+            ("tagCriterion" Data..=) Prelude.<$> tagCriterion
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/CriterionAdditionalProperties.hs b/gen/Amazonka/MacieV2/Types/CriterionAdditionalProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/CriterionAdditionalProperties.hs
@@ -0,0 +1,211 @@
+{-# 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.MacieV2.Types.CriterionAdditionalProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.CriterionAdditionalProperties where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the operator to use in a property-based condition that filters
+-- the results of a query for findings. For detailed information and
+-- examples of each operator, see
+-- <https://docs.aws.amazon.com/macie/latest/user/findings-filter-basics.html Fundamentals of filtering findings>
+-- in the /Amazon Macie User Guide/.
+--
+-- /See:/ 'newCriterionAdditionalProperties' smart constructor.
+data CriterionAdditionalProperties = CriterionAdditionalProperties'
+  { -- | The value for the property matches (equals) the specified value. If you
+    -- specify multiple values, Macie uses OR logic to join the values.
+    eq :: Prelude.Maybe [Prelude.Text],
+    -- | The value for the property exclusively matches (equals an exact match
+    -- for) all the specified values. If you specify multiple values, Amazon
+    -- Macie uses AND logic to join the values.
+    --
+    -- You can use this operator with the following properties:
+    -- customDataIdentifiers.detections.arn,
+    -- customDataIdentifiers.detections.name,
+    -- resourcesAffected.s3Bucket.tags.key,
+    -- resourcesAffected.s3Bucket.tags.value,
+    -- resourcesAffected.s3Object.tags.key,
+    -- resourcesAffected.s3Object.tags.value, sensitiveData.category, and
+    -- sensitiveData.detections.type.
+    eqExactMatch :: Prelude.Maybe [Prelude.Text],
+    -- | The value for the property is greater than the specified value.
+    gt :: Prelude.Maybe Prelude.Integer,
+    -- | The value for the property is greater than or equal to the specified
+    -- value.
+    gte :: Prelude.Maybe Prelude.Integer,
+    -- | The value for the property is less than the specified value.
+    lt :: Prelude.Maybe Prelude.Integer,
+    -- | The value for the property is less than or equal to the specified value.
+    lte :: Prelude.Maybe Prelude.Integer,
+    -- | The value for the property doesn\'t match (doesn\'t equal) the specified
+    -- value. If you specify multiple values, Macie uses OR logic to join the
+    -- values.
+    neq :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CriterionAdditionalProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eq', 'criterionAdditionalProperties_eq' - The value for the property matches (equals) the specified value. If you
+-- specify multiple values, Macie uses OR logic to join the values.
+--
+-- 'eqExactMatch', 'criterionAdditionalProperties_eqExactMatch' - The value for the property exclusively matches (equals an exact match
+-- for) all the specified values. If you specify multiple values, Amazon
+-- Macie uses AND logic to join the values.
+--
+-- You can use this operator with the following properties:
+-- customDataIdentifiers.detections.arn,
+-- customDataIdentifiers.detections.name,
+-- resourcesAffected.s3Bucket.tags.key,
+-- resourcesAffected.s3Bucket.tags.value,
+-- resourcesAffected.s3Object.tags.key,
+-- resourcesAffected.s3Object.tags.value, sensitiveData.category, and
+-- sensitiveData.detections.type.
+--
+-- 'gt', 'criterionAdditionalProperties_gt' - The value for the property is greater than the specified value.
+--
+-- 'gte', 'criterionAdditionalProperties_gte' - The value for the property is greater than or equal to the specified
+-- value.
+--
+-- 'lt', 'criterionAdditionalProperties_lt' - The value for the property is less than the specified value.
+--
+-- 'lte', 'criterionAdditionalProperties_lte' - The value for the property is less than or equal to the specified value.
+--
+-- 'neq', 'criterionAdditionalProperties_neq' - The value for the property doesn\'t match (doesn\'t equal) the specified
+-- value. If you specify multiple values, Macie uses OR logic to join the
+-- values.
+newCriterionAdditionalProperties ::
+  CriterionAdditionalProperties
+newCriterionAdditionalProperties =
+  CriterionAdditionalProperties'
+    { eq =
+        Prelude.Nothing,
+      eqExactMatch = Prelude.Nothing,
+      gt = Prelude.Nothing,
+      gte = Prelude.Nothing,
+      lt = Prelude.Nothing,
+      lte = Prelude.Nothing,
+      neq = Prelude.Nothing
+    }
+
+-- | The value for the property matches (equals) the specified value. If you
+-- specify multiple values, Macie uses OR logic to join the values.
+criterionAdditionalProperties_eq :: Lens.Lens' CriterionAdditionalProperties (Prelude.Maybe [Prelude.Text])
+criterionAdditionalProperties_eq = Lens.lens (\CriterionAdditionalProperties' {eq} -> eq) (\s@CriterionAdditionalProperties' {} a -> s {eq = a} :: CriterionAdditionalProperties) Prelude.. Lens.mapping Lens.coerced
+
+-- | The value for the property exclusively matches (equals an exact match
+-- for) all the specified values. If you specify multiple values, Amazon
+-- Macie uses AND logic to join the values.
+--
+-- You can use this operator with the following properties:
+-- customDataIdentifiers.detections.arn,
+-- customDataIdentifiers.detections.name,
+-- resourcesAffected.s3Bucket.tags.key,
+-- resourcesAffected.s3Bucket.tags.value,
+-- resourcesAffected.s3Object.tags.key,
+-- resourcesAffected.s3Object.tags.value, sensitiveData.category, and
+-- sensitiveData.detections.type.
+criterionAdditionalProperties_eqExactMatch :: Lens.Lens' CriterionAdditionalProperties (Prelude.Maybe [Prelude.Text])
+criterionAdditionalProperties_eqExactMatch = Lens.lens (\CriterionAdditionalProperties' {eqExactMatch} -> eqExactMatch) (\s@CriterionAdditionalProperties' {} a -> s {eqExactMatch = a} :: CriterionAdditionalProperties) Prelude.. Lens.mapping Lens.coerced
+
+-- | The value for the property is greater than the specified value.
+criterionAdditionalProperties_gt :: Lens.Lens' CriterionAdditionalProperties (Prelude.Maybe Prelude.Integer)
+criterionAdditionalProperties_gt = Lens.lens (\CriterionAdditionalProperties' {gt} -> gt) (\s@CriterionAdditionalProperties' {} a -> s {gt = a} :: CriterionAdditionalProperties)
+
+-- | The value for the property is greater than or equal to the specified
+-- value.
+criterionAdditionalProperties_gte :: Lens.Lens' CriterionAdditionalProperties (Prelude.Maybe Prelude.Integer)
+criterionAdditionalProperties_gte = Lens.lens (\CriterionAdditionalProperties' {gte} -> gte) (\s@CriterionAdditionalProperties' {} a -> s {gte = a} :: CriterionAdditionalProperties)
+
+-- | The value for the property is less than the specified value.
+criterionAdditionalProperties_lt :: Lens.Lens' CriterionAdditionalProperties (Prelude.Maybe Prelude.Integer)
+criterionAdditionalProperties_lt = Lens.lens (\CriterionAdditionalProperties' {lt} -> lt) (\s@CriterionAdditionalProperties' {} a -> s {lt = a} :: CriterionAdditionalProperties)
+
+-- | The value for the property is less than or equal to the specified value.
+criterionAdditionalProperties_lte :: Lens.Lens' CriterionAdditionalProperties (Prelude.Maybe Prelude.Integer)
+criterionAdditionalProperties_lte = Lens.lens (\CriterionAdditionalProperties' {lte} -> lte) (\s@CriterionAdditionalProperties' {} a -> s {lte = a} :: CriterionAdditionalProperties)
+
+-- | The value for the property doesn\'t match (doesn\'t equal) the specified
+-- value. If you specify multiple values, Macie uses OR logic to join the
+-- values.
+criterionAdditionalProperties_neq :: Lens.Lens' CriterionAdditionalProperties (Prelude.Maybe [Prelude.Text])
+criterionAdditionalProperties_neq = Lens.lens (\CriterionAdditionalProperties' {neq} -> neq) (\s@CriterionAdditionalProperties' {} a -> s {neq = a} :: CriterionAdditionalProperties) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON CriterionAdditionalProperties where
+  parseJSON =
+    Data.withObject
+      "CriterionAdditionalProperties"
+      ( \x ->
+          CriterionAdditionalProperties'
+            Prelude.<$> (x Data..:? "eq" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "eqExactMatch" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "gt")
+            Prelude.<*> (x Data..:? "gte")
+            Prelude.<*> (x Data..:? "lt")
+            Prelude.<*> (x Data..:? "lte")
+            Prelude.<*> (x Data..:? "neq" Data..!= Prelude.mempty)
+      )
+
+instance
+  Prelude.Hashable
+    CriterionAdditionalProperties
+  where
+  hashWithSalt _salt CriterionAdditionalProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` eq
+      `Prelude.hashWithSalt` eqExactMatch
+      `Prelude.hashWithSalt` gt
+      `Prelude.hashWithSalt` gte
+      `Prelude.hashWithSalt` lt
+      `Prelude.hashWithSalt` lte
+      `Prelude.hashWithSalt` neq
+
+instance Prelude.NFData CriterionAdditionalProperties where
+  rnf CriterionAdditionalProperties' {..} =
+    Prelude.rnf eq
+      `Prelude.seq` Prelude.rnf eqExactMatch
+      `Prelude.seq` Prelude.rnf gt
+      `Prelude.seq` Prelude.rnf gte
+      `Prelude.seq` Prelude.rnf lt
+      `Prelude.seq` Prelude.rnf lte
+      `Prelude.seq` Prelude.rnf neq
+
+instance Data.ToJSON CriterionAdditionalProperties where
+  toJSON CriterionAdditionalProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("eq" Data..=) Prelude.<$> eq,
+            ("eqExactMatch" Data..=) Prelude.<$> eqExactMatch,
+            ("gt" Data..=) Prelude.<$> gt,
+            ("gte" Data..=) Prelude.<$> gte,
+            ("lt" Data..=) Prelude.<$> lt,
+            ("lte" Data..=) Prelude.<$> lte,
+            ("neq" Data..=) Prelude.<$> neq
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/Currency.hs b/gen/Amazonka/MacieV2/Types/Currency.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/Currency.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.Currency
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.Currency
+  ( Currency
+      ( ..,
+        Currency_USD
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The type of currency that the data for an Amazon Macie usage metric is
+-- reported in. Possible values are:
+newtype Currency = Currency'
+  { fromCurrency ::
+      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 Currency_USD :: Currency
+pattern Currency_USD = Currency' "USD"
+
+{-# COMPLETE
+  Currency_USD,
+  Currency'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/CustomDataIdentifierSummary.hs b/gen/Amazonka/MacieV2/Types/CustomDataIdentifierSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/CustomDataIdentifierSummary.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.MacieV2.Types.CustomDataIdentifierSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.CustomDataIdentifierSummary 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 information about a custom data identifier.
+--
+-- /See:/ 'newCustomDataIdentifierSummary' smart constructor.
+data CustomDataIdentifierSummary = CustomDataIdentifierSummary'
+  { -- | The Amazon Resource Name (ARN) of the custom data identifier.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in UTC and extended ISO 8601 format, when the custom
+    -- data identifier was created.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The custom description of the custom data identifier.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the custom data identifier.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The custom name of the custom data identifier.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomDataIdentifierSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'customDataIdentifierSummary_arn' - The Amazon Resource Name (ARN) of the custom data identifier.
+--
+-- 'createdAt', 'customDataIdentifierSummary_createdAt' - The date and time, in UTC and extended ISO 8601 format, when the custom
+-- data identifier was created.
+--
+-- 'description', 'customDataIdentifierSummary_description' - The custom description of the custom data identifier.
+--
+-- 'id', 'customDataIdentifierSummary_id' - The unique identifier for the custom data identifier.
+--
+-- 'name', 'customDataIdentifierSummary_name' - The custom name of the custom data identifier.
+newCustomDataIdentifierSummary ::
+  CustomDataIdentifierSummary
+newCustomDataIdentifierSummary =
+  CustomDataIdentifierSummary'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the custom data identifier.
+customDataIdentifierSummary_arn :: Lens.Lens' CustomDataIdentifierSummary (Prelude.Maybe Prelude.Text)
+customDataIdentifierSummary_arn = Lens.lens (\CustomDataIdentifierSummary' {arn} -> arn) (\s@CustomDataIdentifierSummary' {} a -> s {arn = a} :: CustomDataIdentifierSummary)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the custom
+-- data identifier was created.
+customDataIdentifierSummary_createdAt :: Lens.Lens' CustomDataIdentifierSummary (Prelude.Maybe Prelude.UTCTime)
+customDataIdentifierSummary_createdAt = Lens.lens (\CustomDataIdentifierSummary' {createdAt} -> createdAt) (\s@CustomDataIdentifierSummary' {} a -> s {createdAt = a} :: CustomDataIdentifierSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The custom description of the custom data identifier.
+customDataIdentifierSummary_description :: Lens.Lens' CustomDataIdentifierSummary (Prelude.Maybe Prelude.Text)
+customDataIdentifierSummary_description = Lens.lens (\CustomDataIdentifierSummary' {description} -> description) (\s@CustomDataIdentifierSummary' {} a -> s {description = a} :: CustomDataIdentifierSummary)
+
+-- | The unique identifier for the custom data identifier.
+customDataIdentifierSummary_id :: Lens.Lens' CustomDataIdentifierSummary (Prelude.Maybe Prelude.Text)
+customDataIdentifierSummary_id = Lens.lens (\CustomDataIdentifierSummary' {id} -> id) (\s@CustomDataIdentifierSummary' {} a -> s {id = a} :: CustomDataIdentifierSummary)
+
+-- | The custom name of the custom data identifier.
+customDataIdentifierSummary_name :: Lens.Lens' CustomDataIdentifierSummary (Prelude.Maybe Prelude.Text)
+customDataIdentifierSummary_name = Lens.lens (\CustomDataIdentifierSummary' {name} -> name) (\s@CustomDataIdentifierSummary' {} a -> s {name = a} :: CustomDataIdentifierSummary)
+
+instance Data.FromJSON CustomDataIdentifierSummary where
+  parseJSON =
+    Data.withObject
+      "CustomDataIdentifierSummary"
+      ( \x ->
+          CustomDataIdentifierSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable CustomDataIdentifierSummary where
+  hashWithSalt _salt CustomDataIdentifierSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CustomDataIdentifierSummary where
+  rnf CustomDataIdentifierSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/MacieV2/Types/CustomDataIdentifiers.hs b/gen/Amazonka/MacieV2/Types/CustomDataIdentifiers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/CustomDataIdentifiers.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.MacieV2.Types.CustomDataIdentifiers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.CustomDataIdentifiers where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.CustomDetection
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about custom data identifiers that produced a
+-- sensitive data finding, and the number of occurrences of the data that
+-- they detected for the finding.
+--
+-- /See:/ 'newCustomDataIdentifiers' smart constructor.
+data CustomDataIdentifiers = CustomDataIdentifiers'
+  { -- | The custom data identifiers that detected the data, and the number of
+    -- occurrences of the data that each identifier detected.
+    detections :: Prelude.Maybe [CustomDetection],
+    -- | The total number of occurrences of the data that was detected by the
+    -- custom data identifiers and produced the finding.
+    totalCount :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomDataIdentifiers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detections', 'customDataIdentifiers_detections' - The custom data identifiers that detected the data, and the number of
+-- occurrences of the data that each identifier detected.
+--
+-- 'totalCount', 'customDataIdentifiers_totalCount' - The total number of occurrences of the data that was detected by the
+-- custom data identifiers and produced the finding.
+newCustomDataIdentifiers ::
+  CustomDataIdentifiers
+newCustomDataIdentifiers =
+  CustomDataIdentifiers'
+    { detections =
+        Prelude.Nothing,
+      totalCount = Prelude.Nothing
+    }
+
+-- | The custom data identifiers that detected the data, and the number of
+-- occurrences of the data that each identifier detected.
+customDataIdentifiers_detections :: Lens.Lens' CustomDataIdentifiers (Prelude.Maybe [CustomDetection])
+customDataIdentifiers_detections = Lens.lens (\CustomDataIdentifiers' {detections} -> detections) (\s@CustomDataIdentifiers' {} a -> s {detections = a} :: CustomDataIdentifiers) Prelude.. Lens.mapping Lens.coerced
+
+-- | The total number of occurrences of the data that was detected by the
+-- custom data identifiers and produced the finding.
+customDataIdentifiers_totalCount :: Lens.Lens' CustomDataIdentifiers (Prelude.Maybe Prelude.Integer)
+customDataIdentifiers_totalCount = Lens.lens (\CustomDataIdentifiers' {totalCount} -> totalCount) (\s@CustomDataIdentifiers' {} a -> s {totalCount = a} :: CustomDataIdentifiers)
+
+instance Data.FromJSON CustomDataIdentifiers where
+  parseJSON =
+    Data.withObject
+      "CustomDataIdentifiers"
+      ( \x ->
+          CustomDataIdentifiers'
+            Prelude.<$> (x Data..:? "detections" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "totalCount")
+      )
+
+instance Prelude.Hashable CustomDataIdentifiers where
+  hashWithSalt _salt CustomDataIdentifiers' {..} =
+    _salt
+      `Prelude.hashWithSalt` detections
+      `Prelude.hashWithSalt` totalCount
+
+instance Prelude.NFData CustomDataIdentifiers where
+  rnf CustomDataIdentifiers' {..} =
+    Prelude.rnf detections
+      `Prelude.seq` Prelude.rnf totalCount
diff --git a/gen/Amazonka/MacieV2/Types/CustomDetection.hs b/gen/Amazonka/MacieV2/Types/CustomDetection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/CustomDetection.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.MacieV2.Types.CustomDetection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.CustomDetection where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.Occurrences
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about a custom data identifier that produced a
+-- sensitive data finding, and the sensitive data that it detected for the
+-- finding.
+--
+-- /See:/ 'newCustomDetection' smart constructor.
+data CustomDetection = CustomDetection'
+  { -- | The Amazon Resource Name (ARN) of the custom data identifier.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The total number of occurrences of the sensitive data that the custom
+    -- data identifier detected.
+    count :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the custom data identifier.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The location of 1-15 occurrences of the sensitive data that the custom
+    -- data identifier detected. A finding includes location data for a maximum
+    -- of 15 occurrences of sensitive data.
+    occurrences :: Prelude.Maybe Occurrences
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomDetection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'customDetection_arn' - The Amazon Resource Name (ARN) of the custom data identifier.
+--
+-- 'count', 'customDetection_count' - The total number of occurrences of the sensitive data that the custom
+-- data identifier detected.
+--
+-- 'name', 'customDetection_name' - The name of the custom data identifier.
+--
+-- 'occurrences', 'customDetection_occurrences' - The location of 1-15 occurrences of the sensitive data that the custom
+-- data identifier detected. A finding includes location data for a maximum
+-- of 15 occurrences of sensitive data.
+newCustomDetection ::
+  CustomDetection
+newCustomDetection =
+  CustomDetection'
+    { arn = Prelude.Nothing,
+      count = Prelude.Nothing,
+      name = Prelude.Nothing,
+      occurrences = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the custom data identifier.
+customDetection_arn :: Lens.Lens' CustomDetection (Prelude.Maybe Prelude.Text)
+customDetection_arn = Lens.lens (\CustomDetection' {arn} -> arn) (\s@CustomDetection' {} a -> s {arn = a} :: CustomDetection)
+
+-- | The total number of occurrences of the sensitive data that the custom
+-- data identifier detected.
+customDetection_count :: Lens.Lens' CustomDetection (Prelude.Maybe Prelude.Integer)
+customDetection_count = Lens.lens (\CustomDetection' {count} -> count) (\s@CustomDetection' {} a -> s {count = a} :: CustomDetection)
+
+-- | The name of the custom data identifier.
+customDetection_name :: Lens.Lens' CustomDetection (Prelude.Maybe Prelude.Text)
+customDetection_name = Lens.lens (\CustomDetection' {name} -> name) (\s@CustomDetection' {} a -> s {name = a} :: CustomDetection)
+
+-- | The location of 1-15 occurrences of the sensitive data that the custom
+-- data identifier detected. A finding includes location data for a maximum
+-- of 15 occurrences of sensitive data.
+customDetection_occurrences :: Lens.Lens' CustomDetection (Prelude.Maybe Occurrences)
+customDetection_occurrences = Lens.lens (\CustomDetection' {occurrences} -> occurrences) (\s@CustomDetection' {} a -> s {occurrences = a} :: CustomDetection)
+
+instance Data.FromJSON CustomDetection where
+  parseJSON =
+    Data.withObject
+      "CustomDetection"
+      ( \x ->
+          CustomDetection'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "count")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "occurrences")
+      )
+
+instance Prelude.Hashable CustomDetection where
+  hashWithSalt _salt CustomDetection' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` count
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` occurrences
+
+instance Prelude.NFData CustomDetection where
+  rnf CustomDetection' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf count
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf occurrences
diff --git a/gen/Amazonka/MacieV2/Types/DailySchedule.hs b/gen/Amazonka/MacieV2/Types/DailySchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/DailySchedule.hs
@@ -0,0 +1,58 @@
+{-# 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.MacieV2.Types.DailySchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.DailySchedule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies that a classification job runs once a day, every day. This is
+-- an empty object.
+--
+-- /See:/ 'newDailySchedule' smart constructor.
+data DailySchedule = DailySchedule'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DailySchedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDailySchedule ::
+  DailySchedule
+newDailySchedule = DailySchedule'
+
+instance Data.FromJSON DailySchedule where
+  parseJSON =
+    Data.withObject
+      "DailySchedule"
+      (\x -> Prelude.pure DailySchedule')
+
+instance Prelude.Hashable DailySchedule where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData DailySchedule where
+  rnf _ = ()
+
+instance Data.ToJSON DailySchedule where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
diff --git a/gen/Amazonka/MacieV2/Types/DataIdentifierSeverity.hs b/gen/Amazonka/MacieV2/Types/DataIdentifierSeverity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/DataIdentifierSeverity.hs
@@ -0,0 +1,78 @@
+{-# 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.MacieV2.Types.DataIdentifierSeverity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.DataIdentifierSeverity
+  ( DataIdentifierSeverity
+      ( ..,
+        DataIdentifierSeverity_HIGH,
+        DataIdentifierSeverity_LOW,
+        DataIdentifierSeverity_MEDIUM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The severity of a finding, ranging from LOW, for least severe, to HIGH,
+-- for most severe. Valid values are:
+newtype DataIdentifierSeverity = DataIdentifierSeverity'
+  { fromDataIdentifierSeverity ::
+      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 DataIdentifierSeverity_HIGH :: DataIdentifierSeverity
+pattern DataIdentifierSeverity_HIGH = DataIdentifierSeverity' "HIGH"
+
+pattern DataIdentifierSeverity_LOW :: DataIdentifierSeverity
+pattern DataIdentifierSeverity_LOW = DataIdentifierSeverity' "LOW"
+
+pattern DataIdentifierSeverity_MEDIUM :: DataIdentifierSeverity
+pattern DataIdentifierSeverity_MEDIUM = DataIdentifierSeverity' "MEDIUM"
+
+{-# COMPLETE
+  DataIdentifierSeverity_HIGH,
+  DataIdentifierSeverity_LOW,
+  DataIdentifierSeverity_MEDIUM,
+  DataIdentifierSeverity'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/DataIdentifierType.hs b/gen/Amazonka/MacieV2/Types/DataIdentifierType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/DataIdentifierType.hs
@@ -0,0 +1,73 @@
+{-# 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.MacieV2.Types.DataIdentifierType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.DataIdentifierType
+  ( DataIdentifierType
+      ( ..,
+        DataIdentifierType_CUSTOM,
+        DataIdentifierType_MANAGED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The type of data identifier that detected a specific type of sensitive
+-- data in an S3 bucket. Possible values are:
+newtype DataIdentifierType = DataIdentifierType'
+  { fromDataIdentifierType ::
+      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 DataIdentifierType_CUSTOM :: DataIdentifierType
+pattern DataIdentifierType_CUSTOM = DataIdentifierType' "CUSTOM"
+
+pattern DataIdentifierType_MANAGED :: DataIdentifierType
+pattern DataIdentifierType_MANAGED = DataIdentifierType' "MANAGED"
+
+{-# COMPLETE
+  DataIdentifierType_CUSTOM,
+  DataIdentifierType_MANAGED,
+  DataIdentifierType'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/DayOfWeek.hs b/gen/Amazonka/MacieV2/Types/DayOfWeek.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/DayOfWeek.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.DayOfWeek
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.DayOfWeek
+  ( DayOfWeek
+      ( ..,
+        DayOfWeek_FRIDAY,
+        DayOfWeek_MONDAY,
+        DayOfWeek_SATURDAY,
+        DayOfWeek_SUNDAY,
+        DayOfWeek_THURSDAY,
+        DayOfWeek_TUESDAY,
+        DayOfWeek_WEDNESDAY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DayOfWeek = DayOfWeek'
+  { fromDayOfWeek ::
+      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 DayOfWeek_FRIDAY :: DayOfWeek
+pattern DayOfWeek_FRIDAY = DayOfWeek' "FRIDAY"
+
+pattern DayOfWeek_MONDAY :: DayOfWeek
+pattern DayOfWeek_MONDAY = DayOfWeek' "MONDAY"
+
+pattern DayOfWeek_SATURDAY :: DayOfWeek
+pattern DayOfWeek_SATURDAY = DayOfWeek' "SATURDAY"
+
+pattern DayOfWeek_SUNDAY :: DayOfWeek
+pattern DayOfWeek_SUNDAY = DayOfWeek' "SUNDAY"
+
+pattern DayOfWeek_THURSDAY :: DayOfWeek
+pattern DayOfWeek_THURSDAY = DayOfWeek' "THURSDAY"
+
+pattern DayOfWeek_TUESDAY :: DayOfWeek
+pattern DayOfWeek_TUESDAY = DayOfWeek' "TUESDAY"
+
+pattern DayOfWeek_WEDNESDAY :: DayOfWeek
+pattern DayOfWeek_WEDNESDAY = DayOfWeek' "WEDNESDAY"
+
+{-# COMPLETE
+  DayOfWeek_FRIDAY,
+  DayOfWeek_MONDAY,
+  DayOfWeek_SATURDAY,
+  DayOfWeek_SUNDAY,
+  DayOfWeek_THURSDAY,
+  DayOfWeek_TUESDAY,
+  DayOfWeek_WEDNESDAY,
+  DayOfWeek'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/DefaultDetection.hs b/gen/Amazonka/MacieV2/Types/DefaultDetection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/DefaultDetection.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.MacieV2.Types.DefaultDetection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.DefaultDetection where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.Occurrences
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about a type of sensitive data that was detected by
+-- a managed data identifier and produced a sensitive data finding.
+--
+-- /See:/ 'newDefaultDetection' smart constructor.
+data DefaultDetection = DefaultDetection'
+  { -- | The total number of occurrences of the type of sensitive data that was
+    -- detected.
+    count :: Prelude.Maybe Prelude.Integer,
+    -- | The location of 1-15 occurrences of the sensitive data that was
+    -- detected. A finding includes location data for a maximum of 15
+    -- occurrences of sensitive data.
+    occurrences :: Prelude.Maybe Occurrences,
+    -- | The type of sensitive data that was detected. For example,
+    -- AWS_CREDENTIALS, PHONE_NUMBER, or ADDRESS.
+    type' :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DefaultDetection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'count', 'defaultDetection_count' - The total number of occurrences of the type of sensitive data that was
+-- detected.
+--
+-- 'occurrences', 'defaultDetection_occurrences' - The location of 1-15 occurrences of the sensitive data that was
+-- detected. A finding includes location data for a maximum of 15
+-- occurrences of sensitive data.
+--
+-- 'type'', 'defaultDetection_type' - The type of sensitive data that was detected. For example,
+-- AWS_CREDENTIALS, PHONE_NUMBER, or ADDRESS.
+newDefaultDetection ::
+  DefaultDetection
+newDefaultDetection =
+  DefaultDetection'
+    { count = Prelude.Nothing,
+      occurrences = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The total number of occurrences of the type of sensitive data that was
+-- detected.
+defaultDetection_count :: Lens.Lens' DefaultDetection (Prelude.Maybe Prelude.Integer)
+defaultDetection_count = Lens.lens (\DefaultDetection' {count} -> count) (\s@DefaultDetection' {} a -> s {count = a} :: DefaultDetection)
+
+-- | The location of 1-15 occurrences of the sensitive data that was
+-- detected. A finding includes location data for a maximum of 15
+-- occurrences of sensitive data.
+defaultDetection_occurrences :: Lens.Lens' DefaultDetection (Prelude.Maybe Occurrences)
+defaultDetection_occurrences = Lens.lens (\DefaultDetection' {occurrences} -> occurrences) (\s@DefaultDetection' {} a -> s {occurrences = a} :: DefaultDetection)
+
+-- | The type of sensitive data that was detected. For example,
+-- AWS_CREDENTIALS, PHONE_NUMBER, or ADDRESS.
+defaultDetection_type :: Lens.Lens' DefaultDetection (Prelude.Maybe Prelude.Text)
+defaultDetection_type = Lens.lens (\DefaultDetection' {type'} -> type') (\s@DefaultDetection' {} a -> s {type' = a} :: DefaultDetection)
+
+instance Data.FromJSON DefaultDetection where
+  parseJSON =
+    Data.withObject
+      "DefaultDetection"
+      ( \x ->
+          DefaultDetection'
+            Prelude.<$> (x Data..:? "count")
+            Prelude.<*> (x Data..:? "occurrences")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable DefaultDetection where
+  hashWithSalt _salt DefaultDetection' {..} =
+    _salt
+      `Prelude.hashWithSalt` count
+      `Prelude.hashWithSalt` occurrences
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData DefaultDetection where
+  rnf DefaultDetection' {..} =
+    Prelude.rnf count
+      `Prelude.seq` Prelude.rnf occurrences
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/MacieV2/Types/DetectedDataDetails.hs b/gen/Amazonka/MacieV2/Types/DetectedDataDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/DetectedDataDetails.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.MacieV2.Types.DetectedDataDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.DetectedDataDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies 1-10 occurrences of a specific type of sensitive data reported
+-- by a finding.
+--
+-- /See:/ 'newDetectedDataDetails' smart constructor.
+data DetectedDataDetails = DetectedDataDetails'
+  { -- | An occurrence of the specified type of sensitive data. Each occurrence
+    -- can contain 1-128 characters.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectedDataDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'detectedDataDetails_value' - An occurrence of the specified type of sensitive data. Each occurrence
+-- can contain 1-128 characters.
+newDetectedDataDetails ::
+  -- | 'value'
+  Prelude.Text ->
+  DetectedDataDetails
+newDetectedDataDetails pValue_ =
+  DetectedDataDetails' {value = pValue_}
+
+-- | An occurrence of the specified type of sensitive data. Each occurrence
+-- can contain 1-128 characters.
+detectedDataDetails_value :: Lens.Lens' DetectedDataDetails Prelude.Text
+detectedDataDetails_value = Lens.lens (\DetectedDataDetails' {value} -> value) (\s@DetectedDataDetails' {} a -> s {value = a} :: DetectedDataDetails)
+
+instance Data.FromJSON DetectedDataDetails where
+  parseJSON =
+    Data.withObject
+      "DetectedDataDetails"
+      ( \x ->
+          DetectedDataDetails' Prelude.<$> (x Data..: "value")
+      )
+
+instance Prelude.Hashable DetectedDataDetails where
+  hashWithSalt _salt DetectedDataDetails' {..} =
+    _salt `Prelude.hashWithSalt` value
+
+instance Prelude.NFData DetectedDataDetails where
+  rnf DetectedDataDetails' {..} = Prelude.rnf value
diff --git a/gen/Amazonka/MacieV2/Types/Detection.hs b/gen/Amazonka/MacieV2/Types/Detection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/Detection.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.Detection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.Detection where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.DataIdentifierType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about a type of sensitive data that Amazon Macie
+-- found in an S3 bucket while performing automated sensitive data
+-- discovery for the bucket. The information also specifies the custom data
+-- identifier or managed data identifier that detected the data. This
+-- information is available only if automated sensitive data discovery is
+-- currently enabled for your account.
+--
+-- /See:/ 'newDetection' smart constructor.
+data Detection = Detection'
+  { -- | If the sensitive data was detected by a custom data identifier, the
+    -- Amazon Resource Name (ARN) of the custom data identifier that detected
+    -- the data. Otherwise, this value is null.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The total number of occurrences of the sensitive data.
+    count :: Prelude.Maybe Prelude.Integer,
+    -- | The unique identifier for the custom data identifier or managed data
+    -- identifier that detected the sensitive data. For additional details
+    -- about a specified managed data identifier, see
+    -- <https://docs.aws.amazon.com/macie/latest/user/managed-data-identifiers.html Using managed data identifiers>
+    -- in the /Amazon Macie User Guide/.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the custom data identifier or managed data identifier that
+    -- detected the sensitive data. For a managed data identifier, this value
+    -- is the same as the unique identifier (id).
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether occurrences of this type of sensitive data are
+    -- excluded (true) or included (false) in the bucket\'s sensitivity score.
+    suppressed :: Prelude.Maybe Prelude.Bool,
+    -- | The type of data identifier that detected the sensitive data. Possible
+    -- values are: CUSTOM, for a custom data identifier; and, MANAGED, for a
+    -- managed data identifier.
+    type' :: Prelude.Maybe DataIdentifierType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Detection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'detection_arn' - If the sensitive data was detected by a custom data identifier, the
+-- Amazon Resource Name (ARN) of the custom data identifier that detected
+-- the data. Otherwise, this value is null.
+--
+-- 'count', 'detection_count' - The total number of occurrences of the sensitive data.
+--
+-- 'id', 'detection_id' - The unique identifier for the custom data identifier or managed data
+-- identifier that detected the sensitive data. For additional details
+-- about a specified managed data identifier, see
+-- <https://docs.aws.amazon.com/macie/latest/user/managed-data-identifiers.html Using managed data identifiers>
+-- in the /Amazon Macie User Guide/.
+--
+-- 'name', 'detection_name' - The name of the custom data identifier or managed data identifier that
+-- detected the sensitive data. For a managed data identifier, this value
+-- is the same as the unique identifier (id).
+--
+-- 'suppressed', 'detection_suppressed' - Specifies whether occurrences of this type of sensitive data are
+-- excluded (true) or included (false) in the bucket\'s sensitivity score.
+--
+-- 'type'', 'detection_type' - The type of data identifier that detected the sensitive data. Possible
+-- values are: CUSTOM, for a custom data identifier; and, MANAGED, for a
+-- managed data identifier.
+newDetection ::
+  Detection
+newDetection =
+  Detection'
+    { arn = Prelude.Nothing,
+      count = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      suppressed = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | If the sensitive data was detected by a custom data identifier, the
+-- Amazon Resource Name (ARN) of the custom data identifier that detected
+-- the data. Otherwise, this value is null.
+detection_arn :: Lens.Lens' Detection (Prelude.Maybe Prelude.Text)
+detection_arn = Lens.lens (\Detection' {arn} -> arn) (\s@Detection' {} a -> s {arn = a} :: Detection)
+
+-- | The total number of occurrences of the sensitive data.
+detection_count :: Lens.Lens' Detection (Prelude.Maybe Prelude.Integer)
+detection_count = Lens.lens (\Detection' {count} -> count) (\s@Detection' {} a -> s {count = a} :: Detection)
+
+-- | The unique identifier for the custom data identifier or managed data
+-- identifier that detected the sensitive data. For additional details
+-- about a specified managed data identifier, see
+-- <https://docs.aws.amazon.com/macie/latest/user/managed-data-identifiers.html Using managed data identifiers>
+-- in the /Amazon Macie User Guide/.
+detection_id :: Lens.Lens' Detection (Prelude.Maybe Prelude.Text)
+detection_id = Lens.lens (\Detection' {id} -> id) (\s@Detection' {} a -> s {id = a} :: Detection)
+
+-- | The name of the custom data identifier or managed data identifier that
+-- detected the sensitive data. For a managed data identifier, this value
+-- is the same as the unique identifier (id).
+detection_name :: Lens.Lens' Detection (Prelude.Maybe Prelude.Text)
+detection_name = Lens.lens (\Detection' {name} -> name) (\s@Detection' {} a -> s {name = a} :: Detection)
+
+-- | Specifies whether occurrences of this type of sensitive data are
+-- excluded (true) or included (false) in the bucket\'s sensitivity score.
+detection_suppressed :: Lens.Lens' Detection (Prelude.Maybe Prelude.Bool)
+detection_suppressed = Lens.lens (\Detection' {suppressed} -> suppressed) (\s@Detection' {} a -> s {suppressed = a} :: Detection)
+
+-- | The type of data identifier that detected the sensitive data. Possible
+-- values are: CUSTOM, for a custom data identifier; and, MANAGED, for a
+-- managed data identifier.
+detection_type :: Lens.Lens' Detection (Prelude.Maybe DataIdentifierType)
+detection_type = Lens.lens (\Detection' {type'} -> type') (\s@Detection' {} a -> s {type' = a} :: Detection)
+
+instance Data.FromJSON Detection where
+  parseJSON =
+    Data.withObject
+      "Detection"
+      ( \x ->
+          Detection'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "count")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "suppressed")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable Detection where
+  hashWithSalt _salt Detection' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` count
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` suppressed
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData Detection where
+  rnf Detection' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf count
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf suppressed
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/MacieV2/Types/DomainDetails.hs b/gen/Amazonka/MacieV2/Types/DomainDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/DomainDetails.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.MacieV2.Types.DomainDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.DomainDetails 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 information about the domain name of the device that an entity
+-- used to perform an action on an affected resource.
+--
+-- /See:/ 'newDomainDetails' smart constructor.
+data DomainDetails = DomainDetails'
+  { -- | The name of the domain.
+    domainName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DomainDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'domainDetails_domainName' - The name of the domain.
+newDomainDetails ::
+  DomainDetails
+newDomainDetails =
+  DomainDetails' {domainName = Prelude.Nothing}
+
+-- | The name of the domain.
+domainDetails_domainName :: Lens.Lens' DomainDetails (Prelude.Maybe Prelude.Text)
+domainDetails_domainName = Lens.lens (\DomainDetails' {domainName} -> domainName) (\s@DomainDetails' {} a -> s {domainName = a} :: DomainDetails)
+
+instance Data.FromJSON DomainDetails where
+  parseJSON =
+    Data.withObject
+      "DomainDetails"
+      ( \x ->
+          DomainDetails' Prelude.<$> (x Data..:? "domainName")
+      )
+
+instance Prelude.Hashable DomainDetails where
+  hashWithSalt _salt DomainDetails' {..} =
+    _salt `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData DomainDetails where
+  rnf DomainDetails' {..} = Prelude.rnf domainName
diff --git a/gen/Amazonka/MacieV2/Types/EffectivePermission.hs b/gen/Amazonka/MacieV2/Types/EffectivePermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/EffectivePermission.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.MacieV2.Types.EffectivePermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.EffectivePermission
+  ( EffectivePermission
+      ( ..,
+        EffectivePermission_NOT_PUBLIC,
+        EffectivePermission_PUBLIC,
+        EffectivePermission_UNKNOWN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EffectivePermission = EffectivePermission'
+  { fromEffectivePermission ::
+      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 EffectivePermission_NOT_PUBLIC :: EffectivePermission
+pattern EffectivePermission_NOT_PUBLIC = EffectivePermission' "NOT_PUBLIC"
+
+pattern EffectivePermission_PUBLIC :: EffectivePermission
+pattern EffectivePermission_PUBLIC = EffectivePermission' "PUBLIC"
+
+pattern EffectivePermission_UNKNOWN :: EffectivePermission
+pattern EffectivePermission_UNKNOWN = EffectivePermission' "UNKNOWN"
+
+{-# COMPLETE
+  EffectivePermission_NOT_PUBLIC,
+  EffectivePermission_PUBLIC,
+  EffectivePermission_UNKNOWN,
+  EffectivePermission'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/EncryptionType.hs b/gen/Amazonka/MacieV2/Types/EncryptionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/EncryptionType.hs
@@ -0,0 +1,83 @@
+{-# 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.MacieV2.Types.EncryptionType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.EncryptionType
+  ( EncryptionType
+      ( ..,
+        EncryptionType_AES256,
+        EncryptionType_Aws_kms,
+        EncryptionType_NONE,
+        EncryptionType_UNKNOWN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The type of server-side encryption that\'s used to encrypt an S3 object
+-- or objects in an S3 bucket. Possible values are:
+newtype EncryptionType = EncryptionType'
+  { fromEncryptionType ::
+      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 EncryptionType_AES256 :: EncryptionType
+pattern EncryptionType_AES256 = EncryptionType' "AES256"
+
+pattern EncryptionType_Aws_kms :: EncryptionType
+pattern EncryptionType_Aws_kms = EncryptionType' "aws:kms"
+
+pattern EncryptionType_NONE :: EncryptionType
+pattern EncryptionType_NONE = EncryptionType' "NONE"
+
+pattern EncryptionType_UNKNOWN :: EncryptionType
+pattern EncryptionType_UNKNOWN = EncryptionType' "UNKNOWN"
+
+{-# COMPLETE
+  EncryptionType_AES256,
+  EncryptionType_Aws_kms,
+  EncryptionType_NONE,
+  EncryptionType_UNKNOWN,
+  EncryptionType'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/ErrorCode.hs b/gen/Amazonka/MacieV2/Types/ErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ErrorCode.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.ErrorCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ErrorCode
+  ( ErrorCode
+      ( ..,
+        ErrorCode_ClientError,
+        ErrorCode_InternalError
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The source of an issue or delay. Possible values are:
+newtype ErrorCode = ErrorCode'
+  { fromErrorCode ::
+      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 ErrorCode_ClientError :: ErrorCode
+pattern ErrorCode_ClientError = ErrorCode' "ClientError"
+
+pattern ErrorCode_InternalError :: ErrorCode
+pattern ErrorCode_InternalError = ErrorCode' "InternalError"
+
+{-# COMPLETE
+  ErrorCode_ClientError,
+  ErrorCode_InternalError,
+  ErrorCode'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/FederatedUser.hs b/gen/Amazonka/MacieV2/Types/FederatedUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/FederatedUser.hs
@@ -0,0 +1,136 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.FederatedUser
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.FederatedUser where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.SessionContext
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about an identity that performed an action on an
+-- affected resource by using temporary security credentials. The
+-- credentials were obtained using the GetFederationToken operation of the
+-- Security Token Service (STS) API.
+--
+-- /See:/ 'newFederatedUser' smart constructor.
+data FederatedUser = FederatedUser'
+  { -- | The Amazon Web Services access key ID that identifies the credentials.
+    accessKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the Amazon Web Services account that owns the
+    -- entity that was used to get the credentials.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the entity that was used to get the
+    -- credentials.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the entity that was used to get the
+    -- credentials.
+    principalId :: Prelude.Maybe Prelude.Text,
+    -- | The details of the session that was created for the credentials,
+    -- including the entity that issued the session.
+    sessionContext :: Prelude.Maybe SessionContext
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FederatedUser' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessKeyId', 'federatedUser_accessKeyId' - The Amazon Web Services access key ID that identifies the credentials.
+--
+-- 'accountId', 'federatedUser_accountId' - The unique identifier for the Amazon Web Services account that owns the
+-- entity that was used to get the credentials.
+--
+-- 'arn', 'federatedUser_arn' - The Amazon Resource Name (ARN) of the entity that was used to get the
+-- credentials.
+--
+-- 'principalId', 'federatedUser_principalId' - The unique identifier for the entity that was used to get the
+-- credentials.
+--
+-- 'sessionContext', 'federatedUser_sessionContext' - The details of the session that was created for the credentials,
+-- including the entity that issued the session.
+newFederatedUser ::
+  FederatedUser
+newFederatedUser =
+  FederatedUser'
+    { accessKeyId = Prelude.Nothing,
+      accountId = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      principalId = Prelude.Nothing,
+      sessionContext = Prelude.Nothing
+    }
+
+-- | The Amazon Web Services access key ID that identifies the credentials.
+federatedUser_accessKeyId :: Lens.Lens' FederatedUser (Prelude.Maybe Prelude.Text)
+federatedUser_accessKeyId = Lens.lens (\FederatedUser' {accessKeyId} -> accessKeyId) (\s@FederatedUser' {} a -> s {accessKeyId = a} :: FederatedUser)
+
+-- | The unique identifier for the Amazon Web Services account that owns the
+-- entity that was used to get the credentials.
+federatedUser_accountId :: Lens.Lens' FederatedUser (Prelude.Maybe Prelude.Text)
+federatedUser_accountId = Lens.lens (\FederatedUser' {accountId} -> accountId) (\s@FederatedUser' {} a -> s {accountId = a} :: FederatedUser)
+
+-- | The Amazon Resource Name (ARN) of the entity that was used to get the
+-- credentials.
+federatedUser_arn :: Lens.Lens' FederatedUser (Prelude.Maybe Prelude.Text)
+federatedUser_arn = Lens.lens (\FederatedUser' {arn} -> arn) (\s@FederatedUser' {} a -> s {arn = a} :: FederatedUser)
+
+-- | The unique identifier for the entity that was used to get the
+-- credentials.
+federatedUser_principalId :: Lens.Lens' FederatedUser (Prelude.Maybe Prelude.Text)
+federatedUser_principalId = Lens.lens (\FederatedUser' {principalId} -> principalId) (\s@FederatedUser' {} a -> s {principalId = a} :: FederatedUser)
+
+-- | The details of the session that was created for the credentials,
+-- including the entity that issued the session.
+federatedUser_sessionContext :: Lens.Lens' FederatedUser (Prelude.Maybe SessionContext)
+federatedUser_sessionContext = Lens.lens (\FederatedUser' {sessionContext} -> sessionContext) (\s@FederatedUser' {} a -> s {sessionContext = a} :: FederatedUser)
+
+instance Data.FromJSON FederatedUser where
+  parseJSON =
+    Data.withObject
+      "FederatedUser"
+      ( \x ->
+          FederatedUser'
+            Prelude.<$> (x Data..:? "accessKeyId")
+            Prelude.<*> (x Data..:? "accountId")
+            Prelude.<*> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "principalId")
+            Prelude.<*> (x Data..:? "sessionContext")
+      )
+
+instance Prelude.Hashable FederatedUser where
+  hashWithSalt _salt FederatedUser' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessKeyId
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` principalId
+      `Prelude.hashWithSalt` sessionContext
+
+instance Prelude.NFData FederatedUser where
+  rnf FederatedUser' {..} =
+    Prelude.rnf accessKeyId
+      `Prelude.seq` Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf principalId
+      `Prelude.seq` Prelude.rnf sessionContext
diff --git a/gen/Amazonka/MacieV2/Types/Finding.hs b/gen/Amazonka/MacieV2/Types/Finding.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/Finding.hs
@@ -0,0 +1,333 @@
+{-# 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.MacieV2.Types.Finding
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.Finding where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.ClassificationDetails
+import Amazonka.MacieV2.Types.FindingCategory
+import Amazonka.MacieV2.Types.FindingType
+import Amazonka.MacieV2.Types.PolicyDetails
+import Amazonka.MacieV2.Types.ResourcesAffected
+import Amazonka.MacieV2.Types.Severity
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the details of a finding.
+--
+-- /See:/ 'newFinding' smart constructor.
+data Finding = Finding'
+  { -- | The unique identifier for the Amazon Web Services account that the
+    -- finding applies to. This is typically the account that owns the affected
+    -- resource.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether the finding is archived (suppressed).
+    archived :: Prelude.Maybe Prelude.Bool,
+    -- | The category of the finding. Possible values are: CLASSIFICATION, for a
+    -- sensitive data finding; and, POLICY, for a policy finding.
+    category :: Prelude.Maybe FindingCategory,
+    -- | The details of a sensitive data finding. This value is null for a policy
+    -- finding.
+    classificationDetails :: Prelude.Maybe ClassificationDetails,
+    -- | The total number of occurrences of the finding. For sensitive data
+    -- findings, this value is always 1. All sensitive data findings are
+    -- considered unique.
+    count :: Prelude.Maybe Prelude.Integer,
+    -- | The date and time, in UTC and extended ISO 8601 format, when Amazon
+    -- Macie created the finding.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the finding.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the finding. This is a random string that
+    -- Amazon Macie generates and assigns to a finding when it creates the
+    -- finding.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services partition that Amazon Macie created the finding
+    -- in.
+    partition :: Prelude.Maybe Prelude.Text,
+    -- | The details of a policy finding. This value is null for a sensitive data
+    -- finding.
+    policyDetails :: Prelude.Maybe PolicyDetails,
+    -- | The Amazon Web Services Region that Amazon Macie created the finding in.
+    region :: Prelude.Maybe Prelude.Text,
+    -- | The resources that the finding applies to.
+    resourcesAffected :: Prelude.Maybe ResourcesAffected,
+    -- | Specifies whether the finding is a sample finding. A /sample finding/ is
+    -- a finding that uses example data to demonstrate what a finding might
+    -- contain.
+    sample :: Prelude.Maybe Prelude.Bool,
+    -- | The version of the schema that was used to define the data structures in
+    -- the finding.
+    schemaVersion :: Prelude.Maybe Prelude.Text,
+    -- | The severity level and score for the finding.
+    severity :: Prelude.Maybe Severity,
+    -- | The brief description of the finding.
+    title :: Prelude.Maybe Prelude.Text,
+    -- | The type of the finding.
+    type' :: Prelude.Maybe FindingType,
+    -- | The date and time, in UTC and extended ISO 8601 format, when Amazon
+    -- Macie last updated the finding. For sensitive data findings, this value
+    -- is the same as the value for the createdAt property. All sensitive data
+    -- findings are considered new.
+    updatedAt :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Finding' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'finding_accountId' - The unique identifier for the Amazon Web Services account that the
+-- finding applies to. This is typically the account that owns the affected
+-- resource.
+--
+-- 'archived', 'finding_archived' - Specifies whether the finding is archived (suppressed).
+--
+-- 'category', 'finding_category' - The category of the finding. Possible values are: CLASSIFICATION, for a
+-- sensitive data finding; and, POLICY, for a policy finding.
+--
+-- 'classificationDetails', 'finding_classificationDetails' - The details of a sensitive data finding. This value is null for a policy
+-- finding.
+--
+-- 'count', 'finding_count' - The total number of occurrences of the finding. For sensitive data
+-- findings, this value is always 1. All sensitive data findings are
+-- considered unique.
+--
+-- 'createdAt', 'finding_createdAt' - The date and time, in UTC and extended ISO 8601 format, when Amazon
+-- Macie created the finding.
+--
+-- 'description', 'finding_description' - The description of the finding.
+--
+-- 'id', 'finding_id' - The unique identifier for the finding. This is a random string that
+-- Amazon Macie generates and assigns to a finding when it creates the
+-- finding.
+--
+-- 'partition', 'finding_partition' - The Amazon Web Services partition that Amazon Macie created the finding
+-- in.
+--
+-- 'policyDetails', 'finding_policyDetails' - The details of a policy finding. This value is null for a sensitive data
+-- finding.
+--
+-- 'region', 'finding_region' - The Amazon Web Services Region that Amazon Macie created the finding in.
+--
+-- 'resourcesAffected', 'finding_resourcesAffected' - The resources that the finding applies to.
+--
+-- 'sample', 'finding_sample' - Specifies whether the finding is a sample finding. A /sample finding/ is
+-- a finding that uses example data to demonstrate what a finding might
+-- contain.
+--
+-- 'schemaVersion', 'finding_schemaVersion' - The version of the schema that was used to define the data structures in
+-- the finding.
+--
+-- 'severity', 'finding_severity' - The severity level and score for the finding.
+--
+-- 'title', 'finding_title' - The brief description of the finding.
+--
+-- 'type'', 'finding_type' - The type of the finding.
+--
+-- 'updatedAt', 'finding_updatedAt' - The date and time, in UTC and extended ISO 8601 format, when Amazon
+-- Macie last updated the finding. For sensitive data findings, this value
+-- is the same as the value for the createdAt property. All sensitive data
+-- findings are considered new.
+newFinding ::
+  Finding
+newFinding =
+  Finding'
+    { accountId = Prelude.Nothing,
+      archived = Prelude.Nothing,
+      category = Prelude.Nothing,
+      classificationDetails = Prelude.Nothing,
+      count = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      partition = Prelude.Nothing,
+      policyDetails = Prelude.Nothing,
+      region = Prelude.Nothing,
+      resourcesAffected = Prelude.Nothing,
+      sample = Prelude.Nothing,
+      schemaVersion = Prelude.Nothing,
+      severity = Prelude.Nothing,
+      title = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      updatedAt = Prelude.Nothing
+    }
+
+-- | The unique identifier for the Amazon Web Services account that the
+-- finding applies to. This is typically the account that owns the affected
+-- resource.
+finding_accountId :: Lens.Lens' Finding (Prelude.Maybe Prelude.Text)
+finding_accountId = Lens.lens (\Finding' {accountId} -> accountId) (\s@Finding' {} a -> s {accountId = a} :: Finding)
+
+-- | Specifies whether the finding is archived (suppressed).
+finding_archived :: Lens.Lens' Finding (Prelude.Maybe Prelude.Bool)
+finding_archived = Lens.lens (\Finding' {archived} -> archived) (\s@Finding' {} a -> s {archived = a} :: Finding)
+
+-- | The category of the finding. Possible values are: CLASSIFICATION, for a
+-- sensitive data finding; and, POLICY, for a policy finding.
+finding_category :: Lens.Lens' Finding (Prelude.Maybe FindingCategory)
+finding_category = Lens.lens (\Finding' {category} -> category) (\s@Finding' {} a -> s {category = a} :: Finding)
+
+-- | The details of a sensitive data finding. This value is null for a policy
+-- finding.
+finding_classificationDetails :: Lens.Lens' Finding (Prelude.Maybe ClassificationDetails)
+finding_classificationDetails = Lens.lens (\Finding' {classificationDetails} -> classificationDetails) (\s@Finding' {} a -> s {classificationDetails = a} :: Finding)
+
+-- | The total number of occurrences of the finding. For sensitive data
+-- findings, this value is always 1. All sensitive data findings are
+-- considered unique.
+finding_count :: Lens.Lens' Finding (Prelude.Maybe Prelude.Integer)
+finding_count = Lens.lens (\Finding' {count} -> count) (\s@Finding' {} a -> s {count = a} :: Finding)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when Amazon
+-- Macie created the finding.
+finding_createdAt :: Lens.Lens' Finding (Prelude.Maybe Prelude.UTCTime)
+finding_createdAt = Lens.lens (\Finding' {createdAt} -> createdAt) (\s@Finding' {} a -> s {createdAt = a} :: Finding) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the finding.
+finding_description :: Lens.Lens' Finding (Prelude.Maybe Prelude.Text)
+finding_description = Lens.lens (\Finding' {description} -> description) (\s@Finding' {} a -> s {description = a} :: Finding)
+
+-- | The unique identifier for the finding. This is a random string that
+-- Amazon Macie generates and assigns to a finding when it creates the
+-- finding.
+finding_id :: Lens.Lens' Finding (Prelude.Maybe Prelude.Text)
+finding_id = Lens.lens (\Finding' {id} -> id) (\s@Finding' {} a -> s {id = a} :: Finding)
+
+-- | The Amazon Web Services partition that Amazon Macie created the finding
+-- in.
+finding_partition :: Lens.Lens' Finding (Prelude.Maybe Prelude.Text)
+finding_partition = Lens.lens (\Finding' {partition} -> partition) (\s@Finding' {} a -> s {partition = a} :: Finding)
+
+-- | The details of a policy finding. This value is null for a sensitive data
+-- finding.
+finding_policyDetails :: Lens.Lens' Finding (Prelude.Maybe PolicyDetails)
+finding_policyDetails = Lens.lens (\Finding' {policyDetails} -> policyDetails) (\s@Finding' {} a -> s {policyDetails = a} :: Finding)
+
+-- | The Amazon Web Services Region that Amazon Macie created the finding in.
+finding_region :: Lens.Lens' Finding (Prelude.Maybe Prelude.Text)
+finding_region = Lens.lens (\Finding' {region} -> region) (\s@Finding' {} a -> s {region = a} :: Finding)
+
+-- | The resources that the finding applies to.
+finding_resourcesAffected :: Lens.Lens' Finding (Prelude.Maybe ResourcesAffected)
+finding_resourcesAffected = Lens.lens (\Finding' {resourcesAffected} -> resourcesAffected) (\s@Finding' {} a -> s {resourcesAffected = a} :: Finding)
+
+-- | Specifies whether the finding is a sample finding. A /sample finding/ is
+-- a finding that uses example data to demonstrate what a finding might
+-- contain.
+finding_sample :: Lens.Lens' Finding (Prelude.Maybe Prelude.Bool)
+finding_sample = Lens.lens (\Finding' {sample} -> sample) (\s@Finding' {} a -> s {sample = a} :: Finding)
+
+-- | The version of the schema that was used to define the data structures in
+-- the finding.
+finding_schemaVersion :: Lens.Lens' Finding (Prelude.Maybe Prelude.Text)
+finding_schemaVersion = Lens.lens (\Finding' {schemaVersion} -> schemaVersion) (\s@Finding' {} a -> s {schemaVersion = a} :: Finding)
+
+-- | The severity level and score for the finding.
+finding_severity :: Lens.Lens' Finding (Prelude.Maybe Severity)
+finding_severity = Lens.lens (\Finding' {severity} -> severity) (\s@Finding' {} a -> s {severity = a} :: Finding)
+
+-- | The brief description of the finding.
+finding_title :: Lens.Lens' Finding (Prelude.Maybe Prelude.Text)
+finding_title = Lens.lens (\Finding' {title} -> title) (\s@Finding' {} a -> s {title = a} :: Finding)
+
+-- | The type of the finding.
+finding_type :: Lens.Lens' Finding (Prelude.Maybe FindingType)
+finding_type = Lens.lens (\Finding' {type'} -> type') (\s@Finding' {} a -> s {type' = a} :: Finding)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when Amazon
+-- Macie last updated the finding. For sensitive data findings, this value
+-- is the same as the value for the createdAt property. All sensitive data
+-- findings are considered new.
+finding_updatedAt :: Lens.Lens' Finding (Prelude.Maybe Prelude.UTCTime)
+finding_updatedAt = Lens.lens (\Finding' {updatedAt} -> updatedAt) (\s@Finding' {} a -> s {updatedAt = a} :: Finding) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON Finding where
+  parseJSON =
+    Data.withObject
+      "Finding"
+      ( \x ->
+          Finding'
+            Prelude.<$> (x Data..:? "accountId")
+            Prelude.<*> (x Data..:? "archived")
+            Prelude.<*> (x Data..:? "category")
+            Prelude.<*> (x Data..:? "classificationDetails")
+            Prelude.<*> (x Data..:? "count")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "partition")
+            Prelude.<*> (x Data..:? "policyDetails")
+            Prelude.<*> (x Data..:? "region")
+            Prelude.<*> (x Data..:? "resourcesAffected")
+            Prelude.<*> (x Data..:? "sample")
+            Prelude.<*> (x Data..:? "schemaVersion")
+            Prelude.<*> (x Data..:? "severity")
+            Prelude.<*> (x Data..:? "title")
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..:? "updatedAt")
+      )
+
+instance Prelude.Hashable Finding where
+  hashWithSalt _salt Finding' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` archived
+      `Prelude.hashWithSalt` category
+      `Prelude.hashWithSalt` classificationDetails
+      `Prelude.hashWithSalt` count
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` partition
+      `Prelude.hashWithSalt` policyDetails
+      `Prelude.hashWithSalt` region
+      `Prelude.hashWithSalt` resourcesAffected
+      `Prelude.hashWithSalt` sample
+      `Prelude.hashWithSalt` schemaVersion
+      `Prelude.hashWithSalt` severity
+      `Prelude.hashWithSalt` title
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData Finding where
+  rnf Finding' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf archived
+      `Prelude.seq` Prelude.rnf category
+      `Prelude.seq` Prelude.rnf classificationDetails
+      `Prelude.seq` Prelude.rnf count
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf partition
+      `Prelude.seq` Prelude.rnf policyDetails
+      `Prelude.seq` Prelude.rnf region
+      `Prelude.seq` Prelude.rnf resourcesAffected
+      `Prelude.seq` Prelude.rnf sample
+      `Prelude.seq` Prelude.rnf schemaVersion
+      `Prelude.seq` Prelude.rnf severity
+      `Prelude.seq` Prelude.rnf title
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/MacieV2/Types/FindingAction.hs b/gen/Amazonka/MacieV2/Types/FindingAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/FindingAction.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.MacieV2.Types.FindingAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.FindingAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.ApiCallDetails
+import Amazonka.MacieV2.Types.FindingActionType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about an action that occurred for a resource and
+-- produced a policy finding.
+--
+-- /See:/ 'newFindingAction' smart constructor.
+data FindingAction = FindingAction'
+  { -- | The type of action that occurred for the affected resource. This value
+    -- is typically AWS_API_CALL, which indicates that an entity invoked an API
+    -- operation for the resource.
+    actionType :: Prelude.Maybe FindingActionType,
+    -- | The invocation details of the API operation that an entity invoked for
+    -- the affected resource, if the value for the actionType property is
+    -- AWS_API_CALL.
+    apiCallDetails :: Prelude.Maybe ApiCallDetails
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FindingAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actionType', 'findingAction_actionType' - The type of action that occurred for the affected resource. This value
+-- is typically AWS_API_CALL, which indicates that an entity invoked an API
+-- operation for the resource.
+--
+-- 'apiCallDetails', 'findingAction_apiCallDetails' - The invocation details of the API operation that an entity invoked for
+-- the affected resource, if the value for the actionType property is
+-- AWS_API_CALL.
+newFindingAction ::
+  FindingAction
+newFindingAction =
+  FindingAction'
+    { actionType = Prelude.Nothing,
+      apiCallDetails = Prelude.Nothing
+    }
+
+-- | The type of action that occurred for the affected resource. This value
+-- is typically AWS_API_CALL, which indicates that an entity invoked an API
+-- operation for the resource.
+findingAction_actionType :: Lens.Lens' FindingAction (Prelude.Maybe FindingActionType)
+findingAction_actionType = Lens.lens (\FindingAction' {actionType} -> actionType) (\s@FindingAction' {} a -> s {actionType = a} :: FindingAction)
+
+-- | The invocation details of the API operation that an entity invoked for
+-- the affected resource, if the value for the actionType property is
+-- AWS_API_CALL.
+findingAction_apiCallDetails :: Lens.Lens' FindingAction (Prelude.Maybe ApiCallDetails)
+findingAction_apiCallDetails = Lens.lens (\FindingAction' {apiCallDetails} -> apiCallDetails) (\s@FindingAction' {} a -> s {apiCallDetails = a} :: FindingAction)
+
+instance Data.FromJSON FindingAction where
+  parseJSON =
+    Data.withObject
+      "FindingAction"
+      ( \x ->
+          FindingAction'
+            Prelude.<$> (x Data..:? "actionType")
+            Prelude.<*> (x Data..:? "apiCallDetails")
+      )
+
+instance Prelude.Hashable FindingAction where
+  hashWithSalt _salt FindingAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` actionType
+      `Prelude.hashWithSalt` apiCallDetails
+
+instance Prelude.NFData FindingAction where
+  rnf FindingAction' {..} =
+    Prelude.rnf actionType
+      `Prelude.seq` Prelude.rnf apiCallDetails
diff --git a/gen/Amazonka/MacieV2/Types/FindingActionType.hs b/gen/Amazonka/MacieV2/Types/FindingActionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/FindingActionType.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.FindingActionType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.FindingActionType
+  ( FindingActionType
+      ( ..,
+        FindingActionType_AWS_API_CALL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The type of action that occurred for the resource and produced the
+-- policy finding:
+newtype FindingActionType = FindingActionType'
+  { fromFindingActionType ::
+      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 FindingActionType_AWS_API_CALL :: FindingActionType
+pattern FindingActionType_AWS_API_CALL = FindingActionType' "AWS_API_CALL"
+
+{-# COMPLETE
+  FindingActionType_AWS_API_CALL,
+  FindingActionType'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/FindingActor.hs b/gen/Amazonka/MacieV2/Types/FindingActor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/FindingActor.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.MacieV2.Types.FindingActor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.FindingActor where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.DomainDetails
+import Amazonka.MacieV2.Types.IpAddressDetails
+import Amazonka.MacieV2.Types.UserIdentity
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about an entity that performed an action that
+-- produced a policy finding for a resource.
+--
+-- /See:/ 'newFindingActor' smart constructor.
+data FindingActor = FindingActor'
+  { -- | The domain name of the device that the entity used to perform the action
+    -- on the affected resource.
+    domainDetails :: Prelude.Maybe DomainDetails,
+    -- | The IP address of the device that the entity used to perform the action
+    -- on the affected resource. This object also provides information such as
+    -- the owner and geographic location for the IP address.
+    ipAddressDetails :: Prelude.Maybe IpAddressDetails,
+    -- | The type and other characteristics of the entity that performed the
+    -- action on the affected resource.
+    userIdentity :: Prelude.Maybe UserIdentity
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FindingActor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainDetails', 'findingActor_domainDetails' - The domain name of the device that the entity used to perform the action
+-- on the affected resource.
+--
+-- 'ipAddressDetails', 'findingActor_ipAddressDetails' - The IP address of the device that the entity used to perform the action
+-- on the affected resource. This object also provides information such as
+-- the owner and geographic location for the IP address.
+--
+-- 'userIdentity', 'findingActor_userIdentity' - The type and other characteristics of the entity that performed the
+-- action on the affected resource.
+newFindingActor ::
+  FindingActor
+newFindingActor =
+  FindingActor'
+    { domainDetails = Prelude.Nothing,
+      ipAddressDetails = Prelude.Nothing,
+      userIdentity = Prelude.Nothing
+    }
+
+-- | The domain name of the device that the entity used to perform the action
+-- on the affected resource.
+findingActor_domainDetails :: Lens.Lens' FindingActor (Prelude.Maybe DomainDetails)
+findingActor_domainDetails = Lens.lens (\FindingActor' {domainDetails} -> domainDetails) (\s@FindingActor' {} a -> s {domainDetails = a} :: FindingActor)
+
+-- | The IP address of the device that the entity used to perform the action
+-- on the affected resource. This object also provides information such as
+-- the owner and geographic location for the IP address.
+findingActor_ipAddressDetails :: Lens.Lens' FindingActor (Prelude.Maybe IpAddressDetails)
+findingActor_ipAddressDetails = Lens.lens (\FindingActor' {ipAddressDetails} -> ipAddressDetails) (\s@FindingActor' {} a -> s {ipAddressDetails = a} :: FindingActor)
+
+-- | The type and other characteristics of the entity that performed the
+-- action on the affected resource.
+findingActor_userIdentity :: Lens.Lens' FindingActor (Prelude.Maybe UserIdentity)
+findingActor_userIdentity = Lens.lens (\FindingActor' {userIdentity} -> userIdentity) (\s@FindingActor' {} a -> s {userIdentity = a} :: FindingActor)
+
+instance Data.FromJSON FindingActor where
+  parseJSON =
+    Data.withObject
+      "FindingActor"
+      ( \x ->
+          FindingActor'
+            Prelude.<$> (x Data..:? "domainDetails")
+            Prelude.<*> (x Data..:? "ipAddressDetails")
+            Prelude.<*> (x Data..:? "userIdentity")
+      )
+
+instance Prelude.Hashable FindingActor where
+  hashWithSalt _salt FindingActor' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainDetails
+      `Prelude.hashWithSalt` ipAddressDetails
+      `Prelude.hashWithSalt` userIdentity
+
+instance Prelude.NFData FindingActor where
+  rnf FindingActor' {..} =
+    Prelude.rnf domainDetails
+      `Prelude.seq` Prelude.rnf ipAddressDetails
+      `Prelude.seq` Prelude.rnf userIdentity
diff --git a/gen/Amazonka/MacieV2/Types/FindingCategory.hs b/gen/Amazonka/MacieV2/Types/FindingCategory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/FindingCategory.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.FindingCategory
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.FindingCategory
+  ( FindingCategory
+      ( ..,
+        FindingCategory_CLASSIFICATION,
+        FindingCategory_POLICY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The category of the finding. Possible values are:
+newtype FindingCategory = FindingCategory'
+  { fromFindingCategory ::
+      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 FindingCategory_CLASSIFICATION :: FindingCategory
+pattern FindingCategory_CLASSIFICATION = FindingCategory' "CLASSIFICATION"
+
+pattern FindingCategory_POLICY :: FindingCategory
+pattern FindingCategory_POLICY = FindingCategory' "POLICY"
+
+{-# COMPLETE
+  FindingCategory_CLASSIFICATION,
+  FindingCategory_POLICY,
+  FindingCategory'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/FindingCriteria.hs b/gen/Amazonka/MacieV2/Types/FindingCriteria.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/FindingCriteria.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.FindingCriteria
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.FindingCriteria where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.CriterionAdditionalProperties
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies, as a map, one or more property-based conditions that filter
+-- the results of a query for findings.
+--
+-- /See:/ 'newFindingCriteria' smart constructor.
+data FindingCriteria = FindingCriteria'
+  { -- | A condition that specifies the property, operator, and one or more
+    -- values to use to filter the results.
+    criterion :: Prelude.Maybe (Prelude.HashMap Prelude.Text CriterionAdditionalProperties)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FindingCriteria' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'criterion', 'findingCriteria_criterion' - A condition that specifies the property, operator, and one or more
+-- values to use to filter the results.
+newFindingCriteria ::
+  FindingCriteria
+newFindingCriteria =
+  FindingCriteria' {criterion = Prelude.Nothing}
+
+-- | A condition that specifies the property, operator, and one or more
+-- values to use to filter the results.
+findingCriteria_criterion :: Lens.Lens' FindingCriteria (Prelude.Maybe (Prelude.HashMap Prelude.Text CriterionAdditionalProperties))
+findingCriteria_criterion = Lens.lens (\FindingCriteria' {criterion} -> criterion) (\s@FindingCriteria' {} a -> s {criterion = a} :: FindingCriteria) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON FindingCriteria where
+  parseJSON =
+    Data.withObject
+      "FindingCriteria"
+      ( \x ->
+          FindingCriteria'
+            Prelude.<$> (x Data..:? "criterion" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable FindingCriteria where
+  hashWithSalt _salt FindingCriteria' {..} =
+    _salt `Prelude.hashWithSalt` criterion
+
+instance Prelude.NFData FindingCriteria where
+  rnf FindingCriteria' {..} = Prelude.rnf criterion
+
+instance Data.ToJSON FindingCriteria where
+  toJSON FindingCriteria' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("criterion" Data..=) Prelude.<$> criterion]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/FindingPublishingFrequency.hs b/gen/Amazonka/MacieV2/Types/FindingPublishingFrequency.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/FindingPublishingFrequency.hs
@@ -0,0 +1,82 @@
+{-# 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.MacieV2.Types.FindingPublishingFrequency
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.FindingPublishingFrequency
+  ( FindingPublishingFrequency
+      ( ..,
+        FindingPublishingFrequency_FIFTEEN_MINUTES,
+        FindingPublishingFrequency_ONE_HOUR,
+        FindingPublishingFrequency_SIX_HOURS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The frequency with which Amazon Macie publishes updates to policy
+-- findings for an account. This includes publishing updates to Security
+-- Hub and Amazon EventBridge (formerly Amazon CloudWatch Events). For more
+-- information, see
+-- <https://docs.aws.amazon.com/macie/latest/user/findings-monitor.html Monitoring and processing findings>
+-- in the /Amazon Macie User Guide/. Valid values are:
+newtype FindingPublishingFrequency = FindingPublishingFrequency'
+  { fromFindingPublishingFrequency ::
+      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 FindingPublishingFrequency_FIFTEEN_MINUTES :: FindingPublishingFrequency
+pattern FindingPublishingFrequency_FIFTEEN_MINUTES = FindingPublishingFrequency' "FIFTEEN_MINUTES"
+
+pattern FindingPublishingFrequency_ONE_HOUR :: FindingPublishingFrequency
+pattern FindingPublishingFrequency_ONE_HOUR = FindingPublishingFrequency' "ONE_HOUR"
+
+pattern FindingPublishingFrequency_SIX_HOURS :: FindingPublishingFrequency
+pattern FindingPublishingFrequency_SIX_HOURS = FindingPublishingFrequency' "SIX_HOURS"
+
+{-# COMPLETE
+  FindingPublishingFrequency_FIFTEEN_MINUTES,
+  FindingPublishingFrequency_ONE_HOUR,
+  FindingPublishingFrequency_SIX_HOURS,
+  FindingPublishingFrequency'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/FindingStatisticsSortAttributeName.hs b/gen/Amazonka/MacieV2/Types/FindingStatisticsSortAttributeName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/FindingStatisticsSortAttributeName.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.FindingStatisticsSortAttributeName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.FindingStatisticsSortAttributeName
+  ( FindingStatisticsSortAttributeName
+      ( ..,
+        FindingStatisticsSortAttributeName_Count,
+        FindingStatisticsSortAttributeName_GroupKey
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The grouping to sort the results by. Valid values are:
+newtype FindingStatisticsSortAttributeName = FindingStatisticsSortAttributeName'
+  { fromFindingStatisticsSortAttributeName ::
+      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 FindingStatisticsSortAttributeName_Count :: FindingStatisticsSortAttributeName
+pattern FindingStatisticsSortAttributeName_Count = FindingStatisticsSortAttributeName' "count"
+
+pattern FindingStatisticsSortAttributeName_GroupKey :: FindingStatisticsSortAttributeName
+pattern FindingStatisticsSortAttributeName_GroupKey = FindingStatisticsSortAttributeName' "groupKey"
+
+{-# COMPLETE
+  FindingStatisticsSortAttributeName_Count,
+  FindingStatisticsSortAttributeName_GroupKey,
+  FindingStatisticsSortAttributeName'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/FindingStatisticsSortCriteria.hs b/gen/Amazonka/MacieV2/Types/FindingStatisticsSortCriteria.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/FindingStatisticsSortCriteria.hs
@@ -0,0 +1,105 @@
+{-# 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.MacieV2.Types.FindingStatisticsSortCriteria
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.FindingStatisticsSortCriteria where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.FindingStatisticsSortAttributeName
+import Amazonka.MacieV2.Types.OrderBy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies criteria for sorting the results of a query that retrieves
+-- aggregated statistical data about findings.
+--
+-- /See:/ 'newFindingStatisticsSortCriteria' smart constructor.
+data FindingStatisticsSortCriteria = FindingStatisticsSortCriteria'
+  { -- | The grouping to sort the results by. Valid values are: count, sort the
+    -- results by the number of findings in each group of results; and,
+    -- groupKey, sort the results by the name of each group of results.
+    attributeName :: Prelude.Maybe FindingStatisticsSortAttributeName,
+    -- | The sort order to apply to the results, based on the value for the
+    -- property specified by the attributeName property. Valid values are: ASC,
+    -- sort the results in ascending order; and, DESC, sort the results in
+    -- descending order.
+    orderBy :: Prelude.Maybe OrderBy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FindingStatisticsSortCriteria' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributeName', 'findingStatisticsSortCriteria_attributeName' - The grouping to sort the results by. Valid values are: count, sort the
+-- results by the number of findings in each group of results; and,
+-- groupKey, sort the results by the name of each group of results.
+--
+-- 'orderBy', 'findingStatisticsSortCriteria_orderBy' - The sort order to apply to the results, based on the value for the
+-- property specified by the attributeName property. Valid values are: ASC,
+-- sort the results in ascending order; and, DESC, sort the results in
+-- descending order.
+newFindingStatisticsSortCriteria ::
+  FindingStatisticsSortCriteria
+newFindingStatisticsSortCriteria =
+  FindingStatisticsSortCriteria'
+    { attributeName =
+        Prelude.Nothing,
+      orderBy = Prelude.Nothing
+    }
+
+-- | The grouping to sort the results by. Valid values are: count, sort the
+-- results by the number of findings in each group of results; and,
+-- groupKey, sort the results by the name of each group of results.
+findingStatisticsSortCriteria_attributeName :: Lens.Lens' FindingStatisticsSortCriteria (Prelude.Maybe FindingStatisticsSortAttributeName)
+findingStatisticsSortCriteria_attributeName = Lens.lens (\FindingStatisticsSortCriteria' {attributeName} -> attributeName) (\s@FindingStatisticsSortCriteria' {} a -> s {attributeName = a} :: FindingStatisticsSortCriteria)
+
+-- | The sort order to apply to the results, based on the value for the
+-- property specified by the attributeName property. Valid values are: ASC,
+-- sort the results in ascending order; and, DESC, sort the results in
+-- descending order.
+findingStatisticsSortCriteria_orderBy :: Lens.Lens' FindingStatisticsSortCriteria (Prelude.Maybe OrderBy)
+findingStatisticsSortCriteria_orderBy = Lens.lens (\FindingStatisticsSortCriteria' {orderBy} -> orderBy) (\s@FindingStatisticsSortCriteria' {} a -> s {orderBy = a} :: FindingStatisticsSortCriteria)
+
+instance
+  Prelude.Hashable
+    FindingStatisticsSortCriteria
+  where
+  hashWithSalt _salt FindingStatisticsSortCriteria' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributeName
+      `Prelude.hashWithSalt` orderBy
+
+instance Prelude.NFData FindingStatisticsSortCriteria where
+  rnf FindingStatisticsSortCriteria' {..} =
+    Prelude.rnf attributeName
+      `Prelude.seq` Prelude.rnf orderBy
+
+instance Data.ToJSON FindingStatisticsSortCriteria where
+  toJSON FindingStatisticsSortCriteria' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("attributeName" Data..=) Prelude.<$> attributeName,
+            ("orderBy" Data..=) Prelude.<$> orderBy
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/FindingType.hs b/gen/Amazonka/MacieV2/Types/FindingType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/FindingType.hs
@@ -0,0 +1,114 @@
+{-# 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.MacieV2.Types.FindingType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.FindingType
+  ( FindingType
+      ( ..,
+        FindingType_Policy_IAMUser_S3BlockPublicAccessDisabled,
+        FindingType_Policy_IAMUser_S3BucketEncryptionDisabled,
+        FindingType_Policy_IAMUser_S3BucketPublic,
+        FindingType_Policy_IAMUser_S3BucketReplicatedExternally,
+        FindingType_Policy_IAMUser_S3BucketSharedExternally,
+        FindingType_SensitiveData_S3Object_Credentials,
+        FindingType_SensitiveData_S3Object_CustomIdentifier,
+        FindingType_SensitiveData_S3Object_Financial,
+        FindingType_SensitiveData_S3Object_Multiple,
+        FindingType_SensitiveData_S3Object_Personal
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The type of finding. For details about each type, see
+-- <https://docs.aws.amazon.com/macie/latest/user/findings-types.html Types of Amazon Macie findings>
+-- in the /Amazon Macie User Guide/. Possible values are:
+newtype FindingType = FindingType'
+  { fromFindingType ::
+      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 FindingType_Policy_IAMUser_S3BlockPublicAccessDisabled :: FindingType
+pattern FindingType_Policy_IAMUser_S3BlockPublicAccessDisabled = FindingType' "Policy:IAMUser/S3BlockPublicAccessDisabled"
+
+pattern FindingType_Policy_IAMUser_S3BucketEncryptionDisabled :: FindingType
+pattern FindingType_Policy_IAMUser_S3BucketEncryptionDisabled = FindingType' "Policy:IAMUser/S3BucketEncryptionDisabled"
+
+pattern FindingType_Policy_IAMUser_S3BucketPublic :: FindingType
+pattern FindingType_Policy_IAMUser_S3BucketPublic = FindingType' "Policy:IAMUser/S3BucketPublic"
+
+pattern FindingType_Policy_IAMUser_S3BucketReplicatedExternally :: FindingType
+pattern FindingType_Policy_IAMUser_S3BucketReplicatedExternally = FindingType' "Policy:IAMUser/S3BucketReplicatedExternally"
+
+pattern FindingType_Policy_IAMUser_S3BucketSharedExternally :: FindingType
+pattern FindingType_Policy_IAMUser_S3BucketSharedExternally = FindingType' "Policy:IAMUser/S3BucketSharedExternally"
+
+pattern FindingType_SensitiveData_S3Object_Credentials :: FindingType
+pattern FindingType_SensitiveData_S3Object_Credentials = FindingType' "SensitiveData:S3Object/Credentials"
+
+pattern FindingType_SensitiveData_S3Object_CustomIdentifier :: FindingType
+pattern FindingType_SensitiveData_S3Object_CustomIdentifier = FindingType' "SensitiveData:S3Object/CustomIdentifier"
+
+pattern FindingType_SensitiveData_S3Object_Financial :: FindingType
+pattern FindingType_SensitiveData_S3Object_Financial = FindingType' "SensitiveData:S3Object/Financial"
+
+pattern FindingType_SensitiveData_S3Object_Multiple :: FindingType
+pattern FindingType_SensitiveData_S3Object_Multiple = FindingType' "SensitiveData:S3Object/Multiple"
+
+pattern FindingType_SensitiveData_S3Object_Personal :: FindingType
+pattern FindingType_SensitiveData_S3Object_Personal = FindingType' "SensitiveData:S3Object/Personal"
+
+{-# COMPLETE
+  FindingType_Policy_IAMUser_S3BlockPublicAccessDisabled,
+  FindingType_Policy_IAMUser_S3BucketEncryptionDisabled,
+  FindingType_Policy_IAMUser_S3BucketPublic,
+  FindingType_Policy_IAMUser_S3BucketReplicatedExternally,
+  FindingType_Policy_IAMUser_S3BucketSharedExternally,
+  FindingType_SensitiveData_S3Object_Credentials,
+  FindingType_SensitiveData_S3Object_CustomIdentifier,
+  FindingType_SensitiveData_S3Object_Financial,
+  FindingType_SensitiveData_S3Object_Multiple,
+  FindingType_SensitiveData_S3Object_Personal,
+  FindingType'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/FindingsFilterAction.hs b/gen/Amazonka/MacieV2/Types/FindingsFilterAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/FindingsFilterAction.hs
@@ -0,0 +1,74 @@
+{-# 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.MacieV2.Types.FindingsFilterAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.FindingsFilterAction
+  ( FindingsFilterAction
+      ( ..,
+        FindingsFilterAction_ARCHIVE,
+        FindingsFilterAction_NOOP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The action to perform on findings that match the filter criteria. To
+-- suppress (automatically archive) findings that match the criteria, set
+-- this value to ARCHIVE. Valid values are:
+newtype FindingsFilterAction = FindingsFilterAction'
+  { fromFindingsFilterAction ::
+      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 FindingsFilterAction_ARCHIVE :: FindingsFilterAction
+pattern FindingsFilterAction_ARCHIVE = FindingsFilterAction' "ARCHIVE"
+
+pattern FindingsFilterAction_NOOP :: FindingsFilterAction
+pattern FindingsFilterAction_NOOP = FindingsFilterAction' "NOOP"
+
+{-# COMPLETE
+  FindingsFilterAction_ARCHIVE,
+  FindingsFilterAction_NOOP,
+  FindingsFilterAction'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/FindingsFilterListItem.hs b/gen/Amazonka/MacieV2/Types/FindingsFilterListItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/FindingsFilterListItem.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.MacieV2.Types.FindingsFilterListItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.FindingsFilterListItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.FindingsFilterAction
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about a findings filter.
+--
+-- /See:/ 'newFindingsFilterListItem' smart constructor.
+data FindingsFilterListItem = FindingsFilterListItem'
+  { -- | The action that\'s performed on findings that match the filter criteria.
+    -- Possible values are: ARCHIVE, suppress (automatically archive) the
+    -- findings; and, NOOP, don\'t perform any action on the findings.
+    action :: Prelude.Maybe FindingsFilterAction,
+    -- | The Amazon Resource Name (ARN) of the filter.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the filter.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The custom name of the filter.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A map of key-value pairs that specifies which tags (keys and values) are
+    -- associated with the filter.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FindingsFilterListItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'action', 'findingsFilterListItem_action' - The action that\'s performed on findings that match the filter criteria.
+-- Possible values are: ARCHIVE, suppress (automatically archive) the
+-- findings; and, NOOP, don\'t perform any action on the findings.
+--
+-- 'arn', 'findingsFilterListItem_arn' - The Amazon Resource Name (ARN) of the filter.
+--
+-- 'id', 'findingsFilterListItem_id' - The unique identifier for the filter.
+--
+-- 'name', 'findingsFilterListItem_name' - The custom name of the filter.
+--
+-- 'tags', 'findingsFilterListItem_tags' - A map of key-value pairs that specifies which tags (keys and values) are
+-- associated with the filter.
+newFindingsFilterListItem ::
+  FindingsFilterListItem
+newFindingsFilterListItem =
+  FindingsFilterListItem'
+    { action = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The action that\'s performed on findings that match the filter criteria.
+-- Possible values are: ARCHIVE, suppress (automatically archive) the
+-- findings; and, NOOP, don\'t perform any action on the findings.
+findingsFilterListItem_action :: Lens.Lens' FindingsFilterListItem (Prelude.Maybe FindingsFilterAction)
+findingsFilterListItem_action = Lens.lens (\FindingsFilterListItem' {action} -> action) (\s@FindingsFilterListItem' {} a -> s {action = a} :: FindingsFilterListItem)
+
+-- | The Amazon Resource Name (ARN) of the filter.
+findingsFilterListItem_arn :: Lens.Lens' FindingsFilterListItem (Prelude.Maybe Prelude.Text)
+findingsFilterListItem_arn = Lens.lens (\FindingsFilterListItem' {arn} -> arn) (\s@FindingsFilterListItem' {} a -> s {arn = a} :: FindingsFilterListItem)
+
+-- | The unique identifier for the filter.
+findingsFilterListItem_id :: Lens.Lens' FindingsFilterListItem (Prelude.Maybe Prelude.Text)
+findingsFilterListItem_id = Lens.lens (\FindingsFilterListItem' {id} -> id) (\s@FindingsFilterListItem' {} a -> s {id = a} :: FindingsFilterListItem)
+
+-- | The custom name of the filter.
+findingsFilterListItem_name :: Lens.Lens' FindingsFilterListItem (Prelude.Maybe Prelude.Text)
+findingsFilterListItem_name = Lens.lens (\FindingsFilterListItem' {name} -> name) (\s@FindingsFilterListItem' {} a -> s {name = a} :: FindingsFilterListItem)
+
+-- | A map of key-value pairs that specifies which tags (keys and values) are
+-- associated with the filter.
+findingsFilterListItem_tags :: Lens.Lens' FindingsFilterListItem (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+findingsFilterListItem_tags = Lens.lens (\FindingsFilterListItem' {tags} -> tags) (\s@FindingsFilterListItem' {} a -> s {tags = a} :: FindingsFilterListItem) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON FindingsFilterListItem where
+  parseJSON =
+    Data.withObject
+      "FindingsFilterListItem"
+      ( \x ->
+          FindingsFilterListItem'
+            Prelude.<$> (x Data..:? "action")
+            Prelude.<*> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable FindingsFilterListItem where
+  hashWithSalt _salt FindingsFilterListItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` action
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData FindingsFilterListItem where
+  rnf FindingsFilterListItem' {..} =
+    Prelude.rnf action
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/MacieV2/Types/GroupBy.hs b/gen/Amazonka/MacieV2/Types/GroupBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/GroupBy.hs
@@ -0,0 +1,78 @@
+{-# 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.MacieV2.Types.GroupBy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.GroupBy
+  ( GroupBy
+      ( ..,
+        GroupBy_ClassificationDetails_jobId,
+        GroupBy_ResourcesAffected_s3Bucket_name,
+        GroupBy_Severity_description,
+        GroupBy_Type
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype GroupBy = GroupBy' {fromGroupBy :: 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 GroupBy_ClassificationDetails_jobId :: GroupBy
+pattern GroupBy_ClassificationDetails_jobId = GroupBy' "classificationDetails.jobId"
+
+pattern GroupBy_ResourcesAffected_s3Bucket_name :: GroupBy
+pattern GroupBy_ResourcesAffected_s3Bucket_name = GroupBy' "resourcesAffected.s3Bucket.name"
+
+pattern GroupBy_Severity_description :: GroupBy
+pattern GroupBy_Severity_description = GroupBy' "severity.description"
+
+pattern GroupBy_Type :: GroupBy
+pattern GroupBy_Type = GroupBy' "type"
+
+{-# COMPLETE
+  GroupBy_ClassificationDetails_jobId,
+  GroupBy_ResourcesAffected_s3Bucket_name,
+  GroupBy_Severity_description,
+  GroupBy_Type,
+  GroupBy'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/GroupCount.hs b/gen/Amazonka/MacieV2/Types/GroupCount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/GroupCount.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.GroupCount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.GroupCount 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 a group of results for a query that retrieved aggregated
+-- statistical data about findings.
+--
+-- /See:/ 'newGroupCount' smart constructor.
+data GroupCount = GroupCount'
+  { -- | The total number of findings in the group of query results.
+    count :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the property that defines the group in the query results, as
+    -- specified by the groupBy property in the query request.
+    groupKey :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GroupCount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'count', 'groupCount_count' - The total number of findings in the group of query results.
+--
+-- 'groupKey', 'groupCount_groupKey' - The name of the property that defines the group in the query results, as
+-- specified by the groupBy property in the query request.
+newGroupCount ::
+  GroupCount
+newGroupCount =
+  GroupCount'
+    { count = Prelude.Nothing,
+      groupKey = Prelude.Nothing
+    }
+
+-- | The total number of findings in the group of query results.
+groupCount_count :: Lens.Lens' GroupCount (Prelude.Maybe Prelude.Integer)
+groupCount_count = Lens.lens (\GroupCount' {count} -> count) (\s@GroupCount' {} a -> s {count = a} :: GroupCount)
+
+-- | The name of the property that defines the group in the query results, as
+-- specified by the groupBy property in the query request.
+groupCount_groupKey :: Lens.Lens' GroupCount (Prelude.Maybe Prelude.Text)
+groupCount_groupKey = Lens.lens (\GroupCount' {groupKey} -> groupKey) (\s@GroupCount' {} a -> s {groupKey = a} :: GroupCount)
+
+instance Data.FromJSON GroupCount where
+  parseJSON =
+    Data.withObject
+      "GroupCount"
+      ( \x ->
+          GroupCount'
+            Prelude.<$> (x Data..:? "count")
+            Prelude.<*> (x Data..:? "groupKey")
+      )
+
+instance Prelude.Hashable GroupCount where
+  hashWithSalt _salt GroupCount' {..} =
+    _salt
+      `Prelude.hashWithSalt` count
+      `Prelude.hashWithSalt` groupKey
+
+instance Prelude.NFData GroupCount where
+  rnf GroupCount' {..} =
+    Prelude.rnf count
+      `Prelude.seq` Prelude.rnf groupKey
diff --git a/gen/Amazonka/MacieV2/Types/IamUser.hs b/gen/Amazonka/MacieV2/Types/IamUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/IamUser.hs
@@ -0,0 +1,118 @@
+{-# 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.MacieV2.Types.IamUser
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.IamUser 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 information about an Identity and Access Management (IAM) user
+-- who performed an action on an affected resource.
+--
+-- /See:/ 'newIamUser' smart constructor.
+data IamUser = IamUser'
+  { -- | The unique identifier for the Amazon Web Services account that\'s
+    -- associated with the IAM user who performed the action.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the principal that performed the
+    -- action. The last section of the ARN contains the name of the user who
+    -- performed the action.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the IAM user who performed the action.
+    principalId :: Prelude.Maybe Prelude.Text,
+    -- | The user name of the IAM user who performed the action.
+    userName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IamUser' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'iamUser_accountId' - The unique identifier for the Amazon Web Services account that\'s
+-- associated with the IAM user who performed the action.
+--
+-- 'arn', 'iamUser_arn' - The Amazon Resource Name (ARN) of the principal that performed the
+-- action. The last section of the ARN contains the name of the user who
+-- performed the action.
+--
+-- 'principalId', 'iamUser_principalId' - The unique identifier for the IAM user who performed the action.
+--
+-- 'userName', 'iamUser_userName' - The user name of the IAM user who performed the action.
+newIamUser ::
+  IamUser
+newIamUser =
+  IamUser'
+    { accountId = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      principalId = Prelude.Nothing,
+      userName = Prelude.Nothing
+    }
+
+-- | The unique identifier for the Amazon Web Services account that\'s
+-- associated with the IAM user who performed the action.
+iamUser_accountId :: Lens.Lens' IamUser (Prelude.Maybe Prelude.Text)
+iamUser_accountId = Lens.lens (\IamUser' {accountId} -> accountId) (\s@IamUser' {} a -> s {accountId = a} :: IamUser)
+
+-- | The Amazon Resource Name (ARN) of the principal that performed the
+-- action. The last section of the ARN contains the name of the user who
+-- performed the action.
+iamUser_arn :: Lens.Lens' IamUser (Prelude.Maybe Prelude.Text)
+iamUser_arn = Lens.lens (\IamUser' {arn} -> arn) (\s@IamUser' {} a -> s {arn = a} :: IamUser)
+
+-- | The unique identifier for the IAM user who performed the action.
+iamUser_principalId :: Lens.Lens' IamUser (Prelude.Maybe Prelude.Text)
+iamUser_principalId = Lens.lens (\IamUser' {principalId} -> principalId) (\s@IamUser' {} a -> s {principalId = a} :: IamUser)
+
+-- | The user name of the IAM user who performed the action.
+iamUser_userName :: Lens.Lens' IamUser (Prelude.Maybe Prelude.Text)
+iamUser_userName = Lens.lens (\IamUser' {userName} -> userName) (\s@IamUser' {} a -> s {userName = a} :: IamUser)
+
+instance Data.FromJSON IamUser where
+  parseJSON =
+    Data.withObject
+      "IamUser"
+      ( \x ->
+          IamUser'
+            Prelude.<$> (x Data..:? "accountId")
+            Prelude.<*> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "principalId")
+            Prelude.<*> (x Data..:? "userName")
+      )
+
+instance Prelude.Hashable IamUser where
+  hashWithSalt _salt IamUser' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` principalId
+      `Prelude.hashWithSalt` userName
+
+instance Prelude.NFData IamUser where
+  rnf IamUser' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf principalId
+      `Prelude.seq` Prelude.rnf userName
diff --git a/gen/Amazonka/MacieV2/Types/Invitation.hs b/gen/Amazonka/MacieV2/Types/Invitation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/Invitation.hs
@@ -0,0 +1,118 @@
+{-# 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.MacieV2.Types.Invitation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.Invitation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.RelationshipStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about an Amazon Macie membership invitation.
+--
+-- /See:/ 'newInvitation' smart constructor.
+data Invitation = Invitation'
+  { -- | The Amazon Web Services account ID for the account that sent the
+    -- invitation.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the invitation.
+    invitationId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in UTC and extended ISO 8601 format, when the
+    -- invitation was sent.
+    invitedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The status of the relationship between the account that sent the
+    -- invitation and the account that received the invitation.
+    relationshipStatus :: Prelude.Maybe RelationshipStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Invitation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'invitation_accountId' - The Amazon Web Services account ID for the account that sent the
+-- invitation.
+--
+-- 'invitationId', 'invitation_invitationId' - The unique identifier for the invitation.
+--
+-- 'invitedAt', 'invitation_invitedAt' - The date and time, in UTC and extended ISO 8601 format, when the
+-- invitation was sent.
+--
+-- 'relationshipStatus', 'invitation_relationshipStatus' - The status of the relationship between the account that sent the
+-- invitation and the account that received the invitation.
+newInvitation ::
+  Invitation
+newInvitation =
+  Invitation'
+    { accountId = Prelude.Nothing,
+      invitationId = Prelude.Nothing,
+      invitedAt = Prelude.Nothing,
+      relationshipStatus = Prelude.Nothing
+    }
+
+-- | The Amazon Web Services account ID for the account that sent the
+-- invitation.
+invitation_accountId :: Lens.Lens' Invitation (Prelude.Maybe Prelude.Text)
+invitation_accountId = Lens.lens (\Invitation' {accountId} -> accountId) (\s@Invitation' {} a -> s {accountId = a} :: Invitation)
+
+-- | The unique identifier for the invitation.
+invitation_invitationId :: Lens.Lens' Invitation (Prelude.Maybe Prelude.Text)
+invitation_invitationId = Lens.lens (\Invitation' {invitationId} -> invitationId) (\s@Invitation' {} a -> s {invitationId = a} :: Invitation)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the
+-- invitation was sent.
+invitation_invitedAt :: Lens.Lens' Invitation (Prelude.Maybe Prelude.UTCTime)
+invitation_invitedAt = Lens.lens (\Invitation' {invitedAt} -> invitedAt) (\s@Invitation' {} a -> s {invitedAt = a} :: Invitation) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the relationship between the account that sent the
+-- invitation and the account that received the invitation.
+invitation_relationshipStatus :: Lens.Lens' Invitation (Prelude.Maybe RelationshipStatus)
+invitation_relationshipStatus = Lens.lens (\Invitation' {relationshipStatus} -> relationshipStatus) (\s@Invitation' {} a -> s {relationshipStatus = a} :: Invitation)
+
+instance Data.FromJSON Invitation where
+  parseJSON =
+    Data.withObject
+      "Invitation"
+      ( \x ->
+          Invitation'
+            Prelude.<$> (x Data..:? "accountId")
+            Prelude.<*> (x Data..:? "invitationId")
+            Prelude.<*> (x Data..:? "invitedAt")
+            Prelude.<*> (x Data..:? "relationshipStatus")
+      )
+
+instance Prelude.Hashable Invitation where
+  hashWithSalt _salt Invitation' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` invitationId
+      `Prelude.hashWithSalt` invitedAt
+      `Prelude.hashWithSalt` relationshipStatus
+
+instance Prelude.NFData Invitation where
+  rnf Invitation' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf invitationId
+      `Prelude.seq` Prelude.rnf invitedAt
+      `Prelude.seq` Prelude.rnf relationshipStatus
diff --git a/gen/Amazonka/MacieV2/Types/IpAddressDetails.hs b/gen/Amazonka/MacieV2/Types/IpAddressDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/IpAddressDetails.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.IpAddressDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.IpAddressDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.IpCity
+import Amazonka.MacieV2.Types.IpCountry
+import Amazonka.MacieV2.Types.IpGeoLocation
+import Amazonka.MacieV2.Types.IpOwner
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the IP address of the device that an entity
+-- used to perform an action on an affected resource.
+--
+-- /See:/ 'newIpAddressDetails' smart constructor.
+data IpAddressDetails = IpAddressDetails'
+  { -- | The Internet Protocol version 4 (IPv4) address of the device.
+    ipAddressV4 :: Prelude.Maybe Prelude.Text,
+    -- | The city that the IP address originated from.
+    ipCity :: Prelude.Maybe IpCity,
+    -- | The country that the IP address originated from.
+    ipCountry :: Prelude.Maybe IpCountry,
+    -- | The geographic coordinates of the location that the IP address
+    -- originated from.
+    ipGeoLocation :: Prelude.Maybe IpGeoLocation,
+    -- | The registered owner of the IP address.
+    ipOwner :: Prelude.Maybe IpOwner
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpAddressDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipAddressV4', 'ipAddressDetails_ipAddressV4' - The Internet Protocol version 4 (IPv4) address of the device.
+--
+-- 'ipCity', 'ipAddressDetails_ipCity' - The city that the IP address originated from.
+--
+-- 'ipCountry', 'ipAddressDetails_ipCountry' - The country that the IP address originated from.
+--
+-- 'ipGeoLocation', 'ipAddressDetails_ipGeoLocation' - The geographic coordinates of the location that the IP address
+-- originated from.
+--
+-- 'ipOwner', 'ipAddressDetails_ipOwner' - The registered owner of the IP address.
+newIpAddressDetails ::
+  IpAddressDetails
+newIpAddressDetails =
+  IpAddressDetails'
+    { ipAddressV4 = Prelude.Nothing,
+      ipCity = Prelude.Nothing,
+      ipCountry = Prelude.Nothing,
+      ipGeoLocation = Prelude.Nothing,
+      ipOwner = Prelude.Nothing
+    }
+
+-- | The Internet Protocol version 4 (IPv4) address of the device.
+ipAddressDetails_ipAddressV4 :: Lens.Lens' IpAddressDetails (Prelude.Maybe Prelude.Text)
+ipAddressDetails_ipAddressV4 = Lens.lens (\IpAddressDetails' {ipAddressV4} -> ipAddressV4) (\s@IpAddressDetails' {} a -> s {ipAddressV4 = a} :: IpAddressDetails)
+
+-- | The city that the IP address originated from.
+ipAddressDetails_ipCity :: Lens.Lens' IpAddressDetails (Prelude.Maybe IpCity)
+ipAddressDetails_ipCity = Lens.lens (\IpAddressDetails' {ipCity} -> ipCity) (\s@IpAddressDetails' {} a -> s {ipCity = a} :: IpAddressDetails)
+
+-- | The country that the IP address originated from.
+ipAddressDetails_ipCountry :: Lens.Lens' IpAddressDetails (Prelude.Maybe IpCountry)
+ipAddressDetails_ipCountry = Lens.lens (\IpAddressDetails' {ipCountry} -> ipCountry) (\s@IpAddressDetails' {} a -> s {ipCountry = a} :: IpAddressDetails)
+
+-- | The geographic coordinates of the location that the IP address
+-- originated from.
+ipAddressDetails_ipGeoLocation :: Lens.Lens' IpAddressDetails (Prelude.Maybe IpGeoLocation)
+ipAddressDetails_ipGeoLocation = Lens.lens (\IpAddressDetails' {ipGeoLocation} -> ipGeoLocation) (\s@IpAddressDetails' {} a -> s {ipGeoLocation = a} :: IpAddressDetails)
+
+-- | The registered owner of the IP address.
+ipAddressDetails_ipOwner :: Lens.Lens' IpAddressDetails (Prelude.Maybe IpOwner)
+ipAddressDetails_ipOwner = Lens.lens (\IpAddressDetails' {ipOwner} -> ipOwner) (\s@IpAddressDetails' {} a -> s {ipOwner = a} :: IpAddressDetails)
+
+instance Data.FromJSON IpAddressDetails where
+  parseJSON =
+    Data.withObject
+      "IpAddressDetails"
+      ( \x ->
+          IpAddressDetails'
+            Prelude.<$> (x Data..:? "ipAddressV4")
+            Prelude.<*> (x Data..:? "ipCity")
+            Prelude.<*> (x Data..:? "ipCountry")
+            Prelude.<*> (x Data..:? "ipGeoLocation")
+            Prelude.<*> (x Data..:? "ipOwner")
+      )
+
+instance Prelude.Hashable IpAddressDetails where
+  hashWithSalt _salt IpAddressDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` ipAddressV4
+      `Prelude.hashWithSalt` ipCity
+      `Prelude.hashWithSalt` ipCountry
+      `Prelude.hashWithSalt` ipGeoLocation
+      `Prelude.hashWithSalt` ipOwner
+
+instance Prelude.NFData IpAddressDetails where
+  rnf IpAddressDetails' {..} =
+    Prelude.rnf ipAddressV4
+      `Prelude.seq` Prelude.rnf ipCity
+      `Prelude.seq` Prelude.rnf ipCountry
+      `Prelude.seq` Prelude.rnf ipGeoLocation
+      `Prelude.seq` Prelude.rnf ipOwner
diff --git a/gen/Amazonka/MacieV2/Types/IpCity.hs b/gen/Amazonka/MacieV2/Types/IpCity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/IpCity.hs
@@ -0,0 +1,64 @@
+{-# 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.MacieV2.Types.IpCity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.IpCity 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 information about the city that an IP address originated from.
+--
+-- /See:/ 'newIpCity' smart constructor.
+data IpCity = IpCity'
+  { -- | The name of the city.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpCity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'ipCity_name' - The name of the city.
+newIpCity ::
+  IpCity
+newIpCity = IpCity' {name = Prelude.Nothing}
+
+-- | The name of the city.
+ipCity_name :: Lens.Lens' IpCity (Prelude.Maybe Prelude.Text)
+ipCity_name = Lens.lens (\IpCity' {name} -> name) (\s@IpCity' {} a -> s {name = a} :: IpCity)
+
+instance Data.FromJSON IpCity where
+  parseJSON =
+    Data.withObject
+      "IpCity"
+      (\x -> IpCity' Prelude.<$> (x Data..:? "name"))
+
+instance Prelude.Hashable IpCity where
+  hashWithSalt _salt IpCity' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData IpCity where
+  rnf IpCity' {..} = Prelude.rnf name
diff --git a/gen/Amazonka/MacieV2/Types/IpCountry.hs b/gen/Amazonka/MacieV2/Types/IpCountry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/IpCountry.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.MacieV2.Types.IpCountry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.IpCountry 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 information about the country that an IP address originated
+-- from.
+--
+-- /See:/ 'newIpCountry' smart constructor.
+data IpCountry = IpCountry'
+  { -- | The two-character code, in ISO 3166-1 alpha-2 format, for the country
+    -- that the IP address originated from. For example, US for the United
+    -- States.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | The name of the country that the IP address originated from.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpCountry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'ipCountry_code' - The two-character code, in ISO 3166-1 alpha-2 format, for the country
+-- that the IP address originated from. For example, US for the United
+-- States.
+--
+-- 'name', 'ipCountry_name' - The name of the country that the IP address originated from.
+newIpCountry ::
+  IpCountry
+newIpCountry =
+  IpCountry'
+    { code = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The two-character code, in ISO 3166-1 alpha-2 format, for the country
+-- that the IP address originated from. For example, US for the United
+-- States.
+ipCountry_code :: Lens.Lens' IpCountry (Prelude.Maybe Prelude.Text)
+ipCountry_code = Lens.lens (\IpCountry' {code} -> code) (\s@IpCountry' {} a -> s {code = a} :: IpCountry)
+
+-- | The name of the country that the IP address originated from.
+ipCountry_name :: Lens.Lens' IpCountry (Prelude.Maybe Prelude.Text)
+ipCountry_name = Lens.lens (\IpCountry' {name} -> name) (\s@IpCountry' {} a -> s {name = a} :: IpCountry)
+
+instance Data.FromJSON IpCountry where
+  parseJSON =
+    Data.withObject
+      "IpCountry"
+      ( \x ->
+          IpCountry'
+            Prelude.<$> (x Data..:? "code")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable IpCountry where
+  hashWithSalt _salt IpCountry' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData IpCountry where
+  rnf IpCountry' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/MacieV2/Types/IpGeoLocation.hs b/gen/Amazonka/MacieV2/Types/IpGeoLocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/IpGeoLocation.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.MacieV2.Types.IpGeoLocation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.IpGeoLocation 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 geographic coordinates that indicate where a specified IP
+-- address originated from.
+--
+-- /See:/ 'newIpGeoLocation' smart constructor.
+data IpGeoLocation = IpGeoLocation'
+  { -- | The latitude coordinate of the location, rounded to four decimal places.
+    lat :: Prelude.Maybe Prelude.Double,
+    -- | The longitude coordinate of the location, rounded to four decimal
+    -- places.
+    lon :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpGeoLocation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lat', 'ipGeoLocation_lat' - The latitude coordinate of the location, rounded to four decimal places.
+--
+-- 'lon', 'ipGeoLocation_lon' - The longitude coordinate of the location, rounded to four decimal
+-- places.
+newIpGeoLocation ::
+  IpGeoLocation
+newIpGeoLocation =
+  IpGeoLocation'
+    { lat = Prelude.Nothing,
+      lon = Prelude.Nothing
+    }
+
+-- | The latitude coordinate of the location, rounded to four decimal places.
+ipGeoLocation_lat :: Lens.Lens' IpGeoLocation (Prelude.Maybe Prelude.Double)
+ipGeoLocation_lat = Lens.lens (\IpGeoLocation' {lat} -> lat) (\s@IpGeoLocation' {} a -> s {lat = a} :: IpGeoLocation)
+
+-- | The longitude coordinate of the location, rounded to four decimal
+-- places.
+ipGeoLocation_lon :: Lens.Lens' IpGeoLocation (Prelude.Maybe Prelude.Double)
+ipGeoLocation_lon = Lens.lens (\IpGeoLocation' {lon} -> lon) (\s@IpGeoLocation' {} a -> s {lon = a} :: IpGeoLocation)
+
+instance Data.FromJSON IpGeoLocation where
+  parseJSON =
+    Data.withObject
+      "IpGeoLocation"
+      ( \x ->
+          IpGeoLocation'
+            Prelude.<$> (x Data..:? "lat")
+            Prelude.<*> (x Data..:? "lon")
+      )
+
+instance Prelude.Hashable IpGeoLocation where
+  hashWithSalt _salt IpGeoLocation' {..} =
+    _salt
+      `Prelude.hashWithSalt` lat
+      `Prelude.hashWithSalt` lon
+
+instance Prelude.NFData IpGeoLocation where
+  rnf IpGeoLocation' {..} =
+    Prelude.rnf lat `Prelude.seq` Prelude.rnf lon
diff --git a/gen/Amazonka/MacieV2/Types/IpOwner.hs b/gen/Amazonka/MacieV2/Types/IpOwner.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/IpOwner.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.MacieV2.Types.IpOwner
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.IpOwner 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 information about the registered owner of an IP address.
+--
+-- /See:/ 'newIpOwner' smart constructor.
+data IpOwner = IpOwner'
+  { -- | The autonomous system number (ASN) for the autonomous system that
+    -- included the IP address.
+    asn :: Prelude.Maybe Prelude.Text,
+    -- | The organization identifier that\'s associated with the autonomous
+    -- system number (ASN) for the autonomous system that included the IP
+    -- address.
+    asnOrg :: Prelude.Maybe Prelude.Text,
+    -- | The name of the internet service provider (ISP) that owned the IP
+    -- address.
+    isp :: Prelude.Maybe Prelude.Text,
+    -- | The name of the organization that owned the IP address.
+    org :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpOwner' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'asn', 'ipOwner_asn' - The autonomous system number (ASN) for the autonomous system that
+-- included the IP address.
+--
+-- 'asnOrg', 'ipOwner_asnOrg' - The organization identifier that\'s associated with the autonomous
+-- system number (ASN) for the autonomous system that included the IP
+-- address.
+--
+-- 'isp', 'ipOwner_isp' - The name of the internet service provider (ISP) that owned the IP
+-- address.
+--
+-- 'org', 'ipOwner_org' - The name of the organization that owned the IP address.
+newIpOwner ::
+  IpOwner
+newIpOwner =
+  IpOwner'
+    { asn = Prelude.Nothing,
+      asnOrg = Prelude.Nothing,
+      isp = Prelude.Nothing,
+      org = Prelude.Nothing
+    }
+
+-- | The autonomous system number (ASN) for the autonomous system that
+-- included the IP address.
+ipOwner_asn :: Lens.Lens' IpOwner (Prelude.Maybe Prelude.Text)
+ipOwner_asn = Lens.lens (\IpOwner' {asn} -> asn) (\s@IpOwner' {} a -> s {asn = a} :: IpOwner)
+
+-- | The organization identifier that\'s associated with the autonomous
+-- system number (ASN) for the autonomous system that included the IP
+-- address.
+ipOwner_asnOrg :: Lens.Lens' IpOwner (Prelude.Maybe Prelude.Text)
+ipOwner_asnOrg = Lens.lens (\IpOwner' {asnOrg} -> asnOrg) (\s@IpOwner' {} a -> s {asnOrg = a} :: IpOwner)
+
+-- | The name of the internet service provider (ISP) that owned the IP
+-- address.
+ipOwner_isp :: Lens.Lens' IpOwner (Prelude.Maybe Prelude.Text)
+ipOwner_isp = Lens.lens (\IpOwner' {isp} -> isp) (\s@IpOwner' {} a -> s {isp = a} :: IpOwner)
+
+-- | The name of the organization that owned the IP address.
+ipOwner_org :: Lens.Lens' IpOwner (Prelude.Maybe Prelude.Text)
+ipOwner_org = Lens.lens (\IpOwner' {org} -> org) (\s@IpOwner' {} a -> s {org = a} :: IpOwner)
+
+instance Data.FromJSON IpOwner where
+  parseJSON =
+    Data.withObject
+      "IpOwner"
+      ( \x ->
+          IpOwner'
+            Prelude.<$> (x Data..:? "asn")
+            Prelude.<*> (x Data..:? "asnOrg")
+            Prelude.<*> (x Data..:? "isp")
+            Prelude.<*> (x Data..:? "org")
+      )
+
+instance Prelude.Hashable IpOwner where
+  hashWithSalt _salt IpOwner' {..} =
+    _salt
+      `Prelude.hashWithSalt` asn
+      `Prelude.hashWithSalt` asnOrg
+      `Prelude.hashWithSalt` isp
+      `Prelude.hashWithSalt` org
+
+instance Prelude.NFData IpOwner where
+  rnf IpOwner' {..} =
+    Prelude.rnf asn
+      `Prelude.seq` Prelude.rnf asnOrg
+      `Prelude.seq` Prelude.rnf isp
+      `Prelude.seq` Prelude.rnf org
diff --git a/gen/Amazonka/MacieV2/Types/IsDefinedInJob.hs b/gen/Amazonka/MacieV2/Types/IsDefinedInJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/IsDefinedInJob.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.MacieV2.Types.IsDefinedInJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.IsDefinedInJob
+  ( IsDefinedInJob
+      ( ..,
+        IsDefinedInJob_FALSE,
+        IsDefinedInJob_TRUE,
+        IsDefinedInJob_UNKNOWN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype IsDefinedInJob = IsDefinedInJob'
+  { fromIsDefinedInJob ::
+      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 IsDefinedInJob_FALSE :: IsDefinedInJob
+pattern IsDefinedInJob_FALSE = IsDefinedInJob' "FALSE"
+
+pattern IsDefinedInJob_TRUE :: IsDefinedInJob
+pattern IsDefinedInJob_TRUE = IsDefinedInJob' "TRUE"
+
+pattern IsDefinedInJob_UNKNOWN :: IsDefinedInJob
+pattern IsDefinedInJob_UNKNOWN = IsDefinedInJob' "UNKNOWN"
+
+{-# COMPLETE
+  IsDefinedInJob_FALSE,
+  IsDefinedInJob_TRUE,
+  IsDefinedInJob_UNKNOWN,
+  IsDefinedInJob'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/IsMonitoredByJob.hs b/gen/Amazonka/MacieV2/Types/IsMonitoredByJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/IsMonitoredByJob.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.MacieV2.Types.IsMonitoredByJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.IsMonitoredByJob
+  ( IsMonitoredByJob
+      ( ..,
+        IsMonitoredByJob_FALSE,
+        IsMonitoredByJob_TRUE,
+        IsMonitoredByJob_UNKNOWN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype IsMonitoredByJob = IsMonitoredByJob'
+  { fromIsMonitoredByJob ::
+      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 IsMonitoredByJob_FALSE :: IsMonitoredByJob
+pattern IsMonitoredByJob_FALSE = IsMonitoredByJob' "FALSE"
+
+pattern IsMonitoredByJob_TRUE :: IsMonitoredByJob
+pattern IsMonitoredByJob_TRUE = IsMonitoredByJob' "TRUE"
+
+pattern IsMonitoredByJob_UNKNOWN :: IsMonitoredByJob
+pattern IsMonitoredByJob_UNKNOWN = IsMonitoredByJob' "UNKNOWN"
+
+{-# COMPLETE
+  IsMonitoredByJob_FALSE,
+  IsMonitoredByJob_TRUE,
+  IsMonitoredByJob_UNKNOWN,
+  IsMonitoredByJob'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/JobComparator.hs b/gen/Amazonka/MacieV2/Types/JobComparator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/JobComparator.hs
@@ -0,0 +1,103 @@
+{-# 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.MacieV2.Types.JobComparator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.JobComparator
+  ( JobComparator
+      ( ..,
+        JobComparator_CONTAINS,
+        JobComparator_EQ,
+        JobComparator_GT,
+        JobComparator_GTE,
+        JobComparator_LT,
+        JobComparator_LTE,
+        JobComparator_NE,
+        JobComparator_STARTS_WITH
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The operator to use in a condition. Depending on the type of condition,
+-- possible values are:
+newtype JobComparator = JobComparator'
+  { fromJobComparator ::
+      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 JobComparator_CONTAINS :: JobComparator
+pattern JobComparator_CONTAINS = JobComparator' "CONTAINS"
+
+pattern JobComparator_EQ :: JobComparator
+pattern JobComparator_EQ = JobComparator' "EQ"
+
+pattern JobComparator_GT :: JobComparator
+pattern JobComparator_GT = JobComparator' "GT"
+
+pattern JobComparator_GTE :: JobComparator
+pattern JobComparator_GTE = JobComparator' "GTE"
+
+pattern JobComparator_LT :: JobComparator
+pattern JobComparator_LT = JobComparator' "LT"
+
+pattern JobComparator_LTE :: JobComparator
+pattern JobComparator_LTE = JobComparator' "LTE"
+
+pattern JobComparator_NE :: JobComparator
+pattern JobComparator_NE = JobComparator' "NE"
+
+pattern JobComparator_STARTS_WITH :: JobComparator
+pattern JobComparator_STARTS_WITH = JobComparator' "STARTS_WITH"
+
+{-# COMPLETE
+  JobComparator_CONTAINS,
+  JobComparator_EQ,
+  JobComparator_GT,
+  JobComparator_GTE,
+  JobComparator_LT,
+  JobComparator_LTE,
+  JobComparator_NE,
+  JobComparator_STARTS_WITH,
+  JobComparator'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/JobDetails.hs b/gen/Amazonka/MacieV2/Types/JobDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/JobDetails.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.MacieV2.Types.JobDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.JobDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.IsDefinedInJob
+import Amazonka.MacieV2.Types.IsMonitoredByJob
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies whether any one-time or recurring classification jobs are
+-- configured to analyze data in an S3 bucket, and, if so, the details of
+-- the job that ran most recently.
+--
+-- /See:/ 'newJobDetails' smart constructor.
+data JobDetails = JobDetails'
+  { -- | Specifies whether any one-time or recurring jobs are configured to
+    -- analyze data in the bucket. Possible values are:
+    --
+    -- -   TRUE - The bucket is explicitly included in the bucket definition
+    --     (S3BucketDefinitionForJob) for one or more jobs and at least one of
+    --     those jobs has a status other than CANCELLED. Or the bucket matched
+    --     the bucket criteria (S3BucketCriteriaForJob) for at least one job
+    --     that previously ran.
+    --
+    -- -   FALSE - The bucket isn\'t explicitly included in the bucket
+    --     definition (S3BucketDefinitionForJob) for any jobs, all the jobs
+    --     that explicitly include the bucket in their bucket definitions have
+    --     a status of CANCELLED, or the bucket didn\'t match the bucket
+    --     criteria (S3BucketCriteriaForJob) for any jobs that previously ran.
+    --
+    -- -   UNKNOWN - An exception occurred when Amazon Macie attempted to
+    --     retrieve job data for the bucket.
+    isDefinedInJob :: Prelude.Maybe IsDefinedInJob,
+    -- | Specifies whether any recurring jobs are configured to analyze data in
+    -- the bucket. Possible values are:
+    --
+    -- -   TRUE - The bucket is explicitly included in the bucket definition
+    --     (S3BucketDefinitionForJob) for one or more recurring jobs or the
+    --     bucket matches the bucket criteria (S3BucketCriteriaForJob) for one
+    --     or more recurring jobs. At least one of those jobs has a status
+    --     other than CANCELLED.
+    --
+    -- -   FALSE - The bucket isn\'t explicitly included in the bucket
+    --     definition (S3BucketDefinitionForJob) for any recurring jobs, the
+    --     bucket doesn\'t match the bucket criteria (S3BucketCriteriaForJob)
+    --     for any recurring jobs, or all the recurring jobs that are
+    --     configured to analyze data in the bucket have a status of CANCELLED.
+    --
+    -- -   UNKNOWN - An exception occurred when Amazon Macie attempted to
+    --     retrieve job data for the bucket.
+    isMonitoredByJob :: Prelude.Maybe IsMonitoredByJob,
+    -- | The unique identifier for the job that ran most recently and is
+    -- configured to analyze data in the bucket, either the latest run of a
+    -- recurring job or the only run of a one-time job.
+    --
+    -- This value is typically null if the value for the isDefinedInJob
+    -- property is FALSE or UNKNOWN.
+    lastJobId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in UTC and extended ISO 8601 format, when the job
+    -- (lastJobId) started. If the job is a recurring job, this value indicates
+    -- when the most recent run started.
+    --
+    -- This value is typically null if the value for the isDefinedInJob
+    -- property is FALSE or UNKNOWN.
+    lastJobRunTime :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'isDefinedInJob', 'jobDetails_isDefinedInJob' - Specifies whether any one-time or recurring jobs are configured to
+-- analyze data in the bucket. Possible values are:
+--
+-- -   TRUE - The bucket is explicitly included in the bucket definition
+--     (S3BucketDefinitionForJob) for one or more jobs and at least one of
+--     those jobs has a status other than CANCELLED. Or the bucket matched
+--     the bucket criteria (S3BucketCriteriaForJob) for at least one job
+--     that previously ran.
+--
+-- -   FALSE - The bucket isn\'t explicitly included in the bucket
+--     definition (S3BucketDefinitionForJob) for any jobs, all the jobs
+--     that explicitly include the bucket in their bucket definitions have
+--     a status of CANCELLED, or the bucket didn\'t match the bucket
+--     criteria (S3BucketCriteriaForJob) for any jobs that previously ran.
+--
+-- -   UNKNOWN - An exception occurred when Amazon Macie attempted to
+--     retrieve job data for the bucket.
+--
+-- 'isMonitoredByJob', 'jobDetails_isMonitoredByJob' - Specifies whether any recurring jobs are configured to analyze data in
+-- the bucket. Possible values are:
+--
+-- -   TRUE - The bucket is explicitly included in the bucket definition
+--     (S3BucketDefinitionForJob) for one or more recurring jobs or the
+--     bucket matches the bucket criteria (S3BucketCriteriaForJob) for one
+--     or more recurring jobs. At least one of those jobs has a status
+--     other than CANCELLED.
+--
+-- -   FALSE - The bucket isn\'t explicitly included in the bucket
+--     definition (S3BucketDefinitionForJob) for any recurring jobs, the
+--     bucket doesn\'t match the bucket criteria (S3BucketCriteriaForJob)
+--     for any recurring jobs, or all the recurring jobs that are
+--     configured to analyze data in the bucket have a status of CANCELLED.
+--
+-- -   UNKNOWN - An exception occurred when Amazon Macie attempted to
+--     retrieve job data for the bucket.
+--
+-- 'lastJobId', 'jobDetails_lastJobId' - The unique identifier for the job that ran most recently and is
+-- configured to analyze data in the bucket, either the latest run of a
+-- recurring job or the only run of a one-time job.
+--
+-- This value is typically null if the value for the isDefinedInJob
+-- property is FALSE or UNKNOWN.
+--
+-- 'lastJobRunTime', 'jobDetails_lastJobRunTime' - The date and time, in UTC and extended ISO 8601 format, when the job
+-- (lastJobId) started. If the job is a recurring job, this value indicates
+-- when the most recent run started.
+--
+-- This value is typically null if the value for the isDefinedInJob
+-- property is FALSE or UNKNOWN.
+newJobDetails ::
+  JobDetails
+newJobDetails =
+  JobDetails'
+    { isDefinedInJob = Prelude.Nothing,
+      isMonitoredByJob = Prelude.Nothing,
+      lastJobId = Prelude.Nothing,
+      lastJobRunTime = Prelude.Nothing
+    }
+
+-- | Specifies whether any one-time or recurring jobs are configured to
+-- analyze data in the bucket. Possible values are:
+--
+-- -   TRUE - The bucket is explicitly included in the bucket definition
+--     (S3BucketDefinitionForJob) for one or more jobs and at least one of
+--     those jobs has a status other than CANCELLED. Or the bucket matched
+--     the bucket criteria (S3BucketCriteriaForJob) for at least one job
+--     that previously ran.
+--
+-- -   FALSE - The bucket isn\'t explicitly included in the bucket
+--     definition (S3BucketDefinitionForJob) for any jobs, all the jobs
+--     that explicitly include the bucket in their bucket definitions have
+--     a status of CANCELLED, or the bucket didn\'t match the bucket
+--     criteria (S3BucketCriteriaForJob) for any jobs that previously ran.
+--
+-- -   UNKNOWN - An exception occurred when Amazon Macie attempted to
+--     retrieve job data for the bucket.
+jobDetails_isDefinedInJob :: Lens.Lens' JobDetails (Prelude.Maybe IsDefinedInJob)
+jobDetails_isDefinedInJob = Lens.lens (\JobDetails' {isDefinedInJob} -> isDefinedInJob) (\s@JobDetails' {} a -> s {isDefinedInJob = a} :: JobDetails)
+
+-- | Specifies whether any recurring jobs are configured to analyze data in
+-- the bucket. Possible values are:
+--
+-- -   TRUE - The bucket is explicitly included in the bucket definition
+--     (S3BucketDefinitionForJob) for one or more recurring jobs or the
+--     bucket matches the bucket criteria (S3BucketCriteriaForJob) for one
+--     or more recurring jobs. At least one of those jobs has a status
+--     other than CANCELLED.
+--
+-- -   FALSE - The bucket isn\'t explicitly included in the bucket
+--     definition (S3BucketDefinitionForJob) for any recurring jobs, the
+--     bucket doesn\'t match the bucket criteria (S3BucketCriteriaForJob)
+--     for any recurring jobs, or all the recurring jobs that are
+--     configured to analyze data in the bucket have a status of CANCELLED.
+--
+-- -   UNKNOWN - An exception occurred when Amazon Macie attempted to
+--     retrieve job data for the bucket.
+jobDetails_isMonitoredByJob :: Lens.Lens' JobDetails (Prelude.Maybe IsMonitoredByJob)
+jobDetails_isMonitoredByJob = Lens.lens (\JobDetails' {isMonitoredByJob} -> isMonitoredByJob) (\s@JobDetails' {} a -> s {isMonitoredByJob = a} :: JobDetails)
+
+-- | The unique identifier for the job that ran most recently and is
+-- configured to analyze data in the bucket, either the latest run of a
+-- recurring job or the only run of a one-time job.
+--
+-- This value is typically null if the value for the isDefinedInJob
+-- property is FALSE or UNKNOWN.
+jobDetails_lastJobId :: Lens.Lens' JobDetails (Prelude.Maybe Prelude.Text)
+jobDetails_lastJobId = Lens.lens (\JobDetails' {lastJobId} -> lastJobId) (\s@JobDetails' {} a -> s {lastJobId = a} :: JobDetails)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the job
+-- (lastJobId) started. If the job is a recurring job, this value indicates
+-- when the most recent run started.
+--
+-- This value is typically null if the value for the isDefinedInJob
+-- property is FALSE or UNKNOWN.
+jobDetails_lastJobRunTime :: Lens.Lens' JobDetails (Prelude.Maybe Prelude.UTCTime)
+jobDetails_lastJobRunTime = Lens.lens (\JobDetails' {lastJobRunTime} -> lastJobRunTime) (\s@JobDetails' {} a -> s {lastJobRunTime = a} :: JobDetails) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON JobDetails where
+  parseJSON =
+    Data.withObject
+      "JobDetails"
+      ( \x ->
+          JobDetails'
+            Prelude.<$> (x Data..:? "isDefinedInJob")
+            Prelude.<*> (x Data..:? "isMonitoredByJob")
+            Prelude.<*> (x Data..:? "lastJobId")
+            Prelude.<*> (x Data..:? "lastJobRunTime")
+      )
+
+instance Prelude.Hashable JobDetails where
+  hashWithSalt _salt JobDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` isDefinedInJob
+      `Prelude.hashWithSalt` isMonitoredByJob
+      `Prelude.hashWithSalt` lastJobId
+      `Prelude.hashWithSalt` lastJobRunTime
+
+instance Prelude.NFData JobDetails where
+  rnf JobDetails' {..} =
+    Prelude.rnf isDefinedInJob
+      `Prelude.seq` Prelude.rnf isMonitoredByJob
+      `Prelude.seq` Prelude.rnf lastJobId
+      `Prelude.seq` Prelude.rnf lastJobRunTime
diff --git a/gen/Amazonka/MacieV2/Types/JobScheduleFrequency.hs b/gen/Amazonka/MacieV2/Types/JobScheduleFrequency.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/JobScheduleFrequency.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.MacieV2.Types.JobScheduleFrequency
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.JobScheduleFrequency where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.DailySchedule
+import Amazonka.MacieV2.Types.MonthlySchedule
+import Amazonka.MacieV2.Types.WeeklySchedule
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the recurrence pattern for running a classification job.
+--
+-- /See:/ 'newJobScheduleFrequency' smart constructor.
+data JobScheduleFrequency = JobScheduleFrequency'
+  { -- | Specifies a daily recurrence pattern for running the job.
+    dailySchedule :: Prelude.Maybe DailySchedule,
+    -- | Specifies a monthly recurrence pattern for running the job.
+    monthlySchedule :: Prelude.Maybe MonthlySchedule,
+    -- | Specifies a weekly recurrence pattern for running the job.
+    weeklySchedule :: Prelude.Maybe WeeklySchedule
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobScheduleFrequency' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dailySchedule', 'jobScheduleFrequency_dailySchedule' - Specifies a daily recurrence pattern for running the job.
+--
+-- 'monthlySchedule', 'jobScheduleFrequency_monthlySchedule' - Specifies a monthly recurrence pattern for running the job.
+--
+-- 'weeklySchedule', 'jobScheduleFrequency_weeklySchedule' - Specifies a weekly recurrence pattern for running the job.
+newJobScheduleFrequency ::
+  JobScheduleFrequency
+newJobScheduleFrequency =
+  JobScheduleFrequency'
+    { dailySchedule =
+        Prelude.Nothing,
+      monthlySchedule = Prelude.Nothing,
+      weeklySchedule = Prelude.Nothing
+    }
+
+-- | Specifies a daily recurrence pattern for running the job.
+jobScheduleFrequency_dailySchedule :: Lens.Lens' JobScheduleFrequency (Prelude.Maybe DailySchedule)
+jobScheduleFrequency_dailySchedule = Lens.lens (\JobScheduleFrequency' {dailySchedule} -> dailySchedule) (\s@JobScheduleFrequency' {} a -> s {dailySchedule = a} :: JobScheduleFrequency)
+
+-- | Specifies a monthly recurrence pattern for running the job.
+jobScheduleFrequency_monthlySchedule :: Lens.Lens' JobScheduleFrequency (Prelude.Maybe MonthlySchedule)
+jobScheduleFrequency_monthlySchedule = Lens.lens (\JobScheduleFrequency' {monthlySchedule} -> monthlySchedule) (\s@JobScheduleFrequency' {} a -> s {monthlySchedule = a} :: JobScheduleFrequency)
+
+-- | Specifies a weekly recurrence pattern for running the job.
+jobScheduleFrequency_weeklySchedule :: Lens.Lens' JobScheduleFrequency (Prelude.Maybe WeeklySchedule)
+jobScheduleFrequency_weeklySchedule = Lens.lens (\JobScheduleFrequency' {weeklySchedule} -> weeklySchedule) (\s@JobScheduleFrequency' {} a -> s {weeklySchedule = a} :: JobScheduleFrequency)
+
+instance Data.FromJSON JobScheduleFrequency where
+  parseJSON =
+    Data.withObject
+      "JobScheduleFrequency"
+      ( \x ->
+          JobScheduleFrequency'
+            Prelude.<$> (x Data..:? "dailySchedule")
+            Prelude.<*> (x Data..:? "monthlySchedule")
+            Prelude.<*> (x Data..:? "weeklySchedule")
+      )
+
+instance Prelude.Hashable JobScheduleFrequency where
+  hashWithSalt _salt JobScheduleFrequency' {..} =
+    _salt
+      `Prelude.hashWithSalt` dailySchedule
+      `Prelude.hashWithSalt` monthlySchedule
+      `Prelude.hashWithSalt` weeklySchedule
+
+instance Prelude.NFData JobScheduleFrequency where
+  rnf JobScheduleFrequency' {..} =
+    Prelude.rnf dailySchedule
+      `Prelude.seq` Prelude.rnf monthlySchedule
+      `Prelude.seq` Prelude.rnf weeklySchedule
+
+instance Data.ToJSON JobScheduleFrequency where
+  toJSON JobScheduleFrequency' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("dailySchedule" Data..=) Prelude.<$> dailySchedule,
+            ("monthlySchedule" Data..=)
+              Prelude.<$> monthlySchedule,
+            ("weeklySchedule" Data..=)
+              Prelude.<$> weeklySchedule
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/JobScopeTerm.hs b/gen/Amazonka/MacieV2/Types/JobScopeTerm.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/JobScopeTerm.hs
@@ -0,0 +1,105 @@
+{-# 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.MacieV2.Types.JobScopeTerm
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.JobScopeTerm where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.SimpleScopeTerm
+import Amazonka.MacieV2.Types.TagScopeTerm
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a property- or tag-based condition that defines criteria for
+-- including or excluding S3 objects from a classification job. A
+-- JobScopeTerm object can contain only one simpleScopeTerm object or one
+-- tagScopeTerm object.
+--
+-- /See:/ 'newJobScopeTerm' smart constructor.
+data JobScopeTerm = JobScopeTerm'
+  { -- | A property-based condition that defines a property, operator, and one or
+    -- more values for including or excluding objects from the job.
+    simpleScopeTerm :: Prelude.Maybe SimpleScopeTerm,
+    -- | A tag-based condition that defines the operator and tag keys or tag key
+    -- and value pairs for including or excluding objects from the job.
+    tagScopeTerm :: Prelude.Maybe TagScopeTerm
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobScopeTerm' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'simpleScopeTerm', 'jobScopeTerm_simpleScopeTerm' - A property-based condition that defines a property, operator, and one or
+-- more values for including or excluding objects from the job.
+--
+-- 'tagScopeTerm', 'jobScopeTerm_tagScopeTerm' - A tag-based condition that defines the operator and tag keys or tag key
+-- and value pairs for including or excluding objects from the job.
+newJobScopeTerm ::
+  JobScopeTerm
+newJobScopeTerm =
+  JobScopeTerm'
+    { simpleScopeTerm = Prelude.Nothing,
+      tagScopeTerm = Prelude.Nothing
+    }
+
+-- | A property-based condition that defines a property, operator, and one or
+-- more values for including or excluding objects from the job.
+jobScopeTerm_simpleScopeTerm :: Lens.Lens' JobScopeTerm (Prelude.Maybe SimpleScopeTerm)
+jobScopeTerm_simpleScopeTerm = Lens.lens (\JobScopeTerm' {simpleScopeTerm} -> simpleScopeTerm) (\s@JobScopeTerm' {} a -> s {simpleScopeTerm = a} :: JobScopeTerm)
+
+-- | A tag-based condition that defines the operator and tag keys or tag key
+-- and value pairs for including or excluding objects from the job.
+jobScopeTerm_tagScopeTerm :: Lens.Lens' JobScopeTerm (Prelude.Maybe TagScopeTerm)
+jobScopeTerm_tagScopeTerm = Lens.lens (\JobScopeTerm' {tagScopeTerm} -> tagScopeTerm) (\s@JobScopeTerm' {} a -> s {tagScopeTerm = a} :: JobScopeTerm)
+
+instance Data.FromJSON JobScopeTerm where
+  parseJSON =
+    Data.withObject
+      "JobScopeTerm"
+      ( \x ->
+          JobScopeTerm'
+            Prelude.<$> (x Data..:? "simpleScopeTerm")
+            Prelude.<*> (x Data..:? "tagScopeTerm")
+      )
+
+instance Prelude.Hashable JobScopeTerm where
+  hashWithSalt _salt JobScopeTerm' {..} =
+    _salt
+      `Prelude.hashWithSalt` simpleScopeTerm
+      `Prelude.hashWithSalt` tagScopeTerm
+
+instance Prelude.NFData JobScopeTerm where
+  rnf JobScopeTerm' {..} =
+    Prelude.rnf simpleScopeTerm
+      `Prelude.seq` Prelude.rnf tagScopeTerm
+
+instance Data.ToJSON JobScopeTerm where
+  toJSON JobScopeTerm' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("simpleScopeTerm" Data..=)
+              Prelude.<$> simpleScopeTerm,
+            ("tagScopeTerm" Data..=) Prelude.<$> tagScopeTerm
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/JobScopingBlock.hs b/gen/Amazonka/MacieV2/Types/JobScopingBlock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/JobScopingBlock.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.MacieV2.Types.JobScopingBlock
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.JobScopingBlock where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.JobScopeTerm
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies one or more property- and tag-based conditions that define
+-- criteria for including or excluding S3 objects from a classification
+-- job.
+--
+-- /See:/ 'newJobScopingBlock' smart constructor.
+data JobScopingBlock = JobScopingBlock'
+  { -- | An array of conditions, one for each property- or tag-based condition
+    -- that determines which objects to include or exclude from the job. If you
+    -- specify more than one condition, Amazon Macie uses AND logic to join the
+    -- conditions.
+    and :: Prelude.Maybe [JobScopeTerm]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobScopingBlock' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'and', 'jobScopingBlock_and' - An array of conditions, one for each property- or tag-based condition
+-- that determines which objects to include or exclude from the job. If you
+-- specify more than one condition, Amazon Macie uses AND logic to join the
+-- conditions.
+newJobScopingBlock ::
+  JobScopingBlock
+newJobScopingBlock =
+  JobScopingBlock' {and = Prelude.Nothing}
+
+-- | An array of conditions, one for each property- or tag-based condition
+-- that determines which objects to include or exclude from the job. If you
+-- specify more than one condition, Amazon Macie uses AND logic to join the
+-- conditions.
+jobScopingBlock_and :: Lens.Lens' JobScopingBlock (Prelude.Maybe [JobScopeTerm])
+jobScopingBlock_and = Lens.lens (\JobScopingBlock' {and} -> and) (\s@JobScopingBlock' {} a -> s {and = a} :: JobScopingBlock) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON JobScopingBlock where
+  parseJSON =
+    Data.withObject
+      "JobScopingBlock"
+      ( \x ->
+          JobScopingBlock'
+            Prelude.<$> (x Data..:? "and" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable JobScopingBlock where
+  hashWithSalt _salt JobScopingBlock' {..} =
+    _salt `Prelude.hashWithSalt` and
+
+instance Prelude.NFData JobScopingBlock where
+  rnf JobScopingBlock' {..} = Prelude.rnf and
+
+instance Data.ToJSON JobScopingBlock where
+  toJSON JobScopingBlock' {..} =
+    Data.object
+      (Prelude.catMaybes [("and" Data..=) Prelude.<$> and])
diff --git a/gen/Amazonka/MacieV2/Types/JobStatus.hs b/gen/Amazonka/MacieV2/Types/JobStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/JobStatus.hs
@@ -0,0 +1,92 @@
+{-# 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.MacieV2.Types.JobStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.JobStatus
+  ( JobStatus
+      ( ..,
+        JobStatus_CANCELLED,
+        JobStatus_COMPLETE,
+        JobStatus_IDLE,
+        JobStatus_PAUSED,
+        JobStatus_RUNNING,
+        JobStatus_USER_PAUSED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status of a classification job. Possible values are:
+newtype JobStatus = JobStatus'
+  { fromJobStatus ::
+      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 JobStatus_CANCELLED :: JobStatus
+pattern JobStatus_CANCELLED = JobStatus' "CANCELLED"
+
+pattern JobStatus_COMPLETE :: JobStatus
+pattern JobStatus_COMPLETE = JobStatus' "COMPLETE"
+
+pattern JobStatus_IDLE :: JobStatus
+pattern JobStatus_IDLE = JobStatus' "IDLE"
+
+pattern JobStatus_PAUSED :: JobStatus
+pattern JobStatus_PAUSED = JobStatus' "PAUSED"
+
+pattern JobStatus_RUNNING :: JobStatus
+pattern JobStatus_RUNNING = JobStatus' "RUNNING"
+
+pattern JobStatus_USER_PAUSED :: JobStatus
+pattern JobStatus_USER_PAUSED = JobStatus' "USER_PAUSED"
+
+{-# COMPLETE
+  JobStatus_CANCELLED,
+  JobStatus_COMPLETE,
+  JobStatus_IDLE,
+  JobStatus_PAUSED,
+  JobStatus_RUNNING,
+  JobStatus_USER_PAUSED,
+  JobStatus'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/JobSummary.hs b/gen/Amazonka/MacieV2/Types/JobSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/JobSummary.hs
@@ -0,0 +1,307 @@
+{-# 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.MacieV2.Types.JobSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.JobSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.JobStatus
+import Amazonka.MacieV2.Types.JobType
+import Amazonka.MacieV2.Types.LastRunErrorStatus
+import Amazonka.MacieV2.Types.S3BucketCriteriaForJob
+import Amazonka.MacieV2.Types.S3BucketDefinitionForJob
+import Amazonka.MacieV2.Types.UserPausedDetails
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about a classification job, including the current
+-- status of the job.
+--
+-- /See:/ 'newJobSummary' smart constructor.
+data JobSummary = JobSummary'
+  { -- | The property- and tag-based conditions that determine which S3 buckets
+    -- are included or excluded from the job\'s analysis. Each time the job
+    -- runs, the job uses these criteria to determine which buckets to analyze.
+    -- A job\'s definition can contain a bucketCriteria object or a
+    -- bucketDefinitions array, not both.
+    bucketCriteria :: Prelude.Maybe S3BucketCriteriaForJob,
+    -- | An array of objects, one for each Amazon Web Services account that owns
+    -- specific S3 buckets for the job to analyze. Each object specifies the
+    -- account ID for an account and one or more buckets to analyze for that
+    -- account. A job\'s definition can contain a bucketDefinitions array or a
+    -- bucketCriteria object, not both.
+    bucketDefinitions :: Prelude.Maybe [S3BucketDefinitionForJob],
+    -- | The date and time, in UTC and extended ISO 8601 format, when the job was
+    -- created.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The unique identifier for the job.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the job. Possible values are:
+    --
+    -- -   CANCELLED - You cancelled the job or, if it\'s a one-time job, you
+    --     paused the job and didn\'t resume it within 30 days.
+    --
+    -- -   COMPLETE - For a one-time job, Amazon Macie finished processing the
+    --     data specified for the job. This value doesn\'t apply to recurring
+    --     jobs.
+    --
+    -- -   IDLE - For a recurring job, the previous scheduled run is complete
+    --     and the next scheduled run is pending. This value doesn\'t apply to
+    --     one-time jobs.
+    --
+    -- -   PAUSED - Macie started running the job but additional processing
+    --     would exceed the monthly sensitive data discovery quota for your
+    --     account or one or more member accounts that the job analyzes data
+    --     for.
+    --
+    -- -   RUNNING - For a one-time job, the job is in progress. For a
+    --     recurring job, a scheduled run is in progress.
+    --
+    -- -   USER_PAUSED - You paused the job. If you paused the job while it had
+    --     a status of RUNNING and you don\'t resume it within 30 days of
+    --     pausing it, the job or job run will expire and be cancelled,
+    --     depending on the job\'s type. To check the expiration date, refer to
+    --     the UserPausedDetails.jobExpiresAt property.
+    jobStatus :: Prelude.Maybe JobStatus,
+    -- | The schedule for running the job. Possible values are:
+    --
+    -- -   ONE_TIME - The job runs only once.
+    --
+    -- -   SCHEDULED - The job runs on a daily, weekly, or monthly basis.
+    jobType :: Prelude.Maybe JobType,
+    -- | Specifies whether any account- or bucket-level access errors occurred
+    -- when the job ran. For a recurring job, this value indicates the error
+    -- status of the job\'s most recent run.
+    lastRunErrorStatus :: Prelude.Maybe LastRunErrorStatus,
+    -- | The custom name of the job.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | If the current status of the job is USER_PAUSED, specifies when the job
+    -- was paused and when the job or job run will expire and be cancelled if
+    -- it isn\'t resumed. This value is present only if the value for jobStatus
+    -- is USER_PAUSED.
+    userPausedDetails :: Prelude.Maybe UserPausedDetails
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucketCriteria', 'jobSummary_bucketCriteria' - The property- and tag-based conditions that determine which S3 buckets
+-- are included or excluded from the job\'s analysis. Each time the job
+-- runs, the job uses these criteria to determine which buckets to analyze.
+-- A job\'s definition can contain a bucketCriteria object or a
+-- bucketDefinitions array, not both.
+--
+-- 'bucketDefinitions', 'jobSummary_bucketDefinitions' - An array of objects, one for each Amazon Web Services account that owns
+-- specific S3 buckets for the job to analyze. Each object specifies the
+-- account ID for an account and one or more buckets to analyze for that
+-- account. A job\'s definition can contain a bucketDefinitions array or a
+-- bucketCriteria object, not both.
+--
+-- 'createdAt', 'jobSummary_createdAt' - The date and time, in UTC and extended ISO 8601 format, when the job was
+-- created.
+--
+-- 'jobId', 'jobSummary_jobId' - The unique identifier for the job.
+--
+-- 'jobStatus', 'jobSummary_jobStatus' - The current status of the job. Possible values are:
+--
+-- -   CANCELLED - You cancelled the job or, if it\'s a one-time job, you
+--     paused the job and didn\'t resume it within 30 days.
+--
+-- -   COMPLETE - For a one-time job, Amazon Macie finished processing the
+--     data specified for the job. This value doesn\'t apply to recurring
+--     jobs.
+--
+-- -   IDLE - For a recurring job, the previous scheduled run is complete
+--     and the next scheduled run is pending. This value doesn\'t apply to
+--     one-time jobs.
+--
+-- -   PAUSED - Macie started running the job but additional processing
+--     would exceed the monthly sensitive data discovery quota for your
+--     account or one or more member accounts that the job analyzes data
+--     for.
+--
+-- -   RUNNING - For a one-time job, the job is in progress. For a
+--     recurring job, a scheduled run is in progress.
+--
+-- -   USER_PAUSED - You paused the job. If you paused the job while it had
+--     a status of RUNNING and you don\'t resume it within 30 days of
+--     pausing it, the job or job run will expire and be cancelled,
+--     depending on the job\'s type. To check the expiration date, refer to
+--     the UserPausedDetails.jobExpiresAt property.
+--
+-- 'jobType', 'jobSummary_jobType' - The schedule for running the job. Possible values are:
+--
+-- -   ONE_TIME - The job runs only once.
+--
+-- -   SCHEDULED - The job runs on a daily, weekly, or monthly basis.
+--
+-- 'lastRunErrorStatus', 'jobSummary_lastRunErrorStatus' - Specifies whether any account- or bucket-level access errors occurred
+-- when the job ran. For a recurring job, this value indicates the error
+-- status of the job\'s most recent run.
+--
+-- 'name', 'jobSummary_name' - The custom name of the job.
+--
+-- 'userPausedDetails', 'jobSummary_userPausedDetails' - If the current status of the job is USER_PAUSED, specifies when the job
+-- was paused and when the job or job run will expire and be cancelled if
+-- it isn\'t resumed. This value is present only if the value for jobStatus
+-- is USER_PAUSED.
+newJobSummary ::
+  JobSummary
+newJobSummary =
+  JobSummary'
+    { bucketCriteria = Prelude.Nothing,
+      bucketDefinitions = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      jobStatus = Prelude.Nothing,
+      jobType = Prelude.Nothing,
+      lastRunErrorStatus = Prelude.Nothing,
+      name = Prelude.Nothing,
+      userPausedDetails = Prelude.Nothing
+    }
+
+-- | The property- and tag-based conditions that determine which S3 buckets
+-- are included or excluded from the job\'s analysis. Each time the job
+-- runs, the job uses these criteria to determine which buckets to analyze.
+-- A job\'s definition can contain a bucketCriteria object or a
+-- bucketDefinitions array, not both.
+jobSummary_bucketCriteria :: Lens.Lens' JobSummary (Prelude.Maybe S3BucketCriteriaForJob)
+jobSummary_bucketCriteria = Lens.lens (\JobSummary' {bucketCriteria} -> bucketCriteria) (\s@JobSummary' {} a -> s {bucketCriteria = a} :: JobSummary)
+
+-- | An array of objects, one for each Amazon Web Services account that owns
+-- specific S3 buckets for the job to analyze. Each object specifies the
+-- account ID for an account and one or more buckets to analyze for that
+-- account. A job\'s definition can contain a bucketDefinitions array or a
+-- bucketCriteria object, not both.
+jobSummary_bucketDefinitions :: Lens.Lens' JobSummary (Prelude.Maybe [S3BucketDefinitionForJob])
+jobSummary_bucketDefinitions = Lens.lens (\JobSummary' {bucketDefinitions} -> bucketDefinitions) (\s@JobSummary' {} a -> s {bucketDefinitions = a} :: JobSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the job was
+-- created.
+jobSummary_createdAt :: Lens.Lens' JobSummary (Prelude.Maybe Prelude.UTCTime)
+jobSummary_createdAt = Lens.lens (\JobSummary' {createdAt} -> createdAt) (\s@JobSummary' {} a -> s {createdAt = a} :: JobSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier for the job.
+jobSummary_jobId :: Lens.Lens' JobSummary (Prelude.Maybe Prelude.Text)
+jobSummary_jobId = Lens.lens (\JobSummary' {jobId} -> jobId) (\s@JobSummary' {} a -> s {jobId = a} :: JobSummary)
+
+-- | The current status of the job. Possible values are:
+--
+-- -   CANCELLED - You cancelled the job or, if it\'s a one-time job, you
+--     paused the job and didn\'t resume it within 30 days.
+--
+-- -   COMPLETE - For a one-time job, Amazon Macie finished processing the
+--     data specified for the job. This value doesn\'t apply to recurring
+--     jobs.
+--
+-- -   IDLE - For a recurring job, the previous scheduled run is complete
+--     and the next scheduled run is pending. This value doesn\'t apply to
+--     one-time jobs.
+--
+-- -   PAUSED - Macie started running the job but additional processing
+--     would exceed the monthly sensitive data discovery quota for your
+--     account or one or more member accounts that the job analyzes data
+--     for.
+--
+-- -   RUNNING - For a one-time job, the job is in progress. For a
+--     recurring job, a scheduled run is in progress.
+--
+-- -   USER_PAUSED - You paused the job. If you paused the job while it had
+--     a status of RUNNING and you don\'t resume it within 30 days of
+--     pausing it, the job or job run will expire and be cancelled,
+--     depending on the job\'s type. To check the expiration date, refer to
+--     the UserPausedDetails.jobExpiresAt property.
+jobSummary_jobStatus :: Lens.Lens' JobSummary (Prelude.Maybe JobStatus)
+jobSummary_jobStatus = Lens.lens (\JobSummary' {jobStatus} -> jobStatus) (\s@JobSummary' {} a -> s {jobStatus = a} :: JobSummary)
+
+-- | The schedule for running the job. Possible values are:
+--
+-- -   ONE_TIME - The job runs only once.
+--
+-- -   SCHEDULED - The job runs on a daily, weekly, or monthly basis.
+jobSummary_jobType :: Lens.Lens' JobSummary (Prelude.Maybe JobType)
+jobSummary_jobType = Lens.lens (\JobSummary' {jobType} -> jobType) (\s@JobSummary' {} a -> s {jobType = a} :: JobSummary)
+
+-- | Specifies whether any account- or bucket-level access errors occurred
+-- when the job ran. For a recurring job, this value indicates the error
+-- status of the job\'s most recent run.
+jobSummary_lastRunErrorStatus :: Lens.Lens' JobSummary (Prelude.Maybe LastRunErrorStatus)
+jobSummary_lastRunErrorStatus = Lens.lens (\JobSummary' {lastRunErrorStatus} -> lastRunErrorStatus) (\s@JobSummary' {} a -> s {lastRunErrorStatus = a} :: JobSummary)
+
+-- | The custom name of the job.
+jobSummary_name :: Lens.Lens' JobSummary (Prelude.Maybe Prelude.Text)
+jobSummary_name = Lens.lens (\JobSummary' {name} -> name) (\s@JobSummary' {} a -> s {name = a} :: JobSummary)
+
+-- | If the current status of the job is USER_PAUSED, specifies when the job
+-- was paused and when the job or job run will expire and be cancelled if
+-- it isn\'t resumed. This value is present only if the value for jobStatus
+-- is USER_PAUSED.
+jobSummary_userPausedDetails :: Lens.Lens' JobSummary (Prelude.Maybe UserPausedDetails)
+jobSummary_userPausedDetails = Lens.lens (\JobSummary' {userPausedDetails} -> userPausedDetails) (\s@JobSummary' {} a -> s {userPausedDetails = a} :: JobSummary)
+
+instance Data.FromJSON JobSummary where
+  parseJSON =
+    Data.withObject
+      "JobSummary"
+      ( \x ->
+          JobSummary'
+            Prelude.<$> (x Data..:? "bucketCriteria")
+            Prelude.<*> ( x
+                            Data..:? "bucketDefinitions"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "jobId")
+            Prelude.<*> (x Data..:? "jobStatus")
+            Prelude.<*> (x Data..:? "jobType")
+            Prelude.<*> (x Data..:? "lastRunErrorStatus")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "userPausedDetails")
+      )
+
+instance Prelude.Hashable JobSummary where
+  hashWithSalt _salt JobSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucketCriteria
+      `Prelude.hashWithSalt` bucketDefinitions
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` jobStatus
+      `Prelude.hashWithSalt` jobType
+      `Prelude.hashWithSalt` lastRunErrorStatus
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` userPausedDetails
+
+instance Prelude.NFData JobSummary where
+  rnf JobSummary' {..} =
+    Prelude.rnf bucketCriteria
+      `Prelude.seq` Prelude.rnf bucketDefinitions
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf jobStatus
+      `Prelude.seq` Prelude.rnf jobType
+      `Prelude.seq` Prelude.rnf lastRunErrorStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf userPausedDetails
diff --git a/gen/Amazonka/MacieV2/Types/JobType.hs b/gen/Amazonka/MacieV2/Types/JobType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/JobType.hs
@@ -0,0 +1,69 @@
+{-# 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.MacieV2.Types.JobType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.JobType
+  ( JobType
+      ( ..,
+        JobType_ONE_TIME,
+        JobType_SCHEDULED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The schedule for running a classification job. Valid values are:
+newtype JobType = JobType' {fromJobType :: 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 JobType_ONE_TIME :: JobType
+pattern JobType_ONE_TIME = JobType' "ONE_TIME"
+
+pattern JobType_SCHEDULED :: JobType
+pattern JobType_SCHEDULED = JobType' "SCHEDULED"
+
+{-# COMPLETE
+  JobType_ONE_TIME,
+  JobType_SCHEDULED,
+  JobType'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/KeyValuePair.hs b/gen/Amazonka/MacieV2/Types/KeyValuePair.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/KeyValuePair.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.KeyValuePair
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.KeyValuePair 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 information about the tags that are associated with an S3
+-- bucket or object. Each tag consists of a required tag key and an
+-- associated tag value.
+--
+-- /See:/ 'newKeyValuePair' smart constructor.
+data KeyValuePair = KeyValuePair'
+  { -- | One part of a key-value pair that comprises a tag. A tag key is a
+    -- general label that acts as a category for more specific tag values.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | One part of a key-value pair that comprises a tag. A tag value acts as a
+    -- descriptor for a tag key. A tag value can be an empty string.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'KeyValuePair' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'keyValuePair_key' - One part of a key-value pair that comprises a tag. A tag key is a
+-- general label that acts as a category for more specific tag values.
+--
+-- 'value', 'keyValuePair_value' - One part of a key-value pair that comprises a tag. A tag value acts as a
+-- descriptor for a tag key. A tag value can be an empty string.
+newKeyValuePair ::
+  KeyValuePair
+newKeyValuePair =
+  KeyValuePair'
+    { key = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | One part of a key-value pair that comprises a tag. A tag key is a
+-- general label that acts as a category for more specific tag values.
+keyValuePair_key :: Lens.Lens' KeyValuePair (Prelude.Maybe Prelude.Text)
+keyValuePair_key = Lens.lens (\KeyValuePair' {key} -> key) (\s@KeyValuePair' {} a -> s {key = a} :: KeyValuePair)
+
+-- | One part of a key-value pair that comprises a tag. A tag value acts as a
+-- descriptor for a tag key. A tag value can be an empty string.
+keyValuePair_value :: Lens.Lens' KeyValuePair (Prelude.Maybe Prelude.Text)
+keyValuePair_value = Lens.lens (\KeyValuePair' {value} -> value) (\s@KeyValuePair' {} a -> s {value = a} :: KeyValuePair)
+
+instance Data.FromJSON KeyValuePair where
+  parseJSON =
+    Data.withObject
+      "KeyValuePair"
+      ( \x ->
+          KeyValuePair'
+            Prelude.<$> (x Data..:? "key")
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable KeyValuePair where
+  hashWithSalt _salt KeyValuePair' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData KeyValuePair where
+  rnf KeyValuePair' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/MacieV2/Types/LastRunErrorStatus.hs b/gen/Amazonka/MacieV2/Types/LastRunErrorStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/LastRunErrorStatus.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.MacieV2.Types.LastRunErrorStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.LastRunErrorStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.LastRunErrorStatusCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies whether any account- or bucket-level access errors occurred
+-- when a classification job ran. For information about using logging data
+-- to investigate these errors, see
+-- <https://docs.aws.amazon.com/macie/latest/user/discovery-jobs-monitor-cw-logs.html Monitoring sensitive data discovery jobs>
+-- in the /Amazon Macie User Guide/.
+--
+-- /See:/ 'newLastRunErrorStatus' smart constructor.
+data LastRunErrorStatus = LastRunErrorStatus'
+  { -- | Specifies whether any account- or bucket-level access errors occurred
+    -- when the job ran. For a recurring job, this value indicates the error
+    -- status of the job\'s most recent run. Possible values are:
+    --
+    -- -   ERROR - One or more errors occurred. Amazon Macie didn\'t process
+    --     all the data specified for the job.
+    --
+    -- -   NONE - No errors occurred. Macie processed all the data specified
+    --     for the job.
+    code :: Prelude.Maybe LastRunErrorStatusCode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LastRunErrorStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'lastRunErrorStatus_code' - Specifies whether any account- or bucket-level access errors occurred
+-- when the job ran. For a recurring job, this value indicates the error
+-- status of the job\'s most recent run. Possible values are:
+--
+-- -   ERROR - One or more errors occurred. Amazon Macie didn\'t process
+--     all the data specified for the job.
+--
+-- -   NONE - No errors occurred. Macie processed all the data specified
+--     for the job.
+newLastRunErrorStatus ::
+  LastRunErrorStatus
+newLastRunErrorStatus =
+  LastRunErrorStatus' {code = Prelude.Nothing}
+
+-- | Specifies whether any account- or bucket-level access errors occurred
+-- when the job ran. For a recurring job, this value indicates the error
+-- status of the job\'s most recent run. Possible values are:
+--
+-- -   ERROR - One or more errors occurred. Amazon Macie didn\'t process
+--     all the data specified for the job.
+--
+-- -   NONE - No errors occurred. Macie processed all the data specified
+--     for the job.
+lastRunErrorStatus_code :: Lens.Lens' LastRunErrorStatus (Prelude.Maybe LastRunErrorStatusCode)
+lastRunErrorStatus_code = Lens.lens (\LastRunErrorStatus' {code} -> code) (\s@LastRunErrorStatus' {} a -> s {code = a} :: LastRunErrorStatus)
+
+instance Data.FromJSON LastRunErrorStatus where
+  parseJSON =
+    Data.withObject
+      "LastRunErrorStatus"
+      ( \x ->
+          LastRunErrorStatus' Prelude.<$> (x Data..:? "code")
+      )
+
+instance Prelude.Hashable LastRunErrorStatus where
+  hashWithSalt _salt LastRunErrorStatus' {..} =
+    _salt `Prelude.hashWithSalt` code
+
+instance Prelude.NFData LastRunErrorStatus where
+  rnf LastRunErrorStatus' {..} = Prelude.rnf code
diff --git a/gen/Amazonka/MacieV2/Types/LastRunErrorStatusCode.hs b/gen/Amazonka/MacieV2/Types/LastRunErrorStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/LastRunErrorStatusCode.hs
@@ -0,0 +1,74 @@
+{-# 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.MacieV2.Types.LastRunErrorStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.LastRunErrorStatusCode
+  ( LastRunErrorStatusCode
+      ( ..,
+        LastRunErrorStatusCode_ERROR,
+        LastRunErrorStatusCode_NONE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies whether any account- or bucket-level access errors occurred
+-- during the run of a one-time classification job or the most recent run
+-- of a recurring classification job. Possible values are:
+newtype LastRunErrorStatusCode = LastRunErrorStatusCode'
+  { fromLastRunErrorStatusCode ::
+      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 LastRunErrorStatusCode_ERROR :: LastRunErrorStatusCode
+pattern LastRunErrorStatusCode_ERROR = LastRunErrorStatusCode' "ERROR"
+
+pattern LastRunErrorStatusCode_NONE :: LastRunErrorStatusCode
+pattern LastRunErrorStatusCode_NONE = LastRunErrorStatusCode' "NONE"
+
+{-# COMPLETE
+  LastRunErrorStatusCode_ERROR,
+  LastRunErrorStatusCode_NONE,
+  LastRunErrorStatusCode'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/ListJobsFilterCriteria.hs b/gen/Amazonka/MacieV2/Types/ListJobsFilterCriteria.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ListJobsFilterCriteria.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.ListJobsFilterCriteria
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ListJobsFilterCriteria where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.ListJobsFilterTerm
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies criteria for filtering the results of a request for
+-- information about classification jobs.
+--
+-- /See:/ 'newListJobsFilterCriteria' smart constructor.
+data ListJobsFilterCriteria = ListJobsFilterCriteria'
+  { -- | An array of objects, one for each condition that determines which jobs
+    -- to exclude from the results.
+    excludes :: Prelude.Maybe [ListJobsFilterTerm],
+    -- | An array of objects, one for each condition that determines which jobs
+    -- to include in the results.
+    includes :: Prelude.Maybe [ListJobsFilterTerm]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListJobsFilterCriteria' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'excludes', 'listJobsFilterCriteria_excludes' - An array of objects, one for each condition that determines which jobs
+-- to exclude from the results.
+--
+-- 'includes', 'listJobsFilterCriteria_includes' - An array of objects, one for each condition that determines which jobs
+-- to include in the results.
+newListJobsFilterCriteria ::
+  ListJobsFilterCriteria
+newListJobsFilterCriteria =
+  ListJobsFilterCriteria'
+    { excludes = Prelude.Nothing,
+      includes = Prelude.Nothing
+    }
+
+-- | An array of objects, one for each condition that determines which jobs
+-- to exclude from the results.
+listJobsFilterCriteria_excludes :: Lens.Lens' ListJobsFilterCriteria (Prelude.Maybe [ListJobsFilterTerm])
+listJobsFilterCriteria_excludes = Lens.lens (\ListJobsFilterCriteria' {excludes} -> excludes) (\s@ListJobsFilterCriteria' {} a -> s {excludes = a} :: ListJobsFilterCriteria) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of objects, one for each condition that determines which jobs
+-- to include in the results.
+listJobsFilterCriteria_includes :: Lens.Lens' ListJobsFilterCriteria (Prelude.Maybe [ListJobsFilterTerm])
+listJobsFilterCriteria_includes = Lens.lens (\ListJobsFilterCriteria' {includes} -> includes) (\s@ListJobsFilterCriteria' {} a -> s {includes = a} :: ListJobsFilterCriteria) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable ListJobsFilterCriteria where
+  hashWithSalt _salt ListJobsFilterCriteria' {..} =
+    _salt
+      `Prelude.hashWithSalt` excludes
+      `Prelude.hashWithSalt` includes
+
+instance Prelude.NFData ListJobsFilterCriteria where
+  rnf ListJobsFilterCriteria' {..} =
+    Prelude.rnf excludes
+      `Prelude.seq` Prelude.rnf includes
+
+instance Data.ToJSON ListJobsFilterCriteria where
+  toJSON ListJobsFilterCriteria' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("excludes" Data..=) Prelude.<$> excludes,
+            ("includes" Data..=) Prelude.<$> includes
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/ListJobsFilterKey.hs b/gen/Amazonka/MacieV2/Types/ListJobsFilterKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ListJobsFilterKey.hs
@@ -0,0 +1,82 @@
+{-# 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.MacieV2.Types.ListJobsFilterKey
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ListJobsFilterKey
+  ( ListJobsFilterKey
+      ( ..,
+        ListJobsFilterKey_CreatedAt,
+        ListJobsFilterKey_JobStatus,
+        ListJobsFilterKey_JobType,
+        ListJobsFilterKey_Name
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The property to use to filter the results. Valid values are:
+newtype ListJobsFilterKey = ListJobsFilterKey'
+  { fromListJobsFilterKey ::
+      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 ListJobsFilterKey_CreatedAt :: ListJobsFilterKey
+pattern ListJobsFilterKey_CreatedAt = ListJobsFilterKey' "createdAt"
+
+pattern ListJobsFilterKey_JobStatus :: ListJobsFilterKey
+pattern ListJobsFilterKey_JobStatus = ListJobsFilterKey' "jobStatus"
+
+pattern ListJobsFilterKey_JobType :: ListJobsFilterKey
+pattern ListJobsFilterKey_JobType = ListJobsFilterKey' "jobType"
+
+pattern ListJobsFilterKey_Name :: ListJobsFilterKey
+pattern ListJobsFilterKey_Name = ListJobsFilterKey' "name"
+
+{-# COMPLETE
+  ListJobsFilterKey_CreatedAt,
+  ListJobsFilterKey_JobStatus,
+  ListJobsFilterKey_JobType,
+  ListJobsFilterKey_Name,
+  ListJobsFilterKey'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/ListJobsFilterTerm.hs b/gen/Amazonka/MacieV2/Types/ListJobsFilterTerm.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ListJobsFilterTerm.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.MacieV2.Types.ListJobsFilterTerm
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ListJobsFilterTerm where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.JobComparator
+import Amazonka.MacieV2.Types.ListJobsFilterKey
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a condition that filters the results of a request for
+-- information about classification jobs. Each condition consists of a
+-- property, an operator, and one or more values.
+--
+-- /See:/ 'newListJobsFilterTerm' smart constructor.
+data ListJobsFilterTerm = ListJobsFilterTerm'
+  { -- | The operator to use to filter the results.
+    comparator :: Prelude.Maybe JobComparator,
+    -- | The property to use to filter the results.
+    key :: Prelude.Maybe ListJobsFilterKey,
+    -- | An array that lists one or more values to use to filter the results.
+    values :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListJobsFilterTerm' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comparator', 'listJobsFilterTerm_comparator' - The operator to use to filter the results.
+--
+-- 'key', 'listJobsFilterTerm_key' - The property to use to filter the results.
+--
+-- 'values', 'listJobsFilterTerm_values' - An array that lists one or more values to use to filter the results.
+newListJobsFilterTerm ::
+  ListJobsFilterTerm
+newListJobsFilterTerm =
+  ListJobsFilterTerm'
+    { comparator = Prelude.Nothing,
+      key = Prelude.Nothing,
+      values = Prelude.Nothing
+    }
+
+-- | The operator to use to filter the results.
+listJobsFilterTerm_comparator :: Lens.Lens' ListJobsFilterTerm (Prelude.Maybe JobComparator)
+listJobsFilterTerm_comparator = Lens.lens (\ListJobsFilterTerm' {comparator} -> comparator) (\s@ListJobsFilterTerm' {} a -> s {comparator = a} :: ListJobsFilterTerm)
+
+-- | The property to use to filter the results.
+listJobsFilterTerm_key :: Lens.Lens' ListJobsFilterTerm (Prelude.Maybe ListJobsFilterKey)
+listJobsFilterTerm_key = Lens.lens (\ListJobsFilterTerm' {key} -> key) (\s@ListJobsFilterTerm' {} a -> s {key = a} :: ListJobsFilterTerm)
+
+-- | An array that lists one or more values to use to filter the results.
+listJobsFilterTerm_values :: Lens.Lens' ListJobsFilterTerm (Prelude.Maybe [Prelude.Text])
+listJobsFilterTerm_values = Lens.lens (\ListJobsFilterTerm' {values} -> values) (\s@ListJobsFilterTerm' {} a -> s {values = a} :: ListJobsFilterTerm) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable ListJobsFilterTerm where
+  hashWithSalt _salt ListJobsFilterTerm' {..} =
+    _salt
+      `Prelude.hashWithSalt` comparator
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData ListJobsFilterTerm where
+  rnf ListJobsFilterTerm' {..} =
+    Prelude.rnf comparator
+      `Prelude.seq` Prelude.rnf key
+      `Prelude.seq` Prelude.rnf values
+
+instance Data.ToJSON ListJobsFilterTerm where
+  toJSON ListJobsFilterTerm' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("comparator" Data..=) Prelude.<$> comparator,
+            ("key" Data..=) Prelude.<$> key,
+            ("values" Data..=) Prelude.<$> values
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/ListJobsSortAttributeName.hs b/gen/Amazonka/MacieV2/Types/ListJobsSortAttributeName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ListJobsSortAttributeName.hs
@@ -0,0 +1,82 @@
+{-# 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.MacieV2.Types.ListJobsSortAttributeName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ListJobsSortAttributeName
+  ( ListJobsSortAttributeName
+      ( ..,
+        ListJobsSortAttributeName_CreatedAt,
+        ListJobsSortAttributeName_JobStatus,
+        ListJobsSortAttributeName_JobType,
+        ListJobsSortAttributeName_Name
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The property to sort the results by. Valid values are:
+newtype ListJobsSortAttributeName = ListJobsSortAttributeName'
+  { fromListJobsSortAttributeName ::
+      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 ListJobsSortAttributeName_CreatedAt :: ListJobsSortAttributeName
+pattern ListJobsSortAttributeName_CreatedAt = ListJobsSortAttributeName' "createdAt"
+
+pattern ListJobsSortAttributeName_JobStatus :: ListJobsSortAttributeName
+pattern ListJobsSortAttributeName_JobStatus = ListJobsSortAttributeName' "jobStatus"
+
+pattern ListJobsSortAttributeName_JobType :: ListJobsSortAttributeName
+pattern ListJobsSortAttributeName_JobType = ListJobsSortAttributeName' "jobType"
+
+pattern ListJobsSortAttributeName_Name :: ListJobsSortAttributeName
+pattern ListJobsSortAttributeName_Name = ListJobsSortAttributeName' "name"
+
+{-# COMPLETE
+  ListJobsSortAttributeName_CreatedAt,
+  ListJobsSortAttributeName_JobStatus,
+  ListJobsSortAttributeName_JobType,
+  ListJobsSortAttributeName_Name,
+  ListJobsSortAttributeName'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/ListJobsSortCriteria.hs b/gen/Amazonka/MacieV2/Types/ListJobsSortCriteria.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ListJobsSortCriteria.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.MacieV2.Types.ListJobsSortCriteria
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ListJobsSortCriteria where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.ListJobsSortAttributeName
+import Amazonka.MacieV2.Types.OrderBy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies criteria for sorting the results of a request for information
+-- about classification jobs.
+--
+-- /See:/ 'newListJobsSortCriteria' smart constructor.
+data ListJobsSortCriteria = ListJobsSortCriteria'
+  { -- | The property to sort the results by.
+    attributeName :: Prelude.Maybe ListJobsSortAttributeName,
+    -- | The sort order to apply to the results, based on the value for the
+    -- property specified by the attributeName property. Valid values are: ASC,
+    -- sort the results in ascending order; and, DESC, sort the results in
+    -- descending order.
+    orderBy :: Prelude.Maybe OrderBy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListJobsSortCriteria' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributeName', 'listJobsSortCriteria_attributeName' - The property to sort the results by.
+--
+-- 'orderBy', 'listJobsSortCriteria_orderBy' - The sort order to apply to the results, based on the value for the
+-- property specified by the attributeName property. Valid values are: ASC,
+-- sort the results in ascending order; and, DESC, sort the results in
+-- descending order.
+newListJobsSortCriteria ::
+  ListJobsSortCriteria
+newListJobsSortCriteria =
+  ListJobsSortCriteria'
+    { attributeName =
+        Prelude.Nothing,
+      orderBy = Prelude.Nothing
+    }
+
+-- | The property to sort the results by.
+listJobsSortCriteria_attributeName :: Lens.Lens' ListJobsSortCriteria (Prelude.Maybe ListJobsSortAttributeName)
+listJobsSortCriteria_attributeName = Lens.lens (\ListJobsSortCriteria' {attributeName} -> attributeName) (\s@ListJobsSortCriteria' {} a -> s {attributeName = a} :: ListJobsSortCriteria)
+
+-- | The sort order to apply to the results, based on the value for the
+-- property specified by the attributeName property. Valid values are: ASC,
+-- sort the results in ascending order; and, DESC, sort the results in
+-- descending order.
+listJobsSortCriteria_orderBy :: Lens.Lens' ListJobsSortCriteria (Prelude.Maybe OrderBy)
+listJobsSortCriteria_orderBy = Lens.lens (\ListJobsSortCriteria' {orderBy} -> orderBy) (\s@ListJobsSortCriteria' {} a -> s {orderBy = a} :: ListJobsSortCriteria)
+
+instance Prelude.Hashable ListJobsSortCriteria where
+  hashWithSalt _salt ListJobsSortCriteria' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributeName
+      `Prelude.hashWithSalt` orderBy
+
+instance Prelude.NFData ListJobsSortCriteria where
+  rnf ListJobsSortCriteria' {..} =
+    Prelude.rnf attributeName
+      `Prelude.seq` Prelude.rnf orderBy
+
+instance Data.ToJSON ListJobsSortCriteria where
+  toJSON ListJobsSortCriteria' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("attributeName" Data..=) Prelude.<$> attributeName,
+            ("orderBy" Data..=) Prelude.<$> orderBy
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/MacieStatus.hs b/gen/Amazonka/MacieV2/Types/MacieStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/MacieStatus.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.MacieStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.MacieStatus
+  ( MacieStatus
+      ( ..,
+        MacieStatus_ENABLED,
+        MacieStatus_PAUSED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status of an Amazon Macie account. Valid values are:
+newtype MacieStatus = MacieStatus'
+  { fromMacieStatus ::
+      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 MacieStatus_ENABLED :: MacieStatus
+pattern MacieStatus_ENABLED = MacieStatus' "ENABLED"
+
+pattern MacieStatus_PAUSED :: MacieStatus
+pattern MacieStatus_PAUSED = MacieStatus' "PAUSED"
+
+{-# COMPLETE
+  MacieStatus_ENABLED,
+  MacieStatus_PAUSED,
+  MacieStatus'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/ManagedDataIdentifierSelector.hs b/gen/Amazonka/MacieV2/Types/ManagedDataIdentifierSelector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ManagedDataIdentifierSelector.hs
@@ -0,0 +1,83 @@
+{-# 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.MacieV2.Types.ManagedDataIdentifierSelector
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ManagedDataIdentifierSelector
+  ( ManagedDataIdentifierSelector
+      ( ..,
+        ManagedDataIdentifierSelector_ALL,
+        ManagedDataIdentifierSelector_EXCLUDE,
+        ManagedDataIdentifierSelector_INCLUDE,
+        ManagedDataIdentifierSelector_NONE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The selection type that determines which managed data identifiers a
+-- classification job uses to analyze data. Valid values are:
+newtype ManagedDataIdentifierSelector = ManagedDataIdentifierSelector'
+  { fromManagedDataIdentifierSelector ::
+      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 ManagedDataIdentifierSelector_ALL :: ManagedDataIdentifierSelector
+pattern ManagedDataIdentifierSelector_ALL = ManagedDataIdentifierSelector' "ALL"
+
+pattern ManagedDataIdentifierSelector_EXCLUDE :: ManagedDataIdentifierSelector
+pattern ManagedDataIdentifierSelector_EXCLUDE = ManagedDataIdentifierSelector' "EXCLUDE"
+
+pattern ManagedDataIdentifierSelector_INCLUDE :: ManagedDataIdentifierSelector
+pattern ManagedDataIdentifierSelector_INCLUDE = ManagedDataIdentifierSelector' "INCLUDE"
+
+pattern ManagedDataIdentifierSelector_NONE :: ManagedDataIdentifierSelector
+pattern ManagedDataIdentifierSelector_NONE = ManagedDataIdentifierSelector' "NONE"
+
+{-# COMPLETE
+  ManagedDataIdentifierSelector_ALL,
+  ManagedDataIdentifierSelector_EXCLUDE,
+  ManagedDataIdentifierSelector_INCLUDE,
+  ManagedDataIdentifierSelector_NONE,
+  ManagedDataIdentifierSelector'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/ManagedDataIdentifierSummary.hs b/gen/Amazonka/MacieV2/Types/ManagedDataIdentifierSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ManagedDataIdentifierSummary.hs
@@ -0,0 +1,118 @@
+{-# 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.MacieV2.Types.ManagedDataIdentifierSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ManagedDataIdentifierSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.SensitiveDataItemCategory
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about a managed data identifier. For additional
+-- information, see
+-- <https://docs.aws.amazon.com/macie/latest/user/managed-data-identifiers.html Using managed data identifiers>
+-- in the /Amazon Macie User Guide/.
+--
+-- /See:/ 'newManagedDataIdentifierSummary' smart constructor.
+data ManagedDataIdentifierSummary = ManagedDataIdentifierSummary'
+  { -- | The category of sensitive data that the managed data identifier detects:
+    -- CREDENTIALS, for credentials data such as private keys or Amazon Web
+    -- Services secret access keys; FINANCIAL_INFORMATION, for financial data
+    -- such as credit card numbers; or, PERSONAL_INFORMATION, for personal
+    -- health information, such as health insurance identification numbers, or
+    -- personally identifiable information, such as passport numbers.
+    category :: Prelude.Maybe SensitiveDataItemCategory,
+    -- | The unique identifier for the managed data identifier. This is a string
+    -- that describes the type of sensitive data that the managed data
+    -- identifier detects. For example: OPENSSH_PRIVATE_KEY for OpenSSH private
+    -- keys, CREDIT_CARD_NUMBER for credit card numbers, or USA_PASSPORT_NUMBER
+    -- for US passport numbers.
+    id :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ManagedDataIdentifierSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'category', 'managedDataIdentifierSummary_category' - The category of sensitive data that the managed data identifier detects:
+-- CREDENTIALS, for credentials data such as private keys or Amazon Web
+-- Services secret access keys; FINANCIAL_INFORMATION, for financial data
+-- such as credit card numbers; or, PERSONAL_INFORMATION, for personal
+-- health information, such as health insurance identification numbers, or
+-- personally identifiable information, such as passport numbers.
+--
+-- 'id', 'managedDataIdentifierSummary_id' - The unique identifier for the managed data identifier. This is a string
+-- that describes the type of sensitive data that the managed data
+-- identifier detects. For example: OPENSSH_PRIVATE_KEY for OpenSSH private
+-- keys, CREDIT_CARD_NUMBER for credit card numbers, or USA_PASSPORT_NUMBER
+-- for US passport numbers.
+newManagedDataIdentifierSummary ::
+  ManagedDataIdentifierSummary
+newManagedDataIdentifierSummary =
+  ManagedDataIdentifierSummary'
+    { category =
+        Prelude.Nothing,
+      id = Prelude.Nothing
+    }
+
+-- | The category of sensitive data that the managed data identifier detects:
+-- CREDENTIALS, for credentials data such as private keys or Amazon Web
+-- Services secret access keys; FINANCIAL_INFORMATION, for financial data
+-- such as credit card numbers; or, PERSONAL_INFORMATION, for personal
+-- health information, such as health insurance identification numbers, or
+-- personally identifiable information, such as passport numbers.
+managedDataIdentifierSummary_category :: Lens.Lens' ManagedDataIdentifierSummary (Prelude.Maybe SensitiveDataItemCategory)
+managedDataIdentifierSummary_category = Lens.lens (\ManagedDataIdentifierSummary' {category} -> category) (\s@ManagedDataIdentifierSummary' {} a -> s {category = a} :: ManagedDataIdentifierSummary)
+
+-- | The unique identifier for the managed data identifier. This is a string
+-- that describes the type of sensitive data that the managed data
+-- identifier detects. For example: OPENSSH_PRIVATE_KEY for OpenSSH private
+-- keys, CREDIT_CARD_NUMBER for credit card numbers, or USA_PASSPORT_NUMBER
+-- for US passport numbers.
+managedDataIdentifierSummary_id :: Lens.Lens' ManagedDataIdentifierSummary (Prelude.Maybe Prelude.Text)
+managedDataIdentifierSummary_id = Lens.lens (\ManagedDataIdentifierSummary' {id} -> id) (\s@ManagedDataIdentifierSummary' {} a -> s {id = a} :: ManagedDataIdentifierSummary)
+
+instance Data.FromJSON ManagedDataIdentifierSummary where
+  parseJSON =
+    Data.withObject
+      "ManagedDataIdentifierSummary"
+      ( \x ->
+          ManagedDataIdentifierSummary'
+            Prelude.<$> (x Data..:? "category")
+            Prelude.<*> (x Data..:? "id")
+      )
+
+instance
+  Prelude.Hashable
+    ManagedDataIdentifierSummary
+  where
+  hashWithSalt _salt ManagedDataIdentifierSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` category
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData ManagedDataIdentifierSummary where
+  rnf ManagedDataIdentifierSummary' {..} =
+    Prelude.rnf category `Prelude.seq` Prelude.rnf id
diff --git a/gen/Amazonka/MacieV2/Types/MatchingBucket.hs b/gen/Amazonka/MacieV2/Types/MatchingBucket.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/MatchingBucket.hs
@@ -0,0 +1,382 @@
+{-# 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.MacieV2.Types.MatchingBucket
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.MatchingBucket where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.BucketMetadataErrorCode
+import Amazonka.MacieV2.Types.JobDetails
+import Amazonka.MacieV2.Types.ObjectCountByEncryptionType
+import Amazonka.MacieV2.Types.ObjectLevelStatistics
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides statistical data and other information about an S3 bucket that
+-- Amazon Macie monitors and analyzes for your account. If an error occurs
+-- when Macie attempts to retrieve and process information about the bucket
+-- or the bucket\'s objects, the value for most of these properties is
+-- null. Key exceptions are accountId and bucketName. To identify the cause
+-- of the error, refer to the errorCode and errorMessage values.
+--
+-- /See:/ 'newMatchingBucket' smart constructor.
+data MatchingBucket = MatchingBucket'
+  { -- | The unique identifier for the Amazon Web Services account that owns the
+    -- bucket.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the bucket.
+    bucketName :: Prelude.Maybe Prelude.Text,
+    -- | The total number of objects that Amazon Macie can analyze in the bucket.
+    -- These objects use a supported storage class and have a file name
+    -- extension for a supported file or storage format.
+    classifiableObjectCount :: Prelude.Maybe Prelude.Integer,
+    -- | The total storage size, in bytes, of the objects that Amazon Macie can
+    -- analyze in the bucket. These objects use a supported storage class and
+    -- have a file name extension for a supported file or storage format.
+    --
+    -- If versioning is enabled for the bucket, Macie calculates this value
+    -- based on the size of the latest version of each applicable object in the
+    -- bucket. This value doesn\'t reflect the storage size of all versions of
+    -- each applicable object in the bucket.
+    classifiableSizeInBytes :: Prelude.Maybe Prelude.Integer,
+    -- | Specifies the error code for an error that prevented Amazon Macie from
+    -- retrieving and processing information about the bucket and the bucket\'s
+    -- objects. If this value is ACCESS_DENIED, Macie doesn\'t have permission
+    -- to retrieve the information. For example, the bucket has a restrictive
+    -- bucket policy and Amazon S3 denied the request. If this value is null,
+    -- Macie was able to retrieve and process the information.
+    errorCode :: Prelude.Maybe BucketMetadataErrorCode,
+    -- | A brief description of the error (errorCode) that prevented Amazon Macie
+    -- from retrieving and processing information about the bucket and the
+    -- bucket\'s objects. This value is null if Macie was able to retrieve and
+    -- process the information.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether any one-time or recurring classification jobs are
+    -- configured to analyze objects in the bucket, and, if so, the details of
+    -- the job that ran most recently.
+    jobDetails :: Prelude.Maybe JobDetails,
+    -- | The date and time, in UTC and extended ISO 8601 format, when Amazon
+    -- Macie most recently performed automated sensitive data discovery for the
+    -- bucket. This value is null if automated sensitive data discovery is
+    -- currently disabled for your account.
+    lastAutomatedDiscoveryTime :: Prelude.Maybe Data.ISO8601,
+    -- | The total number of objects in the bucket.
+    objectCount :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of objects in the bucket, grouped by server-side
+    -- encryption type. This includes a grouping that reports the total number
+    -- of objects that aren\'t encrypted or use client-side encryption.
+    objectCountByEncryptionType :: Prelude.Maybe ObjectCountByEncryptionType,
+    -- | The current sensitivity score for the bucket, ranging from -1 (no
+    -- analysis due to an error) to 100 (sensitive). This value is null if
+    -- automated sensitive data discovery is currently disabled for your
+    -- account.
+    sensitivityScore :: Prelude.Maybe Prelude.Int,
+    -- | The total storage size, in bytes, of the bucket.
+    --
+    -- If versioning is enabled for the bucket, Amazon Macie calculates this
+    -- value based on the size of the latest version of each object in the
+    -- bucket. This value doesn\'t reflect the storage size of all versions of
+    -- each object in the bucket.
+    sizeInBytes :: Prelude.Maybe Prelude.Integer,
+    -- | The total storage size, in bytes, of the objects that are compressed
+    -- (.gz, .gzip, .zip) files in the bucket.
+    --
+    -- If versioning is enabled for the bucket, Amazon Macie calculates this
+    -- value based on the size of the latest version of each applicable object
+    -- in the bucket. This value doesn\'t reflect the storage size of all
+    -- versions of each applicable object in the bucket.
+    sizeInBytesCompressed :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of objects that Amazon Macie can\'t analyze in the
+    -- bucket. These objects don\'t use a supported storage class or don\'t
+    -- have a file name extension for a supported file or storage format.
+    unclassifiableObjectCount :: Prelude.Maybe ObjectLevelStatistics,
+    -- | The total storage size, in bytes, of the objects that Amazon Macie
+    -- can\'t analyze in the bucket. These objects don\'t use a supported
+    -- storage class or don\'t have a file name extension for a supported file
+    -- or storage format.
+    unclassifiableObjectSizeInBytes :: Prelude.Maybe ObjectLevelStatistics
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MatchingBucket' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'matchingBucket_accountId' - The unique identifier for the Amazon Web Services account that owns the
+-- bucket.
+--
+-- 'bucketName', 'matchingBucket_bucketName' - The name of the bucket.
+--
+-- 'classifiableObjectCount', 'matchingBucket_classifiableObjectCount' - The total number of objects that Amazon Macie can analyze in the bucket.
+-- These objects use a supported storage class and have a file name
+-- extension for a supported file or storage format.
+--
+-- 'classifiableSizeInBytes', 'matchingBucket_classifiableSizeInBytes' - The total storage size, in bytes, of the objects that Amazon Macie can
+-- analyze in the bucket. These objects use a supported storage class and
+-- have a file name extension for a supported file or storage format.
+--
+-- If versioning is enabled for the bucket, Macie calculates this value
+-- based on the size of the latest version of each applicable object in the
+-- bucket. This value doesn\'t reflect the storage size of all versions of
+-- each applicable object in the bucket.
+--
+-- 'errorCode', 'matchingBucket_errorCode' - Specifies the error code for an error that prevented Amazon Macie from
+-- retrieving and processing information about the bucket and the bucket\'s
+-- objects. If this value is ACCESS_DENIED, Macie doesn\'t have permission
+-- to retrieve the information. For example, the bucket has a restrictive
+-- bucket policy and Amazon S3 denied the request. If this value is null,
+-- Macie was able to retrieve and process the information.
+--
+-- 'errorMessage', 'matchingBucket_errorMessage' - A brief description of the error (errorCode) that prevented Amazon Macie
+-- from retrieving and processing information about the bucket and the
+-- bucket\'s objects. This value is null if Macie was able to retrieve and
+-- process the information.
+--
+-- 'jobDetails', 'matchingBucket_jobDetails' - Specifies whether any one-time or recurring classification jobs are
+-- configured to analyze objects in the bucket, and, if so, the details of
+-- the job that ran most recently.
+--
+-- 'lastAutomatedDiscoveryTime', 'matchingBucket_lastAutomatedDiscoveryTime' - The date and time, in UTC and extended ISO 8601 format, when Amazon
+-- Macie most recently performed automated sensitive data discovery for the
+-- bucket. This value is null if automated sensitive data discovery is
+-- currently disabled for your account.
+--
+-- 'objectCount', 'matchingBucket_objectCount' - The total number of objects in the bucket.
+--
+-- 'objectCountByEncryptionType', 'matchingBucket_objectCountByEncryptionType' - The total number of objects in the bucket, grouped by server-side
+-- encryption type. This includes a grouping that reports the total number
+-- of objects that aren\'t encrypted or use client-side encryption.
+--
+-- 'sensitivityScore', 'matchingBucket_sensitivityScore' - The current sensitivity score for the bucket, ranging from -1 (no
+-- analysis due to an error) to 100 (sensitive). This value is null if
+-- automated sensitive data discovery is currently disabled for your
+-- account.
+--
+-- 'sizeInBytes', 'matchingBucket_sizeInBytes' - The total storage size, in bytes, of the bucket.
+--
+-- If versioning is enabled for the bucket, Amazon Macie calculates this
+-- value based on the size of the latest version of each object in the
+-- bucket. This value doesn\'t reflect the storage size of all versions of
+-- each object in the bucket.
+--
+-- 'sizeInBytesCompressed', 'matchingBucket_sizeInBytesCompressed' - The total storage size, in bytes, of the objects that are compressed
+-- (.gz, .gzip, .zip) files in the bucket.
+--
+-- If versioning is enabled for the bucket, Amazon Macie calculates this
+-- value based on the size of the latest version of each applicable object
+-- in the bucket. This value doesn\'t reflect the storage size of all
+-- versions of each applicable object in the bucket.
+--
+-- 'unclassifiableObjectCount', 'matchingBucket_unclassifiableObjectCount' - The total number of objects that Amazon Macie can\'t analyze in the
+-- bucket. These objects don\'t use a supported storage class or don\'t
+-- have a file name extension for a supported file or storage format.
+--
+-- 'unclassifiableObjectSizeInBytes', 'matchingBucket_unclassifiableObjectSizeInBytes' - The total storage size, in bytes, of the objects that Amazon Macie
+-- can\'t analyze in the bucket. These objects don\'t use a supported
+-- storage class or don\'t have a file name extension for a supported file
+-- or storage format.
+newMatchingBucket ::
+  MatchingBucket
+newMatchingBucket =
+  MatchingBucket'
+    { accountId = Prelude.Nothing,
+      bucketName = Prelude.Nothing,
+      classifiableObjectCount = Prelude.Nothing,
+      classifiableSizeInBytes = Prelude.Nothing,
+      errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      jobDetails = Prelude.Nothing,
+      lastAutomatedDiscoveryTime = Prelude.Nothing,
+      objectCount = Prelude.Nothing,
+      objectCountByEncryptionType = Prelude.Nothing,
+      sensitivityScore = Prelude.Nothing,
+      sizeInBytes = Prelude.Nothing,
+      sizeInBytesCompressed = Prelude.Nothing,
+      unclassifiableObjectCount = Prelude.Nothing,
+      unclassifiableObjectSizeInBytes = Prelude.Nothing
+    }
+
+-- | The unique identifier for the Amazon Web Services account that owns the
+-- bucket.
+matchingBucket_accountId :: Lens.Lens' MatchingBucket (Prelude.Maybe Prelude.Text)
+matchingBucket_accountId = Lens.lens (\MatchingBucket' {accountId} -> accountId) (\s@MatchingBucket' {} a -> s {accountId = a} :: MatchingBucket)
+
+-- | The name of the bucket.
+matchingBucket_bucketName :: Lens.Lens' MatchingBucket (Prelude.Maybe Prelude.Text)
+matchingBucket_bucketName = Lens.lens (\MatchingBucket' {bucketName} -> bucketName) (\s@MatchingBucket' {} a -> s {bucketName = a} :: MatchingBucket)
+
+-- | The total number of objects that Amazon Macie can analyze in the bucket.
+-- These objects use a supported storage class and have a file name
+-- extension for a supported file or storage format.
+matchingBucket_classifiableObjectCount :: Lens.Lens' MatchingBucket (Prelude.Maybe Prelude.Integer)
+matchingBucket_classifiableObjectCount = Lens.lens (\MatchingBucket' {classifiableObjectCount} -> classifiableObjectCount) (\s@MatchingBucket' {} a -> s {classifiableObjectCount = a} :: MatchingBucket)
+
+-- | The total storage size, in bytes, of the objects that Amazon Macie can
+-- analyze in the bucket. These objects use a supported storage class and
+-- have a file name extension for a supported file or storage format.
+--
+-- If versioning is enabled for the bucket, Macie calculates this value
+-- based on the size of the latest version of each applicable object in the
+-- bucket. This value doesn\'t reflect the storage size of all versions of
+-- each applicable object in the bucket.
+matchingBucket_classifiableSizeInBytes :: Lens.Lens' MatchingBucket (Prelude.Maybe Prelude.Integer)
+matchingBucket_classifiableSizeInBytes = Lens.lens (\MatchingBucket' {classifiableSizeInBytes} -> classifiableSizeInBytes) (\s@MatchingBucket' {} a -> s {classifiableSizeInBytes = a} :: MatchingBucket)
+
+-- | Specifies the error code for an error that prevented Amazon Macie from
+-- retrieving and processing information about the bucket and the bucket\'s
+-- objects. If this value is ACCESS_DENIED, Macie doesn\'t have permission
+-- to retrieve the information. For example, the bucket has a restrictive
+-- bucket policy and Amazon S3 denied the request. If this value is null,
+-- Macie was able to retrieve and process the information.
+matchingBucket_errorCode :: Lens.Lens' MatchingBucket (Prelude.Maybe BucketMetadataErrorCode)
+matchingBucket_errorCode = Lens.lens (\MatchingBucket' {errorCode} -> errorCode) (\s@MatchingBucket' {} a -> s {errorCode = a} :: MatchingBucket)
+
+-- | A brief description of the error (errorCode) that prevented Amazon Macie
+-- from retrieving and processing information about the bucket and the
+-- bucket\'s objects. This value is null if Macie was able to retrieve and
+-- process the information.
+matchingBucket_errorMessage :: Lens.Lens' MatchingBucket (Prelude.Maybe Prelude.Text)
+matchingBucket_errorMessage = Lens.lens (\MatchingBucket' {errorMessage} -> errorMessage) (\s@MatchingBucket' {} a -> s {errorMessage = a} :: MatchingBucket)
+
+-- | Specifies whether any one-time or recurring classification jobs are
+-- configured to analyze objects in the bucket, and, if so, the details of
+-- the job that ran most recently.
+matchingBucket_jobDetails :: Lens.Lens' MatchingBucket (Prelude.Maybe JobDetails)
+matchingBucket_jobDetails = Lens.lens (\MatchingBucket' {jobDetails} -> jobDetails) (\s@MatchingBucket' {} a -> s {jobDetails = a} :: MatchingBucket)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when Amazon
+-- Macie most recently performed automated sensitive data discovery for the
+-- bucket. This value is null if automated sensitive data discovery is
+-- currently disabled for your account.
+matchingBucket_lastAutomatedDiscoveryTime :: Lens.Lens' MatchingBucket (Prelude.Maybe Prelude.UTCTime)
+matchingBucket_lastAutomatedDiscoveryTime = Lens.lens (\MatchingBucket' {lastAutomatedDiscoveryTime} -> lastAutomatedDiscoveryTime) (\s@MatchingBucket' {} a -> s {lastAutomatedDiscoveryTime = a} :: MatchingBucket) Prelude.. Lens.mapping Data._Time
+
+-- | The total number of objects in the bucket.
+matchingBucket_objectCount :: Lens.Lens' MatchingBucket (Prelude.Maybe Prelude.Integer)
+matchingBucket_objectCount = Lens.lens (\MatchingBucket' {objectCount} -> objectCount) (\s@MatchingBucket' {} a -> s {objectCount = a} :: MatchingBucket)
+
+-- | The total number of objects in the bucket, grouped by server-side
+-- encryption type. This includes a grouping that reports the total number
+-- of objects that aren\'t encrypted or use client-side encryption.
+matchingBucket_objectCountByEncryptionType :: Lens.Lens' MatchingBucket (Prelude.Maybe ObjectCountByEncryptionType)
+matchingBucket_objectCountByEncryptionType = Lens.lens (\MatchingBucket' {objectCountByEncryptionType} -> objectCountByEncryptionType) (\s@MatchingBucket' {} a -> s {objectCountByEncryptionType = a} :: MatchingBucket)
+
+-- | The current sensitivity score for the bucket, ranging from -1 (no
+-- analysis due to an error) to 100 (sensitive). This value is null if
+-- automated sensitive data discovery is currently disabled for your
+-- account.
+matchingBucket_sensitivityScore :: Lens.Lens' MatchingBucket (Prelude.Maybe Prelude.Int)
+matchingBucket_sensitivityScore = Lens.lens (\MatchingBucket' {sensitivityScore} -> sensitivityScore) (\s@MatchingBucket' {} a -> s {sensitivityScore = a} :: MatchingBucket)
+
+-- | The total storage size, in bytes, of the bucket.
+--
+-- If versioning is enabled for the bucket, Amazon Macie calculates this
+-- value based on the size of the latest version of each object in the
+-- bucket. This value doesn\'t reflect the storage size of all versions of
+-- each object in the bucket.
+matchingBucket_sizeInBytes :: Lens.Lens' MatchingBucket (Prelude.Maybe Prelude.Integer)
+matchingBucket_sizeInBytes = Lens.lens (\MatchingBucket' {sizeInBytes} -> sizeInBytes) (\s@MatchingBucket' {} a -> s {sizeInBytes = a} :: MatchingBucket)
+
+-- | The total storage size, in bytes, of the objects that are compressed
+-- (.gz, .gzip, .zip) files in the bucket.
+--
+-- If versioning is enabled for the bucket, Amazon Macie calculates this
+-- value based on the size of the latest version of each applicable object
+-- in the bucket. This value doesn\'t reflect the storage size of all
+-- versions of each applicable object in the bucket.
+matchingBucket_sizeInBytesCompressed :: Lens.Lens' MatchingBucket (Prelude.Maybe Prelude.Integer)
+matchingBucket_sizeInBytesCompressed = Lens.lens (\MatchingBucket' {sizeInBytesCompressed} -> sizeInBytesCompressed) (\s@MatchingBucket' {} a -> s {sizeInBytesCompressed = a} :: MatchingBucket)
+
+-- | The total number of objects that Amazon Macie can\'t analyze in the
+-- bucket. These objects don\'t use a supported storage class or don\'t
+-- have a file name extension for a supported file or storage format.
+matchingBucket_unclassifiableObjectCount :: Lens.Lens' MatchingBucket (Prelude.Maybe ObjectLevelStatistics)
+matchingBucket_unclassifiableObjectCount = Lens.lens (\MatchingBucket' {unclassifiableObjectCount} -> unclassifiableObjectCount) (\s@MatchingBucket' {} a -> s {unclassifiableObjectCount = a} :: MatchingBucket)
+
+-- | The total storage size, in bytes, of the objects that Amazon Macie
+-- can\'t analyze in the bucket. These objects don\'t use a supported
+-- storage class or don\'t have a file name extension for a supported file
+-- or storage format.
+matchingBucket_unclassifiableObjectSizeInBytes :: Lens.Lens' MatchingBucket (Prelude.Maybe ObjectLevelStatistics)
+matchingBucket_unclassifiableObjectSizeInBytes = Lens.lens (\MatchingBucket' {unclassifiableObjectSizeInBytes} -> unclassifiableObjectSizeInBytes) (\s@MatchingBucket' {} a -> s {unclassifiableObjectSizeInBytes = a} :: MatchingBucket)
+
+instance Data.FromJSON MatchingBucket where
+  parseJSON =
+    Data.withObject
+      "MatchingBucket"
+      ( \x ->
+          MatchingBucket'
+            Prelude.<$> (x Data..:? "accountId")
+            Prelude.<*> (x Data..:? "bucketName")
+            Prelude.<*> (x Data..:? "classifiableObjectCount")
+            Prelude.<*> (x Data..:? "classifiableSizeInBytes")
+            Prelude.<*> (x Data..:? "errorCode")
+            Prelude.<*> (x Data..:? "errorMessage")
+            Prelude.<*> (x Data..:? "jobDetails")
+            Prelude.<*> (x Data..:? "lastAutomatedDiscoveryTime")
+            Prelude.<*> (x Data..:? "objectCount")
+            Prelude.<*> (x Data..:? "objectCountByEncryptionType")
+            Prelude.<*> (x Data..:? "sensitivityScore")
+            Prelude.<*> (x Data..:? "sizeInBytes")
+            Prelude.<*> (x Data..:? "sizeInBytesCompressed")
+            Prelude.<*> (x Data..:? "unclassifiableObjectCount")
+            Prelude.<*> (x Data..:? "unclassifiableObjectSizeInBytes")
+      )
+
+instance Prelude.Hashable MatchingBucket where
+  hashWithSalt _salt MatchingBucket' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` bucketName
+      `Prelude.hashWithSalt` classifiableObjectCount
+      `Prelude.hashWithSalt` classifiableSizeInBytes
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` jobDetails
+      `Prelude.hashWithSalt` lastAutomatedDiscoveryTime
+      `Prelude.hashWithSalt` objectCount
+      `Prelude.hashWithSalt` objectCountByEncryptionType
+      `Prelude.hashWithSalt` sensitivityScore
+      `Prelude.hashWithSalt` sizeInBytes
+      `Prelude.hashWithSalt` sizeInBytesCompressed
+      `Prelude.hashWithSalt` unclassifiableObjectCount
+      `Prelude.hashWithSalt` unclassifiableObjectSizeInBytes
+
+instance Prelude.NFData MatchingBucket where
+  rnf MatchingBucket' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf bucketName
+      `Prelude.seq` Prelude.rnf classifiableObjectCount
+      `Prelude.seq` Prelude.rnf classifiableSizeInBytes
+      `Prelude.seq` Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf jobDetails
+      `Prelude.seq` Prelude.rnf lastAutomatedDiscoveryTime
+      `Prelude.seq` Prelude.rnf objectCount
+      `Prelude.seq` Prelude.rnf objectCountByEncryptionType
+      `Prelude.seq` Prelude.rnf sensitivityScore
+      `Prelude.seq` Prelude.rnf sizeInBytes
+      `Prelude.seq` Prelude.rnf sizeInBytesCompressed
+      `Prelude.seq` Prelude.rnf unclassifiableObjectCount
+      `Prelude.seq` Prelude.rnf
+        unclassifiableObjectSizeInBytes
diff --git a/gen/Amazonka/MacieV2/Types/MatchingResource.hs b/gen/Amazonka/MacieV2/Types/MatchingResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/MatchingResource.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.MatchingResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.MatchingResource where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.MatchingBucket
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides statistical data and other information about an Amazon Web
+-- Services resource that Amazon Macie monitors and analyzes for your
+-- account.
+--
+-- /See:/ 'newMatchingResource' smart constructor.
+data MatchingResource = MatchingResource'
+  { -- | The details of an S3 bucket that Amazon Macie monitors and analyzes.
+    matchingBucket :: Prelude.Maybe MatchingBucket
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MatchingResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'matchingBucket', 'matchingResource_matchingBucket' - The details of an S3 bucket that Amazon Macie monitors and analyzes.
+newMatchingResource ::
+  MatchingResource
+newMatchingResource =
+  MatchingResource' {matchingBucket = Prelude.Nothing}
+
+-- | The details of an S3 bucket that Amazon Macie monitors and analyzes.
+matchingResource_matchingBucket :: Lens.Lens' MatchingResource (Prelude.Maybe MatchingBucket)
+matchingResource_matchingBucket = Lens.lens (\MatchingResource' {matchingBucket} -> matchingBucket) (\s@MatchingResource' {} a -> s {matchingBucket = a} :: MatchingResource)
+
+instance Data.FromJSON MatchingResource where
+  parseJSON =
+    Data.withObject
+      "MatchingResource"
+      ( \x ->
+          MatchingResource'
+            Prelude.<$> (x Data..:? "matchingBucket")
+      )
+
+instance Prelude.Hashable MatchingResource where
+  hashWithSalt _salt MatchingResource' {..} =
+    _salt `Prelude.hashWithSalt` matchingBucket
+
+instance Prelude.NFData MatchingResource where
+  rnf MatchingResource' {..} =
+    Prelude.rnf matchingBucket
diff --git a/gen/Amazonka/MacieV2/Types/Member.hs b/gen/Amazonka/MacieV2/Types/Member.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/Member.hs
@@ -0,0 +1,194 @@
+{-# 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.MacieV2.Types.Member
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.Member where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.RelationshipStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about an account that\'s associated with an Amazon
+-- Macie administrator account.
+--
+-- /See:/ 'newMember' smart constructor.
+data Member = Member'
+  { -- | The Amazon Web Services account ID for the account.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services account ID for the administrator account.
+    administratorAccountId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the account.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The email address for the account.
+    email :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in UTC and extended ISO 8601 format, when an Amazon
+    -- Macie membership invitation was last sent to the account. This value is
+    -- null if an invitation hasn\'t been sent to the account.
+    invitedAt :: Prelude.Maybe Data.ISO8601,
+    -- | (Deprecated) The Amazon Web Services account ID for the administrator
+    -- account. This property has been replaced by the administratorAccountId
+    -- property and is retained only for backward compatibility.
+    masterAccountId :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the relationship between the account and the
+    -- administrator account.
+    relationshipStatus :: Prelude.Maybe RelationshipStatus,
+    -- | A map of key-value pairs that specifies which tags (keys and values) are
+    -- associated with the account in Amazon Macie.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The date and time, in UTC and extended ISO 8601 format, of the most
+    -- recent change to the status of the relationship between the account and
+    -- the administrator account.
+    updatedAt :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Member' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'member_accountId' - The Amazon Web Services account ID for the account.
+--
+-- 'administratorAccountId', 'member_administratorAccountId' - The Amazon Web Services account ID for the administrator account.
+--
+-- 'arn', 'member_arn' - The Amazon Resource Name (ARN) of the account.
+--
+-- 'email', 'member_email' - The email address for the account.
+--
+-- 'invitedAt', 'member_invitedAt' - The date and time, in UTC and extended ISO 8601 format, when an Amazon
+-- Macie membership invitation was last sent to the account. This value is
+-- null if an invitation hasn\'t been sent to the account.
+--
+-- 'masterAccountId', 'member_masterAccountId' - (Deprecated) The Amazon Web Services account ID for the administrator
+-- account. This property has been replaced by the administratorAccountId
+-- property and is retained only for backward compatibility.
+--
+-- 'relationshipStatus', 'member_relationshipStatus' - The current status of the relationship between the account and the
+-- administrator account.
+--
+-- 'tags', 'member_tags' - A map of key-value pairs that specifies which tags (keys and values) are
+-- associated with the account in Amazon Macie.
+--
+-- 'updatedAt', 'member_updatedAt' - The date and time, in UTC and extended ISO 8601 format, of the most
+-- recent change to the status of the relationship between the account and
+-- the administrator account.
+newMember ::
+  Member
+newMember =
+  Member'
+    { accountId = Prelude.Nothing,
+      administratorAccountId = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      email = Prelude.Nothing,
+      invitedAt = Prelude.Nothing,
+      masterAccountId = Prelude.Nothing,
+      relationshipStatus = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      updatedAt = Prelude.Nothing
+    }
+
+-- | The Amazon Web Services account ID for the account.
+member_accountId :: Lens.Lens' Member (Prelude.Maybe Prelude.Text)
+member_accountId = Lens.lens (\Member' {accountId} -> accountId) (\s@Member' {} a -> s {accountId = a} :: Member)
+
+-- | The Amazon Web Services account ID for the administrator account.
+member_administratorAccountId :: Lens.Lens' Member (Prelude.Maybe Prelude.Text)
+member_administratorAccountId = Lens.lens (\Member' {administratorAccountId} -> administratorAccountId) (\s@Member' {} a -> s {administratorAccountId = a} :: Member)
+
+-- | The Amazon Resource Name (ARN) of the account.
+member_arn :: Lens.Lens' Member (Prelude.Maybe Prelude.Text)
+member_arn = Lens.lens (\Member' {arn} -> arn) (\s@Member' {} a -> s {arn = a} :: Member)
+
+-- | The email address for the account.
+member_email :: Lens.Lens' Member (Prelude.Maybe Prelude.Text)
+member_email = Lens.lens (\Member' {email} -> email) (\s@Member' {} a -> s {email = a} :: Member)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when an Amazon
+-- Macie membership invitation was last sent to the account. This value is
+-- null if an invitation hasn\'t been sent to the account.
+member_invitedAt :: Lens.Lens' Member (Prelude.Maybe Prelude.UTCTime)
+member_invitedAt = Lens.lens (\Member' {invitedAt} -> invitedAt) (\s@Member' {} a -> s {invitedAt = a} :: Member) Prelude.. Lens.mapping Data._Time
+
+-- | (Deprecated) The Amazon Web Services account ID for the administrator
+-- account. This property has been replaced by the administratorAccountId
+-- property and is retained only for backward compatibility.
+member_masterAccountId :: Lens.Lens' Member (Prelude.Maybe Prelude.Text)
+member_masterAccountId = Lens.lens (\Member' {masterAccountId} -> masterAccountId) (\s@Member' {} a -> s {masterAccountId = a} :: Member)
+
+-- | The current status of the relationship between the account and the
+-- administrator account.
+member_relationshipStatus :: Lens.Lens' Member (Prelude.Maybe RelationshipStatus)
+member_relationshipStatus = Lens.lens (\Member' {relationshipStatus} -> relationshipStatus) (\s@Member' {} a -> s {relationshipStatus = a} :: Member)
+
+-- | A map of key-value pairs that specifies which tags (keys and values) are
+-- associated with the account in Amazon Macie.
+member_tags :: Lens.Lens' Member (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+member_tags = Lens.lens (\Member' {tags} -> tags) (\s@Member' {} a -> s {tags = a} :: Member) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date and time, in UTC and extended ISO 8601 format, of the most
+-- recent change to the status of the relationship between the account and
+-- the administrator account.
+member_updatedAt :: Lens.Lens' Member (Prelude.Maybe Prelude.UTCTime)
+member_updatedAt = Lens.lens (\Member' {updatedAt} -> updatedAt) (\s@Member' {} a -> s {updatedAt = a} :: Member) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON Member where
+  parseJSON =
+    Data.withObject
+      "Member"
+      ( \x ->
+          Member'
+            Prelude.<$> (x Data..:? "accountId")
+            Prelude.<*> (x Data..:? "administratorAccountId")
+            Prelude.<*> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "email")
+            Prelude.<*> (x Data..:? "invitedAt")
+            Prelude.<*> (x Data..:? "masterAccountId")
+            Prelude.<*> (x Data..:? "relationshipStatus")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "updatedAt")
+      )
+
+instance Prelude.Hashable Member where
+  hashWithSalt _salt Member' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` administratorAccountId
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` email
+      `Prelude.hashWithSalt` invitedAt
+      `Prelude.hashWithSalt` masterAccountId
+      `Prelude.hashWithSalt` relationshipStatus
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData Member where
+  rnf Member' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf administratorAccountId
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf email
+      `Prelude.seq` Prelude.rnf invitedAt
+      `Prelude.seq` Prelude.rnf masterAccountId
+      `Prelude.seq` Prelude.rnf relationshipStatus
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/MacieV2/Types/MonthlySchedule.hs b/gen/Amazonka/MacieV2/Types/MonthlySchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/MonthlySchedule.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.MacieV2.Types.MonthlySchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.MonthlySchedule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a monthly recurrence pattern for running a classification job.
+--
+-- /See:/ 'newMonthlySchedule' smart constructor.
+data MonthlySchedule = MonthlySchedule'
+  { -- | The numeric day of the month when Amazon Macie runs the job. This value
+    -- can be an integer from 1 through 31.
+    --
+    -- If this value exceeds the number of days in a certain month, Macie
+    -- doesn\'t run the job that month. Macie runs the job only during months
+    -- that have the specified day. For example, if this value is 31 and a
+    -- month has only 30 days, Macie doesn\'t run the job that month. To run
+    -- the job every month, specify a value that\'s less than 29.
+    dayOfMonth :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MonthlySchedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dayOfMonth', 'monthlySchedule_dayOfMonth' - The numeric day of the month when Amazon Macie runs the job. This value
+-- can be an integer from 1 through 31.
+--
+-- If this value exceeds the number of days in a certain month, Macie
+-- doesn\'t run the job that month. Macie runs the job only during months
+-- that have the specified day. For example, if this value is 31 and a
+-- month has only 30 days, Macie doesn\'t run the job that month. To run
+-- the job every month, specify a value that\'s less than 29.
+newMonthlySchedule ::
+  MonthlySchedule
+newMonthlySchedule =
+  MonthlySchedule' {dayOfMonth = Prelude.Nothing}
+
+-- | The numeric day of the month when Amazon Macie runs the job. This value
+-- can be an integer from 1 through 31.
+--
+-- If this value exceeds the number of days in a certain month, Macie
+-- doesn\'t run the job that month. Macie runs the job only during months
+-- that have the specified day. For example, if this value is 31 and a
+-- month has only 30 days, Macie doesn\'t run the job that month. To run
+-- the job every month, specify a value that\'s less than 29.
+monthlySchedule_dayOfMonth :: Lens.Lens' MonthlySchedule (Prelude.Maybe Prelude.Int)
+monthlySchedule_dayOfMonth = Lens.lens (\MonthlySchedule' {dayOfMonth} -> dayOfMonth) (\s@MonthlySchedule' {} a -> s {dayOfMonth = a} :: MonthlySchedule)
+
+instance Data.FromJSON MonthlySchedule where
+  parseJSON =
+    Data.withObject
+      "MonthlySchedule"
+      ( \x ->
+          MonthlySchedule'
+            Prelude.<$> (x Data..:? "dayOfMonth")
+      )
+
+instance Prelude.Hashable MonthlySchedule where
+  hashWithSalt _salt MonthlySchedule' {..} =
+    _salt `Prelude.hashWithSalt` dayOfMonth
+
+instance Prelude.NFData MonthlySchedule where
+  rnf MonthlySchedule' {..} = Prelude.rnf dayOfMonth
+
+instance Data.ToJSON MonthlySchedule where
+  toJSON MonthlySchedule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("dayOfMonth" Data..=) Prelude.<$> dayOfMonth]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/ObjectCountByEncryptionType.hs b/gen/Amazonka/MacieV2/Types/ObjectCountByEncryptionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ObjectCountByEncryptionType.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.MacieV2.Types.ObjectCountByEncryptionType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ObjectCountByEncryptionType 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 information about the number of objects that are in an S3
+-- bucket and use certain types of server-side encryption, use client-side
+-- encryption, or aren\'t encrypted.
+--
+-- /See:/ 'newObjectCountByEncryptionType' smart constructor.
+data ObjectCountByEncryptionType = ObjectCountByEncryptionType'
+  { -- | The total number of objects that are encrypted with a customer-provided
+    -- key. The objects use customer-provided server-side encryption (SSE-C).
+    customerManaged :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of objects that are encrypted with an KMS key, either
+    -- an Amazon Web Services managed key or a customer managed key. The
+    -- objects use KMS encryption (SSE-KMS).
+    kmsManaged :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of objects that are encrypted with an Amazon S3 managed
+    -- key. The objects use Amazon S3 managed encryption (SSE-S3).
+    s3Managed :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of objects that aren\'t encrypted or use client-side
+    -- encryption.
+    unencrypted :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of objects that Amazon Macie doesn\'t have current
+    -- encryption metadata for. Macie can\'t provide current data about the
+    -- encryption settings for these objects.
+    unknown :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ObjectCountByEncryptionType' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'customerManaged', 'objectCountByEncryptionType_customerManaged' - The total number of objects that are encrypted with a customer-provided
+-- key. The objects use customer-provided server-side encryption (SSE-C).
+--
+-- 'kmsManaged', 'objectCountByEncryptionType_kmsManaged' - The total number of objects that are encrypted with an KMS key, either
+-- an Amazon Web Services managed key or a customer managed key. The
+-- objects use KMS encryption (SSE-KMS).
+--
+-- 's3Managed', 'objectCountByEncryptionType_s3Managed' - The total number of objects that are encrypted with an Amazon S3 managed
+-- key. The objects use Amazon S3 managed encryption (SSE-S3).
+--
+-- 'unencrypted', 'objectCountByEncryptionType_unencrypted' - The total number of objects that aren\'t encrypted or use client-side
+-- encryption.
+--
+-- 'unknown', 'objectCountByEncryptionType_unknown' - The total number of objects that Amazon Macie doesn\'t have current
+-- encryption metadata for. Macie can\'t provide current data about the
+-- encryption settings for these objects.
+newObjectCountByEncryptionType ::
+  ObjectCountByEncryptionType
+newObjectCountByEncryptionType =
+  ObjectCountByEncryptionType'
+    { customerManaged =
+        Prelude.Nothing,
+      kmsManaged = Prelude.Nothing,
+      s3Managed = Prelude.Nothing,
+      unencrypted = Prelude.Nothing,
+      unknown = Prelude.Nothing
+    }
+
+-- | The total number of objects that are encrypted with a customer-provided
+-- key. The objects use customer-provided server-side encryption (SSE-C).
+objectCountByEncryptionType_customerManaged :: Lens.Lens' ObjectCountByEncryptionType (Prelude.Maybe Prelude.Integer)
+objectCountByEncryptionType_customerManaged = Lens.lens (\ObjectCountByEncryptionType' {customerManaged} -> customerManaged) (\s@ObjectCountByEncryptionType' {} a -> s {customerManaged = a} :: ObjectCountByEncryptionType)
+
+-- | The total number of objects that are encrypted with an KMS key, either
+-- an Amazon Web Services managed key or a customer managed key. The
+-- objects use KMS encryption (SSE-KMS).
+objectCountByEncryptionType_kmsManaged :: Lens.Lens' ObjectCountByEncryptionType (Prelude.Maybe Prelude.Integer)
+objectCountByEncryptionType_kmsManaged = Lens.lens (\ObjectCountByEncryptionType' {kmsManaged} -> kmsManaged) (\s@ObjectCountByEncryptionType' {} a -> s {kmsManaged = a} :: ObjectCountByEncryptionType)
+
+-- | The total number of objects that are encrypted with an Amazon S3 managed
+-- key. The objects use Amazon S3 managed encryption (SSE-S3).
+objectCountByEncryptionType_s3Managed :: Lens.Lens' ObjectCountByEncryptionType (Prelude.Maybe Prelude.Integer)
+objectCountByEncryptionType_s3Managed = Lens.lens (\ObjectCountByEncryptionType' {s3Managed} -> s3Managed) (\s@ObjectCountByEncryptionType' {} a -> s {s3Managed = a} :: ObjectCountByEncryptionType)
+
+-- | The total number of objects that aren\'t encrypted or use client-side
+-- encryption.
+objectCountByEncryptionType_unencrypted :: Lens.Lens' ObjectCountByEncryptionType (Prelude.Maybe Prelude.Integer)
+objectCountByEncryptionType_unencrypted = Lens.lens (\ObjectCountByEncryptionType' {unencrypted} -> unencrypted) (\s@ObjectCountByEncryptionType' {} a -> s {unencrypted = a} :: ObjectCountByEncryptionType)
+
+-- | The total number of objects that Amazon Macie doesn\'t have current
+-- encryption metadata for. Macie can\'t provide current data about the
+-- encryption settings for these objects.
+objectCountByEncryptionType_unknown :: Lens.Lens' ObjectCountByEncryptionType (Prelude.Maybe Prelude.Integer)
+objectCountByEncryptionType_unknown = Lens.lens (\ObjectCountByEncryptionType' {unknown} -> unknown) (\s@ObjectCountByEncryptionType' {} a -> s {unknown = a} :: ObjectCountByEncryptionType)
+
+instance Data.FromJSON ObjectCountByEncryptionType where
+  parseJSON =
+    Data.withObject
+      "ObjectCountByEncryptionType"
+      ( \x ->
+          ObjectCountByEncryptionType'
+            Prelude.<$> (x Data..:? "customerManaged")
+            Prelude.<*> (x Data..:? "kmsManaged")
+            Prelude.<*> (x Data..:? "s3Managed")
+            Prelude.<*> (x Data..:? "unencrypted")
+            Prelude.<*> (x Data..:? "unknown")
+      )
+
+instance Prelude.Hashable ObjectCountByEncryptionType where
+  hashWithSalt _salt ObjectCountByEncryptionType' {..} =
+    _salt
+      `Prelude.hashWithSalt` customerManaged
+      `Prelude.hashWithSalt` kmsManaged
+      `Prelude.hashWithSalt` s3Managed
+      `Prelude.hashWithSalt` unencrypted
+      `Prelude.hashWithSalt` unknown
+
+instance Prelude.NFData ObjectCountByEncryptionType where
+  rnf ObjectCountByEncryptionType' {..} =
+    Prelude.rnf customerManaged
+      `Prelude.seq` Prelude.rnf kmsManaged
+      `Prelude.seq` Prelude.rnf s3Managed
+      `Prelude.seq` Prelude.rnf unencrypted
+      `Prelude.seq` Prelude.rnf unknown
diff --git a/gen/Amazonka/MacieV2/Types/ObjectLevelStatistics.hs b/gen/Amazonka/MacieV2/Types/ObjectLevelStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ObjectLevelStatistics.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.MacieV2.Types.ObjectLevelStatistics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ObjectLevelStatistics 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 information about the total storage size (in bytes) or number
+-- of objects that Amazon Macie can\'t analyze in one or more S3 buckets.
+-- In a BucketMetadata or MatchingBucket object, this data is for a
+-- specific bucket. In a GetBucketStatisticsResponse object, this data is
+-- aggregated for all the buckets in the query results. If versioning is
+-- enabled for a bucket, storage size values are based on the size of the
+-- latest version of each applicable object in the bucket.
+--
+-- /See:/ 'newObjectLevelStatistics' smart constructor.
+data ObjectLevelStatistics = ObjectLevelStatistics'
+  { -- | The total storage size (in bytes) or number of objects that Amazon Macie
+    -- can\'t analyze because the objects don\'t have a file name extension for
+    -- a supported file or storage format.
+    fileType :: Prelude.Maybe Prelude.Integer,
+    -- | The total storage size (in bytes) or number of objects that Amazon Macie
+    -- can\'t analyze because the objects use an unsupported storage class.
+    storageClass :: Prelude.Maybe Prelude.Integer,
+    -- | The total storage size (in bytes) or number of objects that Amazon Macie
+    -- can\'t analyze because the objects use an unsupported storage class or
+    -- don\'t have a file name extension for a supported file or storage
+    -- format.
+    total :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ObjectLevelStatistics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fileType', 'objectLevelStatistics_fileType' - The total storage size (in bytes) or number of objects that Amazon Macie
+-- can\'t analyze because the objects don\'t have a file name extension for
+-- a supported file or storage format.
+--
+-- 'storageClass', 'objectLevelStatistics_storageClass' - The total storage size (in bytes) or number of objects that Amazon Macie
+-- can\'t analyze because the objects use an unsupported storage class.
+--
+-- 'total', 'objectLevelStatistics_total' - The total storage size (in bytes) or number of objects that Amazon Macie
+-- can\'t analyze because the objects use an unsupported storage class or
+-- don\'t have a file name extension for a supported file or storage
+-- format.
+newObjectLevelStatistics ::
+  ObjectLevelStatistics
+newObjectLevelStatistics =
+  ObjectLevelStatistics'
+    { fileType = Prelude.Nothing,
+      storageClass = Prelude.Nothing,
+      total = Prelude.Nothing
+    }
+
+-- | The total storage size (in bytes) or number of objects that Amazon Macie
+-- can\'t analyze because the objects don\'t have a file name extension for
+-- a supported file or storage format.
+objectLevelStatistics_fileType :: Lens.Lens' ObjectLevelStatistics (Prelude.Maybe Prelude.Integer)
+objectLevelStatistics_fileType = Lens.lens (\ObjectLevelStatistics' {fileType} -> fileType) (\s@ObjectLevelStatistics' {} a -> s {fileType = a} :: ObjectLevelStatistics)
+
+-- | The total storage size (in bytes) or number of objects that Amazon Macie
+-- can\'t analyze because the objects use an unsupported storage class.
+objectLevelStatistics_storageClass :: Lens.Lens' ObjectLevelStatistics (Prelude.Maybe Prelude.Integer)
+objectLevelStatistics_storageClass = Lens.lens (\ObjectLevelStatistics' {storageClass} -> storageClass) (\s@ObjectLevelStatistics' {} a -> s {storageClass = a} :: ObjectLevelStatistics)
+
+-- | The total storage size (in bytes) or number of objects that Amazon Macie
+-- can\'t analyze because the objects use an unsupported storage class or
+-- don\'t have a file name extension for a supported file or storage
+-- format.
+objectLevelStatistics_total :: Lens.Lens' ObjectLevelStatistics (Prelude.Maybe Prelude.Integer)
+objectLevelStatistics_total = Lens.lens (\ObjectLevelStatistics' {total} -> total) (\s@ObjectLevelStatistics' {} a -> s {total = a} :: ObjectLevelStatistics)
+
+instance Data.FromJSON ObjectLevelStatistics where
+  parseJSON =
+    Data.withObject
+      "ObjectLevelStatistics"
+      ( \x ->
+          ObjectLevelStatistics'
+            Prelude.<$> (x Data..:? "fileType")
+            Prelude.<*> (x Data..:? "storageClass")
+            Prelude.<*> (x Data..:? "total")
+      )
+
+instance Prelude.Hashable ObjectLevelStatistics where
+  hashWithSalt _salt ObjectLevelStatistics' {..} =
+    _salt
+      `Prelude.hashWithSalt` fileType
+      `Prelude.hashWithSalt` storageClass
+      `Prelude.hashWithSalt` total
+
+instance Prelude.NFData ObjectLevelStatistics where
+  rnf ObjectLevelStatistics' {..} =
+    Prelude.rnf fileType
+      `Prelude.seq` Prelude.rnf storageClass
+      `Prelude.seq` Prelude.rnf total
diff --git a/gen/Amazonka/MacieV2/Types/Occurrences.hs b/gen/Amazonka/MacieV2/Types/Occurrences.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/Occurrences.hs
@@ -0,0 +1,213 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.Occurrences
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.Occurrences where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.Cell
+import Amazonka.MacieV2.Types.Page
+import Amazonka.MacieV2.Types.Range
+import Amazonka.MacieV2.Types.Record
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the location of 1-15 occurrences of sensitive data that was
+-- detected by a managed data identifier or a custom data identifier and
+-- produced a sensitive data finding.
+--
+-- /See:/ 'newOccurrences' smart constructor.
+data Occurrences = Occurrences'
+  { -- | An array of objects, one for each occurrence of sensitive data in a
+    -- Microsoft Excel workbook, CSV file, or TSV file. This value is null for
+    -- all other types of files.
+    --
+    -- Each Cell object specifies a cell or field that contains the sensitive
+    -- data.
+    cells :: Prelude.Maybe [Cell],
+    -- | An array of objects, one for each occurrence of sensitive data in a
+    -- non-binary text file, such as an HTML, TXT, or XML file. Each Range
+    -- object specifies a line or inclusive range of lines that contains the
+    -- sensitive data, and the position of the data on the specified line or
+    -- lines.
+    --
+    -- This value is often null for file types that are supported by Cell,
+    -- Page, or Record objects. Exceptions are the location of sensitive data
+    -- in: unstructured sections of an otherwise structured file, such as a
+    -- comment in a file; a malformed file that Amazon Macie analyzes as plain
+    -- text; and, a CSV or TSV file that has any column names that contain
+    -- sensitive data.
+    lineRanges :: Prelude.Maybe [Range],
+    -- | Reserved for future use.
+    offsetRanges :: Prelude.Maybe [Range],
+    -- | An array of objects, one for each occurrence of sensitive data in an
+    -- Adobe Portable Document Format file. This value is null for all other
+    -- types of files.
+    --
+    -- Each Page object specifies a page that contains the sensitive data.
+    pages :: Prelude.Maybe [Page],
+    -- | An array of objects, one for each occurrence of sensitive data in an
+    -- Apache Avro object container, Apache Parquet file, JSON file, or JSON
+    -- Lines file. This value is null for all other types of files.
+    --
+    -- For an Avro object container or Parquet file, each Record object
+    -- specifies a record index and the path to a field in a record that
+    -- contains the sensitive data. For a JSON or JSON Lines file, each Record
+    -- object specifies the path to a field or array that contains the
+    -- sensitive data. For a JSON Lines file, it also specifies the index of
+    -- the line that contains the data.
+    records :: Prelude.Maybe [Record]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Occurrences' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cells', 'occurrences_cells' - An array of objects, one for each occurrence of sensitive data in a
+-- Microsoft Excel workbook, CSV file, or TSV file. This value is null for
+-- all other types of files.
+--
+-- Each Cell object specifies a cell or field that contains the sensitive
+-- data.
+--
+-- 'lineRanges', 'occurrences_lineRanges' - An array of objects, one for each occurrence of sensitive data in a
+-- non-binary text file, such as an HTML, TXT, or XML file. Each Range
+-- object specifies a line or inclusive range of lines that contains the
+-- sensitive data, and the position of the data on the specified line or
+-- lines.
+--
+-- This value is often null for file types that are supported by Cell,
+-- Page, or Record objects. Exceptions are the location of sensitive data
+-- in: unstructured sections of an otherwise structured file, such as a
+-- comment in a file; a malformed file that Amazon Macie analyzes as plain
+-- text; and, a CSV or TSV file that has any column names that contain
+-- sensitive data.
+--
+-- 'offsetRanges', 'occurrences_offsetRanges' - Reserved for future use.
+--
+-- 'pages', 'occurrences_pages' - An array of objects, one for each occurrence of sensitive data in an
+-- Adobe Portable Document Format file. This value is null for all other
+-- types of files.
+--
+-- Each Page object specifies a page that contains the sensitive data.
+--
+-- 'records', 'occurrences_records' - An array of objects, one for each occurrence of sensitive data in an
+-- Apache Avro object container, Apache Parquet file, JSON file, or JSON
+-- Lines file. This value is null for all other types of files.
+--
+-- For an Avro object container or Parquet file, each Record object
+-- specifies a record index and the path to a field in a record that
+-- contains the sensitive data. For a JSON or JSON Lines file, each Record
+-- object specifies the path to a field or array that contains the
+-- sensitive data. For a JSON Lines file, it also specifies the index of
+-- the line that contains the data.
+newOccurrences ::
+  Occurrences
+newOccurrences =
+  Occurrences'
+    { cells = Prelude.Nothing,
+      lineRanges = Prelude.Nothing,
+      offsetRanges = Prelude.Nothing,
+      pages = Prelude.Nothing,
+      records = Prelude.Nothing
+    }
+
+-- | An array of objects, one for each occurrence of sensitive data in a
+-- Microsoft Excel workbook, CSV file, or TSV file. This value is null for
+-- all other types of files.
+--
+-- Each Cell object specifies a cell or field that contains the sensitive
+-- data.
+occurrences_cells :: Lens.Lens' Occurrences (Prelude.Maybe [Cell])
+occurrences_cells = Lens.lens (\Occurrences' {cells} -> cells) (\s@Occurrences' {} a -> s {cells = a} :: Occurrences) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of objects, one for each occurrence of sensitive data in a
+-- non-binary text file, such as an HTML, TXT, or XML file. Each Range
+-- object specifies a line or inclusive range of lines that contains the
+-- sensitive data, and the position of the data on the specified line or
+-- lines.
+--
+-- This value is often null for file types that are supported by Cell,
+-- Page, or Record objects. Exceptions are the location of sensitive data
+-- in: unstructured sections of an otherwise structured file, such as a
+-- comment in a file; a malformed file that Amazon Macie analyzes as plain
+-- text; and, a CSV or TSV file that has any column names that contain
+-- sensitive data.
+occurrences_lineRanges :: Lens.Lens' Occurrences (Prelude.Maybe [Range])
+occurrences_lineRanges = Lens.lens (\Occurrences' {lineRanges} -> lineRanges) (\s@Occurrences' {} a -> s {lineRanges = a} :: Occurrences) Prelude.. Lens.mapping Lens.coerced
+
+-- | Reserved for future use.
+occurrences_offsetRanges :: Lens.Lens' Occurrences (Prelude.Maybe [Range])
+occurrences_offsetRanges = Lens.lens (\Occurrences' {offsetRanges} -> offsetRanges) (\s@Occurrences' {} a -> s {offsetRanges = a} :: Occurrences) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of objects, one for each occurrence of sensitive data in an
+-- Adobe Portable Document Format file. This value is null for all other
+-- types of files.
+--
+-- Each Page object specifies a page that contains the sensitive data.
+occurrences_pages :: Lens.Lens' Occurrences (Prelude.Maybe [Page])
+occurrences_pages = Lens.lens (\Occurrences' {pages} -> pages) (\s@Occurrences' {} a -> s {pages = a} :: Occurrences) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of objects, one for each occurrence of sensitive data in an
+-- Apache Avro object container, Apache Parquet file, JSON file, or JSON
+-- Lines file. This value is null for all other types of files.
+--
+-- For an Avro object container or Parquet file, each Record object
+-- specifies a record index and the path to a field in a record that
+-- contains the sensitive data. For a JSON or JSON Lines file, each Record
+-- object specifies the path to a field or array that contains the
+-- sensitive data. For a JSON Lines file, it also specifies the index of
+-- the line that contains the data.
+occurrences_records :: Lens.Lens' Occurrences (Prelude.Maybe [Record])
+occurrences_records = Lens.lens (\Occurrences' {records} -> records) (\s@Occurrences' {} a -> s {records = a} :: Occurrences) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON Occurrences where
+  parseJSON =
+    Data.withObject
+      "Occurrences"
+      ( \x ->
+          Occurrences'
+            Prelude.<$> (x Data..:? "cells" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "lineRanges" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "offsetRanges" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "pages" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "records" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable Occurrences where
+  hashWithSalt _salt Occurrences' {..} =
+    _salt
+      `Prelude.hashWithSalt` cells
+      `Prelude.hashWithSalt` lineRanges
+      `Prelude.hashWithSalt` offsetRanges
+      `Prelude.hashWithSalt` pages
+      `Prelude.hashWithSalt` records
+
+instance Prelude.NFData Occurrences where
+  rnf Occurrences' {..} =
+    Prelude.rnf cells
+      `Prelude.seq` Prelude.rnf lineRanges
+      `Prelude.seq` Prelude.rnf offsetRanges
+      `Prelude.seq` Prelude.rnf pages
+      `Prelude.seq` Prelude.rnf records
diff --git a/gen/Amazonka/MacieV2/Types/OrderBy.hs b/gen/Amazonka/MacieV2/Types/OrderBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/OrderBy.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.OrderBy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.OrderBy
+  ( OrderBy
+      ( ..,
+        OrderBy_ASC,
+        OrderBy_DESC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype OrderBy = OrderBy' {fromOrderBy :: 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 OrderBy_ASC :: OrderBy
+pattern OrderBy_ASC = OrderBy' "ASC"
+
+pattern OrderBy_DESC :: OrderBy
+pattern OrderBy_DESC = OrderBy' "DESC"
+
+{-# COMPLETE
+  OrderBy_ASC,
+  OrderBy_DESC,
+  OrderBy'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/OriginType.hs b/gen/Amazonka/MacieV2/Types/OriginType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/OriginType.hs
@@ -0,0 +1,73 @@
+{-# 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.MacieV2.Types.OriginType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.OriginType
+  ( OriginType
+      ( ..,
+        OriginType_AUTOMATED_SENSITIVE_DATA_DISCOVERY,
+        OriginType_SENSITIVE_DATA_DISCOVERY_JOB
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies how Amazon Macie found the sensitive data that produced a
+-- finding. Possible values are:
+newtype OriginType = OriginType'
+  { fromOriginType ::
+      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 OriginType_AUTOMATED_SENSITIVE_DATA_DISCOVERY :: OriginType
+pattern OriginType_AUTOMATED_SENSITIVE_DATA_DISCOVERY = OriginType' "AUTOMATED_SENSITIVE_DATA_DISCOVERY"
+
+pattern OriginType_SENSITIVE_DATA_DISCOVERY_JOB :: OriginType
+pattern OriginType_SENSITIVE_DATA_DISCOVERY_JOB = OriginType' "SENSITIVE_DATA_DISCOVERY_JOB"
+
+{-# COMPLETE
+  OriginType_AUTOMATED_SENSITIVE_DATA_DISCOVERY,
+  OriginType_SENSITIVE_DATA_DISCOVERY_JOB,
+  OriginType'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/Page.hs b/gen/Amazonka/MacieV2/Types/Page.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/Page.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.MacieV2.Types.Page
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.Page where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.Range
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the location of an occurrence of sensitive data in an Adobe
+-- Portable Document Format file.
+--
+-- /See:/ 'newPage' smart constructor.
+data Page = Page'
+  { -- | Reserved for future use.
+    lineRange :: Prelude.Maybe Range,
+    -- | Reserved for future use.
+    offsetRange :: Prelude.Maybe Range,
+    -- | The page number of the page that contains the sensitive data.
+    pageNumber :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Page' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lineRange', 'page_lineRange' - Reserved for future use.
+--
+-- 'offsetRange', 'page_offsetRange' - Reserved for future use.
+--
+-- 'pageNumber', 'page_pageNumber' - The page number of the page that contains the sensitive data.
+newPage ::
+  Page
+newPage =
+  Page'
+    { lineRange = Prelude.Nothing,
+      offsetRange = Prelude.Nothing,
+      pageNumber = Prelude.Nothing
+    }
+
+-- | Reserved for future use.
+page_lineRange :: Lens.Lens' Page (Prelude.Maybe Range)
+page_lineRange = Lens.lens (\Page' {lineRange} -> lineRange) (\s@Page' {} a -> s {lineRange = a} :: Page)
+
+-- | Reserved for future use.
+page_offsetRange :: Lens.Lens' Page (Prelude.Maybe Range)
+page_offsetRange = Lens.lens (\Page' {offsetRange} -> offsetRange) (\s@Page' {} a -> s {offsetRange = a} :: Page)
+
+-- | The page number of the page that contains the sensitive data.
+page_pageNumber :: Lens.Lens' Page (Prelude.Maybe Prelude.Integer)
+page_pageNumber = Lens.lens (\Page' {pageNumber} -> pageNumber) (\s@Page' {} a -> s {pageNumber = a} :: Page)
+
+instance Data.FromJSON Page where
+  parseJSON =
+    Data.withObject
+      "Page"
+      ( \x ->
+          Page'
+            Prelude.<$> (x Data..:? "lineRange")
+            Prelude.<*> (x Data..:? "offsetRange")
+            Prelude.<*> (x Data..:? "pageNumber")
+      )
+
+instance Prelude.Hashable Page where
+  hashWithSalt _salt Page' {..} =
+    _salt
+      `Prelude.hashWithSalt` lineRange
+      `Prelude.hashWithSalt` offsetRange
+      `Prelude.hashWithSalt` pageNumber
+
+instance Prelude.NFData Page where
+  rnf Page' {..} =
+    Prelude.rnf lineRange
+      `Prelude.seq` Prelude.rnf offsetRange
+      `Prelude.seq` Prelude.rnf pageNumber
diff --git a/gen/Amazonka/MacieV2/Types/PolicyDetails.hs b/gen/Amazonka/MacieV2/Types/PolicyDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/PolicyDetails.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.MacieV2.Types.PolicyDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.PolicyDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.FindingAction
+import Amazonka.MacieV2.Types.FindingActor
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the details of a policy finding.
+--
+-- /See:/ 'newPolicyDetails' smart constructor.
+data PolicyDetails = PolicyDetails'
+  { -- | The action that produced the finding.
+    action :: Prelude.Maybe FindingAction,
+    -- | The entity that performed the action that produced the finding.
+    actor :: Prelude.Maybe FindingActor
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PolicyDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'action', 'policyDetails_action' - The action that produced the finding.
+--
+-- 'actor', 'policyDetails_actor' - The entity that performed the action that produced the finding.
+newPolicyDetails ::
+  PolicyDetails
+newPolicyDetails =
+  PolicyDetails'
+    { action = Prelude.Nothing,
+      actor = Prelude.Nothing
+    }
+
+-- | The action that produced the finding.
+policyDetails_action :: Lens.Lens' PolicyDetails (Prelude.Maybe FindingAction)
+policyDetails_action = Lens.lens (\PolicyDetails' {action} -> action) (\s@PolicyDetails' {} a -> s {action = a} :: PolicyDetails)
+
+-- | The entity that performed the action that produced the finding.
+policyDetails_actor :: Lens.Lens' PolicyDetails (Prelude.Maybe FindingActor)
+policyDetails_actor = Lens.lens (\PolicyDetails' {actor} -> actor) (\s@PolicyDetails' {} a -> s {actor = a} :: PolicyDetails)
+
+instance Data.FromJSON PolicyDetails where
+  parseJSON =
+    Data.withObject
+      "PolicyDetails"
+      ( \x ->
+          PolicyDetails'
+            Prelude.<$> (x Data..:? "action")
+            Prelude.<*> (x Data..:? "actor")
+      )
+
+instance Prelude.Hashable PolicyDetails where
+  hashWithSalt _salt PolicyDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` action
+      `Prelude.hashWithSalt` actor
+
+instance Prelude.NFData PolicyDetails where
+  rnf PolicyDetails' {..} =
+    Prelude.rnf action `Prelude.seq` Prelude.rnf actor
diff --git a/gen/Amazonka/MacieV2/Types/Range.hs b/gen/Amazonka/MacieV2/Types/Range.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/Range.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.Range
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.Range where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the location of an occurrence of sensitive data in a
+-- non-binary text file, such as an HTML, TXT, or XML file.
+--
+-- /See:/ 'newRange' smart constructor.
+data Range = Range'
+  { -- | The number of lines from the beginning of the file to the end of the
+    -- sensitive data.
+    end :: Prelude.Maybe Prelude.Integer,
+    -- | The number of lines from the beginning of the file to the beginning of
+    -- the sensitive data.
+    start :: Prelude.Maybe Prelude.Integer,
+    -- | The number of characters, with spaces and starting from 1, from the
+    -- beginning of the first line that contains the sensitive data (start) to
+    -- the beginning of the sensitive data.
+    startColumn :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Range' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'end', 'range_end' - The number of lines from the beginning of the file to the end of the
+-- sensitive data.
+--
+-- 'start', 'range_start' - The number of lines from the beginning of the file to the beginning of
+-- the sensitive data.
+--
+-- 'startColumn', 'range_startColumn' - The number of characters, with spaces and starting from 1, from the
+-- beginning of the first line that contains the sensitive data (start) to
+-- the beginning of the sensitive data.
+newRange ::
+  Range
+newRange =
+  Range'
+    { end = Prelude.Nothing,
+      start = Prelude.Nothing,
+      startColumn = Prelude.Nothing
+    }
+
+-- | The number of lines from the beginning of the file to the end of the
+-- sensitive data.
+range_end :: Lens.Lens' Range (Prelude.Maybe Prelude.Integer)
+range_end = Lens.lens (\Range' {end} -> end) (\s@Range' {} a -> s {end = a} :: Range)
+
+-- | The number of lines from the beginning of the file to the beginning of
+-- the sensitive data.
+range_start :: Lens.Lens' Range (Prelude.Maybe Prelude.Integer)
+range_start = Lens.lens (\Range' {start} -> start) (\s@Range' {} a -> s {start = a} :: Range)
+
+-- | The number of characters, with spaces and starting from 1, from the
+-- beginning of the first line that contains the sensitive data (start) to
+-- the beginning of the sensitive data.
+range_startColumn :: Lens.Lens' Range (Prelude.Maybe Prelude.Integer)
+range_startColumn = Lens.lens (\Range' {startColumn} -> startColumn) (\s@Range' {} a -> s {startColumn = a} :: Range)
+
+instance Data.FromJSON Range where
+  parseJSON =
+    Data.withObject
+      "Range"
+      ( \x ->
+          Range'
+            Prelude.<$> (x Data..:? "end")
+            Prelude.<*> (x Data..:? "start")
+            Prelude.<*> (x Data..:? "startColumn")
+      )
+
+instance Prelude.Hashable Range where
+  hashWithSalt _salt Range' {..} =
+    _salt
+      `Prelude.hashWithSalt` end
+      `Prelude.hashWithSalt` start
+      `Prelude.hashWithSalt` startColumn
+
+instance Prelude.NFData Range where
+  rnf Range' {..} =
+    Prelude.rnf end
+      `Prelude.seq` Prelude.rnf start
+      `Prelude.seq` Prelude.rnf startColumn
diff --git a/gen/Amazonka/MacieV2/Types/Record.hs b/gen/Amazonka/MacieV2/Types/Record.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/Record.hs
@@ -0,0 +1,131 @@
+{-# 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.MacieV2.Types.Record
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.Record where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the location of an occurrence of sensitive data in an Apache
+-- Avro object container, Apache Parquet file, JSON file, or JSON Lines
+-- file.
+--
+-- /See:/ 'newRecord' smart constructor.
+data Record = Record'
+  { -- | The path, as a JSONPath expression, to the sensitive data. For an Avro
+    -- object container or Parquet file, this is the path to the field in the
+    -- record (recordIndex) that contains the data. For a JSON or JSON Lines
+    -- file, this is the path to the field or array that contains the data. If
+    -- the data is a value in an array, the path also indicates which value
+    -- contains the data.
+    --
+    -- If Amazon Macie detects sensitive data in the name of any element in the
+    -- path, Macie omits this field. If the name of an element exceeds 20
+    -- characters, Macie truncates the name by removing characters from the
+    -- beginning of the name. If the resulting full path exceeds 250
+    -- characters, Macie also truncates the path, starting with the first
+    -- element in the path, until the path contains 250 or fewer characters.
+    jsonPath :: Prelude.Maybe Prelude.Text,
+    -- | For an Avro object container or Parquet file, the record index, starting
+    -- from 0, for the record that contains the sensitive data. For a JSON
+    -- Lines file, the line index, starting from 0, for the line that contains
+    -- the sensitive data. This value is always 0 for JSON files.
+    recordIndex :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Record' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jsonPath', 'record_jsonPath' - The path, as a JSONPath expression, to the sensitive data. For an Avro
+-- object container or Parquet file, this is the path to the field in the
+-- record (recordIndex) that contains the data. For a JSON or JSON Lines
+-- file, this is the path to the field or array that contains the data. If
+-- the data is a value in an array, the path also indicates which value
+-- contains the data.
+--
+-- If Amazon Macie detects sensitive data in the name of any element in the
+-- path, Macie omits this field. If the name of an element exceeds 20
+-- characters, Macie truncates the name by removing characters from the
+-- beginning of the name. If the resulting full path exceeds 250
+-- characters, Macie also truncates the path, starting with the first
+-- element in the path, until the path contains 250 or fewer characters.
+--
+-- 'recordIndex', 'record_recordIndex' - For an Avro object container or Parquet file, the record index, starting
+-- from 0, for the record that contains the sensitive data. For a JSON
+-- Lines file, the line index, starting from 0, for the line that contains
+-- the sensitive data. This value is always 0 for JSON files.
+newRecord ::
+  Record
+newRecord =
+  Record'
+    { jsonPath = Prelude.Nothing,
+      recordIndex = Prelude.Nothing
+    }
+
+-- | The path, as a JSONPath expression, to the sensitive data. For an Avro
+-- object container or Parquet file, this is the path to the field in the
+-- record (recordIndex) that contains the data. For a JSON or JSON Lines
+-- file, this is the path to the field or array that contains the data. If
+-- the data is a value in an array, the path also indicates which value
+-- contains the data.
+--
+-- If Amazon Macie detects sensitive data in the name of any element in the
+-- path, Macie omits this field. If the name of an element exceeds 20
+-- characters, Macie truncates the name by removing characters from the
+-- beginning of the name. If the resulting full path exceeds 250
+-- characters, Macie also truncates the path, starting with the first
+-- element in the path, until the path contains 250 or fewer characters.
+record_jsonPath :: Lens.Lens' Record (Prelude.Maybe Prelude.Text)
+record_jsonPath = Lens.lens (\Record' {jsonPath} -> jsonPath) (\s@Record' {} a -> s {jsonPath = a} :: Record)
+
+-- | For an Avro object container or Parquet file, the record index, starting
+-- from 0, for the record that contains the sensitive data. For a JSON
+-- Lines file, the line index, starting from 0, for the line that contains
+-- the sensitive data. This value is always 0 for JSON files.
+record_recordIndex :: Lens.Lens' Record (Prelude.Maybe Prelude.Integer)
+record_recordIndex = Lens.lens (\Record' {recordIndex} -> recordIndex) (\s@Record' {} a -> s {recordIndex = a} :: Record)
+
+instance Data.FromJSON Record where
+  parseJSON =
+    Data.withObject
+      "Record"
+      ( \x ->
+          Record'
+            Prelude.<$> (x Data..:? "jsonPath")
+            Prelude.<*> (x Data..:? "recordIndex")
+      )
+
+instance Prelude.Hashable Record where
+  hashWithSalt _salt Record' {..} =
+    _salt
+      `Prelude.hashWithSalt` jsonPath
+      `Prelude.hashWithSalt` recordIndex
+
+instance Prelude.NFData Record where
+  rnf Record' {..} =
+    Prelude.rnf jsonPath
+      `Prelude.seq` Prelude.rnf recordIndex
diff --git a/gen/Amazonka/MacieV2/Types/RelationshipStatus.hs b/gen/Amazonka/MacieV2/Types/RelationshipStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/RelationshipStatus.hs
@@ -0,0 +1,113 @@
+{-# 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.MacieV2.Types.RelationshipStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.RelationshipStatus
+  ( RelationshipStatus
+      ( ..,
+        RelationshipStatus_AccountSuspended,
+        RelationshipStatus_Created,
+        RelationshipStatus_EmailVerificationFailed,
+        RelationshipStatus_EmailVerificationInProgress,
+        RelationshipStatus_Enabled,
+        RelationshipStatus_Invited,
+        RelationshipStatus_Paused,
+        RelationshipStatus_RegionDisabled,
+        RelationshipStatus_Removed,
+        RelationshipStatus_Resigned
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The current status of the relationship between an account and an
+-- associated Amazon Macie administrator account. Possible values are:
+newtype RelationshipStatus = RelationshipStatus'
+  { fromRelationshipStatus ::
+      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 RelationshipStatus_AccountSuspended :: RelationshipStatus
+pattern RelationshipStatus_AccountSuspended = RelationshipStatus' "AccountSuspended"
+
+pattern RelationshipStatus_Created :: RelationshipStatus
+pattern RelationshipStatus_Created = RelationshipStatus' "Created"
+
+pattern RelationshipStatus_EmailVerificationFailed :: RelationshipStatus
+pattern RelationshipStatus_EmailVerificationFailed = RelationshipStatus' "EmailVerificationFailed"
+
+pattern RelationshipStatus_EmailVerificationInProgress :: RelationshipStatus
+pattern RelationshipStatus_EmailVerificationInProgress = RelationshipStatus' "EmailVerificationInProgress"
+
+pattern RelationshipStatus_Enabled :: RelationshipStatus
+pattern RelationshipStatus_Enabled = RelationshipStatus' "Enabled"
+
+pattern RelationshipStatus_Invited :: RelationshipStatus
+pattern RelationshipStatus_Invited = RelationshipStatus' "Invited"
+
+pattern RelationshipStatus_Paused :: RelationshipStatus
+pattern RelationshipStatus_Paused = RelationshipStatus' "Paused"
+
+pattern RelationshipStatus_RegionDisabled :: RelationshipStatus
+pattern RelationshipStatus_RegionDisabled = RelationshipStatus' "RegionDisabled"
+
+pattern RelationshipStatus_Removed :: RelationshipStatus
+pattern RelationshipStatus_Removed = RelationshipStatus' "Removed"
+
+pattern RelationshipStatus_Resigned :: RelationshipStatus
+pattern RelationshipStatus_Resigned = RelationshipStatus' "Resigned"
+
+{-# COMPLETE
+  RelationshipStatus_AccountSuspended,
+  RelationshipStatus_Created,
+  RelationshipStatus_EmailVerificationFailed,
+  RelationshipStatus_EmailVerificationInProgress,
+  RelationshipStatus_Enabled,
+  RelationshipStatus_Invited,
+  RelationshipStatus_Paused,
+  RelationshipStatus_RegionDisabled,
+  RelationshipStatus_Removed,
+  RelationshipStatus_Resigned,
+  RelationshipStatus'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/ReplicationDetails.hs b/gen/Amazonka/MacieV2/Types/ReplicationDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ReplicationDetails.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.MacieV2.Types.ReplicationDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ReplicationDetails 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 information about settings that define whether one or more
+-- objects in an S3 bucket are replicated to S3 buckets for other Amazon
+-- Web Services accounts and, if so, which accounts.
+--
+-- /See:/ 'newReplicationDetails' smart constructor.
+data ReplicationDetails = ReplicationDetails'
+  { -- | Specifies whether the bucket is configured to replicate one or more
+    -- objects to any destination.
+    replicated :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether the bucket is configured to replicate one or more
+    -- objects to an Amazon Web Services account that isn\'t part of the same
+    -- Amazon Macie organization.
+    replicatedExternally :: Prelude.Maybe Prelude.Bool,
+    -- | An array of Amazon Web Services account IDs, one for each Amazon Web
+    -- Services account that the bucket is configured to replicate one or more
+    -- objects to.
+    replicationAccounts :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplicationDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'replicated', 'replicationDetails_replicated' - Specifies whether the bucket is configured to replicate one or more
+-- objects to any destination.
+--
+-- 'replicatedExternally', 'replicationDetails_replicatedExternally' - Specifies whether the bucket is configured to replicate one or more
+-- objects to an Amazon Web Services account that isn\'t part of the same
+-- Amazon Macie organization.
+--
+-- 'replicationAccounts', 'replicationDetails_replicationAccounts' - An array of Amazon Web Services account IDs, one for each Amazon Web
+-- Services account that the bucket is configured to replicate one or more
+-- objects to.
+newReplicationDetails ::
+  ReplicationDetails
+newReplicationDetails =
+  ReplicationDetails'
+    { replicated = Prelude.Nothing,
+      replicatedExternally = Prelude.Nothing,
+      replicationAccounts = Prelude.Nothing
+    }
+
+-- | Specifies whether the bucket is configured to replicate one or more
+-- objects to any destination.
+replicationDetails_replicated :: Lens.Lens' ReplicationDetails (Prelude.Maybe Prelude.Bool)
+replicationDetails_replicated = Lens.lens (\ReplicationDetails' {replicated} -> replicated) (\s@ReplicationDetails' {} a -> s {replicated = a} :: ReplicationDetails)
+
+-- | Specifies whether the bucket is configured to replicate one or more
+-- objects to an Amazon Web Services account that isn\'t part of the same
+-- Amazon Macie organization.
+replicationDetails_replicatedExternally :: Lens.Lens' ReplicationDetails (Prelude.Maybe Prelude.Bool)
+replicationDetails_replicatedExternally = Lens.lens (\ReplicationDetails' {replicatedExternally} -> replicatedExternally) (\s@ReplicationDetails' {} a -> s {replicatedExternally = a} :: ReplicationDetails)
+
+-- | An array of Amazon Web Services account IDs, one for each Amazon Web
+-- Services account that the bucket is configured to replicate one or more
+-- objects to.
+replicationDetails_replicationAccounts :: Lens.Lens' ReplicationDetails (Prelude.Maybe [Prelude.Text])
+replicationDetails_replicationAccounts = Lens.lens (\ReplicationDetails' {replicationAccounts} -> replicationAccounts) (\s@ReplicationDetails' {} a -> s {replicationAccounts = a} :: ReplicationDetails) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ReplicationDetails where
+  parseJSON =
+    Data.withObject
+      "ReplicationDetails"
+      ( \x ->
+          ReplicationDetails'
+            Prelude.<$> (x Data..:? "replicated")
+            Prelude.<*> (x Data..:? "replicatedExternally")
+            Prelude.<*> ( x
+                            Data..:? "replicationAccounts"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ReplicationDetails where
+  hashWithSalt _salt ReplicationDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` replicated
+      `Prelude.hashWithSalt` replicatedExternally
+      `Prelude.hashWithSalt` replicationAccounts
+
+instance Prelude.NFData ReplicationDetails where
+  rnf ReplicationDetails' {..} =
+    Prelude.rnf replicated
+      `Prelude.seq` Prelude.rnf replicatedExternally
+      `Prelude.seq` Prelude.rnf replicationAccounts
diff --git a/gen/Amazonka/MacieV2/Types/ResourceProfileArtifact.hs b/gen/Amazonka/MacieV2/Types/ResourceProfileArtifact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ResourceProfileArtifact.hs
@@ -0,0 +1,138 @@
+{-# 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.MacieV2.Types.ResourceProfileArtifact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ResourceProfileArtifact 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 information about an S3 object that Amazon Macie selected for
+-- analysis while performing automated sensitive data discovery for an S3
+-- bucket, and the status and results of the analysis. This information is
+-- available only if automated sensitive data discovery is currently
+-- enabled for your account.
+--
+-- /See:/ 'newResourceProfileArtifact' smart constructor.
+data ResourceProfileArtifact = ResourceProfileArtifact'
+  { -- | Specifies whether Amazon Macie found sensitive data in the object.
+    sensitive :: Prelude.Maybe Prelude.Bool,
+    -- | The status of the analysis. Possible values are:
+    --
+    -- -   COMPLETE - Amazon Macie successfully completed its analysis of the
+    --     object.
+    --
+    -- -   PARTIAL - Macie analyzed only a subset of data in the object. For
+    --     example, the object is an archive file that contains files in an
+    --     unsupported format.
+    --
+    -- -   SKIPPED - Macie wasn\'t able to analyze the object. For example, the
+    --     object is a malformed file.
+    classificationResultStatus :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the object.
+    arn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceProfileArtifact' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sensitive', 'resourceProfileArtifact_sensitive' - Specifies whether Amazon Macie found sensitive data in the object.
+--
+-- 'classificationResultStatus', 'resourceProfileArtifact_classificationResultStatus' - The status of the analysis. Possible values are:
+--
+-- -   COMPLETE - Amazon Macie successfully completed its analysis of the
+--     object.
+--
+-- -   PARTIAL - Macie analyzed only a subset of data in the object. For
+--     example, the object is an archive file that contains files in an
+--     unsupported format.
+--
+-- -   SKIPPED - Macie wasn\'t able to analyze the object. For example, the
+--     object is a malformed file.
+--
+-- 'arn', 'resourceProfileArtifact_arn' - The Amazon Resource Name (ARN) of the object.
+newResourceProfileArtifact ::
+  -- | 'classificationResultStatus'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  ResourceProfileArtifact
+newResourceProfileArtifact
+  pClassificationResultStatus_
+  pArn_ =
+    ResourceProfileArtifact'
+      { sensitive =
+          Prelude.Nothing,
+        classificationResultStatus =
+          pClassificationResultStatus_,
+        arn = pArn_
+      }
+
+-- | Specifies whether Amazon Macie found sensitive data in the object.
+resourceProfileArtifact_sensitive :: Lens.Lens' ResourceProfileArtifact (Prelude.Maybe Prelude.Bool)
+resourceProfileArtifact_sensitive = Lens.lens (\ResourceProfileArtifact' {sensitive} -> sensitive) (\s@ResourceProfileArtifact' {} a -> s {sensitive = a} :: ResourceProfileArtifact)
+
+-- | The status of the analysis. Possible values are:
+--
+-- -   COMPLETE - Amazon Macie successfully completed its analysis of the
+--     object.
+--
+-- -   PARTIAL - Macie analyzed only a subset of data in the object. For
+--     example, the object is an archive file that contains files in an
+--     unsupported format.
+--
+-- -   SKIPPED - Macie wasn\'t able to analyze the object. For example, the
+--     object is a malformed file.
+resourceProfileArtifact_classificationResultStatus :: Lens.Lens' ResourceProfileArtifact Prelude.Text
+resourceProfileArtifact_classificationResultStatus = Lens.lens (\ResourceProfileArtifact' {classificationResultStatus} -> classificationResultStatus) (\s@ResourceProfileArtifact' {} a -> s {classificationResultStatus = a} :: ResourceProfileArtifact)
+
+-- | The Amazon Resource Name (ARN) of the object.
+resourceProfileArtifact_arn :: Lens.Lens' ResourceProfileArtifact Prelude.Text
+resourceProfileArtifact_arn = Lens.lens (\ResourceProfileArtifact' {arn} -> arn) (\s@ResourceProfileArtifact' {} a -> s {arn = a} :: ResourceProfileArtifact)
+
+instance Data.FromJSON ResourceProfileArtifact where
+  parseJSON =
+    Data.withObject
+      "ResourceProfileArtifact"
+      ( \x ->
+          ResourceProfileArtifact'
+            Prelude.<$> (x Data..:? "sensitive")
+            Prelude.<*> (x Data..: "classificationResultStatus")
+            Prelude.<*> (x Data..: "arn")
+      )
+
+instance Prelude.Hashable ResourceProfileArtifact where
+  hashWithSalt _salt ResourceProfileArtifact' {..} =
+    _salt
+      `Prelude.hashWithSalt` sensitive
+      `Prelude.hashWithSalt` classificationResultStatus
+      `Prelude.hashWithSalt` arn
+
+instance Prelude.NFData ResourceProfileArtifact where
+  rnf ResourceProfileArtifact' {..} =
+    Prelude.rnf sensitive
+      `Prelude.seq` Prelude.rnf classificationResultStatus
+      `Prelude.seq` Prelude.rnf arn
diff --git a/gen/Amazonka/MacieV2/Types/ResourceStatistics.hs b/gen/Amazonka/MacieV2/Types/ResourceStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ResourceStatistics.hs
@@ -0,0 +1,231 @@
+{-# 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.MacieV2.Types.ResourceStatistics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ResourceStatistics 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 statistical data for sensitive data discovery metrics that
+-- apply to an S3 bucket that Amazon Macie monitors and analyzes for your
+-- account. The statistics capture the results of automated sensitive data
+-- discovery activities that Macie has performed for the bucket. The data
+-- is available only if automated sensitive data discovery is currently
+-- enabled for your account.
+--
+-- /See:/ 'newResourceStatistics' smart constructor.
+data ResourceStatistics = ResourceStatistics'
+  { -- | The total amount of data, in bytes, that Amazon Macie has analyzed in
+    -- the bucket.
+    totalBytesClassified :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of occurrences of sensitive data that Amazon Macie has
+    -- found in the bucket\'s objects. This includes occurrences that are
+    -- currently suppressed by the sensitivity scoring settings for the bucket
+    -- (totalDetectionsSuppressed).
+    totalDetections :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of occurrences of sensitive data that are currently
+    -- suppressed by the sensitivity scoring settings for the bucket. These
+    -- represent occurrences of sensitive data that Amazon Macie found in the
+    -- bucket\'s objects, but the occurrences were manually suppressed. By
+    -- default, suppressed occurrences are excluded from the bucket\'s
+    -- sensitivity score.
+    totalDetectionsSuppressed :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of objects that Amazon Macie has analyzed in the
+    -- bucket.
+    totalItemsClassified :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of the bucket\'s objects that Amazon Macie has found
+    -- sensitive data in.
+    totalItemsSensitive :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of objects that Amazon Macie hasn\'t analyzed in the
+    -- bucket due to an error or issue. For example, the object is a malformed
+    -- file. This value includes objects that Macie hasn\'t analyzed for
+    -- reasons reported by other statistics in the ResourceStatistics object.
+    totalItemsSkipped :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of objects that Amazon Macie hasn\'t analyzed in the
+    -- bucket because the objects are encrypted with a key that Macie isn\'t
+    -- allowed to use.
+    totalItemsSkippedInvalidEncryption :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of objects that Amazon Macie hasn\'t analyzed in the
+    -- bucket because the objects are encrypted with an KMS key that was
+    -- disabled or deleted.
+    totalItemsSkippedInvalidKms :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of objects that Amazon Macie hasn\'t analyzed in the
+    -- bucket because Macie isn\'t allowed to access the objects.
+    totalItemsSkippedPermissionDenied :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceStatistics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'totalBytesClassified', 'resourceStatistics_totalBytesClassified' - The total amount of data, in bytes, that Amazon Macie has analyzed in
+-- the bucket.
+--
+-- 'totalDetections', 'resourceStatistics_totalDetections' - The total number of occurrences of sensitive data that Amazon Macie has
+-- found in the bucket\'s objects. This includes occurrences that are
+-- currently suppressed by the sensitivity scoring settings for the bucket
+-- (totalDetectionsSuppressed).
+--
+-- 'totalDetectionsSuppressed', 'resourceStatistics_totalDetectionsSuppressed' - The total number of occurrences of sensitive data that are currently
+-- suppressed by the sensitivity scoring settings for the bucket. These
+-- represent occurrences of sensitive data that Amazon Macie found in the
+-- bucket\'s objects, but the occurrences were manually suppressed. By
+-- default, suppressed occurrences are excluded from the bucket\'s
+-- sensitivity score.
+--
+-- 'totalItemsClassified', 'resourceStatistics_totalItemsClassified' - The total number of objects that Amazon Macie has analyzed in the
+-- bucket.
+--
+-- 'totalItemsSensitive', 'resourceStatistics_totalItemsSensitive' - The total number of the bucket\'s objects that Amazon Macie has found
+-- sensitive data in.
+--
+-- 'totalItemsSkipped', 'resourceStatistics_totalItemsSkipped' - The total number of objects that Amazon Macie hasn\'t analyzed in the
+-- bucket due to an error or issue. For example, the object is a malformed
+-- file. This value includes objects that Macie hasn\'t analyzed for
+-- reasons reported by other statistics in the ResourceStatistics object.
+--
+-- 'totalItemsSkippedInvalidEncryption', 'resourceStatistics_totalItemsSkippedInvalidEncryption' - The total number of objects that Amazon Macie hasn\'t analyzed in the
+-- bucket because the objects are encrypted with a key that Macie isn\'t
+-- allowed to use.
+--
+-- 'totalItemsSkippedInvalidKms', 'resourceStatistics_totalItemsSkippedInvalidKms' - The total number of objects that Amazon Macie hasn\'t analyzed in the
+-- bucket because the objects are encrypted with an KMS key that was
+-- disabled or deleted.
+--
+-- 'totalItemsSkippedPermissionDenied', 'resourceStatistics_totalItemsSkippedPermissionDenied' - The total number of objects that Amazon Macie hasn\'t analyzed in the
+-- bucket because Macie isn\'t allowed to access the objects.
+newResourceStatistics ::
+  ResourceStatistics
+newResourceStatistics =
+  ResourceStatistics'
+    { totalBytesClassified =
+        Prelude.Nothing,
+      totalDetections = Prelude.Nothing,
+      totalDetectionsSuppressed = Prelude.Nothing,
+      totalItemsClassified = Prelude.Nothing,
+      totalItemsSensitive = Prelude.Nothing,
+      totalItemsSkipped = Prelude.Nothing,
+      totalItemsSkippedInvalidEncryption = Prelude.Nothing,
+      totalItemsSkippedInvalidKms = Prelude.Nothing,
+      totalItemsSkippedPermissionDenied = Prelude.Nothing
+    }
+
+-- | The total amount of data, in bytes, that Amazon Macie has analyzed in
+-- the bucket.
+resourceStatistics_totalBytesClassified :: Lens.Lens' ResourceStatistics (Prelude.Maybe Prelude.Integer)
+resourceStatistics_totalBytesClassified = Lens.lens (\ResourceStatistics' {totalBytesClassified} -> totalBytesClassified) (\s@ResourceStatistics' {} a -> s {totalBytesClassified = a} :: ResourceStatistics)
+
+-- | The total number of occurrences of sensitive data that Amazon Macie has
+-- found in the bucket\'s objects. This includes occurrences that are
+-- currently suppressed by the sensitivity scoring settings for the bucket
+-- (totalDetectionsSuppressed).
+resourceStatistics_totalDetections :: Lens.Lens' ResourceStatistics (Prelude.Maybe Prelude.Integer)
+resourceStatistics_totalDetections = Lens.lens (\ResourceStatistics' {totalDetections} -> totalDetections) (\s@ResourceStatistics' {} a -> s {totalDetections = a} :: ResourceStatistics)
+
+-- | The total number of occurrences of sensitive data that are currently
+-- suppressed by the sensitivity scoring settings for the bucket. These
+-- represent occurrences of sensitive data that Amazon Macie found in the
+-- bucket\'s objects, but the occurrences were manually suppressed. By
+-- default, suppressed occurrences are excluded from the bucket\'s
+-- sensitivity score.
+resourceStatistics_totalDetectionsSuppressed :: Lens.Lens' ResourceStatistics (Prelude.Maybe Prelude.Integer)
+resourceStatistics_totalDetectionsSuppressed = Lens.lens (\ResourceStatistics' {totalDetectionsSuppressed} -> totalDetectionsSuppressed) (\s@ResourceStatistics' {} a -> s {totalDetectionsSuppressed = a} :: ResourceStatistics)
+
+-- | The total number of objects that Amazon Macie has analyzed in the
+-- bucket.
+resourceStatistics_totalItemsClassified :: Lens.Lens' ResourceStatistics (Prelude.Maybe Prelude.Integer)
+resourceStatistics_totalItemsClassified = Lens.lens (\ResourceStatistics' {totalItemsClassified} -> totalItemsClassified) (\s@ResourceStatistics' {} a -> s {totalItemsClassified = a} :: ResourceStatistics)
+
+-- | The total number of the bucket\'s objects that Amazon Macie has found
+-- sensitive data in.
+resourceStatistics_totalItemsSensitive :: Lens.Lens' ResourceStatistics (Prelude.Maybe Prelude.Integer)
+resourceStatistics_totalItemsSensitive = Lens.lens (\ResourceStatistics' {totalItemsSensitive} -> totalItemsSensitive) (\s@ResourceStatistics' {} a -> s {totalItemsSensitive = a} :: ResourceStatistics)
+
+-- | The total number of objects that Amazon Macie hasn\'t analyzed in the
+-- bucket due to an error or issue. For example, the object is a malformed
+-- file. This value includes objects that Macie hasn\'t analyzed for
+-- reasons reported by other statistics in the ResourceStatistics object.
+resourceStatistics_totalItemsSkipped :: Lens.Lens' ResourceStatistics (Prelude.Maybe Prelude.Integer)
+resourceStatistics_totalItemsSkipped = Lens.lens (\ResourceStatistics' {totalItemsSkipped} -> totalItemsSkipped) (\s@ResourceStatistics' {} a -> s {totalItemsSkipped = a} :: ResourceStatistics)
+
+-- | The total number of objects that Amazon Macie hasn\'t analyzed in the
+-- bucket because the objects are encrypted with a key that Macie isn\'t
+-- allowed to use.
+resourceStatistics_totalItemsSkippedInvalidEncryption :: Lens.Lens' ResourceStatistics (Prelude.Maybe Prelude.Integer)
+resourceStatistics_totalItemsSkippedInvalidEncryption = Lens.lens (\ResourceStatistics' {totalItemsSkippedInvalidEncryption} -> totalItemsSkippedInvalidEncryption) (\s@ResourceStatistics' {} a -> s {totalItemsSkippedInvalidEncryption = a} :: ResourceStatistics)
+
+-- | The total number of objects that Amazon Macie hasn\'t analyzed in the
+-- bucket because the objects are encrypted with an KMS key that was
+-- disabled or deleted.
+resourceStatistics_totalItemsSkippedInvalidKms :: Lens.Lens' ResourceStatistics (Prelude.Maybe Prelude.Integer)
+resourceStatistics_totalItemsSkippedInvalidKms = Lens.lens (\ResourceStatistics' {totalItemsSkippedInvalidKms} -> totalItemsSkippedInvalidKms) (\s@ResourceStatistics' {} a -> s {totalItemsSkippedInvalidKms = a} :: ResourceStatistics)
+
+-- | The total number of objects that Amazon Macie hasn\'t analyzed in the
+-- bucket because Macie isn\'t allowed to access the objects.
+resourceStatistics_totalItemsSkippedPermissionDenied :: Lens.Lens' ResourceStatistics (Prelude.Maybe Prelude.Integer)
+resourceStatistics_totalItemsSkippedPermissionDenied = Lens.lens (\ResourceStatistics' {totalItemsSkippedPermissionDenied} -> totalItemsSkippedPermissionDenied) (\s@ResourceStatistics' {} a -> s {totalItemsSkippedPermissionDenied = a} :: ResourceStatistics)
+
+instance Data.FromJSON ResourceStatistics where
+  parseJSON =
+    Data.withObject
+      "ResourceStatistics"
+      ( \x ->
+          ResourceStatistics'
+            Prelude.<$> (x Data..:? "totalBytesClassified")
+            Prelude.<*> (x Data..:? "totalDetections")
+            Prelude.<*> (x Data..:? "totalDetectionsSuppressed")
+            Prelude.<*> (x Data..:? "totalItemsClassified")
+            Prelude.<*> (x Data..:? "totalItemsSensitive")
+            Prelude.<*> (x Data..:? "totalItemsSkipped")
+            Prelude.<*> (x Data..:? "totalItemsSkippedInvalidEncryption")
+            Prelude.<*> (x Data..:? "totalItemsSkippedInvalidKms")
+            Prelude.<*> (x Data..:? "totalItemsSkippedPermissionDenied")
+      )
+
+instance Prelude.Hashable ResourceStatistics where
+  hashWithSalt _salt ResourceStatistics' {..} =
+    _salt
+      `Prelude.hashWithSalt` totalBytesClassified
+      `Prelude.hashWithSalt` totalDetections
+      `Prelude.hashWithSalt` totalDetectionsSuppressed
+      `Prelude.hashWithSalt` totalItemsClassified
+      `Prelude.hashWithSalt` totalItemsSensitive
+      `Prelude.hashWithSalt` totalItemsSkipped
+      `Prelude.hashWithSalt` totalItemsSkippedInvalidEncryption
+      `Prelude.hashWithSalt` totalItemsSkippedInvalidKms
+      `Prelude.hashWithSalt` totalItemsSkippedPermissionDenied
+
+instance Prelude.NFData ResourceStatistics where
+  rnf ResourceStatistics' {..} =
+    Prelude.rnf totalBytesClassified
+      `Prelude.seq` Prelude.rnf totalDetections
+      `Prelude.seq` Prelude.rnf totalDetectionsSuppressed
+      `Prelude.seq` Prelude.rnf totalItemsClassified
+      `Prelude.seq` Prelude.rnf totalItemsSensitive
+      `Prelude.seq` Prelude.rnf totalItemsSkipped
+      `Prelude.seq` Prelude.rnf totalItemsSkippedInvalidEncryption
+      `Prelude.seq` Prelude.rnf totalItemsSkippedInvalidKms
+      `Prelude.seq` Prelude.rnf totalItemsSkippedPermissionDenied
diff --git a/gen/Amazonka/MacieV2/Types/ResourcesAffected.hs b/gen/Amazonka/MacieV2/Types/ResourcesAffected.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ResourcesAffected.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.MacieV2.Types.ResourcesAffected
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ResourcesAffected where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.S3Bucket
+import Amazonka.MacieV2.Types.S3Object
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the resources that a finding applies to.
+--
+-- /See:/ 'newResourcesAffected' smart constructor.
+data ResourcesAffected = ResourcesAffected'
+  { -- | The details of the S3 bucket that the finding applies to.
+    s3Bucket :: Prelude.Maybe S3Bucket,
+    -- | The details of the S3 object that the finding applies to.
+    s3Object :: Prelude.Maybe S3Object
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourcesAffected' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Bucket', 'resourcesAffected_s3Bucket' - The details of the S3 bucket that the finding applies to.
+--
+-- 's3Object', 'resourcesAffected_s3Object' - The details of the S3 object that the finding applies to.
+newResourcesAffected ::
+  ResourcesAffected
+newResourcesAffected =
+  ResourcesAffected'
+    { s3Bucket = Prelude.Nothing,
+      s3Object = Prelude.Nothing
+    }
+
+-- | The details of the S3 bucket that the finding applies to.
+resourcesAffected_s3Bucket :: Lens.Lens' ResourcesAffected (Prelude.Maybe S3Bucket)
+resourcesAffected_s3Bucket = Lens.lens (\ResourcesAffected' {s3Bucket} -> s3Bucket) (\s@ResourcesAffected' {} a -> s {s3Bucket = a} :: ResourcesAffected)
+
+-- | The details of the S3 object that the finding applies to.
+resourcesAffected_s3Object :: Lens.Lens' ResourcesAffected (Prelude.Maybe S3Object)
+resourcesAffected_s3Object = Lens.lens (\ResourcesAffected' {s3Object} -> s3Object) (\s@ResourcesAffected' {} a -> s {s3Object = a} :: ResourcesAffected)
+
+instance Data.FromJSON ResourcesAffected where
+  parseJSON =
+    Data.withObject
+      "ResourcesAffected"
+      ( \x ->
+          ResourcesAffected'
+            Prelude.<$> (x Data..:? "s3Bucket")
+            Prelude.<*> (x Data..:? "s3Object")
+      )
+
+instance Prelude.Hashable ResourcesAffected where
+  hashWithSalt _salt ResourcesAffected' {..} =
+    _salt
+      `Prelude.hashWithSalt` s3Bucket
+      `Prelude.hashWithSalt` s3Object
+
+instance Prelude.NFData ResourcesAffected where
+  rnf ResourcesAffected' {..} =
+    Prelude.rnf s3Bucket
+      `Prelude.seq` Prelude.rnf s3Object
diff --git a/gen/Amazonka/MacieV2/Types/RevealConfiguration.hs b/gen/Amazonka/MacieV2/Types/RevealConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/RevealConfiguration.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.RevealConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.RevealConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.RevealStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the configuration settings for retrieving occurrences of
+-- sensitive data reported by findings, and the status of the configuration
+-- for an Amazon Macie account. When you enable the configuration for the
+-- first time, your request must specify an Key Management Service (KMS)
+-- key. Otherwise, an error occurs. Macie uses the specified key to encrypt
+-- the sensitive data that you retrieve.
+--
+-- /See:/ 'newRevealConfiguration' smart constructor.
+data RevealConfiguration = RevealConfiguration'
+  { -- | The Amazon Resource Name (ARN), ID, or alias of the KMS key to use to
+    -- encrypt sensitive data that\'s retrieved. The key must be an existing,
+    -- customer managed, symmetric encryption key that\'s in the same Amazon
+    -- Web Services Region as the Amazon Macie account.
+    --
+    -- If this value specifies an alias, it must include the following prefix:
+    -- alias\/. If this value specifies a key that\'s owned by another Amazon
+    -- Web Services account, it must specify the ARN of the key or the ARN of
+    -- the key\'s alias.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the configuration for the Amazon Macie account. In a
+    -- request, valid values are: ENABLED, enable the configuration for the
+    -- account; and, DISABLED, disable the configuration for the account. In a
+    -- response, possible values are: ENABLED, the configuration is currently
+    -- enabled for the account; and, DISABLED, the configuration is currently
+    -- disabled for the account.
+    status :: RevealStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevealConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'kmsKeyId', 'revealConfiguration_kmsKeyId' - The Amazon Resource Name (ARN), ID, or alias of the KMS key to use to
+-- encrypt sensitive data that\'s retrieved. The key must be an existing,
+-- customer managed, symmetric encryption key that\'s in the same Amazon
+-- Web Services Region as the Amazon Macie account.
+--
+-- If this value specifies an alias, it must include the following prefix:
+-- alias\/. If this value specifies a key that\'s owned by another Amazon
+-- Web Services account, it must specify the ARN of the key or the ARN of
+-- the key\'s alias.
+--
+-- 'status', 'revealConfiguration_status' - The status of the configuration for the Amazon Macie account. In a
+-- request, valid values are: ENABLED, enable the configuration for the
+-- account; and, DISABLED, disable the configuration for the account. In a
+-- response, possible values are: ENABLED, the configuration is currently
+-- enabled for the account; and, DISABLED, the configuration is currently
+-- disabled for the account.
+newRevealConfiguration ::
+  -- | 'status'
+  RevealStatus ->
+  RevealConfiguration
+newRevealConfiguration pStatus_ =
+  RevealConfiguration'
+    { kmsKeyId = Prelude.Nothing,
+      status = pStatus_
+    }
+
+-- | The Amazon Resource Name (ARN), ID, or alias of the KMS key to use to
+-- encrypt sensitive data that\'s retrieved. The key must be an existing,
+-- customer managed, symmetric encryption key that\'s in the same Amazon
+-- Web Services Region as the Amazon Macie account.
+--
+-- If this value specifies an alias, it must include the following prefix:
+-- alias\/. If this value specifies a key that\'s owned by another Amazon
+-- Web Services account, it must specify the ARN of the key or the ARN of
+-- the key\'s alias.
+revealConfiguration_kmsKeyId :: Lens.Lens' RevealConfiguration (Prelude.Maybe Prelude.Text)
+revealConfiguration_kmsKeyId = Lens.lens (\RevealConfiguration' {kmsKeyId} -> kmsKeyId) (\s@RevealConfiguration' {} a -> s {kmsKeyId = a} :: RevealConfiguration)
+
+-- | The status of the configuration for the Amazon Macie account. In a
+-- request, valid values are: ENABLED, enable the configuration for the
+-- account; and, DISABLED, disable the configuration for the account. In a
+-- response, possible values are: ENABLED, the configuration is currently
+-- enabled for the account; and, DISABLED, the configuration is currently
+-- disabled for the account.
+revealConfiguration_status :: Lens.Lens' RevealConfiguration RevealStatus
+revealConfiguration_status = Lens.lens (\RevealConfiguration' {status} -> status) (\s@RevealConfiguration' {} a -> s {status = a} :: RevealConfiguration)
+
+instance Data.FromJSON RevealConfiguration where
+  parseJSON =
+    Data.withObject
+      "RevealConfiguration"
+      ( \x ->
+          RevealConfiguration'
+            Prelude.<$> (x Data..:? "kmsKeyId")
+            Prelude.<*> (x Data..: "status")
+      )
+
+instance Prelude.Hashable RevealConfiguration where
+  hashWithSalt _salt RevealConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData RevealConfiguration where
+  rnf RevealConfiguration' {..} =
+    Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf status
+
+instance Data.ToJSON RevealConfiguration where
+  toJSON RevealConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("kmsKeyId" Data..=) Prelude.<$> kmsKeyId,
+            Prelude.Just ("status" Data..= status)
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/RevealRequestStatus.hs b/gen/Amazonka/MacieV2/Types/RevealRequestStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/RevealRequestStatus.hs
@@ -0,0 +1,78 @@
+{-# 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.MacieV2.Types.RevealRequestStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.RevealRequestStatus
+  ( RevealRequestStatus
+      ( ..,
+        RevealRequestStatus_ERROR,
+        RevealRequestStatus_PROCESSING,
+        RevealRequestStatus_SUCCESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status of a request to retrieve occurrences of sensitive data
+-- reported by a finding. Possible values are:
+newtype RevealRequestStatus = RevealRequestStatus'
+  { fromRevealRequestStatus ::
+      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 RevealRequestStatus_ERROR :: RevealRequestStatus
+pattern RevealRequestStatus_ERROR = RevealRequestStatus' "ERROR"
+
+pattern RevealRequestStatus_PROCESSING :: RevealRequestStatus
+pattern RevealRequestStatus_PROCESSING = RevealRequestStatus' "PROCESSING"
+
+pattern RevealRequestStatus_SUCCESS :: RevealRequestStatus
+pattern RevealRequestStatus_SUCCESS = RevealRequestStatus' "SUCCESS"
+
+{-# COMPLETE
+  RevealRequestStatus_ERROR,
+  RevealRequestStatus_PROCESSING,
+  RevealRequestStatus_SUCCESS,
+  RevealRequestStatus'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/RevealStatus.hs b/gen/Amazonka/MacieV2/Types/RevealStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/RevealStatus.hs
@@ -0,0 +1,73 @@
+{-# 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.MacieV2.Types.RevealStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.RevealStatus
+  ( RevealStatus
+      ( ..,
+        RevealStatus_DISABLED,
+        RevealStatus_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status of the configuration for retrieving occurrences of sensitive
+-- data reported by findings. Valid values are:
+newtype RevealStatus = RevealStatus'
+  { fromRevealStatus ::
+      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 RevealStatus_DISABLED :: RevealStatus
+pattern RevealStatus_DISABLED = RevealStatus' "DISABLED"
+
+pattern RevealStatus_ENABLED :: RevealStatus
+pattern RevealStatus_ENABLED = RevealStatus' "ENABLED"
+
+{-# COMPLETE
+  RevealStatus_DISABLED,
+  RevealStatus_ENABLED,
+  RevealStatus'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/S3Bucket.hs b/gen/Amazonka/MacieV2/Types/S3Bucket.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/S3Bucket.hs
@@ -0,0 +1,228 @@
+{-# 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.MacieV2.Types.S3Bucket
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.S3Bucket where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.AllowsUnencryptedObjectUploads
+import Amazonka.MacieV2.Types.BucketPublicAccess
+import Amazonka.MacieV2.Types.KeyValuePair
+import Amazonka.MacieV2.Types.S3BucketOwner
+import Amazonka.MacieV2.Types.ServerSideEncryption
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the S3 bucket that a finding applies to.
+--
+-- /See:/ 'newS3Bucket' smart constructor.
+data S3Bucket = S3Bucket'
+  { -- | Specifies whether the bucket policy for the bucket requires server-side
+    -- encryption of objects when objects are uploaded to the bucket. Possible
+    -- values are:
+    --
+    -- -   FALSE - The bucket policy requires server-side encryption of new
+    --     objects. PutObject requests must include a valid server-side
+    --     encryption header.
+    --
+    -- -   TRUE - The bucket doesn\'t have a bucket policy or it has a bucket
+    --     policy that doesn\'t require server-side encryption of new objects.
+    --     If a bucket policy exists, it doesn\'t require PutObject requests to
+    --     include a valid server-side encryption header.
+    --
+    -- -   UNKNOWN - Amazon Macie can\'t determine whether the bucket policy
+    --     requires server-side encryption of new objects.
+    --
+    -- Valid server-side encryption headers are: x-amz-server-side-encryption
+    -- with a value of AES256 or aws:kms, and
+    -- x-amz-server-side-encryption-customer-algorithm with a value of AES256.
+    allowsUnencryptedObjectUploads :: Prelude.Maybe AllowsUnencryptedObjectUploads,
+    -- | The Amazon Resource Name (ARN) of the bucket.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in UTC and extended ISO 8601 format, when the bucket
+    -- was created.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The type of server-side encryption that\'s used by default to encrypt
+    -- objects in the bucket.
+    defaultServerSideEncryption :: Prelude.Maybe ServerSideEncryption,
+    -- | The name of the bucket.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The display name and canonical user ID for the Amazon Web Services
+    -- account that owns the bucket.
+    owner :: Prelude.Maybe S3BucketOwner,
+    -- | The permissions settings that determine whether the bucket is publicly
+    -- accessible.
+    publicAccess :: Prelude.Maybe BucketPublicAccess,
+    -- | The tags that are associated with the bucket.
+    tags :: Prelude.Maybe [KeyValuePair]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3Bucket' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowsUnencryptedObjectUploads', 's3Bucket_allowsUnencryptedObjectUploads' - Specifies whether the bucket policy for the bucket requires server-side
+-- encryption of objects when objects are uploaded to the bucket. Possible
+-- values are:
+--
+-- -   FALSE - The bucket policy requires server-side encryption of new
+--     objects. PutObject requests must include a valid server-side
+--     encryption header.
+--
+-- -   TRUE - The bucket doesn\'t have a bucket policy or it has a bucket
+--     policy that doesn\'t require server-side encryption of new objects.
+--     If a bucket policy exists, it doesn\'t require PutObject requests to
+--     include a valid server-side encryption header.
+--
+-- -   UNKNOWN - Amazon Macie can\'t determine whether the bucket policy
+--     requires server-side encryption of new objects.
+--
+-- Valid server-side encryption headers are: x-amz-server-side-encryption
+-- with a value of AES256 or aws:kms, and
+-- x-amz-server-side-encryption-customer-algorithm with a value of AES256.
+--
+-- 'arn', 's3Bucket_arn' - The Amazon Resource Name (ARN) of the bucket.
+--
+-- 'createdAt', 's3Bucket_createdAt' - The date and time, in UTC and extended ISO 8601 format, when the bucket
+-- was created.
+--
+-- 'defaultServerSideEncryption', 's3Bucket_defaultServerSideEncryption' - The type of server-side encryption that\'s used by default to encrypt
+-- objects in the bucket.
+--
+-- 'name', 's3Bucket_name' - The name of the bucket.
+--
+-- 'owner', 's3Bucket_owner' - The display name and canonical user ID for the Amazon Web Services
+-- account that owns the bucket.
+--
+-- 'publicAccess', 's3Bucket_publicAccess' - The permissions settings that determine whether the bucket is publicly
+-- accessible.
+--
+-- 'tags', 's3Bucket_tags' - The tags that are associated with the bucket.
+newS3Bucket ::
+  S3Bucket
+newS3Bucket =
+  S3Bucket'
+    { allowsUnencryptedObjectUploads =
+        Prelude.Nothing,
+      arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      defaultServerSideEncryption = Prelude.Nothing,
+      name = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      publicAccess = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | Specifies whether the bucket policy for the bucket requires server-side
+-- encryption of objects when objects are uploaded to the bucket. Possible
+-- values are:
+--
+-- -   FALSE - The bucket policy requires server-side encryption of new
+--     objects. PutObject requests must include a valid server-side
+--     encryption header.
+--
+-- -   TRUE - The bucket doesn\'t have a bucket policy or it has a bucket
+--     policy that doesn\'t require server-side encryption of new objects.
+--     If a bucket policy exists, it doesn\'t require PutObject requests to
+--     include a valid server-side encryption header.
+--
+-- -   UNKNOWN - Amazon Macie can\'t determine whether the bucket policy
+--     requires server-side encryption of new objects.
+--
+-- Valid server-side encryption headers are: x-amz-server-side-encryption
+-- with a value of AES256 or aws:kms, and
+-- x-amz-server-side-encryption-customer-algorithm with a value of AES256.
+s3Bucket_allowsUnencryptedObjectUploads :: Lens.Lens' S3Bucket (Prelude.Maybe AllowsUnencryptedObjectUploads)
+s3Bucket_allowsUnencryptedObjectUploads = Lens.lens (\S3Bucket' {allowsUnencryptedObjectUploads} -> allowsUnencryptedObjectUploads) (\s@S3Bucket' {} a -> s {allowsUnencryptedObjectUploads = a} :: S3Bucket)
+
+-- | The Amazon Resource Name (ARN) of the bucket.
+s3Bucket_arn :: Lens.Lens' S3Bucket (Prelude.Maybe Prelude.Text)
+s3Bucket_arn = Lens.lens (\S3Bucket' {arn} -> arn) (\s@S3Bucket' {} a -> s {arn = a} :: S3Bucket)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the bucket
+-- was created.
+s3Bucket_createdAt :: Lens.Lens' S3Bucket (Prelude.Maybe Prelude.UTCTime)
+s3Bucket_createdAt = Lens.lens (\S3Bucket' {createdAt} -> createdAt) (\s@S3Bucket' {} a -> s {createdAt = a} :: S3Bucket) Prelude.. Lens.mapping Data._Time
+
+-- | The type of server-side encryption that\'s used by default to encrypt
+-- objects in the bucket.
+s3Bucket_defaultServerSideEncryption :: Lens.Lens' S3Bucket (Prelude.Maybe ServerSideEncryption)
+s3Bucket_defaultServerSideEncryption = Lens.lens (\S3Bucket' {defaultServerSideEncryption} -> defaultServerSideEncryption) (\s@S3Bucket' {} a -> s {defaultServerSideEncryption = a} :: S3Bucket)
+
+-- | The name of the bucket.
+s3Bucket_name :: Lens.Lens' S3Bucket (Prelude.Maybe Prelude.Text)
+s3Bucket_name = Lens.lens (\S3Bucket' {name} -> name) (\s@S3Bucket' {} a -> s {name = a} :: S3Bucket)
+
+-- | The display name and canonical user ID for the Amazon Web Services
+-- account that owns the bucket.
+s3Bucket_owner :: Lens.Lens' S3Bucket (Prelude.Maybe S3BucketOwner)
+s3Bucket_owner = Lens.lens (\S3Bucket' {owner} -> owner) (\s@S3Bucket' {} a -> s {owner = a} :: S3Bucket)
+
+-- | The permissions settings that determine whether the bucket is publicly
+-- accessible.
+s3Bucket_publicAccess :: Lens.Lens' S3Bucket (Prelude.Maybe BucketPublicAccess)
+s3Bucket_publicAccess = Lens.lens (\S3Bucket' {publicAccess} -> publicAccess) (\s@S3Bucket' {} a -> s {publicAccess = a} :: S3Bucket)
+
+-- | The tags that are associated with the bucket.
+s3Bucket_tags :: Lens.Lens' S3Bucket (Prelude.Maybe [KeyValuePair])
+s3Bucket_tags = Lens.lens (\S3Bucket' {tags} -> tags) (\s@S3Bucket' {} a -> s {tags = a} :: S3Bucket) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON S3Bucket where
+  parseJSON =
+    Data.withObject
+      "S3Bucket"
+      ( \x ->
+          S3Bucket'
+            Prelude.<$> (x Data..:? "allowsUnencryptedObjectUploads")
+            Prelude.<*> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "defaultServerSideEncryption")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "publicAccess")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable S3Bucket where
+  hashWithSalt _salt S3Bucket' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowsUnencryptedObjectUploads
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` defaultServerSideEncryption
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` publicAccess
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData S3Bucket where
+  rnf S3Bucket' {..} =
+    Prelude.rnf allowsUnencryptedObjectUploads
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf defaultServerSideEncryption
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf publicAccess
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/MacieV2/Types/S3BucketCriteriaForJob.hs b/gen/Amazonka/MacieV2/Types/S3BucketCriteriaForJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/S3BucketCriteriaForJob.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.S3BucketCriteriaForJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.S3BucketCriteriaForJob where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.CriteriaBlockForJob
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies property- and tag-based conditions that define criteria for
+-- including or excluding S3 buckets from a classification job. Exclude
+-- conditions take precedence over include conditions.
+--
+-- /See:/ 'newS3BucketCriteriaForJob' smart constructor.
+data S3BucketCriteriaForJob = S3BucketCriteriaForJob'
+  { -- | The property- and tag-based conditions that determine which buckets to
+    -- exclude from the job.
+    excludes :: Prelude.Maybe CriteriaBlockForJob,
+    -- | The property- and tag-based conditions that determine which buckets to
+    -- include in the job.
+    includes :: Prelude.Maybe CriteriaBlockForJob
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3BucketCriteriaForJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'excludes', 's3BucketCriteriaForJob_excludes' - The property- and tag-based conditions that determine which buckets to
+-- exclude from the job.
+--
+-- 'includes', 's3BucketCriteriaForJob_includes' - The property- and tag-based conditions that determine which buckets to
+-- include in the job.
+newS3BucketCriteriaForJob ::
+  S3BucketCriteriaForJob
+newS3BucketCriteriaForJob =
+  S3BucketCriteriaForJob'
+    { excludes = Prelude.Nothing,
+      includes = Prelude.Nothing
+    }
+
+-- | The property- and tag-based conditions that determine which buckets to
+-- exclude from the job.
+s3BucketCriteriaForJob_excludes :: Lens.Lens' S3BucketCriteriaForJob (Prelude.Maybe CriteriaBlockForJob)
+s3BucketCriteriaForJob_excludes = Lens.lens (\S3BucketCriteriaForJob' {excludes} -> excludes) (\s@S3BucketCriteriaForJob' {} a -> s {excludes = a} :: S3BucketCriteriaForJob)
+
+-- | The property- and tag-based conditions that determine which buckets to
+-- include in the job.
+s3BucketCriteriaForJob_includes :: Lens.Lens' S3BucketCriteriaForJob (Prelude.Maybe CriteriaBlockForJob)
+s3BucketCriteriaForJob_includes = Lens.lens (\S3BucketCriteriaForJob' {includes} -> includes) (\s@S3BucketCriteriaForJob' {} a -> s {includes = a} :: S3BucketCriteriaForJob)
+
+instance Data.FromJSON S3BucketCriteriaForJob where
+  parseJSON =
+    Data.withObject
+      "S3BucketCriteriaForJob"
+      ( \x ->
+          S3BucketCriteriaForJob'
+            Prelude.<$> (x Data..:? "excludes")
+            Prelude.<*> (x Data..:? "includes")
+      )
+
+instance Prelude.Hashable S3BucketCriteriaForJob where
+  hashWithSalt _salt S3BucketCriteriaForJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` excludes
+      `Prelude.hashWithSalt` includes
+
+instance Prelude.NFData S3BucketCriteriaForJob where
+  rnf S3BucketCriteriaForJob' {..} =
+    Prelude.rnf excludes
+      `Prelude.seq` Prelude.rnf includes
+
+instance Data.ToJSON S3BucketCriteriaForJob where
+  toJSON S3BucketCriteriaForJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("excludes" Data..=) Prelude.<$> excludes,
+            ("includes" Data..=) Prelude.<$> includes
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/S3BucketDefinitionForJob.hs b/gen/Amazonka/MacieV2/Types/S3BucketDefinitionForJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/S3BucketDefinitionForJob.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.MacieV2.Types.S3BucketDefinitionForJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.S3BucketDefinitionForJob where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies an Amazon Web Services account that owns S3 buckets for a
+-- classification job to analyze, and one or more specific buckets to
+-- analyze for that account.
+--
+-- /See:/ 'newS3BucketDefinitionForJob' smart constructor.
+data S3BucketDefinitionForJob = S3BucketDefinitionForJob'
+  { -- | The unique identifier for the Amazon Web Services account that owns the
+    -- buckets.
+    accountId :: Prelude.Text,
+    -- | An array that lists the names of the buckets.
+    buckets :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3BucketDefinitionForJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 's3BucketDefinitionForJob_accountId' - The unique identifier for the Amazon Web Services account that owns the
+-- buckets.
+--
+-- 'buckets', 's3BucketDefinitionForJob_buckets' - An array that lists the names of the buckets.
+newS3BucketDefinitionForJob ::
+  -- | 'accountId'
+  Prelude.Text ->
+  S3BucketDefinitionForJob
+newS3BucketDefinitionForJob pAccountId_ =
+  S3BucketDefinitionForJob'
+    { accountId = pAccountId_,
+      buckets = Prelude.mempty
+    }
+
+-- | The unique identifier for the Amazon Web Services account that owns the
+-- buckets.
+s3BucketDefinitionForJob_accountId :: Lens.Lens' S3BucketDefinitionForJob Prelude.Text
+s3BucketDefinitionForJob_accountId = Lens.lens (\S3BucketDefinitionForJob' {accountId} -> accountId) (\s@S3BucketDefinitionForJob' {} a -> s {accountId = a} :: S3BucketDefinitionForJob)
+
+-- | An array that lists the names of the buckets.
+s3BucketDefinitionForJob_buckets :: Lens.Lens' S3BucketDefinitionForJob [Prelude.Text]
+s3BucketDefinitionForJob_buckets = Lens.lens (\S3BucketDefinitionForJob' {buckets} -> buckets) (\s@S3BucketDefinitionForJob' {} a -> s {buckets = a} :: S3BucketDefinitionForJob) Prelude.. Lens.coerced
+
+instance Data.FromJSON S3BucketDefinitionForJob where
+  parseJSON =
+    Data.withObject
+      "S3BucketDefinitionForJob"
+      ( \x ->
+          S3BucketDefinitionForJob'
+            Prelude.<$> (x Data..: "accountId")
+            Prelude.<*> (x Data..:? "buckets" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable S3BucketDefinitionForJob where
+  hashWithSalt _salt S3BucketDefinitionForJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` buckets
+
+instance Prelude.NFData S3BucketDefinitionForJob where
+  rnf S3BucketDefinitionForJob' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf buckets
+
+instance Data.ToJSON S3BucketDefinitionForJob where
+  toJSON S3BucketDefinitionForJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("accountId" Data..= accountId),
+            Prelude.Just ("buckets" Data..= buckets)
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/S3BucketOwner.hs b/gen/Amazonka/MacieV2/Types/S3BucketOwner.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/S3BucketOwner.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.MacieV2.Types.S3BucketOwner
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.S3BucketOwner 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 information about the Amazon Web Services account that owns an
+-- S3 bucket.
+--
+-- /See:/ 'newS3BucketOwner' smart constructor.
+data S3BucketOwner = S3BucketOwner'
+  { -- | The display name of the account that owns the bucket.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The canonical user ID for the account that owns the bucket.
+    id :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3BucketOwner' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'displayName', 's3BucketOwner_displayName' - The display name of the account that owns the bucket.
+--
+-- 'id', 's3BucketOwner_id' - The canonical user ID for the account that owns the bucket.
+newS3BucketOwner ::
+  S3BucketOwner
+newS3BucketOwner =
+  S3BucketOwner'
+    { displayName = Prelude.Nothing,
+      id = Prelude.Nothing
+    }
+
+-- | The display name of the account that owns the bucket.
+s3BucketOwner_displayName :: Lens.Lens' S3BucketOwner (Prelude.Maybe Prelude.Text)
+s3BucketOwner_displayName = Lens.lens (\S3BucketOwner' {displayName} -> displayName) (\s@S3BucketOwner' {} a -> s {displayName = a} :: S3BucketOwner)
+
+-- | The canonical user ID for the account that owns the bucket.
+s3BucketOwner_id :: Lens.Lens' S3BucketOwner (Prelude.Maybe Prelude.Text)
+s3BucketOwner_id = Lens.lens (\S3BucketOwner' {id} -> id) (\s@S3BucketOwner' {} a -> s {id = a} :: S3BucketOwner)
+
+instance Data.FromJSON S3BucketOwner where
+  parseJSON =
+    Data.withObject
+      "S3BucketOwner"
+      ( \x ->
+          S3BucketOwner'
+            Prelude.<$> (x Data..:? "displayName")
+            Prelude.<*> (x Data..:? "id")
+      )
+
+instance Prelude.Hashable S3BucketOwner where
+  hashWithSalt _salt S3BucketOwner' {..} =
+    _salt
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData S3BucketOwner where
+  rnf S3BucketOwner' {..} =
+    Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf id
diff --git a/gen/Amazonka/MacieV2/Types/S3ClassificationScope.hs b/gen/Amazonka/MacieV2/Types/S3ClassificationScope.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/S3ClassificationScope.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.S3ClassificationScope
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.S3ClassificationScope where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.S3ClassificationScopeExclusion
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the S3 buckets that are excluded from automated sensitive data
+-- discovery for an Amazon Macie account.
+--
+-- /See:/ 'newS3ClassificationScope' smart constructor.
+data S3ClassificationScope = S3ClassificationScope'
+  { -- | The S3 buckets that are excluded.
+    excludes :: S3ClassificationScopeExclusion
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3ClassificationScope' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'excludes', 's3ClassificationScope_excludes' - The S3 buckets that are excluded.
+newS3ClassificationScope ::
+  -- | 'excludes'
+  S3ClassificationScopeExclusion ->
+  S3ClassificationScope
+newS3ClassificationScope pExcludes_ =
+  S3ClassificationScope' {excludes = pExcludes_}
+
+-- | The S3 buckets that are excluded.
+s3ClassificationScope_excludes :: Lens.Lens' S3ClassificationScope S3ClassificationScopeExclusion
+s3ClassificationScope_excludes = Lens.lens (\S3ClassificationScope' {excludes} -> excludes) (\s@S3ClassificationScope' {} a -> s {excludes = a} :: S3ClassificationScope)
+
+instance Data.FromJSON S3ClassificationScope where
+  parseJSON =
+    Data.withObject
+      "S3ClassificationScope"
+      ( \x ->
+          S3ClassificationScope'
+            Prelude.<$> (x Data..: "excludes")
+      )
+
+instance Prelude.Hashable S3ClassificationScope where
+  hashWithSalt _salt S3ClassificationScope' {..} =
+    _salt `Prelude.hashWithSalt` excludes
+
+instance Prelude.NFData S3ClassificationScope where
+  rnf S3ClassificationScope' {..} = Prelude.rnf excludes
diff --git a/gen/Amazonka/MacieV2/Types/S3ClassificationScopeExclusion.hs b/gen/Amazonka/MacieV2/Types/S3ClassificationScopeExclusion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/S3ClassificationScopeExclusion.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.MacieV2.Types.S3ClassificationScopeExclusion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.S3ClassificationScopeExclusion where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the names of the S3 buckets that are excluded from automated
+-- sensitive data discovery.
+--
+-- /See:/ 'newS3ClassificationScopeExclusion' smart constructor.
+data S3ClassificationScopeExclusion = S3ClassificationScopeExclusion'
+  { -- | An array of strings, one for each S3 bucket that is excluded. Each
+    -- string is the full name of an excluded bucket.
+    bucketNames :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3ClassificationScopeExclusion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucketNames', 's3ClassificationScopeExclusion_bucketNames' - An array of strings, one for each S3 bucket that is excluded. Each
+-- string is the full name of an excluded bucket.
+newS3ClassificationScopeExclusion ::
+  S3ClassificationScopeExclusion
+newS3ClassificationScopeExclusion =
+  S3ClassificationScopeExclusion'
+    { bucketNames =
+        Prelude.mempty
+    }
+
+-- | An array of strings, one for each S3 bucket that is excluded. Each
+-- string is the full name of an excluded bucket.
+s3ClassificationScopeExclusion_bucketNames :: Lens.Lens' S3ClassificationScopeExclusion [Prelude.Text]
+s3ClassificationScopeExclusion_bucketNames = Lens.lens (\S3ClassificationScopeExclusion' {bucketNames} -> bucketNames) (\s@S3ClassificationScopeExclusion' {} a -> s {bucketNames = a} :: S3ClassificationScopeExclusion) Prelude.. Lens.coerced
+
+instance Data.FromJSON S3ClassificationScopeExclusion where
+  parseJSON =
+    Data.withObject
+      "S3ClassificationScopeExclusion"
+      ( \x ->
+          S3ClassificationScopeExclusion'
+            Prelude.<$> (x Data..:? "bucketNames" Data..!= Prelude.mempty)
+      )
+
+instance
+  Prelude.Hashable
+    S3ClassificationScopeExclusion
+  where
+  hashWithSalt
+    _salt
+    S3ClassificationScopeExclusion' {..} =
+      _salt `Prelude.hashWithSalt` bucketNames
+
+instance
+  Prelude.NFData
+    S3ClassificationScopeExclusion
+  where
+  rnf S3ClassificationScopeExclusion' {..} =
+    Prelude.rnf bucketNames
diff --git a/gen/Amazonka/MacieV2/Types/S3ClassificationScopeExclusionUpdate.hs b/gen/Amazonka/MacieV2/Types/S3ClassificationScopeExclusionUpdate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/S3ClassificationScopeExclusionUpdate.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.S3ClassificationScopeExclusionUpdate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.S3ClassificationScopeExclusionUpdate where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.ClassificationScopeUpdateOperation
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies S3 buckets to add or remove from the exclusion list defined by
+-- the classification scope for an Amazon Macie account.
+--
+-- /See:/ 'newS3ClassificationScopeExclusionUpdate' smart constructor.
+data S3ClassificationScopeExclusionUpdate = S3ClassificationScopeExclusionUpdate'
+  { -- | Depending on the value specified for the update operation
+    -- (ClassificationScopeUpdateOperation), an array of strings that: lists
+    -- the names of buckets to add or remove from the list, or specifies a new
+    -- set of bucket names that overwrites all existing names in the list. Each
+    -- string must be the full name of an S3 bucket. Values are case sensitive.
+    bucketNames :: [Prelude.Text],
+    -- | Specifies how to apply the changes to the exclusion list. Valid values
+    -- are:
+    --
+    -- -   ADD - Append the specified bucket names to the current list.
+    --
+    -- -   REMOVE - Remove the specified bucket names from the current list.
+    --
+    -- -   REPLACE - Overwrite the current list with the specified list of
+    --     bucket names. If you specify this value, Amazon Macie removes all
+    --     existing names from the list and adds all the specified names to the
+    --     list.
+    operation :: ClassificationScopeUpdateOperation
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3ClassificationScopeExclusionUpdate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucketNames', 's3ClassificationScopeExclusionUpdate_bucketNames' - Depending on the value specified for the update operation
+-- (ClassificationScopeUpdateOperation), an array of strings that: lists
+-- the names of buckets to add or remove from the list, or specifies a new
+-- set of bucket names that overwrites all existing names in the list. Each
+-- string must be the full name of an S3 bucket. Values are case sensitive.
+--
+-- 'operation', 's3ClassificationScopeExclusionUpdate_operation' - Specifies how to apply the changes to the exclusion list. Valid values
+-- are:
+--
+-- -   ADD - Append the specified bucket names to the current list.
+--
+-- -   REMOVE - Remove the specified bucket names from the current list.
+--
+-- -   REPLACE - Overwrite the current list with the specified list of
+--     bucket names. If you specify this value, Amazon Macie removes all
+--     existing names from the list and adds all the specified names to the
+--     list.
+newS3ClassificationScopeExclusionUpdate ::
+  -- | 'operation'
+  ClassificationScopeUpdateOperation ->
+  S3ClassificationScopeExclusionUpdate
+newS3ClassificationScopeExclusionUpdate pOperation_ =
+  S3ClassificationScopeExclusionUpdate'
+    { bucketNames =
+        Prelude.mempty,
+      operation = pOperation_
+    }
+
+-- | Depending on the value specified for the update operation
+-- (ClassificationScopeUpdateOperation), an array of strings that: lists
+-- the names of buckets to add or remove from the list, or specifies a new
+-- set of bucket names that overwrites all existing names in the list. Each
+-- string must be the full name of an S3 bucket. Values are case sensitive.
+s3ClassificationScopeExclusionUpdate_bucketNames :: Lens.Lens' S3ClassificationScopeExclusionUpdate [Prelude.Text]
+s3ClassificationScopeExclusionUpdate_bucketNames = Lens.lens (\S3ClassificationScopeExclusionUpdate' {bucketNames} -> bucketNames) (\s@S3ClassificationScopeExclusionUpdate' {} a -> s {bucketNames = a} :: S3ClassificationScopeExclusionUpdate) Prelude.. Lens.coerced
+
+-- | Specifies how to apply the changes to the exclusion list. Valid values
+-- are:
+--
+-- -   ADD - Append the specified bucket names to the current list.
+--
+-- -   REMOVE - Remove the specified bucket names from the current list.
+--
+-- -   REPLACE - Overwrite the current list with the specified list of
+--     bucket names. If you specify this value, Amazon Macie removes all
+--     existing names from the list and adds all the specified names to the
+--     list.
+s3ClassificationScopeExclusionUpdate_operation :: Lens.Lens' S3ClassificationScopeExclusionUpdate ClassificationScopeUpdateOperation
+s3ClassificationScopeExclusionUpdate_operation = Lens.lens (\S3ClassificationScopeExclusionUpdate' {operation} -> operation) (\s@S3ClassificationScopeExclusionUpdate' {} a -> s {operation = a} :: S3ClassificationScopeExclusionUpdate)
+
+instance
+  Prelude.Hashable
+    S3ClassificationScopeExclusionUpdate
+  where
+  hashWithSalt
+    _salt
+    S3ClassificationScopeExclusionUpdate' {..} =
+      _salt
+        `Prelude.hashWithSalt` bucketNames
+        `Prelude.hashWithSalt` operation
+
+instance
+  Prelude.NFData
+    S3ClassificationScopeExclusionUpdate
+  where
+  rnf S3ClassificationScopeExclusionUpdate' {..} =
+    Prelude.rnf bucketNames
+      `Prelude.seq` Prelude.rnf operation
+
+instance
+  Data.ToJSON
+    S3ClassificationScopeExclusionUpdate
+  where
+  toJSON S3ClassificationScopeExclusionUpdate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("bucketNames" Data..= bucketNames),
+            Prelude.Just ("operation" Data..= operation)
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/S3ClassificationScopeUpdate.hs b/gen/Amazonka/MacieV2/Types/S3ClassificationScopeUpdate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/S3ClassificationScopeUpdate.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.S3ClassificationScopeUpdate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.S3ClassificationScopeUpdate where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.S3ClassificationScopeExclusionUpdate
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies changes to the list of S3 buckets that are excluded from
+-- automated sensitive data discovery for an Amazon Macie account.
+--
+-- /See:/ 'newS3ClassificationScopeUpdate' smart constructor.
+data S3ClassificationScopeUpdate = S3ClassificationScopeUpdate'
+  { -- | The names of the S3 buckets to add or remove from the list.
+    excludes :: S3ClassificationScopeExclusionUpdate
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3ClassificationScopeUpdate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'excludes', 's3ClassificationScopeUpdate_excludes' - The names of the S3 buckets to add or remove from the list.
+newS3ClassificationScopeUpdate ::
+  -- | 'excludes'
+  S3ClassificationScopeExclusionUpdate ->
+  S3ClassificationScopeUpdate
+newS3ClassificationScopeUpdate pExcludes_ =
+  S3ClassificationScopeUpdate' {excludes = pExcludes_}
+
+-- | The names of the S3 buckets to add or remove from the list.
+s3ClassificationScopeUpdate_excludes :: Lens.Lens' S3ClassificationScopeUpdate S3ClassificationScopeExclusionUpdate
+s3ClassificationScopeUpdate_excludes = Lens.lens (\S3ClassificationScopeUpdate' {excludes} -> excludes) (\s@S3ClassificationScopeUpdate' {} a -> s {excludes = a} :: S3ClassificationScopeUpdate)
+
+instance Prelude.Hashable S3ClassificationScopeUpdate where
+  hashWithSalt _salt S3ClassificationScopeUpdate' {..} =
+    _salt `Prelude.hashWithSalt` excludes
+
+instance Prelude.NFData S3ClassificationScopeUpdate where
+  rnf S3ClassificationScopeUpdate' {..} =
+    Prelude.rnf excludes
+
+instance Data.ToJSON S3ClassificationScopeUpdate where
+  toJSON S3ClassificationScopeUpdate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("excludes" Data..= excludes)]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/S3Destination.hs b/gen/Amazonka/MacieV2/Types/S3Destination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/S3Destination.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.MacieV2.Types.S3Destination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.S3Destination where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies an S3 bucket to store data classification results in, and the
+-- encryption settings to use when storing results in that bucket.
+--
+-- /See:/ 'newS3Destination' smart constructor.
+data S3Destination = S3Destination'
+  { -- | The path prefix to use in the path to the location in the bucket. This
+    -- prefix specifies where to store classification results in the bucket.
+    keyPrefix :: Prelude.Maybe Prelude.Text,
+    -- | The name of the bucket.
+    bucketName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the customer managed KMS key to use
+    -- for encryption of the results. This must be the ARN of an existing,
+    -- symmetric encryption KMS key that\'s in the same Amazon Web Services
+    -- Region as the bucket.
+    kmsKeyArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3Destination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'keyPrefix', 's3Destination_keyPrefix' - The path prefix to use in the path to the location in the bucket. This
+-- prefix specifies where to store classification results in the bucket.
+--
+-- 'bucketName', 's3Destination_bucketName' - The name of the bucket.
+--
+-- 'kmsKeyArn', 's3Destination_kmsKeyArn' - The Amazon Resource Name (ARN) of the customer managed KMS key to use
+-- for encryption of the results. This must be the ARN of an existing,
+-- symmetric encryption KMS key that\'s in the same Amazon Web Services
+-- Region as the bucket.
+newS3Destination ::
+  -- | 'bucketName'
+  Prelude.Text ->
+  -- | 'kmsKeyArn'
+  Prelude.Text ->
+  S3Destination
+newS3Destination pBucketName_ pKmsKeyArn_ =
+  S3Destination'
+    { keyPrefix = Prelude.Nothing,
+      bucketName = pBucketName_,
+      kmsKeyArn = pKmsKeyArn_
+    }
+
+-- | The path prefix to use in the path to the location in the bucket. This
+-- prefix specifies where to store classification results in the bucket.
+s3Destination_keyPrefix :: Lens.Lens' S3Destination (Prelude.Maybe Prelude.Text)
+s3Destination_keyPrefix = Lens.lens (\S3Destination' {keyPrefix} -> keyPrefix) (\s@S3Destination' {} a -> s {keyPrefix = a} :: S3Destination)
+
+-- | The name of the bucket.
+s3Destination_bucketName :: Lens.Lens' S3Destination Prelude.Text
+s3Destination_bucketName = Lens.lens (\S3Destination' {bucketName} -> bucketName) (\s@S3Destination' {} a -> s {bucketName = a} :: S3Destination)
+
+-- | The Amazon Resource Name (ARN) of the customer managed KMS key to use
+-- for encryption of the results. This must be the ARN of an existing,
+-- symmetric encryption KMS key that\'s in the same Amazon Web Services
+-- Region as the bucket.
+s3Destination_kmsKeyArn :: Lens.Lens' S3Destination Prelude.Text
+s3Destination_kmsKeyArn = Lens.lens (\S3Destination' {kmsKeyArn} -> kmsKeyArn) (\s@S3Destination' {} a -> s {kmsKeyArn = a} :: S3Destination)
+
+instance Data.FromJSON S3Destination where
+  parseJSON =
+    Data.withObject
+      "S3Destination"
+      ( \x ->
+          S3Destination'
+            Prelude.<$> (x Data..:? "keyPrefix")
+            Prelude.<*> (x Data..: "bucketName")
+            Prelude.<*> (x Data..: "kmsKeyArn")
+      )
+
+instance Prelude.Hashable S3Destination where
+  hashWithSalt _salt S3Destination' {..} =
+    _salt
+      `Prelude.hashWithSalt` keyPrefix
+      `Prelude.hashWithSalt` bucketName
+      `Prelude.hashWithSalt` kmsKeyArn
+
+instance Prelude.NFData S3Destination where
+  rnf S3Destination' {..} =
+    Prelude.rnf keyPrefix
+      `Prelude.seq` Prelude.rnf bucketName
+      `Prelude.seq` Prelude.rnf kmsKeyArn
+
+instance Data.ToJSON S3Destination where
+  toJSON S3Destination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("keyPrefix" Data..=) Prelude.<$> keyPrefix,
+            Prelude.Just ("bucketName" Data..= bucketName),
+            Prelude.Just ("kmsKeyArn" Data..= kmsKeyArn)
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/S3JobDefinition.hs b/gen/Amazonka/MacieV2/Types/S3JobDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/S3JobDefinition.hs
@@ -0,0 +1,150 @@
+{-# 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.MacieV2.Types.S3JobDefinition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.S3JobDefinition where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.S3BucketCriteriaForJob
+import Amazonka.MacieV2.Types.S3BucketDefinitionForJob
+import Amazonka.MacieV2.Types.Scoping
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies which S3 buckets contain the objects that a classification job
+-- analyzes, and the scope of that analysis. The bucket specification can
+-- be static (bucketDefinitions) or dynamic (bucketCriteria). If it\'s
+-- static, the job analyzes objects in the same predefined set of buckets
+-- each time the job runs. If it\'s dynamic, the job analyzes objects in
+-- any buckets that match the specified criteria each time the job starts
+-- to run.
+--
+-- /See:/ 'newS3JobDefinition' smart constructor.
+data S3JobDefinition = S3JobDefinition'
+  { -- | The property- and tag-based conditions that determine which S3 buckets
+    -- to include or exclude from the analysis. Each time the job runs, the job
+    -- uses these criteria to determine which buckets contain objects to
+    -- analyze. A job\'s definition can contain a bucketCriteria object or a
+    -- bucketDefinitions array, not both.
+    bucketCriteria :: Prelude.Maybe S3BucketCriteriaForJob,
+    -- | An array of objects, one for each Amazon Web Services account that owns
+    -- specific S3 buckets to analyze. Each object specifies the account ID for
+    -- an account and one or more buckets to analyze for that account. A job\'s
+    -- definition can contain a bucketDefinitions array or a bucketCriteria
+    -- object, not both.
+    bucketDefinitions :: Prelude.Maybe [S3BucketDefinitionForJob],
+    -- | The property- and tag-based conditions that determine which S3 objects
+    -- to include or exclude from the analysis. Each time the job runs, the job
+    -- uses these criteria to determine which objects to analyze.
+    scoping :: Prelude.Maybe Scoping
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3JobDefinition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucketCriteria', 's3JobDefinition_bucketCriteria' - The property- and tag-based conditions that determine which S3 buckets
+-- to include or exclude from the analysis. Each time the job runs, the job
+-- uses these criteria to determine which buckets contain objects to
+-- analyze. A job\'s definition can contain a bucketCriteria object or a
+-- bucketDefinitions array, not both.
+--
+-- 'bucketDefinitions', 's3JobDefinition_bucketDefinitions' - An array of objects, one for each Amazon Web Services account that owns
+-- specific S3 buckets to analyze. Each object specifies the account ID for
+-- an account and one or more buckets to analyze for that account. A job\'s
+-- definition can contain a bucketDefinitions array or a bucketCriteria
+-- object, not both.
+--
+-- 'scoping', 's3JobDefinition_scoping' - The property- and tag-based conditions that determine which S3 objects
+-- to include or exclude from the analysis. Each time the job runs, the job
+-- uses these criteria to determine which objects to analyze.
+newS3JobDefinition ::
+  S3JobDefinition
+newS3JobDefinition =
+  S3JobDefinition'
+    { bucketCriteria = Prelude.Nothing,
+      bucketDefinitions = Prelude.Nothing,
+      scoping = Prelude.Nothing
+    }
+
+-- | The property- and tag-based conditions that determine which S3 buckets
+-- to include or exclude from the analysis. Each time the job runs, the job
+-- uses these criteria to determine which buckets contain objects to
+-- analyze. A job\'s definition can contain a bucketCriteria object or a
+-- bucketDefinitions array, not both.
+s3JobDefinition_bucketCriteria :: Lens.Lens' S3JobDefinition (Prelude.Maybe S3BucketCriteriaForJob)
+s3JobDefinition_bucketCriteria = Lens.lens (\S3JobDefinition' {bucketCriteria} -> bucketCriteria) (\s@S3JobDefinition' {} a -> s {bucketCriteria = a} :: S3JobDefinition)
+
+-- | An array of objects, one for each Amazon Web Services account that owns
+-- specific S3 buckets to analyze. Each object specifies the account ID for
+-- an account and one or more buckets to analyze for that account. A job\'s
+-- definition can contain a bucketDefinitions array or a bucketCriteria
+-- object, not both.
+s3JobDefinition_bucketDefinitions :: Lens.Lens' S3JobDefinition (Prelude.Maybe [S3BucketDefinitionForJob])
+s3JobDefinition_bucketDefinitions = Lens.lens (\S3JobDefinition' {bucketDefinitions} -> bucketDefinitions) (\s@S3JobDefinition' {} a -> s {bucketDefinitions = a} :: S3JobDefinition) Prelude.. Lens.mapping Lens.coerced
+
+-- | The property- and tag-based conditions that determine which S3 objects
+-- to include or exclude from the analysis. Each time the job runs, the job
+-- uses these criteria to determine which objects to analyze.
+s3JobDefinition_scoping :: Lens.Lens' S3JobDefinition (Prelude.Maybe Scoping)
+s3JobDefinition_scoping = Lens.lens (\S3JobDefinition' {scoping} -> scoping) (\s@S3JobDefinition' {} a -> s {scoping = a} :: S3JobDefinition)
+
+instance Data.FromJSON S3JobDefinition where
+  parseJSON =
+    Data.withObject
+      "S3JobDefinition"
+      ( \x ->
+          S3JobDefinition'
+            Prelude.<$> (x Data..:? "bucketCriteria")
+            Prelude.<*> ( x
+                            Data..:? "bucketDefinitions"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "scoping")
+      )
+
+instance Prelude.Hashable S3JobDefinition where
+  hashWithSalt _salt S3JobDefinition' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucketCriteria
+      `Prelude.hashWithSalt` bucketDefinitions
+      `Prelude.hashWithSalt` scoping
+
+instance Prelude.NFData S3JobDefinition where
+  rnf S3JobDefinition' {..} =
+    Prelude.rnf bucketCriteria
+      `Prelude.seq` Prelude.rnf bucketDefinitions
+      `Prelude.seq` Prelude.rnf scoping
+
+instance Data.ToJSON S3JobDefinition where
+  toJSON S3JobDefinition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("bucketCriteria" Data..=)
+              Prelude.<$> bucketCriteria,
+            ("bucketDefinitions" Data..=)
+              Prelude.<$> bucketDefinitions,
+            ("scoping" Data..=) Prelude.<$> scoping
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/S3Object.hs b/gen/Amazonka/MacieV2/Types/S3Object.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/S3Object.hs
@@ -0,0 +1,225 @@
+{-# 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.MacieV2.Types.S3Object
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.S3Object where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.KeyValuePair
+import Amazonka.MacieV2.Types.ServerSideEncryption
+import Amazonka.MacieV2.Types.StorageClass
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the S3 object that a finding applies to.
+--
+-- /See:/ 'newS3Object' smart constructor.
+data S3Object = S3Object'
+  { -- | The Amazon Resource Name (ARN) of the bucket that contains the object.
+    bucketArn :: Prelude.Maybe Prelude.Text,
+    -- | The entity tag (ETag) that identifies the affected version of the
+    -- object. If the object was overwritten or changed after Amazon Macie
+    -- produced the finding, this value might be different from the current
+    -- ETag for the object.
+    eTag :: Prelude.Maybe Prelude.Text,
+    -- | The file name extension of the object. If the object doesn\'t have a
+    -- file name extension, this value is \"\".
+    extension :: Prelude.Maybe Prelude.Text,
+    -- | The full key (name) that\'s assigned to the object.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in UTC and extended ISO 8601 format, when the object
+    -- was last modified.
+    lastModified :: Prelude.Maybe Data.ISO8601,
+    -- | The path to the object, including the full key (name).
+    path :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether the object is publicly accessible due to the
+    -- combination of permissions settings that apply to the object.
+    publicAccess :: Prelude.Maybe Prelude.Bool,
+    -- | The type of server-side encryption that\'s used to encrypt the object.
+    serverSideEncryption :: Prelude.Maybe ServerSideEncryption,
+    -- | The total storage size, in bytes, of the object.
+    size :: Prelude.Maybe Prelude.Integer,
+    -- | The storage class of the object.
+    storageClass :: Prelude.Maybe StorageClass,
+    -- | The tags that are associated with the object.
+    tags :: Prelude.Maybe [KeyValuePair],
+    -- | The identifier for the affected version of the object.
+    versionId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3Object' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucketArn', 's3Object_bucketArn' - The Amazon Resource Name (ARN) of the bucket that contains the object.
+--
+-- 'eTag', 's3Object_eTag' - The entity tag (ETag) that identifies the affected version of the
+-- object. If the object was overwritten or changed after Amazon Macie
+-- produced the finding, this value might be different from the current
+-- ETag for the object.
+--
+-- 'extension', 's3Object_extension' - The file name extension of the object. If the object doesn\'t have a
+-- file name extension, this value is \"\".
+--
+-- 'key', 's3Object_key' - The full key (name) that\'s assigned to the object.
+--
+-- 'lastModified', 's3Object_lastModified' - The date and time, in UTC and extended ISO 8601 format, when the object
+-- was last modified.
+--
+-- 'path', 's3Object_path' - The path to the object, including the full key (name).
+--
+-- 'publicAccess', 's3Object_publicAccess' - Specifies whether the object is publicly accessible due to the
+-- combination of permissions settings that apply to the object.
+--
+-- 'serverSideEncryption', 's3Object_serverSideEncryption' - The type of server-side encryption that\'s used to encrypt the object.
+--
+-- 'size', 's3Object_size' - The total storage size, in bytes, of the object.
+--
+-- 'storageClass', 's3Object_storageClass' - The storage class of the object.
+--
+-- 'tags', 's3Object_tags' - The tags that are associated with the object.
+--
+-- 'versionId', 's3Object_versionId' - The identifier for the affected version of the object.
+newS3Object ::
+  S3Object
+newS3Object =
+  S3Object'
+    { bucketArn = Prelude.Nothing,
+      eTag = Prelude.Nothing,
+      extension = Prelude.Nothing,
+      key = Prelude.Nothing,
+      lastModified = Prelude.Nothing,
+      path = Prelude.Nothing,
+      publicAccess = Prelude.Nothing,
+      serverSideEncryption = Prelude.Nothing,
+      size = Prelude.Nothing,
+      storageClass = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      versionId = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the bucket that contains the object.
+s3Object_bucketArn :: Lens.Lens' S3Object (Prelude.Maybe Prelude.Text)
+s3Object_bucketArn = Lens.lens (\S3Object' {bucketArn} -> bucketArn) (\s@S3Object' {} a -> s {bucketArn = a} :: S3Object)
+
+-- | The entity tag (ETag) that identifies the affected version of the
+-- object. If the object was overwritten or changed after Amazon Macie
+-- produced the finding, this value might be different from the current
+-- ETag for the object.
+s3Object_eTag :: Lens.Lens' S3Object (Prelude.Maybe Prelude.Text)
+s3Object_eTag = Lens.lens (\S3Object' {eTag} -> eTag) (\s@S3Object' {} a -> s {eTag = a} :: S3Object)
+
+-- | The file name extension of the object. If the object doesn\'t have a
+-- file name extension, this value is \"\".
+s3Object_extension :: Lens.Lens' S3Object (Prelude.Maybe Prelude.Text)
+s3Object_extension = Lens.lens (\S3Object' {extension} -> extension) (\s@S3Object' {} a -> s {extension = a} :: S3Object)
+
+-- | The full key (name) that\'s assigned to the object.
+s3Object_key :: Lens.Lens' S3Object (Prelude.Maybe Prelude.Text)
+s3Object_key = Lens.lens (\S3Object' {key} -> key) (\s@S3Object' {} a -> s {key = a} :: S3Object)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the object
+-- was last modified.
+s3Object_lastModified :: Lens.Lens' S3Object (Prelude.Maybe Prelude.UTCTime)
+s3Object_lastModified = Lens.lens (\S3Object' {lastModified} -> lastModified) (\s@S3Object' {} a -> s {lastModified = a} :: S3Object) Prelude.. Lens.mapping Data._Time
+
+-- | The path to the object, including the full key (name).
+s3Object_path :: Lens.Lens' S3Object (Prelude.Maybe Prelude.Text)
+s3Object_path = Lens.lens (\S3Object' {path} -> path) (\s@S3Object' {} a -> s {path = a} :: S3Object)
+
+-- | Specifies whether the object is publicly accessible due to the
+-- combination of permissions settings that apply to the object.
+s3Object_publicAccess :: Lens.Lens' S3Object (Prelude.Maybe Prelude.Bool)
+s3Object_publicAccess = Lens.lens (\S3Object' {publicAccess} -> publicAccess) (\s@S3Object' {} a -> s {publicAccess = a} :: S3Object)
+
+-- | The type of server-side encryption that\'s used to encrypt the object.
+s3Object_serverSideEncryption :: Lens.Lens' S3Object (Prelude.Maybe ServerSideEncryption)
+s3Object_serverSideEncryption = Lens.lens (\S3Object' {serverSideEncryption} -> serverSideEncryption) (\s@S3Object' {} a -> s {serverSideEncryption = a} :: S3Object)
+
+-- | The total storage size, in bytes, of the object.
+s3Object_size :: Lens.Lens' S3Object (Prelude.Maybe Prelude.Integer)
+s3Object_size = Lens.lens (\S3Object' {size} -> size) (\s@S3Object' {} a -> s {size = a} :: S3Object)
+
+-- | The storage class of the object.
+s3Object_storageClass :: Lens.Lens' S3Object (Prelude.Maybe StorageClass)
+s3Object_storageClass = Lens.lens (\S3Object' {storageClass} -> storageClass) (\s@S3Object' {} a -> s {storageClass = a} :: S3Object)
+
+-- | The tags that are associated with the object.
+s3Object_tags :: Lens.Lens' S3Object (Prelude.Maybe [KeyValuePair])
+s3Object_tags = Lens.lens (\S3Object' {tags} -> tags) (\s@S3Object' {} a -> s {tags = a} :: S3Object) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier for the affected version of the object.
+s3Object_versionId :: Lens.Lens' S3Object (Prelude.Maybe Prelude.Text)
+s3Object_versionId = Lens.lens (\S3Object' {versionId} -> versionId) (\s@S3Object' {} a -> s {versionId = a} :: S3Object)
+
+instance Data.FromJSON S3Object where
+  parseJSON =
+    Data.withObject
+      "S3Object"
+      ( \x ->
+          S3Object'
+            Prelude.<$> (x Data..:? "bucketArn")
+            Prelude.<*> (x Data..:? "eTag")
+            Prelude.<*> (x Data..:? "extension")
+            Prelude.<*> (x Data..:? "key")
+            Prelude.<*> (x Data..:? "lastModified")
+            Prelude.<*> (x Data..:? "path")
+            Prelude.<*> (x Data..:? "publicAccess")
+            Prelude.<*> (x Data..:? "serverSideEncryption")
+            Prelude.<*> (x Data..:? "size")
+            Prelude.<*> (x Data..:? "storageClass")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "versionId")
+      )
+
+instance Prelude.Hashable S3Object where
+  hashWithSalt _salt S3Object' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucketArn
+      `Prelude.hashWithSalt` eTag
+      `Prelude.hashWithSalt` extension
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` lastModified
+      `Prelude.hashWithSalt` path
+      `Prelude.hashWithSalt` publicAccess
+      `Prelude.hashWithSalt` serverSideEncryption
+      `Prelude.hashWithSalt` size
+      `Prelude.hashWithSalt` storageClass
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` versionId
+
+instance Prelude.NFData S3Object where
+  rnf S3Object' {..} =
+    Prelude.rnf bucketArn
+      `Prelude.seq` Prelude.rnf eTag
+      `Prelude.seq` Prelude.rnf extension
+      `Prelude.seq` Prelude.rnf key
+      `Prelude.seq` Prelude.rnf lastModified
+      `Prelude.seq` Prelude.rnf path
+      `Prelude.seq` Prelude.rnf publicAccess
+      `Prelude.seq` Prelude.rnf serverSideEncryption
+      `Prelude.seq` Prelude.rnf size
+      `Prelude.seq` Prelude.rnf storageClass
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf versionId
diff --git a/gen/Amazonka/MacieV2/Types/S3WordsList.hs b/gen/Amazonka/MacieV2/Types/S3WordsList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/S3WordsList.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.MacieV2.Types.S3WordsList
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.S3WordsList 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 information about an S3 object that lists specific text to
+-- ignore.
+--
+-- /See:/ 'newS3WordsList' smart constructor.
+data S3WordsList = S3WordsList'
+  { -- | The full name of the S3 bucket that contains the object.
+    bucketName :: Prelude.Text,
+    -- | The full name (key) of the object.
+    objectKey :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3WordsList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucketName', 's3WordsList_bucketName' - The full name of the S3 bucket that contains the object.
+--
+-- 'objectKey', 's3WordsList_objectKey' - The full name (key) of the object.
+newS3WordsList ::
+  -- | 'bucketName'
+  Prelude.Text ->
+  -- | 'objectKey'
+  Prelude.Text ->
+  S3WordsList
+newS3WordsList pBucketName_ pObjectKey_ =
+  S3WordsList'
+    { bucketName = pBucketName_,
+      objectKey = pObjectKey_
+    }
+
+-- | The full name of the S3 bucket that contains the object.
+s3WordsList_bucketName :: Lens.Lens' S3WordsList Prelude.Text
+s3WordsList_bucketName = Lens.lens (\S3WordsList' {bucketName} -> bucketName) (\s@S3WordsList' {} a -> s {bucketName = a} :: S3WordsList)
+
+-- | The full name (key) of the object.
+s3WordsList_objectKey :: Lens.Lens' S3WordsList Prelude.Text
+s3WordsList_objectKey = Lens.lens (\S3WordsList' {objectKey} -> objectKey) (\s@S3WordsList' {} a -> s {objectKey = a} :: S3WordsList)
+
+instance Data.FromJSON S3WordsList where
+  parseJSON =
+    Data.withObject
+      "S3WordsList"
+      ( \x ->
+          S3WordsList'
+            Prelude.<$> (x Data..: "bucketName")
+            Prelude.<*> (x Data..: "objectKey")
+      )
+
+instance Prelude.Hashable S3WordsList where
+  hashWithSalt _salt S3WordsList' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucketName
+      `Prelude.hashWithSalt` objectKey
+
+instance Prelude.NFData S3WordsList where
+  rnf S3WordsList' {..} =
+    Prelude.rnf bucketName
+      `Prelude.seq` Prelude.rnf objectKey
+
+instance Data.ToJSON S3WordsList where
+  toJSON S3WordsList' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("bucketName" Data..= bucketName),
+            Prelude.Just ("objectKey" Data..= objectKey)
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/ScopeFilterKey.hs b/gen/Amazonka/MacieV2/Types/ScopeFilterKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ScopeFilterKey.hs
@@ -0,0 +1,83 @@
+{-# 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.MacieV2.Types.ScopeFilterKey
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ScopeFilterKey
+  ( ScopeFilterKey
+      ( ..,
+        ScopeFilterKey_OBJECT_EXTENSION,
+        ScopeFilterKey_OBJECT_KEY,
+        ScopeFilterKey_OBJECT_LAST_MODIFIED_DATE,
+        ScopeFilterKey_OBJECT_SIZE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The property to use in a condition that determines whether an S3 object
+-- is included or excluded from a classification job. Valid values are:
+newtype ScopeFilterKey = ScopeFilterKey'
+  { fromScopeFilterKey ::
+      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 ScopeFilterKey_OBJECT_EXTENSION :: ScopeFilterKey
+pattern ScopeFilterKey_OBJECT_EXTENSION = ScopeFilterKey' "OBJECT_EXTENSION"
+
+pattern ScopeFilterKey_OBJECT_KEY :: ScopeFilterKey
+pattern ScopeFilterKey_OBJECT_KEY = ScopeFilterKey' "OBJECT_KEY"
+
+pattern ScopeFilterKey_OBJECT_LAST_MODIFIED_DATE :: ScopeFilterKey
+pattern ScopeFilterKey_OBJECT_LAST_MODIFIED_DATE = ScopeFilterKey' "OBJECT_LAST_MODIFIED_DATE"
+
+pattern ScopeFilterKey_OBJECT_SIZE :: ScopeFilterKey
+pattern ScopeFilterKey_OBJECT_SIZE = ScopeFilterKey' "OBJECT_SIZE"
+
+{-# COMPLETE
+  ScopeFilterKey_OBJECT_EXTENSION,
+  ScopeFilterKey_OBJECT_KEY,
+  ScopeFilterKey_OBJECT_LAST_MODIFIED_DATE,
+  ScopeFilterKey_OBJECT_SIZE,
+  ScopeFilterKey'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/Scoping.hs b/gen/Amazonka/MacieV2/Types/Scoping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/Scoping.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.Scoping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.Scoping where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.JobScopingBlock
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies one or more property- and tag-based conditions that define
+-- criteria for including or excluding S3 objects from a classification
+-- job. Exclude conditions take precedence over include conditions.
+--
+-- /See:/ 'newScoping' smart constructor.
+data Scoping = Scoping'
+  { -- | The property- and tag-based conditions that determine which objects to
+    -- exclude from the analysis.
+    excludes :: Prelude.Maybe JobScopingBlock,
+    -- | The property- and tag-based conditions that determine which objects to
+    -- include in the analysis.
+    includes :: Prelude.Maybe JobScopingBlock
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Scoping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'excludes', 'scoping_excludes' - The property- and tag-based conditions that determine which objects to
+-- exclude from the analysis.
+--
+-- 'includes', 'scoping_includes' - The property- and tag-based conditions that determine which objects to
+-- include in the analysis.
+newScoping ::
+  Scoping
+newScoping =
+  Scoping'
+    { excludes = Prelude.Nothing,
+      includes = Prelude.Nothing
+    }
+
+-- | The property- and tag-based conditions that determine which objects to
+-- exclude from the analysis.
+scoping_excludes :: Lens.Lens' Scoping (Prelude.Maybe JobScopingBlock)
+scoping_excludes = Lens.lens (\Scoping' {excludes} -> excludes) (\s@Scoping' {} a -> s {excludes = a} :: Scoping)
+
+-- | The property- and tag-based conditions that determine which objects to
+-- include in the analysis.
+scoping_includes :: Lens.Lens' Scoping (Prelude.Maybe JobScopingBlock)
+scoping_includes = Lens.lens (\Scoping' {includes} -> includes) (\s@Scoping' {} a -> s {includes = a} :: Scoping)
+
+instance Data.FromJSON Scoping where
+  parseJSON =
+    Data.withObject
+      "Scoping"
+      ( \x ->
+          Scoping'
+            Prelude.<$> (x Data..:? "excludes")
+            Prelude.<*> (x Data..:? "includes")
+      )
+
+instance Prelude.Hashable Scoping where
+  hashWithSalt _salt Scoping' {..} =
+    _salt
+      `Prelude.hashWithSalt` excludes
+      `Prelude.hashWithSalt` includes
+
+instance Prelude.NFData Scoping where
+  rnf Scoping' {..} =
+    Prelude.rnf excludes
+      `Prelude.seq` Prelude.rnf includes
+
+instance Data.ToJSON Scoping where
+  toJSON Scoping' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("excludes" Data..=) Prelude.<$> excludes,
+            ("includes" Data..=) Prelude.<$> includes
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/SearchResourcesBucketCriteria.hs b/gen/Amazonka/MacieV2/Types/SearchResourcesBucketCriteria.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SearchResourcesBucketCriteria.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.MacieV2.Types.SearchResourcesBucketCriteria
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SearchResourcesBucketCriteria where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.SearchResourcesCriteriaBlock
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies property- and tag-based conditions that define filter criteria
+-- for including or excluding S3 buckets from the query results. Exclude
+-- conditions take precedence over include conditions.
+--
+-- /See:/ 'newSearchResourcesBucketCriteria' smart constructor.
+data SearchResourcesBucketCriteria = SearchResourcesBucketCriteria'
+  { -- | The property- and tag-based conditions that determine which buckets to
+    -- exclude from the results.
+    excludes :: Prelude.Maybe SearchResourcesCriteriaBlock,
+    -- | The property- and tag-based conditions that determine which buckets to
+    -- include in the results.
+    includes :: Prelude.Maybe SearchResourcesCriteriaBlock
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchResourcesBucketCriteria' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'excludes', 'searchResourcesBucketCriteria_excludes' - The property- and tag-based conditions that determine which buckets to
+-- exclude from the results.
+--
+-- 'includes', 'searchResourcesBucketCriteria_includes' - The property- and tag-based conditions that determine which buckets to
+-- include in the results.
+newSearchResourcesBucketCriteria ::
+  SearchResourcesBucketCriteria
+newSearchResourcesBucketCriteria =
+  SearchResourcesBucketCriteria'
+    { excludes =
+        Prelude.Nothing,
+      includes = Prelude.Nothing
+    }
+
+-- | The property- and tag-based conditions that determine which buckets to
+-- exclude from the results.
+searchResourcesBucketCriteria_excludes :: Lens.Lens' SearchResourcesBucketCriteria (Prelude.Maybe SearchResourcesCriteriaBlock)
+searchResourcesBucketCriteria_excludes = Lens.lens (\SearchResourcesBucketCriteria' {excludes} -> excludes) (\s@SearchResourcesBucketCriteria' {} a -> s {excludes = a} :: SearchResourcesBucketCriteria)
+
+-- | The property- and tag-based conditions that determine which buckets to
+-- include in the results.
+searchResourcesBucketCriteria_includes :: Lens.Lens' SearchResourcesBucketCriteria (Prelude.Maybe SearchResourcesCriteriaBlock)
+searchResourcesBucketCriteria_includes = Lens.lens (\SearchResourcesBucketCriteria' {includes} -> includes) (\s@SearchResourcesBucketCriteria' {} a -> s {includes = a} :: SearchResourcesBucketCriteria)
+
+instance
+  Prelude.Hashable
+    SearchResourcesBucketCriteria
+  where
+  hashWithSalt _salt SearchResourcesBucketCriteria' {..} =
+    _salt
+      `Prelude.hashWithSalt` excludes
+      `Prelude.hashWithSalt` includes
+
+instance Prelude.NFData SearchResourcesBucketCriteria where
+  rnf SearchResourcesBucketCriteria' {..} =
+    Prelude.rnf excludes
+      `Prelude.seq` Prelude.rnf includes
+
+instance Data.ToJSON SearchResourcesBucketCriteria where
+  toJSON SearchResourcesBucketCriteria' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("excludes" Data..=) Prelude.<$> excludes,
+            ("includes" Data..=) Prelude.<$> includes
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/SearchResourcesComparator.hs b/gen/Amazonka/MacieV2/Types/SearchResourcesComparator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SearchResourcesComparator.hs
@@ -0,0 +1,73 @@
+{-# 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.MacieV2.Types.SearchResourcesComparator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SearchResourcesComparator
+  ( SearchResourcesComparator
+      ( ..,
+        SearchResourcesComparator_EQ,
+        SearchResourcesComparator_NE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The operator to use in a condition that filters the results of a query.
+-- Valid values are:
+newtype SearchResourcesComparator = SearchResourcesComparator'
+  { fromSearchResourcesComparator ::
+      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 SearchResourcesComparator_EQ :: SearchResourcesComparator
+pattern SearchResourcesComparator_EQ = SearchResourcesComparator' "EQ"
+
+pattern SearchResourcesComparator_NE :: SearchResourcesComparator
+pattern SearchResourcesComparator_NE = SearchResourcesComparator' "NE"
+
+{-# COMPLETE
+  SearchResourcesComparator_EQ,
+  SearchResourcesComparator_NE,
+  SearchResourcesComparator'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/SearchResourcesCriteria.hs b/gen/Amazonka/MacieV2/Types/SearchResourcesCriteria.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SearchResourcesCriteria.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.MacieV2.Types.SearchResourcesCriteria
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SearchResourcesCriteria where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.SearchResourcesSimpleCriterion
+import Amazonka.MacieV2.Types.SearchResourcesTagCriterion
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a property- or tag-based filter condition for including or
+-- excluding Amazon Web Services resources from the query results.
+--
+-- /See:/ 'newSearchResourcesCriteria' smart constructor.
+data SearchResourcesCriteria = SearchResourcesCriteria'
+  { -- | A property-based condition that defines a property, operator, and one or
+    -- more values for including or excluding resources from the results.
+    simpleCriterion :: Prelude.Maybe SearchResourcesSimpleCriterion,
+    -- | A tag-based condition that defines an operator and tag keys, tag values,
+    -- or tag key and value pairs for including or excluding resources from the
+    -- results.
+    tagCriterion :: Prelude.Maybe SearchResourcesTagCriterion
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchResourcesCriteria' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'simpleCriterion', 'searchResourcesCriteria_simpleCriterion' - A property-based condition that defines a property, operator, and one or
+-- more values for including or excluding resources from the results.
+--
+-- 'tagCriterion', 'searchResourcesCriteria_tagCriterion' - A tag-based condition that defines an operator and tag keys, tag values,
+-- or tag key and value pairs for including or excluding resources from the
+-- results.
+newSearchResourcesCriteria ::
+  SearchResourcesCriteria
+newSearchResourcesCriteria =
+  SearchResourcesCriteria'
+    { simpleCriterion =
+        Prelude.Nothing,
+      tagCriterion = Prelude.Nothing
+    }
+
+-- | A property-based condition that defines a property, operator, and one or
+-- more values for including or excluding resources from the results.
+searchResourcesCriteria_simpleCriterion :: Lens.Lens' SearchResourcesCriteria (Prelude.Maybe SearchResourcesSimpleCriterion)
+searchResourcesCriteria_simpleCriterion = Lens.lens (\SearchResourcesCriteria' {simpleCriterion} -> simpleCriterion) (\s@SearchResourcesCriteria' {} a -> s {simpleCriterion = a} :: SearchResourcesCriteria)
+
+-- | A tag-based condition that defines an operator and tag keys, tag values,
+-- or tag key and value pairs for including or excluding resources from the
+-- results.
+searchResourcesCriteria_tagCriterion :: Lens.Lens' SearchResourcesCriteria (Prelude.Maybe SearchResourcesTagCriterion)
+searchResourcesCriteria_tagCriterion = Lens.lens (\SearchResourcesCriteria' {tagCriterion} -> tagCriterion) (\s@SearchResourcesCriteria' {} a -> s {tagCriterion = a} :: SearchResourcesCriteria)
+
+instance Prelude.Hashable SearchResourcesCriteria where
+  hashWithSalt _salt SearchResourcesCriteria' {..} =
+    _salt
+      `Prelude.hashWithSalt` simpleCriterion
+      `Prelude.hashWithSalt` tagCriterion
+
+instance Prelude.NFData SearchResourcesCriteria where
+  rnf SearchResourcesCriteria' {..} =
+    Prelude.rnf simpleCriterion
+      `Prelude.seq` Prelude.rnf tagCriterion
+
+instance Data.ToJSON SearchResourcesCriteria where
+  toJSON SearchResourcesCriteria' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("simpleCriterion" Data..=)
+              Prelude.<$> simpleCriterion,
+            ("tagCriterion" Data..=) Prelude.<$> tagCriterion
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/SearchResourcesCriteriaBlock.hs b/gen/Amazonka/MacieV2/Types/SearchResourcesCriteriaBlock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SearchResourcesCriteriaBlock.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.SearchResourcesCriteriaBlock
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SearchResourcesCriteriaBlock where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.SearchResourcesCriteria
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies property- and tag-based conditions that define filter criteria
+-- for including or excluding Amazon Web Services resources from the query
+-- results.
+--
+-- /See:/ 'newSearchResourcesCriteriaBlock' smart constructor.
+data SearchResourcesCriteriaBlock = SearchResourcesCriteriaBlock'
+  { -- | An array of objects, one for each property- or tag-based condition that
+    -- includes or excludes resources from the query results. If you specify
+    -- more than one condition, Amazon Macie uses AND logic to join the
+    -- conditions.
+    and :: Prelude.Maybe [SearchResourcesCriteria]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchResourcesCriteriaBlock' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'and', 'searchResourcesCriteriaBlock_and' - An array of objects, one for each property- or tag-based condition that
+-- includes or excludes resources from the query results. If you specify
+-- more than one condition, Amazon Macie uses AND logic to join the
+-- conditions.
+newSearchResourcesCriteriaBlock ::
+  SearchResourcesCriteriaBlock
+newSearchResourcesCriteriaBlock =
+  SearchResourcesCriteriaBlock'
+    { and =
+        Prelude.Nothing
+    }
+
+-- | An array of objects, one for each property- or tag-based condition that
+-- includes or excludes resources from the query results. If you specify
+-- more than one condition, Amazon Macie uses AND logic to join the
+-- conditions.
+searchResourcesCriteriaBlock_and :: Lens.Lens' SearchResourcesCriteriaBlock (Prelude.Maybe [SearchResourcesCriteria])
+searchResourcesCriteriaBlock_and = Lens.lens (\SearchResourcesCriteriaBlock' {and} -> and) (\s@SearchResourcesCriteriaBlock' {} a -> s {and = a} :: SearchResourcesCriteriaBlock) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    SearchResourcesCriteriaBlock
+  where
+  hashWithSalt _salt SearchResourcesCriteriaBlock' {..} =
+    _salt `Prelude.hashWithSalt` and
+
+instance Prelude.NFData SearchResourcesCriteriaBlock where
+  rnf SearchResourcesCriteriaBlock' {..} =
+    Prelude.rnf and
+
+instance Data.ToJSON SearchResourcesCriteriaBlock where
+  toJSON SearchResourcesCriteriaBlock' {..} =
+    Data.object
+      (Prelude.catMaybes [("and" Data..=) Prelude.<$> and])
diff --git a/gen/Amazonka/MacieV2/Types/SearchResourcesSimpleCriterion.hs b/gen/Amazonka/MacieV2/Types/SearchResourcesSimpleCriterion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SearchResourcesSimpleCriterion.hs
@@ -0,0 +1,170 @@
+{-# 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.MacieV2.Types.SearchResourcesSimpleCriterion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SearchResourcesSimpleCriterion where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.SearchResourcesComparator
+import Amazonka.MacieV2.Types.SearchResourcesSimpleCriterionKey
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a property-based filter condition that determines which Amazon
+-- Web Services resources are included or excluded from the query results.
+--
+-- /See:/ 'newSearchResourcesSimpleCriterion' smart constructor.
+data SearchResourcesSimpleCriterion = SearchResourcesSimpleCriterion'
+  { -- | The operator to use in the condition. Valid values are EQ (equals) and
+    -- NE (not equals).
+    comparator :: Prelude.Maybe SearchResourcesComparator,
+    -- | The property to use in the condition.
+    key :: Prelude.Maybe SearchResourcesSimpleCriterionKey,
+    -- | An array that lists one or more values to use in the condition. If you
+    -- specify multiple values, Amazon Macie uses OR logic to join the values.
+    -- Valid values for each supported property (key) are:
+    --
+    -- -   ACCOUNT_ID - A string that represents the unique identifier for the
+    --     Amazon Web Services account that owns the resource.
+    --
+    -- -   S3_BUCKET_EFFECTIVE_PERMISSION - A string that represents an
+    --     enumerated value that Macie defines for the
+    --     <https://docs.aws.amazon.com/macie/latest/APIReference/datasources-s3.html#datasources-s3-prop-bucketpublicaccess-effectivepermission BucketPublicAccess.effectivePermission>
+    --     property of an S3 bucket.
+    --
+    -- -   S3_BUCKET_NAME - A string that represents the name of an S3 bucket.
+    --
+    -- -   S3_BUCKET_SHARED_ACCESS - A string that represents an enumerated
+    --     value that Macie defines for the
+    --     <https://docs.aws.amazon.com/macie/latest/APIReference/datasources-s3.html#datasources-s3-prop-bucketmetadata-sharedaccess BucketMetadata.sharedAccess>
+    --     property of an S3 bucket.
+    --
+    -- Values are case sensitive. Also, Macie doesn\'t support use of partial
+    -- values or wildcard characters in values.
+    values :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchResourcesSimpleCriterion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comparator', 'searchResourcesSimpleCriterion_comparator' - The operator to use in the condition. Valid values are EQ (equals) and
+-- NE (not equals).
+--
+-- 'key', 'searchResourcesSimpleCriterion_key' - The property to use in the condition.
+--
+-- 'values', 'searchResourcesSimpleCriterion_values' - An array that lists one or more values to use in the condition. If you
+-- specify multiple values, Amazon Macie uses OR logic to join the values.
+-- Valid values for each supported property (key) are:
+--
+-- -   ACCOUNT_ID - A string that represents the unique identifier for the
+--     Amazon Web Services account that owns the resource.
+--
+-- -   S3_BUCKET_EFFECTIVE_PERMISSION - A string that represents an
+--     enumerated value that Macie defines for the
+--     <https://docs.aws.amazon.com/macie/latest/APIReference/datasources-s3.html#datasources-s3-prop-bucketpublicaccess-effectivepermission BucketPublicAccess.effectivePermission>
+--     property of an S3 bucket.
+--
+-- -   S3_BUCKET_NAME - A string that represents the name of an S3 bucket.
+--
+-- -   S3_BUCKET_SHARED_ACCESS - A string that represents an enumerated
+--     value that Macie defines for the
+--     <https://docs.aws.amazon.com/macie/latest/APIReference/datasources-s3.html#datasources-s3-prop-bucketmetadata-sharedaccess BucketMetadata.sharedAccess>
+--     property of an S3 bucket.
+--
+-- Values are case sensitive. Also, Macie doesn\'t support use of partial
+-- values or wildcard characters in values.
+newSearchResourcesSimpleCriterion ::
+  SearchResourcesSimpleCriterion
+newSearchResourcesSimpleCriterion =
+  SearchResourcesSimpleCriterion'
+    { comparator =
+        Prelude.Nothing,
+      key = Prelude.Nothing,
+      values = Prelude.Nothing
+    }
+
+-- | The operator to use in the condition. Valid values are EQ (equals) and
+-- NE (not equals).
+searchResourcesSimpleCriterion_comparator :: Lens.Lens' SearchResourcesSimpleCriterion (Prelude.Maybe SearchResourcesComparator)
+searchResourcesSimpleCriterion_comparator = Lens.lens (\SearchResourcesSimpleCriterion' {comparator} -> comparator) (\s@SearchResourcesSimpleCriterion' {} a -> s {comparator = a} :: SearchResourcesSimpleCriterion)
+
+-- | The property to use in the condition.
+searchResourcesSimpleCriterion_key :: Lens.Lens' SearchResourcesSimpleCriterion (Prelude.Maybe SearchResourcesSimpleCriterionKey)
+searchResourcesSimpleCriterion_key = Lens.lens (\SearchResourcesSimpleCriterion' {key} -> key) (\s@SearchResourcesSimpleCriterion' {} a -> s {key = a} :: SearchResourcesSimpleCriterion)
+
+-- | An array that lists one or more values to use in the condition. If you
+-- specify multiple values, Amazon Macie uses OR logic to join the values.
+-- Valid values for each supported property (key) are:
+--
+-- -   ACCOUNT_ID - A string that represents the unique identifier for the
+--     Amazon Web Services account that owns the resource.
+--
+-- -   S3_BUCKET_EFFECTIVE_PERMISSION - A string that represents an
+--     enumerated value that Macie defines for the
+--     <https://docs.aws.amazon.com/macie/latest/APIReference/datasources-s3.html#datasources-s3-prop-bucketpublicaccess-effectivepermission BucketPublicAccess.effectivePermission>
+--     property of an S3 bucket.
+--
+-- -   S3_BUCKET_NAME - A string that represents the name of an S3 bucket.
+--
+-- -   S3_BUCKET_SHARED_ACCESS - A string that represents an enumerated
+--     value that Macie defines for the
+--     <https://docs.aws.amazon.com/macie/latest/APIReference/datasources-s3.html#datasources-s3-prop-bucketmetadata-sharedaccess BucketMetadata.sharedAccess>
+--     property of an S3 bucket.
+--
+-- Values are case sensitive. Also, Macie doesn\'t support use of partial
+-- values or wildcard characters in values.
+searchResourcesSimpleCriterion_values :: Lens.Lens' SearchResourcesSimpleCriterion (Prelude.Maybe [Prelude.Text])
+searchResourcesSimpleCriterion_values = Lens.lens (\SearchResourcesSimpleCriterion' {values} -> values) (\s@SearchResourcesSimpleCriterion' {} a -> s {values = a} :: SearchResourcesSimpleCriterion) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    SearchResourcesSimpleCriterion
+  where
+  hashWithSalt
+    _salt
+    SearchResourcesSimpleCriterion' {..} =
+      _salt
+        `Prelude.hashWithSalt` comparator
+        `Prelude.hashWithSalt` key
+        `Prelude.hashWithSalt` values
+
+instance
+  Prelude.NFData
+    SearchResourcesSimpleCriterion
+  where
+  rnf SearchResourcesSimpleCriterion' {..} =
+    Prelude.rnf comparator
+      `Prelude.seq` Prelude.rnf key
+      `Prelude.seq` Prelude.rnf values
+
+instance Data.ToJSON SearchResourcesSimpleCriterion where
+  toJSON SearchResourcesSimpleCriterion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("comparator" Data..=) Prelude.<$> comparator,
+            ("key" Data..=) Prelude.<$> key,
+            ("values" Data..=) Prelude.<$> values
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/SearchResourcesSimpleCriterionKey.hs b/gen/Amazonka/MacieV2/Types/SearchResourcesSimpleCriterionKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SearchResourcesSimpleCriterionKey.hs
@@ -0,0 +1,83 @@
+{-# 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.MacieV2.Types.SearchResourcesSimpleCriterionKey
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SearchResourcesSimpleCriterionKey
+  ( SearchResourcesSimpleCriterionKey
+      ( ..,
+        SearchResourcesSimpleCriterionKey_ACCOUNT_ID,
+        SearchResourcesSimpleCriterionKey_S3_BUCKET_EFFECTIVE_PERMISSION,
+        SearchResourcesSimpleCriterionKey_S3_BUCKET_NAME,
+        SearchResourcesSimpleCriterionKey_S3_BUCKET_SHARED_ACCESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The property to use in a condition that filters the query results. Valid
+-- values are:
+newtype SearchResourcesSimpleCriterionKey = SearchResourcesSimpleCriterionKey'
+  { fromSearchResourcesSimpleCriterionKey ::
+      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 SearchResourcesSimpleCriterionKey_ACCOUNT_ID :: SearchResourcesSimpleCriterionKey
+pattern SearchResourcesSimpleCriterionKey_ACCOUNT_ID = SearchResourcesSimpleCriterionKey' "ACCOUNT_ID"
+
+pattern SearchResourcesSimpleCriterionKey_S3_BUCKET_EFFECTIVE_PERMISSION :: SearchResourcesSimpleCriterionKey
+pattern SearchResourcesSimpleCriterionKey_S3_BUCKET_EFFECTIVE_PERMISSION = SearchResourcesSimpleCriterionKey' "S3_BUCKET_EFFECTIVE_PERMISSION"
+
+pattern SearchResourcesSimpleCriterionKey_S3_BUCKET_NAME :: SearchResourcesSimpleCriterionKey
+pattern SearchResourcesSimpleCriterionKey_S3_BUCKET_NAME = SearchResourcesSimpleCriterionKey' "S3_BUCKET_NAME"
+
+pattern SearchResourcesSimpleCriterionKey_S3_BUCKET_SHARED_ACCESS :: SearchResourcesSimpleCriterionKey
+pattern SearchResourcesSimpleCriterionKey_S3_BUCKET_SHARED_ACCESS = SearchResourcesSimpleCriterionKey' "S3_BUCKET_SHARED_ACCESS"
+
+{-# COMPLETE
+  SearchResourcesSimpleCriterionKey_ACCOUNT_ID,
+  SearchResourcesSimpleCriterionKey_S3_BUCKET_EFFECTIVE_PERMISSION,
+  SearchResourcesSimpleCriterionKey_S3_BUCKET_NAME,
+  SearchResourcesSimpleCriterionKey_S3_BUCKET_SHARED_ACCESS,
+  SearchResourcesSimpleCriterionKey'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/SearchResourcesSortAttributeName.hs b/gen/Amazonka/MacieV2/Types/SearchResourcesSortAttributeName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SearchResourcesSortAttributeName.hs
@@ -0,0 +1,82 @@
+{-# 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.MacieV2.Types.SearchResourcesSortAttributeName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SearchResourcesSortAttributeName
+  ( SearchResourcesSortAttributeName
+      ( ..,
+        SearchResourcesSortAttributeName_ACCOUNT_ID,
+        SearchResourcesSortAttributeName_RESOURCE_NAME,
+        SearchResourcesSortAttributeName_S3_CLASSIFIABLE_OBJECT_COUNT,
+        SearchResourcesSortAttributeName_S3_CLASSIFIABLE_SIZE_IN_BYTES
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The property to sort the query results by. Valid values are:
+newtype SearchResourcesSortAttributeName = SearchResourcesSortAttributeName'
+  { fromSearchResourcesSortAttributeName ::
+      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 SearchResourcesSortAttributeName_ACCOUNT_ID :: SearchResourcesSortAttributeName
+pattern SearchResourcesSortAttributeName_ACCOUNT_ID = SearchResourcesSortAttributeName' "ACCOUNT_ID"
+
+pattern SearchResourcesSortAttributeName_RESOURCE_NAME :: SearchResourcesSortAttributeName
+pattern SearchResourcesSortAttributeName_RESOURCE_NAME = SearchResourcesSortAttributeName' "RESOURCE_NAME"
+
+pattern SearchResourcesSortAttributeName_S3_CLASSIFIABLE_OBJECT_COUNT :: SearchResourcesSortAttributeName
+pattern SearchResourcesSortAttributeName_S3_CLASSIFIABLE_OBJECT_COUNT = SearchResourcesSortAttributeName' "S3_CLASSIFIABLE_OBJECT_COUNT"
+
+pattern SearchResourcesSortAttributeName_S3_CLASSIFIABLE_SIZE_IN_BYTES :: SearchResourcesSortAttributeName
+pattern SearchResourcesSortAttributeName_S3_CLASSIFIABLE_SIZE_IN_BYTES = SearchResourcesSortAttributeName' "S3_CLASSIFIABLE_SIZE_IN_BYTES"
+
+{-# COMPLETE
+  SearchResourcesSortAttributeName_ACCOUNT_ID,
+  SearchResourcesSortAttributeName_RESOURCE_NAME,
+  SearchResourcesSortAttributeName_S3_CLASSIFIABLE_OBJECT_COUNT,
+  SearchResourcesSortAttributeName_S3_CLASSIFIABLE_SIZE_IN_BYTES,
+  SearchResourcesSortAttributeName'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/SearchResourcesSortCriteria.hs b/gen/Amazonka/MacieV2/Types/SearchResourcesSortCriteria.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SearchResourcesSortCriteria.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.MacieV2.Types.SearchResourcesSortCriteria
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SearchResourcesSortCriteria where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.OrderBy
+import Amazonka.MacieV2.Types.SearchResourcesSortAttributeName
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies criteria for sorting the results of a query for information
+-- about Amazon Web Services resources that Amazon Macie monitors and
+-- analyzes.
+--
+-- /See:/ 'newSearchResourcesSortCriteria' smart constructor.
+data SearchResourcesSortCriteria = SearchResourcesSortCriteria'
+  { -- | The property to sort the results by.
+    attributeName :: Prelude.Maybe SearchResourcesSortAttributeName,
+    -- | The sort order to apply to the results, based on the value for the
+    -- property specified by the attributeName property. Valid values are: ASC,
+    -- sort the results in ascending order; and, DESC, sort the results in
+    -- descending order.
+    orderBy :: Prelude.Maybe OrderBy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchResourcesSortCriteria' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributeName', 'searchResourcesSortCriteria_attributeName' - The property to sort the results by.
+--
+-- 'orderBy', 'searchResourcesSortCriteria_orderBy' - The sort order to apply to the results, based on the value for the
+-- property specified by the attributeName property. Valid values are: ASC,
+-- sort the results in ascending order; and, DESC, sort the results in
+-- descending order.
+newSearchResourcesSortCriteria ::
+  SearchResourcesSortCriteria
+newSearchResourcesSortCriteria =
+  SearchResourcesSortCriteria'
+    { attributeName =
+        Prelude.Nothing,
+      orderBy = Prelude.Nothing
+    }
+
+-- | The property to sort the results by.
+searchResourcesSortCriteria_attributeName :: Lens.Lens' SearchResourcesSortCriteria (Prelude.Maybe SearchResourcesSortAttributeName)
+searchResourcesSortCriteria_attributeName = Lens.lens (\SearchResourcesSortCriteria' {attributeName} -> attributeName) (\s@SearchResourcesSortCriteria' {} a -> s {attributeName = a} :: SearchResourcesSortCriteria)
+
+-- | The sort order to apply to the results, based on the value for the
+-- property specified by the attributeName property. Valid values are: ASC,
+-- sort the results in ascending order; and, DESC, sort the results in
+-- descending order.
+searchResourcesSortCriteria_orderBy :: Lens.Lens' SearchResourcesSortCriteria (Prelude.Maybe OrderBy)
+searchResourcesSortCriteria_orderBy = Lens.lens (\SearchResourcesSortCriteria' {orderBy} -> orderBy) (\s@SearchResourcesSortCriteria' {} a -> s {orderBy = a} :: SearchResourcesSortCriteria)
+
+instance Prelude.Hashable SearchResourcesSortCriteria where
+  hashWithSalt _salt SearchResourcesSortCriteria' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributeName
+      `Prelude.hashWithSalt` orderBy
+
+instance Prelude.NFData SearchResourcesSortCriteria where
+  rnf SearchResourcesSortCriteria' {..} =
+    Prelude.rnf attributeName
+      `Prelude.seq` Prelude.rnf orderBy
+
+instance Data.ToJSON SearchResourcesSortCriteria where
+  toJSON SearchResourcesSortCriteria' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("attributeName" Data..=) Prelude.<$> attributeName,
+            ("orderBy" Data..=) Prelude.<$> orderBy
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/SearchResourcesTagCriterion.hs b/gen/Amazonka/MacieV2/Types/SearchResourcesTagCriterion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SearchResourcesTagCriterion.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.MacieV2.Types.SearchResourcesTagCriterion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SearchResourcesTagCriterion where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.SearchResourcesComparator
+import Amazonka.MacieV2.Types.SearchResourcesTagCriterionPair
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a tag-based filter condition that determines which Amazon Web
+-- Services resources are included or excluded from the query results.
+--
+-- /See:/ 'newSearchResourcesTagCriterion' smart constructor.
+data SearchResourcesTagCriterion = SearchResourcesTagCriterion'
+  { -- | The operator to use in the condition. Valid values are EQ (equals) and
+    -- NE (not equals).
+    comparator :: Prelude.Maybe SearchResourcesComparator,
+    -- | The tag keys, tag values, or tag key and value pairs to use in the
+    -- condition.
+    tagValues :: Prelude.Maybe [SearchResourcesTagCriterionPair]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchResourcesTagCriterion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comparator', 'searchResourcesTagCriterion_comparator' - The operator to use in the condition. Valid values are EQ (equals) and
+-- NE (not equals).
+--
+-- 'tagValues', 'searchResourcesTagCriterion_tagValues' - The tag keys, tag values, or tag key and value pairs to use in the
+-- condition.
+newSearchResourcesTagCriterion ::
+  SearchResourcesTagCriterion
+newSearchResourcesTagCriterion =
+  SearchResourcesTagCriterion'
+    { comparator =
+        Prelude.Nothing,
+      tagValues = Prelude.Nothing
+    }
+
+-- | The operator to use in the condition. Valid values are EQ (equals) and
+-- NE (not equals).
+searchResourcesTagCriterion_comparator :: Lens.Lens' SearchResourcesTagCriterion (Prelude.Maybe SearchResourcesComparator)
+searchResourcesTagCriterion_comparator = Lens.lens (\SearchResourcesTagCriterion' {comparator} -> comparator) (\s@SearchResourcesTagCriterion' {} a -> s {comparator = a} :: SearchResourcesTagCriterion)
+
+-- | The tag keys, tag values, or tag key and value pairs to use in the
+-- condition.
+searchResourcesTagCriterion_tagValues :: Lens.Lens' SearchResourcesTagCriterion (Prelude.Maybe [SearchResourcesTagCriterionPair])
+searchResourcesTagCriterion_tagValues = Lens.lens (\SearchResourcesTagCriterion' {tagValues} -> tagValues) (\s@SearchResourcesTagCriterion' {} a -> s {tagValues = a} :: SearchResourcesTagCriterion) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable SearchResourcesTagCriterion where
+  hashWithSalt _salt SearchResourcesTagCriterion' {..} =
+    _salt
+      `Prelude.hashWithSalt` comparator
+      `Prelude.hashWithSalt` tagValues
+
+instance Prelude.NFData SearchResourcesTagCriterion where
+  rnf SearchResourcesTagCriterion' {..} =
+    Prelude.rnf comparator
+      `Prelude.seq` Prelude.rnf tagValues
+
+instance Data.ToJSON SearchResourcesTagCriterion where
+  toJSON SearchResourcesTagCriterion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("comparator" Data..=) Prelude.<$> comparator,
+            ("tagValues" Data..=) Prelude.<$> tagValues
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/SearchResourcesTagCriterionPair.hs b/gen/Amazonka/MacieV2/Types/SearchResourcesTagCriterionPair.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SearchResourcesTagCriterionPair.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.MacieV2.Types.SearchResourcesTagCriterionPair
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SearchResourcesTagCriterionPair where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a tag key, a tag value, or a tag key and value (as a pair) to
+-- use in a tag-based filter condition for a query. Tag keys and values are
+-- case sensitive. Also, Amazon Macie doesn\'t support use of partial
+-- values or wildcard characters in tag-based filter conditions.
+--
+-- /See:/ 'newSearchResourcesTagCriterionPair' smart constructor.
+data SearchResourcesTagCriterionPair = SearchResourcesTagCriterionPair'
+  { -- | The value for the tag key to use in the condition.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | The tag value to use in the condition.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchResourcesTagCriterionPair' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'searchResourcesTagCriterionPair_key' - The value for the tag key to use in the condition.
+--
+-- 'value', 'searchResourcesTagCriterionPair_value' - The tag value to use in the condition.
+newSearchResourcesTagCriterionPair ::
+  SearchResourcesTagCriterionPair
+newSearchResourcesTagCriterionPair =
+  SearchResourcesTagCriterionPair'
+    { key =
+        Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The value for the tag key to use in the condition.
+searchResourcesTagCriterionPair_key :: Lens.Lens' SearchResourcesTagCriterionPair (Prelude.Maybe Prelude.Text)
+searchResourcesTagCriterionPair_key = Lens.lens (\SearchResourcesTagCriterionPair' {key} -> key) (\s@SearchResourcesTagCriterionPair' {} a -> s {key = a} :: SearchResourcesTagCriterionPair)
+
+-- | The tag value to use in the condition.
+searchResourcesTagCriterionPair_value :: Lens.Lens' SearchResourcesTagCriterionPair (Prelude.Maybe Prelude.Text)
+searchResourcesTagCriterionPair_value = Lens.lens (\SearchResourcesTagCriterionPair' {value} -> value) (\s@SearchResourcesTagCriterionPair' {} a -> s {value = a} :: SearchResourcesTagCriterionPair)
+
+instance
+  Prelude.Hashable
+    SearchResourcesTagCriterionPair
+  where
+  hashWithSalt
+    _salt
+    SearchResourcesTagCriterionPair' {..} =
+      _salt
+        `Prelude.hashWithSalt` key
+        `Prelude.hashWithSalt` value
+
+instance
+  Prelude.NFData
+    SearchResourcesTagCriterionPair
+  where
+  rnf SearchResourcesTagCriterionPair' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON SearchResourcesTagCriterionPair where
+  toJSON SearchResourcesTagCriterionPair' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("key" Data..=) Prelude.<$> key,
+            ("value" Data..=) Prelude.<$> value
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/SecurityHubConfiguration.hs b/gen/Amazonka/MacieV2/Types/SecurityHubConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SecurityHubConfiguration.hs
@@ -0,0 +1,129 @@
+{-# 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.MacieV2.Types.SecurityHubConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SecurityHubConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies configuration settings that determine which findings are
+-- published to Security Hub automatically. For information about how Macie
+-- publishes findings to Security Hub, see
+-- <https://docs.aws.amazon.com/macie/latest/user/securityhub-integration.html Amazon Macie integration with Security Hub>
+-- in the /Amazon Macie User Guide/.
+--
+-- /See:/ 'newSecurityHubConfiguration' smart constructor.
+data SecurityHubConfiguration = SecurityHubConfiguration'
+  { -- | Specifies whether to publish policy findings to Security Hub. If you set
+    -- this value to true, Amazon Macie automatically publishes all new and
+    -- updated policy findings that weren\'t suppressed by a findings filter.
+    -- The default value is true.
+    publishPolicyFindings :: Prelude.Bool,
+    -- | Specifies whether to publish sensitive data findings to Security Hub. If
+    -- you set this value to true, Amazon Macie automatically publishes all
+    -- sensitive data findings that weren\'t suppressed by a findings filter.
+    -- The default value is false.
+    publishClassificationFindings :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SecurityHubConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'publishPolicyFindings', 'securityHubConfiguration_publishPolicyFindings' - Specifies whether to publish policy findings to Security Hub. If you set
+-- this value to true, Amazon Macie automatically publishes all new and
+-- updated policy findings that weren\'t suppressed by a findings filter.
+-- The default value is true.
+--
+-- 'publishClassificationFindings', 'securityHubConfiguration_publishClassificationFindings' - Specifies whether to publish sensitive data findings to Security Hub. If
+-- you set this value to true, Amazon Macie automatically publishes all
+-- sensitive data findings that weren\'t suppressed by a findings filter.
+-- The default value is false.
+newSecurityHubConfiguration ::
+  -- | 'publishPolicyFindings'
+  Prelude.Bool ->
+  -- | 'publishClassificationFindings'
+  Prelude.Bool ->
+  SecurityHubConfiguration
+newSecurityHubConfiguration
+  pPublishPolicyFindings_
+  pPublishClassificationFindings_ =
+    SecurityHubConfiguration'
+      { publishPolicyFindings =
+          pPublishPolicyFindings_,
+        publishClassificationFindings =
+          pPublishClassificationFindings_
+      }
+
+-- | Specifies whether to publish policy findings to Security Hub. If you set
+-- this value to true, Amazon Macie automatically publishes all new and
+-- updated policy findings that weren\'t suppressed by a findings filter.
+-- The default value is true.
+securityHubConfiguration_publishPolicyFindings :: Lens.Lens' SecurityHubConfiguration Prelude.Bool
+securityHubConfiguration_publishPolicyFindings = Lens.lens (\SecurityHubConfiguration' {publishPolicyFindings} -> publishPolicyFindings) (\s@SecurityHubConfiguration' {} a -> s {publishPolicyFindings = a} :: SecurityHubConfiguration)
+
+-- | Specifies whether to publish sensitive data findings to Security Hub. If
+-- you set this value to true, Amazon Macie automatically publishes all
+-- sensitive data findings that weren\'t suppressed by a findings filter.
+-- The default value is false.
+securityHubConfiguration_publishClassificationFindings :: Lens.Lens' SecurityHubConfiguration Prelude.Bool
+securityHubConfiguration_publishClassificationFindings = Lens.lens (\SecurityHubConfiguration' {publishClassificationFindings} -> publishClassificationFindings) (\s@SecurityHubConfiguration' {} a -> s {publishClassificationFindings = a} :: SecurityHubConfiguration)
+
+instance Data.FromJSON SecurityHubConfiguration where
+  parseJSON =
+    Data.withObject
+      "SecurityHubConfiguration"
+      ( \x ->
+          SecurityHubConfiguration'
+            Prelude.<$> (x Data..: "publishPolicyFindings")
+            Prelude.<*> (x Data..: "publishClassificationFindings")
+      )
+
+instance Prelude.Hashable SecurityHubConfiguration where
+  hashWithSalt _salt SecurityHubConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` publishPolicyFindings
+      `Prelude.hashWithSalt` publishClassificationFindings
+
+instance Prelude.NFData SecurityHubConfiguration where
+  rnf SecurityHubConfiguration' {..} =
+    Prelude.rnf publishPolicyFindings
+      `Prelude.seq` Prelude.rnf publishClassificationFindings
+
+instance Data.ToJSON SecurityHubConfiguration where
+  toJSON SecurityHubConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "publishPolicyFindings"
+                  Data..= publishPolicyFindings
+              ),
+            Prelude.Just
+              ( "publishClassificationFindings"
+                  Data..= publishClassificationFindings
+              )
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/SensitiveDataItem.hs b/gen/Amazonka/MacieV2/Types/SensitiveDataItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SensitiveDataItem.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.MacieV2.Types.SensitiveDataItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SensitiveDataItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.DefaultDetection
+import Amazonka.MacieV2.Types.SensitiveDataItemCategory
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the category, types, and occurrences of
+-- sensitive data that produced a sensitive data finding.
+--
+-- /See:/ 'newSensitiveDataItem' smart constructor.
+data SensitiveDataItem = SensitiveDataItem'
+  { -- | The category of sensitive data that was detected. For example:
+    -- CREDENTIALS, for credentials data such as private keys or Amazon Web
+    -- Services secret access keys; FINANCIAL_INFORMATION, for financial data
+    -- such as credit card numbers; or, PERSONAL_INFORMATION, for personal
+    -- health information, such as health insurance identification numbers, or
+    -- personally identifiable information, such as passport numbers.
+    category :: Prelude.Maybe SensitiveDataItemCategory,
+    -- | An array of objects, one for each type of sensitive data that was
+    -- detected. Each object reports the number of occurrences of a specific
+    -- type of sensitive data that was detected, and the location of up to 15
+    -- of those occurrences.
+    detections :: Prelude.Maybe [DefaultDetection],
+    -- | The total number of occurrences of the sensitive data that was detected.
+    totalCount :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SensitiveDataItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'category', 'sensitiveDataItem_category' - The category of sensitive data that was detected. For example:
+-- CREDENTIALS, for credentials data such as private keys or Amazon Web
+-- Services secret access keys; FINANCIAL_INFORMATION, for financial data
+-- such as credit card numbers; or, PERSONAL_INFORMATION, for personal
+-- health information, such as health insurance identification numbers, or
+-- personally identifiable information, such as passport numbers.
+--
+-- 'detections', 'sensitiveDataItem_detections' - An array of objects, one for each type of sensitive data that was
+-- detected. Each object reports the number of occurrences of a specific
+-- type of sensitive data that was detected, and the location of up to 15
+-- of those occurrences.
+--
+-- 'totalCount', 'sensitiveDataItem_totalCount' - The total number of occurrences of the sensitive data that was detected.
+newSensitiveDataItem ::
+  SensitiveDataItem
+newSensitiveDataItem =
+  SensitiveDataItem'
+    { category = Prelude.Nothing,
+      detections = Prelude.Nothing,
+      totalCount = Prelude.Nothing
+    }
+
+-- | The category of sensitive data that was detected. For example:
+-- CREDENTIALS, for credentials data such as private keys or Amazon Web
+-- Services secret access keys; FINANCIAL_INFORMATION, for financial data
+-- such as credit card numbers; or, PERSONAL_INFORMATION, for personal
+-- health information, such as health insurance identification numbers, or
+-- personally identifiable information, such as passport numbers.
+sensitiveDataItem_category :: Lens.Lens' SensitiveDataItem (Prelude.Maybe SensitiveDataItemCategory)
+sensitiveDataItem_category = Lens.lens (\SensitiveDataItem' {category} -> category) (\s@SensitiveDataItem' {} a -> s {category = a} :: SensitiveDataItem)
+
+-- | An array of objects, one for each type of sensitive data that was
+-- detected. Each object reports the number of occurrences of a specific
+-- type of sensitive data that was detected, and the location of up to 15
+-- of those occurrences.
+sensitiveDataItem_detections :: Lens.Lens' SensitiveDataItem (Prelude.Maybe [DefaultDetection])
+sensitiveDataItem_detections = Lens.lens (\SensitiveDataItem' {detections} -> detections) (\s@SensitiveDataItem' {} a -> s {detections = a} :: SensitiveDataItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | The total number of occurrences of the sensitive data that was detected.
+sensitiveDataItem_totalCount :: Lens.Lens' SensitiveDataItem (Prelude.Maybe Prelude.Integer)
+sensitiveDataItem_totalCount = Lens.lens (\SensitiveDataItem' {totalCount} -> totalCount) (\s@SensitiveDataItem' {} a -> s {totalCount = a} :: SensitiveDataItem)
+
+instance Data.FromJSON SensitiveDataItem where
+  parseJSON =
+    Data.withObject
+      "SensitiveDataItem"
+      ( \x ->
+          SensitiveDataItem'
+            Prelude.<$> (x Data..:? "category")
+            Prelude.<*> (x Data..:? "detections" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "totalCount")
+      )
+
+instance Prelude.Hashable SensitiveDataItem where
+  hashWithSalt _salt SensitiveDataItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` category
+      `Prelude.hashWithSalt` detections
+      `Prelude.hashWithSalt` totalCount
+
+instance Prelude.NFData SensitiveDataItem where
+  rnf SensitiveDataItem' {..} =
+    Prelude.rnf category
+      `Prelude.seq` Prelude.rnf detections
+      `Prelude.seq` Prelude.rnf totalCount
diff --git a/gen/Amazonka/MacieV2/Types/SensitiveDataItemCategory.hs b/gen/Amazonka/MacieV2/Types/SensitiveDataItemCategory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SensitiveDataItemCategory.hs
@@ -0,0 +1,85 @@
+{-# 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.MacieV2.Types.SensitiveDataItemCategory
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SensitiveDataItemCategory
+  ( SensitiveDataItemCategory
+      ( ..,
+        SensitiveDataItemCategory_CREDENTIALS,
+        SensitiveDataItemCategory_CUSTOM_IDENTIFIER,
+        SensitiveDataItemCategory_FINANCIAL_INFORMATION,
+        SensitiveDataItemCategory_PERSONAL_INFORMATION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | For a finding, the category of sensitive data that was detected and
+-- produced the finding. For a managed data identifier, the category of
+-- sensitive data that the managed data identifier detects. Possible values
+-- are:
+newtype SensitiveDataItemCategory = SensitiveDataItemCategory'
+  { fromSensitiveDataItemCategory ::
+      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 SensitiveDataItemCategory_CREDENTIALS :: SensitiveDataItemCategory
+pattern SensitiveDataItemCategory_CREDENTIALS = SensitiveDataItemCategory' "CREDENTIALS"
+
+pattern SensitiveDataItemCategory_CUSTOM_IDENTIFIER :: SensitiveDataItemCategory
+pattern SensitiveDataItemCategory_CUSTOM_IDENTIFIER = SensitiveDataItemCategory' "CUSTOM_IDENTIFIER"
+
+pattern SensitiveDataItemCategory_FINANCIAL_INFORMATION :: SensitiveDataItemCategory
+pattern SensitiveDataItemCategory_FINANCIAL_INFORMATION = SensitiveDataItemCategory' "FINANCIAL_INFORMATION"
+
+pattern SensitiveDataItemCategory_PERSONAL_INFORMATION :: SensitiveDataItemCategory
+pattern SensitiveDataItemCategory_PERSONAL_INFORMATION = SensitiveDataItemCategory' "PERSONAL_INFORMATION"
+
+{-# COMPLETE
+  SensitiveDataItemCategory_CREDENTIALS,
+  SensitiveDataItemCategory_CUSTOM_IDENTIFIER,
+  SensitiveDataItemCategory_FINANCIAL_INFORMATION,
+  SensitiveDataItemCategory_PERSONAL_INFORMATION,
+  SensitiveDataItemCategory'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/SensitivityAggregations.hs b/gen/Amazonka/MacieV2/Types/SensitivityAggregations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SensitivityAggregations.hs
@@ -0,0 +1,153 @@
+{-# 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.MacieV2.Types.SensitivityAggregations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SensitivityAggregations 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 aggregated statistical data for sensitive data discovery
+-- metrics that apply to S3 buckets. Each field contains aggregated data
+-- for all the buckets that have a sensitivity score (sensitivityScore) of
+-- a specified value or within a specified range
+-- (BucketStatisticsBySensitivity). If automated sensitive data discovery
+-- is currently disabled for your account, the value for each field is 0.
+--
+-- /See:/ 'newSensitivityAggregations' smart constructor.
+data SensitivityAggregations = SensitivityAggregations'
+  { -- | The total storage size, in bytes, of all the objects that Amazon Macie
+    -- can analyze in the buckets. These objects use a supported storage class
+    -- and have a file name extension for a supported file or storage format.
+    --
+    -- If versioning is enabled for any of the buckets, this value is based on
+    -- the size of the latest version of each applicable object in the buckets.
+    -- This value doesn\'t reflect the storage size of all versions of all
+    -- applicable objects in the buckets.
+    classifiableSizeInBytes :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of buckets that are publicly accessible based on a
+    -- combination of permissions settings for each bucket.
+    publiclyAccessibleCount :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of buckets.
+    totalCount :: Prelude.Maybe Prelude.Integer,
+    -- | The total storage size, in bytes, of the buckets.
+    --
+    -- If versioning is enabled for any of the buckets, this value is based on
+    -- the size of the latest version of each object in the buckets. This value
+    -- doesn\'t reflect the storage size of all versions of the objects in the
+    -- buckets.
+    totalSizeInBytes :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SensitivityAggregations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'classifiableSizeInBytes', 'sensitivityAggregations_classifiableSizeInBytes' - The total storage size, in bytes, of all the objects that Amazon Macie
+-- can analyze in the buckets. These objects use a supported storage class
+-- and have a file name extension for a supported file or storage format.
+--
+-- If versioning is enabled for any of the buckets, this value is based on
+-- the size of the latest version of each applicable object in the buckets.
+-- This value doesn\'t reflect the storage size of all versions of all
+-- applicable objects in the buckets.
+--
+-- 'publiclyAccessibleCount', 'sensitivityAggregations_publiclyAccessibleCount' - The total number of buckets that are publicly accessible based on a
+-- combination of permissions settings for each bucket.
+--
+-- 'totalCount', 'sensitivityAggregations_totalCount' - The total number of buckets.
+--
+-- 'totalSizeInBytes', 'sensitivityAggregations_totalSizeInBytes' - The total storage size, in bytes, of the buckets.
+--
+-- If versioning is enabled for any of the buckets, this value is based on
+-- the size of the latest version of each object in the buckets. This value
+-- doesn\'t reflect the storage size of all versions of the objects in the
+-- buckets.
+newSensitivityAggregations ::
+  SensitivityAggregations
+newSensitivityAggregations =
+  SensitivityAggregations'
+    { classifiableSizeInBytes =
+        Prelude.Nothing,
+      publiclyAccessibleCount = Prelude.Nothing,
+      totalCount = Prelude.Nothing,
+      totalSizeInBytes = Prelude.Nothing
+    }
+
+-- | The total storage size, in bytes, of all the objects that Amazon Macie
+-- can analyze in the buckets. These objects use a supported storage class
+-- and have a file name extension for a supported file or storage format.
+--
+-- If versioning is enabled for any of the buckets, this value is based on
+-- the size of the latest version of each applicable object in the buckets.
+-- This value doesn\'t reflect the storage size of all versions of all
+-- applicable objects in the buckets.
+sensitivityAggregations_classifiableSizeInBytes :: Lens.Lens' SensitivityAggregations (Prelude.Maybe Prelude.Integer)
+sensitivityAggregations_classifiableSizeInBytes = Lens.lens (\SensitivityAggregations' {classifiableSizeInBytes} -> classifiableSizeInBytes) (\s@SensitivityAggregations' {} a -> s {classifiableSizeInBytes = a} :: SensitivityAggregations)
+
+-- | The total number of buckets that are publicly accessible based on a
+-- combination of permissions settings for each bucket.
+sensitivityAggregations_publiclyAccessibleCount :: Lens.Lens' SensitivityAggregations (Prelude.Maybe Prelude.Integer)
+sensitivityAggregations_publiclyAccessibleCount = Lens.lens (\SensitivityAggregations' {publiclyAccessibleCount} -> publiclyAccessibleCount) (\s@SensitivityAggregations' {} a -> s {publiclyAccessibleCount = a} :: SensitivityAggregations)
+
+-- | The total number of buckets.
+sensitivityAggregations_totalCount :: Lens.Lens' SensitivityAggregations (Prelude.Maybe Prelude.Integer)
+sensitivityAggregations_totalCount = Lens.lens (\SensitivityAggregations' {totalCount} -> totalCount) (\s@SensitivityAggregations' {} a -> s {totalCount = a} :: SensitivityAggregations)
+
+-- | The total storage size, in bytes, of the buckets.
+--
+-- If versioning is enabled for any of the buckets, this value is based on
+-- the size of the latest version of each object in the buckets. This value
+-- doesn\'t reflect the storage size of all versions of the objects in the
+-- buckets.
+sensitivityAggregations_totalSizeInBytes :: Lens.Lens' SensitivityAggregations (Prelude.Maybe Prelude.Integer)
+sensitivityAggregations_totalSizeInBytes = Lens.lens (\SensitivityAggregations' {totalSizeInBytes} -> totalSizeInBytes) (\s@SensitivityAggregations' {} a -> s {totalSizeInBytes = a} :: SensitivityAggregations)
+
+instance Data.FromJSON SensitivityAggregations where
+  parseJSON =
+    Data.withObject
+      "SensitivityAggregations"
+      ( \x ->
+          SensitivityAggregations'
+            Prelude.<$> (x Data..:? "classifiableSizeInBytes")
+            Prelude.<*> (x Data..:? "publiclyAccessibleCount")
+            Prelude.<*> (x Data..:? "totalCount")
+            Prelude.<*> (x Data..:? "totalSizeInBytes")
+      )
+
+instance Prelude.Hashable SensitivityAggregations where
+  hashWithSalt _salt SensitivityAggregations' {..} =
+    _salt
+      `Prelude.hashWithSalt` classifiableSizeInBytes
+      `Prelude.hashWithSalt` publiclyAccessibleCount
+      `Prelude.hashWithSalt` totalCount
+      `Prelude.hashWithSalt` totalSizeInBytes
+
+instance Prelude.NFData SensitivityAggregations where
+  rnf SensitivityAggregations' {..} =
+    Prelude.rnf classifiableSizeInBytes
+      `Prelude.seq` Prelude.rnf publiclyAccessibleCount
+      `Prelude.seq` Prelude.rnf totalCount
+      `Prelude.seq` Prelude.rnf totalSizeInBytes
diff --git a/gen/Amazonka/MacieV2/Types/SensitivityInspectionTemplateExcludes.hs b/gen/Amazonka/MacieV2/Types/SensitivityInspectionTemplateExcludes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SensitivityInspectionTemplateExcludes.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.MacieV2.Types.SensitivityInspectionTemplateExcludes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SensitivityInspectionTemplateExcludes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies managed data identifiers to exclude (not use) when performing
+-- automated sensitive data discovery for an Amazon Macie account. For
+-- information about the managed data identifiers that Amazon Macie
+-- currently provides, see
+-- <https://docs.aws.amazon.com/macie/latest/user/managed-data-identifiers.html Using managed data identifiers>
+-- in the /Amazon Macie User Guide/.
+--
+-- /See:/ 'newSensitivityInspectionTemplateExcludes' smart constructor.
+data SensitivityInspectionTemplateExcludes = SensitivityInspectionTemplateExcludes'
+  { -- | An array of unique identifiers, one for each managed data identifier to
+    -- exclude. To retrieve a list of valid values, use the
+    -- ListManagedDataIdentifiers operation.
+    managedDataIdentifierIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SensitivityInspectionTemplateExcludes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'managedDataIdentifierIds', 'sensitivityInspectionTemplateExcludes_managedDataIdentifierIds' - An array of unique identifiers, one for each managed data identifier to
+-- exclude. To retrieve a list of valid values, use the
+-- ListManagedDataIdentifiers operation.
+newSensitivityInspectionTemplateExcludes ::
+  SensitivityInspectionTemplateExcludes
+newSensitivityInspectionTemplateExcludes =
+  SensitivityInspectionTemplateExcludes'
+    { managedDataIdentifierIds =
+        Prelude.Nothing
+    }
+
+-- | An array of unique identifiers, one for each managed data identifier to
+-- exclude. To retrieve a list of valid values, use the
+-- ListManagedDataIdentifiers operation.
+sensitivityInspectionTemplateExcludes_managedDataIdentifierIds :: Lens.Lens' SensitivityInspectionTemplateExcludes (Prelude.Maybe [Prelude.Text])
+sensitivityInspectionTemplateExcludes_managedDataIdentifierIds = Lens.lens (\SensitivityInspectionTemplateExcludes' {managedDataIdentifierIds} -> managedDataIdentifierIds) (\s@SensitivityInspectionTemplateExcludes' {} a -> s {managedDataIdentifierIds = a} :: SensitivityInspectionTemplateExcludes) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromJSON
+    SensitivityInspectionTemplateExcludes
+  where
+  parseJSON =
+    Data.withObject
+      "SensitivityInspectionTemplateExcludes"
+      ( \x ->
+          SensitivityInspectionTemplateExcludes'
+            Prelude.<$> ( x
+                            Data..:? "managedDataIdentifierIds"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    SensitivityInspectionTemplateExcludes
+  where
+  hashWithSalt
+    _salt
+    SensitivityInspectionTemplateExcludes' {..} =
+      _salt
+        `Prelude.hashWithSalt` managedDataIdentifierIds
+
+instance
+  Prelude.NFData
+    SensitivityInspectionTemplateExcludes
+  where
+  rnf SensitivityInspectionTemplateExcludes' {..} =
+    Prelude.rnf managedDataIdentifierIds
+
+instance
+  Data.ToJSON
+    SensitivityInspectionTemplateExcludes
+  where
+  toJSON SensitivityInspectionTemplateExcludes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("managedDataIdentifierIds" Data..=)
+              Prelude.<$> managedDataIdentifierIds
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/SensitivityInspectionTemplateIncludes.hs b/gen/Amazonka/MacieV2/Types/SensitivityInspectionTemplateIncludes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SensitivityInspectionTemplateIncludes.hs
@@ -0,0 +1,162 @@
+{-# 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.MacieV2.Types.SensitivityInspectionTemplateIncludes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SensitivityInspectionTemplateIncludes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the allow lists, custom data identifiers, and managed data
+-- identifiers to include (use) when performing automated sensitive data
+-- discovery for an Amazon Macie account. The configuration must specify at
+-- least one custom data identifier or managed data identifier. For
+-- information about the managed data identifiers that Amazon Macie
+-- currently provides, see
+-- <https://docs.aws.amazon.com/macie/latest/user/managed-data-identifiers.html Using managed data identifiers>
+-- in the /Amazon Macie User Guide/.
+--
+-- /See:/ 'newSensitivityInspectionTemplateIncludes' smart constructor.
+data SensitivityInspectionTemplateIncludes = SensitivityInspectionTemplateIncludes'
+  { -- | An array of unique identifiers, one for each allow list to include.
+    allowListIds :: Prelude.Maybe [Prelude.Text],
+    -- | An array of unique identifiers, one for each custom data identifier to
+    -- include.
+    customDataIdentifierIds :: Prelude.Maybe [Prelude.Text],
+    -- | An array of unique identifiers, one for each managed data identifier to
+    -- include.
+    --
+    -- Amazon Macie uses these managed data identifiers in addition to managed
+    -- data identifiers that are subsequently released and recommended for
+    -- automated sensitive data discovery. To retrieve a list of valid values
+    -- for the managed data identifiers that are currently available, use the
+    -- ListManagedDataIdentifiers operation.
+    managedDataIdentifierIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SensitivityInspectionTemplateIncludes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowListIds', 'sensitivityInspectionTemplateIncludes_allowListIds' - An array of unique identifiers, one for each allow list to include.
+--
+-- 'customDataIdentifierIds', 'sensitivityInspectionTemplateIncludes_customDataIdentifierIds' - An array of unique identifiers, one for each custom data identifier to
+-- include.
+--
+-- 'managedDataIdentifierIds', 'sensitivityInspectionTemplateIncludes_managedDataIdentifierIds' - An array of unique identifiers, one for each managed data identifier to
+-- include.
+--
+-- Amazon Macie uses these managed data identifiers in addition to managed
+-- data identifiers that are subsequently released and recommended for
+-- automated sensitive data discovery. To retrieve a list of valid values
+-- for the managed data identifiers that are currently available, use the
+-- ListManagedDataIdentifiers operation.
+newSensitivityInspectionTemplateIncludes ::
+  SensitivityInspectionTemplateIncludes
+newSensitivityInspectionTemplateIncludes =
+  SensitivityInspectionTemplateIncludes'
+    { allowListIds =
+        Prelude.Nothing,
+      customDataIdentifierIds =
+        Prelude.Nothing,
+      managedDataIdentifierIds =
+        Prelude.Nothing
+    }
+
+-- | An array of unique identifiers, one for each allow list to include.
+sensitivityInspectionTemplateIncludes_allowListIds :: Lens.Lens' SensitivityInspectionTemplateIncludes (Prelude.Maybe [Prelude.Text])
+sensitivityInspectionTemplateIncludes_allowListIds = Lens.lens (\SensitivityInspectionTemplateIncludes' {allowListIds} -> allowListIds) (\s@SensitivityInspectionTemplateIncludes' {} a -> s {allowListIds = a} :: SensitivityInspectionTemplateIncludes) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of unique identifiers, one for each custom data identifier to
+-- include.
+sensitivityInspectionTemplateIncludes_customDataIdentifierIds :: Lens.Lens' SensitivityInspectionTemplateIncludes (Prelude.Maybe [Prelude.Text])
+sensitivityInspectionTemplateIncludes_customDataIdentifierIds = Lens.lens (\SensitivityInspectionTemplateIncludes' {customDataIdentifierIds} -> customDataIdentifierIds) (\s@SensitivityInspectionTemplateIncludes' {} a -> s {customDataIdentifierIds = a} :: SensitivityInspectionTemplateIncludes) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of unique identifiers, one for each managed data identifier to
+-- include.
+--
+-- Amazon Macie uses these managed data identifiers in addition to managed
+-- data identifiers that are subsequently released and recommended for
+-- automated sensitive data discovery. To retrieve a list of valid values
+-- for the managed data identifiers that are currently available, use the
+-- ListManagedDataIdentifiers operation.
+sensitivityInspectionTemplateIncludes_managedDataIdentifierIds :: Lens.Lens' SensitivityInspectionTemplateIncludes (Prelude.Maybe [Prelude.Text])
+sensitivityInspectionTemplateIncludes_managedDataIdentifierIds = Lens.lens (\SensitivityInspectionTemplateIncludes' {managedDataIdentifierIds} -> managedDataIdentifierIds) (\s@SensitivityInspectionTemplateIncludes' {} a -> s {managedDataIdentifierIds = a} :: SensitivityInspectionTemplateIncludes) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromJSON
+    SensitivityInspectionTemplateIncludes
+  where
+  parseJSON =
+    Data.withObject
+      "SensitivityInspectionTemplateIncludes"
+      ( \x ->
+          SensitivityInspectionTemplateIncludes'
+            Prelude.<$> (x Data..:? "allowListIds" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "customDataIdentifierIds"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "managedDataIdentifierIds"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    SensitivityInspectionTemplateIncludes
+  where
+  hashWithSalt
+    _salt
+    SensitivityInspectionTemplateIncludes' {..} =
+      _salt
+        `Prelude.hashWithSalt` allowListIds
+        `Prelude.hashWithSalt` customDataIdentifierIds
+        `Prelude.hashWithSalt` managedDataIdentifierIds
+
+instance
+  Prelude.NFData
+    SensitivityInspectionTemplateIncludes
+  where
+  rnf SensitivityInspectionTemplateIncludes' {..} =
+    Prelude.rnf allowListIds
+      `Prelude.seq` Prelude.rnf customDataIdentifierIds
+      `Prelude.seq` Prelude.rnf managedDataIdentifierIds
+
+instance
+  Data.ToJSON
+    SensitivityInspectionTemplateIncludes
+  where
+  toJSON SensitivityInspectionTemplateIncludes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("allowListIds" Data..=) Prelude.<$> allowListIds,
+            ("customDataIdentifierIds" Data..=)
+              Prelude.<$> customDataIdentifierIds,
+            ("managedDataIdentifierIds" Data..=)
+              Prelude.<$> managedDataIdentifierIds
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/SensitivityInspectionTemplatesEntry.hs b/gen/Amazonka/MacieV2/Types/SensitivityInspectionTemplatesEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SensitivityInspectionTemplatesEntry.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.MacieV2.Types.SensitivityInspectionTemplatesEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SensitivityInspectionTemplatesEntry 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 information about the sensitivity inspection template for an
+-- Amazon Macie account. Macie uses the template\'s settings when it
+-- performs automated sensitive data discovery for the account.
+--
+-- /See:/ 'newSensitivityInspectionTemplatesEntry' smart constructor.
+data SensitivityInspectionTemplatesEntry = SensitivityInspectionTemplatesEntry'
+  { -- | The unique identifier for the sensitivity inspection template for the
+    -- account.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the sensitivity inspection template for the account.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SensitivityInspectionTemplatesEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'sensitivityInspectionTemplatesEntry_id' - The unique identifier for the sensitivity inspection template for the
+-- account.
+--
+-- 'name', 'sensitivityInspectionTemplatesEntry_name' - The name of the sensitivity inspection template for the account.
+newSensitivityInspectionTemplatesEntry ::
+  SensitivityInspectionTemplatesEntry
+newSensitivityInspectionTemplatesEntry =
+  SensitivityInspectionTemplatesEntry'
+    { id =
+        Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The unique identifier for the sensitivity inspection template for the
+-- account.
+sensitivityInspectionTemplatesEntry_id :: Lens.Lens' SensitivityInspectionTemplatesEntry (Prelude.Maybe Prelude.Text)
+sensitivityInspectionTemplatesEntry_id = Lens.lens (\SensitivityInspectionTemplatesEntry' {id} -> id) (\s@SensitivityInspectionTemplatesEntry' {} a -> s {id = a} :: SensitivityInspectionTemplatesEntry)
+
+-- | The name of the sensitivity inspection template for the account.
+sensitivityInspectionTemplatesEntry_name :: Lens.Lens' SensitivityInspectionTemplatesEntry (Prelude.Maybe Prelude.Text)
+sensitivityInspectionTemplatesEntry_name = Lens.lens (\SensitivityInspectionTemplatesEntry' {name} -> name) (\s@SensitivityInspectionTemplatesEntry' {} a -> s {name = a} :: SensitivityInspectionTemplatesEntry)
+
+instance
+  Data.FromJSON
+    SensitivityInspectionTemplatesEntry
+  where
+  parseJSON =
+    Data.withObject
+      "SensitivityInspectionTemplatesEntry"
+      ( \x ->
+          SensitivityInspectionTemplatesEntry'
+            Prelude.<$> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance
+  Prelude.Hashable
+    SensitivityInspectionTemplatesEntry
+  where
+  hashWithSalt
+    _salt
+    SensitivityInspectionTemplatesEntry' {..} =
+      _salt
+        `Prelude.hashWithSalt` id
+        `Prelude.hashWithSalt` name
+
+instance
+  Prelude.NFData
+    SensitivityInspectionTemplatesEntry
+  where
+  rnf SensitivityInspectionTemplatesEntry' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/MacieV2/Types/ServerSideEncryption.hs b/gen/Amazonka/MacieV2/Types/ServerSideEncryption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ServerSideEncryption.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.ServerSideEncryption
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ServerSideEncryption where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.EncryptionType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the server-side encryption settings for an S3
+-- bucket or S3 object.
+--
+-- /See:/ 'newServerSideEncryption' smart constructor.
+data ServerSideEncryption = ServerSideEncryption'
+  { -- | The server-side encryption algorithm that\'s used when storing data in
+    -- the bucket or object. If default encryption is disabled for the bucket
+    -- or the object isn\'t encrypted using server-side encryption, this value
+    -- is NONE.
+    encryptionType :: Prelude.Maybe EncryptionType,
+    -- | The Amazon Resource Name (ARN) or unique identifier (key ID) for the KMS
+    -- key that\'s used to encrypt data in the bucket or the object. This value
+    -- is null if an KMS key isn\'t used to encrypt the data.
+    kmsMasterKeyId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServerSideEncryption' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'encryptionType', 'serverSideEncryption_encryptionType' - The server-side encryption algorithm that\'s used when storing data in
+-- the bucket or object. If default encryption is disabled for the bucket
+-- or the object isn\'t encrypted using server-side encryption, this value
+-- is NONE.
+--
+-- 'kmsMasterKeyId', 'serverSideEncryption_kmsMasterKeyId' - The Amazon Resource Name (ARN) or unique identifier (key ID) for the KMS
+-- key that\'s used to encrypt data in the bucket or the object. This value
+-- is null if an KMS key isn\'t used to encrypt the data.
+newServerSideEncryption ::
+  ServerSideEncryption
+newServerSideEncryption =
+  ServerSideEncryption'
+    { encryptionType =
+        Prelude.Nothing,
+      kmsMasterKeyId = Prelude.Nothing
+    }
+
+-- | The server-side encryption algorithm that\'s used when storing data in
+-- the bucket or object. If default encryption is disabled for the bucket
+-- or the object isn\'t encrypted using server-side encryption, this value
+-- is NONE.
+serverSideEncryption_encryptionType :: Lens.Lens' ServerSideEncryption (Prelude.Maybe EncryptionType)
+serverSideEncryption_encryptionType = Lens.lens (\ServerSideEncryption' {encryptionType} -> encryptionType) (\s@ServerSideEncryption' {} a -> s {encryptionType = a} :: ServerSideEncryption)
+
+-- | The Amazon Resource Name (ARN) or unique identifier (key ID) for the KMS
+-- key that\'s used to encrypt data in the bucket or the object. This value
+-- is null if an KMS key isn\'t used to encrypt the data.
+serverSideEncryption_kmsMasterKeyId :: Lens.Lens' ServerSideEncryption (Prelude.Maybe Prelude.Text)
+serverSideEncryption_kmsMasterKeyId = Lens.lens (\ServerSideEncryption' {kmsMasterKeyId} -> kmsMasterKeyId) (\s@ServerSideEncryption' {} a -> s {kmsMasterKeyId = a} :: ServerSideEncryption)
+
+instance Data.FromJSON ServerSideEncryption where
+  parseJSON =
+    Data.withObject
+      "ServerSideEncryption"
+      ( \x ->
+          ServerSideEncryption'
+            Prelude.<$> (x Data..:? "encryptionType")
+            Prelude.<*> (x Data..:? "kmsMasterKeyId")
+      )
+
+instance Prelude.Hashable ServerSideEncryption where
+  hashWithSalt _salt ServerSideEncryption' {..} =
+    _salt
+      `Prelude.hashWithSalt` encryptionType
+      `Prelude.hashWithSalt` kmsMasterKeyId
+
+instance Prelude.NFData ServerSideEncryption where
+  rnf ServerSideEncryption' {..} =
+    Prelude.rnf encryptionType
+      `Prelude.seq` Prelude.rnf kmsMasterKeyId
diff --git a/gen/Amazonka/MacieV2/Types/ServiceLimit.hs b/gen/Amazonka/MacieV2/Types/ServiceLimit.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/ServiceLimit.hs
@@ -0,0 +1,103 @@
+{-# 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.MacieV2.Types.ServiceLimit
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.ServiceLimit where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.Unit
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a current quota for an Amazon Macie account.
+--
+-- /See:/ 'newServiceLimit' smart constructor.
+data ServiceLimit = ServiceLimit'
+  { -- | Specifies whether the account has met the quota that corresponds to the
+    -- metric specified by the UsageByAccount.type field in the response.
+    isServiceLimited :: Prelude.Maybe Prelude.Bool,
+    -- | The unit of measurement for the value specified by the value field.
+    unit :: Prelude.Maybe Unit,
+    -- | The value for the metric specified by the UsageByAccount.type field in
+    -- the response.
+    value :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServiceLimit' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'isServiceLimited', 'serviceLimit_isServiceLimited' - Specifies whether the account has met the quota that corresponds to the
+-- metric specified by the UsageByAccount.type field in the response.
+--
+-- 'unit', 'serviceLimit_unit' - The unit of measurement for the value specified by the value field.
+--
+-- 'value', 'serviceLimit_value' - The value for the metric specified by the UsageByAccount.type field in
+-- the response.
+newServiceLimit ::
+  ServiceLimit
+newServiceLimit =
+  ServiceLimit'
+    { isServiceLimited = Prelude.Nothing,
+      unit = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | Specifies whether the account has met the quota that corresponds to the
+-- metric specified by the UsageByAccount.type field in the response.
+serviceLimit_isServiceLimited :: Lens.Lens' ServiceLimit (Prelude.Maybe Prelude.Bool)
+serviceLimit_isServiceLimited = Lens.lens (\ServiceLimit' {isServiceLimited} -> isServiceLimited) (\s@ServiceLimit' {} a -> s {isServiceLimited = a} :: ServiceLimit)
+
+-- | The unit of measurement for the value specified by the value field.
+serviceLimit_unit :: Lens.Lens' ServiceLimit (Prelude.Maybe Unit)
+serviceLimit_unit = Lens.lens (\ServiceLimit' {unit} -> unit) (\s@ServiceLimit' {} a -> s {unit = a} :: ServiceLimit)
+
+-- | The value for the metric specified by the UsageByAccount.type field in
+-- the response.
+serviceLimit_value :: Lens.Lens' ServiceLimit (Prelude.Maybe Prelude.Integer)
+serviceLimit_value = Lens.lens (\ServiceLimit' {value} -> value) (\s@ServiceLimit' {} a -> s {value = a} :: ServiceLimit)
+
+instance Data.FromJSON ServiceLimit where
+  parseJSON =
+    Data.withObject
+      "ServiceLimit"
+      ( \x ->
+          ServiceLimit'
+            Prelude.<$> (x Data..:? "isServiceLimited")
+            Prelude.<*> (x Data..:? "unit")
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable ServiceLimit where
+  hashWithSalt _salt ServiceLimit' {..} =
+    _salt
+      `Prelude.hashWithSalt` isServiceLimited
+      `Prelude.hashWithSalt` unit
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData ServiceLimit where
+  rnf ServiceLimit' {..} =
+    Prelude.rnf isServiceLimited
+      `Prelude.seq` Prelude.rnf unit
+      `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/MacieV2/Types/SessionContext.hs b/gen/Amazonka/MacieV2/Types/SessionContext.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SessionContext.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.MacieV2.Types.SessionContext
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SessionContext where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.SessionContextAttributes
+import Amazonka.MacieV2.Types.SessionIssuer
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about a session that was created for an entity that
+-- performed an action by using temporary security credentials.
+--
+-- /See:/ 'newSessionContext' smart constructor.
+data SessionContext = SessionContext'
+  { -- | The date and time when the credentials were issued, and whether the
+    -- credentials were authenticated with a multi-factor authentication (MFA)
+    -- device.
+    attributes :: Prelude.Maybe SessionContextAttributes,
+    -- | The source and type of credentials that were issued to the entity.
+    sessionIssuer :: Prelude.Maybe SessionIssuer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SessionContext' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributes', 'sessionContext_attributes' - The date and time when the credentials were issued, and whether the
+-- credentials were authenticated with a multi-factor authentication (MFA)
+-- device.
+--
+-- 'sessionIssuer', 'sessionContext_sessionIssuer' - The source and type of credentials that were issued to the entity.
+newSessionContext ::
+  SessionContext
+newSessionContext =
+  SessionContext'
+    { attributes = Prelude.Nothing,
+      sessionIssuer = Prelude.Nothing
+    }
+
+-- | The date and time when the credentials were issued, and whether the
+-- credentials were authenticated with a multi-factor authentication (MFA)
+-- device.
+sessionContext_attributes :: Lens.Lens' SessionContext (Prelude.Maybe SessionContextAttributes)
+sessionContext_attributes = Lens.lens (\SessionContext' {attributes} -> attributes) (\s@SessionContext' {} a -> s {attributes = a} :: SessionContext)
+
+-- | The source and type of credentials that were issued to the entity.
+sessionContext_sessionIssuer :: Lens.Lens' SessionContext (Prelude.Maybe SessionIssuer)
+sessionContext_sessionIssuer = Lens.lens (\SessionContext' {sessionIssuer} -> sessionIssuer) (\s@SessionContext' {} a -> s {sessionIssuer = a} :: SessionContext)
+
+instance Data.FromJSON SessionContext where
+  parseJSON =
+    Data.withObject
+      "SessionContext"
+      ( \x ->
+          SessionContext'
+            Prelude.<$> (x Data..:? "attributes")
+            Prelude.<*> (x Data..:? "sessionIssuer")
+      )
+
+instance Prelude.Hashable SessionContext where
+  hashWithSalt _salt SessionContext' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` sessionIssuer
+
+instance Prelude.NFData SessionContext where
+  rnf SessionContext' {..} =
+    Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf sessionIssuer
diff --git a/gen/Amazonka/MacieV2/Types/SessionContextAttributes.hs b/gen/Amazonka/MacieV2/Types/SessionContextAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SessionContextAttributes.hs
@@ -0,0 +1,92 @@
+{-# 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.MacieV2.Types.SessionContextAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SessionContextAttributes 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 information about the context in which temporary security
+-- credentials were issued to an entity.
+--
+-- /See:/ 'newSessionContextAttributes' smart constructor.
+data SessionContextAttributes = SessionContextAttributes'
+  { -- | The date and time, in UTC and ISO 8601 format, when the credentials were
+    -- issued.
+    creationDate :: Prelude.Maybe Data.ISO8601,
+    -- | Specifies whether the credentials were authenticated with a multi-factor
+    -- authentication (MFA) device.
+    mfaAuthenticated :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SessionContextAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationDate', 'sessionContextAttributes_creationDate' - The date and time, in UTC and ISO 8601 format, when the credentials were
+-- issued.
+--
+-- 'mfaAuthenticated', 'sessionContextAttributes_mfaAuthenticated' - Specifies whether the credentials were authenticated with a multi-factor
+-- authentication (MFA) device.
+newSessionContextAttributes ::
+  SessionContextAttributes
+newSessionContextAttributes =
+  SessionContextAttributes'
+    { creationDate =
+        Prelude.Nothing,
+      mfaAuthenticated = Prelude.Nothing
+    }
+
+-- | The date and time, in UTC and ISO 8601 format, when the credentials were
+-- issued.
+sessionContextAttributes_creationDate :: Lens.Lens' SessionContextAttributes (Prelude.Maybe Prelude.UTCTime)
+sessionContextAttributes_creationDate = Lens.lens (\SessionContextAttributes' {creationDate} -> creationDate) (\s@SessionContextAttributes' {} a -> s {creationDate = a} :: SessionContextAttributes) Prelude.. Lens.mapping Data._Time
+
+-- | Specifies whether the credentials were authenticated with a multi-factor
+-- authentication (MFA) device.
+sessionContextAttributes_mfaAuthenticated :: Lens.Lens' SessionContextAttributes (Prelude.Maybe Prelude.Bool)
+sessionContextAttributes_mfaAuthenticated = Lens.lens (\SessionContextAttributes' {mfaAuthenticated} -> mfaAuthenticated) (\s@SessionContextAttributes' {} a -> s {mfaAuthenticated = a} :: SessionContextAttributes)
+
+instance Data.FromJSON SessionContextAttributes where
+  parseJSON =
+    Data.withObject
+      "SessionContextAttributes"
+      ( \x ->
+          SessionContextAttributes'
+            Prelude.<$> (x Data..:? "creationDate")
+            Prelude.<*> (x Data..:? "mfaAuthenticated")
+      )
+
+instance Prelude.Hashable SessionContextAttributes where
+  hashWithSalt _salt SessionContextAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationDate
+      `Prelude.hashWithSalt` mfaAuthenticated
+
+instance Prelude.NFData SessionContextAttributes where
+  rnf SessionContextAttributes' {..} =
+    Prelude.rnf creationDate
+      `Prelude.seq` Prelude.rnf mfaAuthenticated
diff --git a/gen/Amazonka/MacieV2/Types/SessionIssuer.hs b/gen/Amazonka/MacieV2/Types/SessionIssuer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SessionIssuer.hs
@@ -0,0 +1,139 @@
+{-# 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.MacieV2.Types.SessionIssuer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SessionIssuer 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 information about the source and type of temporary security
+-- credentials that were issued to an entity.
+--
+-- /See:/ 'newSessionIssuer' smart constructor.
+data SessionIssuer = SessionIssuer'
+  { -- | The unique identifier for the Amazon Web Services account that owns the
+    -- entity that was used to get the credentials.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the source account, IAM user, or role
+    -- that was used to get the credentials.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the entity that was used to get the
+    -- credentials.
+    principalId :: Prelude.Maybe Prelude.Text,
+    -- | The source of the temporary security credentials, such as Root, IAMUser,
+    -- or Role.
+    type' :: Prelude.Maybe Prelude.Text,
+    -- | The name or alias of the user or role that issued the session. This
+    -- value is null if the credentials were obtained from a root account that
+    -- doesn\'t have an alias.
+    userName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SessionIssuer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'sessionIssuer_accountId' - The unique identifier for the Amazon Web Services account that owns the
+-- entity that was used to get the credentials.
+--
+-- 'arn', 'sessionIssuer_arn' - The Amazon Resource Name (ARN) of the source account, IAM user, or role
+-- that was used to get the credentials.
+--
+-- 'principalId', 'sessionIssuer_principalId' - The unique identifier for the entity that was used to get the
+-- credentials.
+--
+-- 'type'', 'sessionIssuer_type' - The source of the temporary security credentials, such as Root, IAMUser,
+-- or Role.
+--
+-- 'userName', 'sessionIssuer_userName' - The name or alias of the user or role that issued the session. This
+-- value is null if the credentials were obtained from a root account that
+-- doesn\'t have an alias.
+newSessionIssuer ::
+  SessionIssuer
+newSessionIssuer =
+  SessionIssuer'
+    { accountId = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      principalId = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      userName = Prelude.Nothing
+    }
+
+-- | The unique identifier for the Amazon Web Services account that owns the
+-- entity that was used to get the credentials.
+sessionIssuer_accountId :: Lens.Lens' SessionIssuer (Prelude.Maybe Prelude.Text)
+sessionIssuer_accountId = Lens.lens (\SessionIssuer' {accountId} -> accountId) (\s@SessionIssuer' {} a -> s {accountId = a} :: SessionIssuer)
+
+-- | The Amazon Resource Name (ARN) of the source account, IAM user, or role
+-- that was used to get the credentials.
+sessionIssuer_arn :: Lens.Lens' SessionIssuer (Prelude.Maybe Prelude.Text)
+sessionIssuer_arn = Lens.lens (\SessionIssuer' {arn} -> arn) (\s@SessionIssuer' {} a -> s {arn = a} :: SessionIssuer)
+
+-- | The unique identifier for the entity that was used to get the
+-- credentials.
+sessionIssuer_principalId :: Lens.Lens' SessionIssuer (Prelude.Maybe Prelude.Text)
+sessionIssuer_principalId = Lens.lens (\SessionIssuer' {principalId} -> principalId) (\s@SessionIssuer' {} a -> s {principalId = a} :: SessionIssuer)
+
+-- | The source of the temporary security credentials, such as Root, IAMUser,
+-- or Role.
+sessionIssuer_type :: Lens.Lens' SessionIssuer (Prelude.Maybe Prelude.Text)
+sessionIssuer_type = Lens.lens (\SessionIssuer' {type'} -> type') (\s@SessionIssuer' {} a -> s {type' = a} :: SessionIssuer)
+
+-- | The name or alias of the user or role that issued the session. This
+-- value is null if the credentials were obtained from a root account that
+-- doesn\'t have an alias.
+sessionIssuer_userName :: Lens.Lens' SessionIssuer (Prelude.Maybe Prelude.Text)
+sessionIssuer_userName = Lens.lens (\SessionIssuer' {userName} -> userName) (\s@SessionIssuer' {} a -> s {userName = a} :: SessionIssuer)
+
+instance Data.FromJSON SessionIssuer where
+  parseJSON =
+    Data.withObject
+      "SessionIssuer"
+      ( \x ->
+          SessionIssuer'
+            Prelude.<$> (x Data..:? "accountId")
+            Prelude.<*> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "principalId")
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..:? "userName")
+      )
+
+instance Prelude.Hashable SessionIssuer where
+  hashWithSalt _salt SessionIssuer' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` principalId
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` userName
+
+instance Prelude.NFData SessionIssuer where
+  rnf SessionIssuer' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf principalId
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf userName
diff --git a/gen/Amazonka/MacieV2/Types/Severity.hs b/gen/Amazonka/MacieV2/Types/Severity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/Severity.hs
@@ -0,0 +1,92 @@
+{-# 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.MacieV2.Types.Severity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.Severity where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.SeverityDescription
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the numerical and qualitative representations of a finding\'s
+-- severity.
+--
+-- /See:/ 'newSeverity' smart constructor.
+data Severity = Severity'
+  { -- | The qualitative representation of the finding\'s severity, ranging from
+    -- Low (least severe) to High (most severe).
+    description :: Prelude.Maybe SeverityDescription,
+    -- | The numerical representation of the finding\'s severity, ranging from 1
+    -- (least severe) to 3 (most severe).
+    score :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Severity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'severity_description' - The qualitative representation of the finding\'s severity, ranging from
+-- Low (least severe) to High (most severe).
+--
+-- 'score', 'severity_score' - The numerical representation of the finding\'s severity, ranging from 1
+-- (least severe) to 3 (most severe).
+newSeverity ::
+  Severity
+newSeverity =
+  Severity'
+    { description = Prelude.Nothing,
+      score = Prelude.Nothing
+    }
+
+-- | The qualitative representation of the finding\'s severity, ranging from
+-- Low (least severe) to High (most severe).
+severity_description :: Lens.Lens' Severity (Prelude.Maybe SeverityDescription)
+severity_description = Lens.lens (\Severity' {description} -> description) (\s@Severity' {} a -> s {description = a} :: Severity)
+
+-- | The numerical representation of the finding\'s severity, ranging from 1
+-- (least severe) to 3 (most severe).
+severity_score :: Lens.Lens' Severity (Prelude.Maybe Prelude.Integer)
+severity_score = Lens.lens (\Severity' {score} -> score) (\s@Severity' {} a -> s {score = a} :: Severity)
+
+instance Data.FromJSON Severity where
+  parseJSON =
+    Data.withObject
+      "Severity"
+      ( \x ->
+          Severity'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "score")
+      )
+
+instance Prelude.Hashable Severity where
+  hashWithSalt _salt Severity' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` score
+
+instance Prelude.NFData Severity where
+  rnf Severity' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf score
diff --git a/gen/Amazonka/MacieV2/Types/SeverityDescription.hs b/gen/Amazonka/MacieV2/Types/SeverityDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SeverityDescription.hs
@@ -0,0 +1,78 @@
+{-# 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.MacieV2.Types.SeverityDescription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SeverityDescription
+  ( SeverityDescription
+      ( ..,
+        SeverityDescription_High,
+        SeverityDescription_Low,
+        SeverityDescription_Medium
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The qualitative representation of the finding\'s severity. Possible
+-- values are:
+newtype SeverityDescription = SeverityDescription'
+  { fromSeverityDescription ::
+      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 SeverityDescription_High :: SeverityDescription
+pattern SeverityDescription_High = SeverityDescription' "High"
+
+pattern SeverityDescription_Low :: SeverityDescription
+pattern SeverityDescription_Low = SeverityDescription' "Low"
+
+pattern SeverityDescription_Medium :: SeverityDescription
+pattern SeverityDescription_Medium = SeverityDescription' "Medium"
+
+{-# COMPLETE
+  SeverityDescription_High,
+  SeverityDescription_Low,
+  SeverityDescription_Medium,
+  SeverityDescription'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/SeverityLevel.hs b/gen/Amazonka/MacieV2/Types/SeverityLevel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SeverityLevel.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.MacieV2.Types.SeverityLevel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SeverityLevel where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.DataIdentifierSeverity
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a severity level for findings that a custom data identifier
+-- produces. A severity level determines which severity is assigned to the
+-- findings, based on the number of occurrences of text that matches the
+-- custom data identifier\'s detection criteria.
+--
+-- /See:/ 'newSeverityLevel' smart constructor.
+data SeverityLevel = SeverityLevel'
+  { -- | The minimum number of occurrences of text that must match the custom
+    -- data identifier\'s detection criteria in order to produce a finding with
+    -- the specified severity (severity).
+    occurrencesThreshold :: Prelude.Integer,
+    -- | The severity to assign to a finding: if the number of occurrences is
+    -- greater than or equal to the specified threshold (occurrencesThreshold);
+    -- and, if applicable, the number of occurrences is less than the threshold
+    -- for the next consecutive severity level for the custom data identifier,
+    -- moving from LOW to HIGH.
+    severity :: DataIdentifierSeverity
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SeverityLevel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'occurrencesThreshold', 'severityLevel_occurrencesThreshold' - The minimum number of occurrences of text that must match the custom
+-- data identifier\'s detection criteria in order to produce a finding with
+-- the specified severity (severity).
+--
+-- 'severity', 'severityLevel_severity' - The severity to assign to a finding: if the number of occurrences is
+-- greater than or equal to the specified threshold (occurrencesThreshold);
+-- and, if applicable, the number of occurrences is less than the threshold
+-- for the next consecutive severity level for the custom data identifier,
+-- moving from LOW to HIGH.
+newSeverityLevel ::
+  -- | 'occurrencesThreshold'
+  Prelude.Integer ->
+  -- | 'severity'
+  DataIdentifierSeverity ->
+  SeverityLevel
+newSeverityLevel pOccurrencesThreshold_ pSeverity_ =
+  SeverityLevel'
+    { occurrencesThreshold =
+        pOccurrencesThreshold_,
+      severity = pSeverity_
+    }
+
+-- | The minimum number of occurrences of text that must match the custom
+-- data identifier\'s detection criteria in order to produce a finding with
+-- the specified severity (severity).
+severityLevel_occurrencesThreshold :: Lens.Lens' SeverityLevel Prelude.Integer
+severityLevel_occurrencesThreshold = Lens.lens (\SeverityLevel' {occurrencesThreshold} -> occurrencesThreshold) (\s@SeverityLevel' {} a -> s {occurrencesThreshold = a} :: SeverityLevel)
+
+-- | The severity to assign to a finding: if the number of occurrences is
+-- greater than or equal to the specified threshold (occurrencesThreshold);
+-- and, if applicable, the number of occurrences is less than the threshold
+-- for the next consecutive severity level for the custom data identifier,
+-- moving from LOW to HIGH.
+severityLevel_severity :: Lens.Lens' SeverityLevel DataIdentifierSeverity
+severityLevel_severity = Lens.lens (\SeverityLevel' {severity} -> severity) (\s@SeverityLevel' {} a -> s {severity = a} :: SeverityLevel)
+
+instance Data.FromJSON SeverityLevel where
+  parseJSON =
+    Data.withObject
+      "SeverityLevel"
+      ( \x ->
+          SeverityLevel'
+            Prelude.<$> (x Data..: "occurrencesThreshold")
+            Prelude.<*> (x Data..: "severity")
+      )
+
+instance Prelude.Hashable SeverityLevel where
+  hashWithSalt _salt SeverityLevel' {..} =
+    _salt
+      `Prelude.hashWithSalt` occurrencesThreshold
+      `Prelude.hashWithSalt` severity
+
+instance Prelude.NFData SeverityLevel where
+  rnf SeverityLevel' {..} =
+    Prelude.rnf occurrencesThreshold
+      `Prelude.seq` Prelude.rnf severity
+
+instance Data.ToJSON SeverityLevel where
+  toJSON SeverityLevel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "occurrencesThreshold"
+                  Data..= occurrencesThreshold
+              ),
+            Prelude.Just ("severity" Data..= severity)
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/SharedAccess.hs b/gen/Amazonka/MacieV2/Types/SharedAccess.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SharedAccess.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.MacieV2.Types.SharedAccess
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SharedAccess
+  ( SharedAccess
+      ( ..,
+        SharedAccess_EXTERNAL,
+        SharedAccess_INTERNAL,
+        SharedAccess_NOT_SHARED,
+        SharedAccess_UNKNOWN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SharedAccess = SharedAccess'
+  { fromSharedAccess ::
+      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 SharedAccess_EXTERNAL :: SharedAccess
+pattern SharedAccess_EXTERNAL = SharedAccess' "EXTERNAL"
+
+pattern SharedAccess_INTERNAL :: SharedAccess
+pattern SharedAccess_INTERNAL = SharedAccess' "INTERNAL"
+
+pattern SharedAccess_NOT_SHARED :: SharedAccess
+pattern SharedAccess_NOT_SHARED = SharedAccess' "NOT_SHARED"
+
+pattern SharedAccess_UNKNOWN :: SharedAccess
+pattern SharedAccess_UNKNOWN = SharedAccess' "UNKNOWN"
+
+{-# COMPLETE
+  SharedAccess_EXTERNAL,
+  SharedAccess_INTERNAL,
+  SharedAccess_NOT_SHARED,
+  SharedAccess_UNKNOWN,
+  SharedAccess'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/SimpleCriterionForJob.hs b/gen/Amazonka/MacieV2/Types/SimpleCriterionForJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SimpleCriterionForJob.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.SimpleCriterionForJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SimpleCriterionForJob where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.JobComparator
+import Amazonka.MacieV2.Types.SimpleCriterionKeyForJob
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a property-based condition that determines whether an S3
+-- bucket is included or excluded from a classification job.
+--
+-- /See:/ 'newSimpleCriterionForJob' smart constructor.
+data SimpleCriterionForJob = SimpleCriterionForJob'
+  { -- | The operator to use in the condition. Valid values are EQ (equals) and
+    -- NE (not equals).
+    comparator :: Prelude.Maybe JobComparator,
+    -- | The property to use in the condition.
+    key :: Prelude.Maybe SimpleCriterionKeyForJob,
+    -- | An array that lists one or more values to use in the condition. If you
+    -- specify multiple values, Amazon Macie uses OR logic to join the values.
+    -- Valid values for each supported property (key) are:
+    --
+    -- -   ACCOUNT_ID - A string that represents the unique identifier for the
+    --     Amazon Web Services account that owns the bucket.
+    --
+    -- -   S3_BUCKET_EFFECTIVE_PERMISSION - A string that represents an
+    --     enumerated value that Macie defines for the
+    --     <https://docs.aws.amazon.com/macie/latest/APIReference/datasources-s3.html#datasources-s3-prop-bucketpublicaccess-effectivepermission BucketPublicAccess.effectivePermission>
+    --     property of a bucket.
+    --
+    -- -   S3_BUCKET_NAME - A string that represents the name of a bucket.
+    --
+    -- -   S3_BUCKET_SHARED_ACCESS - A string that represents an enumerated
+    --     value that Macie defines for the
+    --     <https://docs.aws.amazon.com/macie/latest/APIReference/datasources-s3.html#datasources-s3-prop-bucketmetadata-sharedaccess BucketMetadata.sharedAccess>
+    --     property of a bucket.
+    --
+    -- Values are case sensitive. Also, Macie doesn\'t support use of partial
+    -- values or wildcard characters in these values.
+    values :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SimpleCriterionForJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comparator', 'simpleCriterionForJob_comparator' - The operator to use in the condition. Valid values are EQ (equals) and
+-- NE (not equals).
+--
+-- 'key', 'simpleCriterionForJob_key' - The property to use in the condition.
+--
+-- 'values', 'simpleCriterionForJob_values' - An array that lists one or more values to use in the condition. If you
+-- specify multiple values, Amazon Macie uses OR logic to join the values.
+-- Valid values for each supported property (key) are:
+--
+-- -   ACCOUNT_ID - A string that represents the unique identifier for the
+--     Amazon Web Services account that owns the bucket.
+--
+-- -   S3_BUCKET_EFFECTIVE_PERMISSION - A string that represents an
+--     enumerated value that Macie defines for the
+--     <https://docs.aws.amazon.com/macie/latest/APIReference/datasources-s3.html#datasources-s3-prop-bucketpublicaccess-effectivepermission BucketPublicAccess.effectivePermission>
+--     property of a bucket.
+--
+-- -   S3_BUCKET_NAME - A string that represents the name of a bucket.
+--
+-- -   S3_BUCKET_SHARED_ACCESS - A string that represents an enumerated
+--     value that Macie defines for the
+--     <https://docs.aws.amazon.com/macie/latest/APIReference/datasources-s3.html#datasources-s3-prop-bucketmetadata-sharedaccess BucketMetadata.sharedAccess>
+--     property of a bucket.
+--
+-- Values are case sensitive. Also, Macie doesn\'t support use of partial
+-- values or wildcard characters in these values.
+newSimpleCriterionForJob ::
+  SimpleCriterionForJob
+newSimpleCriterionForJob =
+  SimpleCriterionForJob'
+    { comparator =
+        Prelude.Nothing,
+      key = Prelude.Nothing,
+      values = Prelude.Nothing
+    }
+
+-- | The operator to use in the condition. Valid values are EQ (equals) and
+-- NE (not equals).
+simpleCriterionForJob_comparator :: Lens.Lens' SimpleCriterionForJob (Prelude.Maybe JobComparator)
+simpleCriterionForJob_comparator = Lens.lens (\SimpleCriterionForJob' {comparator} -> comparator) (\s@SimpleCriterionForJob' {} a -> s {comparator = a} :: SimpleCriterionForJob)
+
+-- | The property to use in the condition.
+simpleCriterionForJob_key :: Lens.Lens' SimpleCriterionForJob (Prelude.Maybe SimpleCriterionKeyForJob)
+simpleCriterionForJob_key = Lens.lens (\SimpleCriterionForJob' {key} -> key) (\s@SimpleCriterionForJob' {} a -> s {key = a} :: SimpleCriterionForJob)
+
+-- | An array that lists one or more values to use in the condition. If you
+-- specify multiple values, Amazon Macie uses OR logic to join the values.
+-- Valid values for each supported property (key) are:
+--
+-- -   ACCOUNT_ID - A string that represents the unique identifier for the
+--     Amazon Web Services account that owns the bucket.
+--
+-- -   S3_BUCKET_EFFECTIVE_PERMISSION - A string that represents an
+--     enumerated value that Macie defines for the
+--     <https://docs.aws.amazon.com/macie/latest/APIReference/datasources-s3.html#datasources-s3-prop-bucketpublicaccess-effectivepermission BucketPublicAccess.effectivePermission>
+--     property of a bucket.
+--
+-- -   S3_BUCKET_NAME - A string that represents the name of a bucket.
+--
+-- -   S3_BUCKET_SHARED_ACCESS - A string that represents an enumerated
+--     value that Macie defines for the
+--     <https://docs.aws.amazon.com/macie/latest/APIReference/datasources-s3.html#datasources-s3-prop-bucketmetadata-sharedaccess BucketMetadata.sharedAccess>
+--     property of a bucket.
+--
+-- Values are case sensitive. Also, Macie doesn\'t support use of partial
+-- values or wildcard characters in these values.
+simpleCriterionForJob_values :: Lens.Lens' SimpleCriterionForJob (Prelude.Maybe [Prelude.Text])
+simpleCriterionForJob_values = Lens.lens (\SimpleCriterionForJob' {values} -> values) (\s@SimpleCriterionForJob' {} a -> s {values = a} :: SimpleCriterionForJob) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON SimpleCriterionForJob where
+  parseJSON =
+    Data.withObject
+      "SimpleCriterionForJob"
+      ( \x ->
+          SimpleCriterionForJob'
+            Prelude.<$> (x Data..:? "comparator")
+            Prelude.<*> (x Data..:? "key")
+            Prelude.<*> (x Data..:? "values" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable SimpleCriterionForJob where
+  hashWithSalt _salt SimpleCriterionForJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` comparator
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData SimpleCriterionForJob where
+  rnf SimpleCriterionForJob' {..} =
+    Prelude.rnf comparator
+      `Prelude.seq` Prelude.rnf key
+      `Prelude.seq` Prelude.rnf values
+
+instance Data.ToJSON SimpleCriterionForJob where
+  toJSON SimpleCriterionForJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("comparator" Data..=) Prelude.<$> comparator,
+            ("key" Data..=) Prelude.<$> key,
+            ("values" Data..=) Prelude.<$> values
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/SimpleCriterionKeyForJob.hs b/gen/Amazonka/MacieV2/Types/SimpleCriterionKeyForJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SimpleCriterionKeyForJob.hs
@@ -0,0 +1,83 @@
+{-# 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.MacieV2.Types.SimpleCriterionKeyForJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SimpleCriterionKeyForJob
+  ( SimpleCriterionKeyForJob
+      ( ..,
+        SimpleCriterionKeyForJob_ACCOUNT_ID,
+        SimpleCriterionKeyForJob_S3_BUCKET_EFFECTIVE_PERMISSION,
+        SimpleCriterionKeyForJob_S3_BUCKET_NAME,
+        SimpleCriterionKeyForJob_S3_BUCKET_SHARED_ACCESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The property to use in a condition that determines whether an S3 bucket
+-- is included or excluded from a classification job. Valid values are:
+newtype SimpleCriterionKeyForJob = SimpleCriterionKeyForJob'
+  { fromSimpleCriterionKeyForJob ::
+      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 SimpleCriterionKeyForJob_ACCOUNT_ID :: SimpleCriterionKeyForJob
+pattern SimpleCriterionKeyForJob_ACCOUNT_ID = SimpleCriterionKeyForJob' "ACCOUNT_ID"
+
+pattern SimpleCriterionKeyForJob_S3_BUCKET_EFFECTIVE_PERMISSION :: SimpleCriterionKeyForJob
+pattern SimpleCriterionKeyForJob_S3_BUCKET_EFFECTIVE_PERMISSION = SimpleCriterionKeyForJob' "S3_BUCKET_EFFECTIVE_PERMISSION"
+
+pattern SimpleCriterionKeyForJob_S3_BUCKET_NAME :: SimpleCriterionKeyForJob
+pattern SimpleCriterionKeyForJob_S3_BUCKET_NAME = SimpleCriterionKeyForJob' "S3_BUCKET_NAME"
+
+pattern SimpleCriterionKeyForJob_S3_BUCKET_SHARED_ACCESS :: SimpleCriterionKeyForJob
+pattern SimpleCriterionKeyForJob_S3_BUCKET_SHARED_ACCESS = SimpleCriterionKeyForJob' "S3_BUCKET_SHARED_ACCESS"
+
+{-# COMPLETE
+  SimpleCriterionKeyForJob_ACCOUNT_ID,
+  SimpleCriterionKeyForJob_S3_BUCKET_EFFECTIVE_PERMISSION,
+  SimpleCriterionKeyForJob_S3_BUCKET_NAME,
+  SimpleCriterionKeyForJob_S3_BUCKET_SHARED_ACCESS,
+  SimpleCriterionKeyForJob'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/SimpleScopeTerm.hs b/gen/Amazonka/MacieV2/Types/SimpleScopeTerm.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SimpleScopeTerm.hs
@@ -0,0 +1,205 @@
+{-# 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.MacieV2.Types.SimpleScopeTerm
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SimpleScopeTerm where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.JobComparator
+import Amazonka.MacieV2.Types.ScopeFilterKey
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a property-based condition that determines whether an S3
+-- object is included or excluded from a classification job.
+--
+-- /See:/ 'newSimpleScopeTerm' smart constructor.
+data SimpleScopeTerm = SimpleScopeTerm'
+  { -- | The operator to use in the condition. Valid values for each supported
+    -- property (key) are:
+    --
+    -- -   OBJECT_EXTENSION - EQ (equals) or NE (not equals)
+    --
+    -- -   OBJECT_KEY - STARTS_WITH
+    --
+    -- -   OBJECT_LAST_MODIFIED_DATE - Any operator except CONTAINS
+    --
+    -- -   OBJECT_SIZE - Any operator except CONTAINS
+    comparator :: Prelude.Maybe JobComparator,
+    -- | The object property to use in the condition.
+    key :: Prelude.Maybe ScopeFilterKey,
+    -- | An array that lists the values to use in the condition. If the value for
+    -- the key property is OBJECT_EXTENSION or OBJECT_KEY, this array can
+    -- specify multiple values and Amazon Macie uses OR logic to join the
+    -- values. Otherwise, this array can specify only one value.
+    --
+    -- Valid values for each supported property (key) are:
+    --
+    -- -   OBJECT_EXTENSION - A string that represents the file name extension
+    --     of an object. For example: docx or pdf
+    --
+    -- -   OBJECT_KEY - A string that represents the key prefix (folder name or
+    --     path) of an object. For example: logs or awslogs\/eventlogs. This
+    --     value applies a condition to objects whose keys (names) begin with
+    --     the specified value.
+    --
+    -- -   OBJECT_LAST_MODIFIED_DATE - The date and time (in UTC and extended
+    --     ISO 8601 format) when an object was created or last changed,
+    --     whichever is latest. For example: 2020-09-28T14:31:13Z
+    --
+    -- -   OBJECT_SIZE - An integer that represents the storage size (in bytes)
+    --     of an object.
+    --
+    -- Macie doesn\'t support use of wildcard characters in these values. Also,
+    -- string values are case sensitive.
+    values :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SimpleScopeTerm' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comparator', 'simpleScopeTerm_comparator' - The operator to use in the condition. Valid values for each supported
+-- property (key) are:
+--
+-- -   OBJECT_EXTENSION - EQ (equals) or NE (not equals)
+--
+-- -   OBJECT_KEY - STARTS_WITH
+--
+-- -   OBJECT_LAST_MODIFIED_DATE - Any operator except CONTAINS
+--
+-- -   OBJECT_SIZE - Any operator except CONTAINS
+--
+-- 'key', 'simpleScopeTerm_key' - The object property to use in the condition.
+--
+-- 'values', 'simpleScopeTerm_values' - An array that lists the values to use in the condition. If the value for
+-- the key property is OBJECT_EXTENSION or OBJECT_KEY, this array can
+-- specify multiple values and Amazon Macie uses OR logic to join the
+-- values. Otherwise, this array can specify only one value.
+--
+-- Valid values for each supported property (key) are:
+--
+-- -   OBJECT_EXTENSION - A string that represents the file name extension
+--     of an object. For example: docx or pdf
+--
+-- -   OBJECT_KEY - A string that represents the key prefix (folder name or
+--     path) of an object. For example: logs or awslogs\/eventlogs. This
+--     value applies a condition to objects whose keys (names) begin with
+--     the specified value.
+--
+-- -   OBJECT_LAST_MODIFIED_DATE - The date and time (in UTC and extended
+--     ISO 8601 format) when an object was created or last changed,
+--     whichever is latest. For example: 2020-09-28T14:31:13Z
+--
+-- -   OBJECT_SIZE - An integer that represents the storage size (in bytes)
+--     of an object.
+--
+-- Macie doesn\'t support use of wildcard characters in these values. Also,
+-- string values are case sensitive.
+newSimpleScopeTerm ::
+  SimpleScopeTerm
+newSimpleScopeTerm =
+  SimpleScopeTerm'
+    { comparator = Prelude.Nothing,
+      key = Prelude.Nothing,
+      values = Prelude.Nothing
+    }
+
+-- | The operator to use in the condition. Valid values for each supported
+-- property (key) are:
+--
+-- -   OBJECT_EXTENSION - EQ (equals) or NE (not equals)
+--
+-- -   OBJECT_KEY - STARTS_WITH
+--
+-- -   OBJECT_LAST_MODIFIED_DATE - Any operator except CONTAINS
+--
+-- -   OBJECT_SIZE - Any operator except CONTAINS
+simpleScopeTerm_comparator :: Lens.Lens' SimpleScopeTerm (Prelude.Maybe JobComparator)
+simpleScopeTerm_comparator = Lens.lens (\SimpleScopeTerm' {comparator} -> comparator) (\s@SimpleScopeTerm' {} a -> s {comparator = a} :: SimpleScopeTerm)
+
+-- | The object property to use in the condition.
+simpleScopeTerm_key :: Lens.Lens' SimpleScopeTerm (Prelude.Maybe ScopeFilterKey)
+simpleScopeTerm_key = Lens.lens (\SimpleScopeTerm' {key} -> key) (\s@SimpleScopeTerm' {} a -> s {key = a} :: SimpleScopeTerm)
+
+-- | An array that lists the values to use in the condition. If the value for
+-- the key property is OBJECT_EXTENSION or OBJECT_KEY, this array can
+-- specify multiple values and Amazon Macie uses OR logic to join the
+-- values. Otherwise, this array can specify only one value.
+--
+-- Valid values for each supported property (key) are:
+--
+-- -   OBJECT_EXTENSION - A string that represents the file name extension
+--     of an object. For example: docx or pdf
+--
+-- -   OBJECT_KEY - A string that represents the key prefix (folder name or
+--     path) of an object. For example: logs or awslogs\/eventlogs. This
+--     value applies a condition to objects whose keys (names) begin with
+--     the specified value.
+--
+-- -   OBJECT_LAST_MODIFIED_DATE - The date and time (in UTC and extended
+--     ISO 8601 format) when an object was created or last changed,
+--     whichever is latest. For example: 2020-09-28T14:31:13Z
+--
+-- -   OBJECT_SIZE - An integer that represents the storage size (in bytes)
+--     of an object.
+--
+-- Macie doesn\'t support use of wildcard characters in these values. Also,
+-- string values are case sensitive.
+simpleScopeTerm_values :: Lens.Lens' SimpleScopeTerm (Prelude.Maybe [Prelude.Text])
+simpleScopeTerm_values = Lens.lens (\SimpleScopeTerm' {values} -> values) (\s@SimpleScopeTerm' {} a -> s {values = a} :: SimpleScopeTerm) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON SimpleScopeTerm where
+  parseJSON =
+    Data.withObject
+      "SimpleScopeTerm"
+      ( \x ->
+          SimpleScopeTerm'
+            Prelude.<$> (x Data..:? "comparator")
+            Prelude.<*> (x Data..:? "key")
+            Prelude.<*> (x Data..:? "values" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable SimpleScopeTerm where
+  hashWithSalt _salt SimpleScopeTerm' {..} =
+    _salt
+      `Prelude.hashWithSalt` comparator
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData SimpleScopeTerm where
+  rnf SimpleScopeTerm' {..} =
+    Prelude.rnf comparator
+      `Prelude.seq` Prelude.rnf key
+      `Prelude.seq` Prelude.rnf values
+
+instance Data.ToJSON SimpleScopeTerm where
+  toJSON SimpleScopeTerm' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("comparator" Data..=) Prelude.<$> comparator,
+            ("key" Data..=) Prelude.<$> key,
+            ("values" Data..=) Prelude.<$> values
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/SortCriteria.hs b/gen/Amazonka/MacieV2/Types/SortCriteria.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SortCriteria.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.MacieV2.Types.SortCriteria
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SortCriteria where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.OrderBy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies criteria for sorting the results of a request for findings.
+--
+-- /See:/ 'newSortCriteria' smart constructor.
+data SortCriteria = SortCriteria'
+  { -- | The name of the property to sort the results by. This value can be the
+    -- name of any property that Amazon Macie defines for a finding.
+    attributeName :: Prelude.Maybe Prelude.Text,
+    -- | The sort order to apply to the results, based on the value for the
+    -- property specified by the attributeName property. Valid values are: ASC,
+    -- sort the results in ascending order; and, DESC, sort the results in
+    -- descending order.
+    orderBy :: Prelude.Maybe OrderBy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SortCriteria' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributeName', 'sortCriteria_attributeName' - The name of the property to sort the results by. This value can be the
+-- name of any property that Amazon Macie defines for a finding.
+--
+-- 'orderBy', 'sortCriteria_orderBy' - The sort order to apply to the results, based on the value for the
+-- property specified by the attributeName property. Valid values are: ASC,
+-- sort the results in ascending order; and, DESC, sort the results in
+-- descending order.
+newSortCriteria ::
+  SortCriteria
+newSortCriteria =
+  SortCriteria'
+    { attributeName = Prelude.Nothing,
+      orderBy = Prelude.Nothing
+    }
+
+-- | The name of the property to sort the results by. This value can be the
+-- name of any property that Amazon Macie defines for a finding.
+sortCriteria_attributeName :: Lens.Lens' SortCriteria (Prelude.Maybe Prelude.Text)
+sortCriteria_attributeName = Lens.lens (\SortCriteria' {attributeName} -> attributeName) (\s@SortCriteria' {} a -> s {attributeName = a} :: SortCriteria)
+
+-- | The sort order to apply to the results, based on the value for the
+-- property specified by the attributeName property. Valid values are: ASC,
+-- sort the results in ascending order; and, DESC, sort the results in
+-- descending order.
+sortCriteria_orderBy :: Lens.Lens' SortCriteria (Prelude.Maybe OrderBy)
+sortCriteria_orderBy = Lens.lens (\SortCriteria' {orderBy} -> orderBy) (\s@SortCriteria' {} a -> s {orderBy = a} :: SortCriteria)
+
+instance Prelude.Hashable SortCriteria where
+  hashWithSalt _salt SortCriteria' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributeName
+      `Prelude.hashWithSalt` orderBy
+
+instance Prelude.NFData SortCriteria where
+  rnf SortCriteria' {..} =
+    Prelude.rnf attributeName
+      `Prelude.seq` Prelude.rnf orderBy
+
+instance Data.ToJSON SortCriteria where
+  toJSON SortCriteria' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("attributeName" Data..=) Prelude.<$> attributeName,
+            ("orderBy" Data..=) Prelude.<$> orderBy
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/Statistics.hs b/gen/Amazonka/MacieV2/Types/Statistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/Statistics.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.Statistics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.Statistics 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 processing statistics for a classification job.
+--
+-- /See:/ 'newStatistics' smart constructor.
+data Statistics = Statistics'
+  { -- | The approximate number of objects that the job has yet to process during
+    -- its current run.
+    approximateNumberOfObjectsToProcess :: Prelude.Maybe Prelude.Double,
+    -- | The number of times that the job has run.
+    numberOfRuns :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Statistics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'approximateNumberOfObjectsToProcess', 'statistics_approximateNumberOfObjectsToProcess' - The approximate number of objects that the job has yet to process during
+-- its current run.
+--
+-- 'numberOfRuns', 'statistics_numberOfRuns' - The number of times that the job has run.
+newStatistics ::
+  Statistics
+newStatistics =
+  Statistics'
+    { approximateNumberOfObjectsToProcess =
+        Prelude.Nothing,
+      numberOfRuns = Prelude.Nothing
+    }
+
+-- | The approximate number of objects that the job has yet to process during
+-- its current run.
+statistics_approximateNumberOfObjectsToProcess :: Lens.Lens' Statistics (Prelude.Maybe Prelude.Double)
+statistics_approximateNumberOfObjectsToProcess = Lens.lens (\Statistics' {approximateNumberOfObjectsToProcess} -> approximateNumberOfObjectsToProcess) (\s@Statistics' {} a -> s {approximateNumberOfObjectsToProcess = a} :: Statistics)
+
+-- | The number of times that the job has run.
+statistics_numberOfRuns :: Lens.Lens' Statistics (Prelude.Maybe Prelude.Double)
+statistics_numberOfRuns = Lens.lens (\Statistics' {numberOfRuns} -> numberOfRuns) (\s@Statistics' {} a -> s {numberOfRuns = a} :: Statistics)
+
+instance Data.FromJSON Statistics where
+  parseJSON =
+    Data.withObject
+      "Statistics"
+      ( \x ->
+          Statistics'
+            Prelude.<$> (x Data..:? "approximateNumberOfObjectsToProcess")
+            Prelude.<*> (x Data..:? "numberOfRuns")
+      )
+
+instance Prelude.Hashable Statistics where
+  hashWithSalt _salt Statistics' {..} =
+    _salt
+      `Prelude.hashWithSalt` approximateNumberOfObjectsToProcess
+      `Prelude.hashWithSalt` numberOfRuns
+
+instance Prelude.NFData Statistics where
+  rnf Statistics' {..} =
+    Prelude.rnf approximateNumberOfObjectsToProcess
+      `Prelude.seq` Prelude.rnf numberOfRuns
diff --git a/gen/Amazonka/MacieV2/Types/StorageClass.hs b/gen/Amazonka/MacieV2/Types/StorageClass.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/StorageClass.hs
@@ -0,0 +1,107 @@
+{-# 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.MacieV2.Types.StorageClass
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.StorageClass
+  ( StorageClass
+      ( ..,
+        StorageClass_DEEP_ARCHIVE,
+        StorageClass_GLACIER,
+        StorageClass_GLACIER_IR,
+        StorageClass_INTELLIGENT_TIERING,
+        StorageClass_ONEZONE_IA,
+        StorageClass_OUTPOSTS,
+        StorageClass_REDUCED_REDUNDANCY,
+        StorageClass_STANDARD,
+        StorageClass_STANDARD_IA
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The storage class of the S3 object. Possible values are:
+newtype StorageClass = StorageClass'
+  { fromStorageClass ::
+      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 StorageClass_DEEP_ARCHIVE :: StorageClass
+pattern StorageClass_DEEP_ARCHIVE = StorageClass' "DEEP_ARCHIVE"
+
+pattern StorageClass_GLACIER :: StorageClass
+pattern StorageClass_GLACIER = StorageClass' "GLACIER"
+
+pattern StorageClass_GLACIER_IR :: StorageClass
+pattern StorageClass_GLACIER_IR = StorageClass' "GLACIER_IR"
+
+pattern StorageClass_INTELLIGENT_TIERING :: StorageClass
+pattern StorageClass_INTELLIGENT_TIERING = StorageClass' "INTELLIGENT_TIERING"
+
+pattern StorageClass_ONEZONE_IA :: StorageClass
+pattern StorageClass_ONEZONE_IA = StorageClass' "ONEZONE_IA"
+
+pattern StorageClass_OUTPOSTS :: StorageClass
+pattern StorageClass_OUTPOSTS = StorageClass' "OUTPOSTS"
+
+pattern StorageClass_REDUCED_REDUNDANCY :: StorageClass
+pattern StorageClass_REDUCED_REDUNDANCY = StorageClass' "REDUCED_REDUNDANCY"
+
+pattern StorageClass_STANDARD :: StorageClass
+pattern StorageClass_STANDARD = StorageClass' "STANDARD"
+
+pattern StorageClass_STANDARD_IA :: StorageClass
+pattern StorageClass_STANDARD_IA = StorageClass' "STANDARD_IA"
+
+{-# COMPLETE
+  StorageClass_DEEP_ARCHIVE,
+  StorageClass_GLACIER,
+  StorageClass_GLACIER_IR,
+  StorageClass_INTELLIGENT_TIERING,
+  StorageClass_ONEZONE_IA,
+  StorageClass_OUTPOSTS,
+  StorageClass_REDUCED_REDUNDANCY,
+  StorageClass_STANDARD,
+  StorageClass_STANDARD_IA,
+  StorageClass'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/SuppressDataIdentifier.hs b/gen/Amazonka/MacieV2/Types/SuppressDataIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/SuppressDataIdentifier.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.MacieV2.Types.SuppressDataIdentifier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.SuppressDataIdentifier where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.DataIdentifierType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a custom data identifier or managed data identifier that
+-- detected a type of sensitive data to start excluding or including in an
+-- S3 bucket\'s sensitivity score.
+--
+-- /See:/ 'newSuppressDataIdentifier' smart constructor.
+data SuppressDataIdentifier = SuppressDataIdentifier'
+  { -- | The unique identifier for the custom data identifier or managed data
+    -- identifier that detected the type of sensitive data to exclude or
+    -- include in the score.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The type of data identifier that detected the sensitive data. Possible
+    -- values are: CUSTOM, for a custom data identifier; and, MANAGED, for a
+    -- managed data identifier.
+    type' :: Prelude.Maybe DataIdentifierType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SuppressDataIdentifier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'suppressDataIdentifier_id' - The unique identifier for the custom data identifier or managed data
+-- identifier that detected the type of sensitive data to exclude or
+-- include in the score.
+--
+-- 'type'', 'suppressDataIdentifier_type' - The type of data identifier that detected the sensitive data. Possible
+-- values are: CUSTOM, for a custom data identifier; and, MANAGED, for a
+-- managed data identifier.
+newSuppressDataIdentifier ::
+  SuppressDataIdentifier
+newSuppressDataIdentifier =
+  SuppressDataIdentifier'
+    { id = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The unique identifier for the custom data identifier or managed data
+-- identifier that detected the type of sensitive data to exclude or
+-- include in the score.
+suppressDataIdentifier_id :: Lens.Lens' SuppressDataIdentifier (Prelude.Maybe Prelude.Text)
+suppressDataIdentifier_id = Lens.lens (\SuppressDataIdentifier' {id} -> id) (\s@SuppressDataIdentifier' {} a -> s {id = a} :: SuppressDataIdentifier)
+
+-- | The type of data identifier that detected the sensitive data. Possible
+-- values are: CUSTOM, for a custom data identifier; and, MANAGED, for a
+-- managed data identifier.
+suppressDataIdentifier_type :: Lens.Lens' SuppressDataIdentifier (Prelude.Maybe DataIdentifierType)
+suppressDataIdentifier_type = Lens.lens (\SuppressDataIdentifier' {type'} -> type') (\s@SuppressDataIdentifier' {} a -> s {type' = a} :: SuppressDataIdentifier)
+
+instance Prelude.Hashable SuppressDataIdentifier where
+  hashWithSalt _salt SuppressDataIdentifier' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData SuppressDataIdentifier where
+  rnf SuppressDataIdentifier' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON SuppressDataIdentifier where
+  toJSON SuppressDataIdentifier' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("id" Data..=) Prelude.<$> id,
+            ("type" Data..=) Prelude.<$> type'
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/TagCriterionForJob.hs b/gen/Amazonka/MacieV2/Types/TagCriterionForJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/TagCriterionForJob.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.TagCriterionForJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.TagCriterionForJob where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.JobComparator
+import Amazonka.MacieV2.Types.TagCriterionPairForJob
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a tag-based condition that determines whether an S3 bucket is
+-- included or excluded from a classification job.
+--
+-- /See:/ 'newTagCriterionForJob' smart constructor.
+data TagCriterionForJob = TagCriterionForJob'
+  { -- | The operator to use in the condition. Valid values are EQ (equals) and
+    -- NE (not equals).
+    comparator :: Prelude.Maybe JobComparator,
+    -- | The tag keys, tag values, or tag key and value pairs to use in the
+    -- condition.
+    tagValues :: Prelude.Maybe [TagCriterionPairForJob]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagCriterionForJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comparator', 'tagCriterionForJob_comparator' - The operator to use in the condition. Valid values are EQ (equals) and
+-- NE (not equals).
+--
+-- 'tagValues', 'tagCriterionForJob_tagValues' - The tag keys, tag values, or tag key and value pairs to use in the
+-- condition.
+newTagCriterionForJob ::
+  TagCriterionForJob
+newTagCriterionForJob =
+  TagCriterionForJob'
+    { comparator = Prelude.Nothing,
+      tagValues = Prelude.Nothing
+    }
+
+-- | The operator to use in the condition. Valid values are EQ (equals) and
+-- NE (not equals).
+tagCriterionForJob_comparator :: Lens.Lens' TagCriterionForJob (Prelude.Maybe JobComparator)
+tagCriterionForJob_comparator = Lens.lens (\TagCriterionForJob' {comparator} -> comparator) (\s@TagCriterionForJob' {} a -> s {comparator = a} :: TagCriterionForJob)
+
+-- | The tag keys, tag values, or tag key and value pairs to use in the
+-- condition.
+tagCriterionForJob_tagValues :: Lens.Lens' TagCriterionForJob (Prelude.Maybe [TagCriterionPairForJob])
+tagCriterionForJob_tagValues = Lens.lens (\TagCriterionForJob' {tagValues} -> tagValues) (\s@TagCriterionForJob' {} a -> s {tagValues = a} :: TagCriterionForJob) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON TagCriterionForJob where
+  parseJSON =
+    Data.withObject
+      "TagCriterionForJob"
+      ( \x ->
+          TagCriterionForJob'
+            Prelude.<$> (x Data..:? "comparator")
+            Prelude.<*> (x Data..:? "tagValues" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable TagCriterionForJob where
+  hashWithSalt _salt TagCriterionForJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` comparator
+      `Prelude.hashWithSalt` tagValues
+
+instance Prelude.NFData TagCriterionForJob where
+  rnf TagCriterionForJob' {..} =
+    Prelude.rnf comparator
+      `Prelude.seq` Prelude.rnf tagValues
+
+instance Data.ToJSON TagCriterionForJob where
+  toJSON TagCriterionForJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("comparator" Data..=) Prelude.<$> comparator,
+            ("tagValues" Data..=) Prelude.<$> tagValues
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/TagCriterionPairForJob.hs b/gen/Amazonka/MacieV2/Types/TagCriterionPairForJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/TagCriterionPairForJob.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.MacieV2.Types.TagCriterionPairForJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.TagCriterionPairForJob where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a tag key, a tag value, or a tag key and value (as a pair) to
+-- use in a tag-based condition that determines whether an S3 bucket is
+-- included or excluded from a classification job. Tag keys and values are
+-- case sensitive. Also, Amazon Macie doesn\'t support use of partial
+-- values or wildcard characters in tag-based conditions.
+--
+-- /See:/ 'newTagCriterionPairForJob' smart constructor.
+data TagCriterionPairForJob = TagCriterionPairForJob'
+  { -- | The value for the tag key to use in the condition.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | The tag value to use in the condition.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagCriterionPairForJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'tagCriterionPairForJob_key' - The value for the tag key to use in the condition.
+--
+-- 'value', 'tagCriterionPairForJob_value' - The tag value to use in the condition.
+newTagCriterionPairForJob ::
+  TagCriterionPairForJob
+newTagCriterionPairForJob =
+  TagCriterionPairForJob'
+    { key = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The value for the tag key to use in the condition.
+tagCriterionPairForJob_key :: Lens.Lens' TagCriterionPairForJob (Prelude.Maybe Prelude.Text)
+tagCriterionPairForJob_key = Lens.lens (\TagCriterionPairForJob' {key} -> key) (\s@TagCriterionPairForJob' {} a -> s {key = a} :: TagCriterionPairForJob)
+
+-- | The tag value to use in the condition.
+tagCriterionPairForJob_value :: Lens.Lens' TagCriterionPairForJob (Prelude.Maybe Prelude.Text)
+tagCriterionPairForJob_value = Lens.lens (\TagCriterionPairForJob' {value} -> value) (\s@TagCriterionPairForJob' {} a -> s {value = a} :: TagCriterionPairForJob)
+
+instance Data.FromJSON TagCriterionPairForJob where
+  parseJSON =
+    Data.withObject
+      "TagCriterionPairForJob"
+      ( \x ->
+          TagCriterionPairForJob'
+            Prelude.<$> (x Data..:? "key")
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable TagCriterionPairForJob where
+  hashWithSalt _salt TagCriterionPairForJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData TagCriterionPairForJob where
+  rnf TagCriterionPairForJob' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON TagCriterionPairForJob where
+  toJSON TagCriterionPairForJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("key" Data..=) Prelude.<$> key,
+            ("value" Data..=) Prelude.<$> value
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/TagScopeTerm.hs b/gen/Amazonka/MacieV2/Types/TagScopeTerm.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/TagScopeTerm.hs
@@ -0,0 +1,135 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.TagScopeTerm
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.TagScopeTerm where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.JobComparator
+import Amazonka.MacieV2.Types.TagTarget
+import Amazonka.MacieV2.Types.TagValuePair
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a tag-based condition that determines whether an S3 object is
+-- included or excluded from a classification job.
+--
+-- /See:/ 'newTagScopeTerm' smart constructor.
+data TagScopeTerm = TagScopeTerm'
+  { -- | The operator to use in the condition. Valid values are EQ (equals) or NE
+    -- (not equals).
+    comparator :: Prelude.Maybe JobComparator,
+    -- | The object property to use in the condition. The only valid value is
+    -- TAG.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | The tag keys or tag key and value pairs to use in the condition. To
+    -- specify only tag keys in a condition, specify the keys in this array and
+    -- set the value for each associated tag value to an empty string.
+    tagValues :: Prelude.Maybe [TagValuePair],
+    -- | The type of object to apply the condition to.
+    target :: Prelude.Maybe TagTarget
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagScopeTerm' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comparator', 'tagScopeTerm_comparator' - The operator to use in the condition. Valid values are EQ (equals) or NE
+-- (not equals).
+--
+-- 'key', 'tagScopeTerm_key' - The object property to use in the condition. The only valid value is
+-- TAG.
+--
+-- 'tagValues', 'tagScopeTerm_tagValues' - The tag keys or tag key and value pairs to use in the condition. To
+-- specify only tag keys in a condition, specify the keys in this array and
+-- set the value for each associated tag value to an empty string.
+--
+-- 'target', 'tagScopeTerm_target' - The type of object to apply the condition to.
+newTagScopeTerm ::
+  TagScopeTerm
+newTagScopeTerm =
+  TagScopeTerm'
+    { comparator = Prelude.Nothing,
+      key = Prelude.Nothing,
+      tagValues = Prelude.Nothing,
+      target = Prelude.Nothing
+    }
+
+-- | The operator to use in the condition. Valid values are EQ (equals) or NE
+-- (not equals).
+tagScopeTerm_comparator :: Lens.Lens' TagScopeTerm (Prelude.Maybe JobComparator)
+tagScopeTerm_comparator = Lens.lens (\TagScopeTerm' {comparator} -> comparator) (\s@TagScopeTerm' {} a -> s {comparator = a} :: TagScopeTerm)
+
+-- | The object property to use in the condition. The only valid value is
+-- TAG.
+tagScopeTerm_key :: Lens.Lens' TagScopeTerm (Prelude.Maybe Prelude.Text)
+tagScopeTerm_key = Lens.lens (\TagScopeTerm' {key} -> key) (\s@TagScopeTerm' {} a -> s {key = a} :: TagScopeTerm)
+
+-- | The tag keys or tag key and value pairs to use in the condition. To
+-- specify only tag keys in a condition, specify the keys in this array and
+-- set the value for each associated tag value to an empty string.
+tagScopeTerm_tagValues :: Lens.Lens' TagScopeTerm (Prelude.Maybe [TagValuePair])
+tagScopeTerm_tagValues = Lens.lens (\TagScopeTerm' {tagValues} -> tagValues) (\s@TagScopeTerm' {} a -> s {tagValues = a} :: TagScopeTerm) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of object to apply the condition to.
+tagScopeTerm_target :: Lens.Lens' TagScopeTerm (Prelude.Maybe TagTarget)
+tagScopeTerm_target = Lens.lens (\TagScopeTerm' {target} -> target) (\s@TagScopeTerm' {} a -> s {target = a} :: TagScopeTerm)
+
+instance Data.FromJSON TagScopeTerm where
+  parseJSON =
+    Data.withObject
+      "TagScopeTerm"
+      ( \x ->
+          TagScopeTerm'
+            Prelude.<$> (x Data..:? "comparator")
+            Prelude.<*> (x Data..:? "key")
+            Prelude.<*> (x Data..:? "tagValues" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "target")
+      )
+
+instance Prelude.Hashable TagScopeTerm where
+  hashWithSalt _salt TagScopeTerm' {..} =
+    _salt
+      `Prelude.hashWithSalt` comparator
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` tagValues
+      `Prelude.hashWithSalt` target
+
+instance Prelude.NFData TagScopeTerm where
+  rnf TagScopeTerm' {..} =
+    Prelude.rnf comparator
+      `Prelude.seq` Prelude.rnf key
+      `Prelude.seq` Prelude.rnf tagValues
+      `Prelude.seq` Prelude.rnf target
+
+instance Data.ToJSON TagScopeTerm where
+  toJSON TagScopeTerm' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("comparator" Data..=) Prelude.<$> comparator,
+            ("key" Data..=) Prelude.<$> key,
+            ("tagValues" Data..=) Prelude.<$> tagValues,
+            ("target" Data..=) Prelude.<$> target
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/TagTarget.hs b/gen/Amazonka/MacieV2/Types/TagTarget.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/TagTarget.hs
@@ -0,0 +1,67 @@
+{-# 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.MacieV2.Types.TagTarget
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.TagTarget
+  ( TagTarget
+      ( ..,
+        TagTarget_S3_OBJECT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The type of object to apply a tag-based condition to. Valid values are:
+newtype TagTarget = TagTarget'
+  { fromTagTarget ::
+      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 TagTarget_S3_OBJECT :: TagTarget
+pattern TagTarget_S3_OBJECT = TagTarget' "S3_OBJECT"
+
+{-# COMPLETE
+  TagTarget_S3_OBJECT,
+  TagTarget'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/TagValuePair.hs b/gen/Amazonka/MacieV2/Types/TagValuePair.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/TagValuePair.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.TagValuePair
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.TagValuePair where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a tag key or tag key and value pair to use in a tag-based
+-- condition that determines whether an S3 object is included or excluded
+-- from a classification job. Tag keys and values are case sensitive. Also,
+-- Amazon Macie doesn\'t support use of partial values or wildcard
+-- characters in tag-based conditions.
+--
+-- /See:/ 'newTagValuePair' smart constructor.
+data TagValuePair = TagValuePair'
+  { -- | The value for the tag key to use in the condition.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | The tag value, associated with the specified tag key (key), to use in
+    -- the condition. To specify only a tag key for a condition, specify the
+    -- tag key for the key property and set this value to an empty string.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagValuePair' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'tagValuePair_key' - The value for the tag key to use in the condition.
+--
+-- 'value', 'tagValuePair_value' - The tag value, associated with the specified tag key (key), to use in
+-- the condition. To specify only a tag key for a condition, specify the
+-- tag key for the key property and set this value to an empty string.
+newTagValuePair ::
+  TagValuePair
+newTagValuePair =
+  TagValuePair'
+    { key = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The value for the tag key to use in the condition.
+tagValuePair_key :: Lens.Lens' TagValuePair (Prelude.Maybe Prelude.Text)
+tagValuePair_key = Lens.lens (\TagValuePair' {key} -> key) (\s@TagValuePair' {} a -> s {key = a} :: TagValuePair)
+
+-- | The tag value, associated with the specified tag key (key), to use in
+-- the condition. To specify only a tag key for a condition, specify the
+-- tag key for the key property and set this value to an empty string.
+tagValuePair_value :: Lens.Lens' TagValuePair (Prelude.Maybe Prelude.Text)
+tagValuePair_value = Lens.lens (\TagValuePair' {value} -> value) (\s@TagValuePair' {} a -> s {value = a} :: TagValuePair)
+
+instance Data.FromJSON TagValuePair where
+  parseJSON =
+    Data.withObject
+      "TagValuePair"
+      ( \x ->
+          TagValuePair'
+            Prelude.<$> (x Data..:? "key")
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable TagValuePair where
+  hashWithSalt _salt TagValuePair' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData TagValuePair where
+  rnf TagValuePair' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON TagValuePair where
+  toJSON TagValuePair' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("key" Data..=) Prelude.<$> key,
+            ("value" Data..=) Prelude.<$> value
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/TimeRange.hs b/gen/Amazonka/MacieV2/Types/TimeRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/TimeRange.hs
@@ -0,0 +1,73 @@
+{-# 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.MacieV2.Types.TimeRange
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.TimeRange
+  ( TimeRange
+      ( ..,
+        TimeRange_MONTH_TO_DATE,
+        TimeRange_PAST_30_DAYS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An inclusive time period that Amazon Macie usage data applies to.
+-- Possible values are:
+newtype TimeRange = TimeRange'
+  { fromTimeRange ::
+      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 TimeRange_MONTH_TO_DATE :: TimeRange
+pattern TimeRange_MONTH_TO_DATE = TimeRange' "MONTH_TO_DATE"
+
+pattern TimeRange_PAST_30_DAYS :: TimeRange
+pattern TimeRange_PAST_30_DAYS = TimeRange' "PAST_30_DAYS"
+
+{-# COMPLETE
+  TimeRange_MONTH_TO_DATE,
+  TimeRange_PAST_30_DAYS,
+  TimeRange'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/Type.hs b/gen/Amazonka/MacieV2/Types/Type.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/Type.hs
@@ -0,0 +1,73 @@
+{-# 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.MacieV2.Types.Type
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.Type
+  ( Type
+      ( ..,
+        Type_AES256,
+        Type_Aws_kms,
+        Type_NONE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Type = Type' {fromType :: 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 Type_AES256 :: Type
+pattern Type_AES256 = Type' "AES256"
+
+pattern Type_Aws_kms :: Type
+pattern Type_Aws_kms = Type' "aws:kms"
+
+pattern Type_NONE :: Type
+pattern Type_NONE = Type' "NONE"
+
+{-# COMPLETE
+  Type_AES256,
+  Type_Aws_kms,
+  Type_NONE,
+  Type'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/UnavailabilityReasonCode.hs b/gen/Amazonka/MacieV2/Types/UnavailabilityReasonCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/UnavailabilityReasonCode.hs
@@ -0,0 +1,88 @@
+{-# 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.MacieV2.Types.UnavailabilityReasonCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.UnavailabilityReasonCode
+  ( UnavailabilityReasonCode
+      ( ..,
+        UnavailabilityReasonCode_INVALID_CLASSIFICATION_RESULT,
+        UnavailabilityReasonCode_OBJECT_EXCEEDS_SIZE_QUOTA,
+        UnavailabilityReasonCode_OBJECT_UNAVAILABLE,
+        UnavailabilityReasonCode_UNSUPPORTED_FINDING_TYPE,
+        UnavailabilityReasonCode_UNSUPPORTED_OBJECT_TYPE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies why occurrences of sensitive data can\'t be retrieved for a
+-- finding. Possible values are:
+newtype UnavailabilityReasonCode = UnavailabilityReasonCode'
+  { fromUnavailabilityReasonCode ::
+      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 UnavailabilityReasonCode_INVALID_CLASSIFICATION_RESULT :: UnavailabilityReasonCode
+pattern UnavailabilityReasonCode_INVALID_CLASSIFICATION_RESULT = UnavailabilityReasonCode' "INVALID_CLASSIFICATION_RESULT"
+
+pattern UnavailabilityReasonCode_OBJECT_EXCEEDS_SIZE_QUOTA :: UnavailabilityReasonCode
+pattern UnavailabilityReasonCode_OBJECT_EXCEEDS_SIZE_QUOTA = UnavailabilityReasonCode' "OBJECT_EXCEEDS_SIZE_QUOTA"
+
+pattern UnavailabilityReasonCode_OBJECT_UNAVAILABLE :: UnavailabilityReasonCode
+pattern UnavailabilityReasonCode_OBJECT_UNAVAILABLE = UnavailabilityReasonCode' "OBJECT_UNAVAILABLE"
+
+pattern UnavailabilityReasonCode_UNSUPPORTED_FINDING_TYPE :: UnavailabilityReasonCode
+pattern UnavailabilityReasonCode_UNSUPPORTED_FINDING_TYPE = UnavailabilityReasonCode' "UNSUPPORTED_FINDING_TYPE"
+
+pattern UnavailabilityReasonCode_UNSUPPORTED_OBJECT_TYPE :: UnavailabilityReasonCode
+pattern UnavailabilityReasonCode_UNSUPPORTED_OBJECT_TYPE = UnavailabilityReasonCode' "UNSUPPORTED_OBJECT_TYPE"
+
+{-# COMPLETE
+  UnavailabilityReasonCode_INVALID_CLASSIFICATION_RESULT,
+  UnavailabilityReasonCode_OBJECT_EXCEEDS_SIZE_QUOTA,
+  UnavailabilityReasonCode_OBJECT_UNAVAILABLE,
+  UnavailabilityReasonCode_UNSUPPORTED_FINDING_TYPE,
+  UnavailabilityReasonCode_UNSUPPORTED_OBJECT_TYPE,
+  UnavailabilityReasonCode'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/Unit.hs b/gen/Amazonka/MacieV2/Types/Unit.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/Unit.hs
@@ -0,0 +1,63 @@
+{-# 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.MacieV2.Types.Unit
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.Unit
+  ( Unit
+      ( ..,
+        Unit_TERABYTES
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Unit = Unit' {fromUnit :: 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 Unit_TERABYTES :: Unit
+pattern Unit_TERABYTES = Unit' "TERABYTES"
+
+{-# COMPLETE
+  Unit_TERABYTES,
+  Unit'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/UnprocessedAccount.hs b/gen/Amazonka/MacieV2/Types/UnprocessedAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/UnprocessedAccount.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.UnprocessedAccount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.UnprocessedAccount where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.ErrorCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about an account-related request that hasn\'t been
+-- processed.
+--
+-- /See:/ 'newUnprocessedAccount' smart constructor.
+data UnprocessedAccount = UnprocessedAccount'
+  { -- | The Amazon Web Services account ID for the account that the request
+    -- applies to.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The source of the issue or delay in processing the request.
+    errorCode :: Prelude.Maybe ErrorCode,
+    -- | The reason why the request hasn\'t been processed.
+    errorMessage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UnprocessedAccount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'unprocessedAccount_accountId' - The Amazon Web Services account ID for the account that the request
+-- applies to.
+--
+-- 'errorCode', 'unprocessedAccount_errorCode' - The source of the issue or delay in processing the request.
+--
+-- 'errorMessage', 'unprocessedAccount_errorMessage' - The reason why the request hasn\'t been processed.
+newUnprocessedAccount ::
+  UnprocessedAccount
+newUnprocessedAccount =
+  UnprocessedAccount'
+    { accountId = Prelude.Nothing,
+      errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing
+    }
+
+-- | The Amazon Web Services account ID for the account that the request
+-- applies to.
+unprocessedAccount_accountId :: Lens.Lens' UnprocessedAccount (Prelude.Maybe Prelude.Text)
+unprocessedAccount_accountId = Lens.lens (\UnprocessedAccount' {accountId} -> accountId) (\s@UnprocessedAccount' {} a -> s {accountId = a} :: UnprocessedAccount)
+
+-- | The source of the issue or delay in processing the request.
+unprocessedAccount_errorCode :: Lens.Lens' UnprocessedAccount (Prelude.Maybe ErrorCode)
+unprocessedAccount_errorCode = Lens.lens (\UnprocessedAccount' {errorCode} -> errorCode) (\s@UnprocessedAccount' {} a -> s {errorCode = a} :: UnprocessedAccount)
+
+-- | The reason why the request hasn\'t been processed.
+unprocessedAccount_errorMessage :: Lens.Lens' UnprocessedAccount (Prelude.Maybe Prelude.Text)
+unprocessedAccount_errorMessage = Lens.lens (\UnprocessedAccount' {errorMessage} -> errorMessage) (\s@UnprocessedAccount' {} a -> s {errorMessage = a} :: UnprocessedAccount)
+
+instance Data.FromJSON UnprocessedAccount where
+  parseJSON =
+    Data.withObject
+      "UnprocessedAccount"
+      ( \x ->
+          UnprocessedAccount'
+            Prelude.<$> (x Data..:? "accountId")
+            Prelude.<*> (x Data..:? "errorCode")
+            Prelude.<*> (x Data..:? "errorMessage")
+      )
+
+instance Prelude.Hashable UnprocessedAccount where
+  hashWithSalt _salt UnprocessedAccount' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+
+instance Prelude.NFData UnprocessedAccount where
+  rnf UnprocessedAccount' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
diff --git a/gen/Amazonka/MacieV2/Types/UsageByAccount.hs b/gen/Amazonka/MacieV2/Types/UsageByAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/UsageByAccount.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.MacieV2.Types.UsageByAccount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.UsageByAccount where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.Currency
+import Amazonka.MacieV2.Types.ServiceLimit
+import Amazonka.MacieV2.Types.UsageType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides data for a specific usage metric and the corresponding quota
+-- for an Amazon Macie account.
+--
+-- /See:/ 'newUsageByAccount' smart constructor.
+data UsageByAccount = UsageByAccount'
+  { -- | The type of currency that the value for the metric (estimatedCost) is
+    -- reported in.
+    currency :: Prelude.Maybe Currency,
+    -- | The estimated value for the metric.
+    estimatedCost :: Prelude.Maybe Prelude.Text,
+    -- | The current value for the quota that corresponds to the metric specified
+    -- by the type field.
+    serviceLimit :: Prelude.Maybe ServiceLimit,
+    -- | The name of the metric. Possible values are:
+    -- AUTOMATED_OBJECT_MONITORING, to monitor S3 objects for automated
+    -- sensitive data discovery; AUTOMATED_SENSITIVE_DATA_DISCOVERY, to analyze
+    -- S3 objects for automated sensitive data discovery;
+    -- DATA_INVENTORY_EVALUATION, to monitor S3 buckets; and,
+    -- SENSITIVE_DATA_DISCOVERY, to run classification jobs.
+    type' :: Prelude.Maybe UsageType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UsageByAccount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'currency', 'usageByAccount_currency' - The type of currency that the value for the metric (estimatedCost) is
+-- reported in.
+--
+-- 'estimatedCost', 'usageByAccount_estimatedCost' - The estimated value for the metric.
+--
+-- 'serviceLimit', 'usageByAccount_serviceLimit' - The current value for the quota that corresponds to the metric specified
+-- by the type field.
+--
+-- 'type'', 'usageByAccount_type' - The name of the metric. Possible values are:
+-- AUTOMATED_OBJECT_MONITORING, to monitor S3 objects for automated
+-- sensitive data discovery; AUTOMATED_SENSITIVE_DATA_DISCOVERY, to analyze
+-- S3 objects for automated sensitive data discovery;
+-- DATA_INVENTORY_EVALUATION, to monitor S3 buckets; and,
+-- SENSITIVE_DATA_DISCOVERY, to run classification jobs.
+newUsageByAccount ::
+  UsageByAccount
+newUsageByAccount =
+  UsageByAccount'
+    { currency = Prelude.Nothing,
+      estimatedCost = Prelude.Nothing,
+      serviceLimit = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The type of currency that the value for the metric (estimatedCost) is
+-- reported in.
+usageByAccount_currency :: Lens.Lens' UsageByAccount (Prelude.Maybe Currency)
+usageByAccount_currency = Lens.lens (\UsageByAccount' {currency} -> currency) (\s@UsageByAccount' {} a -> s {currency = a} :: UsageByAccount)
+
+-- | The estimated value for the metric.
+usageByAccount_estimatedCost :: Lens.Lens' UsageByAccount (Prelude.Maybe Prelude.Text)
+usageByAccount_estimatedCost = Lens.lens (\UsageByAccount' {estimatedCost} -> estimatedCost) (\s@UsageByAccount' {} a -> s {estimatedCost = a} :: UsageByAccount)
+
+-- | The current value for the quota that corresponds to the metric specified
+-- by the type field.
+usageByAccount_serviceLimit :: Lens.Lens' UsageByAccount (Prelude.Maybe ServiceLimit)
+usageByAccount_serviceLimit = Lens.lens (\UsageByAccount' {serviceLimit} -> serviceLimit) (\s@UsageByAccount' {} a -> s {serviceLimit = a} :: UsageByAccount)
+
+-- | The name of the metric. Possible values are:
+-- AUTOMATED_OBJECT_MONITORING, to monitor S3 objects for automated
+-- sensitive data discovery; AUTOMATED_SENSITIVE_DATA_DISCOVERY, to analyze
+-- S3 objects for automated sensitive data discovery;
+-- DATA_INVENTORY_EVALUATION, to monitor S3 buckets; and,
+-- SENSITIVE_DATA_DISCOVERY, to run classification jobs.
+usageByAccount_type :: Lens.Lens' UsageByAccount (Prelude.Maybe UsageType)
+usageByAccount_type = Lens.lens (\UsageByAccount' {type'} -> type') (\s@UsageByAccount' {} a -> s {type' = a} :: UsageByAccount)
+
+instance Data.FromJSON UsageByAccount where
+  parseJSON =
+    Data.withObject
+      "UsageByAccount"
+      ( \x ->
+          UsageByAccount'
+            Prelude.<$> (x Data..:? "currency")
+            Prelude.<*> (x Data..:? "estimatedCost")
+            Prelude.<*> (x Data..:? "serviceLimit")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable UsageByAccount where
+  hashWithSalt _salt UsageByAccount' {..} =
+    _salt
+      `Prelude.hashWithSalt` currency
+      `Prelude.hashWithSalt` estimatedCost
+      `Prelude.hashWithSalt` serviceLimit
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData UsageByAccount where
+  rnf UsageByAccount' {..} =
+    Prelude.rnf currency
+      `Prelude.seq` Prelude.rnf estimatedCost
+      `Prelude.seq` Prelude.rnf serviceLimit
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/MacieV2/Types/UsageRecord.hs b/gen/Amazonka/MacieV2/Types/UsageRecord.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/UsageRecord.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.UsageRecord
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.UsageRecord where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.UsageByAccount
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides quota and aggregated usage data for an Amazon Macie account.
+--
+-- /See:/ 'newUsageRecord' smart constructor.
+data UsageRecord = UsageRecord'
+  { -- | The unique identifier for the Amazon Web Services account that the data
+    -- applies to.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in UTC and extended ISO 8601 format, when the free
+    -- trial of automated sensitive data discovery started for the account. If
+    -- the account is a member account in an organization, this value is the
+    -- same as the value for the organization\'s Amazon Macie administrator
+    -- account.
+    automatedDiscoveryFreeTrialStartDate :: Prelude.Maybe Data.ISO8601,
+    -- | The date and time, in UTC and extended ISO 8601 format, when the Amazon
+    -- Macie free trial started for the account.
+    freeTrialStartDate :: Prelude.Maybe Data.ISO8601,
+    -- | An array of objects that contains usage data and quotas for the account.
+    -- Each object contains the data for a specific usage metric and the
+    -- corresponding quota.
+    usage :: Prelude.Maybe [UsageByAccount]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UsageRecord' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'usageRecord_accountId' - The unique identifier for the Amazon Web Services account that the data
+-- applies to.
+--
+-- 'automatedDiscoveryFreeTrialStartDate', 'usageRecord_automatedDiscoveryFreeTrialStartDate' - The date and time, in UTC and extended ISO 8601 format, when the free
+-- trial of automated sensitive data discovery started for the account. If
+-- the account is a member account in an organization, this value is the
+-- same as the value for the organization\'s Amazon Macie administrator
+-- account.
+--
+-- 'freeTrialStartDate', 'usageRecord_freeTrialStartDate' - The date and time, in UTC and extended ISO 8601 format, when the Amazon
+-- Macie free trial started for the account.
+--
+-- 'usage', 'usageRecord_usage' - An array of objects that contains usage data and quotas for the account.
+-- Each object contains the data for a specific usage metric and the
+-- corresponding quota.
+newUsageRecord ::
+  UsageRecord
+newUsageRecord =
+  UsageRecord'
+    { accountId = Prelude.Nothing,
+      automatedDiscoveryFreeTrialStartDate =
+        Prelude.Nothing,
+      freeTrialStartDate = Prelude.Nothing,
+      usage = Prelude.Nothing
+    }
+
+-- | The unique identifier for the Amazon Web Services account that the data
+-- applies to.
+usageRecord_accountId :: Lens.Lens' UsageRecord (Prelude.Maybe Prelude.Text)
+usageRecord_accountId = Lens.lens (\UsageRecord' {accountId} -> accountId) (\s@UsageRecord' {} a -> s {accountId = a} :: UsageRecord)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the free
+-- trial of automated sensitive data discovery started for the account. If
+-- the account is a member account in an organization, this value is the
+-- same as the value for the organization\'s Amazon Macie administrator
+-- account.
+usageRecord_automatedDiscoveryFreeTrialStartDate :: Lens.Lens' UsageRecord (Prelude.Maybe Prelude.UTCTime)
+usageRecord_automatedDiscoveryFreeTrialStartDate = Lens.lens (\UsageRecord' {automatedDiscoveryFreeTrialStartDate} -> automatedDiscoveryFreeTrialStartDate) (\s@UsageRecord' {} a -> s {automatedDiscoveryFreeTrialStartDate = a} :: UsageRecord) Prelude.. Lens.mapping Data._Time
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the Amazon
+-- Macie free trial started for the account.
+usageRecord_freeTrialStartDate :: Lens.Lens' UsageRecord (Prelude.Maybe Prelude.UTCTime)
+usageRecord_freeTrialStartDate = Lens.lens (\UsageRecord' {freeTrialStartDate} -> freeTrialStartDate) (\s@UsageRecord' {} a -> s {freeTrialStartDate = a} :: UsageRecord) Prelude.. Lens.mapping Data._Time
+
+-- | An array of objects that contains usage data and quotas for the account.
+-- Each object contains the data for a specific usage metric and the
+-- corresponding quota.
+usageRecord_usage :: Lens.Lens' UsageRecord (Prelude.Maybe [UsageByAccount])
+usageRecord_usage = Lens.lens (\UsageRecord' {usage} -> usage) (\s@UsageRecord' {} a -> s {usage = a} :: UsageRecord) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON UsageRecord where
+  parseJSON =
+    Data.withObject
+      "UsageRecord"
+      ( \x ->
+          UsageRecord'
+            Prelude.<$> (x Data..:? "accountId")
+            Prelude.<*> (x Data..:? "automatedDiscoveryFreeTrialStartDate")
+            Prelude.<*> (x Data..:? "freeTrialStartDate")
+            Prelude.<*> (x Data..:? "usage" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable UsageRecord where
+  hashWithSalt _salt UsageRecord' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` automatedDiscoveryFreeTrialStartDate
+      `Prelude.hashWithSalt` freeTrialStartDate
+      `Prelude.hashWithSalt` usage
+
+instance Prelude.NFData UsageRecord where
+  rnf UsageRecord' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf automatedDiscoveryFreeTrialStartDate
+      `Prelude.seq` Prelude.rnf freeTrialStartDate
+      `Prelude.seq` Prelude.rnf usage
diff --git a/gen/Amazonka/MacieV2/Types/UsageStatisticsFilter.hs b/gen/Amazonka/MacieV2/Types/UsageStatisticsFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/UsageStatisticsFilter.hs
@@ -0,0 +1,159 @@
+{-# 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.MacieV2.Types.UsageStatisticsFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.UsageStatisticsFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.UsageStatisticsFilterComparator
+import Amazonka.MacieV2.Types.UsageStatisticsFilterKey
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a condition for filtering the results of a query for quota and
+-- usage data for one or more Amazon Macie accounts.
+--
+-- /See:/ 'newUsageStatisticsFilter' smart constructor.
+data UsageStatisticsFilter = UsageStatisticsFilter'
+  { -- | The operator to use in the condition. If the value for the key property
+    -- is accountId, this value must be CONTAINS. If the value for the key
+    -- property is any other supported field, this value can be EQ, GT, GTE,
+    -- LT, LTE, or NE.
+    comparator :: Prelude.Maybe UsageStatisticsFilterComparator,
+    -- | The field to use in the condition.
+    key :: Prelude.Maybe UsageStatisticsFilterKey,
+    -- | An array that lists values to use in the condition, based on the value
+    -- for the field specified by the key property. If the value for the key
+    -- property is accountId, this array can specify multiple values.
+    -- Otherwise, this array can specify only one value.
+    --
+    -- Valid values for each supported field are:
+    --
+    -- -   accountId - The unique identifier for an Amazon Web Services
+    --     account.
+    --
+    -- -   freeTrialStartDate - The date and time, in UTC and extended ISO 8601
+    --     format, when the Amazon Macie free trial started for an account.
+    --
+    -- -   serviceLimit - A Boolean (true or false) value that indicates
+    --     whether an account has reached its monthly quota.
+    --
+    -- -   total - A string that represents the current estimated cost for an
+    --     account.
+    values :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UsageStatisticsFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comparator', 'usageStatisticsFilter_comparator' - The operator to use in the condition. If the value for the key property
+-- is accountId, this value must be CONTAINS. If the value for the key
+-- property is any other supported field, this value can be EQ, GT, GTE,
+-- LT, LTE, or NE.
+--
+-- 'key', 'usageStatisticsFilter_key' - The field to use in the condition.
+--
+-- 'values', 'usageStatisticsFilter_values' - An array that lists values to use in the condition, based on the value
+-- for the field specified by the key property. If the value for the key
+-- property is accountId, this array can specify multiple values.
+-- Otherwise, this array can specify only one value.
+--
+-- Valid values for each supported field are:
+--
+-- -   accountId - The unique identifier for an Amazon Web Services
+--     account.
+--
+-- -   freeTrialStartDate - The date and time, in UTC and extended ISO 8601
+--     format, when the Amazon Macie free trial started for an account.
+--
+-- -   serviceLimit - A Boolean (true or false) value that indicates
+--     whether an account has reached its monthly quota.
+--
+-- -   total - A string that represents the current estimated cost for an
+--     account.
+newUsageStatisticsFilter ::
+  UsageStatisticsFilter
+newUsageStatisticsFilter =
+  UsageStatisticsFilter'
+    { comparator =
+        Prelude.Nothing,
+      key = Prelude.Nothing,
+      values = Prelude.Nothing
+    }
+
+-- | The operator to use in the condition. If the value for the key property
+-- is accountId, this value must be CONTAINS. If the value for the key
+-- property is any other supported field, this value can be EQ, GT, GTE,
+-- LT, LTE, or NE.
+usageStatisticsFilter_comparator :: Lens.Lens' UsageStatisticsFilter (Prelude.Maybe UsageStatisticsFilterComparator)
+usageStatisticsFilter_comparator = Lens.lens (\UsageStatisticsFilter' {comparator} -> comparator) (\s@UsageStatisticsFilter' {} a -> s {comparator = a} :: UsageStatisticsFilter)
+
+-- | The field to use in the condition.
+usageStatisticsFilter_key :: Lens.Lens' UsageStatisticsFilter (Prelude.Maybe UsageStatisticsFilterKey)
+usageStatisticsFilter_key = Lens.lens (\UsageStatisticsFilter' {key} -> key) (\s@UsageStatisticsFilter' {} a -> s {key = a} :: UsageStatisticsFilter)
+
+-- | An array that lists values to use in the condition, based on the value
+-- for the field specified by the key property. If the value for the key
+-- property is accountId, this array can specify multiple values.
+-- Otherwise, this array can specify only one value.
+--
+-- Valid values for each supported field are:
+--
+-- -   accountId - The unique identifier for an Amazon Web Services
+--     account.
+--
+-- -   freeTrialStartDate - The date and time, in UTC and extended ISO 8601
+--     format, when the Amazon Macie free trial started for an account.
+--
+-- -   serviceLimit - A Boolean (true or false) value that indicates
+--     whether an account has reached its monthly quota.
+--
+-- -   total - A string that represents the current estimated cost for an
+--     account.
+usageStatisticsFilter_values :: Lens.Lens' UsageStatisticsFilter (Prelude.Maybe [Prelude.Text])
+usageStatisticsFilter_values = Lens.lens (\UsageStatisticsFilter' {values} -> values) (\s@UsageStatisticsFilter' {} a -> s {values = a} :: UsageStatisticsFilter) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable UsageStatisticsFilter where
+  hashWithSalt _salt UsageStatisticsFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` comparator
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData UsageStatisticsFilter where
+  rnf UsageStatisticsFilter' {..} =
+    Prelude.rnf comparator
+      `Prelude.seq` Prelude.rnf key
+      `Prelude.seq` Prelude.rnf values
+
+instance Data.ToJSON UsageStatisticsFilter where
+  toJSON UsageStatisticsFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("comparator" Data..=) Prelude.<$> comparator,
+            ("key" Data..=) Prelude.<$> key,
+            ("values" Data..=) Prelude.<$> values
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/UsageStatisticsFilterComparator.hs b/gen/Amazonka/MacieV2/Types/UsageStatisticsFilterComparator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/UsageStatisticsFilterComparator.hs
@@ -0,0 +1,98 @@
+{-# 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.MacieV2.Types.UsageStatisticsFilterComparator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.UsageStatisticsFilterComparator
+  ( UsageStatisticsFilterComparator
+      ( ..,
+        UsageStatisticsFilterComparator_CONTAINS,
+        UsageStatisticsFilterComparator_EQ,
+        UsageStatisticsFilterComparator_GT,
+        UsageStatisticsFilterComparator_GTE,
+        UsageStatisticsFilterComparator_LT,
+        UsageStatisticsFilterComparator_LTE,
+        UsageStatisticsFilterComparator_NE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The operator to use in a condition that filters the results of a query
+-- for Amazon Macie account quotas and usage data. Valid values are:
+newtype UsageStatisticsFilterComparator = UsageStatisticsFilterComparator'
+  { fromUsageStatisticsFilterComparator ::
+      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 UsageStatisticsFilterComparator_CONTAINS :: UsageStatisticsFilterComparator
+pattern UsageStatisticsFilterComparator_CONTAINS = UsageStatisticsFilterComparator' "CONTAINS"
+
+pattern UsageStatisticsFilterComparator_EQ :: UsageStatisticsFilterComparator
+pattern UsageStatisticsFilterComparator_EQ = UsageStatisticsFilterComparator' "EQ"
+
+pattern UsageStatisticsFilterComparator_GT :: UsageStatisticsFilterComparator
+pattern UsageStatisticsFilterComparator_GT = UsageStatisticsFilterComparator' "GT"
+
+pattern UsageStatisticsFilterComparator_GTE :: UsageStatisticsFilterComparator
+pattern UsageStatisticsFilterComparator_GTE = UsageStatisticsFilterComparator' "GTE"
+
+pattern UsageStatisticsFilterComparator_LT :: UsageStatisticsFilterComparator
+pattern UsageStatisticsFilterComparator_LT = UsageStatisticsFilterComparator' "LT"
+
+pattern UsageStatisticsFilterComparator_LTE :: UsageStatisticsFilterComparator
+pattern UsageStatisticsFilterComparator_LTE = UsageStatisticsFilterComparator' "LTE"
+
+pattern UsageStatisticsFilterComparator_NE :: UsageStatisticsFilterComparator
+pattern UsageStatisticsFilterComparator_NE = UsageStatisticsFilterComparator' "NE"
+
+{-# COMPLETE
+  UsageStatisticsFilterComparator_CONTAINS,
+  UsageStatisticsFilterComparator_EQ,
+  UsageStatisticsFilterComparator_GT,
+  UsageStatisticsFilterComparator_GTE,
+  UsageStatisticsFilterComparator_LT,
+  UsageStatisticsFilterComparator_LTE,
+  UsageStatisticsFilterComparator_NE,
+  UsageStatisticsFilterComparator'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/UsageStatisticsFilterKey.hs b/gen/Amazonka/MacieV2/Types/UsageStatisticsFilterKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/UsageStatisticsFilterKey.hs
@@ -0,0 +1,83 @@
+{-# 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.MacieV2.Types.UsageStatisticsFilterKey
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.UsageStatisticsFilterKey
+  ( UsageStatisticsFilterKey
+      ( ..,
+        UsageStatisticsFilterKey_AccountId,
+        UsageStatisticsFilterKey_FreeTrialStartDate,
+        UsageStatisticsFilterKey_ServiceLimit,
+        UsageStatisticsFilterKey_Total
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The field to use in a condition that filters the results of a query for
+-- Amazon Macie account quotas and usage data. Valid values are:
+newtype UsageStatisticsFilterKey = UsageStatisticsFilterKey'
+  { fromUsageStatisticsFilterKey ::
+      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 UsageStatisticsFilterKey_AccountId :: UsageStatisticsFilterKey
+pattern UsageStatisticsFilterKey_AccountId = UsageStatisticsFilterKey' "accountId"
+
+pattern UsageStatisticsFilterKey_FreeTrialStartDate :: UsageStatisticsFilterKey
+pattern UsageStatisticsFilterKey_FreeTrialStartDate = UsageStatisticsFilterKey' "freeTrialStartDate"
+
+pattern UsageStatisticsFilterKey_ServiceLimit :: UsageStatisticsFilterKey
+pattern UsageStatisticsFilterKey_ServiceLimit = UsageStatisticsFilterKey' "serviceLimit"
+
+pattern UsageStatisticsFilterKey_Total :: UsageStatisticsFilterKey
+pattern UsageStatisticsFilterKey_Total = UsageStatisticsFilterKey' "total"
+
+{-# COMPLETE
+  UsageStatisticsFilterKey_AccountId,
+  UsageStatisticsFilterKey_FreeTrialStartDate,
+  UsageStatisticsFilterKey_ServiceLimit,
+  UsageStatisticsFilterKey_Total,
+  UsageStatisticsFilterKey'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/UsageStatisticsSortBy.hs b/gen/Amazonka/MacieV2/Types/UsageStatisticsSortBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/UsageStatisticsSortBy.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.UsageStatisticsSortBy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.UsageStatisticsSortBy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.OrderBy
+import Amazonka.MacieV2.Types.UsageStatisticsSortKey
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies criteria for sorting the results of a query for Amazon Macie
+-- account quotas and usage data.
+--
+-- /See:/ 'newUsageStatisticsSortBy' smart constructor.
+data UsageStatisticsSortBy = UsageStatisticsSortBy'
+  { -- | The field to sort the results by.
+    key :: Prelude.Maybe UsageStatisticsSortKey,
+    -- | The sort order to apply to the results, based on the value for the field
+    -- specified by the key property. Valid values are: ASC, sort the results
+    -- in ascending order; and, DESC, sort the results in descending order.
+    orderBy :: Prelude.Maybe OrderBy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UsageStatisticsSortBy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'usageStatisticsSortBy_key' - The field to sort the results by.
+--
+-- 'orderBy', 'usageStatisticsSortBy_orderBy' - The sort order to apply to the results, based on the value for the field
+-- specified by the key property. Valid values are: ASC, sort the results
+-- in ascending order; and, DESC, sort the results in descending order.
+newUsageStatisticsSortBy ::
+  UsageStatisticsSortBy
+newUsageStatisticsSortBy =
+  UsageStatisticsSortBy'
+    { key = Prelude.Nothing,
+      orderBy = Prelude.Nothing
+    }
+
+-- | The field to sort the results by.
+usageStatisticsSortBy_key :: Lens.Lens' UsageStatisticsSortBy (Prelude.Maybe UsageStatisticsSortKey)
+usageStatisticsSortBy_key = Lens.lens (\UsageStatisticsSortBy' {key} -> key) (\s@UsageStatisticsSortBy' {} a -> s {key = a} :: UsageStatisticsSortBy)
+
+-- | The sort order to apply to the results, based on the value for the field
+-- specified by the key property. Valid values are: ASC, sort the results
+-- in ascending order; and, DESC, sort the results in descending order.
+usageStatisticsSortBy_orderBy :: Lens.Lens' UsageStatisticsSortBy (Prelude.Maybe OrderBy)
+usageStatisticsSortBy_orderBy = Lens.lens (\UsageStatisticsSortBy' {orderBy} -> orderBy) (\s@UsageStatisticsSortBy' {} a -> s {orderBy = a} :: UsageStatisticsSortBy)
+
+instance Prelude.Hashable UsageStatisticsSortBy where
+  hashWithSalt _salt UsageStatisticsSortBy' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` orderBy
+
+instance Prelude.NFData UsageStatisticsSortBy where
+  rnf UsageStatisticsSortBy' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf orderBy
+
+instance Data.ToJSON UsageStatisticsSortBy where
+  toJSON UsageStatisticsSortBy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("key" Data..=) Prelude.<$> key,
+            ("orderBy" Data..=) Prelude.<$> orderBy
+          ]
+      )
diff --git a/gen/Amazonka/MacieV2/Types/UsageStatisticsSortKey.hs b/gen/Amazonka/MacieV2/Types/UsageStatisticsSortKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/UsageStatisticsSortKey.hs
@@ -0,0 +1,83 @@
+{-# 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.MacieV2.Types.UsageStatisticsSortKey
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.UsageStatisticsSortKey
+  ( UsageStatisticsSortKey
+      ( ..,
+        UsageStatisticsSortKey_AccountId,
+        UsageStatisticsSortKey_FreeTrialStartDate,
+        UsageStatisticsSortKey_ServiceLimitValue,
+        UsageStatisticsSortKey_Total
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The field to use to sort the results of a query for Amazon Macie account
+-- quotas and usage data. Valid values are:
+newtype UsageStatisticsSortKey = UsageStatisticsSortKey'
+  { fromUsageStatisticsSortKey ::
+      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 UsageStatisticsSortKey_AccountId :: UsageStatisticsSortKey
+pattern UsageStatisticsSortKey_AccountId = UsageStatisticsSortKey' "accountId"
+
+pattern UsageStatisticsSortKey_FreeTrialStartDate :: UsageStatisticsSortKey
+pattern UsageStatisticsSortKey_FreeTrialStartDate = UsageStatisticsSortKey' "freeTrialStartDate"
+
+pattern UsageStatisticsSortKey_ServiceLimitValue :: UsageStatisticsSortKey
+pattern UsageStatisticsSortKey_ServiceLimitValue = UsageStatisticsSortKey' "serviceLimitValue"
+
+pattern UsageStatisticsSortKey_Total :: UsageStatisticsSortKey
+pattern UsageStatisticsSortKey_Total = UsageStatisticsSortKey' "total"
+
+{-# COMPLETE
+  UsageStatisticsSortKey_AccountId,
+  UsageStatisticsSortKey_FreeTrialStartDate,
+  UsageStatisticsSortKey_ServiceLimitValue,
+  UsageStatisticsSortKey_Total,
+  UsageStatisticsSortKey'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/UsageTotal.hs b/gen/Amazonka/MacieV2/Types/UsageTotal.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/UsageTotal.hs
@@ -0,0 +1,119 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.Types.UsageTotal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.UsageTotal where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.Currency
+import Amazonka.MacieV2.Types.UsageType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides aggregated data for an Amazon Macie usage metric. The value for
+-- the metric reports estimated usage data for an account for the preceding
+-- 30 days or the current calendar month to date, depending on the time
+-- period (timeRange) specified in the request.
+--
+-- /See:/ 'newUsageTotal' smart constructor.
+data UsageTotal = UsageTotal'
+  { -- | The type of currency that the value for the metric (estimatedCost) is
+    -- reported in.
+    currency :: Prelude.Maybe Currency,
+    -- | The estimated value for the metric.
+    estimatedCost :: Prelude.Maybe Prelude.Text,
+    -- | The name of the metric. Possible values are:
+    -- AUTOMATED_OBJECT_MONITORING, to monitor S3 objects for automated
+    -- sensitive data discovery; AUTOMATED_SENSITIVE_DATA_DISCOVERY, to analyze
+    -- S3 objects for automated sensitive data discovery;
+    -- DATA_INVENTORY_EVALUATION, to monitor S3 buckets; and,
+    -- SENSITIVE_DATA_DISCOVERY, to run classification jobs.
+    type' :: Prelude.Maybe UsageType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UsageTotal' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'currency', 'usageTotal_currency' - The type of currency that the value for the metric (estimatedCost) is
+-- reported in.
+--
+-- 'estimatedCost', 'usageTotal_estimatedCost' - The estimated value for the metric.
+--
+-- 'type'', 'usageTotal_type' - The name of the metric. Possible values are:
+-- AUTOMATED_OBJECT_MONITORING, to monitor S3 objects for automated
+-- sensitive data discovery; AUTOMATED_SENSITIVE_DATA_DISCOVERY, to analyze
+-- S3 objects for automated sensitive data discovery;
+-- DATA_INVENTORY_EVALUATION, to monitor S3 buckets; and,
+-- SENSITIVE_DATA_DISCOVERY, to run classification jobs.
+newUsageTotal ::
+  UsageTotal
+newUsageTotal =
+  UsageTotal'
+    { currency = Prelude.Nothing,
+      estimatedCost = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The type of currency that the value for the metric (estimatedCost) is
+-- reported in.
+usageTotal_currency :: Lens.Lens' UsageTotal (Prelude.Maybe Currency)
+usageTotal_currency = Lens.lens (\UsageTotal' {currency} -> currency) (\s@UsageTotal' {} a -> s {currency = a} :: UsageTotal)
+
+-- | The estimated value for the metric.
+usageTotal_estimatedCost :: Lens.Lens' UsageTotal (Prelude.Maybe Prelude.Text)
+usageTotal_estimatedCost = Lens.lens (\UsageTotal' {estimatedCost} -> estimatedCost) (\s@UsageTotal' {} a -> s {estimatedCost = a} :: UsageTotal)
+
+-- | The name of the metric. Possible values are:
+-- AUTOMATED_OBJECT_MONITORING, to monitor S3 objects for automated
+-- sensitive data discovery; AUTOMATED_SENSITIVE_DATA_DISCOVERY, to analyze
+-- S3 objects for automated sensitive data discovery;
+-- DATA_INVENTORY_EVALUATION, to monitor S3 buckets; and,
+-- SENSITIVE_DATA_DISCOVERY, to run classification jobs.
+usageTotal_type :: Lens.Lens' UsageTotal (Prelude.Maybe UsageType)
+usageTotal_type = Lens.lens (\UsageTotal' {type'} -> type') (\s@UsageTotal' {} a -> s {type' = a} :: UsageTotal)
+
+instance Data.FromJSON UsageTotal where
+  parseJSON =
+    Data.withObject
+      "UsageTotal"
+      ( \x ->
+          UsageTotal'
+            Prelude.<$> (x Data..:? "currency")
+            Prelude.<*> (x Data..:? "estimatedCost")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable UsageTotal where
+  hashWithSalt _salt UsageTotal' {..} =
+    _salt
+      `Prelude.hashWithSalt` currency
+      `Prelude.hashWithSalt` estimatedCost
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData UsageTotal where
+  rnf UsageTotal' {..} =
+    Prelude.rnf currency
+      `Prelude.seq` Prelude.rnf estimatedCost
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/MacieV2/Types/UsageType.hs b/gen/Amazonka/MacieV2/Types/UsageType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/UsageType.hs
@@ -0,0 +1,83 @@
+{-# 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.MacieV2.Types.UsageType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.UsageType
+  ( UsageType
+      ( ..,
+        UsageType_AUTOMATED_OBJECT_MONITORING,
+        UsageType_AUTOMATED_SENSITIVE_DATA_DISCOVERY,
+        UsageType_DATA_INVENTORY_EVALUATION,
+        UsageType_SENSITIVE_DATA_DISCOVERY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The name of an Amazon Macie usage metric for an account. Possible values
+-- are:
+newtype UsageType = UsageType'
+  { fromUsageType ::
+      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 UsageType_AUTOMATED_OBJECT_MONITORING :: UsageType
+pattern UsageType_AUTOMATED_OBJECT_MONITORING = UsageType' "AUTOMATED_OBJECT_MONITORING"
+
+pattern UsageType_AUTOMATED_SENSITIVE_DATA_DISCOVERY :: UsageType
+pattern UsageType_AUTOMATED_SENSITIVE_DATA_DISCOVERY = UsageType' "AUTOMATED_SENSITIVE_DATA_DISCOVERY"
+
+pattern UsageType_DATA_INVENTORY_EVALUATION :: UsageType
+pattern UsageType_DATA_INVENTORY_EVALUATION = UsageType' "DATA_INVENTORY_EVALUATION"
+
+pattern UsageType_SENSITIVE_DATA_DISCOVERY :: UsageType
+pattern UsageType_SENSITIVE_DATA_DISCOVERY = UsageType' "SENSITIVE_DATA_DISCOVERY"
+
+{-# COMPLETE
+  UsageType_AUTOMATED_OBJECT_MONITORING,
+  UsageType_AUTOMATED_SENSITIVE_DATA_DISCOVERY,
+  UsageType_DATA_INVENTORY_EVALUATION,
+  UsageType_SENSITIVE_DATA_DISCOVERY,
+  UsageType'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/UserIdentity.hs b/gen/Amazonka/MacieV2/Types/UserIdentity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/UserIdentity.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.MacieV2.Types.UserIdentity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.UserIdentity where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.AssumedRole
+import Amazonka.MacieV2.Types.AwsAccount
+import Amazonka.MacieV2.Types.AwsService
+import Amazonka.MacieV2.Types.FederatedUser
+import Amazonka.MacieV2.Types.IamUser
+import Amazonka.MacieV2.Types.UserIdentityRoot
+import Amazonka.MacieV2.Types.UserIdentityType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the type and other characteristics of an
+-- entity that performed an action on an affected resource.
+--
+-- /See:/ 'newUserIdentity' smart constructor.
+data UserIdentity = UserIdentity'
+  { -- | If the action was performed with temporary security credentials that
+    -- were obtained using the AssumeRole operation of the Security Token
+    -- Service (STS) API, the identifiers, session context, and other details
+    -- about the identity.
+    assumedRole :: Prelude.Maybe AssumedRole,
+    -- | If the action was performed using the credentials for another Amazon Web
+    -- Services account, the details of that account.
+    awsAccount :: Prelude.Maybe AwsAccount,
+    -- | If the action was performed by an Amazon Web Services account that
+    -- belongs to an Amazon Web Service, the name of the service.
+    awsService :: Prelude.Maybe AwsService,
+    -- | If the action was performed with temporary security credentials that
+    -- were obtained using the GetFederationToken operation of the Security
+    -- Token Service (STS) API, the identifiers, session context, and other
+    -- details about the identity.
+    federatedUser :: Prelude.Maybe FederatedUser,
+    -- | If the action was performed using the credentials for an Identity and
+    -- Access Management (IAM) user, the name and other details about the user.
+    iamUser :: Prelude.Maybe IamUser,
+    -- | If the action was performed using the credentials for your Amazon Web
+    -- Services account, the details of your account.
+    root :: Prelude.Maybe UserIdentityRoot,
+    -- | The type of entity that performed the action.
+    type' :: Prelude.Maybe UserIdentityType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserIdentity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assumedRole', 'userIdentity_assumedRole' - If the action was performed with temporary security credentials that
+-- were obtained using the AssumeRole operation of the Security Token
+-- Service (STS) API, the identifiers, session context, and other details
+-- about the identity.
+--
+-- 'awsAccount', 'userIdentity_awsAccount' - If the action was performed using the credentials for another Amazon Web
+-- Services account, the details of that account.
+--
+-- 'awsService', 'userIdentity_awsService' - If the action was performed by an Amazon Web Services account that
+-- belongs to an Amazon Web Service, the name of the service.
+--
+-- 'federatedUser', 'userIdentity_federatedUser' - If the action was performed with temporary security credentials that
+-- were obtained using the GetFederationToken operation of the Security
+-- Token Service (STS) API, the identifiers, session context, and other
+-- details about the identity.
+--
+-- 'iamUser', 'userIdentity_iamUser' - If the action was performed using the credentials for an Identity and
+-- Access Management (IAM) user, the name and other details about the user.
+--
+-- 'root', 'userIdentity_root' - If the action was performed using the credentials for your Amazon Web
+-- Services account, the details of your account.
+--
+-- 'type'', 'userIdentity_type' - The type of entity that performed the action.
+newUserIdentity ::
+  UserIdentity
+newUserIdentity =
+  UserIdentity'
+    { assumedRole = Prelude.Nothing,
+      awsAccount = Prelude.Nothing,
+      awsService = Prelude.Nothing,
+      federatedUser = Prelude.Nothing,
+      iamUser = Prelude.Nothing,
+      root = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | If the action was performed with temporary security credentials that
+-- were obtained using the AssumeRole operation of the Security Token
+-- Service (STS) API, the identifiers, session context, and other details
+-- about the identity.
+userIdentity_assumedRole :: Lens.Lens' UserIdentity (Prelude.Maybe AssumedRole)
+userIdentity_assumedRole = Lens.lens (\UserIdentity' {assumedRole} -> assumedRole) (\s@UserIdentity' {} a -> s {assumedRole = a} :: UserIdentity)
+
+-- | If the action was performed using the credentials for another Amazon Web
+-- Services account, the details of that account.
+userIdentity_awsAccount :: Lens.Lens' UserIdentity (Prelude.Maybe AwsAccount)
+userIdentity_awsAccount = Lens.lens (\UserIdentity' {awsAccount} -> awsAccount) (\s@UserIdentity' {} a -> s {awsAccount = a} :: UserIdentity)
+
+-- | If the action was performed by an Amazon Web Services account that
+-- belongs to an Amazon Web Service, the name of the service.
+userIdentity_awsService :: Lens.Lens' UserIdentity (Prelude.Maybe AwsService)
+userIdentity_awsService = Lens.lens (\UserIdentity' {awsService} -> awsService) (\s@UserIdentity' {} a -> s {awsService = a} :: UserIdentity)
+
+-- | If the action was performed with temporary security credentials that
+-- were obtained using the GetFederationToken operation of the Security
+-- Token Service (STS) API, the identifiers, session context, and other
+-- details about the identity.
+userIdentity_federatedUser :: Lens.Lens' UserIdentity (Prelude.Maybe FederatedUser)
+userIdentity_federatedUser = Lens.lens (\UserIdentity' {federatedUser} -> federatedUser) (\s@UserIdentity' {} a -> s {federatedUser = a} :: UserIdentity)
+
+-- | If the action was performed using the credentials for an Identity and
+-- Access Management (IAM) user, the name and other details about the user.
+userIdentity_iamUser :: Lens.Lens' UserIdentity (Prelude.Maybe IamUser)
+userIdentity_iamUser = Lens.lens (\UserIdentity' {iamUser} -> iamUser) (\s@UserIdentity' {} a -> s {iamUser = a} :: UserIdentity)
+
+-- | If the action was performed using the credentials for your Amazon Web
+-- Services account, the details of your account.
+userIdentity_root :: Lens.Lens' UserIdentity (Prelude.Maybe UserIdentityRoot)
+userIdentity_root = Lens.lens (\UserIdentity' {root} -> root) (\s@UserIdentity' {} a -> s {root = a} :: UserIdentity)
+
+-- | The type of entity that performed the action.
+userIdentity_type :: Lens.Lens' UserIdentity (Prelude.Maybe UserIdentityType)
+userIdentity_type = Lens.lens (\UserIdentity' {type'} -> type') (\s@UserIdentity' {} a -> s {type' = a} :: UserIdentity)
+
+instance Data.FromJSON UserIdentity where
+  parseJSON =
+    Data.withObject
+      "UserIdentity"
+      ( \x ->
+          UserIdentity'
+            Prelude.<$> (x Data..:? "assumedRole")
+            Prelude.<*> (x Data..:? "awsAccount")
+            Prelude.<*> (x Data..:? "awsService")
+            Prelude.<*> (x Data..:? "federatedUser")
+            Prelude.<*> (x Data..:? "iamUser")
+            Prelude.<*> (x Data..:? "root")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable UserIdentity where
+  hashWithSalt _salt UserIdentity' {..} =
+    _salt
+      `Prelude.hashWithSalt` assumedRole
+      `Prelude.hashWithSalt` awsAccount
+      `Prelude.hashWithSalt` awsService
+      `Prelude.hashWithSalt` federatedUser
+      `Prelude.hashWithSalt` iamUser
+      `Prelude.hashWithSalt` root
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData UserIdentity where
+  rnf UserIdentity' {..} =
+    Prelude.rnf assumedRole
+      `Prelude.seq` Prelude.rnf awsAccount
+      `Prelude.seq` Prelude.rnf awsService
+      `Prelude.seq` Prelude.rnf federatedUser
+      `Prelude.seq` Prelude.rnf iamUser
+      `Prelude.seq` Prelude.rnf root
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/MacieV2/Types/UserIdentityRoot.hs b/gen/Amazonka/MacieV2/Types/UserIdentityRoot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/UserIdentityRoot.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.MacieV2.Types.UserIdentityRoot
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.UserIdentityRoot 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 information about an Amazon Web Services account and entity
+-- that performed an action on an affected resource. The action was
+-- performed using the credentials for your Amazon Web Services account.
+--
+-- /See:/ 'newUserIdentityRoot' smart constructor.
+data UserIdentityRoot = UserIdentityRoot'
+  { -- | The unique identifier for the Amazon Web Services account.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the principal that performed the
+    -- action. The last section of the ARN contains the name of the user or
+    -- role that performed the action.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the entity that performed the action.
+    principalId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserIdentityRoot' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'userIdentityRoot_accountId' - The unique identifier for the Amazon Web Services account.
+--
+-- 'arn', 'userIdentityRoot_arn' - The Amazon Resource Name (ARN) of the principal that performed the
+-- action. The last section of the ARN contains the name of the user or
+-- role that performed the action.
+--
+-- 'principalId', 'userIdentityRoot_principalId' - The unique identifier for the entity that performed the action.
+newUserIdentityRoot ::
+  UserIdentityRoot
+newUserIdentityRoot =
+  UserIdentityRoot'
+    { accountId = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      principalId = Prelude.Nothing
+    }
+
+-- | The unique identifier for the Amazon Web Services account.
+userIdentityRoot_accountId :: Lens.Lens' UserIdentityRoot (Prelude.Maybe Prelude.Text)
+userIdentityRoot_accountId = Lens.lens (\UserIdentityRoot' {accountId} -> accountId) (\s@UserIdentityRoot' {} a -> s {accountId = a} :: UserIdentityRoot)
+
+-- | The Amazon Resource Name (ARN) of the principal that performed the
+-- action. The last section of the ARN contains the name of the user or
+-- role that performed the action.
+userIdentityRoot_arn :: Lens.Lens' UserIdentityRoot (Prelude.Maybe Prelude.Text)
+userIdentityRoot_arn = Lens.lens (\UserIdentityRoot' {arn} -> arn) (\s@UserIdentityRoot' {} a -> s {arn = a} :: UserIdentityRoot)
+
+-- | The unique identifier for the entity that performed the action.
+userIdentityRoot_principalId :: Lens.Lens' UserIdentityRoot (Prelude.Maybe Prelude.Text)
+userIdentityRoot_principalId = Lens.lens (\UserIdentityRoot' {principalId} -> principalId) (\s@UserIdentityRoot' {} a -> s {principalId = a} :: UserIdentityRoot)
+
+instance Data.FromJSON UserIdentityRoot where
+  parseJSON =
+    Data.withObject
+      "UserIdentityRoot"
+      ( \x ->
+          UserIdentityRoot'
+            Prelude.<$> (x Data..:? "accountId")
+            Prelude.<*> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "principalId")
+      )
+
+instance Prelude.Hashable UserIdentityRoot where
+  hashWithSalt _salt UserIdentityRoot' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` principalId
+
+instance Prelude.NFData UserIdentityRoot where
+  rnf UserIdentityRoot' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf principalId
diff --git a/gen/Amazonka/MacieV2/Types/UserIdentityType.hs b/gen/Amazonka/MacieV2/Types/UserIdentityType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/UserIdentityType.hs
@@ -0,0 +1,93 @@
+{-# 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.MacieV2.Types.UserIdentityType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.UserIdentityType
+  ( UserIdentityType
+      ( ..,
+        UserIdentityType_AWSAccount,
+        UserIdentityType_AWSService,
+        UserIdentityType_AssumedRole,
+        UserIdentityType_FederatedUser,
+        UserIdentityType_IAMUser,
+        UserIdentityType_Root
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The type of entity that performed the action on the affected resource.
+-- Possible values are:
+newtype UserIdentityType = UserIdentityType'
+  { fromUserIdentityType ::
+      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 UserIdentityType_AWSAccount :: UserIdentityType
+pattern UserIdentityType_AWSAccount = UserIdentityType' "AWSAccount"
+
+pattern UserIdentityType_AWSService :: UserIdentityType
+pattern UserIdentityType_AWSService = UserIdentityType' "AWSService"
+
+pattern UserIdentityType_AssumedRole :: UserIdentityType
+pattern UserIdentityType_AssumedRole = UserIdentityType' "AssumedRole"
+
+pattern UserIdentityType_FederatedUser :: UserIdentityType
+pattern UserIdentityType_FederatedUser = UserIdentityType' "FederatedUser"
+
+pattern UserIdentityType_IAMUser :: UserIdentityType
+pattern UserIdentityType_IAMUser = UserIdentityType' "IAMUser"
+
+pattern UserIdentityType_Root :: UserIdentityType
+pattern UserIdentityType_Root = UserIdentityType' "Root"
+
+{-# COMPLETE
+  UserIdentityType_AWSAccount,
+  UserIdentityType_AWSService,
+  UserIdentityType_AssumedRole,
+  UserIdentityType_FederatedUser,
+  UserIdentityType_IAMUser,
+  UserIdentityType_Root,
+  UserIdentityType'
+  #-}
diff --git a/gen/Amazonka/MacieV2/Types/UserPausedDetails.hs b/gen/Amazonka/MacieV2/Types/UserPausedDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/UserPausedDetails.hs
@@ -0,0 +1,118 @@
+{-# 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.MacieV2.Types.UserPausedDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.UserPausedDetails 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 information about when a classification job was paused. For a
+-- one-time job, this object also specifies when the job will expire and be
+-- cancelled if it isn\'t resumed. For a recurring job, this object also
+-- specifies when the paused job run will expire and be cancelled if it
+-- isn\'t resumed. This object is present only if a job\'s current status
+-- (jobStatus) is USER_PAUSED. The information in this object applies only
+-- to a job that was paused while it had a status of RUNNING.
+--
+-- /See:/ 'newUserPausedDetails' smart constructor.
+data UserPausedDetails = UserPausedDetails'
+  { -- | The date and time, in UTC and extended ISO 8601 format, when the job or
+    -- job run will expire and be cancelled if you don\'t resume it first.
+    jobExpiresAt :: Prelude.Maybe Data.ISO8601,
+    -- | The Amazon Resource Name (ARN) of the Health event that Amazon Macie
+    -- sent to notify you of the job or job run\'s pending expiration and
+    -- cancellation. This value is null if a job has been paused for less than
+    -- 23 days.
+    jobImminentExpirationHealthEventArn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in UTC and extended ISO 8601 format, when you paused
+    -- the job.
+    jobPausedAt :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserPausedDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobExpiresAt', 'userPausedDetails_jobExpiresAt' - The date and time, in UTC and extended ISO 8601 format, when the job or
+-- job run will expire and be cancelled if you don\'t resume it first.
+--
+-- 'jobImminentExpirationHealthEventArn', 'userPausedDetails_jobImminentExpirationHealthEventArn' - The Amazon Resource Name (ARN) of the Health event that Amazon Macie
+-- sent to notify you of the job or job run\'s pending expiration and
+-- cancellation. This value is null if a job has been paused for less than
+-- 23 days.
+--
+-- 'jobPausedAt', 'userPausedDetails_jobPausedAt' - The date and time, in UTC and extended ISO 8601 format, when you paused
+-- the job.
+newUserPausedDetails ::
+  UserPausedDetails
+newUserPausedDetails =
+  UserPausedDetails'
+    { jobExpiresAt = Prelude.Nothing,
+      jobImminentExpirationHealthEventArn =
+        Prelude.Nothing,
+      jobPausedAt = Prelude.Nothing
+    }
+
+-- | The date and time, in UTC and extended ISO 8601 format, when the job or
+-- job run will expire and be cancelled if you don\'t resume it first.
+userPausedDetails_jobExpiresAt :: Lens.Lens' UserPausedDetails (Prelude.Maybe Prelude.UTCTime)
+userPausedDetails_jobExpiresAt = Lens.lens (\UserPausedDetails' {jobExpiresAt} -> jobExpiresAt) (\s@UserPausedDetails' {} a -> s {jobExpiresAt = a} :: UserPausedDetails) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the Health event that Amazon Macie
+-- sent to notify you of the job or job run\'s pending expiration and
+-- cancellation. This value is null if a job has been paused for less than
+-- 23 days.
+userPausedDetails_jobImminentExpirationHealthEventArn :: Lens.Lens' UserPausedDetails (Prelude.Maybe Prelude.Text)
+userPausedDetails_jobImminentExpirationHealthEventArn = Lens.lens (\UserPausedDetails' {jobImminentExpirationHealthEventArn} -> jobImminentExpirationHealthEventArn) (\s@UserPausedDetails' {} a -> s {jobImminentExpirationHealthEventArn = a} :: UserPausedDetails)
+
+-- | The date and time, in UTC and extended ISO 8601 format, when you paused
+-- the job.
+userPausedDetails_jobPausedAt :: Lens.Lens' UserPausedDetails (Prelude.Maybe Prelude.UTCTime)
+userPausedDetails_jobPausedAt = Lens.lens (\UserPausedDetails' {jobPausedAt} -> jobPausedAt) (\s@UserPausedDetails' {} a -> s {jobPausedAt = a} :: UserPausedDetails) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON UserPausedDetails where
+  parseJSON =
+    Data.withObject
+      "UserPausedDetails"
+      ( \x ->
+          UserPausedDetails'
+            Prelude.<$> (x Data..:? "jobExpiresAt")
+            Prelude.<*> (x Data..:? "jobImminentExpirationHealthEventArn")
+            Prelude.<*> (x Data..:? "jobPausedAt")
+      )
+
+instance Prelude.Hashable UserPausedDetails where
+  hashWithSalt _salt UserPausedDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` jobExpiresAt
+      `Prelude.hashWithSalt` jobImminentExpirationHealthEventArn
+      `Prelude.hashWithSalt` jobPausedAt
+
+instance Prelude.NFData UserPausedDetails where
+  rnf UserPausedDetails' {..} =
+    Prelude.rnf jobExpiresAt
+      `Prelude.seq` Prelude.rnf jobImminentExpirationHealthEventArn
+      `Prelude.seq` Prelude.rnf jobPausedAt
diff --git a/gen/Amazonka/MacieV2/Types/WeeklySchedule.hs b/gen/Amazonka/MacieV2/Types/WeeklySchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Types/WeeklySchedule.hs
@@ -0,0 +1,75 @@
+{-# 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.MacieV2.Types.WeeklySchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MacieV2.Types.WeeklySchedule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types.DayOfWeek
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a weekly recurrence pattern for running a classification job.
+--
+-- /See:/ 'newWeeklySchedule' smart constructor.
+data WeeklySchedule = WeeklySchedule'
+  { -- | The day of the week when Amazon Macie runs the job.
+    dayOfWeek :: Prelude.Maybe DayOfWeek
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WeeklySchedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dayOfWeek', 'weeklySchedule_dayOfWeek' - The day of the week when Amazon Macie runs the job.
+newWeeklySchedule ::
+  WeeklySchedule
+newWeeklySchedule =
+  WeeklySchedule' {dayOfWeek = Prelude.Nothing}
+
+-- | The day of the week when Amazon Macie runs the job.
+weeklySchedule_dayOfWeek :: Lens.Lens' WeeklySchedule (Prelude.Maybe DayOfWeek)
+weeklySchedule_dayOfWeek = Lens.lens (\WeeklySchedule' {dayOfWeek} -> dayOfWeek) (\s@WeeklySchedule' {} a -> s {dayOfWeek = a} :: WeeklySchedule)
+
+instance Data.FromJSON WeeklySchedule where
+  parseJSON =
+    Data.withObject
+      "WeeklySchedule"
+      ( \x ->
+          WeeklySchedule' Prelude.<$> (x Data..:? "dayOfWeek")
+      )
+
+instance Prelude.Hashable WeeklySchedule where
+  hashWithSalt _salt WeeklySchedule' {..} =
+    _salt `Prelude.hashWithSalt` dayOfWeek
+
+instance Prelude.NFData WeeklySchedule where
+  rnf WeeklySchedule' {..} = Prelude.rnf dayOfWeek
+
+instance Data.ToJSON WeeklySchedule where
+  toJSON WeeklySchedule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("dayOfWeek" Data..=) Prelude.<$> dayOfWeek]
+      )
diff --git a/gen/Amazonka/MacieV2/UntagResource.hs b/gen/Amazonka/MacieV2/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/UntagResource.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.MacieV2.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 one or more tags (keys and values) from an Amazon Macie
+-- resource.
+module Amazonka.MacieV2.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_tagKeys,
+    untagResource_resourceArn,
+
+    -- * 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.MacieV2.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'
+  { -- | One or more tags (keys) to remove from the resource. In an HTTP request
+    -- to remove multiple tags, append the tagKeys parameter and argument for
+    -- each tag to remove, separated by an ampersand (&).
+    tagKeys :: [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) of the resource.
+    resourceArn :: 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:
+--
+-- 'tagKeys', 'untagResource_tagKeys' - One or more tags (keys) to remove from the resource. In an HTTP request
+-- to remove multiple tags, append the tagKeys parameter and argument for
+-- each tag to remove, separated by an ampersand (&).
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { tagKeys = Prelude.mempty,
+      resourceArn = pResourceArn_
+    }
+
+-- | One or more tags (keys) to remove from the resource. In an HTTP request
+-- to remove multiple tags, append the tagKeys parameter and argument for
+-- each tag to remove, separated by an ampersand (&).
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the resource.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` tagKeys
+      `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf tagKeys
+      `Prelude.seq` Prelude.rnf resourceArn
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/UpdateAllowList.hs b/gen/Amazonka/MacieV2/UpdateAllowList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/UpdateAllowList.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.UpdateAllowList
+-- 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 settings for an allow list.
+module Amazonka.MacieV2.UpdateAllowList
+  ( -- * Creating a Request
+    UpdateAllowList (..),
+    newUpdateAllowList,
+
+    -- * Request Lenses
+    updateAllowList_description,
+    updateAllowList_id,
+    updateAllowList_criteria,
+    updateAllowList_name,
+
+    -- * Destructuring the Response
+    UpdateAllowListResponse (..),
+    newUpdateAllowListResponse,
+
+    -- * Response Lenses
+    updateAllowListResponse_arn,
+    updateAllowListResponse_id,
+    updateAllowListResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateAllowList' smart constructor.
+data UpdateAllowList = UpdateAllowList'
+  { -- | A custom description of the allow list. The description can contain as
+    -- many as 512 characters.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the Amazon Macie resource that the request
+    -- applies to.
+    id :: Prelude.Text,
+    -- | The criteria that specify the text or text pattern to ignore. The
+    -- criteria can be the location and name of an S3 object that lists
+    -- specific text to ignore (s3WordsList), or a regular expression that
+    -- defines a text pattern to ignore (regex).
+    --
+    -- You can change a list\'s underlying criteria, such as the name of the S3
+    -- object or the regular expression to use. However, you can\'t change the
+    -- type from s3WordsList to regex or the other way around.
+    criteria :: AllowListCriteria,
+    -- | A custom name for the allow list. The name can contain as many as 128
+    -- characters.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAllowList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateAllowList_description' - A custom description of the allow list. The description can contain as
+-- many as 512 characters.
+--
+-- 'id', 'updateAllowList_id' - The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+--
+-- 'criteria', 'updateAllowList_criteria' - The criteria that specify the text or text pattern to ignore. The
+-- criteria can be the location and name of an S3 object that lists
+-- specific text to ignore (s3WordsList), or a regular expression that
+-- defines a text pattern to ignore (regex).
+--
+-- You can change a list\'s underlying criteria, such as the name of the S3
+-- object or the regular expression to use. However, you can\'t change the
+-- type from s3WordsList to regex or the other way around.
+--
+-- 'name', 'updateAllowList_name' - A custom name for the allow list. The name can contain as many as 128
+-- characters.
+newUpdateAllowList ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'criteria'
+  AllowListCriteria ->
+  -- | 'name'
+  Prelude.Text ->
+  UpdateAllowList
+newUpdateAllowList pId_ pCriteria_ pName_ =
+  UpdateAllowList'
+    { description = Prelude.Nothing,
+      id = pId_,
+      criteria = pCriteria_,
+      name = pName_
+    }
+
+-- | A custom description of the allow list. The description can contain as
+-- many as 512 characters.
+updateAllowList_description :: Lens.Lens' UpdateAllowList (Prelude.Maybe Prelude.Text)
+updateAllowList_description = Lens.lens (\UpdateAllowList' {description} -> description) (\s@UpdateAllowList' {} a -> s {description = a} :: UpdateAllowList)
+
+-- | The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+updateAllowList_id :: Lens.Lens' UpdateAllowList Prelude.Text
+updateAllowList_id = Lens.lens (\UpdateAllowList' {id} -> id) (\s@UpdateAllowList' {} a -> s {id = a} :: UpdateAllowList)
+
+-- | The criteria that specify the text or text pattern to ignore. The
+-- criteria can be the location and name of an S3 object that lists
+-- specific text to ignore (s3WordsList), or a regular expression that
+-- defines a text pattern to ignore (regex).
+--
+-- You can change a list\'s underlying criteria, such as the name of the S3
+-- object or the regular expression to use. However, you can\'t change the
+-- type from s3WordsList to regex or the other way around.
+updateAllowList_criteria :: Lens.Lens' UpdateAllowList AllowListCriteria
+updateAllowList_criteria = Lens.lens (\UpdateAllowList' {criteria} -> criteria) (\s@UpdateAllowList' {} a -> s {criteria = a} :: UpdateAllowList)
+
+-- | A custom name for the allow list. The name can contain as many as 128
+-- characters.
+updateAllowList_name :: Lens.Lens' UpdateAllowList Prelude.Text
+updateAllowList_name = Lens.lens (\UpdateAllowList' {name} -> name) (\s@UpdateAllowList' {} a -> s {name = a} :: UpdateAllowList)
+
+instance Core.AWSRequest UpdateAllowList where
+  type
+    AWSResponse UpdateAllowList =
+      UpdateAllowListResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAllowListResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateAllowList where
+  hashWithSalt _salt UpdateAllowList' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` criteria
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData UpdateAllowList where
+  rnf UpdateAllowList' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf criteria
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders UpdateAllowList where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateAllowList where
+  toJSON UpdateAllowList' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            Prelude.Just ("criteria" Data..= criteria),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath UpdateAllowList where
+  toPath UpdateAllowList' {..} =
+    Prelude.mconcat ["/allow-lists/", Data.toBS id]
+
+instance Data.ToQuery UpdateAllowList where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAllowListResponse' smart constructor.
+data UpdateAllowListResponse = UpdateAllowListResponse'
+  { -- | The Amazon Resource Name (ARN) of the allow list.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the allow list.
+    id :: 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 'UpdateAllowListResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateAllowListResponse_arn' - The Amazon Resource Name (ARN) of the allow list.
+--
+-- 'id', 'updateAllowListResponse_id' - The unique identifier for the allow list.
+--
+-- 'httpStatus', 'updateAllowListResponse_httpStatus' - The response's http status code.
+newUpdateAllowListResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAllowListResponse
+newUpdateAllowListResponse pHttpStatus_ =
+  UpdateAllowListResponse'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the allow list.
+updateAllowListResponse_arn :: Lens.Lens' UpdateAllowListResponse (Prelude.Maybe Prelude.Text)
+updateAllowListResponse_arn = Lens.lens (\UpdateAllowListResponse' {arn} -> arn) (\s@UpdateAllowListResponse' {} a -> s {arn = a} :: UpdateAllowListResponse)
+
+-- | The unique identifier for the allow list.
+updateAllowListResponse_id :: Lens.Lens' UpdateAllowListResponse (Prelude.Maybe Prelude.Text)
+updateAllowListResponse_id = Lens.lens (\UpdateAllowListResponse' {id} -> id) (\s@UpdateAllowListResponse' {} a -> s {id = a} :: UpdateAllowListResponse)
+
+-- | The response's http status code.
+updateAllowListResponse_httpStatus :: Lens.Lens' UpdateAllowListResponse Prelude.Int
+updateAllowListResponse_httpStatus = Lens.lens (\UpdateAllowListResponse' {httpStatus} -> httpStatus) (\s@UpdateAllowListResponse' {} a -> s {httpStatus = a} :: UpdateAllowListResponse)
+
+instance Prelude.NFData UpdateAllowListResponse where
+  rnf UpdateAllowListResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/UpdateAutomatedDiscoveryConfiguration.hs b/gen/Amazonka/MacieV2/UpdateAutomatedDiscoveryConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/UpdateAutomatedDiscoveryConfiguration.hs
@@ -0,0 +1,219 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.UpdateAutomatedDiscoveryConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables or disables automated sensitive data discovery for an account.
+module Amazonka.MacieV2.UpdateAutomatedDiscoveryConfiguration
+  ( -- * Creating a Request
+    UpdateAutomatedDiscoveryConfiguration (..),
+    newUpdateAutomatedDiscoveryConfiguration,
+
+    -- * Request Lenses
+    updateAutomatedDiscoveryConfiguration_status,
+
+    -- * Destructuring the Response
+    UpdateAutomatedDiscoveryConfigurationResponse (..),
+    newUpdateAutomatedDiscoveryConfigurationResponse,
+
+    -- * Response Lenses
+    updateAutomatedDiscoveryConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateAutomatedDiscoveryConfiguration' smart constructor.
+data UpdateAutomatedDiscoveryConfiguration = UpdateAutomatedDiscoveryConfiguration'
+  { -- | The new status of automated sensitive data discovery for the account.
+    -- Valid values are: ENABLED, start or resume automated sensitive data
+    -- discovery activities for the account; and, DISABLED, stop performing
+    -- automated sensitive data discovery activities for the account.
+    --
+    -- When you enable automated sensitive data discovery for the first time,
+    -- Amazon Macie uses default configuration settings to determine which data
+    -- sources to analyze and which managed data identifiers to use. To change
+    -- these settings, use the UpdateClassificationScope and
+    -- UpdateSensitivityInspectionTemplate operations, respectively. If you
+    -- change the settings and subsequently disable the configuration, Amazon
+    -- Macie retains your changes.
+    status :: AutomatedDiscoveryStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAutomatedDiscoveryConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'status', 'updateAutomatedDiscoveryConfiguration_status' - The new status of automated sensitive data discovery for the account.
+-- Valid values are: ENABLED, start or resume automated sensitive data
+-- discovery activities for the account; and, DISABLED, stop performing
+-- automated sensitive data discovery activities for the account.
+--
+-- When you enable automated sensitive data discovery for the first time,
+-- Amazon Macie uses default configuration settings to determine which data
+-- sources to analyze and which managed data identifiers to use. To change
+-- these settings, use the UpdateClassificationScope and
+-- UpdateSensitivityInspectionTemplate operations, respectively. If you
+-- change the settings and subsequently disable the configuration, Amazon
+-- Macie retains your changes.
+newUpdateAutomatedDiscoveryConfiguration ::
+  -- | 'status'
+  AutomatedDiscoveryStatus ->
+  UpdateAutomatedDiscoveryConfiguration
+newUpdateAutomatedDiscoveryConfiguration pStatus_ =
+  UpdateAutomatedDiscoveryConfiguration'
+    { status =
+        pStatus_
+    }
+
+-- | The new status of automated sensitive data discovery for the account.
+-- Valid values are: ENABLED, start or resume automated sensitive data
+-- discovery activities for the account; and, DISABLED, stop performing
+-- automated sensitive data discovery activities for the account.
+--
+-- When you enable automated sensitive data discovery for the first time,
+-- Amazon Macie uses default configuration settings to determine which data
+-- sources to analyze and which managed data identifiers to use. To change
+-- these settings, use the UpdateClassificationScope and
+-- UpdateSensitivityInspectionTemplate operations, respectively. If you
+-- change the settings and subsequently disable the configuration, Amazon
+-- Macie retains your changes.
+updateAutomatedDiscoveryConfiguration_status :: Lens.Lens' UpdateAutomatedDiscoveryConfiguration AutomatedDiscoveryStatus
+updateAutomatedDiscoveryConfiguration_status = Lens.lens (\UpdateAutomatedDiscoveryConfiguration' {status} -> status) (\s@UpdateAutomatedDiscoveryConfiguration' {} a -> s {status = a} :: UpdateAutomatedDiscoveryConfiguration)
+
+instance
+  Core.AWSRequest
+    UpdateAutomatedDiscoveryConfiguration
+  where
+  type
+    AWSResponse
+      UpdateAutomatedDiscoveryConfiguration =
+      UpdateAutomatedDiscoveryConfigurationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateAutomatedDiscoveryConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateAutomatedDiscoveryConfiguration
+  where
+  hashWithSalt
+    _salt
+    UpdateAutomatedDiscoveryConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` status
+
+instance
+  Prelude.NFData
+    UpdateAutomatedDiscoveryConfiguration
+  where
+  rnf UpdateAutomatedDiscoveryConfiguration' {..} =
+    Prelude.rnf status
+
+instance
+  Data.ToHeaders
+    UpdateAutomatedDiscoveryConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    UpdateAutomatedDiscoveryConfiguration
+  where
+  toJSON UpdateAutomatedDiscoveryConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("status" Data..= status)]
+      )
+
+instance
+  Data.ToPath
+    UpdateAutomatedDiscoveryConfiguration
+  where
+  toPath =
+    Prelude.const "/automated-discovery/configuration"
+
+instance
+  Data.ToQuery
+    UpdateAutomatedDiscoveryConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAutomatedDiscoveryConfigurationResponse' smart constructor.
+data UpdateAutomatedDiscoveryConfigurationResponse = UpdateAutomatedDiscoveryConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAutomatedDiscoveryConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateAutomatedDiscoveryConfigurationResponse_httpStatus' - The response's http status code.
+newUpdateAutomatedDiscoveryConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAutomatedDiscoveryConfigurationResponse
+newUpdateAutomatedDiscoveryConfigurationResponse
+  pHttpStatus_ =
+    UpdateAutomatedDiscoveryConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+updateAutomatedDiscoveryConfigurationResponse_httpStatus :: Lens.Lens' UpdateAutomatedDiscoveryConfigurationResponse Prelude.Int
+updateAutomatedDiscoveryConfigurationResponse_httpStatus = Lens.lens (\UpdateAutomatedDiscoveryConfigurationResponse' {httpStatus} -> httpStatus) (\s@UpdateAutomatedDiscoveryConfigurationResponse' {} a -> s {httpStatus = a} :: UpdateAutomatedDiscoveryConfigurationResponse)
+
+instance
+  Prelude.NFData
+    UpdateAutomatedDiscoveryConfigurationResponse
+  where
+  rnf
+    UpdateAutomatedDiscoveryConfigurationResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/UpdateClassificationJob.hs b/gen/Amazonka/MacieV2/UpdateClassificationJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/UpdateClassificationJob.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.MacieV2.UpdateClassificationJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Changes the status of a classification job.
+module Amazonka.MacieV2.UpdateClassificationJob
+  ( -- * Creating a Request
+    UpdateClassificationJob (..),
+    newUpdateClassificationJob,
+
+    -- * Request Lenses
+    updateClassificationJob_jobId,
+    updateClassificationJob_jobStatus,
+
+    -- * Destructuring the Response
+    UpdateClassificationJobResponse (..),
+    newUpdateClassificationJobResponse,
+
+    -- * Response Lenses
+    updateClassificationJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateClassificationJob' smart constructor.
+data UpdateClassificationJob = UpdateClassificationJob'
+  { -- | The unique identifier for the classification job.
+    jobId :: Prelude.Text,
+    -- | The new status for the job. Valid values are:
+    --
+    -- -   CANCELLED - Stops the job permanently and cancels it. This value is
+    --     valid only if the job\'s current status is IDLE, PAUSED, RUNNING, or
+    --     USER_PAUSED.
+    --
+    --     If you specify this value and the job\'s current status is RUNNING,
+    --     Amazon Macie immediately begins to stop all processing tasks for the
+    --     job. You can\'t resume or restart a job after you cancel it.
+    --
+    -- -   RUNNING - Resumes the job. This value is valid only if the job\'s
+    --     current status is USER_PAUSED.
+    --
+    --     If you paused the job while it was actively running and you specify
+    --     this value less than 30 days after you paused the job, Macie
+    --     immediately resumes processing from the point where you paused the
+    --     job. Otherwise, Macie resumes the job according to the schedule and
+    --     other settings for the job.
+    --
+    -- -   USER_PAUSED - Pauses the job temporarily. This value is valid only
+    --     if the job\'s current status is IDLE, PAUSED, or RUNNING. If you
+    --     specify this value and the job\'s current status is RUNNING, Macie
+    --     immediately begins to pause all processing tasks for the job.
+    --
+    --     If you pause a one-time job and you don\'t resume it within 30 days,
+    --     the job expires and Macie cancels the job. If you pause a recurring
+    --     job when its status is RUNNING and you don\'t resume it within 30
+    --     days, the job run expires and Macie cancels the run. To check the
+    --     expiration date, refer to the UserPausedDetails.jobExpiresAt
+    --     property.
+    jobStatus :: JobStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateClassificationJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateClassificationJob_jobId' - The unique identifier for the classification job.
+--
+-- 'jobStatus', 'updateClassificationJob_jobStatus' - The new status for the job. Valid values are:
+--
+-- -   CANCELLED - Stops the job permanently and cancels it. This value is
+--     valid only if the job\'s current status is IDLE, PAUSED, RUNNING, or
+--     USER_PAUSED.
+--
+--     If you specify this value and the job\'s current status is RUNNING,
+--     Amazon Macie immediately begins to stop all processing tasks for the
+--     job. You can\'t resume or restart a job after you cancel it.
+--
+-- -   RUNNING - Resumes the job. This value is valid only if the job\'s
+--     current status is USER_PAUSED.
+--
+--     If you paused the job while it was actively running and you specify
+--     this value less than 30 days after you paused the job, Macie
+--     immediately resumes processing from the point where you paused the
+--     job. Otherwise, Macie resumes the job according to the schedule and
+--     other settings for the job.
+--
+-- -   USER_PAUSED - Pauses the job temporarily. This value is valid only
+--     if the job\'s current status is IDLE, PAUSED, or RUNNING. If you
+--     specify this value and the job\'s current status is RUNNING, Macie
+--     immediately begins to pause all processing tasks for the job.
+--
+--     If you pause a one-time job and you don\'t resume it within 30 days,
+--     the job expires and Macie cancels the job. If you pause a recurring
+--     job when its status is RUNNING and you don\'t resume it within 30
+--     days, the job run expires and Macie cancels the run. To check the
+--     expiration date, refer to the UserPausedDetails.jobExpiresAt
+--     property.
+newUpdateClassificationJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  -- | 'jobStatus'
+  JobStatus ->
+  UpdateClassificationJob
+newUpdateClassificationJob pJobId_ pJobStatus_ =
+  UpdateClassificationJob'
+    { jobId = pJobId_,
+      jobStatus = pJobStatus_
+    }
+
+-- | The unique identifier for the classification job.
+updateClassificationJob_jobId :: Lens.Lens' UpdateClassificationJob Prelude.Text
+updateClassificationJob_jobId = Lens.lens (\UpdateClassificationJob' {jobId} -> jobId) (\s@UpdateClassificationJob' {} a -> s {jobId = a} :: UpdateClassificationJob)
+
+-- | The new status for the job. Valid values are:
+--
+-- -   CANCELLED - Stops the job permanently and cancels it. This value is
+--     valid only if the job\'s current status is IDLE, PAUSED, RUNNING, or
+--     USER_PAUSED.
+--
+--     If you specify this value and the job\'s current status is RUNNING,
+--     Amazon Macie immediately begins to stop all processing tasks for the
+--     job. You can\'t resume or restart a job after you cancel it.
+--
+-- -   RUNNING - Resumes the job. This value is valid only if the job\'s
+--     current status is USER_PAUSED.
+--
+--     If you paused the job while it was actively running and you specify
+--     this value less than 30 days after you paused the job, Macie
+--     immediately resumes processing from the point where you paused the
+--     job. Otherwise, Macie resumes the job according to the schedule and
+--     other settings for the job.
+--
+-- -   USER_PAUSED - Pauses the job temporarily. This value is valid only
+--     if the job\'s current status is IDLE, PAUSED, or RUNNING. If you
+--     specify this value and the job\'s current status is RUNNING, Macie
+--     immediately begins to pause all processing tasks for the job.
+--
+--     If you pause a one-time job and you don\'t resume it within 30 days,
+--     the job expires and Macie cancels the job. If you pause a recurring
+--     job when its status is RUNNING and you don\'t resume it within 30
+--     days, the job run expires and Macie cancels the run. To check the
+--     expiration date, refer to the UserPausedDetails.jobExpiresAt
+--     property.
+updateClassificationJob_jobStatus :: Lens.Lens' UpdateClassificationJob JobStatus
+updateClassificationJob_jobStatus = Lens.lens (\UpdateClassificationJob' {jobStatus} -> jobStatus) (\s@UpdateClassificationJob' {} a -> s {jobStatus = a} :: UpdateClassificationJob)
+
+instance Core.AWSRequest UpdateClassificationJob where
+  type
+    AWSResponse UpdateClassificationJob =
+      UpdateClassificationJobResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateClassificationJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateClassificationJob where
+  hashWithSalt _salt UpdateClassificationJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` jobStatus
+
+instance Prelude.NFData UpdateClassificationJob where
+  rnf UpdateClassificationJob' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf jobStatus
+
+instance Data.ToHeaders UpdateClassificationJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateClassificationJob where
+  toJSON UpdateClassificationJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("jobStatus" Data..= jobStatus)]
+      )
+
+instance Data.ToPath UpdateClassificationJob where
+  toPath UpdateClassificationJob' {..} =
+    Prelude.mconcat ["/jobs/", Data.toBS jobId]
+
+instance Data.ToQuery UpdateClassificationJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateClassificationJobResponse' smart constructor.
+data UpdateClassificationJobResponse = UpdateClassificationJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateClassificationJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateClassificationJobResponse_httpStatus' - The response's http status code.
+newUpdateClassificationJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateClassificationJobResponse
+newUpdateClassificationJobResponse pHttpStatus_ =
+  UpdateClassificationJobResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateClassificationJobResponse_httpStatus :: Lens.Lens' UpdateClassificationJobResponse Prelude.Int
+updateClassificationJobResponse_httpStatus = Lens.lens (\UpdateClassificationJobResponse' {httpStatus} -> httpStatus) (\s@UpdateClassificationJobResponse' {} a -> s {httpStatus = a} :: UpdateClassificationJobResponse)
+
+instance
+  Prelude.NFData
+    UpdateClassificationJobResponse
+  where
+  rnf UpdateClassificationJobResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/UpdateClassificationScope.hs b/gen/Amazonka/MacieV2/UpdateClassificationScope.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/UpdateClassificationScope.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.MacieV2.UpdateClassificationScope
+-- 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 classification scope settings for an account.
+module Amazonka.MacieV2.UpdateClassificationScope
+  ( -- * Creating a Request
+    UpdateClassificationScope (..),
+    newUpdateClassificationScope,
+
+    -- * Request Lenses
+    updateClassificationScope_s3,
+    updateClassificationScope_id,
+
+    -- * Destructuring the Response
+    UpdateClassificationScopeResponse (..),
+    newUpdateClassificationScopeResponse,
+
+    -- * Response Lenses
+    updateClassificationScopeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateClassificationScope' smart constructor.
+data UpdateClassificationScope = UpdateClassificationScope'
+  { -- | The S3 buckets to add or remove from the exclusion list defined by the
+    -- classification scope.
+    s3 :: Prelude.Maybe S3ClassificationScopeUpdate,
+    -- | The unique identifier for the Amazon Macie resource that the request
+    -- applies to.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateClassificationScope' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3', 'updateClassificationScope_s3' - The S3 buckets to add or remove from the exclusion list defined by the
+-- classification scope.
+--
+-- 'id', 'updateClassificationScope_id' - The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+newUpdateClassificationScope ::
+  -- | 'id'
+  Prelude.Text ->
+  UpdateClassificationScope
+newUpdateClassificationScope pId_ =
+  UpdateClassificationScope'
+    { s3 = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | The S3 buckets to add or remove from the exclusion list defined by the
+-- classification scope.
+updateClassificationScope_s3 :: Lens.Lens' UpdateClassificationScope (Prelude.Maybe S3ClassificationScopeUpdate)
+updateClassificationScope_s3 = Lens.lens (\UpdateClassificationScope' {s3} -> s3) (\s@UpdateClassificationScope' {} a -> s {s3 = a} :: UpdateClassificationScope)
+
+-- | The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+updateClassificationScope_id :: Lens.Lens' UpdateClassificationScope Prelude.Text
+updateClassificationScope_id = Lens.lens (\UpdateClassificationScope' {id} -> id) (\s@UpdateClassificationScope' {} a -> s {id = a} :: UpdateClassificationScope)
+
+instance Core.AWSRequest UpdateClassificationScope where
+  type
+    AWSResponse UpdateClassificationScope =
+      UpdateClassificationScopeResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateClassificationScopeResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateClassificationScope where
+  hashWithSalt _salt UpdateClassificationScope' {..} =
+    _salt
+      `Prelude.hashWithSalt` s3
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdateClassificationScope where
+  rnf UpdateClassificationScope' {..} =
+    Prelude.rnf s3 `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdateClassificationScope where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateClassificationScope where
+  toJSON UpdateClassificationScope' {..} =
+    Data.object
+      (Prelude.catMaybes [("s3" Data..=) Prelude.<$> s3])
+
+instance Data.ToPath UpdateClassificationScope where
+  toPath UpdateClassificationScope' {..} =
+    Prelude.mconcat
+      ["/classification-scopes/", Data.toBS id]
+
+instance Data.ToQuery UpdateClassificationScope where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateClassificationScopeResponse' smart constructor.
+data UpdateClassificationScopeResponse = UpdateClassificationScopeResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateClassificationScopeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateClassificationScopeResponse_httpStatus' - The response's http status code.
+newUpdateClassificationScopeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateClassificationScopeResponse
+newUpdateClassificationScopeResponse pHttpStatus_ =
+  UpdateClassificationScopeResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateClassificationScopeResponse_httpStatus :: Lens.Lens' UpdateClassificationScopeResponse Prelude.Int
+updateClassificationScopeResponse_httpStatus = Lens.lens (\UpdateClassificationScopeResponse' {httpStatus} -> httpStatus) (\s@UpdateClassificationScopeResponse' {} a -> s {httpStatus = a} :: UpdateClassificationScopeResponse)
+
+instance
+  Prelude.NFData
+    UpdateClassificationScopeResponse
+  where
+  rnf UpdateClassificationScopeResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/UpdateFindingsFilter.hs b/gen/Amazonka/MacieV2/UpdateFindingsFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/UpdateFindingsFilter.hs
@@ -0,0 +1,317 @@
+{-# 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.MacieV2.UpdateFindingsFilter
+-- 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 criteria and other settings for a findings filter.
+module Amazonka.MacieV2.UpdateFindingsFilter
+  ( -- * Creating a Request
+    UpdateFindingsFilter (..),
+    newUpdateFindingsFilter,
+
+    -- * Request Lenses
+    updateFindingsFilter_action,
+    updateFindingsFilter_clientToken,
+    updateFindingsFilter_description,
+    updateFindingsFilter_findingCriteria,
+    updateFindingsFilter_name,
+    updateFindingsFilter_position,
+    updateFindingsFilter_id,
+
+    -- * Destructuring the Response
+    UpdateFindingsFilterResponse (..),
+    newUpdateFindingsFilterResponse,
+
+    -- * Response Lenses
+    updateFindingsFilterResponse_arn,
+    updateFindingsFilterResponse_id,
+    updateFindingsFilterResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateFindingsFilter' smart constructor.
+data UpdateFindingsFilter = UpdateFindingsFilter'
+  { -- | The action to perform on findings that match the filter criteria
+    -- (findingCriteria). Valid values are: ARCHIVE, suppress (automatically
+    -- archive) the findings; and, NOOP, don\'t perform any action on the
+    -- findings.
+    action :: Prelude.Maybe FindingsFilterAction,
+    -- | A unique, case-sensitive token that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A custom description of the filter. The description can contain as many
+    -- as 512 characters.
+    --
+    -- We strongly recommend that you avoid including any sensitive data in the
+    -- description of a filter. Other users might be able to see this
+    -- description, depending on the actions that they\'re allowed to perform
+    -- in Amazon Macie.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The criteria to use to filter findings.
+    findingCriteria :: Prelude.Maybe FindingCriteria,
+    -- | A custom name for the filter. The name must contain at least 3
+    -- characters and can contain as many as 64 characters.
+    --
+    -- We strongly recommend that you avoid including any sensitive data in the
+    -- name of a filter. Other users might be able to see this name, depending
+    -- on the actions that they\'re allowed to perform in Amazon Macie.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The position of the filter in the list of saved filters on the Amazon
+    -- Macie console. This value also determines the order in which the filter
+    -- is applied to findings, relative to other filters that are also applied
+    -- to the findings.
+    position :: Prelude.Maybe Prelude.Int,
+    -- | The unique identifier for the Amazon Macie resource that the request
+    -- applies to.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFindingsFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'action', 'updateFindingsFilter_action' - The action to perform on findings that match the filter criteria
+-- (findingCriteria). Valid values are: ARCHIVE, suppress (automatically
+-- archive) the findings; and, NOOP, don\'t perform any action on the
+-- findings.
+--
+-- 'clientToken', 'updateFindingsFilter_clientToken' - A unique, case-sensitive token that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'description', 'updateFindingsFilter_description' - A custom description of the filter. The description can contain as many
+-- as 512 characters.
+--
+-- We strongly recommend that you avoid including any sensitive data in the
+-- description of a filter. Other users might be able to see this
+-- description, depending on the actions that they\'re allowed to perform
+-- in Amazon Macie.
+--
+-- 'findingCriteria', 'updateFindingsFilter_findingCriteria' - The criteria to use to filter findings.
+--
+-- 'name', 'updateFindingsFilter_name' - A custom name for the filter. The name must contain at least 3
+-- characters and can contain as many as 64 characters.
+--
+-- We strongly recommend that you avoid including any sensitive data in the
+-- name of a filter. Other users might be able to see this name, depending
+-- on the actions that they\'re allowed to perform in Amazon Macie.
+--
+-- 'position', 'updateFindingsFilter_position' - The position of the filter in the list of saved filters on the Amazon
+-- Macie console. This value also determines the order in which the filter
+-- is applied to findings, relative to other filters that are also applied
+-- to the findings.
+--
+-- 'id', 'updateFindingsFilter_id' - The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+newUpdateFindingsFilter ::
+  -- | 'id'
+  Prelude.Text ->
+  UpdateFindingsFilter
+newUpdateFindingsFilter pId_ =
+  UpdateFindingsFilter'
+    { action = Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      findingCriteria = Prelude.Nothing,
+      name = Prelude.Nothing,
+      position = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | The action to perform on findings that match the filter criteria
+-- (findingCriteria). Valid values are: ARCHIVE, suppress (automatically
+-- archive) the findings; and, NOOP, don\'t perform any action on the
+-- findings.
+updateFindingsFilter_action :: Lens.Lens' UpdateFindingsFilter (Prelude.Maybe FindingsFilterAction)
+updateFindingsFilter_action = Lens.lens (\UpdateFindingsFilter' {action} -> action) (\s@UpdateFindingsFilter' {} a -> s {action = a} :: UpdateFindingsFilter)
+
+-- | A unique, case-sensitive token that you provide to ensure the
+-- idempotency of the request.
+updateFindingsFilter_clientToken :: Lens.Lens' UpdateFindingsFilter (Prelude.Maybe Prelude.Text)
+updateFindingsFilter_clientToken = Lens.lens (\UpdateFindingsFilter' {clientToken} -> clientToken) (\s@UpdateFindingsFilter' {} a -> s {clientToken = a} :: UpdateFindingsFilter)
+
+-- | A custom description of the filter. The description can contain as many
+-- as 512 characters.
+--
+-- We strongly recommend that you avoid including any sensitive data in the
+-- description of a filter. Other users might be able to see this
+-- description, depending on the actions that they\'re allowed to perform
+-- in Amazon Macie.
+updateFindingsFilter_description :: Lens.Lens' UpdateFindingsFilter (Prelude.Maybe Prelude.Text)
+updateFindingsFilter_description = Lens.lens (\UpdateFindingsFilter' {description} -> description) (\s@UpdateFindingsFilter' {} a -> s {description = a} :: UpdateFindingsFilter)
+
+-- | The criteria to use to filter findings.
+updateFindingsFilter_findingCriteria :: Lens.Lens' UpdateFindingsFilter (Prelude.Maybe FindingCriteria)
+updateFindingsFilter_findingCriteria = Lens.lens (\UpdateFindingsFilter' {findingCriteria} -> findingCriteria) (\s@UpdateFindingsFilter' {} a -> s {findingCriteria = a} :: UpdateFindingsFilter)
+
+-- | A custom name for the filter. The name must contain at least 3
+-- characters and can contain as many as 64 characters.
+--
+-- We strongly recommend that you avoid including any sensitive data in the
+-- name of a filter. Other users might be able to see this name, depending
+-- on the actions that they\'re allowed to perform in Amazon Macie.
+updateFindingsFilter_name :: Lens.Lens' UpdateFindingsFilter (Prelude.Maybe Prelude.Text)
+updateFindingsFilter_name = Lens.lens (\UpdateFindingsFilter' {name} -> name) (\s@UpdateFindingsFilter' {} a -> s {name = a} :: UpdateFindingsFilter)
+
+-- | The position of the filter in the list of saved filters on the Amazon
+-- Macie console. This value also determines the order in which the filter
+-- is applied to findings, relative to other filters that are also applied
+-- to the findings.
+updateFindingsFilter_position :: Lens.Lens' UpdateFindingsFilter (Prelude.Maybe Prelude.Int)
+updateFindingsFilter_position = Lens.lens (\UpdateFindingsFilter' {position} -> position) (\s@UpdateFindingsFilter' {} a -> s {position = a} :: UpdateFindingsFilter)
+
+-- | The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+updateFindingsFilter_id :: Lens.Lens' UpdateFindingsFilter Prelude.Text
+updateFindingsFilter_id = Lens.lens (\UpdateFindingsFilter' {id} -> id) (\s@UpdateFindingsFilter' {} a -> s {id = a} :: UpdateFindingsFilter)
+
+instance Core.AWSRequest UpdateFindingsFilter where
+  type
+    AWSResponse UpdateFindingsFilter =
+      UpdateFindingsFilterResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateFindingsFilterResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateFindingsFilter where
+  hashWithSalt _salt UpdateFindingsFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` action
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` findingCriteria
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` position
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdateFindingsFilter where
+  rnf UpdateFindingsFilter' {..} =
+    Prelude.rnf action
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf findingCriteria
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf position
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdateFindingsFilter where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateFindingsFilter where
+  toJSON UpdateFindingsFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("action" Data..=) Prelude.<$> action,
+            ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            ("findingCriteria" Data..=)
+              Prelude.<$> findingCriteria,
+            ("name" Data..=) Prelude.<$> name,
+            ("position" Data..=) Prelude.<$> position
+          ]
+      )
+
+instance Data.ToPath UpdateFindingsFilter where
+  toPath UpdateFindingsFilter' {..} =
+    Prelude.mconcat ["/findingsfilters/", Data.toBS id]
+
+instance Data.ToQuery UpdateFindingsFilter where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateFindingsFilterResponse' smart constructor.
+data UpdateFindingsFilterResponse = UpdateFindingsFilterResponse'
+  { -- | The Amazon Resource Name (ARN) of the filter that was updated.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the filter that was updated.
+    id :: 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 'UpdateFindingsFilterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateFindingsFilterResponse_arn' - The Amazon Resource Name (ARN) of the filter that was updated.
+--
+-- 'id', 'updateFindingsFilterResponse_id' - The unique identifier for the filter that was updated.
+--
+-- 'httpStatus', 'updateFindingsFilterResponse_httpStatus' - The response's http status code.
+newUpdateFindingsFilterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateFindingsFilterResponse
+newUpdateFindingsFilterResponse pHttpStatus_ =
+  UpdateFindingsFilterResponse'
+    { arn =
+        Prelude.Nothing,
+      id = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the filter that was updated.
+updateFindingsFilterResponse_arn :: Lens.Lens' UpdateFindingsFilterResponse (Prelude.Maybe Prelude.Text)
+updateFindingsFilterResponse_arn = Lens.lens (\UpdateFindingsFilterResponse' {arn} -> arn) (\s@UpdateFindingsFilterResponse' {} a -> s {arn = a} :: UpdateFindingsFilterResponse)
+
+-- | The unique identifier for the filter that was updated.
+updateFindingsFilterResponse_id :: Lens.Lens' UpdateFindingsFilterResponse (Prelude.Maybe Prelude.Text)
+updateFindingsFilterResponse_id = Lens.lens (\UpdateFindingsFilterResponse' {id} -> id) (\s@UpdateFindingsFilterResponse' {} a -> s {id = a} :: UpdateFindingsFilterResponse)
+
+-- | The response's http status code.
+updateFindingsFilterResponse_httpStatus :: Lens.Lens' UpdateFindingsFilterResponse Prelude.Int
+updateFindingsFilterResponse_httpStatus = Lens.lens (\UpdateFindingsFilterResponse' {httpStatus} -> httpStatus) (\s@UpdateFindingsFilterResponse' {} a -> s {httpStatus = a} :: UpdateFindingsFilterResponse)
+
+instance Prelude.NFData UpdateFindingsFilterResponse where
+  rnf UpdateFindingsFilterResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/UpdateMacieSession.hs b/gen/Amazonka/MacieV2/UpdateMacieSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/UpdateMacieSession.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.MacieV2.UpdateMacieSession
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Suspends or re-enables Amazon Macie, or updates the configuration
+-- settings for a Macie account.
+module Amazonka.MacieV2.UpdateMacieSession
+  ( -- * Creating a Request
+    UpdateMacieSession (..),
+    newUpdateMacieSession,
+
+    -- * Request Lenses
+    updateMacieSession_findingPublishingFrequency,
+    updateMacieSession_status,
+
+    -- * Destructuring the Response
+    UpdateMacieSessionResponse (..),
+    newUpdateMacieSessionResponse,
+
+    -- * Response Lenses
+    updateMacieSessionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateMacieSession' smart constructor.
+data UpdateMacieSession = UpdateMacieSession'
+  { -- | Specifies how often to publish updates to policy findings for the
+    -- account. This includes publishing updates to Security Hub and Amazon
+    -- EventBridge (formerly Amazon CloudWatch Events).
+    findingPublishingFrequency :: Prelude.Maybe FindingPublishingFrequency,
+    -- | Specifies a new status for the account. Valid values are: ENABLED,
+    -- resume all Amazon Macie activities for the account; and, PAUSED, suspend
+    -- all Macie activities for the account.
+    status :: Prelude.Maybe MacieStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateMacieSession' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'findingPublishingFrequency', 'updateMacieSession_findingPublishingFrequency' - Specifies how often to publish updates to policy findings for the
+-- account. This includes publishing updates to Security Hub and Amazon
+-- EventBridge (formerly Amazon CloudWatch Events).
+--
+-- 'status', 'updateMacieSession_status' - Specifies a new status for the account. Valid values are: ENABLED,
+-- resume all Amazon Macie activities for the account; and, PAUSED, suspend
+-- all Macie activities for the account.
+newUpdateMacieSession ::
+  UpdateMacieSession
+newUpdateMacieSession =
+  UpdateMacieSession'
+    { findingPublishingFrequency =
+        Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | Specifies how often to publish updates to policy findings for the
+-- account. This includes publishing updates to Security Hub and Amazon
+-- EventBridge (formerly Amazon CloudWatch Events).
+updateMacieSession_findingPublishingFrequency :: Lens.Lens' UpdateMacieSession (Prelude.Maybe FindingPublishingFrequency)
+updateMacieSession_findingPublishingFrequency = Lens.lens (\UpdateMacieSession' {findingPublishingFrequency} -> findingPublishingFrequency) (\s@UpdateMacieSession' {} a -> s {findingPublishingFrequency = a} :: UpdateMacieSession)
+
+-- | Specifies a new status for the account. Valid values are: ENABLED,
+-- resume all Amazon Macie activities for the account; and, PAUSED, suspend
+-- all Macie activities for the account.
+updateMacieSession_status :: Lens.Lens' UpdateMacieSession (Prelude.Maybe MacieStatus)
+updateMacieSession_status = Lens.lens (\UpdateMacieSession' {status} -> status) (\s@UpdateMacieSession' {} a -> s {status = a} :: UpdateMacieSession)
+
+instance Core.AWSRequest UpdateMacieSession where
+  type
+    AWSResponse UpdateMacieSession =
+      UpdateMacieSessionResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateMacieSessionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateMacieSession where
+  hashWithSalt _salt UpdateMacieSession' {..} =
+    _salt
+      `Prelude.hashWithSalt` findingPublishingFrequency
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData UpdateMacieSession where
+  rnf UpdateMacieSession' {..} =
+    Prelude.rnf findingPublishingFrequency
+      `Prelude.seq` Prelude.rnf status
+
+instance Data.ToHeaders UpdateMacieSession where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateMacieSession where
+  toJSON UpdateMacieSession' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("findingPublishingFrequency" Data..=)
+              Prelude.<$> findingPublishingFrequency,
+            ("status" Data..=) Prelude.<$> status
+          ]
+      )
+
+instance Data.ToPath UpdateMacieSession where
+  toPath = Prelude.const "/macie"
+
+instance Data.ToQuery UpdateMacieSession where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateMacieSessionResponse' smart constructor.
+data UpdateMacieSessionResponse = UpdateMacieSessionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateMacieSessionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateMacieSessionResponse_httpStatus' - The response's http status code.
+newUpdateMacieSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateMacieSessionResponse
+newUpdateMacieSessionResponse pHttpStatus_ =
+  UpdateMacieSessionResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateMacieSessionResponse_httpStatus :: Lens.Lens' UpdateMacieSessionResponse Prelude.Int
+updateMacieSessionResponse_httpStatus = Lens.lens (\UpdateMacieSessionResponse' {httpStatus} -> httpStatus) (\s@UpdateMacieSessionResponse' {} a -> s {httpStatus = a} :: UpdateMacieSessionResponse)
+
+instance Prelude.NFData UpdateMacieSessionResponse where
+  rnf UpdateMacieSessionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/UpdateMemberSession.hs b/gen/Amazonka/MacieV2/UpdateMemberSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/UpdateMemberSession.hs
@@ -0,0 +1,177 @@
+{-# 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.MacieV2.UpdateMemberSession
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables an Amazon Macie administrator to suspend or re-enable Macie for
+-- a member account.
+module Amazonka.MacieV2.UpdateMemberSession
+  ( -- * Creating a Request
+    UpdateMemberSession (..),
+    newUpdateMemberSession,
+
+    -- * Request Lenses
+    updateMemberSession_id,
+    updateMemberSession_status,
+
+    -- * Destructuring the Response
+    UpdateMemberSessionResponse (..),
+    newUpdateMemberSessionResponse,
+
+    -- * Response Lenses
+    updateMemberSessionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateMemberSession' smart constructor.
+data UpdateMemberSession = UpdateMemberSession'
+  { -- | The unique identifier for the Amazon Macie resource that the request
+    -- applies to.
+    id :: Prelude.Text,
+    -- | Specifies the new status for the account. Valid values are: ENABLED,
+    -- resume all Amazon Macie activities for the account; and, PAUSED, suspend
+    -- all Macie activities for the account.
+    status :: MacieStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateMemberSession' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'updateMemberSession_id' - The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+--
+-- 'status', 'updateMemberSession_status' - Specifies the new status for the account. Valid values are: ENABLED,
+-- resume all Amazon Macie activities for the account; and, PAUSED, suspend
+-- all Macie activities for the account.
+newUpdateMemberSession ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'status'
+  MacieStatus ->
+  UpdateMemberSession
+newUpdateMemberSession pId_ pStatus_ =
+  UpdateMemberSession' {id = pId_, status = pStatus_}
+
+-- | The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+updateMemberSession_id :: Lens.Lens' UpdateMemberSession Prelude.Text
+updateMemberSession_id = Lens.lens (\UpdateMemberSession' {id} -> id) (\s@UpdateMemberSession' {} a -> s {id = a} :: UpdateMemberSession)
+
+-- | Specifies the new status for the account. Valid values are: ENABLED,
+-- resume all Amazon Macie activities for the account; and, PAUSED, suspend
+-- all Macie activities for the account.
+updateMemberSession_status :: Lens.Lens' UpdateMemberSession MacieStatus
+updateMemberSession_status = Lens.lens (\UpdateMemberSession' {status} -> status) (\s@UpdateMemberSession' {} a -> s {status = a} :: UpdateMemberSession)
+
+instance Core.AWSRequest UpdateMemberSession where
+  type
+    AWSResponse UpdateMemberSession =
+      UpdateMemberSessionResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateMemberSessionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateMemberSession where
+  hashWithSalt _salt UpdateMemberSession' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData UpdateMemberSession where
+  rnf UpdateMemberSession' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf status
+
+instance Data.ToHeaders UpdateMemberSession where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateMemberSession where
+  toJSON UpdateMemberSession' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("status" Data..= status)]
+      )
+
+instance Data.ToPath UpdateMemberSession where
+  toPath UpdateMemberSession' {..} =
+    Prelude.mconcat ["/macie/members/", Data.toBS id]
+
+instance Data.ToQuery UpdateMemberSession where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateMemberSessionResponse' smart constructor.
+data UpdateMemberSessionResponse = UpdateMemberSessionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateMemberSessionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateMemberSessionResponse_httpStatus' - The response's http status code.
+newUpdateMemberSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateMemberSessionResponse
+newUpdateMemberSessionResponse pHttpStatus_ =
+  UpdateMemberSessionResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateMemberSessionResponse_httpStatus :: Lens.Lens' UpdateMemberSessionResponse Prelude.Int
+updateMemberSessionResponse_httpStatus = Lens.lens (\UpdateMemberSessionResponse' {httpStatus} -> httpStatus) (\s@UpdateMemberSessionResponse' {} a -> s {httpStatus = a} :: UpdateMemberSessionResponse)
+
+instance Prelude.NFData UpdateMemberSessionResponse where
+  rnf UpdateMemberSessionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/UpdateOrganizationConfiguration.hs b/gen/Amazonka/MacieV2/UpdateOrganizationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/UpdateOrganizationConfiguration.hs
@@ -0,0 +1,178 @@
+{-# 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.MacieV2.UpdateOrganizationConfiguration
+-- 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 Amazon Macie configuration settings for an organization in
+-- Organizations.
+module Amazonka.MacieV2.UpdateOrganizationConfiguration
+  ( -- * Creating a Request
+    UpdateOrganizationConfiguration (..),
+    newUpdateOrganizationConfiguration,
+
+    -- * Request Lenses
+    updateOrganizationConfiguration_autoEnable,
+
+    -- * Destructuring the Response
+    UpdateOrganizationConfigurationResponse (..),
+    newUpdateOrganizationConfigurationResponse,
+
+    -- * Response Lenses
+    updateOrganizationConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateOrganizationConfiguration' smart constructor.
+data UpdateOrganizationConfiguration = UpdateOrganizationConfiguration'
+  { -- | Specifies whether to enable Amazon Macie automatically for an account
+    -- when the account is added to the organization in Organizations.
+    autoEnable :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateOrganizationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoEnable', 'updateOrganizationConfiguration_autoEnable' - Specifies whether to enable Amazon Macie automatically for an account
+-- when the account is added to the organization in Organizations.
+newUpdateOrganizationConfiguration ::
+  -- | 'autoEnable'
+  Prelude.Bool ->
+  UpdateOrganizationConfiguration
+newUpdateOrganizationConfiguration pAutoEnable_ =
+  UpdateOrganizationConfiguration'
+    { autoEnable =
+        pAutoEnable_
+    }
+
+-- | Specifies whether to enable Amazon Macie automatically for an account
+-- when the account is added to the organization in Organizations.
+updateOrganizationConfiguration_autoEnable :: Lens.Lens' UpdateOrganizationConfiguration Prelude.Bool
+updateOrganizationConfiguration_autoEnable = Lens.lens (\UpdateOrganizationConfiguration' {autoEnable} -> autoEnable) (\s@UpdateOrganizationConfiguration' {} a -> s {autoEnable = a} :: UpdateOrganizationConfiguration)
+
+instance
+  Core.AWSRequest
+    UpdateOrganizationConfiguration
+  where
+  type
+    AWSResponse UpdateOrganizationConfiguration =
+      UpdateOrganizationConfigurationResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateOrganizationConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateOrganizationConfiguration
+  where
+  hashWithSalt
+    _salt
+    UpdateOrganizationConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` autoEnable
+
+instance
+  Prelude.NFData
+    UpdateOrganizationConfiguration
+  where
+  rnf UpdateOrganizationConfiguration' {..} =
+    Prelude.rnf autoEnable
+
+instance
+  Data.ToHeaders
+    UpdateOrganizationConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateOrganizationConfiguration where
+  toJSON UpdateOrganizationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("autoEnable" Data..= autoEnable)]
+      )
+
+instance Data.ToPath UpdateOrganizationConfiguration where
+  toPath = Prelude.const "/admin/configuration"
+
+instance Data.ToQuery UpdateOrganizationConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateOrganizationConfigurationResponse' smart constructor.
+data UpdateOrganizationConfigurationResponse = UpdateOrganizationConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateOrganizationConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateOrganizationConfigurationResponse_httpStatus' - The response's http status code.
+newUpdateOrganizationConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateOrganizationConfigurationResponse
+newUpdateOrganizationConfigurationResponse
+  pHttpStatus_ =
+    UpdateOrganizationConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+updateOrganizationConfigurationResponse_httpStatus :: Lens.Lens' UpdateOrganizationConfigurationResponse Prelude.Int
+updateOrganizationConfigurationResponse_httpStatus = Lens.lens (\UpdateOrganizationConfigurationResponse' {httpStatus} -> httpStatus) (\s@UpdateOrganizationConfigurationResponse' {} a -> s {httpStatus = a} :: UpdateOrganizationConfigurationResponse)
+
+instance
+  Prelude.NFData
+    UpdateOrganizationConfigurationResponse
+  where
+  rnf UpdateOrganizationConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/UpdateResourceProfile.hs b/gen/Amazonka/MacieV2/UpdateResourceProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/UpdateResourceProfile.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.MacieV2.UpdateResourceProfile
+-- 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 sensitivity score for an S3 bucket.
+module Amazonka.MacieV2.UpdateResourceProfile
+  ( -- * Creating a Request
+    UpdateResourceProfile (..),
+    newUpdateResourceProfile,
+
+    -- * Request Lenses
+    updateResourceProfile_sensitivityScoreOverride,
+    updateResourceProfile_resourceArn,
+
+    -- * Destructuring the Response
+    UpdateResourceProfileResponse (..),
+    newUpdateResourceProfileResponse,
+
+    -- * Response Lenses
+    updateResourceProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateResourceProfile' smart constructor.
+data UpdateResourceProfile = UpdateResourceProfile'
+  { -- | The new sensitivity score for the bucket. Valid values are: 100, assign
+    -- the maximum score and apply the /Sensitive/ label to the bucket; and,
+    -- null (empty), assign a score that Amazon Macie calculates automatically
+    -- after you submit the request.
+    sensitivityScoreOverride :: Prelude.Maybe Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the S3 bucket that the request applies
+    -- to.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResourceProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sensitivityScoreOverride', 'updateResourceProfile_sensitivityScoreOverride' - The new sensitivity score for the bucket. Valid values are: 100, assign
+-- the maximum score and apply the /Sensitive/ label to the bucket; and,
+-- null (empty), assign a score that Amazon Macie calculates automatically
+-- after you submit the request.
+--
+-- 'resourceArn', 'updateResourceProfile_resourceArn' - The Amazon Resource Name (ARN) of the S3 bucket that the request applies
+-- to.
+newUpdateResourceProfile ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UpdateResourceProfile
+newUpdateResourceProfile pResourceArn_ =
+  UpdateResourceProfile'
+    { sensitivityScoreOverride =
+        Prelude.Nothing,
+      resourceArn = pResourceArn_
+    }
+
+-- | The new sensitivity score for the bucket. Valid values are: 100, assign
+-- the maximum score and apply the /Sensitive/ label to the bucket; and,
+-- null (empty), assign a score that Amazon Macie calculates automatically
+-- after you submit the request.
+updateResourceProfile_sensitivityScoreOverride :: Lens.Lens' UpdateResourceProfile (Prelude.Maybe Prelude.Int)
+updateResourceProfile_sensitivityScoreOverride = Lens.lens (\UpdateResourceProfile' {sensitivityScoreOverride} -> sensitivityScoreOverride) (\s@UpdateResourceProfile' {} a -> s {sensitivityScoreOverride = a} :: UpdateResourceProfile)
+
+-- | The Amazon Resource Name (ARN) of the S3 bucket that the request applies
+-- to.
+updateResourceProfile_resourceArn :: Lens.Lens' UpdateResourceProfile Prelude.Text
+updateResourceProfile_resourceArn = Lens.lens (\UpdateResourceProfile' {resourceArn} -> resourceArn) (\s@UpdateResourceProfile' {} a -> s {resourceArn = a} :: UpdateResourceProfile)
+
+instance Core.AWSRequest UpdateResourceProfile where
+  type
+    AWSResponse UpdateResourceProfile =
+      UpdateResourceProfileResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateResourceProfileResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateResourceProfile where
+  hashWithSalt _salt UpdateResourceProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` sensitivityScoreOverride
+      `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData UpdateResourceProfile where
+  rnf UpdateResourceProfile' {..} =
+    Prelude.rnf sensitivityScoreOverride
+      `Prelude.seq` Prelude.rnf resourceArn
+
+instance Data.ToHeaders UpdateResourceProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateResourceProfile where
+  toJSON UpdateResourceProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("sensitivityScoreOverride" Data..=)
+              Prelude.<$> sensitivityScoreOverride
+          ]
+      )
+
+instance Data.ToPath UpdateResourceProfile where
+  toPath = Prelude.const "/resource-profiles"
+
+instance Data.ToQuery UpdateResourceProfile where
+  toQuery UpdateResourceProfile' {..} =
+    Prelude.mconcat ["resourceArn" Data.=: resourceArn]
+
+-- | /See:/ 'newUpdateResourceProfileResponse' smart constructor.
+data UpdateResourceProfileResponse = UpdateResourceProfileResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResourceProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateResourceProfileResponse_httpStatus' - The response's http status code.
+newUpdateResourceProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateResourceProfileResponse
+newUpdateResourceProfileResponse pHttpStatus_ =
+  UpdateResourceProfileResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateResourceProfileResponse_httpStatus :: Lens.Lens' UpdateResourceProfileResponse Prelude.Int
+updateResourceProfileResponse_httpStatus = Lens.lens (\UpdateResourceProfileResponse' {httpStatus} -> httpStatus) (\s@UpdateResourceProfileResponse' {} a -> s {httpStatus = a} :: UpdateResourceProfileResponse)
+
+instance Prelude.NFData UpdateResourceProfileResponse where
+  rnf UpdateResourceProfileResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/UpdateResourceProfileDetections.hs b/gen/Amazonka/MacieV2/UpdateResourceProfileDetections.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/UpdateResourceProfileDetections.hs
@@ -0,0 +1,203 @@
+{-# 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.MacieV2.UpdateResourceProfileDetections
+-- 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 sensitivity scoring settings for an S3 bucket.
+module Amazonka.MacieV2.UpdateResourceProfileDetections
+  ( -- * Creating a Request
+    UpdateResourceProfileDetections (..),
+    newUpdateResourceProfileDetections,
+
+    -- * Request Lenses
+    updateResourceProfileDetections_suppressDataIdentifiers,
+    updateResourceProfileDetections_resourceArn,
+
+    -- * Destructuring the Response
+    UpdateResourceProfileDetectionsResponse (..),
+    newUpdateResourceProfileDetectionsResponse,
+
+    -- * Response Lenses
+    updateResourceProfileDetectionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateResourceProfileDetections' smart constructor.
+data UpdateResourceProfileDetections = UpdateResourceProfileDetections'
+  { -- | An array of objects, one for each custom data identifier or managed data
+    -- identifier that detected the type of sensitive data to start excluding
+    -- or including in the bucket\'s score. To start including all sensitive
+    -- data types in the score, don\'t specify any values for this array.
+    suppressDataIdentifiers :: Prelude.Maybe [SuppressDataIdentifier],
+    -- | The Amazon Resource Name (ARN) of the S3 bucket that the request applies
+    -- to.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResourceProfileDetections' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'suppressDataIdentifiers', 'updateResourceProfileDetections_suppressDataIdentifiers' - An array of objects, one for each custom data identifier or managed data
+-- identifier that detected the type of sensitive data to start excluding
+-- or including in the bucket\'s score. To start including all sensitive
+-- data types in the score, don\'t specify any values for this array.
+--
+-- 'resourceArn', 'updateResourceProfileDetections_resourceArn' - The Amazon Resource Name (ARN) of the S3 bucket that the request applies
+-- to.
+newUpdateResourceProfileDetections ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UpdateResourceProfileDetections
+newUpdateResourceProfileDetections pResourceArn_ =
+  UpdateResourceProfileDetections'
+    { suppressDataIdentifiers =
+        Prelude.Nothing,
+      resourceArn = pResourceArn_
+    }
+
+-- | An array of objects, one for each custom data identifier or managed data
+-- identifier that detected the type of sensitive data to start excluding
+-- or including in the bucket\'s score. To start including all sensitive
+-- data types in the score, don\'t specify any values for this array.
+updateResourceProfileDetections_suppressDataIdentifiers :: Lens.Lens' UpdateResourceProfileDetections (Prelude.Maybe [SuppressDataIdentifier])
+updateResourceProfileDetections_suppressDataIdentifiers = Lens.lens (\UpdateResourceProfileDetections' {suppressDataIdentifiers} -> suppressDataIdentifiers) (\s@UpdateResourceProfileDetections' {} a -> s {suppressDataIdentifiers = a} :: UpdateResourceProfileDetections) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the S3 bucket that the request applies
+-- to.
+updateResourceProfileDetections_resourceArn :: Lens.Lens' UpdateResourceProfileDetections Prelude.Text
+updateResourceProfileDetections_resourceArn = Lens.lens (\UpdateResourceProfileDetections' {resourceArn} -> resourceArn) (\s@UpdateResourceProfileDetections' {} a -> s {resourceArn = a} :: UpdateResourceProfileDetections)
+
+instance
+  Core.AWSRequest
+    UpdateResourceProfileDetections
+  where
+  type
+    AWSResponse UpdateResourceProfileDetections =
+      UpdateResourceProfileDetectionsResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateResourceProfileDetectionsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateResourceProfileDetections
+  where
+  hashWithSalt
+    _salt
+    UpdateResourceProfileDetections' {..} =
+      _salt
+        `Prelude.hashWithSalt` suppressDataIdentifiers
+        `Prelude.hashWithSalt` resourceArn
+
+instance
+  Prelude.NFData
+    UpdateResourceProfileDetections
+  where
+  rnf UpdateResourceProfileDetections' {..} =
+    Prelude.rnf suppressDataIdentifiers
+      `Prelude.seq` Prelude.rnf resourceArn
+
+instance
+  Data.ToHeaders
+    UpdateResourceProfileDetections
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateResourceProfileDetections where
+  toJSON UpdateResourceProfileDetections' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("suppressDataIdentifiers" Data..=)
+              Prelude.<$> suppressDataIdentifiers
+          ]
+      )
+
+instance Data.ToPath UpdateResourceProfileDetections where
+  toPath =
+    Prelude.const "/resource-profiles/detections"
+
+instance Data.ToQuery UpdateResourceProfileDetections where
+  toQuery UpdateResourceProfileDetections' {..} =
+    Prelude.mconcat ["resourceArn" Data.=: resourceArn]
+
+-- | /See:/ 'newUpdateResourceProfileDetectionsResponse' smart constructor.
+data UpdateResourceProfileDetectionsResponse = UpdateResourceProfileDetectionsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResourceProfileDetectionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateResourceProfileDetectionsResponse_httpStatus' - The response's http status code.
+newUpdateResourceProfileDetectionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateResourceProfileDetectionsResponse
+newUpdateResourceProfileDetectionsResponse
+  pHttpStatus_ =
+    UpdateResourceProfileDetectionsResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+updateResourceProfileDetectionsResponse_httpStatus :: Lens.Lens' UpdateResourceProfileDetectionsResponse Prelude.Int
+updateResourceProfileDetectionsResponse_httpStatus = Lens.lens (\UpdateResourceProfileDetectionsResponse' {httpStatus} -> httpStatus) (\s@UpdateResourceProfileDetectionsResponse' {} a -> s {httpStatus = a} :: UpdateResourceProfileDetectionsResponse)
+
+instance
+  Prelude.NFData
+    UpdateResourceProfileDetectionsResponse
+  where
+  rnf UpdateResourceProfileDetectionsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/UpdateRevealConfiguration.hs b/gen/Amazonka/MacieV2/UpdateRevealConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/UpdateRevealConfiguration.hs
@@ -0,0 +1,180 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.UpdateRevealConfiguration
+-- 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 and configuration settings for retrieving occurrences
+-- of sensitive data reported by findings.
+module Amazonka.MacieV2.UpdateRevealConfiguration
+  ( -- * Creating a Request
+    UpdateRevealConfiguration (..),
+    newUpdateRevealConfiguration,
+
+    -- * Request Lenses
+    updateRevealConfiguration_configuration,
+
+    -- * Destructuring the Response
+    UpdateRevealConfigurationResponse (..),
+    newUpdateRevealConfigurationResponse,
+
+    -- * Response Lenses
+    updateRevealConfigurationResponse_configuration,
+    updateRevealConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateRevealConfiguration' smart constructor.
+data UpdateRevealConfiguration = UpdateRevealConfiguration'
+  { -- | The new configuration settings and the status of the configuration for
+    -- the account.
+    configuration :: RevealConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRevealConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configuration', 'updateRevealConfiguration_configuration' - The new configuration settings and the status of the configuration for
+-- the account.
+newUpdateRevealConfiguration ::
+  -- | 'configuration'
+  RevealConfiguration ->
+  UpdateRevealConfiguration
+newUpdateRevealConfiguration pConfiguration_ =
+  UpdateRevealConfiguration'
+    { configuration =
+        pConfiguration_
+    }
+
+-- | The new configuration settings and the status of the configuration for
+-- the account.
+updateRevealConfiguration_configuration :: Lens.Lens' UpdateRevealConfiguration RevealConfiguration
+updateRevealConfiguration_configuration = Lens.lens (\UpdateRevealConfiguration' {configuration} -> configuration) (\s@UpdateRevealConfiguration' {} a -> s {configuration = a} :: UpdateRevealConfiguration)
+
+instance Core.AWSRequest UpdateRevealConfiguration where
+  type
+    AWSResponse UpdateRevealConfiguration =
+      UpdateRevealConfigurationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateRevealConfigurationResponse'
+            Prelude.<$> (x Data..?> "configuration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateRevealConfiguration where
+  hashWithSalt _salt UpdateRevealConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` configuration
+
+instance Prelude.NFData UpdateRevealConfiguration where
+  rnf UpdateRevealConfiguration' {..} =
+    Prelude.rnf configuration
+
+instance Data.ToHeaders UpdateRevealConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateRevealConfiguration where
+  toJSON UpdateRevealConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("configuration" Data..= configuration)
+          ]
+      )
+
+instance Data.ToPath UpdateRevealConfiguration where
+  toPath = Prelude.const "/reveal-configuration"
+
+instance Data.ToQuery UpdateRevealConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateRevealConfigurationResponse' smart constructor.
+data UpdateRevealConfigurationResponse = UpdateRevealConfigurationResponse'
+  { -- | The new configuration settings and the status of the configuration for
+    -- the account.
+    configuration :: Prelude.Maybe RevealConfiguration,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRevealConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configuration', 'updateRevealConfigurationResponse_configuration' - The new configuration settings and the status of the configuration for
+-- the account.
+--
+-- 'httpStatus', 'updateRevealConfigurationResponse_httpStatus' - The response's http status code.
+newUpdateRevealConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateRevealConfigurationResponse
+newUpdateRevealConfigurationResponse pHttpStatus_ =
+  UpdateRevealConfigurationResponse'
+    { configuration =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The new configuration settings and the status of the configuration for
+-- the account.
+updateRevealConfigurationResponse_configuration :: Lens.Lens' UpdateRevealConfigurationResponse (Prelude.Maybe RevealConfiguration)
+updateRevealConfigurationResponse_configuration = Lens.lens (\UpdateRevealConfigurationResponse' {configuration} -> configuration) (\s@UpdateRevealConfigurationResponse' {} a -> s {configuration = a} :: UpdateRevealConfigurationResponse)
+
+-- | The response's http status code.
+updateRevealConfigurationResponse_httpStatus :: Lens.Lens' UpdateRevealConfigurationResponse Prelude.Int
+updateRevealConfigurationResponse_httpStatus = Lens.lens (\UpdateRevealConfigurationResponse' {httpStatus} -> httpStatus) (\s@UpdateRevealConfigurationResponse' {} a -> s {httpStatus = a} :: UpdateRevealConfigurationResponse)
+
+instance
+  Prelude.NFData
+    UpdateRevealConfigurationResponse
+  where
+  rnf UpdateRevealConfigurationResponse' {..} =
+    Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/UpdateSensitivityInspectionTemplate.hs b/gen/Amazonka/MacieV2/UpdateSensitivityInspectionTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/UpdateSensitivityInspectionTemplate.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MacieV2.UpdateSensitivityInspectionTemplate
+-- 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 settings for the sensitivity inspection template for an
+-- account.
+module Amazonka.MacieV2.UpdateSensitivityInspectionTemplate
+  ( -- * Creating a Request
+    UpdateSensitivityInspectionTemplate (..),
+    newUpdateSensitivityInspectionTemplate,
+
+    -- * Request Lenses
+    updateSensitivityInspectionTemplate_description,
+    updateSensitivityInspectionTemplate_excludes,
+    updateSensitivityInspectionTemplate_includes,
+    updateSensitivityInspectionTemplate_id,
+
+    -- * Destructuring the Response
+    UpdateSensitivityInspectionTemplateResponse (..),
+    newUpdateSensitivityInspectionTemplateResponse,
+
+    -- * Response Lenses
+    updateSensitivityInspectionTemplateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateSensitivityInspectionTemplate' smart constructor.
+data UpdateSensitivityInspectionTemplate = UpdateSensitivityInspectionTemplate'
+  { -- | A custom description of the template.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The managed data identifiers to explicitly exclude (not use) when
+    -- analyzing data.
+    --
+    -- To exclude an allow list or custom data identifier that\'s currently
+    -- included by the template, update the values for the
+    -- SensitivityInspectionTemplateIncludes.allowListIds and
+    -- SensitivityInspectionTemplateIncludes.customDataIdentifierIds
+    -- properties, respectively.
+    excludes :: Prelude.Maybe SensitivityInspectionTemplateExcludes,
+    -- | The allow lists, custom data identifiers, and managed data identifiers
+    -- to include (use) when analyzing data.
+    includes :: Prelude.Maybe SensitivityInspectionTemplateIncludes,
+    -- | The unique identifier for the Amazon Macie resource that the request
+    -- applies to.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSensitivityInspectionTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateSensitivityInspectionTemplate_description' - A custom description of the template.
+--
+-- 'excludes', 'updateSensitivityInspectionTemplate_excludes' - The managed data identifiers to explicitly exclude (not use) when
+-- analyzing data.
+--
+-- To exclude an allow list or custom data identifier that\'s currently
+-- included by the template, update the values for the
+-- SensitivityInspectionTemplateIncludes.allowListIds and
+-- SensitivityInspectionTemplateIncludes.customDataIdentifierIds
+-- properties, respectively.
+--
+-- 'includes', 'updateSensitivityInspectionTemplate_includes' - The allow lists, custom data identifiers, and managed data identifiers
+-- to include (use) when analyzing data.
+--
+-- 'id', 'updateSensitivityInspectionTemplate_id' - The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+newUpdateSensitivityInspectionTemplate ::
+  -- | 'id'
+  Prelude.Text ->
+  UpdateSensitivityInspectionTemplate
+newUpdateSensitivityInspectionTemplate pId_ =
+  UpdateSensitivityInspectionTemplate'
+    { description =
+        Prelude.Nothing,
+      excludes = Prelude.Nothing,
+      includes = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | A custom description of the template.
+updateSensitivityInspectionTemplate_description :: Lens.Lens' UpdateSensitivityInspectionTemplate (Prelude.Maybe Prelude.Text)
+updateSensitivityInspectionTemplate_description = Lens.lens (\UpdateSensitivityInspectionTemplate' {description} -> description) (\s@UpdateSensitivityInspectionTemplate' {} a -> s {description = a} :: UpdateSensitivityInspectionTemplate)
+
+-- | The managed data identifiers to explicitly exclude (not use) when
+-- analyzing data.
+--
+-- To exclude an allow list or custom data identifier that\'s currently
+-- included by the template, update the values for the
+-- SensitivityInspectionTemplateIncludes.allowListIds and
+-- SensitivityInspectionTemplateIncludes.customDataIdentifierIds
+-- properties, respectively.
+updateSensitivityInspectionTemplate_excludes :: Lens.Lens' UpdateSensitivityInspectionTemplate (Prelude.Maybe SensitivityInspectionTemplateExcludes)
+updateSensitivityInspectionTemplate_excludes = Lens.lens (\UpdateSensitivityInspectionTemplate' {excludes} -> excludes) (\s@UpdateSensitivityInspectionTemplate' {} a -> s {excludes = a} :: UpdateSensitivityInspectionTemplate)
+
+-- | The allow lists, custom data identifiers, and managed data identifiers
+-- to include (use) when analyzing data.
+updateSensitivityInspectionTemplate_includes :: Lens.Lens' UpdateSensitivityInspectionTemplate (Prelude.Maybe SensitivityInspectionTemplateIncludes)
+updateSensitivityInspectionTemplate_includes = Lens.lens (\UpdateSensitivityInspectionTemplate' {includes} -> includes) (\s@UpdateSensitivityInspectionTemplate' {} a -> s {includes = a} :: UpdateSensitivityInspectionTemplate)
+
+-- | The unique identifier for the Amazon Macie resource that the request
+-- applies to.
+updateSensitivityInspectionTemplate_id :: Lens.Lens' UpdateSensitivityInspectionTemplate Prelude.Text
+updateSensitivityInspectionTemplate_id = Lens.lens (\UpdateSensitivityInspectionTemplate' {id} -> id) (\s@UpdateSensitivityInspectionTemplate' {} a -> s {id = a} :: UpdateSensitivityInspectionTemplate)
+
+instance
+  Core.AWSRequest
+    UpdateSensitivityInspectionTemplate
+  where
+  type
+    AWSResponse UpdateSensitivityInspectionTemplate =
+      UpdateSensitivityInspectionTemplateResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateSensitivityInspectionTemplateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateSensitivityInspectionTemplate
+  where
+  hashWithSalt
+    _salt
+    UpdateSensitivityInspectionTemplate' {..} =
+      _salt
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` excludes
+        `Prelude.hashWithSalt` includes
+        `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    UpdateSensitivityInspectionTemplate
+  where
+  rnf UpdateSensitivityInspectionTemplate' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf excludes
+      `Prelude.seq` Prelude.rnf includes
+      `Prelude.seq` Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    UpdateSensitivityInspectionTemplate
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    UpdateSensitivityInspectionTemplate
+  where
+  toJSON UpdateSensitivityInspectionTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("excludes" Data..=) Prelude.<$> excludes,
+            ("includes" Data..=) Prelude.<$> includes
+          ]
+      )
+
+instance
+  Data.ToPath
+    UpdateSensitivityInspectionTemplate
+  where
+  toPath UpdateSensitivityInspectionTemplate' {..} =
+    Prelude.mconcat
+      ["/templates/sensitivity-inspections/", Data.toBS id]
+
+instance
+  Data.ToQuery
+    UpdateSensitivityInspectionTemplate
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateSensitivityInspectionTemplateResponse' smart constructor.
+data UpdateSensitivityInspectionTemplateResponse = UpdateSensitivityInspectionTemplateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSensitivityInspectionTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateSensitivityInspectionTemplateResponse_httpStatus' - The response's http status code.
+newUpdateSensitivityInspectionTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateSensitivityInspectionTemplateResponse
+newUpdateSensitivityInspectionTemplateResponse
+  pHttpStatus_ =
+    UpdateSensitivityInspectionTemplateResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+updateSensitivityInspectionTemplateResponse_httpStatus :: Lens.Lens' UpdateSensitivityInspectionTemplateResponse Prelude.Int
+updateSensitivityInspectionTemplateResponse_httpStatus = Lens.lens (\UpdateSensitivityInspectionTemplateResponse' {httpStatus} -> httpStatus) (\s@UpdateSensitivityInspectionTemplateResponse' {} a -> s {httpStatus = a} :: UpdateSensitivityInspectionTemplateResponse)
+
+instance
+  Prelude.NFData
+    UpdateSensitivityInspectionTemplateResponse
+  where
+  rnf UpdateSensitivityInspectionTemplateResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MacieV2/Waiters.hs b/gen/Amazonka/MacieV2/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MacieV2/Waiters.hs
@@ -0,0 +1,50 @@
+{-# 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.MacieV2.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.MacieV2.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MacieV2.GetSensitiveDataOccurrences
+import Amazonka.MacieV2.Lens
+import Amazonka.MacieV2.Types
+import qualified Amazonka.Prelude as Prelude
+
+-- | Polls 'Amazonka.MacieV2.GetSensitiveDataOccurrences' every 2 seconds until a successful state is reached. An error is returned after 60 failed checks.
+newFindingRevealed :: Core.Wait GetSensitiveDataOccurrences
+newFindingRevealed =
+  Core.Wait
+    { Core.name = "FindingRevealed",
+      Core.attempts = 60,
+      Core.delay = 2,
+      Core.acceptors =
+        [ Core.matchAll
+            "SUCCESS"
+            Core.AcceptSuccess
+            ( getSensitiveDataOccurrencesResponse_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "ERROR"
+            Core.AcceptSuccess
+            ( getSensitiveDataOccurrencesResponse_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
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.MacieV2
+import Test.Amazonka.MacieV2.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "MacieV2"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/MacieV2.hs b/test/Test/Amazonka/Gen/MacieV2.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/MacieV2.hs
@@ -0,0 +1,1618 @@
+{-# 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.MacieV2
+-- Copyright   : (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.MacieV2 where
+
+import Amazonka.MacieV2
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.MacieV2.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"
+--         [ requestAcceptInvitation $
+--             newAcceptInvitation
+--
+--         , requestBatchGetCustomDataIdentifiers $
+--             newBatchGetCustomDataIdentifiers
+--
+--         , requestCreateAllowList $
+--             newCreateAllowList
+--
+--         , requestCreateClassificationJob $
+--             newCreateClassificationJob
+--
+--         , requestCreateCustomDataIdentifier $
+--             newCreateCustomDataIdentifier
+--
+--         , requestCreateFindingsFilter $
+--             newCreateFindingsFilter
+--
+--         , requestCreateInvitations $
+--             newCreateInvitations
+--
+--         , requestCreateMember $
+--             newCreateMember
+--
+--         , requestCreateSampleFindings $
+--             newCreateSampleFindings
+--
+--         , requestDeclineInvitations $
+--             newDeclineInvitations
+--
+--         , requestDeleteAllowList $
+--             newDeleteAllowList
+--
+--         , requestDeleteCustomDataIdentifier $
+--             newDeleteCustomDataIdentifier
+--
+--         , requestDeleteFindingsFilter $
+--             newDeleteFindingsFilter
+--
+--         , requestDeleteInvitations $
+--             newDeleteInvitations
+--
+--         , requestDeleteMember $
+--             newDeleteMember
+--
+--         , requestDescribeBuckets $
+--             newDescribeBuckets
+--
+--         , requestDescribeClassificationJob $
+--             newDescribeClassificationJob
+--
+--         , requestDescribeOrganizationConfiguration $
+--             newDescribeOrganizationConfiguration
+--
+--         , requestDisableMacie $
+--             newDisableMacie
+--
+--         , requestDisableOrganizationAdminAccount $
+--             newDisableOrganizationAdminAccount
+--
+--         , requestDisassociateFromAdministratorAccount $
+--             newDisassociateFromAdministratorAccount
+--
+--         , requestDisassociateFromMasterAccount $
+--             newDisassociateFromMasterAccount
+--
+--         , requestDisassociateMember $
+--             newDisassociateMember
+--
+--         , requestEnableMacie $
+--             newEnableMacie
+--
+--         , requestEnableOrganizationAdminAccount $
+--             newEnableOrganizationAdminAccount
+--
+--         , requestGetAdministratorAccount $
+--             newGetAdministratorAccount
+--
+--         , requestGetAllowList $
+--             newGetAllowList
+--
+--         , requestGetAutomatedDiscoveryConfiguration $
+--             newGetAutomatedDiscoveryConfiguration
+--
+--         , requestGetBucketStatistics $
+--             newGetBucketStatistics
+--
+--         , requestGetClassificationExportConfiguration $
+--             newGetClassificationExportConfiguration
+--
+--         , requestGetClassificationScope $
+--             newGetClassificationScope
+--
+--         , requestGetCustomDataIdentifier $
+--             newGetCustomDataIdentifier
+--
+--         , requestGetFindingStatistics $
+--             newGetFindingStatistics
+--
+--         , requestGetFindings $
+--             newGetFindings
+--
+--         , requestGetFindingsFilter $
+--             newGetFindingsFilter
+--
+--         , requestGetFindingsPublicationConfiguration $
+--             newGetFindingsPublicationConfiguration
+--
+--         , requestGetInvitationsCount $
+--             newGetInvitationsCount
+--
+--         , requestGetMacieSession $
+--             newGetMacieSession
+--
+--         , requestGetMasterAccount $
+--             newGetMasterAccount
+--
+--         , requestGetMember $
+--             newGetMember
+--
+--         , requestGetResourceProfile $
+--             newGetResourceProfile
+--
+--         , requestGetRevealConfiguration $
+--             newGetRevealConfiguration
+--
+--         , requestGetSensitiveDataOccurrences $
+--             newGetSensitiveDataOccurrences
+--
+--         , requestGetSensitiveDataOccurrencesAvailability $
+--             newGetSensitiveDataOccurrencesAvailability
+--
+--         , requestGetSensitivityInspectionTemplate $
+--             newGetSensitivityInspectionTemplate
+--
+--         , requestGetUsageStatistics $
+--             newGetUsageStatistics
+--
+--         , requestGetUsageTotals $
+--             newGetUsageTotals
+--
+--         , requestListAllowLists $
+--             newListAllowLists
+--
+--         , requestListClassificationJobs $
+--             newListClassificationJobs
+--
+--         , requestListClassificationScopes $
+--             newListClassificationScopes
+--
+--         , requestListCustomDataIdentifiers $
+--             newListCustomDataIdentifiers
+--
+--         , requestListFindings $
+--             newListFindings
+--
+--         , requestListFindingsFilters $
+--             newListFindingsFilters
+--
+--         , requestListInvitations $
+--             newListInvitations
+--
+--         , requestListManagedDataIdentifiers $
+--             newListManagedDataIdentifiers
+--
+--         , requestListMembers $
+--             newListMembers
+--
+--         , requestListOrganizationAdminAccounts $
+--             newListOrganizationAdminAccounts
+--
+--         , requestListResourceProfileArtifacts $
+--             newListResourceProfileArtifacts
+--
+--         , requestListResourceProfileDetections $
+--             newListResourceProfileDetections
+--
+--         , requestListSensitivityInspectionTemplates $
+--             newListSensitivityInspectionTemplates
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestPutClassificationExportConfiguration $
+--             newPutClassificationExportConfiguration
+--
+--         , requestPutFindingsPublicationConfiguration $
+--             newPutFindingsPublicationConfiguration
+--
+--         , requestSearchResources $
+--             newSearchResources
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestTestCustomDataIdentifier $
+--             newTestCustomDataIdentifier
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateAllowList $
+--             newUpdateAllowList
+--
+--         , requestUpdateAutomatedDiscoveryConfiguration $
+--             newUpdateAutomatedDiscoveryConfiguration
+--
+--         , requestUpdateClassificationJob $
+--             newUpdateClassificationJob
+--
+--         , requestUpdateClassificationScope $
+--             newUpdateClassificationScope
+--
+--         , requestUpdateFindingsFilter $
+--             newUpdateFindingsFilter
+--
+--         , requestUpdateMacieSession $
+--             newUpdateMacieSession
+--
+--         , requestUpdateMemberSession $
+--             newUpdateMemberSession
+--
+--         , requestUpdateOrganizationConfiguration $
+--             newUpdateOrganizationConfiguration
+--
+--         , requestUpdateResourceProfile $
+--             newUpdateResourceProfile
+--
+--         , requestUpdateResourceProfileDetections $
+--             newUpdateResourceProfileDetections
+--
+--         , requestUpdateRevealConfiguration $
+--             newUpdateRevealConfiguration
+--
+--         , requestUpdateSensitivityInspectionTemplate $
+--             newUpdateSensitivityInspectionTemplate
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAcceptInvitation $
+--             newAcceptInvitationResponse
+--
+--         , responseBatchGetCustomDataIdentifiers $
+--             newBatchGetCustomDataIdentifiersResponse
+--
+--         , responseCreateAllowList $
+--             newCreateAllowListResponse
+--
+--         , responseCreateClassificationJob $
+--             newCreateClassificationJobResponse
+--
+--         , responseCreateCustomDataIdentifier $
+--             newCreateCustomDataIdentifierResponse
+--
+--         , responseCreateFindingsFilter $
+--             newCreateFindingsFilterResponse
+--
+--         , responseCreateInvitations $
+--             newCreateInvitationsResponse
+--
+--         , responseCreateMember $
+--             newCreateMemberResponse
+--
+--         , responseCreateSampleFindings $
+--             newCreateSampleFindingsResponse
+--
+--         , responseDeclineInvitations $
+--             newDeclineInvitationsResponse
+--
+--         , responseDeleteAllowList $
+--             newDeleteAllowListResponse
+--
+--         , responseDeleteCustomDataIdentifier $
+--             newDeleteCustomDataIdentifierResponse
+--
+--         , responseDeleteFindingsFilter $
+--             newDeleteFindingsFilterResponse
+--
+--         , responseDeleteInvitations $
+--             newDeleteInvitationsResponse
+--
+--         , responseDeleteMember $
+--             newDeleteMemberResponse
+--
+--         , responseDescribeBuckets $
+--             newDescribeBucketsResponse
+--
+--         , responseDescribeClassificationJob $
+--             newDescribeClassificationJobResponse
+--
+--         , responseDescribeOrganizationConfiguration $
+--             newDescribeOrganizationConfigurationResponse
+--
+--         , responseDisableMacie $
+--             newDisableMacieResponse
+--
+--         , responseDisableOrganizationAdminAccount $
+--             newDisableOrganizationAdminAccountResponse
+--
+--         , responseDisassociateFromAdministratorAccount $
+--             newDisassociateFromAdministratorAccountResponse
+--
+--         , responseDisassociateFromMasterAccount $
+--             newDisassociateFromMasterAccountResponse
+--
+--         , responseDisassociateMember $
+--             newDisassociateMemberResponse
+--
+--         , responseEnableMacie $
+--             newEnableMacieResponse
+--
+--         , responseEnableOrganizationAdminAccount $
+--             newEnableOrganizationAdminAccountResponse
+--
+--         , responseGetAdministratorAccount $
+--             newGetAdministratorAccountResponse
+--
+--         , responseGetAllowList $
+--             newGetAllowListResponse
+--
+--         , responseGetAutomatedDiscoveryConfiguration $
+--             newGetAutomatedDiscoveryConfigurationResponse
+--
+--         , responseGetBucketStatistics $
+--             newGetBucketStatisticsResponse
+--
+--         , responseGetClassificationExportConfiguration $
+--             newGetClassificationExportConfigurationResponse
+--
+--         , responseGetClassificationScope $
+--             newGetClassificationScopeResponse
+--
+--         , responseGetCustomDataIdentifier $
+--             newGetCustomDataIdentifierResponse
+--
+--         , responseGetFindingStatistics $
+--             newGetFindingStatisticsResponse
+--
+--         , responseGetFindings $
+--             newGetFindingsResponse
+--
+--         , responseGetFindingsFilter $
+--             newGetFindingsFilterResponse
+--
+--         , responseGetFindingsPublicationConfiguration $
+--             newGetFindingsPublicationConfigurationResponse
+--
+--         , responseGetInvitationsCount $
+--             newGetInvitationsCountResponse
+--
+--         , responseGetMacieSession $
+--             newGetMacieSessionResponse
+--
+--         , responseGetMasterAccount $
+--             newGetMasterAccountResponse
+--
+--         , responseGetMember $
+--             newGetMemberResponse
+--
+--         , responseGetResourceProfile $
+--             newGetResourceProfileResponse
+--
+--         , responseGetRevealConfiguration $
+--             newGetRevealConfigurationResponse
+--
+--         , responseGetSensitiveDataOccurrences $
+--             newGetSensitiveDataOccurrencesResponse
+--
+--         , responseGetSensitiveDataOccurrencesAvailability $
+--             newGetSensitiveDataOccurrencesAvailabilityResponse
+--
+--         , responseGetSensitivityInspectionTemplate $
+--             newGetSensitivityInspectionTemplateResponse
+--
+--         , responseGetUsageStatistics $
+--             newGetUsageStatisticsResponse
+--
+--         , responseGetUsageTotals $
+--             newGetUsageTotalsResponse
+--
+--         , responseListAllowLists $
+--             newListAllowListsResponse
+--
+--         , responseListClassificationJobs $
+--             newListClassificationJobsResponse
+--
+--         , responseListClassificationScopes $
+--             newListClassificationScopesResponse
+--
+--         , responseListCustomDataIdentifiers $
+--             newListCustomDataIdentifiersResponse
+--
+--         , responseListFindings $
+--             newListFindingsResponse
+--
+--         , responseListFindingsFilters $
+--             newListFindingsFiltersResponse
+--
+--         , responseListInvitations $
+--             newListInvitationsResponse
+--
+--         , responseListManagedDataIdentifiers $
+--             newListManagedDataIdentifiersResponse
+--
+--         , responseListMembers $
+--             newListMembersResponse
+--
+--         , responseListOrganizationAdminAccounts $
+--             newListOrganizationAdminAccountsResponse
+--
+--         , responseListResourceProfileArtifacts $
+--             newListResourceProfileArtifactsResponse
+--
+--         , responseListResourceProfileDetections $
+--             newListResourceProfileDetectionsResponse
+--
+--         , responseListSensitivityInspectionTemplates $
+--             newListSensitivityInspectionTemplatesResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responsePutClassificationExportConfiguration $
+--             newPutClassificationExportConfigurationResponse
+--
+--         , responsePutFindingsPublicationConfiguration $
+--             newPutFindingsPublicationConfigurationResponse
+--
+--         , responseSearchResources $
+--             newSearchResourcesResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseTestCustomDataIdentifier $
+--             newTestCustomDataIdentifierResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateAllowList $
+--             newUpdateAllowListResponse
+--
+--         , responseUpdateAutomatedDiscoveryConfiguration $
+--             newUpdateAutomatedDiscoveryConfigurationResponse
+--
+--         , responseUpdateClassificationJob $
+--             newUpdateClassificationJobResponse
+--
+--         , responseUpdateClassificationScope $
+--             newUpdateClassificationScopeResponse
+--
+--         , responseUpdateFindingsFilter $
+--             newUpdateFindingsFilterResponse
+--
+--         , responseUpdateMacieSession $
+--             newUpdateMacieSessionResponse
+--
+--         , responseUpdateMemberSession $
+--             newUpdateMemberSessionResponse
+--
+--         , responseUpdateOrganizationConfiguration $
+--             newUpdateOrganizationConfigurationResponse
+--
+--         , responseUpdateResourceProfile $
+--             newUpdateResourceProfileResponse
+--
+--         , responseUpdateResourceProfileDetections $
+--             newUpdateResourceProfileDetectionsResponse
+--
+--         , responseUpdateRevealConfiguration $
+--             newUpdateRevealConfigurationResponse
+--
+--         , responseUpdateSensitivityInspectionTemplate $
+--             newUpdateSensitivityInspectionTemplateResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAcceptInvitation :: AcceptInvitation -> TestTree
+requestAcceptInvitation =
+  req
+    "AcceptInvitation"
+    "fixture/AcceptInvitation.yaml"
+
+requestBatchGetCustomDataIdentifiers :: BatchGetCustomDataIdentifiers -> TestTree
+requestBatchGetCustomDataIdentifiers =
+  req
+    "BatchGetCustomDataIdentifiers"
+    "fixture/BatchGetCustomDataIdentifiers.yaml"
+
+requestCreateAllowList :: CreateAllowList -> TestTree
+requestCreateAllowList =
+  req
+    "CreateAllowList"
+    "fixture/CreateAllowList.yaml"
+
+requestCreateClassificationJob :: CreateClassificationJob -> TestTree
+requestCreateClassificationJob =
+  req
+    "CreateClassificationJob"
+    "fixture/CreateClassificationJob.yaml"
+
+requestCreateCustomDataIdentifier :: CreateCustomDataIdentifier -> TestTree
+requestCreateCustomDataIdentifier =
+  req
+    "CreateCustomDataIdentifier"
+    "fixture/CreateCustomDataIdentifier.yaml"
+
+requestCreateFindingsFilter :: CreateFindingsFilter -> TestTree
+requestCreateFindingsFilter =
+  req
+    "CreateFindingsFilter"
+    "fixture/CreateFindingsFilter.yaml"
+
+requestCreateInvitations :: CreateInvitations -> TestTree
+requestCreateInvitations =
+  req
+    "CreateInvitations"
+    "fixture/CreateInvitations.yaml"
+
+requestCreateMember :: CreateMember -> TestTree
+requestCreateMember =
+  req
+    "CreateMember"
+    "fixture/CreateMember.yaml"
+
+requestCreateSampleFindings :: CreateSampleFindings -> TestTree
+requestCreateSampleFindings =
+  req
+    "CreateSampleFindings"
+    "fixture/CreateSampleFindings.yaml"
+
+requestDeclineInvitations :: DeclineInvitations -> TestTree
+requestDeclineInvitations =
+  req
+    "DeclineInvitations"
+    "fixture/DeclineInvitations.yaml"
+
+requestDeleteAllowList :: DeleteAllowList -> TestTree
+requestDeleteAllowList =
+  req
+    "DeleteAllowList"
+    "fixture/DeleteAllowList.yaml"
+
+requestDeleteCustomDataIdentifier :: DeleteCustomDataIdentifier -> TestTree
+requestDeleteCustomDataIdentifier =
+  req
+    "DeleteCustomDataIdentifier"
+    "fixture/DeleteCustomDataIdentifier.yaml"
+
+requestDeleteFindingsFilter :: DeleteFindingsFilter -> TestTree
+requestDeleteFindingsFilter =
+  req
+    "DeleteFindingsFilter"
+    "fixture/DeleteFindingsFilter.yaml"
+
+requestDeleteInvitations :: DeleteInvitations -> TestTree
+requestDeleteInvitations =
+  req
+    "DeleteInvitations"
+    "fixture/DeleteInvitations.yaml"
+
+requestDeleteMember :: DeleteMember -> TestTree
+requestDeleteMember =
+  req
+    "DeleteMember"
+    "fixture/DeleteMember.yaml"
+
+requestDescribeBuckets :: DescribeBuckets -> TestTree
+requestDescribeBuckets =
+  req
+    "DescribeBuckets"
+    "fixture/DescribeBuckets.yaml"
+
+requestDescribeClassificationJob :: DescribeClassificationJob -> TestTree
+requestDescribeClassificationJob =
+  req
+    "DescribeClassificationJob"
+    "fixture/DescribeClassificationJob.yaml"
+
+requestDescribeOrganizationConfiguration :: DescribeOrganizationConfiguration -> TestTree
+requestDescribeOrganizationConfiguration =
+  req
+    "DescribeOrganizationConfiguration"
+    "fixture/DescribeOrganizationConfiguration.yaml"
+
+requestDisableMacie :: DisableMacie -> TestTree
+requestDisableMacie =
+  req
+    "DisableMacie"
+    "fixture/DisableMacie.yaml"
+
+requestDisableOrganizationAdminAccount :: DisableOrganizationAdminAccount -> TestTree
+requestDisableOrganizationAdminAccount =
+  req
+    "DisableOrganizationAdminAccount"
+    "fixture/DisableOrganizationAdminAccount.yaml"
+
+requestDisassociateFromAdministratorAccount :: DisassociateFromAdministratorAccount -> TestTree
+requestDisassociateFromAdministratorAccount =
+  req
+    "DisassociateFromAdministratorAccount"
+    "fixture/DisassociateFromAdministratorAccount.yaml"
+
+requestDisassociateFromMasterAccount :: DisassociateFromMasterAccount -> TestTree
+requestDisassociateFromMasterAccount =
+  req
+    "DisassociateFromMasterAccount"
+    "fixture/DisassociateFromMasterAccount.yaml"
+
+requestDisassociateMember :: DisassociateMember -> TestTree
+requestDisassociateMember =
+  req
+    "DisassociateMember"
+    "fixture/DisassociateMember.yaml"
+
+requestEnableMacie :: EnableMacie -> TestTree
+requestEnableMacie =
+  req
+    "EnableMacie"
+    "fixture/EnableMacie.yaml"
+
+requestEnableOrganizationAdminAccount :: EnableOrganizationAdminAccount -> TestTree
+requestEnableOrganizationAdminAccount =
+  req
+    "EnableOrganizationAdminAccount"
+    "fixture/EnableOrganizationAdminAccount.yaml"
+
+requestGetAdministratorAccount :: GetAdministratorAccount -> TestTree
+requestGetAdministratorAccount =
+  req
+    "GetAdministratorAccount"
+    "fixture/GetAdministratorAccount.yaml"
+
+requestGetAllowList :: GetAllowList -> TestTree
+requestGetAllowList =
+  req
+    "GetAllowList"
+    "fixture/GetAllowList.yaml"
+
+requestGetAutomatedDiscoveryConfiguration :: GetAutomatedDiscoveryConfiguration -> TestTree
+requestGetAutomatedDiscoveryConfiguration =
+  req
+    "GetAutomatedDiscoveryConfiguration"
+    "fixture/GetAutomatedDiscoveryConfiguration.yaml"
+
+requestGetBucketStatistics :: GetBucketStatistics -> TestTree
+requestGetBucketStatistics =
+  req
+    "GetBucketStatistics"
+    "fixture/GetBucketStatistics.yaml"
+
+requestGetClassificationExportConfiguration :: GetClassificationExportConfiguration -> TestTree
+requestGetClassificationExportConfiguration =
+  req
+    "GetClassificationExportConfiguration"
+    "fixture/GetClassificationExportConfiguration.yaml"
+
+requestGetClassificationScope :: GetClassificationScope -> TestTree
+requestGetClassificationScope =
+  req
+    "GetClassificationScope"
+    "fixture/GetClassificationScope.yaml"
+
+requestGetCustomDataIdentifier :: GetCustomDataIdentifier -> TestTree
+requestGetCustomDataIdentifier =
+  req
+    "GetCustomDataIdentifier"
+    "fixture/GetCustomDataIdentifier.yaml"
+
+requestGetFindingStatistics :: GetFindingStatistics -> TestTree
+requestGetFindingStatistics =
+  req
+    "GetFindingStatistics"
+    "fixture/GetFindingStatistics.yaml"
+
+requestGetFindings :: GetFindings -> TestTree
+requestGetFindings =
+  req
+    "GetFindings"
+    "fixture/GetFindings.yaml"
+
+requestGetFindingsFilter :: GetFindingsFilter -> TestTree
+requestGetFindingsFilter =
+  req
+    "GetFindingsFilter"
+    "fixture/GetFindingsFilter.yaml"
+
+requestGetFindingsPublicationConfiguration :: GetFindingsPublicationConfiguration -> TestTree
+requestGetFindingsPublicationConfiguration =
+  req
+    "GetFindingsPublicationConfiguration"
+    "fixture/GetFindingsPublicationConfiguration.yaml"
+
+requestGetInvitationsCount :: GetInvitationsCount -> TestTree
+requestGetInvitationsCount =
+  req
+    "GetInvitationsCount"
+    "fixture/GetInvitationsCount.yaml"
+
+requestGetMacieSession :: GetMacieSession -> TestTree
+requestGetMacieSession =
+  req
+    "GetMacieSession"
+    "fixture/GetMacieSession.yaml"
+
+requestGetMasterAccount :: GetMasterAccount -> TestTree
+requestGetMasterAccount =
+  req
+    "GetMasterAccount"
+    "fixture/GetMasterAccount.yaml"
+
+requestGetMember :: GetMember -> TestTree
+requestGetMember =
+  req
+    "GetMember"
+    "fixture/GetMember.yaml"
+
+requestGetResourceProfile :: GetResourceProfile -> TestTree
+requestGetResourceProfile =
+  req
+    "GetResourceProfile"
+    "fixture/GetResourceProfile.yaml"
+
+requestGetRevealConfiguration :: GetRevealConfiguration -> TestTree
+requestGetRevealConfiguration =
+  req
+    "GetRevealConfiguration"
+    "fixture/GetRevealConfiguration.yaml"
+
+requestGetSensitiveDataOccurrences :: GetSensitiveDataOccurrences -> TestTree
+requestGetSensitiveDataOccurrences =
+  req
+    "GetSensitiveDataOccurrences"
+    "fixture/GetSensitiveDataOccurrences.yaml"
+
+requestGetSensitiveDataOccurrencesAvailability :: GetSensitiveDataOccurrencesAvailability -> TestTree
+requestGetSensitiveDataOccurrencesAvailability =
+  req
+    "GetSensitiveDataOccurrencesAvailability"
+    "fixture/GetSensitiveDataOccurrencesAvailability.yaml"
+
+requestGetSensitivityInspectionTemplate :: GetSensitivityInspectionTemplate -> TestTree
+requestGetSensitivityInspectionTemplate =
+  req
+    "GetSensitivityInspectionTemplate"
+    "fixture/GetSensitivityInspectionTemplate.yaml"
+
+requestGetUsageStatistics :: GetUsageStatistics -> TestTree
+requestGetUsageStatistics =
+  req
+    "GetUsageStatistics"
+    "fixture/GetUsageStatistics.yaml"
+
+requestGetUsageTotals :: GetUsageTotals -> TestTree
+requestGetUsageTotals =
+  req
+    "GetUsageTotals"
+    "fixture/GetUsageTotals.yaml"
+
+requestListAllowLists :: ListAllowLists -> TestTree
+requestListAllowLists =
+  req
+    "ListAllowLists"
+    "fixture/ListAllowLists.yaml"
+
+requestListClassificationJobs :: ListClassificationJobs -> TestTree
+requestListClassificationJobs =
+  req
+    "ListClassificationJobs"
+    "fixture/ListClassificationJobs.yaml"
+
+requestListClassificationScopes :: ListClassificationScopes -> TestTree
+requestListClassificationScopes =
+  req
+    "ListClassificationScopes"
+    "fixture/ListClassificationScopes.yaml"
+
+requestListCustomDataIdentifiers :: ListCustomDataIdentifiers -> TestTree
+requestListCustomDataIdentifiers =
+  req
+    "ListCustomDataIdentifiers"
+    "fixture/ListCustomDataIdentifiers.yaml"
+
+requestListFindings :: ListFindings -> TestTree
+requestListFindings =
+  req
+    "ListFindings"
+    "fixture/ListFindings.yaml"
+
+requestListFindingsFilters :: ListFindingsFilters -> TestTree
+requestListFindingsFilters =
+  req
+    "ListFindingsFilters"
+    "fixture/ListFindingsFilters.yaml"
+
+requestListInvitations :: ListInvitations -> TestTree
+requestListInvitations =
+  req
+    "ListInvitations"
+    "fixture/ListInvitations.yaml"
+
+requestListManagedDataIdentifiers :: ListManagedDataIdentifiers -> TestTree
+requestListManagedDataIdentifiers =
+  req
+    "ListManagedDataIdentifiers"
+    "fixture/ListManagedDataIdentifiers.yaml"
+
+requestListMembers :: ListMembers -> TestTree
+requestListMembers =
+  req
+    "ListMembers"
+    "fixture/ListMembers.yaml"
+
+requestListOrganizationAdminAccounts :: ListOrganizationAdminAccounts -> TestTree
+requestListOrganizationAdminAccounts =
+  req
+    "ListOrganizationAdminAccounts"
+    "fixture/ListOrganizationAdminAccounts.yaml"
+
+requestListResourceProfileArtifacts :: ListResourceProfileArtifacts -> TestTree
+requestListResourceProfileArtifacts =
+  req
+    "ListResourceProfileArtifacts"
+    "fixture/ListResourceProfileArtifacts.yaml"
+
+requestListResourceProfileDetections :: ListResourceProfileDetections -> TestTree
+requestListResourceProfileDetections =
+  req
+    "ListResourceProfileDetections"
+    "fixture/ListResourceProfileDetections.yaml"
+
+requestListSensitivityInspectionTemplates :: ListSensitivityInspectionTemplates -> TestTree
+requestListSensitivityInspectionTemplates =
+  req
+    "ListSensitivityInspectionTemplates"
+    "fixture/ListSensitivityInspectionTemplates.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestPutClassificationExportConfiguration :: PutClassificationExportConfiguration -> TestTree
+requestPutClassificationExportConfiguration =
+  req
+    "PutClassificationExportConfiguration"
+    "fixture/PutClassificationExportConfiguration.yaml"
+
+requestPutFindingsPublicationConfiguration :: PutFindingsPublicationConfiguration -> TestTree
+requestPutFindingsPublicationConfiguration =
+  req
+    "PutFindingsPublicationConfiguration"
+    "fixture/PutFindingsPublicationConfiguration.yaml"
+
+requestSearchResources :: SearchResources -> TestTree
+requestSearchResources =
+  req
+    "SearchResources"
+    "fixture/SearchResources.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestTestCustomDataIdentifier :: TestCustomDataIdentifier -> TestTree
+requestTestCustomDataIdentifier =
+  req
+    "TestCustomDataIdentifier"
+    "fixture/TestCustomDataIdentifier.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateAllowList :: UpdateAllowList -> TestTree
+requestUpdateAllowList =
+  req
+    "UpdateAllowList"
+    "fixture/UpdateAllowList.yaml"
+
+requestUpdateAutomatedDiscoveryConfiguration :: UpdateAutomatedDiscoveryConfiguration -> TestTree
+requestUpdateAutomatedDiscoveryConfiguration =
+  req
+    "UpdateAutomatedDiscoveryConfiguration"
+    "fixture/UpdateAutomatedDiscoveryConfiguration.yaml"
+
+requestUpdateClassificationJob :: UpdateClassificationJob -> TestTree
+requestUpdateClassificationJob =
+  req
+    "UpdateClassificationJob"
+    "fixture/UpdateClassificationJob.yaml"
+
+requestUpdateClassificationScope :: UpdateClassificationScope -> TestTree
+requestUpdateClassificationScope =
+  req
+    "UpdateClassificationScope"
+    "fixture/UpdateClassificationScope.yaml"
+
+requestUpdateFindingsFilter :: UpdateFindingsFilter -> TestTree
+requestUpdateFindingsFilter =
+  req
+    "UpdateFindingsFilter"
+    "fixture/UpdateFindingsFilter.yaml"
+
+requestUpdateMacieSession :: UpdateMacieSession -> TestTree
+requestUpdateMacieSession =
+  req
+    "UpdateMacieSession"
+    "fixture/UpdateMacieSession.yaml"
+
+requestUpdateMemberSession :: UpdateMemberSession -> TestTree
+requestUpdateMemberSession =
+  req
+    "UpdateMemberSession"
+    "fixture/UpdateMemberSession.yaml"
+
+requestUpdateOrganizationConfiguration :: UpdateOrganizationConfiguration -> TestTree
+requestUpdateOrganizationConfiguration =
+  req
+    "UpdateOrganizationConfiguration"
+    "fixture/UpdateOrganizationConfiguration.yaml"
+
+requestUpdateResourceProfile :: UpdateResourceProfile -> TestTree
+requestUpdateResourceProfile =
+  req
+    "UpdateResourceProfile"
+    "fixture/UpdateResourceProfile.yaml"
+
+requestUpdateResourceProfileDetections :: UpdateResourceProfileDetections -> TestTree
+requestUpdateResourceProfileDetections =
+  req
+    "UpdateResourceProfileDetections"
+    "fixture/UpdateResourceProfileDetections.yaml"
+
+requestUpdateRevealConfiguration :: UpdateRevealConfiguration -> TestTree
+requestUpdateRevealConfiguration =
+  req
+    "UpdateRevealConfiguration"
+    "fixture/UpdateRevealConfiguration.yaml"
+
+requestUpdateSensitivityInspectionTemplate :: UpdateSensitivityInspectionTemplate -> TestTree
+requestUpdateSensitivityInspectionTemplate =
+  req
+    "UpdateSensitivityInspectionTemplate"
+    "fixture/UpdateSensitivityInspectionTemplate.yaml"
+
+-- Responses
+
+responseAcceptInvitation :: AcceptInvitationResponse -> TestTree
+responseAcceptInvitation =
+  res
+    "AcceptInvitationResponse"
+    "fixture/AcceptInvitationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AcceptInvitation)
+
+responseBatchGetCustomDataIdentifiers :: BatchGetCustomDataIdentifiersResponse -> TestTree
+responseBatchGetCustomDataIdentifiers =
+  res
+    "BatchGetCustomDataIdentifiersResponse"
+    "fixture/BatchGetCustomDataIdentifiersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchGetCustomDataIdentifiers)
+
+responseCreateAllowList :: CreateAllowListResponse -> TestTree
+responseCreateAllowList =
+  res
+    "CreateAllowListResponse"
+    "fixture/CreateAllowListResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAllowList)
+
+responseCreateClassificationJob :: CreateClassificationJobResponse -> TestTree
+responseCreateClassificationJob =
+  res
+    "CreateClassificationJobResponse"
+    "fixture/CreateClassificationJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateClassificationJob)
+
+responseCreateCustomDataIdentifier :: CreateCustomDataIdentifierResponse -> TestTree
+responseCreateCustomDataIdentifier =
+  res
+    "CreateCustomDataIdentifierResponse"
+    "fixture/CreateCustomDataIdentifierResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCustomDataIdentifier)
+
+responseCreateFindingsFilter :: CreateFindingsFilterResponse -> TestTree
+responseCreateFindingsFilter =
+  res
+    "CreateFindingsFilterResponse"
+    "fixture/CreateFindingsFilterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateFindingsFilter)
+
+responseCreateInvitations :: CreateInvitationsResponse -> TestTree
+responseCreateInvitations =
+  res
+    "CreateInvitationsResponse"
+    "fixture/CreateInvitationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateInvitations)
+
+responseCreateMember :: CreateMemberResponse -> TestTree
+responseCreateMember =
+  res
+    "CreateMemberResponse"
+    "fixture/CreateMemberResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateMember)
+
+responseCreateSampleFindings :: CreateSampleFindingsResponse -> TestTree
+responseCreateSampleFindings =
+  res
+    "CreateSampleFindingsResponse"
+    "fixture/CreateSampleFindingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSampleFindings)
+
+responseDeclineInvitations :: DeclineInvitationsResponse -> TestTree
+responseDeclineInvitations =
+  res
+    "DeclineInvitationsResponse"
+    "fixture/DeclineInvitationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeclineInvitations)
+
+responseDeleteAllowList :: DeleteAllowListResponse -> TestTree
+responseDeleteAllowList =
+  res
+    "DeleteAllowListResponse"
+    "fixture/DeleteAllowListResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAllowList)
+
+responseDeleteCustomDataIdentifier :: DeleteCustomDataIdentifierResponse -> TestTree
+responseDeleteCustomDataIdentifier =
+  res
+    "DeleteCustomDataIdentifierResponse"
+    "fixture/DeleteCustomDataIdentifierResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCustomDataIdentifier)
+
+responseDeleteFindingsFilter :: DeleteFindingsFilterResponse -> TestTree
+responseDeleteFindingsFilter =
+  res
+    "DeleteFindingsFilterResponse"
+    "fixture/DeleteFindingsFilterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteFindingsFilter)
+
+responseDeleteInvitations :: DeleteInvitationsResponse -> TestTree
+responseDeleteInvitations =
+  res
+    "DeleteInvitationsResponse"
+    "fixture/DeleteInvitationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteInvitations)
+
+responseDeleteMember :: DeleteMemberResponse -> TestTree
+responseDeleteMember =
+  res
+    "DeleteMemberResponse"
+    "fixture/DeleteMemberResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteMember)
+
+responseDescribeBuckets :: DescribeBucketsResponse -> TestTree
+responseDescribeBuckets =
+  res
+    "DescribeBucketsResponse"
+    "fixture/DescribeBucketsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeBuckets)
+
+responseDescribeClassificationJob :: DescribeClassificationJobResponse -> TestTree
+responseDescribeClassificationJob =
+  res
+    "DescribeClassificationJobResponse"
+    "fixture/DescribeClassificationJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeClassificationJob)
+
+responseDescribeOrganizationConfiguration :: DescribeOrganizationConfigurationResponse -> TestTree
+responseDescribeOrganizationConfiguration =
+  res
+    "DescribeOrganizationConfigurationResponse"
+    "fixture/DescribeOrganizationConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeOrganizationConfiguration)
+
+responseDisableMacie :: DisableMacieResponse -> TestTree
+responseDisableMacie =
+  res
+    "DisableMacieResponse"
+    "fixture/DisableMacieResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisableMacie)
+
+responseDisableOrganizationAdminAccount :: DisableOrganizationAdminAccountResponse -> TestTree
+responseDisableOrganizationAdminAccount =
+  res
+    "DisableOrganizationAdminAccountResponse"
+    "fixture/DisableOrganizationAdminAccountResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisableOrganizationAdminAccount)
+
+responseDisassociateFromAdministratorAccount :: DisassociateFromAdministratorAccountResponse -> TestTree
+responseDisassociateFromAdministratorAccount =
+  res
+    "DisassociateFromAdministratorAccountResponse"
+    "fixture/DisassociateFromAdministratorAccountResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateFromAdministratorAccount)
+
+responseDisassociateFromMasterAccount :: DisassociateFromMasterAccountResponse -> TestTree
+responseDisassociateFromMasterAccount =
+  res
+    "DisassociateFromMasterAccountResponse"
+    "fixture/DisassociateFromMasterAccountResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateFromMasterAccount)
+
+responseDisassociateMember :: DisassociateMemberResponse -> TestTree
+responseDisassociateMember =
+  res
+    "DisassociateMemberResponse"
+    "fixture/DisassociateMemberResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateMember)
+
+responseEnableMacie :: EnableMacieResponse -> TestTree
+responseEnableMacie =
+  res
+    "EnableMacieResponse"
+    "fixture/EnableMacieResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy EnableMacie)
+
+responseEnableOrganizationAdminAccount :: EnableOrganizationAdminAccountResponse -> TestTree
+responseEnableOrganizationAdminAccount =
+  res
+    "EnableOrganizationAdminAccountResponse"
+    "fixture/EnableOrganizationAdminAccountResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy EnableOrganizationAdminAccount)
+
+responseGetAdministratorAccount :: GetAdministratorAccountResponse -> TestTree
+responseGetAdministratorAccount =
+  res
+    "GetAdministratorAccountResponse"
+    "fixture/GetAdministratorAccountResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAdministratorAccount)
+
+responseGetAllowList :: GetAllowListResponse -> TestTree
+responseGetAllowList =
+  res
+    "GetAllowListResponse"
+    "fixture/GetAllowListResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAllowList)
+
+responseGetAutomatedDiscoveryConfiguration :: GetAutomatedDiscoveryConfigurationResponse -> TestTree
+responseGetAutomatedDiscoveryConfiguration =
+  res
+    "GetAutomatedDiscoveryConfigurationResponse"
+    "fixture/GetAutomatedDiscoveryConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAutomatedDiscoveryConfiguration)
+
+responseGetBucketStatistics :: GetBucketStatisticsResponse -> TestTree
+responseGetBucketStatistics =
+  res
+    "GetBucketStatisticsResponse"
+    "fixture/GetBucketStatisticsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetBucketStatistics)
+
+responseGetClassificationExportConfiguration :: GetClassificationExportConfigurationResponse -> TestTree
+responseGetClassificationExportConfiguration =
+  res
+    "GetClassificationExportConfigurationResponse"
+    "fixture/GetClassificationExportConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetClassificationExportConfiguration)
+
+responseGetClassificationScope :: GetClassificationScopeResponse -> TestTree
+responseGetClassificationScope =
+  res
+    "GetClassificationScopeResponse"
+    "fixture/GetClassificationScopeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetClassificationScope)
+
+responseGetCustomDataIdentifier :: GetCustomDataIdentifierResponse -> TestTree
+responseGetCustomDataIdentifier =
+  res
+    "GetCustomDataIdentifierResponse"
+    "fixture/GetCustomDataIdentifierResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetCustomDataIdentifier)
+
+responseGetFindingStatistics :: GetFindingStatisticsResponse -> TestTree
+responseGetFindingStatistics =
+  res
+    "GetFindingStatisticsResponse"
+    "fixture/GetFindingStatisticsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetFindingStatistics)
+
+responseGetFindings :: GetFindingsResponse -> TestTree
+responseGetFindings =
+  res
+    "GetFindingsResponse"
+    "fixture/GetFindingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetFindings)
+
+responseGetFindingsFilter :: GetFindingsFilterResponse -> TestTree
+responseGetFindingsFilter =
+  res
+    "GetFindingsFilterResponse"
+    "fixture/GetFindingsFilterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetFindingsFilter)
+
+responseGetFindingsPublicationConfiguration :: GetFindingsPublicationConfigurationResponse -> TestTree
+responseGetFindingsPublicationConfiguration =
+  res
+    "GetFindingsPublicationConfigurationResponse"
+    "fixture/GetFindingsPublicationConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetFindingsPublicationConfiguration)
+
+responseGetInvitationsCount :: GetInvitationsCountResponse -> TestTree
+responseGetInvitationsCount =
+  res
+    "GetInvitationsCountResponse"
+    "fixture/GetInvitationsCountResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetInvitationsCount)
+
+responseGetMacieSession :: GetMacieSessionResponse -> TestTree
+responseGetMacieSession =
+  res
+    "GetMacieSessionResponse"
+    "fixture/GetMacieSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetMacieSession)
+
+responseGetMasterAccount :: GetMasterAccountResponse -> TestTree
+responseGetMasterAccount =
+  res
+    "GetMasterAccountResponse"
+    "fixture/GetMasterAccountResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetMasterAccount)
+
+responseGetMember :: GetMemberResponse -> TestTree
+responseGetMember =
+  res
+    "GetMemberResponse"
+    "fixture/GetMemberResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetMember)
+
+responseGetResourceProfile :: GetResourceProfileResponse -> TestTree
+responseGetResourceProfile =
+  res
+    "GetResourceProfileResponse"
+    "fixture/GetResourceProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetResourceProfile)
+
+responseGetRevealConfiguration :: GetRevealConfigurationResponse -> TestTree
+responseGetRevealConfiguration =
+  res
+    "GetRevealConfigurationResponse"
+    "fixture/GetRevealConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetRevealConfiguration)
+
+responseGetSensitiveDataOccurrences :: GetSensitiveDataOccurrencesResponse -> TestTree
+responseGetSensitiveDataOccurrences =
+  res
+    "GetSensitiveDataOccurrencesResponse"
+    "fixture/GetSensitiveDataOccurrencesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSensitiveDataOccurrences)
+
+responseGetSensitiveDataOccurrencesAvailability :: GetSensitiveDataOccurrencesAvailabilityResponse -> TestTree
+responseGetSensitiveDataOccurrencesAvailability =
+  res
+    "GetSensitiveDataOccurrencesAvailabilityResponse"
+    "fixture/GetSensitiveDataOccurrencesAvailabilityResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSensitiveDataOccurrencesAvailability)
+
+responseGetSensitivityInspectionTemplate :: GetSensitivityInspectionTemplateResponse -> TestTree
+responseGetSensitivityInspectionTemplate =
+  res
+    "GetSensitivityInspectionTemplateResponse"
+    "fixture/GetSensitivityInspectionTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSensitivityInspectionTemplate)
+
+responseGetUsageStatistics :: GetUsageStatisticsResponse -> TestTree
+responseGetUsageStatistics =
+  res
+    "GetUsageStatisticsResponse"
+    "fixture/GetUsageStatisticsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetUsageStatistics)
+
+responseGetUsageTotals :: GetUsageTotalsResponse -> TestTree
+responseGetUsageTotals =
+  res
+    "GetUsageTotalsResponse"
+    "fixture/GetUsageTotalsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetUsageTotals)
+
+responseListAllowLists :: ListAllowListsResponse -> TestTree
+responseListAllowLists =
+  res
+    "ListAllowListsResponse"
+    "fixture/ListAllowListsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAllowLists)
+
+responseListClassificationJobs :: ListClassificationJobsResponse -> TestTree
+responseListClassificationJobs =
+  res
+    "ListClassificationJobsResponse"
+    "fixture/ListClassificationJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListClassificationJobs)
+
+responseListClassificationScopes :: ListClassificationScopesResponse -> TestTree
+responseListClassificationScopes =
+  res
+    "ListClassificationScopesResponse"
+    "fixture/ListClassificationScopesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListClassificationScopes)
+
+responseListCustomDataIdentifiers :: ListCustomDataIdentifiersResponse -> TestTree
+responseListCustomDataIdentifiers =
+  res
+    "ListCustomDataIdentifiersResponse"
+    "fixture/ListCustomDataIdentifiersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListCustomDataIdentifiers)
+
+responseListFindings :: ListFindingsResponse -> TestTree
+responseListFindings =
+  res
+    "ListFindingsResponse"
+    "fixture/ListFindingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListFindings)
+
+responseListFindingsFilters :: ListFindingsFiltersResponse -> TestTree
+responseListFindingsFilters =
+  res
+    "ListFindingsFiltersResponse"
+    "fixture/ListFindingsFiltersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListFindingsFilters)
+
+responseListInvitations :: ListInvitationsResponse -> TestTree
+responseListInvitations =
+  res
+    "ListInvitationsResponse"
+    "fixture/ListInvitationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListInvitations)
+
+responseListManagedDataIdentifiers :: ListManagedDataIdentifiersResponse -> TestTree
+responseListManagedDataIdentifiers =
+  res
+    "ListManagedDataIdentifiersResponse"
+    "fixture/ListManagedDataIdentifiersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListManagedDataIdentifiers)
+
+responseListMembers :: ListMembersResponse -> TestTree
+responseListMembers =
+  res
+    "ListMembersResponse"
+    "fixture/ListMembersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListMembers)
+
+responseListOrganizationAdminAccounts :: ListOrganizationAdminAccountsResponse -> TestTree
+responseListOrganizationAdminAccounts =
+  res
+    "ListOrganizationAdminAccountsResponse"
+    "fixture/ListOrganizationAdminAccountsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListOrganizationAdminAccounts)
+
+responseListResourceProfileArtifacts :: ListResourceProfileArtifactsResponse -> TestTree
+responseListResourceProfileArtifacts =
+  res
+    "ListResourceProfileArtifactsResponse"
+    "fixture/ListResourceProfileArtifactsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListResourceProfileArtifacts)
+
+responseListResourceProfileDetections :: ListResourceProfileDetectionsResponse -> TestTree
+responseListResourceProfileDetections =
+  res
+    "ListResourceProfileDetectionsResponse"
+    "fixture/ListResourceProfileDetectionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListResourceProfileDetections)
+
+responseListSensitivityInspectionTemplates :: ListSensitivityInspectionTemplatesResponse -> TestTree
+responseListSensitivityInspectionTemplates =
+  res
+    "ListSensitivityInspectionTemplatesResponse"
+    "fixture/ListSensitivityInspectionTemplatesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSensitivityInspectionTemplates)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responsePutClassificationExportConfiguration :: PutClassificationExportConfigurationResponse -> TestTree
+responsePutClassificationExportConfiguration =
+  res
+    "PutClassificationExportConfigurationResponse"
+    "fixture/PutClassificationExportConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutClassificationExportConfiguration)
+
+responsePutFindingsPublicationConfiguration :: PutFindingsPublicationConfigurationResponse -> TestTree
+responsePutFindingsPublicationConfiguration =
+  res
+    "PutFindingsPublicationConfigurationResponse"
+    "fixture/PutFindingsPublicationConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutFindingsPublicationConfiguration)
+
+responseSearchResources :: SearchResourcesResponse -> TestTree
+responseSearchResources =
+  res
+    "SearchResourcesResponse"
+    "fixture/SearchResourcesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchResources)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseTestCustomDataIdentifier :: TestCustomDataIdentifierResponse -> TestTree
+responseTestCustomDataIdentifier =
+  res
+    "TestCustomDataIdentifierResponse"
+    "fixture/TestCustomDataIdentifierResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TestCustomDataIdentifier)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
+
+responseUpdateAllowList :: UpdateAllowListResponse -> TestTree
+responseUpdateAllowList =
+  res
+    "UpdateAllowListResponse"
+    "fixture/UpdateAllowListResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAllowList)
+
+responseUpdateAutomatedDiscoveryConfiguration :: UpdateAutomatedDiscoveryConfigurationResponse -> TestTree
+responseUpdateAutomatedDiscoveryConfiguration =
+  res
+    "UpdateAutomatedDiscoveryConfigurationResponse"
+    "fixture/UpdateAutomatedDiscoveryConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAutomatedDiscoveryConfiguration)
+
+responseUpdateClassificationJob :: UpdateClassificationJobResponse -> TestTree
+responseUpdateClassificationJob =
+  res
+    "UpdateClassificationJobResponse"
+    "fixture/UpdateClassificationJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateClassificationJob)
+
+responseUpdateClassificationScope :: UpdateClassificationScopeResponse -> TestTree
+responseUpdateClassificationScope =
+  res
+    "UpdateClassificationScopeResponse"
+    "fixture/UpdateClassificationScopeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateClassificationScope)
+
+responseUpdateFindingsFilter :: UpdateFindingsFilterResponse -> TestTree
+responseUpdateFindingsFilter =
+  res
+    "UpdateFindingsFilterResponse"
+    "fixture/UpdateFindingsFilterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateFindingsFilter)
+
+responseUpdateMacieSession :: UpdateMacieSessionResponse -> TestTree
+responseUpdateMacieSession =
+  res
+    "UpdateMacieSessionResponse"
+    "fixture/UpdateMacieSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateMacieSession)
+
+responseUpdateMemberSession :: UpdateMemberSessionResponse -> TestTree
+responseUpdateMemberSession =
+  res
+    "UpdateMemberSessionResponse"
+    "fixture/UpdateMemberSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateMemberSession)
+
+responseUpdateOrganizationConfiguration :: UpdateOrganizationConfigurationResponse -> TestTree
+responseUpdateOrganizationConfiguration =
+  res
+    "UpdateOrganizationConfigurationResponse"
+    "fixture/UpdateOrganizationConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateOrganizationConfiguration)
+
+responseUpdateResourceProfile :: UpdateResourceProfileResponse -> TestTree
+responseUpdateResourceProfile =
+  res
+    "UpdateResourceProfileResponse"
+    "fixture/UpdateResourceProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateResourceProfile)
+
+responseUpdateResourceProfileDetections :: UpdateResourceProfileDetectionsResponse -> TestTree
+responseUpdateResourceProfileDetections =
+  res
+    "UpdateResourceProfileDetectionsResponse"
+    "fixture/UpdateResourceProfileDetectionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateResourceProfileDetections)
+
+responseUpdateRevealConfiguration :: UpdateRevealConfigurationResponse -> TestTree
+responseUpdateRevealConfiguration =
+  res
+    "UpdateRevealConfigurationResponse"
+    "fixture/UpdateRevealConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateRevealConfiguration)
+
+responseUpdateSensitivityInspectionTemplate :: UpdateSensitivityInspectionTemplateResponse -> TestTree
+responseUpdateSensitivityInspectionTemplate =
+  res
+    "UpdateSensitivityInspectionTemplateResponse"
+    "fixture/UpdateSensitivityInspectionTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateSensitivityInspectionTemplate)
diff --git a/test/Test/Amazonka/MacieV2.hs b/test/Test/Amazonka/MacieV2.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/MacieV2.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.MacieV2
+-- Copyright   : (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.MacieV2
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/MacieV2/Internal.hs b/test/Test/Amazonka/MacieV2/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/MacieV2/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.MacieV2.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.MacieV2.Internal where
