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 Simple Email Service SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2019-09-27@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-sesv2)
+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.SESV2](http://hackage.haskell.org/package/amazonka-sesv2/docs/Amazonka-SESV2.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-sesv2` 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-sesv2.cabal b/amazonka-sesv2.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-sesv2.cabal
@@ -0,0 +1,279 @@
+cabal-version:      2.2
+name:               amazonka-sesv2
+version:            2.0
+synopsis:           Amazon Simple Email Service SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2019-09-27@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.SESV2.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.SESV2" 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-sesv2
+
+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.SESV2
+    Amazonka.SESV2.BatchGetMetricData
+    Amazonka.SESV2.CreateConfigurationSet
+    Amazonka.SESV2.CreateConfigurationSetEventDestination
+    Amazonka.SESV2.CreateContact
+    Amazonka.SESV2.CreateContactList
+    Amazonka.SESV2.CreateCustomVerificationEmailTemplate
+    Amazonka.SESV2.CreateDedicatedIpPool
+    Amazonka.SESV2.CreateDeliverabilityTestReport
+    Amazonka.SESV2.CreateEmailIdentity
+    Amazonka.SESV2.CreateEmailIdentityPolicy
+    Amazonka.SESV2.CreateEmailTemplate
+    Amazonka.SESV2.CreateImportJob
+    Amazonka.SESV2.DeleteConfigurationSet
+    Amazonka.SESV2.DeleteConfigurationSetEventDestination
+    Amazonka.SESV2.DeleteContact
+    Amazonka.SESV2.DeleteContactList
+    Amazonka.SESV2.DeleteCustomVerificationEmailTemplate
+    Amazonka.SESV2.DeleteDedicatedIpPool
+    Amazonka.SESV2.DeleteEmailIdentity
+    Amazonka.SESV2.DeleteEmailIdentityPolicy
+    Amazonka.SESV2.DeleteEmailTemplate
+    Amazonka.SESV2.DeleteSuppressedDestination
+    Amazonka.SESV2.GetAccount
+    Amazonka.SESV2.GetBlacklistReports
+    Amazonka.SESV2.GetConfigurationSet
+    Amazonka.SESV2.GetConfigurationSetEventDestinations
+    Amazonka.SESV2.GetContact
+    Amazonka.SESV2.GetContactList
+    Amazonka.SESV2.GetCustomVerificationEmailTemplate
+    Amazonka.SESV2.GetDedicatedIp
+    Amazonka.SESV2.GetDedicatedIpPool
+    Amazonka.SESV2.GetDedicatedIps
+    Amazonka.SESV2.GetDeliverabilityDashboardOptions
+    Amazonka.SESV2.GetDeliverabilityTestReport
+    Amazonka.SESV2.GetDomainDeliverabilityCampaign
+    Amazonka.SESV2.GetDomainStatisticsReport
+    Amazonka.SESV2.GetEmailIdentity
+    Amazonka.SESV2.GetEmailIdentityPolicies
+    Amazonka.SESV2.GetEmailTemplate
+    Amazonka.SESV2.GetImportJob
+    Amazonka.SESV2.GetSuppressedDestination
+    Amazonka.SESV2.Lens
+    Amazonka.SESV2.ListConfigurationSets
+    Amazonka.SESV2.ListContactLists
+    Amazonka.SESV2.ListContacts
+    Amazonka.SESV2.ListCustomVerificationEmailTemplates
+    Amazonka.SESV2.ListDedicatedIpPools
+    Amazonka.SESV2.ListDeliverabilityTestReports
+    Amazonka.SESV2.ListDomainDeliverabilityCampaigns
+    Amazonka.SESV2.ListEmailIdentities
+    Amazonka.SESV2.ListEmailTemplates
+    Amazonka.SESV2.ListImportJobs
+    Amazonka.SESV2.ListRecommendations
+    Amazonka.SESV2.ListSuppressedDestinations
+    Amazonka.SESV2.ListTagsForResource
+    Amazonka.SESV2.PutAccountDedicatedIpWarmupAttributes
+    Amazonka.SESV2.PutAccountDetails
+    Amazonka.SESV2.PutAccountSendingAttributes
+    Amazonka.SESV2.PutAccountSuppressionAttributes
+    Amazonka.SESV2.PutAccountVdmAttributes
+    Amazonka.SESV2.PutConfigurationSetDeliveryOptions
+    Amazonka.SESV2.PutConfigurationSetReputationOptions
+    Amazonka.SESV2.PutConfigurationSetSendingOptions
+    Amazonka.SESV2.PutConfigurationSetSuppressionOptions
+    Amazonka.SESV2.PutConfigurationSetTrackingOptions
+    Amazonka.SESV2.PutConfigurationSetVdmOptions
+    Amazonka.SESV2.PutDedicatedIpInPool
+    Amazonka.SESV2.PutDedicatedIpWarmupAttributes
+    Amazonka.SESV2.PutDeliverabilityDashboardOption
+    Amazonka.SESV2.PutEmailIdentityConfigurationSetAttributes
+    Amazonka.SESV2.PutEmailIdentityDkimAttributes
+    Amazonka.SESV2.PutEmailIdentityDkimSigningAttributes
+    Amazonka.SESV2.PutEmailIdentityFeedbackAttributes
+    Amazonka.SESV2.PutEmailIdentityMailFromAttributes
+    Amazonka.SESV2.PutSuppressedDestination
+    Amazonka.SESV2.SendBulkEmail
+    Amazonka.SESV2.SendCustomVerificationEmail
+    Amazonka.SESV2.SendEmail
+    Amazonka.SESV2.TagResource
+    Amazonka.SESV2.TestRenderEmailTemplate
+    Amazonka.SESV2.Types
+    Amazonka.SESV2.Types.AccountDetails
+    Amazonka.SESV2.Types.BatchGetMetricDataQuery
+    Amazonka.SESV2.Types.BehaviorOnMxFailure
+    Amazonka.SESV2.Types.BlacklistEntry
+    Amazonka.SESV2.Types.Body
+    Amazonka.SESV2.Types.BulkEmailContent
+    Amazonka.SESV2.Types.BulkEmailEntry
+    Amazonka.SESV2.Types.BulkEmailEntryResult
+    Amazonka.SESV2.Types.BulkEmailStatus
+    Amazonka.SESV2.Types.CloudWatchDestination
+    Amazonka.SESV2.Types.CloudWatchDimensionConfiguration
+    Amazonka.SESV2.Types.Contact
+    Amazonka.SESV2.Types.ContactLanguage
+    Amazonka.SESV2.Types.ContactList
+    Amazonka.SESV2.Types.ContactListDestination
+    Amazonka.SESV2.Types.ContactListImportAction
+    Amazonka.SESV2.Types.Content
+    Amazonka.SESV2.Types.CustomVerificationEmailTemplateMetadata
+    Amazonka.SESV2.Types.DailyVolume
+    Amazonka.SESV2.Types.DashboardAttributes
+    Amazonka.SESV2.Types.DashboardOptions
+    Amazonka.SESV2.Types.DataFormat
+    Amazonka.SESV2.Types.DedicatedIp
+    Amazonka.SESV2.Types.DedicatedIpPool
+    Amazonka.SESV2.Types.DeliverabilityDashboardAccountStatus
+    Amazonka.SESV2.Types.DeliverabilityTestReport
+    Amazonka.SESV2.Types.DeliverabilityTestStatus
+    Amazonka.SESV2.Types.DeliveryOptions
+    Amazonka.SESV2.Types.Destination
+    Amazonka.SESV2.Types.DimensionValueSource
+    Amazonka.SESV2.Types.DkimAttributes
+    Amazonka.SESV2.Types.DkimSigningAttributes
+    Amazonka.SESV2.Types.DkimSigningAttributesOrigin
+    Amazonka.SESV2.Types.DkimSigningKeyLength
+    Amazonka.SESV2.Types.DkimStatus
+    Amazonka.SESV2.Types.DomainDeliverabilityCampaign
+    Amazonka.SESV2.Types.DomainDeliverabilityTrackingOption
+    Amazonka.SESV2.Types.DomainIspPlacement
+    Amazonka.SESV2.Types.EmailContent
+    Amazonka.SESV2.Types.EmailTemplateContent
+    Amazonka.SESV2.Types.EmailTemplateMetadata
+    Amazonka.SESV2.Types.EventDestination
+    Amazonka.SESV2.Types.EventDestinationDefinition
+    Amazonka.SESV2.Types.EventType
+    Amazonka.SESV2.Types.FailureInfo
+    Amazonka.SESV2.Types.FeatureStatus
+    Amazonka.SESV2.Types.GuardianAttributes
+    Amazonka.SESV2.Types.GuardianOptions
+    Amazonka.SESV2.Types.IdentityInfo
+    Amazonka.SESV2.Types.IdentityType
+    Amazonka.SESV2.Types.ImportDataSource
+    Amazonka.SESV2.Types.ImportDestination
+    Amazonka.SESV2.Types.ImportDestinationType
+    Amazonka.SESV2.Types.ImportJobSummary
+    Amazonka.SESV2.Types.InboxPlacementTrackingOption
+    Amazonka.SESV2.Types.IspPlacement
+    Amazonka.SESV2.Types.JobStatus
+    Amazonka.SESV2.Types.KinesisFirehoseDestination
+    Amazonka.SESV2.Types.ListContactsFilter
+    Amazonka.SESV2.Types.ListManagementOptions
+    Amazonka.SESV2.Types.ListRecommendationsFilterKey
+    Amazonka.SESV2.Types.MailFromAttributes
+    Amazonka.SESV2.Types.MailFromDomainStatus
+    Amazonka.SESV2.Types.MailType
+    Amazonka.SESV2.Types.Message
+    Amazonka.SESV2.Types.MessageTag
+    Amazonka.SESV2.Types.Metric
+    Amazonka.SESV2.Types.MetricDataError
+    Amazonka.SESV2.Types.MetricDataResult
+    Amazonka.SESV2.Types.MetricDimensionName
+    Amazonka.SESV2.Types.MetricNamespace
+    Amazonka.SESV2.Types.OverallVolume
+    Amazonka.SESV2.Types.PinpointDestination
+    Amazonka.SESV2.Types.PlacementStatistics
+    Amazonka.SESV2.Types.QueryErrorCode
+    Amazonka.SESV2.Types.RawMessage
+    Amazonka.SESV2.Types.Recommendation
+    Amazonka.SESV2.Types.RecommendationImpact
+    Amazonka.SESV2.Types.RecommendationStatus
+    Amazonka.SESV2.Types.RecommendationType
+    Amazonka.SESV2.Types.ReplacementEmailContent
+    Amazonka.SESV2.Types.ReplacementTemplate
+    Amazonka.SESV2.Types.ReputationOptions
+    Amazonka.SESV2.Types.ReviewDetails
+    Amazonka.SESV2.Types.ReviewStatus
+    Amazonka.SESV2.Types.ScalingMode
+    Amazonka.SESV2.Types.SendingOptions
+    Amazonka.SESV2.Types.SendQuota
+    Amazonka.SESV2.Types.SnsDestination
+    Amazonka.SESV2.Types.SubscriptionStatus
+    Amazonka.SESV2.Types.SuppressedDestination
+    Amazonka.SESV2.Types.SuppressedDestinationAttributes
+    Amazonka.SESV2.Types.SuppressedDestinationSummary
+    Amazonka.SESV2.Types.SuppressionAttributes
+    Amazonka.SESV2.Types.SuppressionListDestination
+    Amazonka.SESV2.Types.SuppressionListImportAction
+    Amazonka.SESV2.Types.SuppressionListReason
+    Amazonka.SESV2.Types.SuppressionOptions
+    Amazonka.SESV2.Types.Tag
+    Amazonka.SESV2.Types.Template
+    Amazonka.SESV2.Types.TlsPolicy
+    Amazonka.SESV2.Types.Topic
+    Amazonka.SESV2.Types.TopicFilter
+    Amazonka.SESV2.Types.TopicPreference
+    Amazonka.SESV2.Types.TrackingOptions
+    Amazonka.SESV2.Types.VdmAttributes
+    Amazonka.SESV2.Types.VdmOptions
+    Amazonka.SESV2.Types.VerificationStatus
+    Amazonka.SESV2.Types.VolumeStatistics
+    Amazonka.SESV2.Types.WarmupStatus
+    Amazonka.SESV2.UntagResource
+    Amazonka.SESV2.UpdateConfigurationSetEventDestination
+    Amazonka.SESV2.UpdateContact
+    Amazonka.SESV2.UpdateContactList
+    Amazonka.SESV2.UpdateCustomVerificationEmailTemplate
+    Amazonka.SESV2.UpdateEmailIdentityPolicy
+    Amazonka.SESV2.UpdateEmailTemplate
+    Amazonka.SESV2.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-sesv2-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.SESV2
+    Test.Amazonka.SESV2
+    Test.Amazonka.SESV2.Internal
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-sesv2
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/BatchGetMetricData.yaml b/fixture/BatchGetMetricData.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetMetricData.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/BatchGetMetricDataResponse.proto b/fixture/BatchGetMetricDataResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetMetricDataResponse.proto
diff --git a/fixture/CreateConfigurationSet.yaml b/fixture/CreateConfigurationSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConfigurationSet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/CreateConfigurationSetEventDestination.yaml b/fixture/CreateConfigurationSetEventDestination.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConfigurationSetEventDestination.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/CreateConfigurationSetEventDestinationResponse.proto b/fixture/CreateConfigurationSetEventDestinationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConfigurationSetEventDestinationResponse.proto
diff --git a/fixture/CreateConfigurationSetResponse.proto b/fixture/CreateConfigurationSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConfigurationSetResponse.proto
diff --git a/fixture/CreateContact.yaml b/fixture/CreateContact.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateContact.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/CreateContactList.yaml b/fixture/CreateContactList.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateContactList.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/CreateContactListResponse.proto b/fixture/CreateContactListResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateContactListResponse.proto
diff --git a/fixture/CreateContactResponse.proto b/fixture/CreateContactResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateContactResponse.proto
diff --git a/fixture/CreateCustomVerificationEmailTemplate.yaml b/fixture/CreateCustomVerificationEmailTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCustomVerificationEmailTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/CreateCustomVerificationEmailTemplateResponse.proto b/fixture/CreateCustomVerificationEmailTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCustomVerificationEmailTemplateResponse.proto
diff --git a/fixture/CreateDedicatedIpPool.yaml b/fixture/CreateDedicatedIpPool.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDedicatedIpPool.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/CreateDedicatedIpPoolResponse.proto b/fixture/CreateDedicatedIpPoolResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDedicatedIpPoolResponse.proto
diff --git a/fixture/CreateDeliverabilityTestReport.yaml b/fixture/CreateDeliverabilityTestReport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDeliverabilityTestReport.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/CreateDeliverabilityTestReportResponse.proto b/fixture/CreateDeliverabilityTestReportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDeliverabilityTestReportResponse.proto
diff --git a/fixture/CreateEmailIdentity.yaml b/fixture/CreateEmailIdentity.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEmailIdentity.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/CreateEmailIdentityPolicy.yaml b/fixture/CreateEmailIdentityPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEmailIdentityPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/CreateEmailIdentityPolicyResponse.proto b/fixture/CreateEmailIdentityPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEmailIdentityPolicyResponse.proto
diff --git a/fixture/CreateEmailIdentityResponse.proto b/fixture/CreateEmailIdentityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEmailIdentityResponse.proto
diff --git a/fixture/CreateEmailTemplate.yaml b/fixture/CreateEmailTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEmailTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/CreateEmailTemplateResponse.proto b/fixture/CreateEmailTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEmailTemplateResponse.proto
diff --git a/fixture/CreateImportJob.yaml b/fixture/CreateImportJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateImportJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/CreateImportJobResponse.proto b/fixture/CreateImportJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateImportJobResponse.proto
diff --git a/fixture/DeleteConfigurationSet.yaml b/fixture/DeleteConfigurationSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConfigurationSet.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/DeleteConfigurationSetEventDestination.yaml b/fixture/DeleteConfigurationSetEventDestination.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConfigurationSetEventDestination.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/DeleteConfigurationSetEventDestinationResponse.proto b/fixture/DeleteConfigurationSetEventDestinationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConfigurationSetEventDestinationResponse.proto
diff --git a/fixture/DeleteConfigurationSetResponse.proto b/fixture/DeleteConfigurationSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConfigurationSetResponse.proto
diff --git a/fixture/DeleteContact.yaml b/fixture/DeleteContact.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteContact.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/DeleteContactList.yaml b/fixture/DeleteContactList.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteContactList.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/DeleteContactListResponse.proto b/fixture/DeleteContactListResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteContactListResponse.proto
diff --git a/fixture/DeleteContactResponse.proto b/fixture/DeleteContactResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteContactResponse.proto
diff --git a/fixture/DeleteCustomVerificationEmailTemplate.yaml b/fixture/DeleteCustomVerificationEmailTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCustomVerificationEmailTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/DeleteCustomVerificationEmailTemplateResponse.proto b/fixture/DeleteCustomVerificationEmailTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCustomVerificationEmailTemplateResponse.proto
diff --git a/fixture/DeleteDedicatedIpPool.yaml b/fixture/DeleteDedicatedIpPool.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDedicatedIpPool.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/DeleteDedicatedIpPoolResponse.proto b/fixture/DeleteDedicatedIpPoolResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDedicatedIpPoolResponse.proto
diff --git a/fixture/DeleteEmailIdentity.yaml b/fixture/DeleteEmailIdentity.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEmailIdentity.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/DeleteEmailIdentityPolicy.yaml b/fixture/DeleteEmailIdentityPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEmailIdentityPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/DeleteEmailIdentityPolicyResponse.proto b/fixture/DeleteEmailIdentityPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEmailIdentityPolicyResponse.proto
diff --git a/fixture/DeleteEmailIdentityResponse.proto b/fixture/DeleteEmailIdentityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEmailIdentityResponse.proto
diff --git a/fixture/DeleteEmailTemplate.yaml b/fixture/DeleteEmailTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEmailTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/DeleteEmailTemplateResponse.proto b/fixture/DeleteEmailTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEmailTemplateResponse.proto
diff --git a/fixture/DeleteSuppressedDestination.yaml b/fixture/DeleteSuppressedDestination.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSuppressedDestination.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/DeleteSuppressedDestinationResponse.proto b/fixture/DeleteSuppressedDestinationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSuppressedDestinationResponse.proto
diff --git a/fixture/GetAccount.yaml b/fixture/GetAccount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAccount.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetAccountResponse.proto b/fixture/GetAccountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAccountResponse.proto
diff --git a/fixture/GetBlacklistReports.yaml b/fixture/GetBlacklistReports.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBlacklistReports.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetBlacklistReportsResponse.proto b/fixture/GetBlacklistReportsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBlacklistReportsResponse.proto
diff --git a/fixture/GetConfigurationSet.yaml b/fixture/GetConfigurationSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetConfigurationSet.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetConfigurationSetEventDestinations.yaml b/fixture/GetConfigurationSetEventDestinations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetConfigurationSetEventDestinations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetConfigurationSetEventDestinationsResponse.proto b/fixture/GetConfigurationSetEventDestinationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetConfigurationSetEventDestinationsResponse.proto
diff --git a/fixture/GetConfigurationSetResponse.proto b/fixture/GetConfigurationSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetConfigurationSetResponse.proto
diff --git a/fixture/GetContact.yaml b/fixture/GetContact.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetContact.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetContactList.yaml b/fixture/GetContactList.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetContactList.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetContactListResponse.proto b/fixture/GetContactListResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetContactListResponse.proto
diff --git a/fixture/GetContactResponse.proto b/fixture/GetContactResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetContactResponse.proto
diff --git a/fixture/GetCustomVerificationEmailTemplate.yaml b/fixture/GetCustomVerificationEmailTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetCustomVerificationEmailTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetCustomVerificationEmailTemplateResponse.proto b/fixture/GetCustomVerificationEmailTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetCustomVerificationEmailTemplateResponse.proto
diff --git a/fixture/GetDedicatedIp.yaml b/fixture/GetDedicatedIp.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDedicatedIp.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetDedicatedIpPool.yaml b/fixture/GetDedicatedIpPool.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDedicatedIpPool.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetDedicatedIpPoolResponse.proto b/fixture/GetDedicatedIpPoolResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDedicatedIpPoolResponse.proto
diff --git a/fixture/GetDedicatedIpResponse.proto b/fixture/GetDedicatedIpResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDedicatedIpResponse.proto
diff --git a/fixture/GetDedicatedIps.yaml b/fixture/GetDedicatedIps.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDedicatedIps.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetDedicatedIpsResponse.proto b/fixture/GetDedicatedIpsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDedicatedIpsResponse.proto
diff --git a/fixture/GetDeliverabilityDashboardOptions.yaml b/fixture/GetDeliverabilityDashboardOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeliverabilityDashboardOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetDeliverabilityDashboardOptionsResponse.proto b/fixture/GetDeliverabilityDashboardOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeliverabilityDashboardOptionsResponse.proto
diff --git a/fixture/GetDeliverabilityTestReport.yaml b/fixture/GetDeliverabilityTestReport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeliverabilityTestReport.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetDeliverabilityTestReportResponse.proto b/fixture/GetDeliverabilityTestReportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeliverabilityTestReportResponse.proto
diff --git a/fixture/GetDomainDeliverabilityCampaign.yaml b/fixture/GetDomainDeliverabilityCampaign.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDomainDeliverabilityCampaign.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetDomainDeliverabilityCampaignResponse.proto b/fixture/GetDomainDeliverabilityCampaignResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDomainDeliverabilityCampaignResponse.proto
diff --git a/fixture/GetDomainStatisticsReport.yaml b/fixture/GetDomainStatisticsReport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDomainStatisticsReport.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetDomainStatisticsReportResponse.proto b/fixture/GetDomainStatisticsReportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDomainStatisticsReportResponse.proto
diff --git a/fixture/GetEmailIdentity.yaml b/fixture/GetEmailIdentity.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetEmailIdentity.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetEmailIdentityPolicies.yaml b/fixture/GetEmailIdentityPolicies.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetEmailIdentityPolicies.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetEmailIdentityPoliciesResponse.proto b/fixture/GetEmailIdentityPoliciesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetEmailIdentityPoliciesResponse.proto
diff --git a/fixture/GetEmailIdentityResponse.proto b/fixture/GetEmailIdentityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetEmailIdentityResponse.proto
diff --git a/fixture/GetEmailTemplate.yaml b/fixture/GetEmailTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetEmailTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetEmailTemplateResponse.proto b/fixture/GetEmailTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetEmailTemplateResponse.proto
diff --git a/fixture/GetImportJob.yaml b/fixture/GetImportJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetImportJob.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetImportJobResponse.proto b/fixture/GetImportJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetImportJobResponse.proto
diff --git a/fixture/GetSuppressedDestination.yaml b/fixture/GetSuppressedDestination.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSuppressedDestination.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/GetSuppressedDestinationResponse.proto b/fixture/GetSuppressedDestinationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSuppressedDestinationResponse.proto
diff --git a/fixture/ListConfigurationSets.yaml b/fixture/ListConfigurationSets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListConfigurationSets.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/ListConfigurationSetsResponse.proto b/fixture/ListConfigurationSetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListConfigurationSetsResponse.proto
diff --git a/fixture/ListContactLists.yaml b/fixture/ListContactLists.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListContactLists.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/ListContactListsResponse.proto b/fixture/ListContactListsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListContactListsResponse.proto
diff --git a/fixture/ListContacts.yaml b/fixture/ListContacts.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListContacts.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/ListContactsResponse.proto b/fixture/ListContactsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListContactsResponse.proto
diff --git a/fixture/ListCustomVerificationEmailTemplates.yaml b/fixture/ListCustomVerificationEmailTemplates.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomVerificationEmailTemplates.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/ListCustomVerificationEmailTemplatesResponse.proto b/fixture/ListCustomVerificationEmailTemplatesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomVerificationEmailTemplatesResponse.proto
diff --git a/fixture/ListDedicatedIpPools.yaml b/fixture/ListDedicatedIpPools.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDedicatedIpPools.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/ListDedicatedIpPoolsResponse.proto b/fixture/ListDedicatedIpPoolsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDedicatedIpPoolsResponse.proto
diff --git a/fixture/ListDeliverabilityTestReports.yaml b/fixture/ListDeliverabilityTestReports.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDeliverabilityTestReports.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/ListDeliverabilityTestReportsResponse.proto b/fixture/ListDeliverabilityTestReportsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDeliverabilityTestReportsResponse.proto
diff --git a/fixture/ListDomainDeliverabilityCampaigns.yaml b/fixture/ListDomainDeliverabilityCampaigns.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDomainDeliverabilityCampaigns.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/ListDomainDeliverabilityCampaignsResponse.proto b/fixture/ListDomainDeliverabilityCampaignsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDomainDeliverabilityCampaignsResponse.proto
diff --git a/fixture/ListEmailIdentities.yaml b/fixture/ListEmailIdentities.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEmailIdentities.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/ListEmailIdentitiesResponse.proto b/fixture/ListEmailIdentitiesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEmailIdentitiesResponse.proto
diff --git a/fixture/ListEmailTemplates.yaml b/fixture/ListEmailTemplates.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEmailTemplates.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/ListEmailTemplatesResponse.proto b/fixture/ListEmailTemplatesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEmailTemplatesResponse.proto
diff --git a/fixture/ListImportJobs.yaml b/fixture/ListImportJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListImportJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/ListImportJobsResponse.proto b/fixture/ListImportJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListImportJobsResponse.proto
diff --git a/fixture/ListRecommendations.yaml b/fixture/ListRecommendations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListRecommendations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/ListRecommendationsResponse.proto b/fixture/ListRecommendationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListRecommendationsResponse.proto
diff --git a/fixture/ListSuppressedDestinations.yaml b/fixture/ListSuppressedDestinations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSuppressedDestinations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/ListSuppressedDestinationsResponse.proto b/fixture/ListSuppressedDestinationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSuppressedDestinationsResponse.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/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutAccountDedicatedIpWarmupAttributes.yaml b/fixture/PutAccountDedicatedIpWarmupAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutAccountDedicatedIpWarmupAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutAccountDedicatedIpWarmupAttributesResponse.proto b/fixture/PutAccountDedicatedIpWarmupAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutAccountDedicatedIpWarmupAttributesResponse.proto
diff --git a/fixture/PutAccountDetails.yaml b/fixture/PutAccountDetails.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutAccountDetails.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutAccountDetailsResponse.proto b/fixture/PutAccountDetailsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutAccountDetailsResponse.proto
diff --git a/fixture/PutAccountSendingAttributes.yaml b/fixture/PutAccountSendingAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutAccountSendingAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutAccountSendingAttributesResponse.proto b/fixture/PutAccountSendingAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutAccountSendingAttributesResponse.proto
diff --git a/fixture/PutAccountSuppressionAttributes.yaml b/fixture/PutAccountSuppressionAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutAccountSuppressionAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutAccountSuppressionAttributesResponse.proto b/fixture/PutAccountSuppressionAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutAccountSuppressionAttributesResponse.proto
diff --git a/fixture/PutAccountVdmAttributes.yaml b/fixture/PutAccountVdmAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutAccountVdmAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutAccountVdmAttributesResponse.proto b/fixture/PutAccountVdmAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutAccountVdmAttributesResponse.proto
diff --git a/fixture/PutConfigurationSetDeliveryOptions.yaml b/fixture/PutConfigurationSetDeliveryOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutConfigurationSetDeliveryOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutConfigurationSetDeliveryOptionsResponse.proto b/fixture/PutConfigurationSetDeliveryOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutConfigurationSetDeliveryOptionsResponse.proto
diff --git a/fixture/PutConfigurationSetReputationOptions.yaml b/fixture/PutConfigurationSetReputationOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutConfigurationSetReputationOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutConfigurationSetReputationOptionsResponse.proto b/fixture/PutConfigurationSetReputationOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutConfigurationSetReputationOptionsResponse.proto
diff --git a/fixture/PutConfigurationSetSendingOptions.yaml b/fixture/PutConfigurationSetSendingOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutConfigurationSetSendingOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutConfigurationSetSendingOptionsResponse.proto b/fixture/PutConfigurationSetSendingOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutConfigurationSetSendingOptionsResponse.proto
diff --git a/fixture/PutConfigurationSetSuppressionOptions.yaml b/fixture/PutConfigurationSetSuppressionOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutConfigurationSetSuppressionOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutConfigurationSetSuppressionOptionsResponse.proto b/fixture/PutConfigurationSetSuppressionOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutConfigurationSetSuppressionOptionsResponse.proto
diff --git a/fixture/PutConfigurationSetTrackingOptions.yaml b/fixture/PutConfigurationSetTrackingOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutConfigurationSetTrackingOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutConfigurationSetTrackingOptionsResponse.proto b/fixture/PutConfigurationSetTrackingOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutConfigurationSetTrackingOptionsResponse.proto
diff --git a/fixture/PutConfigurationSetVdmOptions.yaml b/fixture/PutConfigurationSetVdmOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutConfigurationSetVdmOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutConfigurationSetVdmOptionsResponse.proto b/fixture/PutConfigurationSetVdmOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutConfigurationSetVdmOptionsResponse.proto
diff --git a/fixture/PutDedicatedIpInPool.yaml b/fixture/PutDedicatedIpInPool.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutDedicatedIpInPool.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutDedicatedIpInPoolResponse.proto b/fixture/PutDedicatedIpInPoolResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutDedicatedIpInPoolResponse.proto
diff --git a/fixture/PutDedicatedIpWarmupAttributes.yaml b/fixture/PutDedicatedIpWarmupAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutDedicatedIpWarmupAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutDedicatedIpWarmupAttributesResponse.proto b/fixture/PutDedicatedIpWarmupAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutDedicatedIpWarmupAttributesResponse.proto
diff --git a/fixture/PutDeliverabilityDashboardOption.yaml b/fixture/PutDeliverabilityDashboardOption.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutDeliverabilityDashboardOption.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutDeliverabilityDashboardOptionResponse.proto b/fixture/PutDeliverabilityDashboardOptionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutDeliverabilityDashboardOptionResponse.proto
diff --git a/fixture/PutEmailIdentityConfigurationSetAttributes.yaml b/fixture/PutEmailIdentityConfigurationSetAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutEmailIdentityConfigurationSetAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutEmailIdentityConfigurationSetAttributesResponse.proto b/fixture/PutEmailIdentityConfigurationSetAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutEmailIdentityConfigurationSetAttributesResponse.proto
diff --git a/fixture/PutEmailIdentityDkimAttributes.yaml b/fixture/PutEmailIdentityDkimAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutEmailIdentityDkimAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutEmailIdentityDkimAttributesResponse.proto b/fixture/PutEmailIdentityDkimAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutEmailIdentityDkimAttributesResponse.proto
diff --git a/fixture/PutEmailIdentityDkimSigningAttributes.yaml b/fixture/PutEmailIdentityDkimSigningAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutEmailIdentityDkimSigningAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutEmailIdentityDkimSigningAttributesResponse.proto b/fixture/PutEmailIdentityDkimSigningAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutEmailIdentityDkimSigningAttributesResponse.proto
diff --git a/fixture/PutEmailIdentityFeedbackAttributes.yaml b/fixture/PutEmailIdentityFeedbackAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutEmailIdentityFeedbackAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutEmailIdentityFeedbackAttributesResponse.proto b/fixture/PutEmailIdentityFeedbackAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutEmailIdentityFeedbackAttributesResponse.proto
diff --git a/fixture/PutEmailIdentityMailFromAttributes.yaml b/fixture/PutEmailIdentityMailFromAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutEmailIdentityMailFromAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutEmailIdentityMailFromAttributesResponse.proto b/fixture/PutEmailIdentityMailFromAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutEmailIdentityMailFromAttributesResponse.proto
diff --git a/fixture/PutSuppressedDestination.yaml b/fixture/PutSuppressedDestination.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutSuppressedDestination.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/PutSuppressedDestinationResponse.proto b/fixture/PutSuppressedDestinationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutSuppressedDestinationResponse.proto
diff --git a/fixture/SendBulkEmail.yaml b/fixture/SendBulkEmail.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SendBulkEmail.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/SendBulkEmailResponse.proto b/fixture/SendBulkEmailResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SendBulkEmailResponse.proto
diff --git a/fixture/SendCustomVerificationEmail.yaml b/fixture/SendCustomVerificationEmail.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SendCustomVerificationEmail.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/SendCustomVerificationEmailResponse.proto b/fixture/SendCustomVerificationEmailResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SendCustomVerificationEmailResponse.proto
diff --git a/fixture/SendEmail.yaml b/fixture/SendEmail.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SendEmail.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/SendEmailResponse.proto b/fixture/SendEmailResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SendEmailResponse.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/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/TestRenderEmailTemplate.yaml b/fixture/TestRenderEmailTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TestRenderEmailTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/TestRenderEmailTemplateResponse.proto b/fixture/TestRenderEmailTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TestRenderEmailTemplateResponse.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/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/UpdateConfigurationSetEventDestination.yaml b/fixture/UpdateConfigurationSetEventDestination.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateConfigurationSetEventDestination.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/UpdateConfigurationSetEventDestinationResponse.proto b/fixture/UpdateConfigurationSetEventDestinationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateConfigurationSetEventDestinationResponse.proto
diff --git a/fixture/UpdateContact.yaml b/fixture/UpdateContact.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateContact.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/UpdateContactList.yaml b/fixture/UpdateContactList.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateContactList.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/UpdateContactListResponse.proto b/fixture/UpdateContactListResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateContactListResponse.proto
diff --git a/fixture/UpdateContactResponse.proto b/fixture/UpdateContactResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateContactResponse.proto
diff --git a/fixture/UpdateCustomVerificationEmailTemplate.yaml b/fixture/UpdateCustomVerificationEmailTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCustomVerificationEmailTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/UpdateCustomVerificationEmailTemplateResponse.proto b/fixture/UpdateCustomVerificationEmailTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCustomVerificationEmailTemplateResponse.proto
diff --git a/fixture/UpdateEmailIdentityPolicy.yaml b/fixture/UpdateEmailIdentityPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEmailIdentityPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/UpdateEmailIdentityPolicyResponse.proto b/fixture/UpdateEmailIdentityPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEmailIdentityPolicyResponse.proto
diff --git a/fixture/UpdateEmailTemplate.yaml b/fixture/UpdateEmailTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEmailTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/email/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  email.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/UpdateEmailTemplateResponse.proto b/fixture/UpdateEmailTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEmailTemplateResponse.proto
diff --git a/gen/Amazonka/SESV2.hs b/gen/Amazonka/SESV2.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2.hs
@@ -0,0 +1,1117 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.SESV2
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2019-09-27@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon SES API v2
+--
+-- <http://aws.amazon.com/ses Amazon SES> is an Amazon Web Services service
+-- that you can use to send email messages to your customers.
+--
+-- If you\'re new to Amazon SES API v2, you might find it helpful to review
+-- the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/ Amazon Simple Email Service Developer Guide>.
+-- The /Amazon SES Developer Guide/ provides information and code samples
+-- that demonstrate how to use Amazon SES API v2 features programmatically.
+module Amazonka.SESV2
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccountSuspendedException
+    _AccountSuspendedException,
+
+    -- ** AlreadyExistsException
+    _AlreadyExistsException,
+
+    -- ** BadRequestException
+    _BadRequestException,
+
+    -- ** ConcurrentModificationException
+    _ConcurrentModificationException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServiceErrorException
+    _InternalServiceErrorException,
+
+    -- ** InvalidNextTokenException
+    _InvalidNextTokenException,
+
+    -- ** LimitExceededException
+    _LimitExceededException,
+
+    -- ** MailFromDomainNotVerifiedException
+    _MailFromDomainNotVerifiedException,
+
+    -- ** MessageRejected
+    _MessageRejected,
+
+    -- ** NotFoundException
+    _NotFoundException,
+
+    -- ** SendingPausedException
+    _SendingPausedException,
+
+    -- ** TooManyRequestsException
+    _TooManyRequestsException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** BatchGetMetricData
+    BatchGetMetricData (BatchGetMetricData'),
+    newBatchGetMetricData,
+    BatchGetMetricDataResponse (BatchGetMetricDataResponse'),
+    newBatchGetMetricDataResponse,
+
+    -- ** CreateConfigurationSet
+    CreateConfigurationSet (CreateConfigurationSet'),
+    newCreateConfigurationSet,
+    CreateConfigurationSetResponse (CreateConfigurationSetResponse'),
+    newCreateConfigurationSetResponse,
+
+    -- ** CreateConfigurationSetEventDestination
+    CreateConfigurationSetEventDestination (CreateConfigurationSetEventDestination'),
+    newCreateConfigurationSetEventDestination,
+    CreateConfigurationSetEventDestinationResponse (CreateConfigurationSetEventDestinationResponse'),
+    newCreateConfigurationSetEventDestinationResponse,
+
+    -- ** CreateContact
+    CreateContact (CreateContact'),
+    newCreateContact,
+    CreateContactResponse (CreateContactResponse'),
+    newCreateContactResponse,
+
+    -- ** CreateContactList
+    CreateContactList (CreateContactList'),
+    newCreateContactList,
+    CreateContactListResponse (CreateContactListResponse'),
+    newCreateContactListResponse,
+
+    -- ** CreateCustomVerificationEmailTemplate
+    CreateCustomVerificationEmailTemplate (CreateCustomVerificationEmailTemplate'),
+    newCreateCustomVerificationEmailTemplate,
+    CreateCustomVerificationEmailTemplateResponse (CreateCustomVerificationEmailTemplateResponse'),
+    newCreateCustomVerificationEmailTemplateResponse,
+
+    -- ** CreateDedicatedIpPool
+    CreateDedicatedIpPool (CreateDedicatedIpPool'),
+    newCreateDedicatedIpPool,
+    CreateDedicatedIpPoolResponse (CreateDedicatedIpPoolResponse'),
+    newCreateDedicatedIpPoolResponse,
+
+    -- ** CreateDeliverabilityTestReport
+    CreateDeliverabilityTestReport (CreateDeliverabilityTestReport'),
+    newCreateDeliverabilityTestReport,
+    CreateDeliverabilityTestReportResponse (CreateDeliverabilityTestReportResponse'),
+    newCreateDeliverabilityTestReportResponse,
+
+    -- ** CreateEmailIdentity
+    CreateEmailIdentity (CreateEmailIdentity'),
+    newCreateEmailIdentity,
+    CreateEmailIdentityResponse (CreateEmailIdentityResponse'),
+    newCreateEmailIdentityResponse,
+
+    -- ** CreateEmailIdentityPolicy
+    CreateEmailIdentityPolicy (CreateEmailIdentityPolicy'),
+    newCreateEmailIdentityPolicy,
+    CreateEmailIdentityPolicyResponse (CreateEmailIdentityPolicyResponse'),
+    newCreateEmailIdentityPolicyResponse,
+
+    -- ** CreateEmailTemplate
+    CreateEmailTemplate (CreateEmailTemplate'),
+    newCreateEmailTemplate,
+    CreateEmailTemplateResponse (CreateEmailTemplateResponse'),
+    newCreateEmailTemplateResponse,
+
+    -- ** CreateImportJob
+    CreateImportJob (CreateImportJob'),
+    newCreateImportJob,
+    CreateImportJobResponse (CreateImportJobResponse'),
+    newCreateImportJobResponse,
+
+    -- ** DeleteConfigurationSet
+    DeleteConfigurationSet (DeleteConfigurationSet'),
+    newDeleteConfigurationSet,
+    DeleteConfigurationSetResponse (DeleteConfigurationSetResponse'),
+    newDeleteConfigurationSetResponse,
+
+    -- ** DeleteConfigurationSetEventDestination
+    DeleteConfigurationSetEventDestination (DeleteConfigurationSetEventDestination'),
+    newDeleteConfigurationSetEventDestination,
+    DeleteConfigurationSetEventDestinationResponse (DeleteConfigurationSetEventDestinationResponse'),
+    newDeleteConfigurationSetEventDestinationResponse,
+
+    -- ** DeleteContact
+    DeleteContact (DeleteContact'),
+    newDeleteContact,
+    DeleteContactResponse (DeleteContactResponse'),
+    newDeleteContactResponse,
+
+    -- ** DeleteContactList
+    DeleteContactList (DeleteContactList'),
+    newDeleteContactList,
+    DeleteContactListResponse (DeleteContactListResponse'),
+    newDeleteContactListResponse,
+
+    -- ** DeleteCustomVerificationEmailTemplate
+    DeleteCustomVerificationEmailTemplate (DeleteCustomVerificationEmailTemplate'),
+    newDeleteCustomVerificationEmailTemplate,
+    DeleteCustomVerificationEmailTemplateResponse (DeleteCustomVerificationEmailTemplateResponse'),
+    newDeleteCustomVerificationEmailTemplateResponse,
+
+    -- ** DeleteDedicatedIpPool
+    DeleteDedicatedIpPool (DeleteDedicatedIpPool'),
+    newDeleteDedicatedIpPool,
+    DeleteDedicatedIpPoolResponse (DeleteDedicatedIpPoolResponse'),
+    newDeleteDedicatedIpPoolResponse,
+
+    -- ** DeleteEmailIdentity
+    DeleteEmailIdentity (DeleteEmailIdentity'),
+    newDeleteEmailIdentity,
+    DeleteEmailIdentityResponse (DeleteEmailIdentityResponse'),
+    newDeleteEmailIdentityResponse,
+
+    -- ** DeleteEmailIdentityPolicy
+    DeleteEmailIdentityPolicy (DeleteEmailIdentityPolicy'),
+    newDeleteEmailIdentityPolicy,
+    DeleteEmailIdentityPolicyResponse (DeleteEmailIdentityPolicyResponse'),
+    newDeleteEmailIdentityPolicyResponse,
+
+    -- ** DeleteEmailTemplate
+    DeleteEmailTemplate (DeleteEmailTemplate'),
+    newDeleteEmailTemplate,
+    DeleteEmailTemplateResponse (DeleteEmailTemplateResponse'),
+    newDeleteEmailTemplateResponse,
+
+    -- ** DeleteSuppressedDestination
+    DeleteSuppressedDestination (DeleteSuppressedDestination'),
+    newDeleteSuppressedDestination,
+    DeleteSuppressedDestinationResponse (DeleteSuppressedDestinationResponse'),
+    newDeleteSuppressedDestinationResponse,
+
+    -- ** GetAccount
+    GetAccount (GetAccount'),
+    newGetAccount,
+    GetAccountResponse (GetAccountResponse'),
+    newGetAccountResponse,
+
+    -- ** GetBlacklistReports
+    GetBlacklistReports (GetBlacklistReports'),
+    newGetBlacklistReports,
+    GetBlacklistReportsResponse (GetBlacklistReportsResponse'),
+    newGetBlacklistReportsResponse,
+
+    -- ** GetConfigurationSet
+    GetConfigurationSet (GetConfigurationSet'),
+    newGetConfigurationSet,
+    GetConfigurationSetResponse (GetConfigurationSetResponse'),
+    newGetConfigurationSetResponse,
+
+    -- ** GetConfigurationSetEventDestinations
+    GetConfigurationSetEventDestinations (GetConfigurationSetEventDestinations'),
+    newGetConfigurationSetEventDestinations,
+    GetConfigurationSetEventDestinationsResponse (GetConfigurationSetEventDestinationsResponse'),
+    newGetConfigurationSetEventDestinationsResponse,
+
+    -- ** GetContact
+    GetContact (GetContact'),
+    newGetContact,
+    GetContactResponse (GetContactResponse'),
+    newGetContactResponse,
+
+    -- ** GetContactList
+    GetContactList (GetContactList'),
+    newGetContactList,
+    GetContactListResponse (GetContactListResponse'),
+    newGetContactListResponse,
+
+    -- ** GetCustomVerificationEmailTemplate
+    GetCustomVerificationEmailTemplate (GetCustomVerificationEmailTemplate'),
+    newGetCustomVerificationEmailTemplate,
+    GetCustomVerificationEmailTemplateResponse (GetCustomVerificationEmailTemplateResponse'),
+    newGetCustomVerificationEmailTemplateResponse,
+
+    -- ** GetDedicatedIp
+    GetDedicatedIp (GetDedicatedIp'),
+    newGetDedicatedIp,
+    GetDedicatedIpResponse (GetDedicatedIpResponse'),
+    newGetDedicatedIpResponse,
+
+    -- ** GetDedicatedIpPool
+    GetDedicatedIpPool (GetDedicatedIpPool'),
+    newGetDedicatedIpPool,
+    GetDedicatedIpPoolResponse (GetDedicatedIpPoolResponse'),
+    newGetDedicatedIpPoolResponse,
+
+    -- ** GetDedicatedIps
+    GetDedicatedIps (GetDedicatedIps'),
+    newGetDedicatedIps,
+    GetDedicatedIpsResponse (GetDedicatedIpsResponse'),
+    newGetDedicatedIpsResponse,
+
+    -- ** GetDeliverabilityDashboardOptions
+    GetDeliverabilityDashboardOptions (GetDeliverabilityDashboardOptions'),
+    newGetDeliverabilityDashboardOptions,
+    GetDeliverabilityDashboardOptionsResponse (GetDeliverabilityDashboardOptionsResponse'),
+    newGetDeliverabilityDashboardOptionsResponse,
+
+    -- ** GetDeliverabilityTestReport
+    GetDeliverabilityTestReport (GetDeliverabilityTestReport'),
+    newGetDeliverabilityTestReport,
+    GetDeliverabilityTestReportResponse (GetDeliverabilityTestReportResponse'),
+    newGetDeliverabilityTestReportResponse,
+
+    -- ** GetDomainDeliverabilityCampaign
+    GetDomainDeliverabilityCampaign (GetDomainDeliverabilityCampaign'),
+    newGetDomainDeliverabilityCampaign,
+    GetDomainDeliverabilityCampaignResponse (GetDomainDeliverabilityCampaignResponse'),
+    newGetDomainDeliverabilityCampaignResponse,
+
+    -- ** GetDomainStatisticsReport
+    GetDomainStatisticsReport (GetDomainStatisticsReport'),
+    newGetDomainStatisticsReport,
+    GetDomainStatisticsReportResponse (GetDomainStatisticsReportResponse'),
+    newGetDomainStatisticsReportResponse,
+
+    -- ** GetEmailIdentity
+    GetEmailIdentity (GetEmailIdentity'),
+    newGetEmailIdentity,
+    GetEmailIdentityResponse (GetEmailIdentityResponse'),
+    newGetEmailIdentityResponse,
+
+    -- ** GetEmailIdentityPolicies
+    GetEmailIdentityPolicies (GetEmailIdentityPolicies'),
+    newGetEmailIdentityPolicies,
+    GetEmailIdentityPoliciesResponse (GetEmailIdentityPoliciesResponse'),
+    newGetEmailIdentityPoliciesResponse,
+
+    -- ** GetEmailTemplate
+    GetEmailTemplate (GetEmailTemplate'),
+    newGetEmailTemplate,
+    GetEmailTemplateResponse (GetEmailTemplateResponse'),
+    newGetEmailTemplateResponse,
+
+    -- ** GetImportJob
+    GetImportJob (GetImportJob'),
+    newGetImportJob,
+    GetImportJobResponse (GetImportJobResponse'),
+    newGetImportJobResponse,
+
+    -- ** GetSuppressedDestination
+    GetSuppressedDestination (GetSuppressedDestination'),
+    newGetSuppressedDestination,
+    GetSuppressedDestinationResponse (GetSuppressedDestinationResponse'),
+    newGetSuppressedDestinationResponse,
+
+    -- ** ListConfigurationSets
+    ListConfigurationSets (ListConfigurationSets'),
+    newListConfigurationSets,
+    ListConfigurationSetsResponse (ListConfigurationSetsResponse'),
+    newListConfigurationSetsResponse,
+
+    -- ** ListContactLists
+    ListContactLists (ListContactLists'),
+    newListContactLists,
+    ListContactListsResponse (ListContactListsResponse'),
+    newListContactListsResponse,
+
+    -- ** ListContacts
+    ListContacts (ListContacts'),
+    newListContacts,
+    ListContactsResponse (ListContactsResponse'),
+    newListContactsResponse,
+
+    -- ** ListCustomVerificationEmailTemplates
+    ListCustomVerificationEmailTemplates (ListCustomVerificationEmailTemplates'),
+    newListCustomVerificationEmailTemplates,
+    ListCustomVerificationEmailTemplatesResponse (ListCustomVerificationEmailTemplatesResponse'),
+    newListCustomVerificationEmailTemplatesResponse,
+
+    -- ** ListDedicatedIpPools
+    ListDedicatedIpPools (ListDedicatedIpPools'),
+    newListDedicatedIpPools,
+    ListDedicatedIpPoolsResponse (ListDedicatedIpPoolsResponse'),
+    newListDedicatedIpPoolsResponse,
+
+    -- ** ListDeliverabilityTestReports
+    ListDeliverabilityTestReports (ListDeliverabilityTestReports'),
+    newListDeliverabilityTestReports,
+    ListDeliverabilityTestReportsResponse (ListDeliverabilityTestReportsResponse'),
+    newListDeliverabilityTestReportsResponse,
+
+    -- ** ListDomainDeliverabilityCampaigns
+    ListDomainDeliverabilityCampaigns (ListDomainDeliverabilityCampaigns'),
+    newListDomainDeliverabilityCampaigns,
+    ListDomainDeliverabilityCampaignsResponse (ListDomainDeliverabilityCampaignsResponse'),
+    newListDomainDeliverabilityCampaignsResponse,
+
+    -- ** ListEmailIdentities
+    ListEmailIdentities (ListEmailIdentities'),
+    newListEmailIdentities,
+    ListEmailIdentitiesResponse (ListEmailIdentitiesResponse'),
+    newListEmailIdentitiesResponse,
+
+    -- ** ListEmailTemplates
+    ListEmailTemplates (ListEmailTemplates'),
+    newListEmailTemplates,
+    ListEmailTemplatesResponse (ListEmailTemplatesResponse'),
+    newListEmailTemplatesResponse,
+
+    -- ** ListImportJobs
+    ListImportJobs (ListImportJobs'),
+    newListImportJobs,
+    ListImportJobsResponse (ListImportJobsResponse'),
+    newListImportJobsResponse,
+
+    -- ** ListRecommendations
+    ListRecommendations (ListRecommendations'),
+    newListRecommendations,
+    ListRecommendationsResponse (ListRecommendationsResponse'),
+    newListRecommendationsResponse,
+
+    -- ** ListSuppressedDestinations
+    ListSuppressedDestinations (ListSuppressedDestinations'),
+    newListSuppressedDestinations,
+    ListSuppressedDestinationsResponse (ListSuppressedDestinationsResponse'),
+    newListSuppressedDestinationsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** PutAccountDedicatedIpWarmupAttributes
+    PutAccountDedicatedIpWarmupAttributes (PutAccountDedicatedIpWarmupAttributes'),
+    newPutAccountDedicatedIpWarmupAttributes,
+    PutAccountDedicatedIpWarmupAttributesResponse (PutAccountDedicatedIpWarmupAttributesResponse'),
+    newPutAccountDedicatedIpWarmupAttributesResponse,
+
+    -- ** PutAccountDetails
+    PutAccountDetails (PutAccountDetails'),
+    newPutAccountDetails,
+    PutAccountDetailsResponse (PutAccountDetailsResponse'),
+    newPutAccountDetailsResponse,
+
+    -- ** PutAccountSendingAttributes
+    PutAccountSendingAttributes (PutAccountSendingAttributes'),
+    newPutAccountSendingAttributes,
+    PutAccountSendingAttributesResponse (PutAccountSendingAttributesResponse'),
+    newPutAccountSendingAttributesResponse,
+
+    -- ** PutAccountSuppressionAttributes
+    PutAccountSuppressionAttributes (PutAccountSuppressionAttributes'),
+    newPutAccountSuppressionAttributes,
+    PutAccountSuppressionAttributesResponse (PutAccountSuppressionAttributesResponse'),
+    newPutAccountSuppressionAttributesResponse,
+
+    -- ** PutAccountVdmAttributes
+    PutAccountVdmAttributes (PutAccountVdmAttributes'),
+    newPutAccountVdmAttributes,
+    PutAccountVdmAttributesResponse (PutAccountVdmAttributesResponse'),
+    newPutAccountVdmAttributesResponse,
+
+    -- ** PutConfigurationSetDeliveryOptions
+    PutConfigurationSetDeliveryOptions (PutConfigurationSetDeliveryOptions'),
+    newPutConfigurationSetDeliveryOptions,
+    PutConfigurationSetDeliveryOptionsResponse (PutConfigurationSetDeliveryOptionsResponse'),
+    newPutConfigurationSetDeliveryOptionsResponse,
+
+    -- ** PutConfigurationSetReputationOptions
+    PutConfigurationSetReputationOptions (PutConfigurationSetReputationOptions'),
+    newPutConfigurationSetReputationOptions,
+    PutConfigurationSetReputationOptionsResponse (PutConfigurationSetReputationOptionsResponse'),
+    newPutConfigurationSetReputationOptionsResponse,
+
+    -- ** PutConfigurationSetSendingOptions
+    PutConfigurationSetSendingOptions (PutConfigurationSetSendingOptions'),
+    newPutConfigurationSetSendingOptions,
+    PutConfigurationSetSendingOptionsResponse (PutConfigurationSetSendingOptionsResponse'),
+    newPutConfigurationSetSendingOptionsResponse,
+
+    -- ** PutConfigurationSetSuppressionOptions
+    PutConfigurationSetSuppressionOptions (PutConfigurationSetSuppressionOptions'),
+    newPutConfigurationSetSuppressionOptions,
+    PutConfigurationSetSuppressionOptionsResponse (PutConfigurationSetSuppressionOptionsResponse'),
+    newPutConfigurationSetSuppressionOptionsResponse,
+
+    -- ** PutConfigurationSetTrackingOptions
+    PutConfigurationSetTrackingOptions (PutConfigurationSetTrackingOptions'),
+    newPutConfigurationSetTrackingOptions,
+    PutConfigurationSetTrackingOptionsResponse (PutConfigurationSetTrackingOptionsResponse'),
+    newPutConfigurationSetTrackingOptionsResponse,
+
+    -- ** PutConfigurationSetVdmOptions
+    PutConfigurationSetVdmOptions (PutConfigurationSetVdmOptions'),
+    newPutConfigurationSetVdmOptions,
+    PutConfigurationSetVdmOptionsResponse (PutConfigurationSetVdmOptionsResponse'),
+    newPutConfigurationSetVdmOptionsResponse,
+
+    -- ** PutDedicatedIpInPool
+    PutDedicatedIpInPool (PutDedicatedIpInPool'),
+    newPutDedicatedIpInPool,
+    PutDedicatedIpInPoolResponse (PutDedicatedIpInPoolResponse'),
+    newPutDedicatedIpInPoolResponse,
+
+    -- ** PutDedicatedIpWarmupAttributes
+    PutDedicatedIpWarmupAttributes (PutDedicatedIpWarmupAttributes'),
+    newPutDedicatedIpWarmupAttributes,
+    PutDedicatedIpWarmupAttributesResponse (PutDedicatedIpWarmupAttributesResponse'),
+    newPutDedicatedIpWarmupAttributesResponse,
+
+    -- ** PutDeliverabilityDashboardOption
+    PutDeliverabilityDashboardOption (PutDeliverabilityDashboardOption'),
+    newPutDeliverabilityDashboardOption,
+    PutDeliverabilityDashboardOptionResponse (PutDeliverabilityDashboardOptionResponse'),
+    newPutDeliverabilityDashboardOptionResponse,
+
+    -- ** PutEmailIdentityConfigurationSetAttributes
+    PutEmailIdentityConfigurationSetAttributes (PutEmailIdentityConfigurationSetAttributes'),
+    newPutEmailIdentityConfigurationSetAttributes,
+    PutEmailIdentityConfigurationSetAttributesResponse (PutEmailIdentityConfigurationSetAttributesResponse'),
+    newPutEmailIdentityConfigurationSetAttributesResponse,
+
+    -- ** PutEmailIdentityDkimAttributes
+    PutEmailIdentityDkimAttributes (PutEmailIdentityDkimAttributes'),
+    newPutEmailIdentityDkimAttributes,
+    PutEmailIdentityDkimAttributesResponse (PutEmailIdentityDkimAttributesResponse'),
+    newPutEmailIdentityDkimAttributesResponse,
+
+    -- ** PutEmailIdentityDkimSigningAttributes
+    PutEmailIdentityDkimSigningAttributes (PutEmailIdentityDkimSigningAttributes'),
+    newPutEmailIdentityDkimSigningAttributes,
+    PutEmailIdentityDkimSigningAttributesResponse (PutEmailIdentityDkimSigningAttributesResponse'),
+    newPutEmailIdentityDkimSigningAttributesResponse,
+
+    -- ** PutEmailIdentityFeedbackAttributes
+    PutEmailIdentityFeedbackAttributes (PutEmailIdentityFeedbackAttributes'),
+    newPutEmailIdentityFeedbackAttributes,
+    PutEmailIdentityFeedbackAttributesResponse (PutEmailIdentityFeedbackAttributesResponse'),
+    newPutEmailIdentityFeedbackAttributesResponse,
+
+    -- ** PutEmailIdentityMailFromAttributes
+    PutEmailIdentityMailFromAttributes (PutEmailIdentityMailFromAttributes'),
+    newPutEmailIdentityMailFromAttributes,
+    PutEmailIdentityMailFromAttributesResponse (PutEmailIdentityMailFromAttributesResponse'),
+    newPutEmailIdentityMailFromAttributesResponse,
+
+    -- ** PutSuppressedDestination
+    PutSuppressedDestination (PutSuppressedDestination'),
+    newPutSuppressedDestination,
+    PutSuppressedDestinationResponse (PutSuppressedDestinationResponse'),
+    newPutSuppressedDestinationResponse,
+
+    -- ** SendBulkEmail
+    SendBulkEmail (SendBulkEmail'),
+    newSendBulkEmail,
+    SendBulkEmailResponse (SendBulkEmailResponse'),
+    newSendBulkEmailResponse,
+
+    -- ** SendCustomVerificationEmail
+    SendCustomVerificationEmail (SendCustomVerificationEmail'),
+    newSendCustomVerificationEmail,
+    SendCustomVerificationEmailResponse (SendCustomVerificationEmailResponse'),
+    newSendCustomVerificationEmailResponse,
+
+    -- ** SendEmail
+    SendEmail (SendEmail'),
+    newSendEmail,
+    SendEmailResponse (SendEmailResponse'),
+    newSendEmailResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** TestRenderEmailTemplate
+    TestRenderEmailTemplate (TestRenderEmailTemplate'),
+    newTestRenderEmailTemplate,
+    TestRenderEmailTemplateResponse (TestRenderEmailTemplateResponse'),
+    newTestRenderEmailTemplateResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateConfigurationSetEventDestination
+    UpdateConfigurationSetEventDestination (UpdateConfigurationSetEventDestination'),
+    newUpdateConfigurationSetEventDestination,
+    UpdateConfigurationSetEventDestinationResponse (UpdateConfigurationSetEventDestinationResponse'),
+    newUpdateConfigurationSetEventDestinationResponse,
+
+    -- ** UpdateContact
+    UpdateContact (UpdateContact'),
+    newUpdateContact,
+    UpdateContactResponse (UpdateContactResponse'),
+    newUpdateContactResponse,
+
+    -- ** UpdateContactList
+    UpdateContactList (UpdateContactList'),
+    newUpdateContactList,
+    UpdateContactListResponse (UpdateContactListResponse'),
+    newUpdateContactListResponse,
+
+    -- ** UpdateCustomVerificationEmailTemplate
+    UpdateCustomVerificationEmailTemplate (UpdateCustomVerificationEmailTemplate'),
+    newUpdateCustomVerificationEmailTemplate,
+    UpdateCustomVerificationEmailTemplateResponse (UpdateCustomVerificationEmailTemplateResponse'),
+    newUpdateCustomVerificationEmailTemplateResponse,
+
+    -- ** UpdateEmailIdentityPolicy
+    UpdateEmailIdentityPolicy (UpdateEmailIdentityPolicy'),
+    newUpdateEmailIdentityPolicy,
+    UpdateEmailIdentityPolicyResponse (UpdateEmailIdentityPolicyResponse'),
+    newUpdateEmailIdentityPolicyResponse,
+
+    -- ** UpdateEmailTemplate
+    UpdateEmailTemplate (UpdateEmailTemplate'),
+    newUpdateEmailTemplate,
+    UpdateEmailTemplateResponse (UpdateEmailTemplateResponse'),
+    newUpdateEmailTemplateResponse,
+
+    -- * Types
+
+    -- ** BehaviorOnMxFailure
+    BehaviorOnMxFailure (..),
+
+    -- ** BulkEmailStatus
+    BulkEmailStatus (..),
+
+    -- ** ContactLanguage
+    ContactLanguage (..),
+
+    -- ** ContactListImportAction
+    ContactListImportAction (..),
+
+    -- ** DataFormat
+    DataFormat (..),
+
+    -- ** DeliverabilityDashboardAccountStatus
+    DeliverabilityDashboardAccountStatus (..),
+
+    -- ** DeliverabilityTestStatus
+    DeliverabilityTestStatus (..),
+
+    -- ** DimensionValueSource
+    DimensionValueSource (..),
+
+    -- ** DkimSigningAttributesOrigin
+    DkimSigningAttributesOrigin (..),
+
+    -- ** DkimSigningKeyLength
+    DkimSigningKeyLength (..),
+
+    -- ** DkimStatus
+    DkimStatus (..),
+
+    -- ** EventType
+    EventType (..),
+
+    -- ** FeatureStatus
+    FeatureStatus (..),
+
+    -- ** IdentityType
+    IdentityType (..),
+
+    -- ** ImportDestinationType
+    ImportDestinationType (..),
+
+    -- ** JobStatus
+    JobStatus (..),
+
+    -- ** ListRecommendationsFilterKey
+    ListRecommendationsFilterKey (..),
+
+    -- ** MailFromDomainStatus
+    MailFromDomainStatus (..),
+
+    -- ** MailType
+    MailType (..),
+
+    -- ** Metric
+    Metric (..),
+
+    -- ** MetricDimensionName
+    MetricDimensionName (..),
+
+    -- ** MetricNamespace
+    MetricNamespace (..),
+
+    -- ** QueryErrorCode
+    QueryErrorCode (..),
+
+    -- ** RecommendationImpact
+    RecommendationImpact (..),
+
+    -- ** RecommendationStatus
+    RecommendationStatus (..),
+
+    -- ** RecommendationType
+    RecommendationType (..),
+
+    -- ** ReviewStatus
+    ReviewStatus (..),
+
+    -- ** ScalingMode
+    ScalingMode (..),
+
+    -- ** SubscriptionStatus
+    SubscriptionStatus (..),
+
+    -- ** SuppressionListImportAction
+    SuppressionListImportAction (..),
+
+    -- ** SuppressionListReason
+    SuppressionListReason (..),
+
+    -- ** TlsPolicy
+    TlsPolicy (..),
+
+    -- ** VerificationStatus
+    VerificationStatus (..),
+
+    -- ** WarmupStatus
+    WarmupStatus (..),
+
+    -- ** AccountDetails
+    AccountDetails (AccountDetails'),
+    newAccountDetails,
+
+    -- ** BatchGetMetricDataQuery
+    BatchGetMetricDataQuery (BatchGetMetricDataQuery'),
+    newBatchGetMetricDataQuery,
+
+    -- ** BlacklistEntry
+    BlacklistEntry (BlacklistEntry'),
+    newBlacklistEntry,
+
+    -- ** Body
+    Body (Body'),
+    newBody,
+
+    -- ** BulkEmailContent
+    BulkEmailContent (BulkEmailContent'),
+    newBulkEmailContent,
+
+    -- ** BulkEmailEntry
+    BulkEmailEntry (BulkEmailEntry'),
+    newBulkEmailEntry,
+
+    -- ** BulkEmailEntryResult
+    BulkEmailEntryResult (BulkEmailEntryResult'),
+    newBulkEmailEntryResult,
+
+    -- ** CloudWatchDestination
+    CloudWatchDestination (CloudWatchDestination'),
+    newCloudWatchDestination,
+
+    -- ** CloudWatchDimensionConfiguration
+    CloudWatchDimensionConfiguration (CloudWatchDimensionConfiguration'),
+    newCloudWatchDimensionConfiguration,
+
+    -- ** Contact
+    Contact (Contact'),
+    newContact,
+
+    -- ** ContactList
+    ContactList (ContactList'),
+    newContactList,
+
+    -- ** ContactListDestination
+    ContactListDestination (ContactListDestination'),
+    newContactListDestination,
+
+    -- ** Content
+    Content (Content'),
+    newContent,
+
+    -- ** CustomVerificationEmailTemplateMetadata
+    CustomVerificationEmailTemplateMetadata (CustomVerificationEmailTemplateMetadata'),
+    newCustomVerificationEmailTemplateMetadata,
+
+    -- ** DailyVolume
+    DailyVolume (DailyVolume'),
+    newDailyVolume,
+
+    -- ** DashboardAttributes
+    DashboardAttributes (DashboardAttributes'),
+    newDashboardAttributes,
+
+    -- ** DashboardOptions
+    DashboardOptions (DashboardOptions'),
+    newDashboardOptions,
+
+    -- ** DedicatedIp
+    DedicatedIp (DedicatedIp'),
+    newDedicatedIp,
+
+    -- ** DedicatedIpPool
+    DedicatedIpPool (DedicatedIpPool'),
+    newDedicatedIpPool,
+
+    -- ** DeliverabilityTestReport
+    DeliverabilityTestReport (DeliverabilityTestReport'),
+    newDeliverabilityTestReport,
+
+    -- ** DeliveryOptions
+    DeliveryOptions (DeliveryOptions'),
+    newDeliveryOptions,
+
+    -- ** Destination
+    Destination (Destination'),
+    newDestination,
+
+    -- ** DkimAttributes
+    DkimAttributes (DkimAttributes'),
+    newDkimAttributes,
+
+    -- ** DkimSigningAttributes
+    DkimSigningAttributes (DkimSigningAttributes'),
+    newDkimSigningAttributes,
+
+    -- ** DomainDeliverabilityCampaign
+    DomainDeliverabilityCampaign (DomainDeliverabilityCampaign'),
+    newDomainDeliverabilityCampaign,
+
+    -- ** DomainDeliverabilityTrackingOption
+    DomainDeliverabilityTrackingOption (DomainDeliverabilityTrackingOption'),
+    newDomainDeliverabilityTrackingOption,
+
+    -- ** DomainIspPlacement
+    DomainIspPlacement (DomainIspPlacement'),
+    newDomainIspPlacement,
+
+    -- ** EmailContent
+    EmailContent (EmailContent'),
+    newEmailContent,
+
+    -- ** EmailTemplateContent
+    EmailTemplateContent (EmailTemplateContent'),
+    newEmailTemplateContent,
+
+    -- ** EmailTemplateMetadata
+    EmailTemplateMetadata (EmailTemplateMetadata'),
+    newEmailTemplateMetadata,
+
+    -- ** EventDestination
+    EventDestination (EventDestination'),
+    newEventDestination,
+
+    -- ** EventDestinationDefinition
+    EventDestinationDefinition (EventDestinationDefinition'),
+    newEventDestinationDefinition,
+
+    -- ** FailureInfo
+    FailureInfo (FailureInfo'),
+    newFailureInfo,
+
+    -- ** GuardianAttributes
+    GuardianAttributes (GuardianAttributes'),
+    newGuardianAttributes,
+
+    -- ** GuardianOptions
+    GuardianOptions (GuardianOptions'),
+    newGuardianOptions,
+
+    -- ** IdentityInfo
+    IdentityInfo (IdentityInfo'),
+    newIdentityInfo,
+
+    -- ** ImportDataSource
+    ImportDataSource (ImportDataSource'),
+    newImportDataSource,
+
+    -- ** ImportDestination
+    ImportDestination (ImportDestination'),
+    newImportDestination,
+
+    -- ** ImportJobSummary
+    ImportJobSummary (ImportJobSummary'),
+    newImportJobSummary,
+
+    -- ** InboxPlacementTrackingOption
+    InboxPlacementTrackingOption (InboxPlacementTrackingOption'),
+    newInboxPlacementTrackingOption,
+
+    -- ** IspPlacement
+    IspPlacement (IspPlacement'),
+    newIspPlacement,
+
+    -- ** KinesisFirehoseDestination
+    KinesisFirehoseDestination (KinesisFirehoseDestination'),
+    newKinesisFirehoseDestination,
+
+    -- ** ListContactsFilter
+    ListContactsFilter (ListContactsFilter'),
+    newListContactsFilter,
+
+    -- ** ListManagementOptions
+    ListManagementOptions (ListManagementOptions'),
+    newListManagementOptions,
+
+    -- ** MailFromAttributes
+    MailFromAttributes (MailFromAttributes'),
+    newMailFromAttributes,
+
+    -- ** Message
+    Message (Message'),
+    newMessage,
+
+    -- ** MessageTag
+    MessageTag (MessageTag'),
+    newMessageTag,
+
+    -- ** MetricDataError
+    MetricDataError (MetricDataError'),
+    newMetricDataError,
+
+    -- ** MetricDataResult
+    MetricDataResult (MetricDataResult'),
+    newMetricDataResult,
+
+    -- ** OverallVolume
+    OverallVolume (OverallVolume'),
+    newOverallVolume,
+
+    -- ** PinpointDestination
+    PinpointDestination (PinpointDestination'),
+    newPinpointDestination,
+
+    -- ** PlacementStatistics
+    PlacementStatistics (PlacementStatistics'),
+    newPlacementStatistics,
+
+    -- ** RawMessage
+    RawMessage (RawMessage'),
+    newRawMessage,
+
+    -- ** Recommendation
+    Recommendation (Recommendation'),
+    newRecommendation,
+
+    -- ** ReplacementEmailContent
+    ReplacementEmailContent (ReplacementEmailContent'),
+    newReplacementEmailContent,
+
+    -- ** ReplacementTemplate
+    ReplacementTemplate (ReplacementTemplate'),
+    newReplacementTemplate,
+
+    -- ** ReputationOptions
+    ReputationOptions (ReputationOptions'),
+    newReputationOptions,
+
+    -- ** ReviewDetails
+    ReviewDetails (ReviewDetails'),
+    newReviewDetails,
+
+    -- ** SendQuota
+    SendQuota (SendQuota'),
+    newSendQuota,
+
+    -- ** SendingOptions
+    SendingOptions (SendingOptions'),
+    newSendingOptions,
+
+    -- ** SnsDestination
+    SnsDestination (SnsDestination'),
+    newSnsDestination,
+
+    -- ** SuppressedDestination
+    SuppressedDestination (SuppressedDestination'),
+    newSuppressedDestination,
+
+    -- ** SuppressedDestinationAttributes
+    SuppressedDestinationAttributes (SuppressedDestinationAttributes'),
+    newSuppressedDestinationAttributes,
+
+    -- ** SuppressedDestinationSummary
+    SuppressedDestinationSummary (SuppressedDestinationSummary'),
+    newSuppressedDestinationSummary,
+
+    -- ** SuppressionAttributes
+    SuppressionAttributes (SuppressionAttributes'),
+    newSuppressionAttributes,
+
+    -- ** SuppressionListDestination
+    SuppressionListDestination (SuppressionListDestination'),
+    newSuppressionListDestination,
+
+    -- ** SuppressionOptions
+    SuppressionOptions (SuppressionOptions'),
+    newSuppressionOptions,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** Template
+    Template (Template'),
+    newTemplate,
+
+    -- ** Topic
+    Topic (Topic'),
+    newTopic,
+
+    -- ** TopicFilter
+    TopicFilter (TopicFilter'),
+    newTopicFilter,
+
+    -- ** TopicPreference
+    TopicPreference (TopicPreference'),
+    newTopicPreference,
+
+    -- ** TrackingOptions
+    TrackingOptions (TrackingOptions'),
+    newTrackingOptions,
+
+    -- ** VdmAttributes
+    VdmAttributes (VdmAttributes'),
+    newVdmAttributes,
+
+    -- ** VdmOptions
+    VdmOptions (VdmOptions'),
+    newVdmOptions,
+
+    -- ** VolumeStatistics
+    VolumeStatistics (VolumeStatistics'),
+    newVolumeStatistics,
+  )
+where
+
+import Amazonka.SESV2.BatchGetMetricData
+import Amazonka.SESV2.CreateConfigurationSet
+import Amazonka.SESV2.CreateConfigurationSetEventDestination
+import Amazonka.SESV2.CreateContact
+import Amazonka.SESV2.CreateContactList
+import Amazonka.SESV2.CreateCustomVerificationEmailTemplate
+import Amazonka.SESV2.CreateDedicatedIpPool
+import Amazonka.SESV2.CreateDeliverabilityTestReport
+import Amazonka.SESV2.CreateEmailIdentity
+import Amazonka.SESV2.CreateEmailIdentityPolicy
+import Amazonka.SESV2.CreateEmailTemplate
+import Amazonka.SESV2.CreateImportJob
+import Amazonka.SESV2.DeleteConfigurationSet
+import Amazonka.SESV2.DeleteConfigurationSetEventDestination
+import Amazonka.SESV2.DeleteContact
+import Amazonka.SESV2.DeleteContactList
+import Amazonka.SESV2.DeleteCustomVerificationEmailTemplate
+import Amazonka.SESV2.DeleteDedicatedIpPool
+import Amazonka.SESV2.DeleteEmailIdentity
+import Amazonka.SESV2.DeleteEmailIdentityPolicy
+import Amazonka.SESV2.DeleteEmailTemplate
+import Amazonka.SESV2.DeleteSuppressedDestination
+import Amazonka.SESV2.GetAccount
+import Amazonka.SESV2.GetBlacklistReports
+import Amazonka.SESV2.GetConfigurationSet
+import Amazonka.SESV2.GetConfigurationSetEventDestinations
+import Amazonka.SESV2.GetContact
+import Amazonka.SESV2.GetContactList
+import Amazonka.SESV2.GetCustomVerificationEmailTemplate
+import Amazonka.SESV2.GetDedicatedIp
+import Amazonka.SESV2.GetDedicatedIpPool
+import Amazonka.SESV2.GetDedicatedIps
+import Amazonka.SESV2.GetDeliverabilityDashboardOptions
+import Amazonka.SESV2.GetDeliverabilityTestReport
+import Amazonka.SESV2.GetDomainDeliverabilityCampaign
+import Amazonka.SESV2.GetDomainStatisticsReport
+import Amazonka.SESV2.GetEmailIdentity
+import Amazonka.SESV2.GetEmailIdentityPolicies
+import Amazonka.SESV2.GetEmailTemplate
+import Amazonka.SESV2.GetImportJob
+import Amazonka.SESV2.GetSuppressedDestination
+import Amazonka.SESV2.Lens
+import Amazonka.SESV2.ListConfigurationSets
+import Amazonka.SESV2.ListContactLists
+import Amazonka.SESV2.ListContacts
+import Amazonka.SESV2.ListCustomVerificationEmailTemplates
+import Amazonka.SESV2.ListDedicatedIpPools
+import Amazonka.SESV2.ListDeliverabilityTestReports
+import Amazonka.SESV2.ListDomainDeliverabilityCampaigns
+import Amazonka.SESV2.ListEmailIdentities
+import Amazonka.SESV2.ListEmailTemplates
+import Amazonka.SESV2.ListImportJobs
+import Amazonka.SESV2.ListRecommendations
+import Amazonka.SESV2.ListSuppressedDestinations
+import Amazonka.SESV2.ListTagsForResource
+import Amazonka.SESV2.PutAccountDedicatedIpWarmupAttributes
+import Amazonka.SESV2.PutAccountDetails
+import Amazonka.SESV2.PutAccountSendingAttributes
+import Amazonka.SESV2.PutAccountSuppressionAttributes
+import Amazonka.SESV2.PutAccountVdmAttributes
+import Amazonka.SESV2.PutConfigurationSetDeliveryOptions
+import Amazonka.SESV2.PutConfigurationSetReputationOptions
+import Amazonka.SESV2.PutConfigurationSetSendingOptions
+import Amazonka.SESV2.PutConfigurationSetSuppressionOptions
+import Amazonka.SESV2.PutConfigurationSetTrackingOptions
+import Amazonka.SESV2.PutConfigurationSetVdmOptions
+import Amazonka.SESV2.PutDedicatedIpInPool
+import Amazonka.SESV2.PutDedicatedIpWarmupAttributes
+import Amazonka.SESV2.PutDeliverabilityDashboardOption
+import Amazonka.SESV2.PutEmailIdentityConfigurationSetAttributes
+import Amazonka.SESV2.PutEmailIdentityDkimAttributes
+import Amazonka.SESV2.PutEmailIdentityDkimSigningAttributes
+import Amazonka.SESV2.PutEmailIdentityFeedbackAttributes
+import Amazonka.SESV2.PutEmailIdentityMailFromAttributes
+import Amazonka.SESV2.PutSuppressedDestination
+import Amazonka.SESV2.SendBulkEmail
+import Amazonka.SESV2.SendCustomVerificationEmail
+import Amazonka.SESV2.SendEmail
+import Amazonka.SESV2.TagResource
+import Amazonka.SESV2.TestRenderEmailTemplate
+import Amazonka.SESV2.Types
+import Amazonka.SESV2.UntagResource
+import Amazonka.SESV2.UpdateConfigurationSetEventDestination
+import Amazonka.SESV2.UpdateContact
+import Amazonka.SESV2.UpdateContactList
+import Amazonka.SESV2.UpdateCustomVerificationEmailTemplate
+import Amazonka.SESV2.UpdateEmailIdentityPolicy
+import Amazonka.SESV2.UpdateEmailTemplate
+import Amazonka.SESV2.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 'SESV2'.
+
+-- $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/SESV2/BatchGetMetricData.hs b/gen/Amazonka/SESV2/BatchGetMetricData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/BatchGetMetricData.hs
@@ -0,0 +1,190 @@
+{-# 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.SESV2.BatchGetMetricData
+-- 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 batches of metric data collected based on your sending
+-- activity.
+--
+-- You can execute this operation no more than 16 times per second, and
+-- with at most 160 queries from the batches per second (cumulative).
+module Amazonka.SESV2.BatchGetMetricData
+  ( -- * Creating a Request
+    BatchGetMetricData (..),
+    newBatchGetMetricData,
+
+    -- * Request Lenses
+    batchGetMetricData_queries,
+
+    -- * Destructuring the Response
+    BatchGetMetricDataResponse (..),
+    newBatchGetMetricDataResponse,
+
+    -- * Response Lenses
+    batchGetMetricDataResponse_errors,
+    batchGetMetricDataResponse_results,
+    batchGetMetricDataResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to retrieve a batch of metric data.
+--
+-- /See:/ 'newBatchGetMetricData' smart constructor.
+data BatchGetMetricData = BatchGetMetricData'
+  { -- | A list of queries for metrics to be retrieved.
+    queries :: Prelude.NonEmpty BatchGetMetricDataQuery
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetMetricData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'queries', 'batchGetMetricData_queries' - A list of queries for metrics to be retrieved.
+newBatchGetMetricData ::
+  -- | 'queries'
+  Prelude.NonEmpty BatchGetMetricDataQuery ->
+  BatchGetMetricData
+newBatchGetMetricData pQueries_ =
+  BatchGetMetricData'
+    { queries =
+        Lens.coerced Lens.# pQueries_
+    }
+
+-- | A list of queries for metrics to be retrieved.
+batchGetMetricData_queries :: Lens.Lens' BatchGetMetricData (Prelude.NonEmpty BatchGetMetricDataQuery)
+batchGetMetricData_queries = Lens.lens (\BatchGetMetricData' {queries} -> queries) (\s@BatchGetMetricData' {} a -> s {queries = a} :: BatchGetMetricData) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchGetMetricData where
+  type
+    AWSResponse BatchGetMetricData =
+      BatchGetMetricDataResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchGetMetricDataResponse'
+            Prelude.<$> (x Data..?> "Errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Results" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BatchGetMetricData where
+  hashWithSalt _salt BatchGetMetricData' {..} =
+    _salt `Prelude.hashWithSalt` queries
+
+instance Prelude.NFData BatchGetMetricData where
+  rnf BatchGetMetricData' {..} = Prelude.rnf queries
+
+instance Data.ToHeaders BatchGetMetricData where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchGetMetricData where
+  toJSON BatchGetMetricData' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Queries" Data..= queries)]
+      )
+
+instance Data.ToPath BatchGetMetricData where
+  toPath = Prelude.const "/v2/email/metrics/batch"
+
+instance Data.ToQuery BatchGetMetricData where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | Represents the result of processing your metric data batch request
+--
+-- /See:/ 'newBatchGetMetricDataResponse' smart constructor.
+data BatchGetMetricDataResponse = BatchGetMetricDataResponse'
+  { -- | A list of @MetricDataError@ encountered while processing your metric
+    -- data batch request.
+    errors :: Prelude.Maybe [MetricDataError],
+    -- | A list of successfully retrieved @MetricDataResult@.
+    results :: Prelude.Maybe [MetricDataResult],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetMetricDataResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errors', 'batchGetMetricDataResponse_errors' - A list of @MetricDataError@ encountered while processing your metric
+-- data batch request.
+--
+-- 'results', 'batchGetMetricDataResponse_results' - A list of successfully retrieved @MetricDataResult@.
+--
+-- 'httpStatus', 'batchGetMetricDataResponse_httpStatus' - The response's http status code.
+newBatchGetMetricDataResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchGetMetricDataResponse
+newBatchGetMetricDataResponse pHttpStatus_ =
+  BatchGetMetricDataResponse'
+    { errors =
+        Prelude.Nothing,
+      results = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of @MetricDataError@ encountered while processing your metric
+-- data batch request.
+batchGetMetricDataResponse_errors :: Lens.Lens' BatchGetMetricDataResponse (Prelude.Maybe [MetricDataError])
+batchGetMetricDataResponse_errors = Lens.lens (\BatchGetMetricDataResponse' {errors} -> errors) (\s@BatchGetMetricDataResponse' {} a -> s {errors = a} :: BatchGetMetricDataResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of successfully retrieved @MetricDataResult@.
+batchGetMetricDataResponse_results :: Lens.Lens' BatchGetMetricDataResponse (Prelude.Maybe [MetricDataResult])
+batchGetMetricDataResponse_results = Lens.lens (\BatchGetMetricDataResponse' {results} -> results) (\s@BatchGetMetricDataResponse' {} a -> s {results = a} :: BatchGetMetricDataResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchGetMetricDataResponse_httpStatus :: Lens.Lens' BatchGetMetricDataResponse Prelude.Int
+batchGetMetricDataResponse_httpStatus = Lens.lens (\BatchGetMetricDataResponse' {httpStatus} -> httpStatus) (\s@BatchGetMetricDataResponse' {} a -> s {httpStatus = a} :: BatchGetMetricDataResponse)
+
+instance Prelude.NFData BatchGetMetricDataResponse where
+  rnf BatchGetMetricDataResponse' {..} =
+    Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf results
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/CreateConfigurationSet.hs b/gen/Amazonka/SESV2/CreateConfigurationSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/CreateConfigurationSet.hs
@@ -0,0 +1,293 @@
+{-# 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.SESV2.CreateConfigurationSet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create a configuration set. /Configuration sets/ are groups of rules
+-- that you can apply to the emails that you send. You apply a
+-- configuration set to an email by specifying the name of the
+-- configuration set when you call the Amazon SES API v2. When you apply a
+-- configuration set to an email, all of the rules in that configuration
+-- set are applied to the email.
+module Amazonka.SESV2.CreateConfigurationSet
+  ( -- * Creating a Request
+    CreateConfigurationSet (..),
+    newCreateConfigurationSet,
+
+    -- * Request Lenses
+    createConfigurationSet_deliveryOptions,
+    createConfigurationSet_reputationOptions,
+    createConfigurationSet_sendingOptions,
+    createConfigurationSet_suppressionOptions,
+    createConfigurationSet_tags,
+    createConfigurationSet_trackingOptions,
+    createConfigurationSet_vdmOptions,
+    createConfigurationSet_configurationSetName,
+
+    -- * Destructuring the Response
+    CreateConfigurationSetResponse (..),
+    newCreateConfigurationSetResponse,
+
+    -- * Response Lenses
+    createConfigurationSetResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to create a configuration set.
+--
+-- /See:/ 'newCreateConfigurationSet' smart constructor.
+data CreateConfigurationSet = CreateConfigurationSet'
+  { -- | An object that defines the dedicated IP pool that is used to send emails
+    -- that you send using the configuration set.
+    deliveryOptions :: Prelude.Maybe DeliveryOptions,
+    -- | An object that defines whether or not Amazon SES collects reputation
+    -- metrics for the emails that you send that use the configuration set.
+    reputationOptions :: Prelude.Maybe ReputationOptions,
+    -- | An object that defines whether or not Amazon SES can send email that you
+    -- send using the configuration set.
+    sendingOptions :: Prelude.Maybe SendingOptions,
+    suppressionOptions :: Prelude.Maybe SuppressionOptions,
+    -- | An array of objects that define the tags (keys and values) to associate
+    -- with the configuration set.
+    tags :: Prelude.Maybe [Tag],
+    -- | An object that defines the open and click tracking options for emails
+    -- that you send using the configuration set.
+    trackingOptions :: Prelude.Maybe TrackingOptions,
+    -- | An object that defines the VDM options for emails that you send using
+    -- the configuration set.
+    vdmOptions :: Prelude.Maybe VdmOptions,
+    -- | The name of the configuration set. The name can contain up to 64
+    -- alphanumeric characters, including letters, numbers, hyphens (-) and
+    -- underscores (_) only.
+    configurationSetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateConfigurationSet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deliveryOptions', 'createConfigurationSet_deliveryOptions' - An object that defines the dedicated IP pool that is used to send emails
+-- that you send using the configuration set.
+--
+-- 'reputationOptions', 'createConfigurationSet_reputationOptions' - An object that defines whether or not Amazon SES collects reputation
+-- metrics for the emails that you send that use the configuration set.
+--
+-- 'sendingOptions', 'createConfigurationSet_sendingOptions' - An object that defines whether or not Amazon SES can send email that you
+-- send using the configuration set.
+--
+-- 'suppressionOptions', 'createConfigurationSet_suppressionOptions' - Undocumented member.
+--
+-- 'tags', 'createConfigurationSet_tags' - An array of objects that define the tags (keys and values) to associate
+-- with the configuration set.
+--
+-- 'trackingOptions', 'createConfigurationSet_trackingOptions' - An object that defines the open and click tracking options for emails
+-- that you send using the configuration set.
+--
+-- 'vdmOptions', 'createConfigurationSet_vdmOptions' - An object that defines the VDM options for emails that you send using
+-- the configuration set.
+--
+-- 'configurationSetName', 'createConfigurationSet_configurationSetName' - The name of the configuration set. The name can contain up to 64
+-- alphanumeric characters, including letters, numbers, hyphens (-) and
+-- underscores (_) only.
+newCreateConfigurationSet ::
+  -- | 'configurationSetName'
+  Prelude.Text ->
+  CreateConfigurationSet
+newCreateConfigurationSet pConfigurationSetName_ =
+  CreateConfigurationSet'
+    { deliveryOptions =
+        Prelude.Nothing,
+      reputationOptions = Prelude.Nothing,
+      sendingOptions = Prelude.Nothing,
+      suppressionOptions = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      trackingOptions = Prelude.Nothing,
+      vdmOptions = Prelude.Nothing,
+      configurationSetName = pConfigurationSetName_
+    }
+
+-- | An object that defines the dedicated IP pool that is used to send emails
+-- that you send using the configuration set.
+createConfigurationSet_deliveryOptions :: Lens.Lens' CreateConfigurationSet (Prelude.Maybe DeliveryOptions)
+createConfigurationSet_deliveryOptions = Lens.lens (\CreateConfigurationSet' {deliveryOptions} -> deliveryOptions) (\s@CreateConfigurationSet' {} a -> s {deliveryOptions = a} :: CreateConfigurationSet)
+
+-- | An object that defines whether or not Amazon SES collects reputation
+-- metrics for the emails that you send that use the configuration set.
+createConfigurationSet_reputationOptions :: Lens.Lens' CreateConfigurationSet (Prelude.Maybe ReputationOptions)
+createConfigurationSet_reputationOptions = Lens.lens (\CreateConfigurationSet' {reputationOptions} -> reputationOptions) (\s@CreateConfigurationSet' {} a -> s {reputationOptions = a} :: CreateConfigurationSet)
+
+-- | An object that defines whether or not Amazon SES can send email that you
+-- send using the configuration set.
+createConfigurationSet_sendingOptions :: Lens.Lens' CreateConfigurationSet (Prelude.Maybe SendingOptions)
+createConfigurationSet_sendingOptions = Lens.lens (\CreateConfigurationSet' {sendingOptions} -> sendingOptions) (\s@CreateConfigurationSet' {} a -> s {sendingOptions = a} :: CreateConfigurationSet)
+
+-- | Undocumented member.
+createConfigurationSet_suppressionOptions :: Lens.Lens' CreateConfigurationSet (Prelude.Maybe SuppressionOptions)
+createConfigurationSet_suppressionOptions = Lens.lens (\CreateConfigurationSet' {suppressionOptions} -> suppressionOptions) (\s@CreateConfigurationSet' {} a -> s {suppressionOptions = a} :: CreateConfigurationSet)
+
+-- | An array of objects that define the tags (keys and values) to associate
+-- with the configuration set.
+createConfigurationSet_tags :: Lens.Lens' CreateConfigurationSet (Prelude.Maybe [Tag])
+createConfigurationSet_tags = Lens.lens (\CreateConfigurationSet' {tags} -> tags) (\s@CreateConfigurationSet' {} a -> s {tags = a} :: CreateConfigurationSet) Prelude.. Lens.mapping Lens.coerced
+
+-- | An object that defines the open and click tracking options for emails
+-- that you send using the configuration set.
+createConfigurationSet_trackingOptions :: Lens.Lens' CreateConfigurationSet (Prelude.Maybe TrackingOptions)
+createConfigurationSet_trackingOptions = Lens.lens (\CreateConfigurationSet' {trackingOptions} -> trackingOptions) (\s@CreateConfigurationSet' {} a -> s {trackingOptions = a} :: CreateConfigurationSet)
+
+-- | An object that defines the VDM options for emails that you send using
+-- the configuration set.
+createConfigurationSet_vdmOptions :: Lens.Lens' CreateConfigurationSet (Prelude.Maybe VdmOptions)
+createConfigurationSet_vdmOptions = Lens.lens (\CreateConfigurationSet' {vdmOptions} -> vdmOptions) (\s@CreateConfigurationSet' {} a -> s {vdmOptions = a} :: CreateConfigurationSet)
+
+-- | The name of the configuration set. The name can contain up to 64
+-- alphanumeric characters, including letters, numbers, hyphens (-) and
+-- underscores (_) only.
+createConfigurationSet_configurationSetName :: Lens.Lens' CreateConfigurationSet Prelude.Text
+createConfigurationSet_configurationSetName = Lens.lens (\CreateConfigurationSet' {configurationSetName} -> configurationSetName) (\s@CreateConfigurationSet' {} a -> s {configurationSetName = a} :: CreateConfigurationSet)
+
+instance Core.AWSRequest CreateConfigurationSet where
+  type
+    AWSResponse CreateConfigurationSet =
+      CreateConfigurationSetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CreateConfigurationSetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateConfigurationSet where
+  hashWithSalt _salt CreateConfigurationSet' {..} =
+    _salt
+      `Prelude.hashWithSalt` deliveryOptions
+      `Prelude.hashWithSalt` reputationOptions
+      `Prelude.hashWithSalt` sendingOptions
+      `Prelude.hashWithSalt` suppressionOptions
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` trackingOptions
+      `Prelude.hashWithSalt` vdmOptions
+      `Prelude.hashWithSalt` configurationSetName
+
+instance Prelude.NFData CreateConfigurationSet where
+  rnf CreateConfigurationSet' {..} =
+    Prelude.rnf deliveryOptions
+      `Prelude.seq` Prelude.rnf reputationOptions
+      `Prelude.seq` Prelude.rnf sendingOptions
+      `Prelude.seq` Prelude.rnf suppressionOptions
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf trackingOptions
+      `Prelude.seq` Prelude.rnf vdmOptions
+      `Prelude.seq` Prelude.rnf configurationSetName
+
+instance Data.ToHeaders CreateConfigurationSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateConfigurationSet where
+  toJSON CreateConfigurationSet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DeliveryOptions" Data..=)
+              Prelude.<$> deliveryOptions,
+            ("ReputationOptions" Data..=)
+              Prelude.<$> reputationOptions,
+            ("SendingOptions" Data..=)
+              Prelude.<$> sendingOptions,
+            ("SuppressionOptions" Data..=)
+              Prelude.<$> suppressionOptions,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("TrackingOptions" Data..=)
+              Prelude.<$> trackingOptions,
+            ("VdmOptions" Data..=) Prelude.<$> vdmOptions,
+            Prelude.Just
+              ( "ConfigurationSetName"
+                  Data..= configurationSetName
+              )
+          ]
+      )
+
+instance Data.ToPath CreateConfigurationSet where
+  toPath = Prelude.const "/v2/email/configuration-sets"
+
+instance Data.ToQuery CreateConfigurationSet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newCreateConfigurationSetResponse' smart constructor.
+data CreateConfigurationSetResponse = CreateConfigurationSetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateConfigurationSetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createConfigurationSetResponse_httpStatus' - The response's http status code.
+newCreateConfigurationSetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateConfigurationSetResponse
+newCreateConfigurationSetResponse pHttpStatus_ =
+  CreateConfigurationSetResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+createConfigurationSetResponse_httpStatus :: Lens.Lens' CreateConfigurationSetResponse Prelude.Int
+createConfigurationSetResponse_httpStatus = Lens.lens (\CreateConfigurationSetResponse' {httpStatus} -> httpStatus) (\s@CreateConfigurationSetResponse' {} a -> s {httpStatus = a} :: CreateConfigurationSetResponse)
+
+instance
+  Prelude.NFData
+    CreateConfigurationSetResponse
+  where
+  rnf CreateConfigurationSetResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/CreateConfigurationSetEventDestination.hs b/gen/Amazonka/SESV2/CreateConfigurationSetEventDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/CreateConfigurationSetEventDestination.hs
@@ -0,0 +1,245 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.CreateConfigurationSetEventDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create an event destination. /Events/ include message sends, deliveries,
+-- opens, clicks, bounces, and complaints. /Event destinations/ are places
+-- that you can send information about these events to. For example, you
+-- can send event data to Amazon SNS to receive notifications when you
+-- receive bounces or complaints, or you can use Amazon Kinesis Data
+-- Firehose to stream data to Amazon S3 for long-term storage.
+--
+-- A single configuration set can include more than one event destination.
+module Amazonka.SESV2.CreateConfigurationSetEventDestination
+  ( -- * Creating a Request
+    CreateConfigurationSetEventDestination (..),
+    newCreateConfigurationSetEventDestination,
+
+    -- * Request Lenses
+    createConfigurationSetEventDestination_configurationSetName,
+    createConfigurationSetEventDestination_eventDestinationName,
+    createConfigurationSetEventDestination_eventDestination,
+
+    -- * Destructuring the Response
+    CreateConfigurationSetEventDestinationResponse (..),
+    newCreateConfigurationSetEventDestinationResponse,
+
+    -- * Response Lenses
+    createConfigurationSetEventDestinationResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to add an event destination to a configuration set.
+--
+-- /See:/ 'newCreateConfigurationSetEventDestination' smart constructor.
+data CreateConfigurationSetEventDestination = CreateConfigurationSetEventDestination'
+  { -- | The name of the configuration set .
+    configurationSetName :: Prelude.Text,
+    -- | A name that identifies the event destination within the configuration
+    -- set.
+    eventDestinationName :: Prelude.Text,
+    -- | An object that defines the event destination.
+    eventDestination :: EventDestinationDefinition
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateConfigurationSetEventDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configurationSetName', 'createConfigurationSetEventDestination_configurationSetName' - The name of the configuration set .
+--
+-- 'eventDestinationName', 'createConfigurationSetEventDestination_eventDestinationName' - A name that identifies the event destination within the configuration
+-- set.
+--
+-- 'eventDestination', 'createConfigurationSetEventDestination_eventDestination' - An object that defines the event destination.
+newCreateConfigurationSetEventDestination ::
+  -- | 'configurationSetName'
+  Prelude.Text ->
+  -- | 'eventDestinationName'
+  Prelude.Text ->
+  -- | 'eventDestination'
+  EventDestinationDefinition ->
+  CreateConfigurationSetEventDestination
+newCreateConfigurationSetEventDestination
+  pConfigurationSetName_
+  pEventDestinationName_
+  pEventDestination_ =
+    CreateConfigurationSetEventDestination'
+      { configurationSetName =
+          pConfigurationSetName_,
+        eventDestinationName =
+          pEventDestinationName_,
+        eventDestination =
+          pEventDestination_
+      }
+
+-- | The name of the configuration set .
+createConfigurationSetEventDestination_configurationSetName :: Lens.Lens' CreateConfigurationSetEventDestination Prelude.Text
+createConfigurationSetEventDestination_configurationSetName = Lens.lens (\CreateConfigurationSetEventDestination' {configurationSetName} -> configurationSetName) (\s@CreateConfigurationSetEventDestination' {} a -> s {configurationSetName = a} :: CreateConfigurationSetEventDestination)
+
+-- | A name that identifies the event destination within the configuration
+-- set.
+createConfigurationSetEventDestination_eventDestinationName :: Lens.Lens' CreateConfigurationSetEventDestination Prelude.Text
+createConfigurationSetEventDestination_eventDestinationName = Lens.lens (\CreateConfigurationSetEventDestination' {eventDestinationName} -> eventDestinationName) (\s@CreateConfigurationSetEventDestination' {} a -> s {eventDestinationName = a} :: CreateConfigurationSetEventDestination)
+
+-- | An object that defines the event destination.
+createConfigurationSetEventDestination_eventDestination :: Lens.Lens' CreateConfigurationSetEventDestination EventDestinationDefinition
+createConfigurationSetEventDestination_eventDestination = Lens.lens (\CreateConfigurationSetEventDestination' {eventDestination} -> eventDestination) (\s@CreateConfigurationSetEventDestination' {} a -> s {eventDestination = a} :: CreateConfigurationSetEventDestination)
+
+instance
+  Core.AWSRequest
+    CreateConfigurationSetEventDestination
+  where
+  type
+    AWSResponse
+      CreateConfigurationSetEventDestination =
+      CreateConfigurationSetEventDestinationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CreateConfigurationSetEventDestinationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateConfigurationSetEventDestination
+  where
+  hashWithSalt
+    _salt
+    CreateConfigurationSetEventDestination' {..} =
+      _salt
+        `Prelude.hashWithSalt` configurationSetName
+        `Prelude.hashWithSalt` eventDestinationName
+        `Prelude.hashWithSalt` eventDestination
+
+instance
+  Prelude.NFData
+    CreateConfigurationSetEventDestination
+  where
+  rnf CreateConfigurationSetEventDestination' {..} =
+    Prelude.rnf configurationSetName
+      `Prelude.seq` Prelude.rnf eventDestinationName
+      `Prelude.seq` Prelude.rnf eventDestination
+
+instance
+  Data.ToHeaders
+    CreateConfigurationSetEventDestination
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    CreateConfigurationSetEventDestination
+  where
+  toJSON CreateConfigurationSetEventDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "EventDestinationName"
+                  Data..= eventDestinationName
+              ),
+            Prelude.Just
+              ("EventDestination" Data..= eventDestination)
+          ]
+      )
+
+instance
+  Data.ToPath
+    CreateConfigurationSetEventDestination
+  where
+  toPath CreateConfigurationSetEventDestination' {..} =
+    Prelude.mconcat
+      [ "/v2/email/configuration-sets/",
+        Data.toBS configurationSetName,
+        "/event-destinations"
+      ]
+
+instance
+  Data.ToQuery
+    CreateConfigurationSetEventDestination
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newCreateConfigurationSetEventDestinationResponse' smart constructor.
+data CreateConfigurationSetEventDestinationResponse = CreateConfigurationSetEventDestinationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateConfigurationSetEventDestinationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createConfigurationSetEventDestinationResponse_httpStatus' - The response's http status code.
+newCreateConfigurationSetEventDestinationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateConfigurationSetEventDestinationResponse
+newCreateConfigurationSetEventDestinationResponse
+  pHttpStatus_ =
+    CreateConfigurationSetEventDestinationResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+createConfigurationSetEventDestinationResponse_httpStatus :: Lens.Lens' CreateConfigurationSetEventDestinationResponse Prelude.Int
+createConfigurationSetEventDestinationResponse_httpStatus = Lens.lens (\CreateConfigurationSetEventDestinationResponse' {httpStatus} -> httpStatus) (\s@CreateConfigurationSetEventDestinationResponse' {} a -> s {httpStatus = a} :: CreateConfigurationSetEventDestinationResponse)
+
+instance
+  Prelude.NFData
+    CreateConfigurationSetEventDestinationResponse
+  where
+  rnf
+    CreateConfigurationSetEventDestinationResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/CreateContact.hs b/gen/Amazonka/SESV2/CreateContact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/CreateContact.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.SESV2.CreateContact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a contact, which is an end-user who is receiving the email, and
+-- adds them to a contact list.
+module Amazonka.SESV2.CreateContact
+  ( -- * Creating a Request
+    CreateContact (..),
+    newCreateContact,
+
+    -- * Request Lenses
+    createContact_attributesData,
+    createContact_topicPreferences,
+    createContact_unsubscribeAll,
+    createContact_contactListName,
+    createContact_emailAddress,
+
+    -- * Destructuring the Response
+    CreateContactResponse (..),
+    newCreateContactResponse,
+
+    -- * Response Lenses
+    createContactResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | /See:/ 'newCreateContact' smart constructor.
+data CreateContact = CreateContact'
+  { -- | The attribute data attached to a contact.
+    attributesData :: Prelude.Maybe Prelude.Text,
+    -- | The contact\'s preferences for being opted-in to or opted-out of topics.
+    topicPreferences :: Prelude.Maybe [TopicPreference],
+    -- | A boolean value status noting if the contact is unsubscribed from all
+    -- contact list topics.
+    unsubscribeAll :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the contact list to which the contact should be added.
+    contactListName :: Prelude.Text,
+    -- | The contact\'s email address.
+    emailAddress :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateContact' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributesData', 'createContact_attributesData' - The attribute data attached to a contact.
+--
+-- 'topicPreferences', 'createContact_topicPreferences' - The contact\'s preferences for being opted-in to or opted-out of topics.
+--
+-- 'unsubscribeAll', 'createContact_unsubscribeAll' - A boolean value status noting if the contact is unsubscribed from all
+-- contact list topics.
+--
+-- 'contactListName', 'createContact_contactListName' - The name of the contact list to which the contact should be added.
+--
+-- 'emailAddress', 'createContact_emailAddress' - The contact\'s email address.
+newCreateContact ::
+  -- | 'contactListName'
+  Prelude.Text ->
+  -- | 'emailAddress'
+  Prelude.Text ->
+  CreateContact
+newCreateContact pContactListName_ pEmailAddress_ =
+  CreateContact'
+    { attributesData = Prelude.Nothing,
+      topicPreferences = Prelude.Nothing,
+      unsubscribeAll = Prelude.Nothing,
+      contactListName = pContactListName_,
+      emailAddress = pEmailAddress_
+    }
+
+-- | The attribute data attached to a contact.
+createContact_attributesData :: Lens.Lens' CreateContact (Prelude.Maybe Prelude.Text)
+createContact_attributesData = Lens.lens (\CreateContact' {attributesData} -> attributesData) (\s@CreateContact' {} a -> s {attributesData = a} :: CreateContact)
+
+-- | The contact\'s preferences for being opted-in to or opted-out of topics.
+createContact_topicPreferences :: Lens.Lens' CreateContact (Prelude.Maybe [TopicPreference])
+createContact_topicPreferences = Lens.lens (\CreateContact' {topicPreferences} -> topicPreferences) (\s@CreateContact' {} a -> s {topicPreferences = a} :: CreateContact) Prelude.. Lens.mapping Lens.coerced
+
+-- | A boolean value status noting if the contact is unsubscribed from all
+-- contact list topics.
+createContact_unsubscribeAll :: Lens.Lens' CreateContact (Prelude.Maybe Prelude.Bool)
+createContact_unsubscribeAll = Lens.lens (\CreateContact' {unsubscribeAll} -> unsubscribeAll) (\s@CreateContact' {} a -> s {unsubscribeAll = a} :: CreateContact)
+
+-- | The name of the contact list to which the contact should be added.
+createContact_contactListName :: Lens.Lens' CreateContact Prelude.Text
+createContact_contactListName = Lens.lens (\CreateContact' {contactListName} -> contactListName) (\s@CreateContact' {} a -> s {contactListName = a} :: CreateContact)
+
+-- | The contact\'s email address.
+createContact_emailAddress :: Lens.Lens' CreateContact Prelude.Text
+createContact_emailAddress = Lens.lens (\CreateContact' {emailAddress} -> emailAddress) (\s@CreateContact' {} a -> s {emailAddress = a} :: CreateContact)
+
+instance Core.AWSRequest CreateContact where
+  type
+    AWSResponse CreateContact =
+      CreateContactResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CreateContactResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateContact where
+  hashWithSalt _salt CreateContact' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributesData
+      `Prelude.hashWithSalt` topicPreferences
+      `Prelude.hashWithSalt` unsubscribeAll
+      `Prelude.hashWithSalt` contactListName
+      `Prelude.hashWithSalt` emailAddress
+
+instance Prelude.NFData CreateContact where
+  rnf CreateContact' {..} =
+    Prelude.rnf attributesData
+      `Prelude.seq` Prelude.rnf topicPreferences
+      `Prelude.seq` Prelude.rnf unsubscribeAll
+      `Prelude.seq` Prelude.rnf contactListName
+      `Prelude.seq` Prelude.rnf emailAddress
+
+instance Data.ToHeaders CreateContact where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateContact where
+  toJSON CreateContact' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AttributesData" Data..=)
+              Prelude.<$> attributesData,
+            ("TopicPreferences" Data..=)
+              Prelude.<$> topicPreferences,
+            ("UnsubscribeAll" Data..=)
+              Prelude.<$> unsubscribeAll,
+            Prelude.Just ("EmailAddress" Data..= emailAddress)
+          ]
+      )
+
+instance Data.ToPath CreateContact where
+  toPath CreateContact' {..} =
+    Prelude.mconcat
+      [ "/v2/email/contact-lists/",
+        Data.toBS contactListName,
+        "/contacts"
+      ]
+
+instance Data.ToQuery CreateContact where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateContactResponse' smart constructor.
+data CreateContactResponse = CreateContactResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateContactResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createContactResponse_httpStatus' - The response's http status code.
+newCreateContactResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateContactResponse
+newCreateContactResponse pHttpStatus_ =
+  CreateContactResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+createContactResponse_httpStatus :: Lens.Lens' CreateContactResponse Prelude.Int
+createContactResponse_httpStatus = Lens.lens (\CreateContactResponse' {httpStatus} -> httpStatus) (\s@CreateContactResponse' {} a -> s {httpStatus = a} :: CreateContactResponse)
+
+instance Prelude.NFData CreateContactResponse where
+  rnf CreateContactResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/CreateContactList.hs b/gen/Amazonka/SESV2/CreateContactList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/CreateContactList.hs
@@ -0,0 +1,200 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.CreateContactList
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a contact list.
+module Amazonka.SESV2.CreateContactList
+  ( -- * Creating a Request
+    CreateContactList (..),
+    newCreateContactList,
+
+    -- * Request Lenses
+    createContactList_description,
+    createContactList_tags,
+    createContactList_topics,
+    createContactList_contactListName,
+
+    -- * Destructuring the Response
+    CreateContactListResponse (..),
+    newCreateContactListResponse,
+
+    -- * Response Lenses
+    createContactListResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | /See:/ 'newCreateContactList' smart constructor.
+data CreateContactList = CreateContactList'
+  { -- | A description of what the contact list is about.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The tags associated with a contact list.
+    tags :: Prelude.Maybe [Tag],
+    -- | An interest group, theme, or label within a list. A contact list can
+    -- have multiple topics.
+    topics :: Prelude.Maybe [Topic],
+    -- | The name of the contact list.
+    contactListName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateContactList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createContactList_description' - A description of what the contact list is about.
+--
+-- 'tags', 'createContactList_tags' - The tags associated with a contact list.
+--
+-- 'topics', 'createContactList_topics' - An interest group, theme, or label within a list. A contact list can
+-- have multiple topics.
+--
+-- 'contactListName', 'createContactList_contactListName' - The name of the contact list.
+newCreateContactList ::
+  -- | 'contactListName'
+  Prelude.Text ->
+  CreateContactList
+newCreateContactList pContactListName_ =
+  CreateContactList'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      topics = Prelude.Nothing,
+      contactListName = pContactListName_
+    }
+
+-- | A description of what the contact list is about.
+createContactList_description :: Lens.Lens' CreateContactList (Prelude.Maybe Prelude.Text)
+createContactList_description = Lens.lens (\CreateContactList' {description} -> description) (\s@CreateContactList' {} a -> s {description = a} :: CreateContactList)
+
+-- | The tags associated with a contact list.
+createContactList_tags :: Lens.Lens' CreateContactList (Prelude.Maybe [Tag])
+createContactList_tags = Lens.lens (\CreateContactList' {tags} -> tags) (\s@CreateContactList' {} a -> s {tags = a} :: CreateContactList) Prelude.. Lens.mapping Lens.coerced
+
+-- | An interest group, theme, or label within a list. A contact list can
+-- have multiple topics.
+createContactList_topics :: Lens.Lens' CreateContactList (Prelude.Maybe [Topic])
+createContactList_topics = Lens.lens (\CreateContactList' {topics} -> topics) (\s@CreateContactList' {} a -> s {topics = a} :: CreateContactList) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the contact list.
+createContactList_contactListName :: Lens.Lens' CreateContactList Prelude.Text
+createContactList_contactListName = Lens.lens (\CreateContactList' {contactListName} -> contactListName) (\s@CreateContactList' {} a -> s {contactListName = a} :: CreateContactList)
+
+instance Core.AWSRequest CreateContactList where
+  type
+    AWSResponse CreateContactList =
+      CreateContactListResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CreateContactListResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateContactList where
+  hashWithSalt _salt CreateContactList' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` topics
+      `Prelude.hashWithSalt` contactListName
+
+instance Prelude.NFData CreateContactList where
+  rnf CreateContactList' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf topics
+      `Prelude.seq` Prelude.rnf contactListName
+
+instance Data.ToHeaders CreateContactList where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateContactList where
+  toJSON CreateContactList' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("Topics" Data..=) Prelude.<$> topics,
+            Prelude.Just
+              ("ContactListName" Data..= contactListName)
+          ]
+      )
+
+instance Data.ToPath CreateContactList where
+  toPath = Prelude.const "/v2/email/contact-lists"
+
+instance Data.ToQuery CreateContactList where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateContactListResponse' smart constructor.
+data CreateContactListResponse = CreateContactListResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateContactListResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createContactListResponse_httpStatus' - The response's http status code.
+newCreateContactListResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateContactListResponse
+newCreateContactListResponse pHttpStatus_ =
+  CreateContactListResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+createContactListResponse_httpStatus :: Lens.Lens' CreateContactListResponse Prelude.Int
+createContactListResponse_httpStatus = Lens.lens (\CreateContactListResponse' {httpStatus} -> httpStatus) (\s@CreateContactListResponse' {} a -> s {httpStatus = a} :: CreateContactListResponse)
+
+instance Prelude.NFData CreateContactListResponse where
+  rnf CreateContactListResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/CreateCustomVerificationEmailTemplate.hs b/gen/Amazonka/SESV2/CreateCustomVerificationEmailTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/CreateCustomVerificationEmailTemplate.hs
@@ -0,0 +1,311 @@
+{-# 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.SESV2.CreateCustomVerificationEmailTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new custom verification email template.
+--
+-- For more information about custom verification email templates, see
+-- <https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#send-email-verify-address-custom Using custom verification email templates>
+-- in the /Amazon SES Developer Guide/.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.CreateCustomVerificationEmailTemplate
+  ( -- * Creating a Request
+    CreateCustomVerificationEmailTemplate (..),
+    newCreateCustomVerificationEmailTemplate,
+
+    -- * Request Lenses
+    createCustomVerificationEmailTemplate_templateName,
+    createCustomVerificationEmailTemplate_fromEmailAddress,
+    createCustomVerificationEmailTemplate_templateSubject,
+    createCustomVerificationEmailTemplate_templateContent,
+    createCustomVerificationEmailTemplate_successRedirectionURL,
+    createCustomVerificationEmailTemplate_failureRedirectionURL,
+
+    -- * Destructuring the Response
+    CreateCustomVerificationEmailTemplateResponse (..),
+    newCreateCustomVerificationEmailTemplateResponse,
+
+    -- * Response Lenses
+    createCustomVerificationEmailTemplateResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to create a custom verification email template.
+--
+-- /See:/ 'newCreateCustomVerificationEmailTemplate' smart constructor.
+data CreateCustomVerificationEmailTemplate = CreateCustomVerificationEmailTemplate'
+  { -- | The name of the custom verification email template.
+    templateName :: Prelude.Text,
+    -- | The email address that the custom verification email is sent from.
+    fromEmailAddress :: Prelude.Text,
+    -- | The subject line of the custom verification email.
+    templateSubject :: Prelude.Text,
+    -- | The content of the custom verification email. The total size of the
+    -- email must be less than 10 MB. The message body may contain HTML, with
+    -- some limitations. For more information, see
+    -- <https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#send-email-verify-address-custom-faq Custom verification email frequently asked questions>
+    -- in the /Amazon SES Developer Guide/.
+    templateContent :: Prelude.Text,
+    -- | The URL that the recipient of the verification email is sent to if his
+    -- or her address is successfully verified.
+    successRedirectionURL :: Prelude.Text,
+    -- | The URL that the recipient of the verification email is sent to if his
+    -- or her address is not successfully verified.
+    failureRedirectionURL :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCustomVerificationEmailTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'templateName', 'createCustomVerificationEmailTemplate_templateName' - The name of the custom verification email template.
+--
+-- 'fromEmailAddress', 'createCustomVerificationEmailTemplate_fromEmailAddress' - The email address that the custom verification email is sent from.
+--
+-- 'templateSubject', 'createCustomVerificationEmailTemplate_templateSubject' - The subject line of the custom verification email.
+--
+-- 'templateContent', 'createCustomVerificationEmailTemplate_templateContent' - The content of the custom verification email. The total size of the
+-- email must be less than 10 MB. The message body may contain HTML, with
+-- some limitations. For more information, see
+-- <https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#send-email-verify-address-custom-faq Custom verification email frequently asked questions>
+-- in the /Amazon SES Developer Guide/.
+--
+-- 'successRedirectionURL', 'createCustomVerificationEmailTemplate_successRedirectionURL' - The URL that the recipient of the verification email is sent to if his
+-- or her address is successfully verified.
+--
+-- 'failureRedirectionURL', 'createCustomVerificationEmailTemplate_failureRedirectionURL' - The URL that the recipient of the verification email is sent to if his
+-- or her address is not successfully verified.
+newCreateCustomVerificationEmailTemplate ::
+  -- | 'templateName'
+  Prelude.Text ->
+  -- | 'fromEmailAddress'
+  Prelude.Text ->
+  -- | 'templateSubject'
+  Prelude.Text ->
+  -- | 'templateContent'
+  Prelude.Text ->
+  -- | 'successRedirectionURL'
+  Prelude.Text ->
+  -- | 'failureRedirectionURL'
+  Prelude.Text ->
+  CreateCustomVerificationEmailTemplate
+newCreateCustomVerificationEmailTemplate
+  pTemplateName_
+  pFromEmailAddress_
+  pTemplateSubject_
+  pTemplateContent_
+  pSuccessRedirectionURL_
+  pFailureRedirectionURL_ =
+    CreateCustomVerificationEmailTemplate'
+      { templateName =
+          pTemplateName_,
+        fromEmailAddress =
+          pFromEmailAddress_,
+        templateSubject = pTemplateSubject_,
+        templateContent = pTemplateContent_,
+        successRedirectionURL =
+          pSuccessRedirectionURL_,
+        failureRedirectionURL =
+          pFailureRedirectionURL_
+      }
+
+-- | The name of the custom verification email template.
+createCustomVerificationEmailTemplate_templateName :: Lens.Lens' CreateCustomVerificationEmailTemplate Prelude.Text
+createCustomVerificationEmailTemplate_templateName = Lens.lens (\CreateCustomVerificationEmailTemplate' {templateName} -> templateName) (\s@CreateCustomVerificationEmailTemplate' {} a -> s {templateName = a} :: CreateCustomVerificationEmailTemplate)
+
+-- | The email address that the custom verification email is sent from.
+createCustomVerificationEmailTemplate_fromEmailAddress :: Lens.Lens' CreateCustomVerificationEmailTemplate Prelude.Text
+createCustomVerificationEmailTemplate_fromEmailAddress = Lens.lens (\CreateCustomVerificationEmailTemplate' {fromEmailAddress} -> fromEmailAddress) (\s@CreateCustomVerificationEmailTemplate' {} a -> s {fromEmailAddress = a} :: CreateCustomVerificationEmailTemplate)
+
+-- | The subject line of the custom verification email.
+createCustomVerificationEmailTemplate_templateSubject :: Lens.Lens' CreateCustomVerificationEmailTemplate Prelude.Text
+createCustomVerificationEmailTemplate_templateSubject = Lens.lens (\CreateCustomVerificationEmailTemplate' {templateSubject} -> templateSubject) (\s@CreateCustomVerificationEmailTemplate' {} a -> s {templateSubject = a} :: CreateCustomVerificationEmailTemplate)
+
+-- | The content of the custom verification email. The total size of the
+-- email must be less than 10 MB. The message body may contain HTML, with
+-- some limitations. For more information, see
+-- <https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#send-email-verify-address-custom-faq Custom verification email frequently asked questions>
+-- in the /Amazon SES Developer Guide/.
+createCustomVerificationEmailTemplate_templateContent :: Lens.Lens' CreateCustomVerificationEmailTemplate Prelude.Text
+createCustomVerificationEmailTemplate_templateContent = Lens.lens (\CreateCustomVerificationEmailTemplate' {templateContent} -> templateContent) (\s@CreateCustomVerificationEmailTemplate' {} a -> s {templateContent = a} :: CreateCustomVerificationEmailTemplate)
+
+-- | The URL that the recipient of the verification email is sent to if his
+-- or her address is successfully verified.
+createCustomVerificationEmailTemplate_successRedirectionURL :: Lens.Lens' CreateCustomVerificationEmailTemplate Prelude.Text
+createCustomVerificationEmailTemplate_successRedirectionURL = Lens.lens (\CreateCustomVerificationEmailTemplate' {successRedirectionURL} -> successRedirectionURL) (\s@CreateCustomVerificationEmailTemplate' {} a -> s {successRedirectionURL = a} :: CreateCustomVerificationEmailTemplate)
+
+-- | The URL that the recipient of the verification email is sent to if his
+-- or her address is not successfully verified.
+createCustomVerificationEmailTemplate_failureRedirectionURL :: Lens.Lens' CreateCustomVerificationEmailTemplate Prelude.Text
+createCustomVerificationEmailTemplate_failureRedirectionURL = Lens.lens (\CreateCustomVerificationEmailTemplate' {failureRedirectionURL} -> failureRedirectionURL) (\s@CreateCustomVerificationEmailTemplate' {} a -> s {failureRedirectionURL = a} :: CreateCustomVerificationEmailTemplate)
+
+instance
+  Core.AWSRequest
+    CreateCustomVerificationEmailTemplate
+  where
+  type
+    AWSResponse
+      CreateCustomVerificationEmailTemplate =
+      CreateCustomVerificationEmailTemplateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CreateCustomVerificationEmailTemplateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateCustomVerificationEmailTemplate
+  where
+  hashWithSalt
+    _salt
+    CreateCustomVerificationEmailTemplate' {..} =
+      _salt
+        `Prelude.hashWithSalt` templateName
+        `Prelude.hashWithSalt` fromEmailAddress
+        `Prelude.hashWithSalt` templateSubject
+        `Prelude.hashWithSalt` templateContent
+        `Prelude.hashWithSalt` successRedirectionURL
+        `Prelude.hashWithSalt` failureRedirectionURL
+
+instance
+  Prelude.NFData
+    CreateCustomVerificationEmailTemplate
+  where
+  rnf CreateCustomVerificationEmailTemplate' {..} =
+    Prelude.rnf templateName
+      `Prelude.seq` Prelude.rnf fromEmailAddress
+      `Prelude.seq` Prelude.rnf templateSubject
+      `Prelude.seq` Prelude.rnf templateContent
+      `Prelude.seq` Prelude.rnf successRedirectionURL
+      `Prelude.seq` Prelude.rnf failureRedirectionURL
+
+instance
+  Data.ToHeaders
+    CreateCustomVerificationEmailTemplate
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    CreateCustomVerificationEmailTemplate
+  where
+  toJSON CreateCustomVerificationEmailTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("TemplateName" Data..= templateName),
+            Prelude.Just
+              ("FromEmailAddress" Data..= fromEmailAddress),
+            Prelude.Just
+              ("TemplateSubject" Data..= templateSubject),
+            Prelude.Just
+              ("TemplateContent" Data..= templateContent),
+            Prelude.Just
+              ( "SuccessRedirectionURL"
+                  Data..= successRedirectionURL
+              ),
+            Prelude.Just
+              ( "FailureRedirectionURL"
+                  Data..= failureRedirectionURL
+              )
+          ]
+      )
+
+instance
+  Data.ToPath
+    CreateCustomVerificationEmailTemplate
+  where
+  toPath =
+    Prelude.const
+      "/v2/email/custom-verification-email-templates"
+
+instance
+  Data.ToQuery
+    CreateCustomVerificationEmailTemplate
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | If the action is successful, the service sends back an HTTP 200 response
+-- with an empty HTTP body.
+--
+-- /See:/ 'newCreateCustomVerificationEmailTemplateResponse' smart constructor.
+data CreateCustomVerificationEmailTemplateResponse = CreateCustomVerificationEmailTemplateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCustomVerificationEmailTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createCustomVerificationEmailTemplateResponse_httpStatus' - The response's http status code.
+newCreateCustomVerificationEmailTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateCustomVerificationEmailTemplateResponse
+newCreateCustomVerificationEmailTemplateResponse
+  pHttpStatus_ =
+    CreateCustomVerificationEmailTemplateResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+createCustomVerificationEmailTemplateResponse_httpStatus :: Lens.Lens' CreateCustomVerificationEmailTemplateResponse Prelude.Int
+createCustomVerificationEmailTemplateResponse_httpStatus = Lens.lens (\CreateCustomVerificationEmailTemplateResponse' {httpStatus} -> httpStatus) (\s@CreateCustomVerificationEmailTemplateResponse' {} a -> s {httpStatus = a} :: CreateCustomVerificationEmailTemplateResponse)
+
+instance
+  Prelude.NFData
+    CreateCustomVerificationEmailTemplateResponse
+  where
+  rnf
+    CreateCustomVerificationEmailTemplateResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/CreateDedicatedIpPool.hs b/gen/Amazonka/SESV2/CreateDedicatedIpPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/CreateDedicatedIpPool.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.SESV2.CreateDedicatedIpPool
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create a new pool of dedicated IP addresses. A pool can include one or
+-- more dedicated IP addresses that are associated with your Amazon Web
+-- Services account. You can associate a pool with a configuration set.
+-- When you send an email that uses that configuration set, the message is
+-- sent from one of the addresses in the associated pool.
+module Amazonka.SESV2.CreateDedicatedIpPool
+  ( -- * Creating a Request
+    CreateDedicatedIpPool (..),
+    newCreateDedicatedIpPool,
+
+    -- * Request Lenses
+    createDedicatedIpPool_scalingMode,
+    createDedicatedIpPool_tags,
+    createDedicatedIpPool_poolName,
+
+    -- * Destructuring the Response
+    CreateDedicatedIpPoolResponse (..),
+    newCreateDedicatedIpPoolResponse,
+
+    -- * Response Lenses
+    createDedicatedIpPoolResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to create a new dedicated IP pool.
+--
+-- /See:/ 'newCreateDedicatedIpPool' smart constructor.
+data CreateDedicatedIpPool = CreateDedicatedIpPool'
+  { -- | The type of scaling mode.
+    scalingMode :: Prelude.Maybe ScalingMode,
+    -- | An object that defines the tags (keys and values) that you want to
+    -- associate with the pool.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the dedicated IP pool.
+    poolName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDedicatedIpPool' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'scalingMode', 'createDedicatedIpPool_scalingMode' - The type of scaling mode.
+--
+-- 'tags', 'createDedicatedIpPool_tags' - An object that defines the tags (keys and values) that you want to
+-- associate with the pool.
+--
+-- 'poolName', 'createDedicatedIpPool_poolName' - The name of the dedicated IP pool.
+newCreateDedicatedIpPool ::
+  -- | 'poolName'
+  Prelude.Text ->
+  CreateDedicatedIpPool
+newCreateDedicatedIpPool pPoolName_ =
+  CreateDedicatedIpPool'
+    { scalingMode =
+        Prelude.Nothing,
+      tags = Prelude.Nothing,
+      poolName = pPoolName_
+    }
+
+-- | The type of scaling mode.
+createDedicatedIpPool_scalingMode :: Lens.Lens' CreateDedicatedIpPool (Prelude.Maybe ScalingMode)
+createDedicatedIpPool_scalingMode = Lens.lens (\CreateDedicatedIpPool' {scalingMode} -> scalingMode) (\s@CreateDedicatedIpPool' {} a -> s {scalingMode = a} :: CreateDedicatedIpPool)
+
+-- | An object that defines the tags (keys and values) that you want to
+-- associate with the pool.
+createDedicatedIpPool_tags :: Lens.Lens' CreateDedicatedIpPool (Prelude.Maybe [Tag])
+createDedicatedIpPool_tags = Lens.lens (\CreateDedicatedIpPool' {tags} -> tags) (\s@CreateDedicatedIpPool' {} a -> s {tags = a} :: CreateDedicatedIpPool) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the dedicated IP pool.
+createDedicatedIpPool_poolName :: Lens.Lens' CreateDedicatedIpPool Prelude.Text
+createDedicatedIpPool_poolName = Lens.lens (\CreateDedicatedIpPool' {poolName} -> poolName) (\s@CreateDedicatedIpPool' {} a -> s {poolName = a} :: CreateDedicatedIpPool)
+
+instance Core.AWSRequest CreateDedicatedIpPool where
+  type
+    AWSResponse CreateDedicatedIpPool =
+      CreateDedicatedIpPoolResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CreateDedicatedIpPoolResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateDedicatedIpPool where
+  hashWithSalt _salt CreateDedicatedIpPool' {..} =
+    _salt
+      `Prelude.hashWithSalt` scalingMode
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` poolName
+
+instance Prelude.NFData CreateDedicatedIpPool where
+  rnf CreateDedicatedIpPool' {..} =
+    Prelude.rnf scalingMode
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf poolName
+
+instance Data.ToHeaders CreateDedicatedIpPool where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDedicatedIpPool where
+  toJSON CreateDedicatedIpPool' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ScalingMode" Data..=) Prelude.<$> scalingMode,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("PoolName" Data..= poolName)
+          ]
+      )
+
+instance Data.ToPath CreateDedicatedIpPool where
+  toPath = Prelude.const "/v2/email/dedicated-ip-pools"
+
+instance Data.ToQuery CreateDedicatedIpPool where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newCreateDedicatedIpPoolResponse' smart constructor.
+data CreateDedicatedIpPoolResponse = CreateDedicatedIpPoolResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDedicatedIpPoolResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createDedicatedIpPoolResponse_httpStatus' - The response's http status code.
+newCreateDedicatedIpPoolResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDedicatedIpPoolResponse
+newCreateDedicatedIpPoolResponse pHttpStatus_ =
+  CreateDedicatedIpPoolResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+createDedicatedIpPoolResponse_httpStatus :: Lens.Lens' CreateDedicatedIpPoolResponse Prelude.Int
+createDedicatedIpPoolResponse_httpStatus = Lens.lens (\CreateDedicatedIpPoolResponse' {httpStatus} -> httpStatus) (\s@CreateDedicatedIpPoolResponse' {} a -> s {httpStatus = a} :: CreateDedicatedIpPoolResponse)
+
+instance Prelude.NFData CreateDedicatedIpPoolResponse where
+  rnf CreateDedicatedIpPoolResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/CreateDeliverabilityTestReport.hs b/gen/Amazonka/SESV2/CreateDeliverabilityTestReport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/CreateDeliverabilityTestReport.hs
@@ -0,0 +1,300 @@
+{-# 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.SESV2.CreateDeliverabilityTestReport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create a new predictive inbox placement test. Predictive inbox placement
+-- tests can help you predict how your messages will be handled by various
+-- email providers around the world. When you perform a predictive inbox
+-- placement test, you provide a sample message that contains the content
+-- that you plan to send to your customers. Amazon SES then sends that
+-- message to special email addresses spread across several major email
+-- providers. After about 24 hours, the test is complete, and you can use
+-- the @GetDeliverabilityTestReport@ operation to view the results of the
+-- test.
+module Amazonka.SESV2.CreateDeliverabilityTestReport
+  ( -- * Creating a Request
+    CreateDeliverabilityTestReport (..),
+    newCreateDeliverabilityTestReport,
+
+    -- * Request Lenses
+    createDeliverabilityTestReport_reportName,
+    createDeliverabilityTestReport_tags,
+    createDeliverabilityTestReport_fromEmailAddress,
+    createDeliverabilityTestReport_content,
+
+    -- * Destructuring the Response
+    CreateDeliverabilityTestReportResponse (..),
+    newCreateDeliverabilityTestReportResponse,
+
+    -- * Response Lenses
+    createDeliverabilityTestReportResponse_httpStatus,
+    createDeliverabilityTestReportResponse_reportId,
+    createDeliverabilityTestReportResponse_deliverabilityTestStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to perform a predictive inbox placement test. Predictive inbox
+-- placement tests can help you predict how your messages will be handled
+-- by various email providers around the world. When you perform a
+-- predictive inbox placement test, you provide a sample message that
+-- contains the content that you plan to send to your customers. We send
+-- that message to special email addresses spread across several major
+-- email providers around the world. The test takes about 24 hours to
+-- complete. When the test is complete, you can use the
+-- @GetDeliverabilityTestReport@ operation to view the results of the test.
+--
+-- /See:/ 'newCreateDeliverabilityTestReport' smart constructor.
+data CreateDeliverabilityTestReport = CreateDeliverabilityTestReport'
+  { -- | A unique name that helps you to identify the predictive inbox placement
+    -- test when you retrieve the results.
+    reportName :: Prelude.Maybe Prelude.Text,
+    -- | An array of objects that define the tags (keys and values) that you want
+    -- to associate with the predictive inbox placement test.
+    tags :: Prelude.Maybe [Tag],
+    -- | The email address that the predictive inbox placement test email was
+    -- sent from.
+    fromEmailAddress :: Prelude.Text,
+    -- | The HTML body of the message that you sent when you performed the
+    -- predictive inbox placement test.
+    content :: EmailContent
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDeliverabilityTestReport' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reportName', 'createDeliverabilityTestReport_reportName' - A unique name that helps you to identify the predictive inbox placement
+-- test when you retrieve the results.
+--
+-- 'tags', 'createDeliverabilityTestReport_tags' - An array of objects that define the tags (keys and values) that you want
+-- to associate with the predictive inbox placement test.
+--
+-- 'fromEmailAddress', 'createDeliverabilityTestReport_fromEmailAddress' - The email address that the predictive inbox placement test email was
+-- sent from.
+--
+-- 'content', 'createDeliverabilityTestReport_content' - The HTML body of the message that you sent when you performed the
+-- predictive inbox placement test.
+newCreateDeliverabilityTestReport ::
+  -- | 'fromEmailAddress'
+  Prelude.Text ->
+  -- | 'content'
+  EmailContent ->
+  CreateDeliverabilityTestReport
+newCreateDeliverabilityTestReport
+  pFromEmailAddress_
+  pContent_ =
+    CreateDeliverabilityTestReport'
+      { reportName =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        fromEmailAddress = pFromEmailAddress_,
+        content = pContent_
+      }
+
+-- | A unique name that helps you to identify the predictive inbox placement
+-- test when you retrieve the results.
+createDeliverabilityTestReport_reportName :: Lens.Lens' CreateDeliverabilityTestReport (Prelude.Maybe Prelude.Text)
+createDeliverabilityTestReport_reportName = Lens.lens (\CreateDeliverabilityTestReport' {reportName} -> reportName) (\s@CreateDeliverabilityTestReport' {} a -> s {reportName = a} :: CreateDeliverabilityTestReport)
+
+-- | An array of objects that define the tags (keys and values) that you want
+-- to associate with the predictive inbox placement test.
+createDeliverabilityTestReport_tags :: Lens.Lens' CreateDeliverabilityTestReport (Prelude.Maybe [Tag])
+createDeliverabilityTestReport_tags = Lens.lens (\CreateDeliverabilityTestReport' {tags} -> tags) (\s@CreateDeliverabilityTestReport' {} a -> s {tags = a} :: CreateDeliverabilityTestReport) Prelude.. Lens.mapping Lens.coerced
+
+-- | The email address that the predictive inbox placement test email was
+-- sent from.
+createDeliverabilityTestReport_fromEmailAddress :: Lens.Lens' CreateDeliverabilityTestReport Prelude.Text
+createDeliverabilityTestReport_fromEmailAddress = Lens.lens (\CreateDeliverabilityTestReport' {fromEmailAddress} -> fromEmailAddress) (\s@CreateDeliverabilityTestReport' {} a -> s {fromEmailAddress = a} :: CreateDeliverabilityTestReport)
+
+-- | The HTML body of the message that you sent when you performed the
+-- predictive inbox placement test.
+createDeliverabilityTestReport_content :: Lens.Lens' CreateDeliverabilityTestReport EmailContent
+createDeliverabilityTestReport_content = Lens.lens (\CreateDeliverabilityTestReport' {content} -> content) (\s@CreateDeliverabilityTestReport' {} a -> s {content = a} :: CreateDeliverabilityTestReport)
+
+instance
+  Core.AWSRequest
+    CreateDeliverabilityTestReport
+  where
+  type
+    AWSResponse CreateDeliverabilityTestReport =
+      CreateDeliverabilityTestReportResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDeliverabilityTestReportResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "ReportId")
+            Prelude.<*> (x Data..:> "DeliverabilityTestStatus")
+      )
+
+instance
+  Prelude.Hashable
+    CreateDeliverabilityTestReport
+  where
+  hashWithSalt
+    _salt
+    CreateDeliverabilityTestReport' {..} =
+      _salt
+        `Prelude.hashWithSalt` reportName
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` fromEmailAddress
+        `Prelude.hashWithSalt` content
+
+instance
+  Prelude.NFData
+    CreateDeliverabilityTestReport
+  where
+  rnf CreateDeliverabilityTestReport' {..} =
+    Prelude.rnf reportName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf fromEmailAddress
+      `Prelude.seq` Prelude.rnf content
+
+instance
+  Data.ToHeaders
+    CreateDeliverabilityTestReport
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDeliverabilityTestReport where
+  toJSON CreateDeliverabilityTestReport' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ReportName" Data..=) Prelude.<$> reportName,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("FromEmailAddress" Data..= fromEmailAddress),
+            Prelude.Just ("Content" Data..= content)
+          ]
+      )
+
+instance Data.ToPath CreateDeliverabilityTestReport where
+  toPath =
+    Prelude.const
+      "/v2/email/deliverability-dashboard/test"
+
+instance Data.ToQuery CreateDeliverabilityTestReport where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | Information about the predictive inbox placement test that you created.
+--
+-- /See:/ 'newCreateDeliverabilityTestReportResponse' smart constructor.
+data CreateDeliverabilityTestReportResponse = CreateDeliverabilityTestReportResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A unique string that identifies the predictive inbox placement test.
+    reportId :: Prelude.Text,
+    -- | The status of the predictive inbox placement test. If the status is
+    -- @IN_PROGRESS@, then the predictive inbox placement test is currently
+    -- running. Predictive inbox placement tests are usually complete within 24
+    -- hours of creating the test. If the status is @COMPLETE@, then the test
+    -- is finished, and you can use the @GetDeliverabilityTestReport@ to view
+    -- the results of the test.
+    deliverabilityTestStatus :: DeliverabilityTestStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDeliverabilityTestReportResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createDeliverabilityTestReportResponse_httpStatus' - The response's http status code.
+--
+-- 'reportId', 'createDeliverabilityTestReportResponse_reportId' - A unique string that identifies the predictive inbox placement test.
+--
+-- 'deliverabilityTestStatus', 'createDeliverabilityTestReportResponse_deliverabilityTestStatus' - The status of the predictive inbox placement test. If the status is
+-- @IN_PROGRESS@, then the predictive inbox placement test is currently
+-- running. Predictive inbox placement tests are usually complete within 24
+-- hours of creating the test. If the status is @COMPLETE@, then the test
+-- is finished, and you can use the @GetDeliverabilityTestReport@ to view
+-- the results of the test.
+newCreateDeliverabilityTestReportResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'reportId'
+  Prelude.Text ->
+  -- | 'deliverabilityTestStatus'
+  DeliverabilityTestStatus ->
+  CreateDeliverabilityTestReportResponse
+newCreateDeliverabilityTestReportResponse
+  pHttpStatus_
+  pReportId_
+  pDeliverabilityTestStatus_ =
+    CreateDeliverabilityTestReportResponse'
+      { httpStatus =
+          pHttpStatus_,
+        reportId = pReportId_,
+        deliverabilityTestStatus =
+          pDeliverabilityTestStatus_
+      }
+
+-- | The response's http status code.
+createDeliverabilityTestReportResponse_httpStatus :: Lens.Lens' CreateDeliverabilityTestReportResponse Prelude.Int
+createDeliverabilityTestReportResponse_httpStatus = Lens.lens (\CreateDeliverabilityTestReportResponse' {httpStatus} -> httpStatus) (\s@CreateDeliverabilityTestReportResponse' {} a -> s {httpStatus = a} :: CreateDeliverabilityTestReportResponse)
+
+-- | A unique string that identifies the predictive inbox placement test.
+createDeliverabilityTestReportResponse_reportId :: Lens.Lens' CreateDeliverabilityTestReportResponse Prelude.Text
+createDeliverabilityTestReportResponse_reportId = Lens.lens (\CreateDeliverabilityTestReportResponse' {reportId} -> reportId) (\s@CreateDeliverabilityTestReportResponse' {} a -> s {reportId = a} :: CreateDeliverabilityTestReportResponse)
+
+-- | The status of the predictive inbox placement test. If the status is
+-- @IN_PROGRESS@, then the predictive inbox placement test is currently
+-- running. Predictive inbox placement tests are usually complete within 24
+-- hours of creating the test. If the status is @COMPLETE@, then the test
+-- is finished, and you can use the @GetDeliverabilityTestReport@ to view
+-- the results of the test.
+createDeliverabilityTestReportResponse_deliverabilityTestStatus :: Lens.Lens' CreateDeliverabilityTestReportResponse DeliverabilityTestStatus
+createDeliverabilityTestReportResponse_deliverabilityTestStatus = Lens.lens (\CreateDeliverabilityTestReportResponse' {deliverabilityTestStatus} -> deliverabilityTestStatus) (\s@CreateDeliverabilityTestReportResponse' {} a -> s {deliverabilityTestStatus = a} :: CreateDeliverabilityTestReportResponse)
+
+instance
+  Prelude.NFData
+    CreateDeliverabilityTestReportResponse
+  where
+  rnf CreateDeliverabilityTestReportResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf reportId
+      `Prelude.seq` Prelude.rnf deliverabilityTestStatus
diff --git a/gen/Amazonka/SESV2/CreateEmailIdentity.hs b/gen/Amazonka/SESV2/CreateEmailIdentity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/CreateEmailIdentity.hs
@@ -0,0 +1,321 @@
+{-# 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.SESV2.CreateEmailIdentity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts the process of verifying an email identity. An /identity/ is an
+-- email address or domain that you use when you send email. Before you can
+-- use an identity to send email, you first have to verify it. By verifying
+-- an identity, you demonstrate that you\'re the owner of the identity, and
+-- that you\'ve given Amazon SES API v2 permission to send email from the
+-- identity.
+--
+-- When you verify an email address, Amazon SES sends an email to the
+-- address. Your email address is verified as soon as you follow the link
+-- in the verification email.
+--
+-- When you verify a domain without specifying the @DkimSigningAttributes@
+-- object, this operation provides a set of DKIM tokens. You can convert
+-- these tokens into CNAME records, which you then add to the DNS
+-- configuration for your domain. Your domain is verified when Amazon SES
+-- detects these records in the DNS configuration for your domain. This
+-- verification method is known as
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>.
+--
+-- Alternatively, you can perform the verification process by providing
+-- your own public-private key pair. This verification method is known as
+-- Bring Your Own DKIM (BYODKIM). To use BYODKIM, your call to the
+-- @CreateEmailIdentity@ operation has to include the
+-- @DkimSigningAttributes@ object. When you specify this object, you
+-- provide a selector (a component of the DNS record name that identifies
+-- the public key to use for DKIM authentication) and a private key.
+--
+-- When you verify a domain, this operation provides a set of DKIM tokens,
+-- which you can convert into CNAME tokens. You add these CNAME tokens to
+-- the DNS configuration for your domain. Your domain is verified when
+-- Amazon SES detects these records in the DNS configuration for your
+-- domain. For some DNS providers, it can take 72 hours or more to complete
+-- the domain verification process.
+--
+-- Additionally, you can associate an existing configuration set with the
+-- email identity that you\'re verifying.
+module Amazonka.SESV2.CreateEmailIdentity
+  ( -- * Creating a Request
+    CreateEmailIdentity (..),
+    newCreateEmailIdentity,
+
+    -- * Request Lenses
+    createEmailIdentity_configurationSetName,
+    createEmailIdentity_dkimSigningAttributes,
+    createEmailIdentity_tags,
+    createEmailIdentity_emailIdentity,
+
+    -- * Destructuring the Response
+    CreateEmailIdentityResponse (..),
+    newCreateEmailIdentityResponse,
+
+    -- * Response Lenses
+    createEmailIdentityResponse_dkimAttributes,
+    createEmailIdentityResponse_identityType,
+    createEmailIdentityResponse_verifiedForSendingStatus,
+    createEmailIdentityResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to begin the verification process for an email identity (an
+-- email address or domain).
+--
+-- /See:/ 'newCreateEmailIdentity' smart constructor.
+data CreateEmailIdentity = CreateEmailIdentity'
+  { -- | The configuration set to use by default when sending from this identity.
+    -- Note that any configuration set defined in the email sending request
+    -- takes precedence.
+    configurationSetName :: Prelude.Maybe Prelude.Text,
+    -- | If your request includes this object, Amazon SES configures the identity
+    -- to use Bring Your Own DKIM (BYODKIM) for DKIM authentication purposes,
+    -- or, configures the key length to be used for
+    -- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>.
+    --
+    -- You can only specify this object if the email identity is a domain, as
+    -- opposed to an address.
+    dkimSigningAttributes :: Prelude.Maybe DkimSigningAttributes,
+    -- | An array of objects that define the tags (keys and values) to associate
+    -- with the email identity.
+    tags :: Prelude.Maybe [Tag],
+    -- | The email address or domain to verify.
+    emailIdentity :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEmailIdentity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configurationSetName', 'createEmailIdentity_configurationSetName' - The configuration set to use by default when sending from this identity.
+-- Note that any configuration set defined in the email sending request
+-- takes precedence.
+--
+-- 'dkimSigningAttributes', 'createEmailIdentity_dkimSigningAttributes' - If your request includes this object, Amazon SES configures the identity
+-- to use Bring Your Own DKIM (BYODKIM) for DKIM authentication purposes,
+-- or, configures the key length to be used for
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>.
+--
+-- You can only specify this object if the email identity is a domain, as
+-- opposed to an address.
+--
+-- 'tags', 'createEmailIdentity_tags' - An array of objects that define the tags (keys and values) to associate
+-- with the email identity.
+--
+-- 'emailIdentity', 'createEmailIdentity_emailIdentity' - The email address or domain to verify.
+newCreateEmailIdentity ::
+  -- | 'emailIdentity'
+  Prelude.Text ->
+  CreateEmailIdentity
+newCreateEmailIdentity pEmailIdentity_ =
+  CreateEmailIdentity'
+    { configurationSetName =
+        Prelude.Nothing,
+      dkimSigningAttributes = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      emailIdentity = pEmailIdentity_
+    }
+
+-- | The configuration set to use by default when sending from this identity.
+-- Note that any configuration set defined in the email sending request
+-- takes precedence.
+createEmailIdentity_configurationSetName :: Lens.Lens' CreateEmailIdentity (Prelude.Maybe Prelude.Text)
+createEmailIdentity_configurationSetName = Lens.lens (\CreateEmailIdentity' {configurationSetName} -> configurationSetName) (\s@CreateEmailIdentity' {} a -> s {configurationSetName = a} :: CreateEmailIdentity)
+
+-- | If your request includes this object, Amazon SES configures the identity
+-- to use Bring Your Own DKIM (BYODKIM) for DKIM authentication purposes,
+-- or, configures the key length to be used for
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>.
+--
+-- You can only specify this object if the email identity is a domain, as
+-- opposed to an address.
+createEmailIdentity_dkimSigningAttributes :: Lens.Lens' CreateEmailIdentity (Prelude.Maybe DkimSigningAttributes)
+createEmailIdentity_dkimSigningAttributes = Lens.lens (\CreateEmailIdentity' {dkimSigningAttributes} -> dkimSigningAttributes) (\s@CreateEmailIdentity' {} a -> s {dkimSigningAttributes = a} :: CreateEmailIdentity)
+
+-- | An array of objects that define the tags (keys and values) to associate
+-- with the email identity.
+createEmailIdentity_tags :: Lens.Lens' CreateEmailIdentity (Prelude.Maybe [Tag])
+createEmailIdentity_tags = Lens.lens (\CreateEmailIdentity' {tags} -> tags) (\s@CreateEmailIdentity' {} a -> s {tags = a} :: CreateEmailIdentity) Prelude.. Lens.mapping Lens.coerced
+
+-- | The email address or domain to verify.
+createEmailIdentity_emailIdentity :: Lens.Lens' CreateEmailIdentity Prelude.Text
+createEmailIdentity_emailIdentity = Lens.lens (\CreateEmailIdentity' {emailIdentity} -> emailIdentity) (\s@CreateEmailIdentity' {} a -> s {emailIdentity = a} :: CreateEmailIdentity)
+
+instance Core.AWSRequest CreateEmailIdentity where
+  type
+    AWSResponse CreateEmailIdentity =
+      CreateEmailIdentityResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateEmailIdentityResponse'
+            Prelude.<$> (x Data..?> "DkimAttributes")
+            Prelude.<*> (x Data..?> "IdentityType")
+            Prelude.<*> (x Data..?> "VerifiedForSendingStatus")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateEmailIdentity where
+  hashWithSalt _salt CreateEmailIdentity' {..} =
+    _salt
+      `Prelude.hashWithSalt` configurationSetName
+      `Prelude.hashWithSalt` dkimSigningAttributes
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` emailIdentity
+
+instance Prelude.NFData CreateEmailIdentity where
+  rnf CreateEmailIdentity' {..} =
+    Prelude.rnf configurationSetName
+      `Prelude.seq` Prelude.rnf dkimSigningAttributes
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf emailIdentity
+
+instance Data.ToHeaders CreateEmailIdentity where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateEmailIdentity where
+  toJSON CreateEmailIdentity' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ConfigurationSetName" Data..=)
+              Prelude.<$> configurationSetName,
+            ("DkimSigningAttributes" Data..=)
+              Prelude.<$> dkimSigningAttributes,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("EmailIdentity" Data..= emailIdentity)
+          ]
+      )
+
+instance Data.ToPath CreateEmailIdentity where
+  toPath = Prelude.const "/v2/email/identities"
+
+instance Data.ToQuery CreateEmailIdentity where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | If the email identity is a domain, this object contains information
+-- about the DKIM verification status for the domain.
+--
+-- If the email identity is an email address, this object is empty.
+--
+-- /See:/ 'newCreateEmailIdentityResponse' smart constructor.
+data CreateEmailIdentityResponse = CreateEmailIdentityResponse'
+  { -- | An object that contains information about the DKIM attributes for the
+    -- identity.
+    dkimAttributes :: Prelude.Maybe DkimAttributes,
+    -- | The email identity type. Note: the @MANAGED_DOMAIN@ identity type is not
+    -- supported.
+    identityType :: Prelude.Maybe IdentityType,
+    -- | Specifies whether or not the identity is verified. You can only send
+    -- email from verified email addresses or domains. For more information
+    -- about verifying identities, see the
+    -- <https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-email-manage-verify.html Amazon Pinpoint User Guide>.
+    verifiedForSendingStatus :: 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 'CreateEmailIdentityResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dkimAttributes', 'createEmailIdentityResponse_dkimAttributes' - An object that contains information about the DKIM attributes for the
+-- identity.
+--
+-- 'identityType', 'createEmailIdentityResponse_identityType' - The email identity type. Note: the @MANAGED_DOMAIN@ identity type is not
+-- supported.
+--
+-- 'verifiedForSendingStatus', 'createEmailIdentityResponse_verifiedForSendingStatus' - Specifies whether or not the identity is verified. You can only send
+-- email from verified email addresses or domains. For more information
+-- about verifying identities, see the
+-- <https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-email-manage-verify.html Amazon Pinpoint User Guide>.
+--
+-- 'httpStatus', 'createEmailIdentityResponse_httpStatus' - The response's http status code.
+newCreateEmailIdentityResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateEmailIdentityResponse
+newCreateEmailIdentityResponse pHttpStatus_ =
+  CreateEmailIdentityResponse'
+    { dkimAttributes =
+        Prelude.Nothing,
+      identityType = Prelude.Nothing,
+      verifiedForSendingStatus = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An object that contains information about the DKIM attributes for the
+-- identity.
+createEmailIdentityResponse_dkimAttributes :: Lens.Lens' CreateEmailIdentityResponse (Prelude.Maybe DkimAttributes)
+createEmailIdentityResponse_dkimAttributes = Lens.lens (\CreateEmailIdentityResponse' {dkimAttributes} -> dkimAttributes) (\s@CreateEmailIdentityResponse' {} a -> s {dkimAttributes = a} :: CreateEmailIdentityResponse)
+
+-- | The email identity type. Note: the @MANAGED_DOMAIN@ identity type is not
+-- supported.
+createEmailIdentityResponse_identityType :: Lens.Lens' CreateEmailIdentityResponse (Prelude.Maybe IdentityType)
+createEmailIdentityResponse_identityType = Lens.lens (\CreateEmailIdentityResponse' {identityType} -> identityType) (\s@CreateEmailIdentityResponse' {} a -> s {identityType = a} :: CreateEmailIdentityResponse)
+
+-- | Specifies whether or not the identity is verified. You can only send
+-- email from verified email addresses or domains. For more information
+-- about verifying identities, see the
+-- <https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-email-manage-verify.html Amazon Pinpoint User Guide>.
+createEmailIdentityResponse_verifiedForSendingStatus :: Lens.Lens' CreateEmailIdentityResponse (Prelude.Maybe Prelude.Bool)
+createEmailIdentityResponse_verifiedForSendingStatus = Lens.lens (\CreateEmailIdentityResponse' {verifiedForSendingStatus} -> verifiedForSendingStatus) (\s@CreateEmailIdentityResponse' {} a -> s {verifiedForSendingStatus = a} :: CreateEmailIdentityResponse)
+
+-- | The response's http status code.
+createEmailIdentityResponse_httpStatus :: Lens.Lens' CreateEmailIdentityResponse Prelude.Int
+createEmailIdentityResponse_httpStatus = Lens.lens (\CreateEmailIdentityResponse' {httpStatus} -> httpStatus) (\s@CreateEmailIdentityResponse' {} a -> s {httpStatus = a} :: CreateEmailIdentityResponse)
+
+instance Prelude.NFData CreateEmailIdentityResponse where
+  rnf CreateEmailIdentityResponse' {..} =
+    Prelude.rnf dkimAttributes
+      `Prelude.seq` Prelude.rnf identityType
+      `Prelude.seq` Prelude.rnf verifiedForSendingStatus
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/CreateEmailIdentityPolicy.hs b/gen/Amazonka/SESV2/CreateEmailIdentityPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/CreateEmailIdentityPolicy.hs
@@ -0,0 +1,238 @@
+{-# 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.SESV2.CreateEmailIdentityPolicy
+-- 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 the specified sending authorization policy for the given
+-- identity (an email address or a domain).
+--
+-- This API is for the identity owner only. If you have not verified the
+-- identity, this API will return an error.
+--
+-- Sending authorization is a feature that enables an identity owner to
+-- authorize other senders to use its identities. For information about
+-- using sending authorization, see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html Amazon SES Developer Guide>.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.CreateEmailIdentityPolicy
+  ( -- * Creating a Request
+    CreateEmailIdentityPolicy (..),
+    newCreateEmailIdentityPolicy,
+
+    -- * Request Lenses
+    createEmailIdentityPolicy_emailIdentity,
+    createEmailIdentityPolicy_policyName,
+    createEmailIdentityPolicy_policy,
+
+    -- * Destructuring the Response
+    CreateEmailIdentityPolicyResponse (..),
+    newCreateEmailIdentityPolicyResponse,
+
+    -- * Response Lenses
+    createEmailIdentityPolicyResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to create a sending authorization policy for an
+-- identity. Sending authorization is an Amazon SES feature that enables
+-- you to authorize other senders to use your identities. For information,
+-- see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-identity-owner-tasks-management.html Amazon SES Developer Guide>.
+--
+-- /See:/ 'newCreateEmailIdentityPolicy' smart constructor.
+data CreateEmailIdentityPolicy = CreateEmailIdentityPolicy'
+  { -- | The email identity.
+    emailIdentity :: Prelude.Text,
+    -- | The name of the policy.
+    --
+    -- The policy name cannot exceed 64 characters and can only include
+    -- alphanumeric characters, dashes, and underscores.
+    policyName :: Prelude.Text,
+    -- | The text of the policy in JSON format. The policy cannot exceed 4 KB.
+    --
+    -- For information about the syntax of sending authorization policies, see
+    -- the
+    -- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policies.html Amazon SES Developer Guide>.
+    policy :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEmailIdentityPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'emailIdentity', 'createEmailIdentityPolicy_emailIdentity' - The email identity.
+--
+-- 'policyName', 'createEmailIdentityPolicy_policyName' - The name of the policy.
+--
+-- The policy name cannot exceed 64 characters and can only include
+-- alphanumeric characters, dashes, and underscores.
+--
+-- 'policy', 'createEmailIdentityPolicy_policy' - The text of the policy in JSON format. The policy cannot exceed 4 KB.
+--
+-- For information about the syntax of sending authorization policies, see
+-- the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policies.html Amazon SES Developer Guide>.
+newCreateEmailIdentityPolicy ::
+  -- | 'emailIdentity'
+  Prelude.Text ->
+  -- | 'policyName'
+  Prelude.Text ->
+  -- | 'policy'
+  Prelude.Text ->
+  CreateEmailIdentityPolicy
+newCreateEmailIdentityPolicy
+  pEmailIdentity_
+  pPolicyName_
+  pPolicy_ =
+    CreateEmailIdentityPolicy'
+      { emailIdentity =
+          pEmailIdentity_,
+        policyName = pPolicyName_,
+        policy = pPolicy_
+      }
+
+-- | The email identity.
+createEmailIdentityPolicy_emailIdentity :: Lens.Lens' CreateEmailIdentityPolicy Prelude.Text
+createEmailIdentityPolicy_emailIdentity = Lens.lens (\CreateEmailIdentityPolicy' {emailIdentity} -> emailIdentity) (\s@CreateEmailIdentityPolicy' {} a -> s {emailIdentity = a} :: CreateEmailIdentityPolicy)
+
+-- | The name of the policy.
+--
+-- The policy name cannot exceed 64 characters and can only include
+-- alphanumeric characters, dashes, and underscores.
+createEmailIdentityPolicy_policyName :: Lens.Lens' CreateEmailIdentityPolicy Prelude.Text
+createEmailIdentityPolicy_policyName = Lens.lens (\CreateEmailIdentityPolicy' {policyName} -> policyName) (\s@CreateEmailIdentityPolicy' {} a -> s {policyName = a} :: CreateEmailIdentityPolicy)
+
+-- | The text of the policy in JSON format. The policy cannot exceed 4 KB.
+--
+-- For information about the syntax of sending authorization policies, see
+-- the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policies.html Amazon SES Developer Guide>.
+createEmailIdentityPolicy_policy :: Lens.Lens' CreateEmailIdentityPolicy Prelude.Text
+createEmailIdentityPolicy_policy = Lens.lens (\CreateEmailIdentityPolicy' {policy} -> policy) (\s@CreateEmailIdentityPolicy' {} a -> s {policy = a} :: CreateEmailIdentityPolicy)
+
+instance Core.AWSRequest CreateEmailIdentityPolicy where
+  type
+    AWSResponse CreateEmailIdentityPolicy =
+      CreateEmailIdentityPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CreateEmailIdentityPolicyResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateEmailIdentityPolicy where
+  hashWithSalt _salt CreateEmailIdentityPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` emailIdentity
+      `Prelude.hashWithSalt` policyName
+      `Prelude.hashWithSalt` policy
+
+instance Prelude.NFData CreateEmailIdentityPolicy where
+  rnf CreateEmailIdentityPolicy' {..} =
+    Prelude.rnf emailIdentity
+      `Prelude.seq` Prelude.rnf policyName
+      `Prelude.seq` Prelude.rnf policy
+
+instance Data.ToHeaders CreateEmailIdentityPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateEmailIdentityPolicy where
+  toJSON CreateEmailIdentityPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Policy" Data..= policy)]
+      )
+
+instance Data.ToPath CreateEmailIdentityPolicy where
+  toPath CreateEmailIdentityPolicy' {..} =
+    Prelude.mconcat
+      [ "/v2/email/identities/",
+        Data.toBS emailIdentity,
+        "/policies/",
+        Data.toBS policyName
+      ]
+
+instance Data.ToQuery CreateEmailIdentityPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newCreateEmailIdentityPolicyResponse' smart constructor.
+data CreateEmailIdentityPolicyResponse = CreateEmailIdentityPolicyResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEmailIdentityPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createEmailIdentityPolicyResponse_httpStatus' - The response's http status code.
+newCreateEmailIdentityPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateEmailIdentityPolicyResponse
+newCreateEmailIdentityPolicyResponse pHttpStatus_ =
+  CreateEmailIdentityPolicyResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+createEmailIdentityPolicyResponse_httpStatus :: Lens.Lens' CreateEmailIdentityPolicyResponse Prelude.Int
+createEmailIdentityPolicyResponse_httpStatus = Lens.lens (\CreateEmailIdentityPolicyResponse' {httpStatus} -> httpStatus) (\s@CreateEmailIdentityPolicyResponse' {} a -> s {httpStatus = a} :: CreateEmailIdentityPolicyResponse)
+
+instance
+  Prelude.NFData
+    CreateEmailIdentityPolicyResponse
+  where
+  rnf CreateEmailIdentityPolicyResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/CreateEmailTemplate.hs b/gen/Amazonka/SESV2/CreateEmailTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/CreateEmailTemplate.hs
@@ -0,0 +1,190 @@
+{-# 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.SESV2.CreateEmailTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an email template. Email templates enable you to send
+-- personalized email to one or more destinations in a single API
+-- operation. For more information, see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-personalized-email-api.html Amazon SES Developer Guide>.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.CreateEmailTemplate
+  ( -- * Creating a Request
+    CreateEmailTemplate (..),
+    newCreateEmailTemplate,
+
+    -- * Request Lenses
+    createEmailTemplate_templateName,
+    createEmailTemplate_templateContent,
+
+    -- * Destructuring the Response
+    CreateEmailTemplateResponse (..),
+    newCreateEmailTemplateResponse,
+
+    -- * Response Lenses
+    createEmailTemplateResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to create an email template. For more information,
+-- see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-personalized-email-api.html Amazon SES Developer Guide>.
+--
+-- /See:/ 'newCreateEmailTemplate' smart constructor.
+data CreateEmailTemplate = CreateEmailTemplate'
+  { -- | The name of the template.
+    templateName :: Prelude.Text,
+    -- | The content of the email template, composed of a subject line, an HTML
+    -- part, and a text-only part.
+    templateContent :: EmailTemplateContent
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEmailTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'templateName', 'createEmailTemplate_templateName' - The name of the template.
+--
+-- 'templateContent', 'createEmailTemplate_templateContent' - The content of the email template, composed of a subject line, an HTML
+-- part, and a text-only part.
+newCreateEmailTemplate ::
+  -- | 'templateName'
+  Prelude.Text ->
+  -- | 'templateContent'
+  EmailTemplateContent ->
+  CreateEmailTemplate
+newCreateEmailTemplate
+  pTemplateName_
+  pTemplateContent_ =
+    CreateEmailTemplate'
+      { templateName = pTemplateName_,
+        templateContent = pTemplateContent_
+      }
+
+-- | The name of the template.
+createEmailTemplate_templateName :: Lens.Lens' CreateEmailTemplate Prelude.Text
+createEmailTemplate_templateName = Lens.lens (\CreateEmailTemplate' {templateName} -> templateName) (\s@CreateEmailTemplate' {} a -> s {templateName = a} :: CreateEmailTemplate)
+
+-- | The content of the email template, composed of a subject line, an HTML
+-- part, and a text-only part.
+createEmailTemplate_templateContent :: Lens.Lens' CreateEmailTemplate EmailTemplateContent
+createEmailTemplate_templateContent = Lens.lens (\CreateEmailTemplate' {templateContent} -> templateContent) (\s@CreateEmailTemplate' {} a -> s {templateContent = a} :: CreateEmailTemplate)
+
+instance Core.AWSRequest CreateEmailTemplate where
+  type
+    AWSResponse CreateEmailTemplate =
+      CreateEmailTemplateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CreateEmailTemplateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateEmailTemplate where
+  hashWithSalt _salt CreateEmailTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` templateName
+      `Prelude.hashWithSalt` templateContent
+
+instance Prelude.NFData CreateEmailTemplate where
+  rnf CreateEmailTemplate' {..} =
+    Prelude.rnf templateName
+      `Prelude.seq` Prelude.rnf templateContent
+
+instance Data.ToHeaders CreateEmailTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateEmailTemplate where
+  toJSON CreateEmailTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("TemplateName" Data..= templateName),
+            Prelude.Just
+              ("TemplateContent" Data..= templateContent)
+          ]
+      )
+
+instance Data.ToPath CreateEmailTemplate where
+  toPath = Prelude.const "/v2/email/templates"
+
+instance Data.ToQuery CreateEmailTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | If the action is successful, the service sends back an HTTP 200 response
+-- with an empty HTTP body.
+--
+-- /See:/ 'newCreateEmailTemplateResponse' smart constructor.
+data CreateEmailTemplateResponse = CreateEmailTemplateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEmailTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createEmailTemplateResponse_httpStatus' - The response's http status code.
+newCreateEmailTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateEmailTemplateResponse
+newCreateEmailTemplateResponse pHttpStatus_ =
+  CreateEmailTemplateResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+createEmailTemplateResponse_httpStatus :: Lens.Lens' CreateEmailTemplateResponse Prelude.Int
+createEmailTemplateResponse_httpStatus = Lens.lens (\CreateEmailTemplateResponse' {httpStatus} -> httpStatus) (\s@CreateEmailTemplateResponse' {} a -> s {httpStatus = a} :: CreateEmailTemplateResponse)
+
+instance Prelude.NFData CreateEmailTemplateResponse where
+  rnf CreateEmailTemplateResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/CreateImportJob.hs b/gen/Amazonka/SESV2/CreateImportJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/CreateImportJob.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.CreateImportJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an import job for a data destination.
+module Amazonka.SESV2.CreateImportJob
+  ( -- * Creating a Request
+    CreateImportJob (..),
+    newCreateImportJob,
+
+    -- * Request Lenses
+    createImportJob_importDestination,
+    createImportJob_importDataSource,
+
+    -- * Destructuring the Response
+    CreateImportJobResponse (..),
+    newCreateImportJobResponse,
+
+    -- * Response Lenses
+    createImportJobResponse_jobId,
+    createImportJobResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to create an import job from a data source for a
+-- data destination.
+--
+-- /See:/ 'newCreateImportJob' smart constructor.
+data CreateImportJob = CreateImportJob'
+  { -- | The destination for the import job.
+    importDestination :: ImportDestination,
+    -- | The data source for the import job.
+    importDataSource :: ImportDataSource
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateImportJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'importDestination', 'createImportJob_importDestination' - The destination for the import job.
+--
+-- 'importDataSource', 'createImportJob_importDataSource' - The data source for the import job.
+newCreateImportJob ::
+  -- | 'importDestination'
+  ImportDestination ->
+  -- | 'importDataSource'
+  ImportDataSource ->
+  CreateImportJob
+newCreateImportJob
+  pImportDestination_
+  pImportDataSource_ =
+    CreateImportJob'
+      { importDestination =
+          pImportDestination_,
+        importDataSource = pImportDataSource_
+      }
+
+-- | The destination for the import job.
+createImportJob_importDestination :: Lens.Lens' CreateImportJob ImportDestination
+createImportJob_importDestination = Lens.lens (\CreateImportJob' {importDestination} -> importDestination) (\s@CreateImportJob' {} a -> s {importDestination = a} :: CreateImportJob)
+
+-- | The data source for the import job.
+createImportJob_importDataSource :: Lens.Lens' CreateImportJob ImportDataSource
+createImportJob_importDataSource = Lens.lens (\CreateImportJob' {importDataSource} -> importDataSource) (\s@CreateImportJob' {} a -> s {importDataSource = a} :: CreateImportJob)
+
+instance Core.AWSRequest CreateImportJob where
+  type
+    AWSResponse CreateImportJob =
+      CreateImportJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateImportJobResponse'
+            Prelude.<$> (x Data..?> "JobId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateImportJob where
+  hashWithSalt _salt CreateImportJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` importDestination
+      `Prelude.hashWithSalt` importDataSource
+
+instance Prelude.NFData CreateImportJob where
+  rnf CreateImportJob' {..} =
+    Prelude.rnf importDestination
+      `Prelude.seq` Prelude.rnf importDataSource
+
+instance Data.ToHeaders CreateImportJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateImportJob where
+  toJSON CreateImportJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("ImportDestination" Data..= importDestination),
+            Prelude.Just
+              ("ImportDataSource" Data..= importDataSource)
+          ]
+      )
+
+instance Data.ToPath CreateImportJob where
+  toPath = Prelude.const "/v2/email/import-jobs"
+
+instance Data.ToQuery CreateImportJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newCreateImportJobResponse' smart constructor.
+data CreateImportJobResponse = CreateImportJobResponse'
+  { -- | A string that represents the import job ID.
+    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 'CreateImportJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createImportJobResponse_jobId' - A string that represents the import job ID.
+--
+-- 'httpStatus', 'createImportJobResponse_httpStatus' - The response's http status code.
+newCreateImportJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateImportJobResponse
+newCreateImportJobResponse pHttpStatus_ =
+  CreateImportJobResponse'
+    { jobId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A string that represents the import job ID.
+createImportJobResponse_jobId :: Lens.Lens' CreateImportJobResponse (Prelude.Maybe Prelude.Text)
+createImportJobResponse_jobId = Lens.lens (\CreateImportJobResponse' {jobId} -> jobId) (\s@CreateImportJobResponse' {} a -> s {jobId = a} :: CreateImportJobResponse)
+
+-- | The response's http status code.
+createImportJobResponse_httpStatus :: Lens.Lens' CreateImportJobResponse Prelude.Int
+createImportJobResponse_httpStatus = Lens.lens (\CreateImportJobResponse' {httpStatus} -> httpStatus) (\s@CreateImportJobResponse' {} a -> s {httpStatus = a} :: CreateImportJobResponse)
+
+instance Prelude.NFData CreateImportJobResponse where
+  rnf CreateImportJobResponse' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/DeleteConfigurationSet.hs b/gen/Amazonka/SESV2/DeleteConfigurationSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/DeleteConfigurationSet.hs
@@ -0,0 +1,167 @@
+{-# 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.SESV2.DeleteConfigurationSet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete an existing configuration set.
+--
+-- /Configuration sets/ are groups of rules that you can apply to the
+-- emails you send. You apply a configuration set to an email by including
+-- a reference to the configuration set in the headers of the email. When
+-- you apply a configuration set to an email, all of the rules in that
+-- configuration set are applied to the email.
+module Amazonka.SESV2.DeleteConfigurationSet
+  ( -- * Creating a Request
+    DeleteConfigurationSet (..),
+    newDeleteConfigurationSet,
+
+    -- * Request Lenses
+    deleteConfigurationSet_configurationSetName,
+
+    -- * Destructuring the Response
+    DeleteConfigurationSetResponse (..),
+    newDeleteConfigurationSetResponse,
+
+    -- * Response Lenses
+    deleteConfigurationSetResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to delete a configuration set.
+--
+-- /See:/ 'newDeleteConfigurationSet' smart constructor.
+data DeleteConfigurationSet = DeleteConfigurationSet'
+  { -- | The name of the configuration set.
+    configurationSetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConfigurationSet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configurationSetName', 'deleteConfigurationSet_configurationSetName' - The name of the configuration set.
+newDeleteConfigurationSet ::
+  -- | 'configurationSetName'
+  Prelude.Text ->
+  DeleteConfigurationSet
+newDeleteConfigurationSet pConfigurationSetName_ =
+  DeleteConfigurationSet'
+    { configurationSetName =
+        pConfigurationSetName_
+    }
+
+-- | The name of the configuration set.
+deleteConfigurationSet_configurationSetName :: Lens.Lens' DeleteConfigurationSet Prelude.Text
+deleteConfigurationSet_configurationSetName = Lens.lens (\DeleteConfigurationSet' {configurationSetName} -> configurationSetName) (\s@DeleteConfigurationSet' {} a -> s {configurationSetName = a} :: DeleteConfigurationSet)
+
+instance Core.AWSRequest DeleteConfigurationSet where
+  type
+    AWSResponse DeleteConfigurationSet =
+      DeleteConfigurationSetResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteConfigurationSetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteConfigurationSet where
+  hashWithSalt _salt DeleteConfigurationSet' {..} =
+    _salt `Prelude.hashWithSalt` configurationSetName
+
+instance Prelude.NFData DeleteConfigurationSet where
+  rnf DeleteConfigurationSet' {..} =
+    Prelude.rnf configurationSetName
+
+instance Data.ToHeaders DeleteConfigurationSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteConfigurationSet where
+  toPath DeleteConfigurationSet' {..} =
+    Prelude.mconcat
+      [ "/v2/email/configuration-sets/",
+        Data.toBS configurationSetName
+      ]
+
+instance Data.ToQuery DeleteConfigurationSet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newDeleteConfigurationSetResponse' smart constructor.
+data DeleteConfigurationSetResponse = DeleteConfigurationSetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConfigurationSetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteConfigurationSetResponse_httpStatus' - The response's http status code.
+newDeleteConfigurationSetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteConfigurationSetResponse
+newDeleteConfigurationSetResponse pHttpStatus_ =
+  DeleteConfigurationSetResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteConfigurationSetResponse_httpStatus :: Lens.Lens' DeleteConfigurationSetResponse Prelude.Int
+deleteConfigurationSetResponse_httpStatus = Lens.lens (\DeleteConfigurationSetResponse' {httpStatus} -> httpStatus) (\s@DeleteConfigurationSetResponse' {} a -> s {httpStatus = a} :: DeleteConfigurationSetResponse)
+
+instance
+  Prelude.NFData
+    DeleteConfigurationSetResponse
+  where
+  rnf DeleteConfigurationSetResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/DeleteConfigurationSetEventDestination.hs b/gen/Amazonka/SESV2/DeleteConfigurationSetEventDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/DeleteConfigurationSetEventDestination.hs
@@ -0,0 +1,214 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.DeleteConfigurationSetEventDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete an event destination.
+--
+-- /Events/ include message sends, deliveries, opens, clicks, bounces, and
+-- complaints. /Event destinations/ are places that you can send
+-- information about these events to. For example, you can send event data
+-- to Amazon SNS to receive notifications when you receive bounces or
+-- complaints, or you can use Amazon Kinesis Data Firehose to stream data
+-- to Amazon S3 for long-term storage.
+module Amazonka.SESV2.DeleteConfigurationSetEventDestination
+  ( -- * Creating a Request
+    DeleteConfigurationSetEventDestination (..),
+    newDeleteConfigurationSetEventDestination,
+
+    -- * Request Lenses
+    deleteConfigurationSetEventDestination_configurationSetName,
+    deleteConfigurationSetEventDestination_eventDestinationName,
+
+    -- * Destructuring the Response
+    DeleteConfigurationSetEventDestinationResponse (..),
+    newDeleteConfigurationSetEventDestinationResponse,
+
+    -- * Response Lenses
+    deleteConfigurationSetEventDestinationResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to delete an event destination from a configuration set.
+--
+-- /See:/ 'newDeleteConfigurationSetEventDestination' smart constructor.
+data DeleteConfigurationSetEventDestination = DeleteConfigurationSetEventDestination'
+  { -- | The name of the configuration set that contains the event destination to
+    -- delete.
+    configurationSetName :: Prelude.Text,
+    -- | The name of the event destination to delete.
+    eventDestinationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConfigurationSetEventDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configurationSetName', 'deleteConfigurationSetEventDestination_configurationSetName' - The name of the configuration set that contains the event destination to
+-- delete.
+--
+-- 'eventDestinationName', 'deleteConfigurationSetEventDestination_eventDestinationName' - The name of the event destination to delete.
+newDeleteConfigurationSetEventDestination ::
+  -- | 'configurationSetName'
+  Prelude.Text ->
+  -- | 'eventDestinationName'
+  Prelude.Text ->
+  DeleteConfigurationSetEventDestination
+newDeleteConfigurationSetEventDestination
+  pConfigurationSetName_
+  pEventDestinationName_ =
+    DeleteConfigurationSetEventDestination'
+      { configurationSetName =
+          pConfigurationSetName_,
+        eventDestinationName =
+          pEventDestinationName_
+      }
+
+-- | The name of the configuration set that contains the event destination to
+-- delete.
+deleteConfigurationSetEventDestination_configurationSetName :: Lens.Lens' DeleteConfigurationSetEventDestination Prelude.Text
+deleteConfigurationSetEventDestination_configurationSetName = Lens.lens (\DeleteConfigurationSetEventDestination' {configurationSetName} -> configurationSetName) (\s@DeleteConfigurationSetEventDestination' {} a -> s {configurationSetName = a} :: DeleteConfigurationSetEventDestination)
+
+-- | The name of the event destination to delete.
+deleteConfigurationSetEventDestination_eventDestinationName :: Lens.Lens' DeleteConfigurationSetEventDestination Prelude.Text
+deleteConfigurationSetEventDestination_eventDestinationName = Lens.lens (\DeleteConfigurationSetEventDestination' {eventDestinationName} -> eventDestinationName) (\s@DeleteConfigurationSetEventDestination' {} a -> s {eventDestinationName = a} :: DeleteConfigurationSetEventDestination)
+
+instance
+  Core.AWSRequest
+    DeleteConfigurationSetEventDestination
+  where
+  type
+    AWSResponse
+      DeleteConfigurationSetEventDestination =
+      DeleteConfigurationSetEventDestinationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteConfigurationSetEventDestinationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteConfigurationSetEventDestination
+  where
+  hashWithSalt
+    _salt
+    DeleteConfigurationSetEventDestination' {..} =
+      _salt
+        `Prelude.hashWithSalt` configurationSetName
+        `Prelude.hashWithSalt` eventDestinationName
+
+instance
+  Prelude.NFData
+    DeleteConfigurationSetEventDestination
+  where
+  rnf DeleteConfigurationSetEventDestination' {..} =
+    Prelude.rnf configurationSetName
+      `Prelude.seq` Prelude.rnf eventDestinationName
+
+instance
+  Data.ToHeaders
+    DeleteConfigurationSetEventDestination
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToPath
+    DeleteConfigurationSetEventDestination
+  where
+  toPath DeleteConfigurationSetEventDestination' {..} =
+    Prelude.mconcat
+      [ "/v2/email/configuration-sets/",
+        Data.toBS configurationSetName,
+        "/event-destinations/",
+        Data.toBS eventDestinationName
+      ]
+
+instance
+  Data.ToQuery
+    DeleteConfigurationSetEventDestination
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newDeleteConfigurationSetEventDestinationResponse' smart constructor.
+data DeleteConfigurationSetEventDestinationResponse = DeleteConfigurationSetEventDestinationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConfigurationSetEventDestinationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteConfigurationSetEventDestinationResponse_httpStatus' - The response's http status code.
+newDeleteConfigurationSetEventDestinationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteConfigurationSetEventDestinationResponse
+newDeleteConfigurationSetEventDestinationResponse
+  pHttpStatus_ =
+    DeleteConfigurationSetEventDestinationResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+deleteConfigurationSetEventDestinationResponse_httpStatus :: Lens.Lens' DeleteConfigurationSetEventDestinationResponse Prelude.Int
+deleteConfigurationSetEventDestinationResponse_httpStatus = Lens.lens (\DeleteConfigurationSetEventDestinationResponse' {httpStatus} -> httpStatus) (\s@DeleteConfigurationSetEventDestinationResponse' {} a -> s {httpStatus = a} :: DeleteConfigurationSetEventDestinationResponse)
+
+instance
+  Prelude.NFData
+    DeleteConfigurationSetEventDestinationResponse
+  where
+  rnf
+    DeleteConfigurationSetEventDestinationResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/DeleteContact.hs b/gen/Amazonka/SESV2/DeleteContact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/DeleteContact.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.DeleteContact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a contact from a contact list.
+module Amazonka.SESV2.DeleteContact
+  ( -- * Creating a Request
+    DeleteContact (..),
+    newDeleteContact,
+
+    -- * Request Lenses
+    deleteContact_contactListName,
+    deleteContact_emailAddress,
+
+    -- * Destructuring the Response
+    DeleteContactResponse (..),
+    newDeleteContactResponse,
+
+    -- * Response Lenses
+    deleteContactResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | /See:/ 'newDeleteContact' smart constructor.
+data DeleteContact = DeleteContact'
+  { -- | The name of the contact list from which the contact should be removed.
+    contactListName :: Prelude.Text,
+    -- | The contact\'s email address.
+    emailAddress :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteContact' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactListName', 'deleteContact_contactListName' - The name of the contact list from which the contact should be removed.
+--
+-- 'emailAddress', 'deleteContact_emailAddress' - The contact\'s email address.
+newDeleteContact ::
+  -- | 'contactListName'
+  Prelude.Text ->
+  -- | 'emailAddress'
+  Prelude.Text ->
+  DeleteContact
+newDeleteContact pContactListName_ pEmailAddress_ =
+  DeleteContact'
+    { contactListName = pContactListName_,
+      emailAddress = pEmailAddress_
+    }
+
+-- | The name of the contact list from which the contact should be removed.
+deleteContact_contactListName :: Lens.Lens' DeleteContact Prelude.Text
+deleteContact_contactListName = Lens.lens (\DeleteContact' {contactListName} -> contactListName) (\s@DeleteContact' {} a -> s {contactListName = a} :: DeleteContact)
+
+-- | The contact\'s email address.
+deleteContact_emailAddress :: Lens.Lens' DeleteContact Prelude.Text
+deleteContact_emailAddress = Lens.lens (\DeleteContact' {emailAddress} -> emailAddress) (\s@DeleteContact' {} a -> s {emailAddress = a} :: DeleteContact)
+
+instance Core.AWSRequest DeleteContact where
+  type
+    AWSResponse DeleteContact =
+      DeleteContactResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteContactResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteContact where
+  hashWithSalt _salt DeleteContact' {..} =
+    _salt
+      `Prelude.hashWithSalt` contactListName
+      `Prelude.hashWithSalt` emailAddress
+
+instance Prelude.NFData DeleteContact where
+  rnf DeleteContact' {..} =
+    Prelude.rnf contactListName
+      `Prelude.seq` Prelude.rnf emailAddress
+
+instance Data.ToHeaders DeleteContact where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteContact where
+  toPath DeleteContact' {..} =
+    Prelude.mconcat
+      [ "/v2/email/contact-lists/",
+        Data.toBS contactListName,
+        "/contacts/",
+        Data.toBS emailAddress
+      ]
+
+instance Data.ToQuery DeleteContact where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteContactResponse' smart constructor.
+data DeleteContactResponse = DeleteContactResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteContactResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteContactResponse_httpStatus' - The response's http status code.
+newDeleteContactResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteContactResponse
+newDeleteContactResponse pHttpStatus_ =
+  DeleteContactResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteContactResponse_httpStatus :: Lens.Lens' DeleteContactResponse Prelude.Int
+deleteContactResponse_httpStatus = Lens.lens (\DeleteContactResponse' {httpStatus} -> httpStatus) (\s@DeleteContactResponse' {} a -> s {httpStatus = a} :: DeleteContactResponse)
+
+instance Prelude.NFData DeleteContactResponse where
+  rnf DeleteContactResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/DeleteContactList.hs b/gen/Amazonka/SESV2/DeleteContactList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/DeleteContactList.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.SESV2.DeleteContactList
+-- 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 contact list and all of the contacts on that list.
+module Amazonka.SESV2.DeleteContactList
+  ( -- * Creating a Request
+    DeleteContactList (..),
+    newDeleteContactList,
+
+    -- * Request Lenses
+    deleteContactList_contactListName,
+
+    -- * Destructuring the Response
+    DeleteContactListResponse (..),
+    newDeleteContactListResponse,
+
+    -- * Response Lenses
+    deleteContactListResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | /See:/ 'newDeleteContactList' smart constructor.
+data DeleteContactList = DeleteContactList'
+  { -- | The name of the contact list.
+    contactListName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteContactList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactListName', 'deleteContactList_contactListName' - The name of the contact list.
+newDeleteContactList ::
+  -- | 'contactListName'
+  Prelude.Text ->
+  DeleteContactList
+newDeleteContactList pContactListName_ =
+  DeleteContactList'
+    { contactListName =
+        pContactListName_
+    }
+
+-- | The name of the contact list.
+deleteContactList_contactListName :: Lens.Lens' DeleteContactList Prelude.Text
+deleteContactList_contactListName = Lens.lens (\DeleteContactList' {contactListName} -> contactListName) (\s@DeleteContactList' {} a -> s {contactListName = a} :: DeleteContactList)
+
+instance Core.AWSRequest DeleteContactList where
+  type
+    AWSResponse DeleteContactList =
+      DeleteContactListResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteContactListResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteContactList where
+  hashWithSalt _salt DeleteContactList' {..} =
+    _salt `Prelude.hashWithSalt` contactListName
+
+instance Prelude.NFData DeleteContactList where
+  rnf DeleteContactList' {..} =
+    Prelude.rnf contactListName
+
+instance Data.ToHeaders DeleteContactList where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteContactList where
+  toPath DeleteContactList' {..} =
+    Prelude.mconcat
+      [ "/v2/email/contact-lists/",
+        Data.toBS contactListName
+      ]
+
+instance Data.ToQuery DeleteContactList where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteContactListResponse' smart constructor.
+data DeleteContactListResponse = DeleteContactListResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteContactListResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteContactListResponse_httpStatus' - The response's http status code.
+newDeleteContactListResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteContactListResponse
+newDeleteContactListResponse pHttpStatus_ =
+  DeleteContactListResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteContactListResponse_httpStatus :: Lens.Lens' DeleteContactListResponse Prelude.Int
+deleteContactListResponse_httpStatus = Lens.lens (\DeleteContactListResponse' {httpStatus} -> httpStatus) (\s@DeleteContactListResponse' {} a -> s {httpStatus = a} :: DeleteContactListResponse)
+
+instance Prelude.NFData DeleteContactListResponse where
+  rnf DeleteContactListResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/DeleteCustomVerificationEmailTemplate.hs b/gen/Amazonka/SESV2/DeleteCustomVerificationEmailTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/DeleteCustomVerificationEmailTemplate.hs
@@ -0,0 +1,195 @@
+{-# 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.SESV2.DeleteCustomVerificationEmailTemplate
+-- 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 existing custom verification email template.
+--
+-- For more information about custom verification email templates, see
+-- <https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#send-email-verify-address-custom Using custom verification email templates>
+-- in the /Amazon SES Developer Guide/.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.DeleteCustomVerificationEmailTemplate
+  ( -- * Creating a Request
+    DeleteCustomVerificationEmailTemplate (..),
+    newDeleteCustomVerificationEmailTemplate,
+
+    -- * Request Lenses
+    deleteCustomVerificationEmailTemplate_templateName,
+
+    -- * Destructuring the Response
+    DeleteCustomVerificationEmailTemplateResponse (..),
+    newDeleteCustomVerificationEmailTemplateResponse,
+
+    -- * Response Lenses
+    deleteCustomVerificationEmailTemplateResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to delete an existing custom verification email
+-- template.
+--
+-- /See:/ 'newDeleteCustomVerificationEmailTemplate' smart constructor.
+data DeleteCustomVerificationEmailTemplate = DeleteCustomVerificationEmailTemplate'
+  { -- | The name of the custom verification email template that you want to
+    -- delete.
+    templateName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCustomVerificationEmailTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'templateName', 'deleteCustomVerificationEmailTemplate_templateName' - The name of the custom verification email template that you want to
+-- delete.
+newDeleteCustomVerificationEmailTemplate ::
+  -- | 'templateName'
+  Prelude.Text ->
+  DeleteCustomVerificationEmailTemplate
+newDeleteCustomVerificationEmailTemplate
+  pTemplateName_ =
+    DeleteCustomVerificationEmailTemplate'
+      { templateName =
+          pTemplateName_
+      }
+
+-- | The name of the custom verification email template that you want to
+-- delete.
+deleteCustomVerificationEmailTemplate_templateName :: Lens.Lens' DeleteCustomVerificationEmailTemplate Prelude.Text
+deleteCustomVerificationEmailTemplate_templateName = Lens.lens (\DeleteCustomVerificationEmailTemplate' {templateName} -> templateName) (\s@DeleteCustomVerificationEmailTemplate' {} a -> s {templateName = a} :: DeleteCustomVerificationEmailTemplate)
+
+instance
+  Core.AWSRequest
+    DeleteCustomVerificationEmailTemplate
+  where
+  type
+    AWSResponse
+      DeleteCustomVerificationEmailTemplate =
+      DeleteCustomVerificationEmailTemplateResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteCustomVerificationEmailTemplateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteCustomVerificationEmailTemplate
+  where
+  hashWithSalt
+    _salt
+    DeleteCustomVerificationEmailTemplate' {..} =
+      _salt `Prelude.hashWithSalt` templateName
+
+instance
+  Prelude.NFData
+    DeleteCustomVerificationEmailTemplate
+  where
+  rnf DeleteCustomVerificationEmailTemplate' {..} =
+    Prelude.rnf templateName
+
+instance
+  Data.ToHeaders
+    DeleteCustomVerificationEmailTemplate
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToPath
+    DeleteCustomVerificationEmailTemplate
+  where
+  toPath DeleteCustomVerificationEmailTemplate' {..} =
+    Prelude.mconcat
+      [ "/v2/email/custom-verification-email-templates/",
+        Data.toBS templateName
+      ]
+
+instance
+  Data.ToQuery
+    DeleteCustomVerificationEmailTemplate
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | If the action is successful, the service sends back an HTTP 200 response
+-- with an empty HTTP body.
+--
+-- /See:/ 'newDeleteCustomVerificationEmailTemplateResponse' smart constructor.
+data DeleteCustomVerificationEmailTemplateResponse = DeleteCustomVerificationEmailTemplateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCustomVerificationEmailTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteCustomVerificationEmailTemplateResponse_httpStatus' - The response's http status code.
+newDeleteCustomVerificationEmailTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteCustomVerificationEmailTemplateResponse
+newDeleteCustomVerificationEmailTemplateResponse
+  pHttpStatus_ =
+    DeleteCustomVerificationEmailTemplateResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+deleteCustomVerificationEmailTemplateResponse_httpStatus :: Lens.Lens' DeleteCustomVerificationEmailTemplateResponse Prelude.Int
+deleteCustomVerificationEmailTemplateResponse_httpStatus = Lens.lens (\DeleteCustomVerificationEmailTemplateResponse' {httpStatus} -> httpStatus) (\s@DeleteCustomVerificationEmailTemplateResponse' {} a -> s {httpStatus = a} :: DeleteCustomVerificationEmailTemplateResponse)
+
+instance
+  Prelude.NFData
+    DeleteCustomVerificationEmailTemplateResponse
+  where
+  rnf
+    DeleteCustomVerificationEmailTemplateResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/DeleteDedicatedIpPool.hs b/gen/Amazonka/SESV2/DeleteDedicatedIpPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/DeleteDedicatedIpPool.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.DeleteDedicatedIpPool
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete a dedicated IP pool.
+module Amazonka.SESV2.DeleteDedicatedIpPool
+  ( -- * Creating a Request
+    DeleteDedicatedIpPool (..),
+    newDeleteDedicatedIpPool,
+
+    -- * Request Lenses
+    deleteDedicatedIpPool_poolName,
+
+    -- * Destructuring the Response
+    DeleteDedicatedIpPoolResponse (..),
+    newDeleteDedicatedIpPoolResponse,
+
+    -- * Response Lenses
+    deleteDedicatedIpPoolResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to delete a dedicated IP pool.
+--
+-- /See:/ 'newDeleteDedicatedIpPool' smart constructor.
+data DeleteDedicatedIpPool = DeleteDedicatedIpPool'
+  { -- | The name of the dedicated IP pool that you want to delete.
+    poolName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDedicatedIpPool' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'poolName', 'deleteDedicatedIpPool_poolName' - The name of the dedicated IP pool that you want to delete.
+newDeleteDedicatedIpPool ::
+  -- | 'poolName'
+  Prelude.Text ->
+  DeleteDedicatedIpPool
+newDeleteDedicatedIpPool pPoolName_ =
+  DeleteDedicatedIpPool' {poolName = pPoolName_}
+
+-- | The name of the dedicated IP pool that you want to delete.
+deleteDedicatedIpPool_poolName :: Lens.Lens' DeleteDedicatedIpPool Prelude.Text
+deleteDedicatedIpPool_poolName = Lens.lens (\DeleteDedicatedIpPool' {poolName} -> poolName) (\s@DeleteDedicatedIpPool' {} a -> s {poolName = a} :: DeleteDedicatedIpPool)
+
+instance Core.AWSRequest DeleteDedicatedIpPool where
+  type
+    AWSResponse DeleteDedicatedIpPool =
+      DeleteDedicatedIpPoolResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteDedicatedIpPoolResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteDedicatedIpPool where
+  hashWithSalt _salt DeleteDedicatedIpPool' {..} =
+    _salt `Prelude.hashWithSalt` poolName
+
+instance Prelude.NFData DeleteDedicatedIpPool where
+  rnf DeleteDedicatedIpPool' {..} = Prelude.rnf poolName
+
+instance Data.ToHeaders DeleteDedicatedIpPool where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteDedicatedIpPool where
+  toPath DeleteDedicatedIpPool' {..} =
+    Prelude.mconcat
+      ["/v2/email/dedicated-ip-pools/", Data.toBS poolName]
+
+instance Data.ToQuery DeleteDedicatedIpPool where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newDeleteDedicatedIpPoolResponse' smart constructor.
+data DeleteDedicatedIpPoolResponse = DeleteDedicatedIpPoolResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDedicatedIpPoolResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteDedicatedIpPoolResponse_httpStatus' - The response's http status code.
+newDeleteDedicatedIpPoolResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteDedicatedIpPoolResponse
+newDeleteDedicatedIpPoolResponse pHttpStatus_ =
+  DeleteDedicatedIpPoolResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteDedicatedIpPoolResponse_httpStatus :: Lens.Lens' DeleteDedicatedIpPoolResponse Prelude.Int
+deleteDedicatedIpPoolResponse_httpStatus = Lens.lens (\DeleteDedicatedIpPoolResponse' {httpStatus} -> httpStatus) (\s@DeleteDedicatedIpPoolResponse' {} a -> s {httpStatus = a} :: DeleteDedicatedIpPoolResponse)
+
+instance Prelude.NFData DeleteDedicatedIpPoolResponse where
+  rnf DeleteDedicatedIpPoolResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/DeleteEmailIdentity.hs b/gen/Amazonka/SESV2/DeleteEmailIdentity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/DeleteEmailIdentity.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.SESV2.DeleteEmailIdentity
+-- 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 email identity. An identity can be either an email address or
+-- a domain name.
+module Amazonka.SESV2.DeleteEmailIdentity
+  ( -- * Creating a Request
+    DeleteEmailIdentity (..),
+    newDeleteEmailIdentity,
+
+    -- * Request Lenses
+    deleteEmailIdentity_emailIdentity,
+
+    -- * Destructuring the Response
+    DeleteEmailIdentityResponse (..),
+    newDeleteEmailIdentityResponse,
+
+    -- * Response Lenses
+    deleteEmailIdentityResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to delete an existing email identity. When you delete an
+-- identity, you lose the ability to send email from that identity. You can
+-- restore your ability to send email by completing the verification
+-- process for the identity again.
+--
+-- /See:/ 'newDeleteEmailIdentity' smart constructor.
+data DeleteEmailIdentity = DeleteEmailIdentity'
+  { -- | The identity (that is, the email address or domain) to delete.
+    emailIdentity :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEmailIdentity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'emailIdentity', 'deleteEmailIdentity_emailIdentity' - The identity (that is, the email address or domain) to delete.
+newDeleteEmailIdentity ::
+  -- | 'emailIdentity'
+  Prelude.Text ->
+  DeleteEmailIdentity
+newDeleteEmailIdentity pEmailIdentity_ =
+  DeleteEmailIdentity'
+    { emailIdentity =
+        pEmailIdentity_
+    }
+
+-- | The identity (that is, the email address or domain) to delete.
+deleteEmailIdentity_emailIdentity :: Lens.Lens' DeleteEmailIdentity Prelude.Text
+deleteEmailIdentity_emailIdentity = Lens.lens (\DeleteEmailIdentity' {emailIdentity} -> emailIdentity) (\s@DeleteEmailIdentity' {} a -> s {emailIdentity = a} :: DeleteEmailIdentity)
+
+instance Core.AWSRequest DeleteEmailIdentity where
+  type
+    AWSResponse DeleteEmailIdentity =
+      DeleteEmailIdentityResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteEmailIdentityResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteEmailIdentity where
+  hashWithSalt _salt DeleteEmailIdentity' {..} =
+    _salt `Prelude.hashWithSalt` emailIdentity
+
+instance Prelude.NFData DeleteEmailIdentity where
+  rnf DeleteEmailIdentity' {..} =
+    Prelude.rnf emailIdentity
+
+instance Data.ToHeaders DeleteEmailIdentity where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteEmailIdentity where
+  toPath DeleteEmailIdentity' {..} =
+    Prelude.mconcat
+      ["/v2/email/identities/", Data.toBS emailIdentity]
+
+instance Data.ToQuery DeleteEmailIdentity where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newDeleteEmailIdentityResponse' smart constructor.
+data DeleteEmailIdentityResponse = DeleteEmailIdentityResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEmailIdentityResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteEmailIdentityResponse_httpStatus' - The response's http status code.
+newDeleteEmailIdentityResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteEmailIdentityResponse
+newDeleteEmailIdentityResponse pHttpStatus_ =
+  DeleteEmailIdentityResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteEmailIdentityResponse_httpStatus :: Lens.Lens' DeleteEmailIdentityResponse Prelude.Int
+deleteEmailIdentityResponse_httpStatus = Lens.lens (\DeleteEmailIdentityResponse' {httpStatus} -> httpStatus) (\s@DeleteEmailIdentityResponse' {} a -> s {httpStatus = a} :: DeleteEmailIdentityResponse)
+
+instance Prelude.NFData DeleteEmailIdentityResponse where
+  rnf DeleteEmailIdentityResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/DeleteEmailIdentityPolicy.hs b/gen/Amazonka/SESV2/DeleteEmailIdentityPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/DeleteEmailIdentityPolicy.hs
@@ -0,0 +1,205 @@
+{-# 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.SESV2.DeleteEmailIdentityPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified sending authorization policy for the given
+-- identity (an email address or a domain). This API returns successfully
+-- even if a policy with the specified name does not exist.
+--
+-- This API is for the identity owner only. If you have not verified the
+-- identity, this API will return an error.
+--
+-- Sending authorization is a feature that enables an identity owner to
+-- authorize other senders to use its identities. For information about
+-- using sending authorization, see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html Amazon SES Developer Guide>.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.DeleteEmailIdentityPolicy
+  ( -- * Creating a Request
+    DeleteEmailIdentityPolicy (..),
+    newDeleteEmailIdentityPolicy,
+
+    -- * Request Lenses
+    deleteEmailIdentityPolicy_emailIdentity,
+    deleteEmailIdentityPolicy_policyName,
+
+    -- * Destructuring the Response
+    DeleteEmailIdentityPolicyResponse (..),
+    newDeleteEmailIdentityPolicyResponse,
+
+    -- * Response Lenses
+    deleteEmailIdentityPolicyResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to delete a sending authorization policy for an
+-- identity. Sending authorization is an Amazon SES feature that enables
+-- you to authorize other senders to use your identities. For information,
+-- see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-identity-owner-tasks-management.html Amazon SES Developer Guide>.
+--
+-- /See:/ 'newDeleteEmailIdentityPolicy' smart constructor.
+data DeleteEmailIdentityPolicy = DeleteEmailIdentityPolicy'
+  { -- | The email identity.
+    emailIdentity :: Prelude.Text,
+    -- | The name of the policy.
+    --
+    -- The policy name cannot exceed 64 characters and can only include
+    -- alphanumeric characters, dashes, and underscores.
+    policyName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEmailIdentityPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'emailIdentity', 'deleteEmailIdentityPolicy_emailIdentity' - The email identity.
+--
+-- 'policyName', 'deleteEmailIdentityPolicy_policyName' - The name of the policy.
+--
+-- The policy name cannot exceed 64 characters and can only include
+-- alphanumeric characters, dashes, and underscores.
+newDeleteEmailIdentityPolicy ::
+  -- | 'emailIdentity'
+  Prelude.Text ->
+  -- | 'policyName'
+  Prelude.Text ->
+  DeleteEmailIdentityPolicy
+newDeleteEmailIdentityPolicy
+  pEmailIdentity_
+  pPolicyName_ =
+    DeleteEmailIdentityPolicy'
+      { emailIdentity =
+          pEmailIdentity_,
+        policyName = pPolicyName_
+      }
+
+-- | The email identity.
+deleteEmailIdentityPolicy_emailIdentity :: Lens.Lens' DeleteEmailIdentityPolicy Prelude.Text
+deleteEmailIdentityPolicy_emailIdentity = Lens.lens (\DeleteEmailIdentityPolicy' {emailIdentity} -> emailIdentity) (\s@DeleteEmailIdentityPolicy' {} a -> s {emailIdentity = a} :: DeleteEmailIdentityPolicy)
+
+-- | The name of the policy.
+--
+-- The policy name cannot exceed 64 characters and can only include
+-- alphanumeric characters, dashes, and underscores.
+deleteEmailIdentityPolicy_policyName :: Lens.Lens' DeleteEmailIdentityPolicy Prelude.Text
+deleteEmailIdentityPolicy_policyName = Lens.lens (\DeleteEmailIdentityPolicy' {policyName} -> policyName) (\s@DeleteEmailIdentityPolicy' {} a -> s {policyName = a} :: DeleteEmailIdentityPolicy)
+
+instance Core.AWSRequest DeleteEmailIdentityPolicy where
+  type
+    AWSResponse DeleteEmailIdentityPolicy =
+      DeleteEmailIdentityPolicyResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteEmailIdentityPolicyResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteEmailIdentityPolicy where
+  hashWithSalt _salt DeleteEmailIdentityPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` emailIdentity
+      `Prelude.hashWithSalt` policyName
+
+instance Prelude.NFData DeleteEmailIdentityPolicy where
+  rnf DeleteEmailIdentityPolicy' {..} =
+    Prelude.rnf emailIdentity
+      `Prelude.seq` Prelude.rnf policyName
+
+instance Data.ToHeaders DeleteEmailIdentityPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteEmailIdentityPolicy where
+  toPath DeleteEmailIdentityPolicy' {..} =
+    Prelude.mconcat
+      [ "/v2/email/identities/",
+        Data.toBS emailIdentity,
+        "/policies/",
+        Data.toBS policyName
+      ]
+
+instance Data.ToQuery DeleteEmailIdentityPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newDeleteEmailIdentityPolicyResponse' smart constructor.
+data DeleteEmailIdentityPolicyResponse = DeleteEmailIdentityPolicyResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEmailIdentityPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteEmailIdentityPolicyResponse_httpStatus' - The response's http status code.
+newDeleteEmailIdentityPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteEmailIdentityPolicyResponse
+newDeleteEmailIdentityPolicyResponse pHttpStatus_ =
+  DeleteEmailIdentityPolicyResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteEmailIdentityPolicyResponse_httpStatus :: Lens.Lens' DeleteEmailIdentityPolicyResponse Prelude.Int
+deleteEmailIdentityPolicyResponse_httpStatus = Lens.lens (\DeleteEmailIdentityPolicyResponse' {httpStatus} -> httpStatus) (\s@DeleteEmailIdentityPolicyResponse' {} a -> s {httpStatus = a} :: DeleteEmailIdentityPolicyResponse)
+
+instance
+  Prelude.NFData
+    DeleteEmailIdentityPolicyResponse
+  where
+  rnf DeleteEmailIdentityPolicyResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/DeleteEmailTemplate.hs b/gen/Amazonka/SESV2/DeleteEmailTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/DeleteEmailTemplate.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.DeleteEmailTemplate
+-- 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 email template.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.DeleteEmailTemplate
+  ( -- * Creating a Request
+    DeleteEmailTemplate (..),
+    newDeleteEmailTemplate,
+
+    -- * Request Lenses
+    deleteEmailTemplate_templateName,
+
+    -- * Destructuring the Response
+    DeleteEmailTemplateResponse (..),
+    newDeleteEmailTemplateResponse,
+
+    -- * Response Lenses
+    deleteEmailTemplateResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to delete an email template. For more information,
+-- see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-personalized-email-api.html Amazon SES Developer Guide>.
+--
+-- /See:/ 'newDeleteEmailTemplate' smart constructor.
+data DeleteEmailTemplate = DeleteEmailTemplate'
+  { -- | The name of the template to be deleted.
+    templateName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEmailTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'templateName', 'deleteEmailTemplate_templateName' - The name of the template to be deleted.
+newDeleteEmailTemplate ::
+  -- | 'templateName'
+  Prelude.Text ->
+  DeleteEmailTemplate
+newDeleteEmailTemplate pTemplateName_ =
+  DeleteEmailTemplate' {templateName = pTemplateName_}
+
+-- | The name of the template to be deleted.
+deleteEmailTemplate_templateName :: Lens.Lens' DeleteEmailTemplate Prelude.Text
+deleteEmailTemplate_templateName = Lens.lens (\DeleteEmailTemplate' {templateName} -> templateName) (\s@DeleteEmailTemplate' {} a -> s {templateName = a} :: DeleteEmailTemplate)
+
+instance Core.AWSRequest DeleteEmailTemplate where
+  type
+    AWSResponse DeleteEmailTemplate =
+      DeleteEmailTemplateResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteEmailTemplateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteEmailTemplate where
+  hashWithSalt _salt DeleteEmailTemplate' {..} =
+    _salt `Prelude.hashWithSalt` templateName
+
+instance Prelude.NFData DeleteEmailTemplate where
+  rnf DeleteEmailTemplate' {..} =
+    Prelude.rnf templateName
+
+instance Data.ToHeaders DeleteEmailTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteEmailTemplate where
+  toPath DeleteEmailTemplate' {..} =
+    Prelude.mconcat
+      ["/v2/email/templates/", Data.toBS templateName]
+
+instance Data.ToQuery DeleteEmailTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | If the action is successful, the service sends back an HTTP 200 response
+-- with an empty HTTP body.
+--
+-- /See:/ 'newDeleteEmailTemplateResponse' smart constructor.
+data DeleteEmailTemplateResponse = DeleteEmailTemplateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEmailTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteEmailTemplateResponse_httpStatus' - The response's http status code.
+newDeleteEmailTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteEmailTemplateResponse
+newDeleteEmailTemplateResponse pHttpStatus_ =
+  DeleteEmailTemplateResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteEmailTemplateResponse_httpStatus :: Lens.Lens' DeleteEmailTemplateResponse Prelude.Int
+deleteEmailTemplateResponse_httpStatus = Lens.lens (\DeleteEmailTemplateResponse' {httpStatus} -> httpStatus) (\s@DeleteEmailTemplateResponse' {} a -> s {httpStatus = a} :: DeleteEmailTemplateResponse)
+
+instance Prelude.NFData DeleteEmailTemplateResponse where
+  rnf DeleteEmailTemplateResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/DeleteSuppressedDestination.hs b/gen/Amazonka/SESV2/DeleteSuppressedDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/DeleteSuppressedDestination.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.DeleteSuppressedDestination
+-- 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 an email address from the suppression list for your account.
+module Amazonka.SESV2.DeleteSuppressedDestination
+  ( -- * Creating a Request
+    DeleteSuppressedDestination (..),
+    newDeleteSuppressedDestination,
+
+    -- * Request Lenses
+    deleteSuppressedDestination_emailAddress,
+
+    -- * Destructuring the Response
+    DeleteSuppressedDestinationResponse (..),
+    newDeleteSuppressedDestinationResponse,
+
+    -- * Response Lenses
+    deleteSuppressedDestinationResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to remove an email address from the suppression list for your
+-- account.
+--
+-- /See:/ 'newDeleteSuppressedDestination' smart constructor.
+data DeleteSuppressedDestination = DeleteSuppressedDestination'
+  { -- | The suppressed email destination to remove from the account suppression
+    -- list.
+    emailAddress :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSuppressedDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'emailAddress', 'deleteSuppressedDestination_emailAddress' - The suppressed email destination to remove from the account suppression
+-- list.
+newDeleteSuppressedDestination ::
+  -- | 'emailAddress'
+  Prelude.Text ->
+  DeleteSuppressedDestination
+newDeleteSuppressedDestination pEmailAddress_ =
+  DeleteSuppressedDestination'
+    { emailAddress =
+        pEmailAddress_
+    }
+
+-- | The suppressed email destination to remove from the account suppression
+-- list.
+deleteSuppressedDestination_emailAddress :: Lens.Lens' DeleteSuppressedDestination Prelude.Text
+deleteSuppressedDestination_emailAddress = Lens.lens (\DeleteSuppressedDestination' {emailAddress} -> emailAddress) (\s@DeleteSuppressedDestination' {} a -> s {emailAddress = a} :: DeleteSuppressedDestination)
+
+instance Core.AWSRequest DeleteSuppressedDestination where
+  type
+    AWSResponse DeleteSuppressedDestination =
+      DeleteSuppressedDestinationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteSuppressedDestinationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteSuppressedDestination where
+  hashWithSalt _salt DeleteSuppressedDestination' {..} =
+    _salt `Prelude.hashWithSalt` emailAddress
+
+instance Prelude.NFData DeleteSuppressedDestination where
+  rnf DeleteSuppressedDestination' {..} =
+    Prelude.rnf emailAddress
+
+instance Data.ToHeaders DeleteSuppressedDestination where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteSuppressedDestination where
+  toPath DeleteSuppressedDestination' {..} =
+    Prelude.mconcat
+      [ "/v2/email/suppression/addresses/",
+        Data.toBS emailAddress
+      ]
+
+instance Data.ToQuery DeleteSuppressedDestination where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newDeleteSuppressedDestinationResponse' smart constructor.
+data DeleteSuppressedDestinationResponse = DeleteSuppressedDestinationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSuppressedDestinationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteSuppressedDestinationResponse_httpStatus' - The response's http status code.
+newDeleteSuppressedDestinationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteSuppressedDestinationResponse
+newDeleteSuppressedDestinationResponse pHttpStatus_ =
+  DeleteSuppressedDestinationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteSuppressedDestinationResponse_httpStatus :: Lens.Lens' DeleteSuppressedDestinationResponse Prelude.Int
+deleteSuppressedDestinationResponse_httpStatus = Lens.lens (\DeleteSuppressedDestinationResponse' {httpStatus} -> httpStatus) (\s@DeleteSuppressedDestinationResponse' {} a -> s {httpStatus = a} :: DeleteSuppressedDestinationResponse)
+
+instance
+  Prelude.NFData
+    DeleteSuppressedDestinationResponse
+  where
+  rnf DeleteSuppressedDestinationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/GetAccount.hs b/gen/Amazonka/SESV2/GetAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetAccount.hs
@@ -0,0 +1,320 @@
+{-# 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.SESV2.GetAccount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Obtain information about the email-sending status and capabilities of
+-- your Amazon SES account in the current Amazon Web Services Region.
+module Amazonka.SESV2.GetAccount
+  ( -- * Creating a Request
+    GetAccount (..),
+    newGetAccount,
+
+    -- * Destructuring the Response
+    GetAccountResponse (..),
+    newGetAccountResponse,
+
+    -- * Response Lenses
+    getAccountResponse_dedicatedIpAutoWarmupEnabled,
+    getAccountResponse_details,
+    getAccountResponse_enforcementStatus,
+    getAccountResponse_productionAccessEnabled,
+    getAccountResponse_sendQuota,
+    getAccountResponse_sendingEnabled,
+    getAccountResponse_suppressionAttributes,
+    getAccountResponse_vdmAttributes,
+    getAccountResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to obtain information about the email-sending capabilities of
+-- your Amazon SES account.
+--
+-- /See:/ 'newGetAccount' smart constructor.
+data GetAccount = GetAccount'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAccount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetAccount ::
+  GetAccount
+newGetAccount = GetAccount'
+
+instance Core.AWSRequest GetAccount where
+  type AWSResponse GetAccount = GetAccountResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAccountResponse'
+            Prelude.<$> (x Data..?> "DedicatedIpAutoWarmupEnabled")
+            Prelude.<*> (x Data..?> "Details")
+            Prelude.<*> (x Data..?> "EnforcementStatus")
+            Prelude.<*> (x Data..?> "ProductionAccessEnabled")
+            Prelude.<*> (x Data..?> "SendQuota")
+            Prelude.<*> (x Data..?> "SendingEnabled")
+            Prelude.<*> (x Data..?> "SuppressionAttributes")
+            Prelude.<*> (x Data..?> "VdmAttributes")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAccount where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData GetAccount where
+  rnf _ = ()
+
+instance Data.ToHeaders GetAccount where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetAccount where
+  toPath = Prelude.const "/v2/email/account"
+
+instance Data.ToQuery GetAccount where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | A list of details about the email-sending capabilities of your Amazon
+-- SES account in the current Amazon Web Services Region.
+--
+-- /See:/ 'newGetAccountResponse' smart constructor.
+data GetAccountResponse = GetAccountResponse'
+  { -- | Indicates whether or not the automatic warm-up feature is enabled for
+    -- dedicated IP addresses that are associated with your account.
+    dedicatedIpAutoWarmupEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | An object that defines your account details.
+    details :: Prelude.Maybe AccountDetails,
+    -- | The reputation status of your Amazon SES account. The status can be one
+    -- of the following:
+    --
+    -- -   @HEALTHY@ – There are no reputation-related issues that currently
+    --     impact your account.
+    --
+    -- -   @PROBATION@ – We\'ve identified potential issues with your Amazon
+    --     SES account. We\'re placing your account under review while you work
+    --     on correcting these issues.
+    --
+    -- -   @SHUTDOWN@ – Your account\'s ability to send email is currently
+    --     paused because of an issue with the email sent from your account.
+    --     When you correct the issue, you can contact us and request that your
+    --     account\'s ability to send email is resumed.
+    enforcementStatus :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether or not your account has production access in the
+    -- current Amazon Web Services Region.
+    --
+    -- If the value is @false@, then your account is in the /sandbox/. When
+    -- your account is in the sandbox, you can only send email to verified
+    -- identities. Additionally, the maximum number of emails you can send in a
+    -- 24-hour period (your sending quota) is 200, and the maximum number of
+    -- emails you can send per second (your maximum sending rate) is 1.
+    --
+    -- If the value is @true@, then your account has production access. When
+    -- your account has production access, you can send email to any address.
+    -- The sending quota and maximum sending rate for your account vary based
+    -- on your specific use case.
+    productionAccessEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | An object that contains information about the per-day and per-second
+    -- sending limits for your Amazon SES account in the current Amazon Web
+    -- Services Region.
+    sendQuota :: Prelude.Maybe SendQuota,
+    -- | Indicates whether or not email sending is enabled for your Amazon SES
+    -- account in the current Amazon Web Services Region.
+    sendingEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | An object that contains information about the email address suppression
+    -- preferences for your account in the current Amazon Web Services Region.
+    suppressionAttributes :: Prelude.Maybe SuppressionAttributes,
+    -- | The VDM attributes that apply to your Amazon SES account.
+    vdmAttributes :: Prelude.Maybe VdmAttributes,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAccountResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dedicatedIpAutoWarmupEnabled', 'getAccountResponse_dedicatedIpAutoWarmupEnabled' - Indicates whether or not the automatic warm-up feature is enabled for
+-- dedicated IP addresses that are associated with your account.
+--
+-- 'details', 'getAccountResponse_details' - An object that defines your account details.
+--
+-- 'enforcementStatus', 'getAccountResponse_enforcementStatus' - The reputation status of your Amazon SES account. The status can be one
+-- of the following:
+--
+-- -   @HEALTHY@ – There are no reputation-related issues that currently
+--     impact your account.
+--
+-- -   @PROBATION@ – We\'ve identified potential issues with your Amazon
+--     SES account. We\'re placing your account under review while you work
+--     on correcting these issues.
+--
+-- -   @SHUTDOWN@ – Your account\'s ability to send email is currently
+--     paused because of an issue with the email sent from your account.
+--     When you correct the issue, you can contact us and request that your
+--     account\'s ability to send email is resumed.
+--
+-- 'productionAccessEnabled', 'getAccountResponse_productionAccessEnabled' - Indicates whether or not your account has production access in the
+-- current Amazon Web Services Region.
+--
+-- If the value is @false@, then your account is in the /sandbox/. When
+-- your account is in the sandbox, you can only send email to verified
+-- identities. Additionally, the maximum number of emails you can send in a
+-- 24-hour period (your sending quota) is 200, and the maximum number of
+-- emails you can send per second (your maximum sending rate) is 1.
+--
+-- If the value is @true@, then your account has production access. When
+-- your account has production access, you can send email to any address.
+-- The sending quota and maximum sending rate for your account vary based
+-- on your specific use case.
+--
+-- 'sendQuota', 'getAccountResponse_sendQuota' - An object that contains information about the per-day and per-second
+-- sending limits for your Amazon SES account in the current Amazon Web
+-- Services Region.
+--
+-- 'sendingEnabled', 'getAccountResponse_sendingEnabled' - Indicates whether or not email sending is enabled for your Amazon SES
+-- account in the current Amazon Web Services Region.
+--
+-- 'suppressionAttributes', 'getAccountResponse_suppressionAttributes' - An object that contains information about the email address suppression
+-- preferences for your account in the current Amazon Web Services Region.
+--
+-- 'vdmAttributes', 'getAccountResponse_vdmAttributes' - The VDM attributes that apply to your Amazon SES account.
+--
+-- 'httpStatus', 'getAccountResponse_httpStatus' - The response's http status code.
+newGetAccountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAccountResponse
+newGetAccountResponse pHttpStatus_ =
+  GetAccountResponse'
+    { dedicatedIpAutoWarmupEnabled =
+        Prelude.Nothing,
+      details = Prelude.Nothing,
+      enforcementStatus = Prelude.Nothing,
+      productionAccessEnabled = Prelude.Nothing,
+      sendQuota = Prelude.Nothing,
+      sendingEnabled = Prelude.Nothing,
+      suppressionAttributes = Prelude.Nothing,
+      vdmAttributes = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Indicates whether or not the automatic warm-up feature is enabled for
+-- dedicated IP addresses that are associated with your account.
+getAccountResponse_dedicatedIpAutoWarmupEnabled :: Lens.Lens' GetAccountResponse (Prelude.Maybe Prelude.Bool)
+getAccountResponse_dedicatedIpAutoWarmupEnabled = Lens.lens (\GetAccountResponse' {dedicatedIpAutoWarmupEnabled} -> dedicatedIpAutoWarmupEnabled) (\s@GetAccountResponse' {} a -> s {dedicatedIpAutoWarmupEnabled = a} :: GetAccountResponse)
+
+-- | An object that defines your account details.
+getAccountResponse_details :: Lens.Lens' GetAccountResponse (Prelude.Maybe AccountDetails)
+getAccountResponse_details = Lens.lens (\GetAccountResponse' {details} -> details) (\s@GetAccountResponse' {} a -> s {details = a} :: GetAccountResponse)
+
+-- | The reputation status of your Amazon SES account. The status can be one
+-- of the following:
+--
+-- -   @HEALTHY@ – There are no reputation-related issues that currently
+--     impact your account.
+--
+-- -   @PROBATION@ – We\'ve identified potential issues with your Amazon
+--     SES account. We\'re placing your account under review while you work
+--     on correcting these issues.
+--
+-- -   @SHUTDOWN@ – Your account\'s ability to send email is currently
+--     paused because of an issue with the email sent from your account.
+--     When you correct the issue, you can contact us and request that your
+--     account\'s ability to send email is resumed.
+getAccountResponse_enforcementStatus :: Lens.Lens' GetAccountResponse (Prelude.Maybe Prelude.Text)
+getAccountResponse_enforcementStatus = Lens.lens (\GetAccountResponse' {enforcementStatus} -> enforcementStatus) (\s@GetAccountResponse' {} a -> s {enforcementStatus = a} :: GetAccountResponse)
+
+-- | Indicates whether or not your account has production access in the
+-- current Amazon Web Services Region.
+--
+-- If the value is @false@, then your account is in the /sandbox/. When
+-- your account is in the sandbox, you can only send email to verified
+-- identities. Additionally, the maximum number of emails you can send in a
+-- 24-hour period (your sending quota) is 200, and the maximum number of
+-- emails you can send per second (your maximum sending rate) is 1.
+--
+-- If the value is @true@, then your account has production access. When
+-- your account has production access, you can send email to any address.
+-- The sending quota and maximum sending rate for your account vary based
+-- on your specific use case.
+getAccountResponse_productionAccessEnabled :: Lens.Lens' GetAccountResponse (Prelude.Maybe Prelude.Bool)
+getAccountResponse_productionAccessEnabled = Lens.lens (\GetAccountResponse' {productionAccessEnabled} -> productionAccessEnabled) (\s@GetAccountResponse' {} a -> s {productionAccessEnabled = a} :: GetAccountResponse)
+
+-- | An object that contains information about the per-day and per-second
+-- sending limits for your Amazon SES account in the current Amazon Web
+-- Services Region.
+getAccountResponse_sendQuota :: Lens.Lens' GetAccountResponse (Prelude.Maybe SendQuota)
+getAccountResponse_sendQuota = Lens.lens (\GetAccountResponse' {sendQuota} -> sendQuota) (\s@GetAccountResponse' {} a -> s {sendQuota = a} :: GetAccountResponse)
+
+-- | Indicates whether or not email sending is enabled for your Amazon SES
+-- account in the current Amazon Web Services Region.
+getAccountResponse_sendingEnabled :: Lens.Lens' GetAccountResponse (Prelude.Maybe Prelude.Bool)
+getAccountResponse_sendingEnabled = Lens.lens (\GetAccountResponse' {sendingEnabled} -> sendingEnabled) (\s@GetAccountResponse' {} a -> s {sendingEnabled = a} :: GetAccountResponse)
+
+-- | An object that contains information about the email address suppression
+-- preferences for your account in the current Amazon Web Services Region.
+getAccountResponse_suppressionAttributes :: Lens.Lens' GetAccountResponse (Prelude.Maybe SuppressionAttributes)
+getAccountResponse_suppressionAttributes = Lens.lens (\GetAccountResponse' {suppressionAttributes} -> suppressionAttributes) (\s@GetAccountResponse' {} a -> s {suppressionAttributes = a} :: GetAccountResponse)
+
+-- | The VDM attributes that apply to your Amazon SES account.
+getAccountResponse_vdmAttributes :: Lens.Lens' GetAccountResponse (Prelude.Maybe VdmAttributes)
+getAccountResponse_vdmAttributes = Lens.lens (\GetAccountResponse' {vdmAttributes} -> vdmAttributes) (\s@GetAccountResponse' {} a -> s {vdmAttributes = a} :: GetAccountResponse)
+
+-- | The response's http status code.
+getAccountResponse_httpStatus :: Lens.Lens' GetAccountResponse Prelude.Int
+getAccountResponse_httpStatus = Lens.lens (\GetAccountResponse' {httpStatus} -> httpStatus) (\s@GetAccountResponse' {} a -> s {httpStatus = a} :: GetAccountResponse)
+
+instance Prelude.NFData GetAccountResponse where
+  rnf GetAccountResponse' {..} =
+    Prelude.rnf dedicatedIpAutoWarmupEnabled
+      `Prelude.seq` Prelude.rnf details
+      `Prelude.seq` Prelude.rnf enforcementStatus
+      `Prelude.seq` Prelude.rnf productionAccessEnabled
+      `Prelude.seq` Prelude.rnf sendQuota
+      `Prelude.seq` Prelude.rnf sendingEnabled
+      `Prelude.seq` Prelude.rnf suppressionAttributes
+      `Prelude.seq` Prelude.rnf vdmAttributes
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/GetBlacklistReports.hs b/gen/Amazonka/SESV2/GetBlacklistReports.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetBlacklistReports.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.SESV2.GetBlacklistReports
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve a list of the blacklists that your dedicated IP addresses
+-- appear on.
+module Amazonka.SESV2.GetBlacklistReports
+  ( -- * Creating a Request
+    GetBlacklistReports (..),
+    newGetBlacklistReports,
+
+    -- * Request Lenses
+    getBlacklistReports_blacklistItemNames,
+
+    -- * Destructuring the Response
+    GetBlacklistReportsResponse (..),
+    newGetBlacklistReportsResponse,
+
+    -- * Response Lenses
+    getBlacklistReportsResponse_httpStatus,
+    getBlacklistReportsResponse_blacklistReport,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to retrieve a list of the blacklists that your dedicated IP
+-- addresses appear on.
+--
+-- /See:/ 'newGetBlacklistReports' smart constructor.
+data GetBlacklistReports = GetBlacklistReports'
+  { -- | A list of IP addresses that you want to retrieve blacklist information
+    -- about. You can only specify the dedicated IP addresses that you use to
+    -- send email using Amazon SES or Amazon Pinpoint.
+    blacklistItemNames :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetBlacklistReports' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blacklistItemNames', 'getBlacklistReports_blacklistItemNames' - A list of IP addresses that you want to retrieve blacklist information
+-- about. You can only specify the dedicated IP addresses that you use to
+-- send email using Amazon SES or Amazon Pinpoint.
+newGetBlacklistReports ::
+  GetBlacklistReports
+newGetBlacklistReports =
+  GetBlacklistReports'
+    { blacklistItemNames =
+        Prelude.mempty
+    }
+
+-- | A list of IP addresses that you want to retrieve blacklist information
+-- about. You can only specify the dedicated IP addresses that you use to
+-- send email using Amazon SES or Amazon Pinpoint.
+getBlacklistReports_blacklistItemNames :: Lens.Lens' GetBlacklistReports [Prelude.Text]
+getBlacklistReports_blacklistItemNames = Lens.lens (\GetBlacklistReports' {blacklistItemNames} -> blacklistItemNames) (\s@GetBlacklistReports' {} a -> s {blacklistItemNames = a} :: GetBlacklistReports) Prelude.. Lens.coerced
+
+instance Core.AWSRequest GetBlacklistReports where
+  type
+    AWSResponse GetBlacklistReports =
+      GetBlacklistReportsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetBlacklistReportsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "BlacklistReport"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable GetBlacklistReports where
+  hashWithSalt _salt GetBlacklistReports' {..} =
+    _salt `Prelude.hashWithSalt` blacklistItemNames
+
+instance Prelude.NFData GetBlacklistReports where
+  rnf GetBlacklistReports' {..} =
+    Prelude.rnf blacklistItemNames
+
+instance Data.ToHeaders GetBlacklistReports where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetBlacklistReports where
+  toPath =
+    Prelude.const
+      "/v2/email/deliverability-dashboard/blacklist-report"
+
+instance Data.ToQuery GetBlacklistReports where
+  toQuery GetBlacklistReports' {..} =
+    Prelude.mconcat
+      [ "BlacklistItemNames"
+          Data.=: Data.toQueryList "member" blacklistItemNames
+      ]
+
+-- | An object that contains information about blacklist events.
+--
+-- /See:/ 'newGetBlacklistReportsResponse' smart constructor.
+data GetBlacklistReportsResponse = GetBlacklistReportsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | An object that contains information about a blacklist that one of your
+    -- dedicated IP addresses appears on.
+    blacklistReport :: Prelude.HashMap Prelude.Text [BlacklistEntry]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetBlacklistReportsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getBlacklistReportsResponse_httpStatus' - The response's http status code.
+--
+-- 'blacklistReport', 'getBlacklistReportsResponse_blacklistReport' - An object that contains information about a blacklist that one of your
+-- dedicated IP addresses appears on.
+newGetBlacklistReportsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetBlacklistReportsResponse
+newGetBlacklistReportsResponse pHttpStatus_ =
+  GetBlacklistReportsResponse'
+    { httpStatus =
+        pHttpStatus_,
+      blacklistReport = Prelude.mempty
+    }
+
+-- | The response's http status code.
+getBlacklistReportsResponse_httpStatus :: Lens.Lens' GetBlacklistReportsResponse Prelude.Int
+getBlacklistReportsResponse_httpStatus = Lens.lens (\GetBlacklistReportsResponse' {httpStatus} -> httpStatus) (\s@GetBlacklistReportsResponse' {} a -> s {httpStatus = a} :: GetBlacklistReportsResponse)
+
+-- | An object that contains information about a blacklist that one of your
+-- dedicated IP addresses appears on.
+getBlacklistReportsResponse_blacklistReport :: Lens.Lens' GetBlacklistReportsResponse (Prelude.HashMap Prelude.Text [BlacklistEntry])
+getBlacklistReportsResponse_blacklistReport = Lens.lens (\GetBlacklistReportsResponse' {blacklistReport} -> blacklistReport) (\s@GetBlacklistReportsResponse' {} a -> s {blacklistReport = a} :: GetBlacklistReportsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData GetBlacklistReportsResponse where
+  rnf GetBlacklistReportsResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf blacklistReport
diff --git a/gen/Amazonka/SESV2/GetConfigurationSet.hs b/gen/Amazonka/SESV2/GetConfigurationSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetConfigurationSet.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.SESV2.GetConfigurationSet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get information about an existing configuration set, including the
+-- dedicated IP pool that it\'s associated with, whether or not it\'s
+-- enabled for sending email, and more.
+--
+-- /Configuration sets/ are groups of rules that you can apply to the
+-- emails you send. You apply a configuration set to an email by including
+-- a reference to the configuration set in the headers of the email. When
+-- you apply a configuration set to an email, all of the rules in that
+-- configuration set are applied to the email.
+module Amazonka.SESV2.GetConfigurationSet
+  ( -- * Creating a Request
+    GetConfigurationSet (..),
+    newGetConfigurationSet,
+
+    -- * Request Lenses
+    getConfigurationSet_configurationSetName,
+
+    -- * Destructuring the Response
+    GetConfigurationSetResponse (..),
+    newGetConfigurationSetResponse,
+
+    -- * Response Lenses
+    getConfigurationSetResponse_configurationSetName,
+    getConfigurationSetResponse_deliveryOptions,
+    getConfigurationSetResponse_reputationOptions,
+    getConfigurationSetResponse_sendingOptions,
+    getConfigurationSetResponse_suppressionOptions,
+    getConfigurationSetResponse_tags,
+    getConfigurationSetResponse_trackingOptions,
+    getConfigurationSetResponse_vdmOptions,
+    getConfigurationSetResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to obtain information about a configuration set.
+--
+-- /See:/ 'newGetConfigurationSet' smart constructor.
+data GetConfigurationSet = GetConfigurationSet'
+  { -- | The name of the configuration set.
+    configurationSetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConfigurationSet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configurationSetName', 'getConfigurationSet_configurationSetName' - The name of the configuration set.
+newGetConfigurationSet ::
+  -- | 'configurationSetName'
+  Prelude.Text ->
+  GetConfigurationSet
+newGetConfigurationSet pConfigurationSetName_ =
+  GetConfigurationSet'
+    { configurationSetName =
+        pConfigurationSetName_
+    }
+
+-- | The name of the configuration set.
+getConfigurationSet_configurationSetName :: Lens.Lens' GetConfigurationSet Prelude.Text
+getConfigurationSet_configurationSetName = Lens.lens (\GetConfigurationSet' {configurationSetName} -> configurationSetName) (\s@GetConfigurationSet' {} a -> s {configurationSetName = a} :: GetConfigurationSet)
+
+instance Core.AWSRequest GetConfigurationSet where
+  type
+    AWSResponse GetConfigurationSet =
+      GetConfigurationSetResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetConfigurationSetResponse'
+            Prelude.<$> (x Data..?> "ConfigurationSetName")
+            Prelude.<*> (x Data..?> "DeliveryOptions")
+            Prelude.<*> (x Data..?> "ReputationOptions")
+            Prelude.<*> (x Data..?> "SendingOptions")
+            Prelude.<*> (x Data..?> "SuppressionOptions")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "TrackingOptions")
+            Prelude.<*> (x Data..?> "VdmOptions")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetConfigurationSet where
+  hashWithSalt _salt GetConfigurationSet' {..} =
+    _salt `Prelude.hashWithSalt` configurationSetName
+
+instance Prelude.NFData GetConfigurationSet where
+  rnf GetConfigurationSet' {..} =
+    Prelude.rnf configurationSetName
+
+instance Data.ToHeaders GetConfigurationSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetConfigurationSet where
+  toPath GetConfigurationSet' {..} =
+    Prelude.mconcat
+      [ "/v2/email/configuration-sets/",
+        Data.toBS configurationSetName
+      ]
+
+instance Data.ToQuery GetConfigurationSet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | Information about a configuration set.
+--
+-- /See:/ 'newGetConfigurationSetResponse' smart constructor.
+data GetConfigurationSetResponse = GetConfigurationSetResponse'
+  { -- | The name of the configuration set.
+    configurationSetName :: Prelude.Maybe Prelude.Text,
+    -- | An object that defines the dedicated IP pool that is used to send emails
+    -- that you send using the configuration set.
+    deliveryOptions :: Prelude.Maybe DeliveryOptions,
+    -- | An object that defines whether or not Amazon SES collects reputation
+    -- metrics for the emails that you send that use the configuration set.
+    reputationOptions :: Prelude.Maybe ReputationOptions,
+    -- | An object that defines whether or not Amazon SES can send email that you
+    -- send using the configuration set.
+    sendingOptions :: Prelude.Maybe SendingOptions,
+    -- | An object that contains information about the suppression list
+    -- preferences for your account.
+    suppressionOptions :: Prelude.Maybe SuppressionOptions,
+    -- | An array of objects that define the tags (keys and values) that are
+    -- associated with the configuration set.
+    tags :: Prelude.Maybe [Tag],
+    -- | An object that defines the open and click tracking options for emails
+    -- that you send using the configuration set.
+    trackingOptions :: Prelude.Maybe TrackingOptions,
+    -- | An object that contains information about the VDM preferences for your
+    -- configuration set.
+    vdmOptions :: Prelude.Maybe VdmOptions,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConfigurationSetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configurationSetName', 'getConfigurationSetResponse_configurationSetName' - The name of the configuration set.
+--
+-- 'deliveryOptions', 'getConfigurationSetResponse_deliveryOptions' - An object that defines the dedicated IP pool that is used to send emails
+-- that you send using the configuration set.
+--
+-- 'reputationOptions', 'getConfigurationSetResponse_reputationOptions' - An object that defines whether or not Amazon SES collects reputation
+-- metrics for the emails that you send that use the configuration set.
+--
+-- 'sendingOptions', 'getConfigurationSetResponse_sendingOptions' - An object that defines whether or not Amazon SES can send email that you
+-- send using the configuration set.
+--
+-- 'suppressionOptions', 'getConfigurationSetResponse_suppressionOptions' - An object that contains information about the suppression list
+-- preferences for your account.
+--
+-- 'tags', 'getConfigurationSetResponse_tags' - An array of objects that define the tags (keys and values) that are
+-- associated with the configuration set.
+--
+-- 'trackingOptions', 'getConfigurationSetResponse_trackingOptions' - An object that defines the open and click tracking options for emails
+-- that you send using the configuration set.
+--
+-- 'vdmOptions', 'getConfigurationSetResponse_vdmOptions' - An object that contains information about the VDM preferences for your
+-- configuration set.
+--
+-- 'httpStatus', 'getConfigurationSetResponse_httpStatus' - The response's http status code.
+newGetConfigurationSetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetConfigurationSetResponse
+newGetConfigurationSetResponse pHttpStatus_ =
+  GetConfigurationSetResponse'
+    { configurationSetName =
+        Prelude.Nothing,
+      deliveryOptions = Prelude.Nothing,
+      reputationOptions = Prelude.Nothing,
+      sendingOptions = Prelude.Nothing,
+      suppressionOptions = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      trackingOptions = Prelude.Nothing,
+      vdmOptions = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The name of the configuration set.
+getConfigurationSetResponse_configurationSetName :: Lens.Lens' GetConfigurationSetResponse (Prelude.Maybe Prelude.Text)
+getConfigurationSetResponse_configurationSetName = Lens.lens (\GetConfigurationSetResponse' {configurationSetName} -> configurationSetName) (\s@GetConfigurationSetResponse' {} a -> s {configurationSetName = a} :: GetConfigurationSetResponse)
+
+-- | An object that defines the dedicated IP pool that is used to send emails
+-- that you send using the configuration set.
+getConfigurationSetResponse_deliveryOptions :: Lens.Lens' GetConfigurationSetResponse (Prelude.Maybe DeliveryOptions)
+getConfigurationSetResponse_deliveryOptions = Lens.lens (\GetConfigurationSetResponse' {deliveryOptions} -> deliveryOptions) (\s@GetConfigurationSetResponse' {} a -> s {deliveryOptions = a} :: GetConfigurationSetResponse)
+
+-- | An object that defines whether or not Amazon SES collects reputation
+-- metrics for the emails that you send that use the configuration set.
+getConfigurationSetResponse_reputationOptions :: Lens.Lens' GetConfigurationSetResponse (Prelude.Maybe ReputationOptions)
+getConfigurationSetResponse_reputationOptions = Lens.lens (\GetConfigurationSetResponse' {reputationOptions} -> reputationOptions) (\s@GetConfigurationSetResponse' {} a -> s {reputationOptions = a} :: GetConfigurationSetResponse)
+
+-- | An object that defines whether or not Amazon SES can send email that you
+-- send using the configuration set.
+getConfigurationSetResponse_sendingOptions :: Lens.Lens' GetConfigurationSetResponse (Prelude.Maybe SendingOptions)
+getConfigurationSetResponse_sendingOptions = Lens.lens (\GetConfigurationSetResponse' {sendingOptions} -> sendingOptions) (\s@GetConfigurationSetResponse' {} a -> s {sendingOptions = a} :: GetConfigurationSetResponse)
+
+-- | An object that contains information about the suppression list
+-- preferences for your account.
+getConfigurationSetResponse_suppressionOptions :: Lens.Lens' GetConfigurationSetResponse (Prelude.Maybe SuppressionOptions)
+getConfigurationSetResponse_suppressionOptions = Lens.lens (\GetConfigurationSetResponse' {suppressionOptions} -> suppressionOptions) (\s@GetConfigurationSetResponse' {} a -> s {suppressionOptions = a} :: GetConfigurationSetResponse)
+
+-- | An array of objects that define the tags (keys and values) that are
+-- associated with the configuration set.
+getConfigurationSetResponse_tags :: Lens.Lens' GetConfigurationSetResponse (Prelude.Maybe [Tag])
+getConfigurationSetResponse_tags = Lens.lens (\GetConfigurationSetResponse' {tags} -> tags) (\s@GetConfigurationSetResponse' {} a -> s {tags = a} :: GetConfigurationSetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | An object that defines the open and click tracking options for emails
+-- that you send using the configuration set.
+getConfigurationSetResponse_trackingOptions :: Lens.Lens' GetConfigurationSetResponse (Prelude.Maybe TrackingOptions)
+getConfigurationSetResponse_trackingOptions = Lens.lens (\GetConfigurationSetResponse' {trackingOptions} -> trackingOptions) (\s@GetConfigurationSetResponse' {} a -> s {trackingOptions = a} :: GetConfigurationSetResponse)
+
+-- | An object that contains information about the VDM preferences for your
+-- configuration set.
+getConfigurationSetResponse_vdmOptions :: Lens.Lens' GetConfigurationSetResponse (Prelude.Maybe VdmOptions)
+getConfigurationSetResponse_vdmOptions = Lens.lens (\GetConfigurationSetResponse' {vdmOptions} -> vdmOptions) (\s@GetConfigurationSetResponse' {} a -> s {vdmOptions = a} :: GetConfigurationSetResponse)
+
+-- | The response's http status code.
+getConfigurationSetResponse_httpStatus :: Lens.Lens' GetConfigurationSetResponse Prelude.Int
+getConfigurationSetResponse_httpStatus = Lens.lens (\GetConfigurationSetResponse' {httpStatus} -> httpStatus) (\s@GetConfigurationSetResponse' {} a -> s {httpStatus = a} :: GetConfigurationSetResponse)
+
+instance Prelude.NFData GetConfigurationSetResponse where
+  rnf GetConfigurationSetResponse' {..} =
+    Prelude.rnf configurationSetName
+      `Prelude.seq` Prelude.rnf deliveryOptions
+      `Prelude.seq` Prelude.rnf reputationOptions
+      `Prelude.seq` Prelude.rnf sendingOptions
+      `Prelude.seq` Prelude.rnf suppressionOptions
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf trackingOptions
+      `Prelude.seq` Prelude.rnf vdmOptions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/GetConfigurationSetEventDestinations.hs b/gen/Amazonka/SESV2/GetConfigurationSetEventDestinations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetConfigurationSetEventDestinations.hs
@@ -0,0 +1,210 @@
+{-# 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.SESV2.GetConfigurationSetEventDestinations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve a list of event destinations that are associated with a
+-- configuration set.
+--
+-- /Events/ include message sends, deliveries, opens, clicks, bounces, and
+-- complaints. /Event destinations/ are places that you can send
+-- information about these events to. For example, you can send event data
+-- to Amazon SNS to receive notifications when you receive bounces or
+-- complaints, or you can use Amazon Kinesis Data Firehose to stream data
+-- to Amazon S3 for long-term storage.
+module Amazonka.SESV2.GetConfigurationSetEventDestinations
+  ( -- * Creating a Request
+    GetConfigurationSetEventDestinations (..),
+    newGetConfigurationSetEventDestinations,
+
+    -- * Request Lenses
+    getConfigurationSetEventDestinations_configurationSetName,
+
+    -- * Destructuring the Response
+    GetConfigurationSetEventDestinationsResponse (..),
+    newGetConfigurationSetEventDestinationsResponse,
+
+    -- * Response Lenses
+    getConfigurationSetEventDestinationsResponse_eventDestinations,
+    getConfigurationSetEventDestinationsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to obtain information about the event destinations for a
+-- configuration set.
+--
+-- /See:/ 'newGetConfigurationSetEventDestinations' smart constructor.
+data GetConfigurationSetEventDestinations = GetConfigurationSetEventDestinations'
+  { -- | The name of the configuration set that contains the event destination.
+    configurationSetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConfigurationSetEventDestinations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configurationSetName', 'getConfigurationSetEventDestinations_configurationSetName' - The name of the configuration set that contains the event destination.
+newGetConfigurationSetEventDestinations ::
+  -- | 'configurationSetName'
+  Prelude.Text ->
+  GetConfigurationSetEventDestinations
+newGetConfigurationSetEventDestinations
+  pConfigurationSetName_ =
+    GetConfigurationSetEventDestinations'
+      { configurationSetName =
+          pConfigurationSetName_
+      }
+
+-- | The name of the configuration set that contains the event destination.
+getConfigurationSetEventDestinations_configurationSetName :: Lens.Lens' GetConfigurationSetEventDestinations Prelude.Text
+getConfigurationSetEventDestinations_configurationSetName = Lens.lens (\GetConfigurationSetEventDestinations' {configurationSetName} -> configurationSetName) (\s@GetConfigurationSetEventDestinations' {} a -> s {configurationSetName = a} :: GetConfigurationSetEventDestinations)
+
+instance
+  Core.AWSRequest
+    GetConfigurationSetEventDestinations
+  where
+  type
+    AWSResponse GetConfigurationSetEventDestinations =
+      GetConfigurationSetEventDestinationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetConfigurationSetEventDestinationsResponse'
+            Prelude.<$> ( x
+                            Data..?> "EventDestinations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetConfigurationSetEventDestinations
+  where
+  hashWithSalt
+    _salt
+    GetConfigurationSetEventDestinations' {..} =
+      _salt `Prelude.hashWithSalt` configurationSetName
+
+instance
+  Prelude.NFData
+    GetConfigurationSetEventDestinations
+  where
+  rnf GetConfigurationSetEventDestinations' {..} =
+    Prelude.rnf configurationSetName
+
+instance
+  Data.ToHeaders
+    GetConfigurationSetEventDestinations
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToPath
+    GetConfigurationSetEventDestinations
+  where
+  toPath GetConfigurationSetEventDestinations' {..} =
+    Prelude.mconcat
+      [ "/v2/email/configuration-sets/",
+        Data.toBS configurationSetName,
+        "/event-destinations"
+      ]
+
+instance
+  Data.ToQuery
+    GetConfigurationSetEventDestinations
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | Information about an event destination for a configuration set.
+--
+-- /See:/ 'newGetConfigurationSetEventDestinationsResponse' smart constructor.
+data GetConfigurationSetEventDestinationsResponse = GetConfigurationSetEventDestinationsResponse'
+  { -- | An array that includes all of the events destinations that have been
+    -- configured for the configuration set.
+    eventDestinations :: Prelude.Maybe [EventDestination],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConfigurationSetEventDestinationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventDestinations', 'getConfigurationSetEventDestinationsResponse_eventDestinations' - An array that includes all of the events destinations that have been
+-- configured for the configuration set.
+--
+-- 'httpStatus', 'getConfigurationSetEventDestinationsResponse_httpStatus' - The response's http status code.
+newGetConfigurationSetEventDestinationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetConfigurationSetEventDestinationsResponse
+newGetConfigurationSetEventDestinationsResponse
+  pHttpStatus_ =
+    GetConfigurationSetEventDestinationsResponse'
+      { eventDestinations =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | An array that includes all of the events destinations that have been
+-- configured for the configuration set.
+getConfigurationSetEventDestinationsResponse_eventDestinations :: Lens.Lens' GetConfigurationSetEventDestinationsResponse (Prelude.Maybe [EventDestination])
+getConfigurationSetEventDestinationsResponse_eventDestinations = Lens.lens (\GetConfigurationSetEventDestinationsResponse' {eventDestinations} -> eventDestinations) (\s@GetConfigurationSetEventDestinationsResponse' {} a -> s {eventDestinations = a} :: GetConfigurationSetEventDestinationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getConfigurationSetEventDestinationsResponse_httpStatus :: Lens.Lens' GetConfigurationSetEventDestinationsResponse Prelude.Int
+getConfigurationSetEventDestinationsResponse_httpStatus = Lens.lens (\GetConfigurationSetEventDestinationsResponse' {httpStatus} -> httpStatus) (\s@GetConfigurationSetEventDestinationsResponse' {} a -> s {httpStatus = a} :: GetConfigurationSetEventDestinationsResponse)
+
+instance
+  Prelude.NFData
+    GetConfigurationSetEventDestinationsResponse
+  where
+  rnf GetConfigurationSetEventDestinationsResponse' {..} =
+    Prelude.rnf eventDestinations
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/GetContact.hs b/gen/Amazonka/SESV2/GetContact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetContact.hs
@@ -0,0 +1,275 @@
+{-# 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.SESV2.GetContact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a contact from a contact list.
+module Amazonka.SESV2.GetContact
+  ( -- * Creating a Request
+    GetContact (..),
+    newGetContact,
+
+    -- * Request Lenses
+    getContact_contactListName,
+    getContact_emailAddress,
+
+    -- * Destructuring the Response
+    GetContactResponse (..),
+    newGetContactResponse,
+
+    -- * Response Lenses
+    getContactResponse_attributesData,
+    getContactResponse_contactListName,
+    getContactResponse_createdTimestamp,
+    getContactResponse_emailAddress,
+    getContactResponse_lastUpdatedTimestamp,
+    getContactResponse_topicDefaultPreferences,
+    getContactResponse_topicPreferences,
+    getContactResponse_unsubscribeAll,
+    getContactResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | /See:/ 'newGetContact' smart constructor.
+data GetContact = GetContact'
+  { -- | The name of the contact list to which the contact belongs.
+    contactListName :: Prelude.Text,
+    -- | The contact\'s email addres.
+    emailAddress :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetContact' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactListName', 'getContact_contactListName' - The name of the contact list to which the contact belongs.
+--
+-- 'emailAddress', 'getContact_emailAddress' - The contact\'s email addres.
+newGetContact ::
+  -- | 'contactListName'
+  Prelude.Text ->
+  -- | 'emailAddress'
+  Prelude.Text ->
+  GetContact
+newGetContact pContactListName_ pEmailAddress_ =
+  GetContact'
+    { contactListName = pContactListName_,
+      emailAddress = pEmailAddress_
+    }
+
+-- | The name of the contact list to which the contact belongs.
+getContact_contactListName :: Lens.Lens' GetContact Prelude.Text
+getContact_contactListName = Lens.lens (\GetContact' {contactListName} -> contactListName) (\s@GetContact' {} a -> s {contactListName = a} :: GetContact)
+
+-- | The contact\'s email addres.
+getContact_emailAddress :: Lens.Lens' GetContact Prelude.Text
+getContact_emailAddress = Lens.lens (\GetContact' {emailAddress} -> emailAddress) (\s@GetContact' {} a -> s {emailAddress = a} :: GetContact)
+
+instance Core.AWSRequest GetContact where
+  type AWSResponse GetContact = GetContactResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetContactResponse'
+            Prelude.<$> (x Data..?> "AttributesData")
+            Prelude.<*> (x Data..?> "ContactListName")
+            Prelude.<*> (x Data..?> "CreatedTimestamp")
+            Prelude.<*> (x Data..?> "EmailAddress")
+            Prelude.<*> (x Data..?> "LastUpdatedTimestamp")
+            Prelude.<*> ( x
+                            Data..?> "TopicDefaultPreferences"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "TopicPreferences"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "UnsubscribeAll")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetContact where
+  hashWithSalt _salt GetContact' {..} =
+    _salt
+      `Prelude.hashWithSalt` contactListName
+      `Prelude.hashWithSalt` emailAddress
+
+instance Prelude.NFData GetContact where
+  rnf GetContact' {..} =
+    Prelude.rnf contactListName
+      `Prelude.seq` Prelude.rnf emailAddress
+
+instance Data.ToHeaders GetContact where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetContact where
+  toPath GetContact' {..} =
+    Prelude.mconcat
+      [ "/v2/email/contact-lists/",
+        Data.toBS contactListName,
+        "/contacts/",
+        Data.toBS emailAddress
+      ]
+
+instance Data.ToQuery GetContact where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetContactResponse' smart constructor.
+data GetContactResponse = GetContactResponse'
+  { -- | The attribute data attached to a contact.
+    attributesData :: Prelude.Maybe Prelude.Text,
+    -- | The name of the contact list to which the contact belongs.
+    contactListName :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp noting when the contact was created.
+    createdTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The contact\'s email addres.
+    emailAddress :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp noting the last time the contact\'s information was updated.
+    lastUpdatedTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The default topic preferences applied to the contact.
+    topicDefaultPreferences :: Prelude.Maybe [TopicPreference],
+    -- | The contact\'s preference for being opted-in to or opted-out of a
+    -- topic.>
+    topicPreferences :: Prelude.Maybe [TopicPreference],
+    -- | A boolean value status noting if the contact is unsubscribed from all
+    -- contact list topics.
+    unsubscribeAll :: 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 'GetContactResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributesData', 'getContactResponse_attributesData' - The attribute data attached to a contact.
+--
+-- 'contactListName', 'getContactResponse_contactListName' - The name of the contact list to which the contact belongs.
+--
+-- 'createdTimestamp', 'getContactResponse_createdTimestamp' - A timestamp noting when the contact was created.
+--
+-- 'emailAddress', 'getContactResponse_emailAddress' - The contact\'s email addres.
+--
+-- 'lastUpdatedTimestamp', 'getContactResponse_lastUpdatedTimestamp' - A timestamp noting the last time the contact\'s information was updated.
+--
+-- 'topicDefaultPreferences', 'getContactResponse_topicDefaultPreferences' - The default topic preferences applied to the contact.
+--
+-- 'topicPreferences', 'getContactResponse_topicPreferences' - The contact\'s preference for being opted-in to or opted-out of a
+-- topic.>
+--
+-- 'unsubscribeAll', 'getContactResponse_unsubscribeAll' - A boolean value status noting if the contact is unsubscribed from all
+-- contact list topics.
+--
+-- 'httpStatus', 'getContactResponse_httpStatus' - The response's http status code.
+newGetContactResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetContactResponse
+newGetContactResponse pHttpStatus_ =
+  GetContactResponse'
+    { attributesData =
+        Prelude.Nothing,
+      contactListName = Prelude.Nothing,
+      createdTimestamp = Prelude.Nothing,
+      emailAddress = Prelude.Nothing,
+      lastUpdatedTimestamp = Prelude.Nothing,
+      topicDefaultPreferences = Prelude.Nothing,
+      topicPreferences = Prelude.Nothing,
+      unsubscribeAll = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The attribute data attached to a contact.
+getContactResponse_attributesData :: Lens.Lens' GetContactResponse (Prelude.Maybe Prelude.Text)
+getContactResponse_attributesData = Lens.lens (\GetContactResponse' {attributesData} -> attributesData) (\s@GetContactResponse' {} a -> s {attributesData = a} :: GetContactResponse)
+
+-- | The name of the contact list to which the contact belongs.
+getContactResponse_contactListName :: Lens.Lens' GetContactResponse (Prelude.Maybe Prelude.Text)
+getContactResponse_contactListName = Lens.lens (\GetContactResponse' {contactListName} -> contactListName) (\s@GetContactResponse' {} a -> s {contactListName = a} :: GetContactResponse)
+
+-- | A timestamp noting when the contact was created.
+getContactResponse_createdTimestamp :: Lens.Lens' GetContactResponse (Prelude.Maybe Prelude.UTCTime)
+getContactResponse_createdTimestamp = Lens.lens (\GetContactResponse' {createdTimestamp} -> createdTimestamp) (\s@GetContactResponse' {} a -> s {createdTimestamp = a} :: GetContactResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The contact\'s email addres.
+getContactResponse_emailAddress :: Lens.Lens' GetContactResponse (Prelude.Maybe Prelude.Text)
+getContactResponse_emailAddress = Lens.lens (\GetContactResponse' {emailAddress} -> emailAddress) (\s@GetContactResponse' {} a -> s {emailAddress = a} :: GetContactResponse)
+
+-- | A timestamp noting the last time the contact\'s information was updated.
+getContactResponse_lastUpdatedTimestamp :: Lens.Lens' GetContactResponse (Prelude.Maybe Prelude.UTCTime)
+getContactResponse_lastUpdatedTimestamp = Lens.lens (\GetContactResponse' {lastUpdatedTimestamp} -> lastUpdatedTimestamp) (\s@GetContactResponse' {} a -> s {lastUpdatedTimestamp = a} :: GetContactResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The default topic preferences applied to the contact.
+getContactResponse_topicDefaultPreferences :: Lens.Lens' GetContactResponse (Prelude.Maybe [TopicPreference])
+getContactResponse_topicDefaultPreferences = Lens.lens (\GetContactResponse' {topicDefaultPreferences} -> topicDefaultPreferences) (\s@GetContactResponse' {} a -> s {topicDefaultPreferences = a} :: GetContactResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The contact\'s preference for being opted-in to or opted-out of a
+-- topic.>
+getContactResponse_topicPreferences :: Lens.Lens' GetContactResponse (Prelude.Maybe [TopicPreference])
+getContactResponse_topicPreferences = Lens.lens (\GetContactResponse' {topicPreferences} -> topicPreferences) (\s@GetContactResponse' {} a -> s {topicPreferences = a} :: GetContactResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A boolean value status noting if the contact is unsubscribed from all
+-- contact list topics.
+getContactResponse_unsubscribeAll :: Lens.Lens' GetContactResponse (Prelude.Maybe Prelude.Bool)
+getContactResponse_unsubscribeAll = Lens.lens (\GetContactResponse' {unsubscribeAll} -> unsubscribeAll) (\s@GetContactResponse' {} a -> s {unsubscribeAll = a} :: GetContactResponse)
+
+-- | The response's http status code.
+getContactResponse_httpStatus :: Lens.Lens' GetContactResponse Prelude.Int
+getContactResponse_httpStatus = Lens.lens (\GetContactResponse' {httpStatus} -> httpStatus) (\s@GetContactResponse' {} a -> s {httpStatus = a} :: GetContactResponse)
+
+instance Prelude.NFData GetContactResponse where
+  rnf GetContactResponse' {..} =
+    Prelude.rnf attributesData
+      `Prelude.seq` Prelude.rnf contactListName
+      `Prelude.seq` Prelude.rnf createdTimestamp
+      `Prelude.seq` Prelude.rnf emailAddress
+      `Prelude.seq` Prelude.rnf lastUpdatedTimestamp
+      `Prelude.seq` Prelude.rnf topicDefaultPreferences
+      `Prelude.seq` Prelude.rnf topicPreferences
+      `Prelude.seq` Prelude.rnf unsubscribeAll
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/GetContactList.hs b/gen/Amazonka/SESV2/GetContactList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetContactList.hs
@@ -0,0 +1,228 @@
+{-# 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.SESV2.GetContactList
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns contact list metadata. It does not return any information about
+-- the contacts present in the list.
+module Amazonka.SESV2.GetContactList
+  ( -- * Creating a Request
+    GetContactList (..),
+    newGetContactList,
+
+    -- * Request Lenses
+    getContactList_contactListName,
+
+    -- * Destructuring the Response
+    GetContactListResponse (..),
+    newGetContactListResponse,
+
+    -- * Response Lenses
+    getContactListResponse_contactListName,
+    getContactListResponse_createdTimestamp,
+    getContactListResponse_description,
+    getContactListResponse_lastUpdatedTimestamp,
+    getContactListResponse_tags,
+    getContactListResponse_topics,
+    getContactListResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | /See:/ 'newGetContactList' smart constructor.
+data GetContactList = GetContactList'
+  { -- | The name of the contact list.
+    contactListName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetContactList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactListName', 'getContactList_contactListName' - The name of the contact list.
+newGetContactList ::
+  -- | 'contactListName'
+  Prelude.Text ->
+  GetContactList
+newGetContactList pContactListName_ =
+  GetContactList'
+    { contactListName =
+        pContactListName_
+    }
+
+-- | The name of the contact list.
+getContactList_contactListName :: Lens.Lens' GetContactList Prelude.Text
+getContactList_contactListName = Lens.lens (\GetContactList' {contactListName} -> contactListName) (\s@GetContactList' {} a -> s {contactListName = a} :: GetContactList)
+
+instance Core.AWSRequest GetContactList where
+  type
+    AWSResponse GetContactList =
+      GetContactListResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetContactListResponse'
+            Prelude.<$> (x Data..?> "ContactListName")
+            Prelude.<*> (x Data..?> "CreatedTimestamp")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "LastUpdatedTimestamp")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Topics" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetContactList where
+  hashWithSalt _salt GetContactList' {..} =
+    _salt `Prelude.hashWithSalt` contactListName
+
+instance Prelude.NFData GetContactList where
+  rnf GetContactList' {..} = Prelude.rnf contactListName
+
+instance Data.ToHeaders GetContactList where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetContactList where
+  toPath GetContactList' {..} =
+    Prelude.mconcat
+      [ "/v2/email/contact-lists/",
+        Data.toBS contactListName
+      ]
+
+instance Data.ToQuery GetContactList where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetContactListResponse' smart constructor.
+data GetContactListResponse = GetContactListResponse'
+  { -- | The name of the contact list.
+    contactListName :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp noting when the contact list was created.
+    createdTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | A description of what the contact list is about.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp noting the last time the contact list was updated.
+    lastUpdatedTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The tags associated with a contact list.
+    tags :: Prelude.Maybe [Tag],
+    -- | An interest group, theme, or label within a list. A contact list can
+    -- have multiple topics.
+    topics :: Prelude.Maybe [Topic],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetContactListResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactListName', 'getContactListResponse_contactListName' - The name of the contact list.
+--
+-- 'createdTimestamp', 'getContactListResponse_createdTimestamp' - A timestamp noting when the contact list was created.
+--
+-- 'description', 'getContactListResponse_description' - A description of what the contact list is about.
+--
+-- 'lastUpdatedTimestamp', 'getContactListResponse_lastUpdatedTimestamp' - A timestamp noting the last time the contact list was updated.
+--
+-- 'tags', 'getContactListResponse_tags' - The tags associated with a contact list.
+--
+-- 'topics', 'getContactListResponse_topics' - An interest group, theme, or label within a list. A contact list can
+-- have multiple topics.
+--
+-- 'httpStatus', 'getContactListResponse_httpStatus' - The response's http status code.
+newGetContactListResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetContactListResponse
+newGetContactListResponse pHttpStatus_ =
+  GetContactListResponse'
+    { contactListName =
+        Prelude.Nothing,
+      createdTimestamp = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastUpdatedTimestamp = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      topics = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The name of the contact list.
+getContactListResponse_contactListName :: Lens.Lens' GetContactListResponse (Prelude.Maybe Prelude.Text)
+getContactListResponse_contactListName = Lens.lens (\GetContactListResponse' {contactListName} -> contactListName) (\s@GetContactListResponse' {} a -> s {contactListName = a} :: GetContactListResponse)
+
+-- | A timestamp noting when the contact list was created.
+getContactListResponse_createdTimestamp :: Lens.Lens' GetContactListResponse (Prelude.Maybe Prelude.UTCTime)
+getContactListResponse_createdTimestamp = Lens.lens (\GetContactListResponse' {createdTimestamp} -> createdTimestamp) (\s@GetContactListResponse' {} a -> s {createdTimestamp = a} :: GetContactListResponse) Prelude.. Lens.mapping Data._Time
+
+-- | A description of what the contact list is about.
+getContactListResponse_description :: Lens.Lens' GetContactListResponse (Prelude.Maybe Prelude.Text)
+getContactListResponse_description = Lens.lens (\GetContactListResponse' {description} -> description) (\s@GetContactListResponse' {} a -> s {description = a} :: GetContactListResponse)
+
+-- | A timestamp noting the last time the contact list was updated.
+getContactListResponse_lastUpdatedTimestamp :: Lens.Lens' GetContactListResponse (Prelude.Maybe Prelude.UTCTime)
+getContactListResponse_lastUpdatedTimestamp = Lens.lens (\GetContactListResponse' {lastUpdatedTimestamp} -> lastUpdatedTimestamp) (\s@GetContactListResponse' {} a -> s {lastUpdatedTimestamp = a} :: GetContactListResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The tags associated with a contact list.
+getContactListResponse_tags :: Lens.Lens' GetContactListResponse (Prelude.Maybe [Tag])
+getContactListResponse_tags = Lens.lens (\GetContactListResponse' {tags} -> tags) (\s@GetContactListResponse' {} a -> s {tags = a} :: GetContactListResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | An interest group, theme, or label within a list. A contact list can
+-- have multiple topics.
+getContactListResponse_topics :: Lens.Lens' GetContactListResponse (Prelude.Maybe [Topic])
+getContactListResponse_topics = Lens.lens (\GetContactListResponse' {topics} -> topics) (\s@GetContactListResponse' {} a -> s {topics = a} :: GetContactListResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getContactListResponse_httpStatus :: Lens.Lens' GetContactListResponse Prelude.Int
+getContactListResponse_httpStatus = Lens.lens (\GetContactListResponse' {httpStatus} -> httpStatus) (\s@GetContactListResponse' {} a -> s {httpStatus = a} :: GetContactListResponse)
+
+instance Prelude.NFData GetContactListResponse where
+  rnf GetContactListResponse' {..} =
+    Prelude.rnf contactListName
+      `Prelude.seq` Prelude.rnf createdTimestamp
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastUpdatedTimestamp
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf topics
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/GetCustomVerificationEmailTemplate.hs b/gen/Amazonka/SESV2/GetCustomVerificationEmailTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetCustomVerificationEmailTemplate.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.SESV2.GetCustomVerificationEmailTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the custom email verification template for the template name you
+-- specify.
+--
+-- For more information about custom verification email templates, see
+-- <https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#send-email-verify-address-custom Using custom verification email templates>
+-- in the /Amazon SES Developer Guide/.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.GetCustomVerificationEmailTemplate
+  ( -- * Creating a Request
+    GetCustomVerificationEmailTemplate (..),
+    newGetCustomVerificationEmailTemplate,
+
+    -- * Request Lenses
+    getCustomVerificationEmailTemplate_templateName,
+
+    -- * Destructuring the Response
+    GetCustomVerificationEmailTemplateResponse (..),
+    newGetCustomVerificationEmailTemplateResponse,
+
+    -- * Response Lenses
+    getCustomVerificationEmailTemplateResponse_failureRedirectionURL,
+    getCustomVerificationEmailTemplateResponse_fromEmailAddress,
+    getCustomVerificationEmailTemplateResponse_successRedirectionURL,
+    getCustomVerificationEmailTemplateResponse_templateContent,
+    getCustomVerificationEmailTemplateResponse_templateName,
+    getCustomVerificationEmailTemplateResponse_templateSubject,
+    getCustomVerificationEmailTemplateResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to retrieve an existing custom verification email
+-- template.
+--
+-- /See:/ 'newGetCustomVerificationEmailTemplate' smart constructor.
+data GetCustomVerificationEmailTemplate = GetCustomVerificationEmailTemplate'
+  { -- | The name of the custom verification email template that you want to
+    -- retrieve.
+    templateName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCustomVerificationEmailTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'templateName', 'getCustomVerificationEmailTemplate_templateName' - The name of the custom verification email template that you want to
+-- retrieve.
+newGetCustomVerificationEmailTemplate ::
+  -- | 'templateName'
+  Prelude.Text ->
+  GetCustomVerificationEmailTemplate
+newGetCustomVerificationEmailTemplate pTemplateName_ =
+  GetCustomVerificationEmailTemplate'
+    { templateName =
+        pTemplateName_
+    }
+
+-- | The name of the custom verification email template that you want to
+-- retrieve.
+getCustomVerificationEmailTemplate_templateName :: Lens.Lens' GetCustomVerificationEmailTemplate Prelude.Text
+getCustomVerificationEmailTemplate_templateName = Lens.lens (\GetCustomVerificationEmailTemplate' {templateName} -> templateName) (\s@GetCustomVerificationEmailTemplate' {} a -> s {templateName = a} :: GetCustomVerificationEmailTemplate)
+
+instance
+  Core.AWSRequest
+    GetCustomVerificationEmailTemplate
+  where
+  type
+    AWSResponse GetCustomVerificationEmailTemplate =
+      GetCustomVerificationEmailTemplateResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetCustomVerificationEmailTemplateResponse'
+            Prelude.<$> (x Data..?> "FailureRedirectionURL")
+            Prelude.<*> (x Data..?> "FromEmailAddress")
+            Prelude.<*> (x Data..?> "SuccessRedirectionURL")
+            Prelude.<*> (x Data..?> "TemplateContent")
+            Prelude.<*> (x Data..?> "TemplateName")
+            Prelude.<*> (x Data..?> "TemplateSubject")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetCustomVerificationEmailTemplate
+  where
+  hashWithSalt
+    _salt
+    GetCustomVerificationEmailTemplate' {..} =
+      _salt `Prelude.hashWithSalt` templateName
+
+instance
+  Prelude.NFData
+    GetCustomVerificationEmailTemplate
+  where
+  rnf GetCustomVerificationEmailTemplate' {..} =
+    Prelude.rnf templateName
+
+instance
+  Data.ToHeaders
+    GetCustomVerificationEmailTemplate
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToPath
+    GetCustomVerificationEmailTemplate
+  where
+  toPath GetCustomVerificationEmailTemplate' {..} =
+    Prelude.mconcat
+      [ "/v2/email/custom-verification-email-templates/",
+        Data.toBS templateName
+      ]
+
+instance
+  Data.ToQuery
+    GetCustomVerificationEmailTemplate
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The following elements are returned by the service.
+--
+-- /See:/ 'newGetCustomVerificationEmailTemplateResponse' smart constructor.
+data GetCustomVerificationEmailTemplateResponse = GetCustomVerificationEmailTemplateResponse'
+  { -- | The URL that the recipient of the verification email is sent to if his
+    -- or her address is not successfully verified.
+    failureRedirectionURL :: Prelude.Maybe Prelude.Text,
+    -- | The email address that the custom verification email is sent from.
+    fromEmailAddress :: Prelude.Maybe Prelude.Text,
+    -- | The URL that the recipient of the verification email is sent to if his
+    -- or her address is successfully verified.
+    successRedirectionURL :: Prelude.Maybe Prelude.Text,
+    -- | The content of the custom verification email.
+    templateContent :: Prelude.Maybe Prelude.Text,
+    -- | The name of the custom verification email template.
+    templateName :: Prelude.Maybe Prelude.Text,
+    -- | The subject line of the custom verification email.
+    templateSubject :: 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 'GetCustomVerificationEmailTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failureRedirectionURL', 'getCustomVerificationEmailTemplateResponse_failureRedirectionURL' - The URL that the recipient of the verification email is sent to if his
+-- or her address is not successfully verified.
+--
+-- 'fromEmailAddress', 'getCustomVerificationEmailTemplateResponse_fromEmailAddress' - The email address that the custom verification email is sent from.
+--
+-- 'successRedirectionURL', 'getCustomVerificationEmailTemplateResponse_successRedirectionURL' - The URL that the recipient of the verification email is sent to if his
+-- or her address is successfully verified.
+--
+-- 'templateContent', 'getCustomVerificationEmailTemplateResponse_templateContent' - The content of the custom verification email.
+--
+-- 'templateName', 'getCustomVerificationEmailTemplateResponse_templateName' - The name of the custom verification email template.
+--
+-- 'templateSubject', 'getCustomVerificationEmailTemplateResponse_templateSubject' - The subject line of the custom verification email.
+--
+-- 'httpStatus', 'getCustomVerificationEmailTemplateResponse_httpStatus' - The response's http status code.
+newGetCustomVerificationEmailTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetCustomVerificationEmailTemplateResponse
+newGetCustomVerificationEmailTemplateResponse
+  pHttpStatus_ =
+    GetCustomVerificationEmailTemplateResponse'
+      { failureRedirectionURL =
+          Prelude.Nothing,
+        fromEmailAddress =
+          Prelude.Nothing,
+        successRedirectionURL =
+          Prelude.Nothing,
+        templateContent =
+          Prelude.Nothing,
+        templateName = Prelude.Nothing,
+        templateSubject =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The URL that the recipient of the verification email is sent to if his
+-- or her address is not successfully verified.
+getCustomVerificationEmailTemplateResponse_failureRedirectionURL :: Lens.Lens' GetCustomVerificationEmailTemplateResponse (Prelude.Maybe Prelude.Text)
+getCustomVerificationEmailTemplateResponse_failureRedirectionURL = Lens.lens (\GetCustomVerificationEmailTemplateResponse' {failureRedirectionURL} -> failureRedirectionURL) (\s@GetCustomVerificationEmailTemplateResponse' {} a -> s {failureRedirectionURL = a} :: GetCustomVerificationEmailTemplateResponse)
+
+-- | The email address that the custom verification email is sent from.
+getCustomVerificationEmailTemplateResponse_fromEmailAddress :: Lens.Lens' GetCustomVerificationEmailTemplateResponse (Prelude.Maybe Prelude.Text)
+getCustomVerificationEmailTemplateResponse_fromEmailAddress = Lens.lens (\GetCustomVerificationEmailTemplateResponse' {fromEmailAddress} -> fromEmailAddress) (\s@GetCustomVerificationEmailTemplateResponse' {} a -> s {fromEmailAddress = a} :: GetCustomVerificationEmailTemplateResponse)
+
+-- | The URL that the recipient of the verification email is sent to if his
+-- or her address is successfully verified.
+getCustomVerificationEmailTemplateResponse_successRedirectionURL :: Lens.Lens' GetCustomVerificationEmailTemplateResponse (Prelude.Maybe Prelude.Text)
+getCustomVerificationEmailTemplateResponse_successRedirectionURL = Lens.lens (\GetCustomVerificationEmailTemplateResponse' {successRedirectionURL} -> successRedirectionURL) (\s@GetCustomVerificationEmailTemplateResponse' {} a -> s {successRedirectionURL = a} :: GetCustomVerificationEmailTemplateResponse)
+
+-- | The content of the custom verification email.
+getCustomVerificationEmailTemplateResponse_templateContent :: Lens.Lens' GetCustomVerificationEmailTemplateResponse (Prelude.Maybe Prelude.Text)
+getCustomVerificationEmailTemplateResponse_templateContent = Lens.lens (\GetCustomVerificationEmailTemplateResponse' {templateContent} -> templateContent) (\s@GetCustomVerificationEmailTemplateResponse' {} a -> s {templateContent = a} :: GetCustomVerificationEmailTemplateResponse)
+
+-- | The name of the custom verification email template.
+getCustomVerificationEmailTemplateResponse_templateName :: Lens.Lens' GetCustomVerificationEmailTemplateResponse (Prelude.Maybe Prelude.Text)
+getCustomVerificationEmailTemplateResponse_templateName = Lens.lens (\GetCustomVerificationEmailTemplateResponse' {templateName} -> templateName) (\s@GetCustomVerificationEmailTemplateResponse' {} a -> s {templateName = a} :: GetCustomVerificationEmailTemplateResponse)
+
+-- | The subject line of the custom verification email.
+getCustomVerificationEmailTemplateResponse_templateSubject :: Lens.Lens' GetCustomVerificationEmailTemplateResponse (Prelude.Maybe Prelude.Text)
+getCustomVerificationEmailTemplateResponse_templateSubject = Lens.lens (\GetCustomVerificationEmailTemplateResponse' {templateSubject} -> templateSubject) (\s@GetCustomVerificationEmailTemplateResponse' {} a -> s {templateSubject = a} :: GetCustomVerificationEmailTemplateResponse)
+
+-- | The response's http status code.
+getCustomVerificationEmailTemplateResponse_httpStatus :: Lens.Lens' GetCustomVerificationEmailTemplateResponse Prelude.Int
+getCustomVerificationEmailTemplateResponse_httpStatus = Lens.lens (\GetCustomVerificationEmailTemplateResponse' {httpStatus} -> httpStatus) (\s@GetCustomVerificationEmailTemplateResponse' {} a -> s {httpStatus = a} :: GetCustomVerificationEmailTemplateResponse)
+
+instance
+  Prelude.NFData
+    GetCustomVerificationEmailTemplateResponse
+  where
+  rnf GetCustomVerificationEmailTemplateResponse' {..} =
+    Prelude.rnf failureRedirectionURL
+      `Prelude.seq` Prelude.rnf fromEmailAddress
+      `Prelude.seq` Prelude.rnf successRedirectionURL
+      `Prelude.seq` Prelude.rnf templateContent
+      `Prelude.seq` Prelude.rnf templateName
+      `Prelude.seq` Prelude.rnf templateSubject
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/GetDedicatedIp.hs b/gen/Amazonka/SESV2/GetDedicatedIp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetDedicatedIp.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.SESV2.GetDedicatedIp
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get information about a dedicated IP address, including the name of the
+-- dedicated IP pool that it\'s associated with, as well information about
+-- the automatic warm-up process for the address.
+module Amazonka.SESV2.GetDedicatedIp
+  ( -- * Creating a Request
+    GetDedicatedIp (..),
+    newGetDedicatedIp,
+
+    -- * Request Lenses
+    getDedicatedIp_ip,
+
+    -- * Destructuring the Response
+    GetDedicatedIpResponse (..),
+    newGetDedicatedIpResponse,
+
+    -- * Response Lenses
+    getDedicatedIpResponse_dedicatedIp,
+    getDedicatedIpResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to obtain more information about a dedicated IP address.
+--
+-- /See:/ 'newGetDedicatedIp' smart constructor.
+data GetDedicatedIp = GetDedicatedIp'
+  { -- | The IP address that you want to obtain more information about. The value
+    -- you specify has to be a dedicated IP address that\'s assocaited with
+    -- your Amazon Web Services account.
+    ip :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDedicatedIp' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ip', 'getDedicatedIp_ip' - The IP address that you want to obtain more information about. The value
+-- you specify has to be a dedicated IP address that\'s assocaited with
+-- your Amazon Web Services account.
+newGetDedicatedIp ::
+  -- | 'ip'
+  Prelude.Text ->
+  GetDedicatedIp
+newGetDedicatedIp pIp_ = GetDedicatedIp' {ip = pIp_}
+
+-- | The IP address that you want to obtain more information about. The value
+-- you specify has to be a dedicated IP address that\'s assocaited with
+-- your Amazon Web Services account.
+getDedicatedIp_ip :: Lens.Lens' GetDedicatedIp Prelude.Text
+getDedicatedIp_ip = Lens.lens (\GetDedicatedIp' {ip} -> ip) (\s@GetDedicatedIp' {} a -> s {ip = a} :: GetDedicatedIp)
+
+instance Core.AWSRequest GetDedicatedIp where
+  type
+    AWSResponse GetDedicatedIp =
+      GetDedicatedIpResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDedicatedIpResponse'
+            Prelude.<$> (x Data..?> "DedicatedIp")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDedicatedIp where
+  hashWithSalt _salt GetDedicatedIp' {..} =
+    _salt `Prelude.hashWithSalt` ip
+
+instance Prelude.NFData GetDedicatedIp where
+  rnf GetDedicatedIp' {..} = Prelude.rnf ip
+
+instance Data.ToHeaders GetDedicatedIp where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDedicatedIp where
+  toPath GetDedicatedIp' {..} =
+    Prelude.mconcat
+      ["/v2/email/dedicated-ips/", Data.toBS ip]
+
+instance Data.ToQuery GetDedicatedIp where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | Information about a dedicated IP address.
+--
+-- /See:/ 'newGetDedicatedIpResponse' smart constructor.
+data GetDedicatedIpResponse = GetDedicatedIpResponse'
+  { -- | An object that contains information about a dedicated IP address.
+    dedicatedIp :: Prelude.Maybe DedicatedIp,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDedicatedIpResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dedicatedIp', 'getDedicatedIpResponse_dedicatedIp' - An object that contains information about a dedicated IP address.
+--
+-- 'httpStatus', 'getDedicatedIpResponse_httpStatus' - The response's http status code.
+newGetDedicatedIpResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDedicatedIpResponse
+newGetDedicatedIpResponse pHttpStatus_ =
+  GetDedicatedIpResponse'
+    { dedicatedIp =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An object that contains information about a dedicated IP address.
+getDedicatedIpResponse_dedicatedIp :: Lens.Lens' GetDedicatedIpResponse (Prelude.Maybe DedicatedIp)
+getDedicatedIpResponse_dedicatedIp = Lens.lens (\GetDedicatedIpResponse' {dedicatedIp} -> dedicatedIp) (\s@GetDedicatedIpResponse' {} a -> s {dedicatedIp = a} :: GetDedicatedIpResponse)
+
+-- | The response's http status code.
+getDedicatedIpResponse_httpStatus :: Lens.Lens' GetDedicatedIpResponse Prelude.Int
+getDedicatedIpResponse_httpStatus = Lens.lens (\GetDedicatedIpResponse' {httpStatus} -> httpStatus) (\s@GetDedicatedIpResponse' {} a -> s {httpStatus = a} :: GetDedicatedIpResponse)
+
+instance Prelude.NFData GetDedicatedIpResponse where
+  rnf GetDedicatedIpResponse' {..} =
+    Prelude.rnf dedicatedIp
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/GetDedicatedIpPool.hs b/gen/Amazonka/SESV2/GetDedicatedIpPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetDedicatedIpPool.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.SESV2.GetDedicatedIpPool
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve information about the dedicated pool.
+module Amazonka.SESV2.GetDedicatedIpPool
+  ( -- * Creating a Request
+    GetDedicatedIpPool (..),
+    newGetDedicatedIpPool,
+
+    -- * Request Lenses
+    getDedicatedIpPool_poolName,
+
+    -- * Destructuring the Response
+    GetDedicatedIpPoolResponse (..),
+    newGetDedicatedIpPoolResponse,
+
+    -- * Response Lenses
+    getDedicatedIpPoolResponse_dedicatedIpPool,
+    getDedicatedIpPoolResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to obtain more information about a dedicated IP pool.
+--
+-- /See:/ 'newGetDedicatedIpPool' smart constructor.
+data GetDedicatedIpPool = GetDedicatedIpPool'
+  { -- | The name of the dedicated IP pool to retrieve.
+    poolName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDedicatedIpPool' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'poolName', 'getDedicatedIpPool_poolName' - The name of the dedicated IP pool to retrieve.
+newGetDedicatedIpPool ::
+  -- | 'poolName'
+  Prelude.Text ->
+  GetDedicatedIpPool
+newGetDedicatedIpPool pPoolName_ =
+  GetDedicatedIpPool' {poolName = pPoolName_}
+
+-- | The name of the dedicated IP pool to retrieve.
+getDedicatedIpPool_poolName :: Lens.Lens' GetDedicatedIpPool Prelude.Text
+getDedicatedIpPool_poolName = Lens.lens (\GetDedicatedIpPool' {poolName} -> poolName) (\s@GetDedicatedIpPool' {} a -> s {poolName = a} :: GetDedicatedIpPool)
+
+instance Core.AWSRequest GetDedicatedIpPool where
+  type
+    AWSResponse GetDedicatedIpPool =
+      GetDedicatedIpPoolResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDedicatedIpPoolResponse'
+            Prelude.<$> (x Data..?> "DedicatedIpPool")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDedicatedIpPool where
+  hashWithSalt _salt GetDedicatedIpPool' {..} =
+    _salt `Prelude.hashWithSalt` poolName
+
+instance Prelude.NFData GetDedicatedIpPool where
+  rnf GetDedicatedIpPool' {..} = Prelude.rnf poolName
+
+instance Data.ToHeaders GetDedicatedIpPool where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDedicatedIpPool where
+  toPath GetDedicatedIpPool' {..} =
+    Prelude.mconcat
+      ["/v2/email/dedicated-ip-pools/", Data.toBS poolName]
+
+instance Data.ToQuery GetDedicatedIpPool where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The following element is returned by the service.
+--
+-- /See:/ 'newGetDedicatedIpPoolResponse' smart constructor.
+data GetDedicatedIpPoolResponse = GetDedicatedIpPoolResponse'
+  { -- | An object that contains information about a dedicated IP pool.
+    dedicatedIpPool :: Prelude.Maybe DedicatedIpPool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDedicatedIpPoolResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dedicatedIpPool', 'getDedicatedIpPoolResponse_dedicatedIpPool' - An object that contains information about a dedicated IP pool.
+--
+-- 'httpStatus', 'getDedicatedIpPoolResponse_httpStatus' - The response's http status code.
+newGetDedicatedIpPoolResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDedicatedIpPoolResponse
+newGetDedicatedIpPoolResponse pHttpStatus_ =
+  GetDedicatedIpPoolResponse'
+    { dedicatedIpPool =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An object that contains information about a dedicated IP pool.
+getDedicatedIpPoolResponse_dedicatedIpPool :: Lens.Lens' GetDedicatedIpPoolResponse (Prelude.Maybe DedicatedIpPool)
+getDedicatedIpPoolResponse_dedicatedIpPool = Lens.lens (\GetDedicatedIpPoolResponse' {dedicatedIpPool} -> dedicatedIpPool) (\s@GetDedicatedIpPoolResponse' {} a -> s {dedicatedIpPool = a} :: GetDedicatedIpPoolResponse)
+
+-- | The response's http status code.
+getDedicatedIpPoolResponse_httpStatus :: Lens.Lens' GetDedicatedIpPoolResponse Prelude.Int
+getDedicatedIpPoolResponse_httpStatus = Lens.lens (\GetDedicatedIpPoolResponse' {httpStatus} -> httpStatus) (\s@GetDedicatedIpPoolResponse' {} a -> s {httpStatus = a} :: GetDedicatedIpPoolResponse)
+
+instance Prelude.NFData GetDedicatedIpPoolResponse where
+  rnf GetDedicatedIpPoolResponse' {..} =
+    Prelude.rnf dedicatedIpPool
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/GetDedicatedIps.hs b/gen/Amazonka/SESV2/GetDedicatedIps.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetDedicatedIps.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.SESV2.GetDedicatedIps
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the dedicated IP addresses that are associated with your Amazon Web
+-- Services account.
+module Amazonka.SESV2.GetDedicatedIps
+  ( -- * Creating a Request
+    GetDedicatedIps (..),
+    newGetDedicatedIps,
+
+    -- * Request Lenses
+    getDedicatedIps_nextToken,
+    getDedicatedIps_pageSize,
+    getDedicatedIps_poolName,
+
+    -- * Destructuring the Response
+    GetDedicatedIpsResponse (..),
+    newGetDedicatedIpsResponse,
+
+    -- * Response Lenses
+    getDedicatedIpsResponse_dedicatedIps,
+    getDedicatedIpsResponse_nextToken,
+    getDedicatedIpsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to obtain more information about dedicated IP pools.
+--
+-- /See:/ 'newGetDedicatedIps' smart constructor.
+data GetDedicatedIps = GetDedicatedIps'
+  { -- | A token returned from a previous call to @GetDedicatedIps@ to indicate
+    -- the position of the dedicated IP pool in the list of IP pools.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The number of results to show in a single call to
+    -- @GetDedicatedIpsRequest@. If the number of results is larger than the
+    -- number you specified in this parameter, then the response includes a
+    -- @NextToken@ element, which you can use to obtain additional results.
+    pageSize :: Prelude.Maybe Prelude.Int,
+    -- | The name of the IP pool that the dedicated IP address is associated
+    -- with.
+    poolName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDedicatedIps' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getDedicatedIps_nextToken' - A token returned from a previous call to @GetDedicatedIps@ to indicate
+-- the position of the dedicated IP pool in the list of IP pools.
+--
+-- 'pageSize', 'getDedicatedIps_pageSize' - The number of results to show in a single call to
+-- @GetDedicatedIpsRequest@. If the number of results is larger than the
+-- number you specified in this parameter, then the response includes a
+-- @NextToken@ element, which you can use to obtain additional results.
+--
+-- 'poolName', 'getDedicatedIps_poolName' - The name of the IP pool that the dedicated IP address is associated
+-- with.
+newGetDedicatedIps ::
+  GetDedicatedIps
+newGetDedicatedIps =
+  GetDedicatedIps'
+    { nextToken = Prelude.Nothing,
+      pageSize = Prelude.Nothing,
+      poolName = Prelude.Nothing
+    }
+
+-- | A token returned from a previous call to @GetDedicatedIps@ to indicate
+-- the position of the dedicated IP pool in the list of IP pools.
+getDedicatedIps_nextToken :: Lens.Lens' GetDedicatedIps (Prelude.Maybe Prelude.Text)
+getDedicatedIps_nextToken = Lens.lens (\GetDedicatedIps' {nextToken} -> nextToken) (\s@GetDedicatedIps' {} a -> s {nextToken = a} :: GetDedicatedIps)
+
+-- | The number of results to show in a single call to
+-- @GetDedicatedIpsRequest@. If the number of results is larger than the
+-- number you specified in this parameter, then the response includes a
+-- @NextToken@ element, which you can use to obtain additional results.
+getDedicatedIps_pageSize :: Lens.Lens' GetDedicatedIps (Prelude.Maybe Prelude.Int)
+getDedicatedIps_pageSize = Lens.lens (\GetDedicatedIps' {pageSize} -> pageSize) (\s@GetDedicatedIps' {} a -> s {pageSize = a} :: GetDedicatedIps)
+
+-- | The name of the IP pool that the dedicated IP address is associated
+-- with.
+getDedicatedIps_poolName :: Lens.Lens' GetDedicatedIps (Prelude.Maybe Prelude.Text)
+getDedicatedIps_poolName = Lens.lens (\GetDedicatedIps' {poolName} -> poolName) (\s@GetDedicatedIps' {} a -> s {poolName = a} :: GetDedicatedIps)
+
+instance Core.AWSRequest GetDedicatedIps where
+  type
+    AWSResponse GetDedicatedIps =
+      GetDedicatedIpsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDedicatedIpsResponse'
+            Prelude.<$> (x Data..?> "DedicatedIps" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDedicatedIps where
+  hashWithSalt _salt GetDedicatedIps' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` pageSize
+      `Prelude.hashWithSalt` poolName
+
+instance Prelude.NFData GetDedicatedIps where
+  rnf GetDedicatedIps' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf pageSize
+      `Prelude.seq` Prelude.rnf poolName
+
+instance Data.ToHeaders GetDedicatedIps where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDedicatedIps where
+  toPath = Prelude.const "/v2/email/dedicated-ips"
+
+instance Data.ToQuery GetDedicatedIps where
+  toQuery GetDedicatedIps' {..} =
+    Prelude.mconcat
+      [ "NextToken" Data.=: nextToken,
+        "PageSize" Data.=: pageSize,
+        "PoolName" Data.=: poolName
+      ]
+
+-- | Information about the dedicated IP addresses that are associated with
+-- your Amazon Web Services account.
+--
+-- /See:/ 'newGetDedicatedIpsResponse' smart constructor.
+data GetDedicatedIpsResponse = GetDedicatedIpsResponse'
+  { -- | A list of dedicated IP addresses that are associated with your Amazon
+    -- Web Services account.
+    dedicatedIps :: Prelude.Maybe [DedicatedIp],
+    -- | A token that indicates that there are additional dedicated IP addresses
+    -- to list. To view additional addresses, issue another request to
+    -- @GetDedicatedIps@, passing this token in the @NextToken@ parameter.
+    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 'GetDedicatedIpsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dedicatedIps', 'getDedicatedIpsResponse_dedicatedIps' - A list of dedicated IP addresses that are associated with your Amazon
+-- Web Services account.
+--
+-- 'nextToken', 'getDedicatedIpsResponse_nextToken' - A token that indicates that there are additional dedicated IP addresses
+-- to list. To view additional addresses, issue another request to
+-- @GetDedicatedIps@, passing this token in the @NextToken@ parameter.
+--
+-- 'httpStatus', 'getDedicatedIpsResponse_httpStatus' - The response's http status code.
+newGetDedicatedIpsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDedicatedIpsResponse
+newGetDedicatedIpsResponse pHttpStatus_ =
+  GetDedicatedIpsResponse'
+    { dedicatedIps =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of dedicated IP addresses that are associated with your Amazon
+-- Web Services account.
+getDedicatedIpsResponse_dedicatedIps :: Lens.Lens' GetDedicatedIpsResponse (Prelude.Maybe [DedicatedIp])
+getDedicatedIpsResponse_dedicatedIps = Lens.lens (\GetDedicatedIpsResponse' {dedicatedIps} -> dedicatedIps) (\s@GetDedicatedIpsResponse' {} a -> s {dedicatedIps = a} :: GetDedicatedIpsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A token that indicates that there are additional dedicated IP addresses
+-- to list. To view additional addresses, issue another request to
+-- @GetDedicatedIps@, passing this token in the @NextToken@ parameter.
+getDedicatedIpsResponse_nextToken :: Lens.Lens' GetDedicatedIpsResponse (Prelude.Maybe Prelude.Text)
+getDedicatedIpsResponse_nextToken = Lens.lens (\GetDedicatedIpsResponse' {nextToken} -> nextToken) (\s@GetDedicatedIpsResponse' {} a -> s {nextToken = a} :: GetDedicatedIpsResponse)
+
+-- | The response's http status code.
+getDedicatedIpsResponse_httpStatus :: Lens.Lens' GetDedicatedIpsResponse Prelude.Int
+getDedicatedIpsResponse_httpStatus = Lens.lens (\GetDedicatedIpsResponse' {httpStatus} -> httpStatus) (\s@GetDedicatedIpsResponse' {} a -> s {httpStatus = a} :: GetDedicatedIpsResponse)
+
+instance Prelude.NFData GetDedicatedIpsResponse where
+  rnf GetDedicatedIpsResponse' {..} =
+    Prelude.rnf dedicatedIps
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/GetDeliverabilityDashboardOptions.hs b/gen/Amazonka/SESV2/GetDeliverabilityDashboardOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetDeliverabilityDashboardOptions.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.SESV2.GetDeliverabilityDashboardOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve information about the status of the Deliverability dashboard
+-- for your account. When the Deliverability dashboard is enabled, you gain
+-- access to reputation, deliverability, and other metrics for the domains
+-- that you use to send email. You also gain the ability to perform
+-- predictive inbox placement tests.
+--
+-- When you use the Deliverability dashboard, you pay a monthly
+-- subscription charge, in addition to any other fees that you accrue by
+-- using Amazon SES and other Amazon Web Services services. For more
+-- information about the features and cost of a Deliverability dashboard
+-- subscription, see
+-- <http://aws.amazon.com/ses/pricing/ Amazon SES Pricing>.
+module Amazonka.SESV2.GetDeliverabilityDashboardOptions
+  ( -- * Creating a Request
+    GetDeliverabilityDashboardOptions (..),
+    newGetDeliverabilityDashboardOptions,
+
+    -- * Destructuring the Response
+    GetDeliverabilityDashboardOptionsResponse (..),
+    newGetDeliverabilityDashboardOptionsResponse,
+
+    -- * Response Lenses
+    getDeliverabilityDashboardOptionsResponse_accountStatus,
+    getDeliverabilityDashboardOptionsResponse_activeSubscribedDomains,
+    getDeliverabilityDashboardOptionsResponse_pendingExpirationSubscribedDomains,
+    getDeliverabilityDashboardOptionsResponse_subscriptionExpiryDate,
+    getDeliverabilityDashboardOptionsResponse_httpStatus,
+    getDeliverabilityDashboardOptionsResponse_dashboardEnabled,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Retrieve information about the status of the Deliverability dashboard
+-- for your Amazon Web Services account. When the Deliverability dashboard
+-- is enabled, you gain access to reputation, deliverability, and other
+-- metrics for your domains. You also gain the ability to perform
+-- predictive inbox placement tests.
+--
+-- When you use the Deliverability dashboard, you pay a monthly
+-- subscription charge, in addition to any other fees that you accrue by
+-- using Amazon SES and other Amazon Web Services services. For more
+-- information about the features and cost of a Deliverability dashboard
+-- subscription, see
+-- <http://aws.amazon.com/pinpoint/pricing/ Amazon Pinpoint Pricing>.
+--
+-- /See:/ 'newGetDeliverabilityDashboardOptions' smart constructor.
+data GetDeliverabilityDashboardOptions = GetDeliverabilityDashboardOptions'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDeliverabilityDashboardOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetDeliverabilityDashboardOptions ::
+  GetDeliverabilityDashboardOptions
+newGetDeliverabilityDashboardOptions =
+  GetDeliverabilityDashboardOptions'
+
+instance
+  Core.AWSRequest
+    GetDeliverabilityDashboardOptions
+  where
+  type
+    AWSResponse GetDeliverabilityDashboardOptions =
+      GetDeliverabilityDashboardOptionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDeliverabilityDashboardOptionsResponse'
+            Prelude.<$> (x Data..?> "AccountStatus")
+            Prelude.<*> ( x
+                            Data..?> "ActiveSubscribedDomains"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "PendingExpirationSubscribedDomains"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "SubscriptionExpiryDate")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "DashboardEnabled")
+      )
+
+instance
+  Prelude.Hashable
+    GetDeliverabilityDashboardOptions
+  where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance
+  Prelude.NFData
+    GetDeliverabilityDashboardOptions
+  where
+  rnf _ = ()
+
+instance
+  Data.ToHeaders
+    GetDeliverabilityDashboardOptions
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToPath
+    GetDeliverabilityDashboardOptions
+  where
+  toPath =
+    Prelude.const "/v2/email/deliverability-dashboard"
+
+instance
+  Data.ToQuery
+    GetDeliverabilityDashboardOptions
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An object that shows the status of the Deliverability dashboard.
+--
+-- /See:/ 'newGetDeliverabilityDashboardOptionsResponse' smart constructor.
+data GetDeliverabilityDashboardOptionsResponse = GetDeliverabilityDashboardOptionsResponse'
+  { -- | The current status of your Deliverability dashboard subscription. If
+    -- this value is @PENDING_EXPIRATION@, your subscription is scheduled to
+    -- expire at the end of the current calendar month.
+    accountStatus :: Prelude.Maybe DeliverabilityDashboardAccountStatus,
+    -- | An array of objects, one for each verified domain that you use to send
+    -- email and currently has an active Deliverability dashboard subscription
+    -- that isn’t scheduled to expire at the end of the current calendar month.
+    activeSubscribedDomains :: Prelude.Maybe [DomainDeliverabilityTrackingOption],
+    -- | An array of objects, one for each verified domain that you use to send
+    -- email and currently has an active Deliverability dashboard subscription
+    -- that\'s scheduled to expire at the end of the current calendar month.
+    pendingExpirationSubscribedDomains :: Prelude.Maybe [DomainDeliverabilityTrackingOption],
+    -- | The date when your current subscription to the Deliverability dashboard
+    -- is scheduled to expire, if your subscription is scheduled to expire at
+    -- the end of the current calendar month. This value is null if you have an
+    -- active subscription that isn’t due to expire at the end of the month.
+    subscriptionExpiryDate :: Prelude.Maybe Data.POSIX,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Specifies whether the Deliverability dashboard is enabled. If this value
+    -- is @true@, the dashboard is enabled.
+    dashboardEnabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDeliverabilityDashboardOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountStatus', 'getDeliverabilityDashboardOptionsResponse_accountStatus' - The current status of your Deliverability dashboard subscription. If
+-- this value is @PENDING_EXPIRATION@, your subscription is scheduled to
+-- expire at the end of the current calendar month.
+--
+-- 'activeSubscribedDomains', 'getDeliverabilityDashboardOptionsResponse_activeSubscribedDomains' - An array of objects, one for each verified domain that you use to send
+-- email and currently has an active Deliverability dashboard subscription
+-- that isn’t scheduled to expire at the end of the current calendar month.
+--
+-- 'pendingExpirationSubscribedDomains', 'getDeliverabilityDashboardOptionsResponse_pendingExpirationSubscribedDomains' - An array of objects, one for each verified domain that you use to send
+-- email and currently has an active Deliverability dashboard subscription
+-- that\'s scheduled to expire at the end of the current calendar month.
+--
+-- 'subscriptionExpiryDate', 'getDeliverabilityDashboardOptionsResponse_subscriptionExpiryDate' - The date when your current subscription to the Deliverability dashboard
+-- is scheduled to expire, if your subscription is scheduled to expire at
+-- the end of the current calendar month. This value is null if you have an
+-- active subscription that isn’t due to expire at the end of the month.
+--
+-- 'httpStatus', 'getDeliverabilityDashboardOptionsResponse_httpStatus' - The response's http status code.
+--
+-- 'dashboardEnabled', 'getDeliverabilityDashboardOptionsResponse_dashboardEnabled' - Specifies whether the Deliverability dashboard is enabled. If this value
+-- is @true@, the dashboard is enabled.
+newGetDeliverabilityDashboardOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'dashboardEnabled'
+  Prelude.Bool ->
+  GetDeliverabilityDashboardOptionsResponse
+newGetDeliverabilityDashboardOptionsResponse
+  pHttpStatus_
+  pDashboardEnabled_ =
+    GetDeliverabilityDashboardOptionsResponse'
+      { accountStatus =
+          Prelude.Nothing,
+        activeSubscribedDomains =
+          Prelude.Nothing,
+        pendingExpirationSubscribedDomains =
+          Prelude.Nothing,
+        subscriptionExpiryDate =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        dashboardEnabled =
+          pDashboardEnabled_
+      }
+
+-- | The current status of your Deliverability dashboard subscription. If
+-- this value is @PENDING_EXPIRATION@, your subscription is scheduled to
+-- expire at the end of the current calendar month.
+getDeliverabilityDashboardOptionsResponse_accountStatus :: Lens.Lens' GetDeliverabilityDashboardOptionsResponse (Prelude.Maybe DeliverabilityDashboardAccountStatus)
+getDeliverabilityDashboardOptionsResponse_accountStatus = Lens.lens (\GetDeliverabilityDashboardOptionsResponse' {accountStatus} -> accountStatus) (\s@GetDeliverabilityDashboardOptionsResponse' {} a -> s {accountStatus = a} :: GetDeliverabilityDashboardOptionsResponse)
+
+-- | An array of objects, one for each verified domain that you use to send
+-- email and currently has an active Deliverability dashboard subscription
+-- that isn’t scheduled to expire at the end of the current calendar month.
+getDeliverabilityDashboardOptionsResponse_activeSubscribedDomains :: Lens.Lens' GetDeliverabilityDashboardOptionsResponse (Prelude.Maybe [DomainDeliverabilityTrackingOption])
+getDeliverabilityDashboardOptionsResponse_activeSubscribedDomains = Lens.lens (\GetDeliverabilityDashboardOptionsResponse' {activeSubscribedDomains} -> activeSubscribedDomains) (\s@GetDeliverabilityDashboardOptionsResponse' {} a -> s {activeSubscribedDomains = a} :: GetDeliverabilityDashboardOptionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of objects, one for each verified domain that you use to send
+-- email and currently has an active Deliverability dashboard subscription
+-- that\'s scheduled to expire at the end of the current calendar month.
+getDeliverabilityDashboardOptionsResponse_pendingExpirationSubscribedDomains :: Lens.Lens' GetDeliverabilityDashboardOptionsResponse (Prelude.Maybe [DomainDeliverabilityTrackingOption])
+getDeliverabilityDashboardOptionsResponse_pendingExpirationSubscribedDomains = Lens.lens (\GetDeliverabilityDashboardOptionsResponse' {pendingExpirationSubscribedDomains} -> pendingExpirationSubscribedDomains) (\s@GetDeliverabilityDashboardOptionsResponse' {} a -> s {pendingExpirationSubscribedDomains = a} :: GetDeliverabilityDashboardOptionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date when your current subscription to the Deliverability dashboard
+-- is scheduled to expire, if your subscription is scheduled to expire at
+-- the end of the current calendar month. This value is null if you have an
+-- active subscription that isn’t due to expire at the end of the month.
+getDeliverabilityDashboardOptionsResponse_subscriptionExpiryDate :: Lens.Lens' GetDeliverabilityDashboardOptionsResponse (Prelude.Maybe Prelude.UTCTime)
+getDeliverabilityDashboardOptionsResponse_subscriptionExpiryDate = Lens.lens (\GetDeliverabilityDashboardOptionsResponse' {subscriptionExpiryDate} -> subscriptionExpiryDate) (\s@GetDeliverabilityDashboardOptionsResponse' {} a -> s {subscriptionExpiryDate = a} :: GetDeliverabilityDashboardOptionsResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+getDeliverabilityDashboardOptionsResponse_httpStatus :: Lens.Lens' GetDeliverabilityDashboardOptionsResponse Prelude.Int
+getDeliverabilityDashboardOptionsResponse_httpStatus = Lens.lens (\GetDeliverabilityDashboardOptionsResponse' {httpStatus} -> httpStatus) (\s@GetDeliverabilityDashboardOptionsResponse' {} a -> s {httpStatus = a} :: GetDeliverabilityDashboardOptionsResponse)
+
+-- | Specifies whether the Deliverability dashboard is enabled. If this value
+-- is @true@, the dashboard is enabled.
+getDeliverabilityDashboardOptionsResponse_dashboardEnabled :: Lens.Lens' GetDeliverabilityDashboardOptionsResponse Prelude.Bool
+getDeliverabilityDashboardOptionsResponse_dashboardEnabled = Lens.lens (\GetDeliverabilityDashboardOptionsResponse' {dashboardEnabled} -> dashboardEnabled) (\s@GetDeliverabilityDashboardOptionsResponse' {} a -> s {dashboardEnabled = a} :: GetDeliverabilityDashboardOptionsResponse)
+
+instance
+  Prelude.NFData
+    GetDeliverabilityDashboardOptionsResponse
+  where
+  rnf GetDeliverabilityDashboardOptionsResponse' {..} =
+    Prelude.rnf accountStatus
+      `Prelude.seq` Prelude.rnf activeSubscribedDomains
+      `Prelude.seq` Prelude.rnf pendingExpirationSubscribedDomains
+      `Prelude.seq` Prelude.rnf subscriptionExpiryDate
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf dashboardEnabled
diff --git a/gen/Amazonka/SESV2/GetDeliverabilityTestReport.hs b/gen/Amazonka/SESV2/GetDeliverabilityTestReport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetDeliverabilityTestReport.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.SESV2.GetDeliverabilityTestReport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve the results of a predictive inbox placement test.
+module Amazonka.SESV2.GetDeliverabilityTestReport
+  ( -- * Creating a Request
+    GetDeliverabilityTestReport (..),
+    newGetDeliverabilityTestReport,
+
+    -- * Request Lenses
+    getDeliverabilityTestReport_reportId,
+
+    -- * Destructuring the Response
+    GetDeliverabilityTestReportResponse (..),
+    newGetDeliverabilityTestReportResponse,
+
+    -- * Response Lenses
+    getDeliverabilityTestReportResponse_message,
+    getDeliverabilityTestReportResponse_tags,
+    getDeliverabilityTestReportResponse_httpStatus,
+    getDeliverabilityTestReportResponse_deliverabilityTestReport,
+    getDeliverabilityTestReportResponse_overallPlacement,
+    getDeliverabilityTestReportResponse_ispPlacements,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to retrieve the results of a predictive inbox placement test.
+--
+-- /See:/ 'newGetDeliverabilityTestReport' smart constructor.
+data GetDeliverabilityTestReport = GetDeliverabilityTestReport'
+  { -- | A unique string that identifies the predictive inbox placement test.
+    reportId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDeliverabilityTestReport' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reportId', 'getDeliverabilityTestReport_reportId' - A unique string that identifies the predictive inbox placement test.
+newGetDeliverabilityTestReport ::
+  -- | 'reportId'
+  Prelude.Text ->
+  GetDeliverabilityTestReport
+newGetDeliverabilityTestReport pReportId_ =
+  GetDeliverabilityTestReport' {reportId = pReportId_}
+
+-- | A unique string that identifies the predictive inbox placement test.
+getDeliverabilityTestReport_reportId :: Lens.Lens' GetDeliverabilityTestReport Prelude.Text
+getDeliverabilityTestReport_reportId = Lens.lens (\GetDeliverabilityTestReport' {reportId} -> reportId) (\s@GetDeliverabilityTestReport' {} a -> s {reportId = a} :: GetDeliverabilityTestReport)
+
+instance Core.AWSRequest GetDeliverabilityTestReport where
+  type
+    AWSResponse GetDeliverabilityTestReport =
+      GetDeliverabilityTestReportResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDeliverabilityTestReportResponse'
+            Prelude.<$> (x Data..?> "Message")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "DeliverabilityTestReport")
+            Prelude.<*> (x Data..:> "OverallPlacement")
+            Prelude.<*> (x Data..?> "IspPlacements" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable GetDeliverabilityTestReport where
+  hashWithSalt _salt GetDeliverabilityTestReport' {..} =
+    _salt `Prelude.hashWithSalt` reportId
+
+instance Prelude.NFData GetDeliverabilityTestReport where
+  rnf GetDeliverabilityTestReport' {..} =
+    Prelude.rnf reportId
+
+instance Data.ToHeaders GetDeliverabilityTestReport where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDeliverabilityTestReport where
+  toPath GetDeliverabilityTestReport' {..} =
+    Prelude.mconcat
+      [ "/v2/email/deliverability-dashboard/test-reports/",
+        Data.toBS reportId
+      ]
+
+instance Data.ToQuery GetDeliverabilityTestReport where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The results of the predictive inbox placement test.
+--
+-- /See:/ 'newGetDeliverabilityTestReportResponse' smart constructor.
+data GetDeliverabilityTestReportResponse = GetDeliverabilityTestReportResponse'
+  { -- | An object that contains the message that you sent when you performed
+    -- this predictive inbox placement test.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | An array of objects that define the tags (keys and values) that are
+    -- associated with the predictive inbox placement test.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | An object that contains the results of the predictive inbox placement
+    -- test.
+    deliverabilityTestReport :: DeliverabilityTestReport,
+    -- | An object that specifies how many test messages that were sent during
+    -- the predictive inbox placement test were delivered to recipients\'
+    -- inboxes, how many were sent to recipients\' spam folders, and how many
+    -- weren\'t delivered.
+    overallPlacement :: PlacementStatistics,
+    -- | An object that describes how the test email was handled by several email
+    -- providers, including Gmail, Hotmail, Yahoo, AOL, and others.
+    ispPlacements :: [IspPlacement]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDeliverabilityTestReportResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'message', 'getDeliverabilityTestReportResponse_message' - An object that contains the message that you sent when you performed
+-- this predictive inbox placement test.
+--
+-- 'tags', 'getDeliverabilityTestReportResponse_tags' - An array of objects that define the tags (keys and values) that are
+-- associated with the predictive inbox placement test.
+--
+-- 'httpStatus', 'getDeliverabilityTestReportResponse_httpStatus' - The response's http status code.
+--
+-- 'deliverabilityTestReport', 'getDeliverabilityTestReportResponse_deliverabilityTestReport' - An object that contains the results of the predictive inbox placement
+-- test.
+--
+-- 'overallPlacement', 'getDeliverabilityTestReportResponse_overallPlacement' - An object that specifies how many test messages that were sent during
+-- the predictive inbox placement test were delivered to recipients\'
+-- inboxes, how many were sent to recipients\' spam folders, and how many
+-- weren\'t delivered.
+--
+-- 'ispPlacements', 'getDeliverabilityTestReportResponse_ispPlacements' - An object that describes how the test email was handled by several email
+-- providers, including Gmail, Hotmail, Yahoo, AOL, and others.
+newGetDeliverabilityTestReportResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'deliverabilityTestReport'
+  DeliverabilityTestReport ->
+  -- | 'overallPlacement'
+  PlacementStatistics ->
+  GetDeliverabilityTestReportResponse
+newGetDeliverabilityTestReportResponse
+  pHttpStatus_
+  pDeliverabilityTestReport_
+  pOverallPlacement_ =
+    GetDeliverabilityTestReportResponse'
+      { message =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        deliverabilityTestReport =
+          pDeliverabilityTestReport_,
+        overallPlacement = pOverallPlacement_,
+        ispPlacements = Prelude.mempty
+      }
+
+-- | An object that contains the message that you sent when you performed
+-- this predictive inbox placement test.
+getDeliverabilityTestReportResponse_message :: Lens.Lens' GetDeliverabilityTestReportResponse (Prelude.Maybe Prelude.Text)
+getDeliverabilityTestReportResponse_message = Lens.lens (\GetDeliverabilityTestReportResponse' {message} -> message) (\s@GetDeliverabilityTestReportResponse' {} a -> s {message = a} :: GetDeliverabilityTestReportResponse)
+
+-- | An array of objects that define the tags (keys and values) that are
+-- associated with the predictive inbox placement test.
+getDeliverabilityTestReportResponse_tags :: Lens.Lens' GetDeliverabilityTestReportResponse (Prelude.Maybe [Tag])
+getDeliverabilityTestReportResponse_tags = Lens.lens (\GetDeliverabilityTestReportResponse' {tags} -> tags) (\s@GetDeliverabilityTestReportResponse' {} a -> s {tags = a} :: GetDeliverabilityTestReportResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getDeliverabilityTestReportResponse_httpStatus :: Lens.Lens' GetDeliverabilityTestReportResponse Prelude.Int
+getDeliverabilityTestReportResponse_httpStatus = Lens.lens (\GetDeliverabilityTestReportResponse' {httpStatus} -> httpStatus) (\s@GetDeliverabilityTestReportResponse' {} a -> s {httpStatus = a} :: GetDeliverabilityTestReportResponse)
+
+-- | An object that contains the results of the predictive inbox placement
+-- test.
+getDeliverabilityTestReportResponse_deliverabilityTestReport :: Lens.Lens' GetDeliverabilityTestReportResponse DeliverabilityTestReport
+getDeliverabilityTestReportResponse_deliverabilityTestReport = Lens.lens (\GetDeliverabilityTestReportResponse' {deliverabilityTestReport} -> deliverabilityTestReport) (\s@GetDeliverabilityTestReportResponse' {} a -> s {deliverabilityTestReport = a} :: GetDeliverabilityTestReportResponse)
+
+-- | An object that specifies how many test messages that were sent during
+-- the predictive inbox placement test were delivered to recipients\'
+-- inboxes, how many were sent to recipients\' spam folders, and how many
+-- weren\'t delivered.
+getDeliverabilityTestReportResponse_overallPlacement :: Lens.Lens' GetDeliverabilityTestReportResponse PlacementStatistics
+getDeliverabilityTestReportResponse_overallPlacement = Lens.lens (\GetDeliverabilityTestReportResponse' {overallPlacement} -> overallPlacement) (\s@GetDeliverabilityTestReportResponse' {} a -> s {overallPlacement = a} :: GetDeliverabilityTestReportResponse)
+
+-- | An object that describes how the test email was handled by several email
+-- providers, including Gmail, Hotmail, Yahoo, AOL, and others.
+getDeliverabilityTestReportResponse_ispPlacements :: Lens.Lens' GetDeliverabilityTestReportResponse [IspPlacement]
+getDeliverabilityTestReportResponse_ispPlacements = Lens.lens (\GetDeliverabilityTestReportResponse' {ispPlacements} -> ispPlacements) (\s@GetDeliverabilityTestReportResponse' {} a -> s {ispPlacements = a} :: GetDeliverabilityTestReportResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    GetDeliverabilityTestReportResponse
+  where
+  rnf GetDeliverabilityTestReportResponse' {..} =
+    Prelude.rnf message
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf deliverabilityTestReport
+      `Prelude.seq` Prelude.rnf overallPlacement
+      `Prelude.seq` Prelude.rnf ispPlacements
diff --git a/gen/Amazonka/SESV2/GetDomainDeliverabilityCampaign.hs b/gen/Amazonka/SESV2/GetDomainDeliverabilityCampaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetDomainDeliverabilityCampaign.hs
@@ -0,0 +1,202 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.GetDomainDeliverabilityCampaign
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve all the deliverability data for a specific campaign. This data
+-- is available for a campaign only if the campaign sent email by using a
+-- domain that the Deliverability dashboard is enabled for.
+module Amazonka.SESV2.GetDomainDeliverabilityCampaign
+  ( -- * Creating a Request
+    GetDomainDeliverabilityCampaign (..),
+    newGetDomainDeliverabilityCampaign,
+
+    -- * Request Lenses
+    getDomainDeliverabilityCampaign_campaignId,
+
+    -- * Destructuring the Response
+    GetDomainDeliverabilityCampaignResponse (..),
+    newGetDomainDeliverabilityCampaignResponse,
+
+    -- * Response Lenses
+    getDomainDeliverabilityCampaignResponse_httpStatus,
+    getDomainDeliverabilityCampaignResponse_domainDeliverabilityCampaign,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Retrieve all the deliverability data for a specific campaign. This data
+-- is available for a campaign only if the campaign sent email by using a
+-- domain that the Deliverability dashboard is enabled for
+-- (@PutDeliverabilityDashboardOption@ operation).
+--
+-- /See:/ 'newGetDomainDeliverabilityCampaign' smart constructor.
+data GetDomainDeliverabilityCampaign = GetDomainDeliverabilityCampaign'
+  { -- | The unique identifier for the campaign. The Deliverability dashboard
+    -- automatically generates and assigns this identifier to a campaign.
+    campaignId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDomainDeliverabilityCampaign' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'campaignId', 'getDomainDeliverabilityCampaign_campaignId' - The unique identifier for the campaign. The Deliverability dashboard
+-- automatically generates and assigns this identifier to a campaign.
+newGetDomainDeliverabilityCampaign ::
+  -- | 'campaignId'
+  Prelude.Text ->
+  GetDomainDeliverabilityCampaign
+newGetDomainDeliverabilityCampaign pCampaignId_ =
+  GetDomainDeliverabilityCampaign'
+    { campaignId =
+        pCampaignId_
+    }
+
+-- | The unique identifier for the campaign. The Deliverability dashboard
+-- automatically generates and assigns this identifier to a campaign.
+getDomainDeliverabilityCampaign_campaignId :: Lens.Lens' GetDomainDeliverabilityCampaign Prelude.Text
+getDomainDeliverabilityCampaign_campaignId = Lens.lens (\GetDomainDeliverabilityCampaign' {campaignId} -> campaignId) (\s@GetDomainDeliverabilityCampaign' {} a -> s {campaignId = a} :: GetDomainDeliverabilityCampaign)
+
+instance
+  Core.AWSRequest
+    GetDomainDeliverabilityCampaign
+  where
+  type
+    AWSResponse GetDomainDeliverabilityCampaign =
+      GetDomainDeliverabilityCampaignResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDomainDeliverabilityCampaignResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "DomainDeliverabilityCampaign")
+      )
+
+instance
+  Prelude.Hashable
+    GetDomainDeliverabilityCampaign
+  where
+  hashWithSalt
+    _salt
+    GetDomainDeliverabilityCampaign' {..} =
+      _salt `Prelude.hashWithSalt` campaignId
+
+instance
+  Prelude.NFData
+    GetDomainDeliverabilityCampaign
+  where
+  rnf GetDomainDeliverabilityCampaign' {..} =
+    Prelude.rnf campaignId
+
+instance
+  Data.ToHeaders
+    GetDomainDeliverabilityCampaign
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDomainDeliverabilityCampaign where
+  toPath GetDomainDeliverabilityCampaign' {..} =
+    Prelude.mconcat
+      [ "/v2/email/deliverability-dashboard/campaigns/",
+        Data.toBS campaignId
+      ]
+
+instance Data.ToQuery GetDomainDeliverabilityCampaign where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An object that contains all the deliverability data for a specific
+-- campaign. This data is available for a campaign only if the campaign
+-- sent email by using a domain that the Deliverability dashboard is
+-- enabled for.
+--
+-- /See:/ 'newGetDomainDeliverabilityCampaignResponse' smart constructor.
+data GetDomainDeliverabilityCampaignResponse = GetDomainDeliverabilityCampaignResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | An object that contains the deliverability data for the campaign.
+    domainDeliverabilityCampaign :: DomainDeliverabilityCampaign
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDomainDeliverabilityCampaignResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getDomainDeliverabilityCampaignResponse_httpStatus' - The response's http status code.
+--
+-- 'domainDeliverabilityCampaign', 'getDomainDeliverabilityCampaignResponse_domainDeliverabilityCampaign' - An object that contains the deliverability data for the campaign.
+newGetDomainDeliverabilityCampaignResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'domainDeliverabilityCampaign'
+  DomainDeliverabilityCampaign ->
+  GetDomainDeliverabilityCampaignResponse
+newGetDomainDeliverabilityCampaignResponse
+  pHttpStatus_
+  pDomainDeliverabilityCampaign_ =
+    GetDomainDeliverabilityCampaignResponse'
+      { httpStatus =
+          pHttpStatus_,
+        domainDeliverabilityCampaign =
+          pDomainDeliverabilityCampaign_
+      }
+
+-- | The response's http status code.
+getDomainDeliverabilityCampaignResponse_httpStatus :: Lens.Lens' GetDomainDeliverabilityCampaignResponse Prelude.Int
+getDomainDeliverabilityCampaignResponse_httpStatus = Lens.lens (\GetDomainDeliverabilityCampaignResponse' {httpStatus} -> httpStatus) (\s@GetDomainDeliverabilityCampaignResponse' {} a -> s {httpStatus = a} :: GetDomainDeliverabilityCampaignResponse)
+
+-- | An object that contains the deliverability data for the campaign.
+getDomainDeliverabilityCampaignResponse_domainDeliverabilityCampaign :: Lens.Lens' GetDomainDeliverabilityCampaignResponse DomainDeliverabilityCampaign
+getDomainDeliverabilityCampaignResponse_domainDeliverabilityCampaign = Lens.lens (\GetDomainDeliverabilityCampaignResponse' {domainDeliverabilityCampaign} -> domainDeliverabilityCampaign) (\s@GetDomainDeliverabilityCampaignResponse' {} a -> s {domainDeliverabilityCampaign = a} :: GetDomainDeliverabilityCampaignResponse)
+
+instance
+  Prelude.NFData
+    GetDomainDeliverabilityCampaignResponse
+  where
+  rnf GetDomainDeliverabilityCampaignResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf domainDeliverabilityCampaign
diff --git a/gen/Amazonka/SESV2/GetDomainStatisticsReport.hs b/gen/Amazonka/SESV2/GetDomainStatisticsReport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetDomainStatisticsReport.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.SESV2.GetDomainStatisticsReport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve inbox placement and engagement rates for the domains that you
+-- use to send email.
+module Amazonka.SESV2.GetDomainStatisticsReport
+  ( -- * Creating a Request
+    GetDomainStatisticsReport (..),
+    newGetDomainStatisticsReport,
+
+    -- * Request Lenses
+    getDomainStatisticsReport_domain,
+    getDomainStatisticsReport_startDate,
+    getDomainStatisticsReport_endDate,
+
+    -- * Destructuring the Response
+    GetDomainStatisticsReportResponse (..),
+    newGetDomainStatisticsReportResponse,
+
+    -- * Response Lenses
+    getDomainStatisticsReportResponse_httpStatus,
+    getDomainStatisticsReportResponse_overallVolume,
+    getDomainStatisticsReportResponse_dailyVolumes,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to obtain deliverability metrics for a domain.
+--
+-- /See:/ 'newGetDomainStatisticsReport' smart constructor.
+data GetDomainStatisticsReport = GetDomainStatisticsReport'
+  { -- | The domain that you want to obtain deliverability metrics for.
+    domain :: Prelude.Text,
+    -- | The first day (in Unix time) that you want to obtain domain
+    -- deliverability metrics for.
+    startDate :: Data.POSIX,
+    -- | The last day (in Unix time) that you want to obtain domain
+    -- deliverability metrics for. The @EndDate@ that you specify has to be
+    -- less than or equal to 30 days after the @StartDate@.
+    endDate :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDomainStatisticsReport' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domain', 'getDomainStatisticsReport_domain' - The domain that you want to obtain deliverability metrics for.
+--
+-- 'startDate', 'getDomainStatisticsReport_startDate' - The first day (in Unix time) that you want to obtain domain
+-- deliverability metrics for.
+--
+-- 'endDate', 'getDomainStatisticsReport_endDate' - The last day (in Unix time) that you want to obtain domain
+-- deliverability metrics for. The @EndDate@ that you specify has to be
+-- less than or equal to 30 days after the @StartDate@.
+newGetDomainStatisticsReport ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'startDate'
+  Prelude.UTCTime ->
+  -- | 'endDate'
+  Prelude.UTCTime ->
+  GetDomainStatisticsReport
+newGetDomainStatisticsReport
+  pDomain_
+  pStartDate_
+  pEndDate_ =
+    GetDomainStatisticsReport'
+      { domain = pDomain_,
+        startDate = Data._Time Lens.# pStartDate_,
+        endDate = Data._Time Lens.# pEndDate_
+      }
+
+-- | The domain that you want to obtain deliverability metrics for.
+getDomainStatisticsReport_domain :: Lens.Lens' GetDomainStatisticsReport Prelude.Text
+getDomainStatisticsReport_domain = Lens.lens (\GetDomainStatisticsReport' {domain} -> domain) (\s@GetDomainStatisticsReport' {} a -> s {domain = a} :: GetDomainStatisticsReport)
+
+-- | The first day (in Unix time) that you want to obtain domain
+-- deliverability metrics for.
+getDomainStatisticsReport_startDate :: Lens.Lens' GetDomainStatisticsReport Prelude.UTCTime
+getDomainStatisticsReport_startDate = Lens.lens (\GetDomainStatisticsReport' {startDate} -> startDate) (\s@GetDomainStatisticsReport' {} a -> s {startDate = a} :: GetDomainStatisticsReport) Prelude.. Data._Time
+
+-- | The last day (in Unix time) that you want to obtain domain
+-- deliverability metrics for. The @EndDate@ that you specify has to be
+-- less than or equal to 30 days after the @StartDate@.
+getDomainStatisticsReport_endDate :: Lens.Lens' GetDomainStatisticsReport Prelude.UTCTime
+getDomainStatisticsReport_endDate = Lens.lens (\GetDomainStatisticsReport' {endDate} -> endDate) (\s@GetDomainStatisticsReport' {} a -> s {endDate = a} :: GetDomainStatisticsReport) Prelude.. Data._Time
+
+instance Core.AWSRequest GetDomainStatisticsReport where
+  type
+    AWSResponse GetDomainStatisticsReport =
+      GetDomainStatisticsReportResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDomainStatisticsReportResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "OverallVolume")
+            Prelude.<*> (x Data..?> "DailyVolumes" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable GetDomainStatisticsReport where
+  hashWithSalt _salt GetDomainStatisticsReport' {..} =
+    _salt
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` startDate
+      `Prelude.hashWithSalt` endDate
+
+instance Prelude.NFData GetDomainStatisticsReport where
+  rnf GetDomainStatisticsReport' {..} =
+    Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf startDate
+      `Prelude.seq` Prelude.rnf endDate
+
+instance Data.ToHeaders GetDomainStatisticsReport where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDomainStatisticsReport where
+  toPath GetDomainStatisticsReport' {..} =
+    Prelude.mconcat
+      [ "/v2/email/deliverability-dashboard/statistics-report/",
+        Data.toBS domain
+      ]
+
+instance Data.ToQuery GetDomainStatisticsReport where
+  toQuery GetDomainStatisticsReport' {..} =
+    Prelude.mconcat
+      [ "StartDate" Data.=: startDate,
+        "EndDate" Data.=: endDate
+      ]
+
+-- | An object that includes statistics that are related to the domain that
+-- you specified.
+--
+-- /See:/ 'newGetDomainStatisticsReportResponse' smart constructor.
+data GetDomainStatisticsReportResponse = GetDomainStatisticsReportResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | An object that contains deliverability metrics for the domain that you
+    -- specified. The data in this object is a summary of all of the data that
+    -- was collected from the @StartDate@ to the @EndDate@.
+    overallVolume :: OverallVolume,
+    -- | An object that contains deliverability metrics for the domain that you
+    -- specified. This object contains data for each day, starting on the
+    -- @StartDate@ and ending on the @EndDate@.
+    dailyVolumes :: [DailyVolume]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDomainStatisticsReportResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getDomainStatisticsReportResponse_httpStatus' - The response's http status code.
+--
+-- 'overallVolume', 'getDomainStatisticsReportResponse_overallVolume' - An object that contains deliverability metrics for the domain that you
+-- specified. The data in this object is a summary of all of the data that
+-- was collected from the @StartDate@ to the @EndDate@.
+--
+-- 'dailyVolumes', 'getDomainStatisticsReportResponse_dailyVolumes' - An object that contains deliverability metrics for the domain that you
+-- specified. This object contains data for each day, starting on the
+-- @StartDate@ and ending on the @EndDate@.
+newGetDomainStatisticsReportResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'overallVolume'
+  OverallVolume ->
+  GetDomainStatisticsReportResponse
+newGetDomainStatisticsReportResponse
+  pHttpStatus_
+  pOverallVolume_ =
+    GetDomainStatisticsReportResponse'
+      { httpStatus =
+          pHttpStatus_,
+        overallVolume = pOverallVolume_,
+        dailyVolumes = Prelude.mempty
+      }
+
+-- | The response's http status code.
+getDomainStatisticsReportResponse_httpStatus :: Lens.Lens' GetDomainStatisticsReportResponse Prelude.Int
+getDomainStatisticsReportResponse_httpStatus = Lens.lens (\GetDomainStatisticsReportResponse' {httpStatus} -> httpStatus) (\s@GetDomainStatisticsReportResponse' {} a -> s {httpStatus = a} :: GetDomainStatisticsReportResponse)
+
+-- | An object that contains deliverability metrics for the domain that you
+-- specified. The data in this object is a summary of all of the data that
+-- was collected from the @StartDate@ to the @EndDate@.
+getDomainStatisticsReportResponse_overallVolume :: Lens.Lens' GetDomainStatisticsReportResponse OverallVolume
+getDomainStatisticsReportResponse_overallVolume = Lens.lens (\GetDomainStatisticsReportResponse' {overallVolume} -> overallVolume) (\s@GetDomainStatisticsReportResponse' {} a -> s {overallVolume = a} :: GetDomainStatisticsReportResponse)
+
+-- | An object that contains deliverability metrics for the domain that you
+-- specified. This object contains data for each day, starting on the
+-- @StartDate@ and ending on the @EndDate@.
+getDomainStatisticsReportResponse_dailyVolumes :: Lens.Lens' GetDomainStatisticsReportResponse [DailyVolume]
+getDomainStatisticsReportResponse_dailyVolumes = Lens.lens (\GetDomainStatisticsReportResponse' {dailyVolumes} -> dailyVolumes) (\s@GetDomainStatisticsReportResponse' {} a -> s {dailyVolumes = a} :: GetDomainStatisticsReportResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    GetDomainStatisticsReportResponse
+  where
+  rnf GetDomainStatisticsReportResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf overallVolume
+      `Prelude.seq` Prelude.rnf dailyVolumes
diff --git a/gen/Amazonka/SESV2/GetEmailIdentity.hs b/gen/Amazonka/SESV2/GetEmailIdentity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetEmailIdentity.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.SESV2.GetEmailIdentity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides information about a specific identity, including the
+-- identity\'s verification status, sending authorization policies, its
+-- DKIM authentication status, and its custom Mail-From settings.
+module Amazonka.SESV2.GetEmailIdentity
+  ( -- * Creating a Request
+    GetEmailIdentity (..),
+    newGetEmailIdentity,
+
+    -- * Request Lenses
+    getEmailIdentity_emailIdentity,
+
+    -- * Destructuring the Response
+    GetEmailIdentityResponse (..),
+    newGetEmailIdentityResponse,
+
+    -- * Response Lenses
+    getEmailIdentityResponse_configurationSetName,
+    getEmailIdentityResponse_dkimAttributes,
+    getEmailIdentityResponse_feedbackForwardingStatus,
+    getEmailIdentityResponse_identityType,
+    getEmailIdentityResponse_mailFromAttributes,
+    getEmailIdentityResponse_policies,
+    getEmailIdentityResponse_tags,
+    getEmailIdentityResponse_verificationStatus,
+    getEmailIdentityResponse_verifiedForSendingStatus,
+    getEmailIdentityResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to return details about an email identity.
+--
+-- /See:/ 'newGetEmailIdentity' smart constructor.
+data GetEmailIdentity = GetEmailIdentity'
+  { -- | The email identity.
+    emailIdentity :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEmailIdentity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'emailIdentity', 'getEmailIdentity_emailIdentity' - The email identity.
+newGetEmailIdentity ::
+  -- | 'emailIdentity'
+  Prelude.Text ->
+  GetEmailIdentity
+newGetEmailIdentity pEmailIdentity_ =
+  GetEmailIdentity' {emailIdentity = pEmailIdentity_}
+
+-- | The email identity.
+getEmailIdentity_emailIdentity :: Lens.Lens' GetEmailIdentity Prelude.Text
+getEmailIdentity_emailIdentity = Lens.lens (\GetEmailIdentity' {emailIdentity} -> emailIdentity) (\s@GetEmailIdentity' {} a -> s {emailIdentity = a} :: GetEmailIdentity)
+
+instance Core.AWSRequest GetEmailIdentity where
+  type
+    AWSResponse GetEmailIdentity =
+      GetEmailIdentityResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetEmailIdentityResponse'
+            Prelude.<$> (x Data..?> "ConfigurationSetName")
+            Prelude.<*> (x Data..?> "DkimAttributes")
+            Prelude.<*> (x Data..?> "FeedbackForwardingStatus")
+            Prelude.<*> (x Data..?> "IdentityType")
+            Prelude.<*> (x Data..?> "MailFromAttributes")
+            Prelude.<*> (x Data..?> "Policies" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "VerificationStatus")
+            Prelude.<*> (x Data..?> "VerifiedForSendingStatus")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetEmailIdentity where
+  hashWithSalt _salt GetEmailIdentity' {..} =
+    _salt `Prelude.hashWithSalt` emailIdentity
+
+instance Prelude.NFData GetEmailIdentity where
+  rnf GetEmailIdentity' {..} = Prelude.rnf emailIdentity
+
+instance Data.ToHeaders GetEmailIdentity where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetEmailIdentity where
+  toPath GetEmailIdentity' {..} =
+    Prelude.mconcat
+      ["/v2/email/identities/", Data.toBS emailIdentity]
+
+instance Data.ToQuery GetEmailIdentity where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | Details about an email identity.
+--
+-- /See:/ 'newGetEmailIdentityResponse' smart constructor.
+data GetEmailIdentityResponse = GetEmailIdentityResponse'
+  { -- | The configuration set used by default when sending from this identity.
+    configurationSetName :: Prelude.Maybe Prelude.Text,
+    -- | An object that contains information about the DKIM attributes for the
+    -- identity.
+    dkimAttributes :: Prelude.Maybe DkimAttributes,
+    -- | The feedback forwarding configuration for the identity.
+    --
+    -- If the value is @true@, you receive email notifications when bounce or
+    -- complaint events occur. These notifications are sent to the address that
+    -- you specified in the @Return-Path@ header of the original email.
+    --
+    -- You\'re required to have a method of tracking bounces and complaints. If
+    -- you haven\'t set up another mechanism for receiving bounce or complaint
+    -- notifications (for example, by setting up an event destination), you
+    -- receive an email notification when these events occur (even if this
+    -- setting is disabled).
+    feedbackForwardingStatus :: Prelude.Maybe Prelude.Bool,
+    -- | The email identity type. Note: the @MANAGED_DOMAIN@ identity type is not
+    -- supported.
+    identityType :: Prelude.Maybe IdentityType,
+    -- | An object that contains information about the Mail-From attributes for
+    -- the email identity.
+    mailFromAttributes :: Prelude.Maybe MailFromAttributes,
+    -- | A map of policy names to policies.
+    policies :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | An array of objects that define the tags (keys and values) that are
+    -- associated with the email identity.
+    tags :: Prelude.Maybe [Tag],
+    -- | The verification status of the identity. The status can be one of the
+    -- following:
+    --
+    -- -   @PENDING@ – The verification process was initiated, but Amazon SES
+    --     hasn\'t yet been able to verify the identity.
+    --
+    -- -   @SUCCESS@ – The verification process completed successfully.
+    --
+    -- -   @FAILED@ – The verification process failed.
+    --
+    -- -   @TEMPORARY_FAILURE@ – A temporary issue is preventing Amazon SES
+    --     from determining the verification status of the identity.
+    --
+    -- -   @NOT_STARTED@ – The verification process hasn\'t been initiated for
+    --     the identity.
+    verificationStatus :: Prelude.Maybe VerificationStatus,
+    -- | Specifies whether or not the identity is verified. You can only send
+    -- email from verified email addresses or domains. For more information
+    -- about verifying identities, see the
+    -- <https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-email-manage-verify.html Amazon Pinpoint User Guide>.
+    verifiedForSendingStatus :: 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 'GetEmailIdentityResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configurationSetName', 'getEmailIdentityResponse_configurationSetName' - The configuration set used by default when sending from this identity.
+--
+-- 'dkimAttributes', 'getEmailIdentityResponse_dkimAttributes' - An object that contains information about the DKIM attributes for the
+-- identity.
+--
+-- 'feedbackForwardingStatus', 'getEmailIdentityResponse_feedbackForwardingStatus' - The feedback forwarding configuration for the identity.
+--
+-- If the value is @true@, you receive email notifications when bounce or
+-- complaint events occur. These notifications are sent to the address that
+-- you specified in the @Return-Path@ header of the original email.
+--
+-- You\'re required to have a method of tracking bounces and complaints. If
+-- you haven\'t set up another mechanism for receiving bounce or complaint
+-- notifications (for example, by setting up an event destination), you
+-- receive an email notification when these events occur (even if this
+-- setting is disabled).
+--
+-- 'identityType', 'getEmailIdentityResponse_identityType' - The email identity type. Note: the @MANAGED_DOMAIN@ identity type is not
+-- supported.
+--
+-- 'mailFromAttributes', 'getEmailIdentityResponse_mailFromAttributes' - An object that contains information about the Mail-From attributes for
+-- the email identity.
+--
+-- 'policies', 'getEmailIdentityResponse_policies' - A map of policy names to policies.
+--
+-- 'tags', 'getEmailIdentityResponse_tags' - An array of objects that define the tags (keys and values) that are
+-- associated with the email identity.
+--
+-- 'verificationStatus', 'getEmailIdentityResponse_verificationStatus' - The verification status of the identity. The status can be one of the
+-- following:
+--
+-- -   @PENDING@ – The verification process was initiated, but Amazon SES
+--     hasn\'t yet been able to verify the identity.
+--
+-- -   @SUCCESS@ – The verification process completed successfully.
+--
+-- -   @FAILED@ – The verification process failed.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue is preventing Amazon SES
+--     from determining the verification status of the identity.
+--
+-- -   @NOT_STARTED@ – The verification process hasn\'t been initiated for
+--     the identity.
+--
+-- 'verifiedForSendingStatus', 'getEmailIdentityResponse_verifiedForSendingStatus' - Specifies whether or not the identity is verified. You can only send
+-- email from verified email addresses or domains. For more information
+-- about verifying identities, see the
+-- <https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-email-manage-verify.html Amazon Pinpoint User Guide>.
+--
+-- 'httpStatus', 'getEmailIdentityResponse_httpStatus' - The response's http status code.
+newGetEmailIdentityResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetEmailIdentityResponse
+newGetEmailIdentityResponse pHttpStatus_ =
+  GetEmailIdentityResponse'
+    { configurationSetName =
+        Prelude.Nothing,
+      dkimAttributes = Prelude.Nothing,
+      feedbackForwardingStatus = Prelude.Nothing,
+      identityType = Prelude.Nothing,
+      mailFromAttributes = Prelude.Nothing,
+      policies = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      verificationStatus = Prelude.Nothing,
+      verifiedForSendingStatus = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The configuration set used by default when sending from this identity.
+getEmailIdentityResponse_configurationSetName :: Lens.Lens' GetEmailIdentityResponse (Prelude.Maybe Prelude.Text)
+getEmailIdentityResponse_configurationSetName = Lens.lens (\GetEmailIdentityResponse' {configurationSetName} -> configurationSetName) (\s@GetEmailIdentityResponse' {} a -> s {configurationSetName = a} :: GetEmailIdentityResponse)
+
+-- | An object that contains information about the DKIM attributes for the
+-- identity.
+getEmailIdentityResponse_dkimAttributes :: Lens.Lens' GetEmailIdentityResponse (Prelude.Maybe DkimAttributes)
+getEmailIdentityResponse_dkimAttributes = Lens.lens (\GetEmailIdentityResponse' {dkimAttributes} -> dkimAttributes) (\s@GetEmailIdentityResponse' {} a -> s {dkimAttributes = a} :: GetEmailIdentityResponse)
+
+-- | The feedback forwarding configuration for the identity.
+--
+-- If the value is @true@, you receive email notifications when bounce or
+-- complaint events occur. These notifications are sent to the address that
+-- you specified in the @Return-Path@ header of the original email.
+--
+-- You\'re required to have a method of tracking bounces and complaints. If
+-- you haven\'t set up another mechanism for receiving bounce or complaint
+-- notifications (for example, by setting up an event destination), you
+-- receive an email notification when these events occur (even if this
+-- setting is disabled).
+getEmailIdentityResponse_feedbackForwardingStatus :: Lens.Lens' GetEmailIdentityResponse (Prelude.Maybe Prelude.Bool)
+getEmailIdentityResponse_feedbackForwardingStatus = Lens.lens (\GetEmailIdentityResponse' {feedbackForwardingStatus} -> feedbackForwardingStatus) (\s@GetEmailIdentityResponse' {} a -> s {feedbackForwardingStatus = a} :: GetEmailIdentityResponse)
+
+-- | The email identity type. Note: the @MANAGED_DOMAIN@ identity type is not
+-- supported.
+getEmailIdentityResponse_identityType :: Lens.Lens' GetEmailIdentityResponse (Prelude.Maybe IdentityType)
+getEmailIdentityResponse_identityType = Lens.lens (\GetEmailIdentityResponse' {identityType} -> identityType) (\s@GetEmailIdentityResponse' {} a -> s {identityType = a} :: GetEmailIdentityResponse)
+
+-- | An object that contains information about the Mail-From attributes for
+-- the email identity.
+getEmailIdentityResponse_mailFromAttributes :: Lens.Lens' GetEmailIdentityResponse (Prelude.Maybe MailFromAttributes)
+getEmailIdentityResponse_mailFromAttributes = Lens.lens (\GetEmailIdentityResponse' {mailFromAttributes} -> mailFromAttributes) (\s@GetEmailIdentityResponse' {} a -> s {mailFromAttributes = a} :: GetEmailIdentityResponse)
+
+-- | A map of policy names to policies.
+getEmailIdentityResponse_policies :: Lens.Lens' GetEmailIdentityResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getEmailIdentityResponse_policies = Lens.lens (\GetEmailIdentityResponse' {policies} -> policies) (\s@GetEmailIdentityResponse' {} a -> s {policies = a} :: GetEmailIdentityResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of objects that define the tags (keys and values) that are
+-- associated with the email identity.
+getEmailIdentityResponse_tags :: Lens.Lens' GetEmailIdentityResponse (Prelude.Maybe [Tag])
+getEmailIdentityResponse_tags = Lens.lens (\GetEmailIdentityResponse' {tags} -> tags) (\s@GetEmailIdentityResponse' {} a -> s {tags = a} :: GetEmailIdentityResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The verification status of the identity. The status can be one of the
+-- following:
+--
+-- -   @PENDING@ – The verification process was initiated, but Amazon SES
+--     hasn\'t yet been able to verify the identity.
+--
+-- -   @SUCCESS@ – The verification process completed successfully.
+--
+-- -   @FAILED@ – The verification process failed.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue is preventing Amazon SES
+--     from determining the verification status of the identity.
+--
+-- -   @NOT_STARTED@ – The verification process hasn\'t been initiated for
+--     the identity.
+getEmailIdentityResponse_verificationStatus :: Lens.Lens' GetEmailIdentityResponse (Prelude.Maybe VerificationStatus)
+getEmailIdentityResponse_verificationStatus = Lens.lens (\GetEmailIdentityResponse' {verificationStatus} -> verificationStatus) (\s@GetEmailIdentityResponse' {} a -> s {verificationStatus = a} :: GetEmailIdentityResponse)
+
+-- | Specifies whether or not the identity is verified. You can only send
+-- email from verified email addresses or domains. For more information
+-- about verifying identities, see the
+-- <https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-email-manage-verify.html Amazon Pinpoint User Guide>.
+getEmailIdentityResponse_verifiedForSendingStatus :: Lens.Lens' GetEmailIdentityResponse (Prelude.Maybe Prelude.Bool)
+getEmailIdentityResponse_verifiedForSendingStatus = Lens.lens (\GetEmailIdentityResponse' {verifiedForSendingStatus} -> verifiedForSendingStatus) (\s@GetEmailIdentityResponse' {} a -> s {verifiedForSendingStatus = a} :: GetEmailIdentityResponse)
+
+-- | The response's http status code.
+getEmailIdentityResponse_httpStatus :: Lens.Lens' GetEmailIdentityResponse Prelude.Int
+getEmailIdentityResponse_httpStatus = Lens.lens (\GetEmailIdentityResponse' {httpStatus} -> httpStatus) (\s@GetEmailIdentityResponse' {} a -> s {httpStatus = a} :: GetEmailIdentityResponse)
+
+instance Prelude.NFData GetEmailIdentityResponse where
+  rnf GetEmailIdentityResponse' {..} =
+    Prelude.rnf configurationSetName
+      `Prelude.seq` Prelude.rnf dkimAttributes
+      `Prelude.seq` Prelude.rnf feedbackForwardingStatus
+      `Prelude.seq` Prelude.rnf identityType
+      `Prelude.seq` Prelude.rnf mailFromAttributes
+      `Prelude.seq` Prelude.rnf policies
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf verificationStatus
+      `Prelude.seq` Prelude.rnf verifiedForSendingStatus
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/GetEmailIdentityPolicies.hs b/gen/Amazonka/SESV2/GetEmailIdentityPolicies.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetEmailIdentityPolicies.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.SESV2.GetEmailIdentityPolicies
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the requested sending authorization policies for the given
+-- identity (an email address or a domain). The policies are returned as a
+-- map of policy names to policy contents. You can retrieve a maximum of 20
+-- policies at a time.
+--
+-- This API is for the identity owner only. If you have not verified the
+-- identity, this API will return an error.
+--
+-- Sending authorization is a feature that enables an identity owner to
+-- authorize other senders to use its identities. For information about
+-- using sending authorization, see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html Amazon SES Developer Guide>.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.GetEmailIdentityPolicies
+  ( -- * Creating a Request
+    GetEmailIdentityPolicies (..),
+    newGetEmailIdentityPolicies,
+
+    -- * Request Lenses
+    getEmailIdentityPolicies_emailIdentity,
+
+    -- * Destructuring the Response
+    GetEmailIdentityPoliciesResponse (..),
+    newGetEmailIdentityPoliciesResponse,
+
+    -- * Response Lenses
+    getEmailIdentityPoliciesResponse_policies,
+    getEmailIdentityPoliciesResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to return the policies of an email identity.
+--
+-- /See:/ 'newGetEmailIdentityPolicies' smart constructor.
+data GetEmailIdentityPolicies = GetEmailIdentityPolicies'
+  { -- | The email identity.
+    emailIdentity :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEmailIdentityPolicies' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'emailIdentity', 'getEmailIdentityPolicies_emailIdentity' - The email identity.
+newGetEmailIdentityPolicies ::
+  -- | 'emailIdentity'
+  Prelude.Text ->
+  GetEmailIdentityPolicies
+newGetEmailIdentityPolicies pEmailIdentity_ =
+  GetEmailIdentityPolicies'
+    { emailIdentity =
+        pEmailIdentity_
+    }
+
+-- | The email identity.
+getEmailIdentityPolicies_emailIdentity :: Lens.Lens' GetEmailIdentityPolicies Prelude.Text
+getEmailIdentityPolicies_emailIdentity = Lens.lens (\GetEmailIdentityPolicies' {emailIdentity} -> emailIdentity) (\s@GetEmailIdentityPolicies' {} a -> s {emailIdentity = a} :: GetEmailIdentityPolicies)
+
+instance Core.AWSRequest GetEmailIdentityPolicies where
+  type
+    AWSResponse GetEmailIdentityPolicies =
+      GetEmailIdentityPoliciesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetEmailIdentityPoliciesResponse'
+            Prelude.<$> (x Data..?> "Policies" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetEmailIdentityPolicies where
+  hashWithSalt _salt GetEmailIdentityPolicies' {..} =
+    _salt `Prelude.hashWithSalt` emailIdentity
+
+instance Prelude.NFData GetEmailIdentityPolicies where
+  rnf GetEmailIdentityPolicies' {..} =
+    Prelude.rnf emailIdentity
+
+instance Data.ToHeaders GetEmailIdentityPolicies where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetEmailIdentityPolicies where
+  toPath GetEmailIdentityPolicies' {..} =
+    Prelude.mconcat
+      [ "/v2/email/identities/",
+        Data.toBS emailIdentity,
+        "/policies"
+      ]
+
+instance Data.ToQuery GetEmailIdentityPolicies where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | Identity policies associated with email identity.
+--
+-- /See:/ 'newGetEmailIdentityPoliciesResponse' smart constructor.
+data GetEmailIdentityPoliciesResponse = GetEmailIdentityPoliciesResponse'
+  { -- | A map of policy names to policies.
+    policies :: 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 'GetEmailIdentityPoliciesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policies', 'getEmailIdentityPoliciesResponse_policies' - A map of policy names to policies.
+--
+-- 'httpStatus', 'getEmailIdentityPoliciesResponse_httpStatus' - The response's http status code.
+newGetEmailIdentityPoliciesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetEmailIdentityPoliciesResponse
+newGetEmailIdentityPoliciesResponse pHttpStatus_ =
+  GetEmailIdentityPoliciesResponse'
+    { policies =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A map of policy names to policies.
+getEmailIdentityPoliciesResponse_policies :: Lens.Lens' GetEmailIdentityPoliciesResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getEmailIdentityPoliciesResponse_policies = Lens.lens (\GetEmailIdentityPoliciesResponse' {policies} -> policies) (\s@GetEmailIdentityPoliciesResponse' {} a -> s {policies = a} :: GetEmailIdentityPoliciesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getEmailIdentityPoliciesResponse_httpStatus :: Lens.Lens' GetEmailIdentityPoliciesResponse Prelude.Int
+getEmailIdentityPoliciesResponse_httpStatus = Lens.lens (\GetEmailIdentityPoliciesResponse' {httpStatus} -> httpStatus) (\s@GetEmailIdentityPoliciesResponse' {} a -> s {httpStatus = a} :: GetEmailIdentityPoliciesResponse)
+
+instance
+  Prelude.NFData
+    GetEmailIdentityPoliciesResponse
+  where
+  rnf GetEmailIdentityPoliciesResponse' {..} =
+    Prelude.rnf policies
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/GetEmailTemplate.hs b/gen/Amazonka/SESV2/GetEmailTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetEmailTemplate.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.SESV2.GetEmailTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Displays the template object (which includes the subject line, HTML part
+-- and text part) for the template you specify.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.GetEmailTemplate
+  ( -- * Creating a Request
+    GetEmailTemplate (..),
+    newGetEmailTemplate,
+
+    -- * Request Lenses
+    getEmailTemplate_templateName,
+
+    -- * Destructuring the Response
+    GetEmailTemplateResponse (..),
+    newGetEmailTemplateResponse,
+
+    -- * Response Lenses
+    getEmailTemplateResponse_httpStatus,
+    getEmailTemplateResponse_templateName,
+    getEmailTemplateResponse_templateContent,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to display the template object (which includes the
+-- subject line, HTML part and text part) for the template you specify.
+--
+-- /See:/ 'newGetEmailTemplate' smart constructor.
+data GetEmailTemplate = GetEmailTemplate'
+  { -- | The name of the template.
+    templateName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEmailTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'templateName', 'getEmailTemplate_templateName' - The name of the template.
+newGetEmailTemplate ::
+  -- | 'templateName'
+  Prelude.Text ->
+  GetEmailTemplate
+newGetEmailTemplate pTemplateName_ =
+  GetEmailTemplate' {templateName = pTemplateName_}
+
+-- | The name of the template.
+getEmailTemplate_templateName :: Lens.Lens' GetEmailTemplate Prelude.Text
+getEmailTemplate_templateName = Lens.lens (\GetEmailTemplate' {templateName} -> templateName) (\s@GetEmailTemplate' {} a -> s {templateName = a} :: GetEmailTemplate)
+
+instance Core.AWSRequest GetEmailTemplate where
+  type
+    AWSResponse GetEmailTemplate =
+      GetEmailTemplateResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetEmailTemplateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "TemplateName")
+            Prelude.<*> (x Data..:> "TemplateContent")
+      )
+
+instance Prelude.Hashable GetEmailTemplate where
+  hashWithSalt _salt GetEmailTemplate' {..} =
+    _salt `Prelude.hashWithSalt` templateName
+
+instance Prelude.NFData GetEmailTemplate where
+  rnf GetEmailTemplate' {..} = Prelude.rnf templateName
+
+instance Data.ToHeaders GetEmailTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetEmailTemplate where
+  toPath GetEmailTemplate' {..} =
+    Prelude.mconcat
+      ["/v2/email/templates/", Data.toBS templateName]
+
+instance Data.ToQuery GetEmailTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The following element is returned by the service.
+--
+-- /See:/ 'newGetEmailTemplateResponse' smart constructor.
+data GetEmailTemplateResponse = GetEmailTemplateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the template.
+    templateName :: Prelude.Text,
+    -- | The content of the email template, composed of a subject line, an HTML
+    -- part, and a text-only part.
+    templateContent :: EmailTemplateContent
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEmailTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getEmailTemplateResponse_httpStatus' - The response's http status code.
+--
+-- 'templateName', 'getEmailTemplateResponse_templateName' - The name of the template.
+--
+-- 'templateContent', 'getEmailTemplateResponse_templateContent' - The content of the email template, composed of a subject line, an HTML
+-- part, and a text-only part.
+newGetEmailTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'templateName'
+  Prelude.Text ->
+  -- | 'templateContent'
+  EmailTemplateContent ->
+  GetEmailTemplateResponse
+newGetEmailTemplateResponse
+  pHttpStatus_
+  pTemplateName_
+  pTemplateContent_ =
+    GetEmailTemplateResponse'
+      { httpStatus =
+          pHttpStatus_,
+        templateName = pTemplateName_,
+        templateContent = pTemplateContent_
+      }
+
+-- | The response's http status code.
+getEmailTemplateResponse_httpStatus :: Lens.Lens' GetEmailTemplateResponse Prelude.Int
+getEmailTemplateResponse_httpStatus = Lens.lens (\GetEmailTemplateResponse' {httpStatus} -> httpStatus) (\s@GetEmailTemplateResponse' {} a -> s {httpStatus = a} :: GetEmailTemplateResponse)
+
+-- | The name of the template.
+getEmailTemplateResponse_templateName :: Lens.Lens' GetEmailTemplateResponse Prelude.Text
+getEmailTemplateResponse_templateName = Lens.lens (\GetEmailTemplateResponse' {templateName} -> templateName) (\s@GetEmailTemplateResponse' {} a -> s {templateName = a} :: GetEmailTemplateResponse)
+
+-- | The content of the email template, composed of a subject line, an HTML
+-- part, and a text-only part.
+getEmailTemplateResponse_templateContent :: Lens.Lens' GetEmailTemplateResponse EmailTemplateContent
+getEmailTemplateResponse_templateContent = Lens.lens (\GetEmailTemplateResponse' {templateContent} -> templateContent) (\s@GetEmailTemplateResponse' {} a -> s {templateContent = a} :: GetEmailTemplateResponse)
+
+instance Prelude.NFData GetEmailTemplateResponse where
+  rnf GetEmailTemplateResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf templateName
+      `Prelude.seq` Prelude.rnf templateContent
diff --git a/gen/Amazonka/SESV2/GetImportJob.hs b/gen/Amazonka/SESV2/GetImportJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetImportJob.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.SESV2.GetImportJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides information about an import job.
+module Amazonka.SESV2.GetImportJob
+  ( -- * Creating a Request
+    GetImportJob (..),
+    newGetImportJob,
+
+    -- * Request Lenses
+    getImportJob_jobId,
+
+    -- * Destructuring the Response
+    GetImportJobResponse (..),
+    newGetImportJobResponse,
+
+    -- * Response Lenses
+    getImportJobResponse_completedTimestamp,
+    getImportJobResponse_createdTimestamp,
+    getImportJobResponse_failedRecordsCount,
+    getImportJobResponse_failureInfo,
+    getImportJobResponse_importDataSource,
+    getImportJobResponse_importDestination,
+    getImportJobResponse_jobId,
+    getImportJobResponse_jobStatus,
+    getImportJobResponse_processedRecordsCount,
+    getImportJobResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request for information about an import job using the
+-- import job ID.
+--
+-- /See:/ 'newGetImportJob' smart constructor.
+data GetImportJob = GetImportJob'
+  { -- | The ID of the import job.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetImportJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getImportJob_jobId' - The ID of the import job.
+newGetImportJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  GetImportJob
+newGetImportJob pJobId_ =
+  GetImportJob' {jobId = pJobId_}
+
+-- | The ID of the import job.
+getImportJob_jobId :: Lens.Lens' GetImportJob Prelude.Text
+getImportJob_jobId = Lens.lens (\GetImportJob' {jobId} -> jobId) (\s@GetImportJob' {} a -> s {jobId = a} :: GetImportJob)
+
+instance Core.AWSRequest GetImportJob where
+  type AWSResponse GetImportJob = GetImportJobResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetImportJobResponse'
+            Prelude.<$> (x Data..?> "CompletedTimestamp")
+            Prelude.<*> (x Data..?> "CreatedTimestamp")
+            Prelude.<*> (x Data..?> "FailedRecordsCount")
+            Prelude.<*> (x Data..?> "FailureInfo")
+            Prelude.<*> (x Data..?> "ImportDataSource")
+            Prelude.<*> (x Data..?> "ImportDestination")
+            Prelude.<*> (x Data..?> "JobId")
+            Prelude.<*> (x Data..?> "JobStatus")
+            Prelude.<*> (x Data..?> "ProcessedRecordsCount")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetImportJob where
+  hashWithSalt _salt GetImportJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData GetImportJob where
+  rnf GetImportJob' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders GetImportJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetImportJob where
+  toPath GetImportJob' {..} =
+    Prelude.mconcat
+      ["/v2/email/import-jobs/", Data.toBS jobId]
+
+instance Data.ToQuery GetImportJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newGetImportJobResponse' smart constructor.
+data GetImportJobResponse = GetImportJobResponse'
+  { -- | The time stamp of when the import job was completed.
+    completedTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The time stamp of when the import job was created.
+    createdTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The number of records that failed processing because of invalid input or
+    -- other reasons.
+    failedRecordsCount :: Prelude.Maybe Prelude.Int,
+    -- | The failure details about an import job.
+    failureInfo :: Prelude.Maybe FailureInfo,
+    -- | The data source of the import job.
+    importDataSource :: Prelude.Maybe ImportDataSource,
+    -- | The destination of the import job.
+    importDestination :: Prelude.Maybe ImportDestination,
+    -- | A string that represents the import job ID.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the import job.
+    jobStatus :: Prelude.Maybe JobStatus,
+    -- | The current number of records processed.
+    processedRecordsCount :: 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 'GetImportJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'completedTimestamp', 'getImportJobResponse_completedTimestamp' - The time stamp of when the import job was completed.
+--
+-- 'createdTimestamp', 'getImportJobResponse_createdTimestamp' - The time stamp of when the import job was created.
+--
+-- 'failedRecordsCount', 'getImportJobResponse_failedRecordsCount' - The number of records that failed processing because of invalid input or
+-- other reasons.
+--
+-- 'failureInfo', 'getImportJobResponse_failureInfo' - The failure details about an import job.
+--
+-- 'importDataSource', 'getImportJobResponse_importDataSource' - The data source of the import job.
+--
+-- 'importDestination', 'getImportJobResponse_importDestination' - The destination of the import job.
+--
+-- 'jobId', 'getImportJobResponse_jobId' - A string that represents the import job ID.
+--
+-- 'jobStatus', 'getImportJobResponse_jobStatus' - The status of the import job.
+--
+-- 'processedRecordsCount', 'getImportJobResponse_processedRecordsCount' - The current number of records processed.
+--
+-- 'httpStatus', 'getImportJobResponse_httpStatus' - The response's http status code.
+newGetImportJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetImportJobResponse
+newGetImportJobResponse pHttpStatus_ =
+  GetImportJobResponse'
+    { completedTimestamp =
+        Prelude.Nothing,
+      createdTimestamp = Prelude.Nothing,
+      failedRecordsCount = Prelude.Nothing,
+      failureInfo = Prelude.Nothing,
+      importDataSource = Prelude.Nothing,
+      importDestination = Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      jobStatus = Prelude.Nothing,
+      processedRecordsCount = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The time stamp of when the import job was completed.
+getImportJobResponse_completedTimestamp :: Lens.Lens' GetImportJobResponse (Prelude.Maybe Prelude.UTCTime)
+getImportJobResponse_completedTimestamp = Lens.lens (\GetImportJobResponse' {completedTimestamp} -> completedTimestamp) (\s@GetImportJobResponse' {} a -> s {completedTimestamp = a} :: GetImportJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The time stamp of when the import job was created.
+getImportJobResponse_createdTimestamp :: Lens.Lens' GetImportJobResponse (Prelude.Maybe Prelude.UTCTime)
+getImportJobResponse_createdTimestamp = Lens.lens (\GetImportJobResponse' {createdTimestamp} -> createdTimestamp) (\s@GetImportJobResponse' {} a -> s {createdTimestamp = a} :: GetImportJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The number of records that failed processing because of invalid input or
+-- other reasons.
+getImportJobResponse_failedRecordsCount :: Lens.Lens' GetImportJobResponse (Prelude.Maybe Prelude.Int)
+getImportJobResponse_failedRecordsCount = Lens.lens (\GetImportJobResponse' {failedRecordsCount} -> failedRecordsCount) (\s@GetImportJobResponse' {} a -> s {failedRecordsCount = a} :: GetImportJobResponse)
+
+-- | The failure details about an import job.
+getImportJobResponse_failureInfo :: Lens.Lens' GetImportJobResponse (Prelude.Maybe FailureInfo)
+getImportJobResponse_failureInfo = Lens.lens (\GetImportJobResponse' {failureInfo} -> failureInfo) (\s@GetImportJobResponse' {} a -> s {failureInfo = a} :: GetImportJobResponse)
+
+-- | The data source of the import job.
+getImportJobResponse_importDataSource :: Lens.Lens' GetImportJobResponse (Prelude.Maybe ImportDataSource)
+getImportJobResponse_importDataSource = Lens.lens (\GetImportJobResponse' {importDataSource} -> importDataSource) (\s@GetImportJobResponse' {} a -> s {importDataSource = a} :: GetImportJobResponse)
+
+-- | The destination of the import job.
+getImportJobResponse_importDestination :: Lens.Lens' GetImportJobResponse (Prelude.Maybe ImportDestination)
+getImportJobResponse_importDestination = Lens.lens (\GetImportJobResponse' {importDestination} -> importDestination) (\s@GetImportJobResponse' {} a -> s {importDestination = a} :: GetImportJobResponse)
+
+-- | A string that represents the import job ID.
+getImportJobResponse_jobId :: Lens.Lens' GetImportJobResponse (Prelude.Maybe Prelude.Text)
+getImportJobResponse_jobId = Lens.lens (\GetImportJobResponse' {jobId} -> jobId) (\s@GetImportJobResponse' {} a -> s {jobId = a} :: GetImportJobResponse)
+
+-- | The status of the import job.
+getImportJobResponse_jobStatus :: Lens.Lens' GetImportJobResponse (Prelude.Maybe JobStatus)
+getImportJobResponse_jobStatus = Lens.lens (\GetImportJobResponse' {jobStatus} -> jobStatus) (\s@GetImportJobResponse' {} a -> s {jobStatus = a} :: GetImportJobResponse)
+
+-- | The current number of records processed.
+getImportJobResponse_processedRecordsCount :: Lens.Lens' GetImportJobResponse (Prelude.Maybe Prelude.Int)
+getImportJobResponse_processedRecordsCount = Lens.lens (\GetImportJobResponse' {processedRecordsCount} -> processedRecordsCount) (\s@GetImportJobResponse' {} a -> s {processedRecordsCount = a} :: GetImportJobResponse)
+
+-- | The response's http status code.
+getImportJobResponse_httpStatus :: Lens.Lens' GetImportJobResponse Prelude.Int
+getImportJobResponse_httpStatus = Lens.lens (\GetImportJobResponse' {httpStatus} -> httpStatus) (\s@GetImportJobResponse' {} a -> s {httpStatus = a} :: GetImportJobResponse)
+
+instance Prelude.NFData GetImportJobResponse where
+  rnf GetImportJobResponse' {..} =
+    Prelude.rnf completedTimestamp
+      `Prelude.seq` Prelude.rnf createdTimestamp
+      `Prelude.seq` Prelude.rnf failedRecordsCount
+      `Prelude.seq` Prelude.rnf failureInfo
+      `Prelude.seq` Prelude.rnf importDataSource
+      `Prelude.seq` Prelude.rnf importDestination
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf jobStatus
+      `Prelude.seq` Prelude.rnf processedRecordsCount
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/GetSuppressedDestination.hs b/gen/Amazonka/SESV2/GetSuppressedDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/GetSuppressedDestination.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.SESV2.GetSuppressedDestination
+-- 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 a specific email address that\'s on the
+-- suppression list for your account.
+module Amazonka.SESV2.GetSuppressedDestination
+  ( -- * Creating a Request
+    GetSuppressedDestination (..),
+    newGetSuppressedDestination,
+
+    -- * Request Lenses
+    getSuppressedDestination_emailAddress,
+
+    -- * Destructuring the Response
+    GetSuppressedDestinationResponse (..),
+    newGetSuppressedDestinationResponse,
+
+    -- * Response Lenses
+    getSuppressedDestinationResponse_httpStatus,
+    getSuppressedDestinationResponse_suppressedDestination,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to retrieve information about an email address that\'s on the
+-- suppression list for your account.
+--
+-- /See:/ 'newGetSuppressedDestination' smart constructor.
+data GetSuppressedDestination = GetSuppressedDestination'
+  { -- | The email address that\'s on the account suppression list.
+    emailAddress :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSuppressedDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'emailAddress', 'getSuppressedDestination_emailAddress' - The email address that\'s on the account suppression list.
+newGetSuppressedDestination ::
+  -- | 'emailAddress'
+  Prelude.Text ->
+  GetSuppressedDestination
+newGetSuppressedDestination pEmailAddress_ =
+  GetSuppressedDestination'
+    { emailAddress =
+        pEmailAddress_
+    }
+
+-- | The email address that\'s on the account suppression list.
+getSuppressedDestination_emailAddress :: Lens.Lens' GetSuppressedDestination Prelude.Text
+getSuppressedDestination_emailAddress = Lens.lens (\GetSuppressedDestination' {emailAddress} -> emailAddress) (\s@GetSuppressedDestination' {} a -> s {emailAddress = a} :: GetSuppressedDestination)
+
+instance Core.AWSRequest GetSuppressedDestination where
+  type
+    AWSResponse GetSuppressedDestination =
+      GetSuppressedDestinationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetSuppressedDestinationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "SuppressedDestination")
+      )
+
+instance Prelude.Hashable GetSuppressedDestination where
+  hashWithSalt _salt GetSuppressedDestination' {..} =
+    _salt `Prelude.hashWithSalt` emailAddress
+
+instance Prelude.NFData GetSuppressedDestination where
+  rnf GetSuppressedDestination' {..} =
+    Prelude.rnf emailAddress
+
+instance Data.ToHeaders GetSuppressedDestination where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetSuppressedDestination where
+  toPath GetSuppressedDestination' {..} =
+    Prelude.mconcat
+      [ "/v2/email/suppression/addresses/",
+        Data.toBS emailAddress
+      ]
+
+instance Data.ToQuery GetSuppressedDestination where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | Information about the suppressed email address.
+--
+-- /See:/ 'newGetSuppressedDestinationResponse' smart constructor.
+data GetSuppressedDestinationResponse = GetSuppressedDestinationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | An object containing information about the suppressed email address.
+    suppressedDestination :: SuppressedDestination
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSuppressedDestinationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getSuppressedDestinationResponse_httpStatus' - The response's http status code.
+--
+-- 'suppressedDestination', 'getSuppressedDestinationResponse_suppressedDestination' - An object containing information about the suppressed email address.
+newGetSuppressedDestinationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'suppressedDestination'
+  SuppressedDestination ->
+  GetSuppressedDestinationResponse
+newGetSuppressedDestinationResponse
+  pHttpStatus_
+  pSuppressedDestination_ =
+    GetSuppressedDestinationResponse'
+      { httpStatus =
+          pHttpStatus_,
+        suppressedDestination =
+          pSuppressedDestination_
+      }
+
+-- | The response's http status code.
+getSuppressedDestinationResponse_httpStatus :: Lens.Lens' GetSuppressedDestinationResponse Prelude.Int
+getSuppressedDestinationResponse_httpStatus = Lens.lens (\GetSuppressedDestinationResponse' {httpStatus} -> httpStatus) (\s@GetSuppressedDestinationResponse' {} a -> s {httpStatus = a} :: GetSuppressedDestinationResponse)
+
+-- | An object containing information about the suppressed email address.
+getSuppressedDestinationResponse_suppressedDestination :: Lens.Lens' GetSuppressedDestinationResponse SuppressedDestination
+getSuppressedDestinationResponse_suppressedDestination = Lens.lens (\GetSuppressedDestinationResponse' {suppressedDestination} -> suppressedDestination) (\s@GetSuppressedDestinationResponse' {} a -> s {suppressedDestination = a} :: GetSuppressedDestinationResponse)
+
+instance
+  Prelude.NFData
+    GetSuppressedDestinationResponse
+  where
+  rnf GetSuppressedDestinationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf suppressedDestination
diff --git a/gen/Amazonka/SESV2/Lens.hs b/gen/Amazonka/SESV2/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Lens.hs
@@ -0,0 +1,1139 @@
+{-# 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.SESV2.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.SESV2.Lens
+  ( -- * Operations
+
+    -- ** BatchGetMetricData
+    batchGetMetricData_queries,
+    batchGetMetricDataResponse_errors,
+    batchGetMetricDataResponse_results,
+    batchGetMetricDataResponse_httpStatus,
+
+    -- ** CreateConfigurationSet
+    createConfigurationSet_deliveryOptions,
+    createConfigurationSet_reputationOptions,
+    createConfigurationSet_sendingOptions,
+    createConfigurationSet_suppressionOptions,
+    createConfigurationSet_tags,
+    createConfigurationSet_trackingOptions,
+    createConfigurationSet_vdmOptions,
+    createConfigurationSet_configurationSetName,
+    createConfigurationSetResponse_httpStatus,
+
+    -- ** CreateConfigurationSetEventDestination
+    createConfigurationSetEventDestination_configurationSetName,
+    createConfigurationSetEventDestination_eventDestinationName,
+    createConfigurationSetEventDestination_eventDestination,
+    createConfigurationSetEventDestinationResponse_httpStatus,
+
+    -- ** CreateContact
+    createContact_attributesData,
+    createContact_topicPreferences,
+    createContact_unsubscribeAll,
+    createContact_contactListName,
+    createContact_emailAddress,
+    createContactResponse_httpStatus,
+
+    -- ** CreateContactList
+    createContactList_description,
+    createContactList_tags,
+    createContactList_topics,
+    createContactList_contactListName,
+    createContactListResponse_httpStatus,
+
+    -- ** CreateCustomVerificationEmailTemplate
+    createCustomVerificationEmailTemplate_templateName,
+    createCustomVerificationEmailTemplate_fromEmailAddress,
+    createCustomVerificationEmailTemplate_templateSubject,
+    createCustomVerificationEmailTemplate_templateContent,
+    createCustomVerificationEmailTemplate_successRedirectionURL,
+    createCustomVerificationEmailTemplate_failureRedirectionURL,
+    createCustomVerificationEmailTemplateResponse_httpStatus,
+
+    -- ** CreateDedicatedIpPool
+    createDedicatedIpPool_scalingMode,
+    createDedicatedIpPool_tags,
+    createDedicatedIpPool_poolName,
+    createDedicatedIpPoolResponse_httpStatus,
+
+    -- ** CreateDeliverabilityTestReport
+    createDeliverabilityTestReport_reportName,
+    createDeliverabilityTestReport_tags,
+    createDeliverabilityTestReport_fromEmailAddress,
+    createDeliverabilityTestReport_content,
+    createDeliverabilityTestReportResponse_httpStatus,
+    createDeliverabilityTestReportResponse_reportId,
+    createDeliverabilityTestReportResponse_deliverabilityTestStatus,
+
+    -- ** CreateEmailIdentity
+    createEmailIdentity_configurationSetName,
+    createEmailIdentity_dkimSigningAttributes,
+    createEmailIdentity_tags,
+    createEmailIdentity_emailIdentity,
+    createEmailIdentityResponse_dkimAttributes,
+    createEmailIdentityResponse_identityType,
+    createEmailIdentityResponse_verifiedForSendingStatus,
+    createEmailIdentityResponse_httpStatus,
+
+    -- ** CreateEmailIdentityPolicy
+    createEmailIdentityPolicy_emailIdentity,
+    createEmailIdentityPolicy_policyName,
+    createEmailIdentityPolicy_policy,
+    createEmailIdentityPolicyResponse_httpStatus,
+
+    -- ** CreateEmailTemplate
+    createEmailTemplate_templateName,
+    createEmailTemplate_templateContent,
+    createEmailTemplateResponse_httpStatus,
+
+    -- ** CreateImportJob
+    createImportJob_importDestination,
+    createImportJob_importDataSource,
+    createImportJobResponse_jobId,
+    createImportJobResponse_httpStatus,
+
+    -- ** DeleteConfigurationSet
+    deleteConfigurationSet_configurationSetName,
+    deleteConfigurationSetResponse_httpStatus,
+
+    -- ** DeleteConfigurationSetEventDestination
+    deleteConfigurationSetEventDestination_configurationSetName,
+    deleteConfigurationSetEventDestination_eventDestinationName,
+    deleteConfigurationSetEventDestinationResponse_httpStatus,
+
+    -- ** DeleteContact
+    deleteContact_contactListName,
+    deleteContact_emailAddress,
+    deleteContactResponse_httpStatus,
+
+    -- ** DeleteContactList
+    deleteContactList_contactListName,
+    deleteContactListResponse_httpStatus,
+
+    -- ** DeleteCustomVerificationEmailTemplate
+    deleteCustomVerificationEmailTemplate_templateName,
+    deleteCustomVerificationEmailTemplateResponse_httpStatus,
+
+    -- ** DeleteDedicatedIpPool
+    deleteDedicatedIpPool_poolName,
+    deleteDedicatedIpPoolResponse_httpStatus,
+
+    -- ** DeleteEmailIdentity
+    deleteEmailIdentity_emailIdentity,
+    deleteEmailIdentityResponse_httpStatus,
+
+    -- ** DeleteEmailIdentityPolicy
+    deleteEmailIdentityPolicy_emailIdentity,
+    deleteEmailIdentityPolicy_policyName,
+    deleteEmailIdentityPolicyResponse_httpStatus,
+
+    -- ** DeleteEmailTemplate
+    deleteEmailTemplate_templateName,
+    deleteEmailTemplateResponse_httpStatus,
+
+    -- ** DeleteSuppressedDestination
+    deleteSuppressedDestination_emailAddress,
+    deleteSuppressedDestinationResponse_httpStatus,
+
+    -- ** GetAccount
+    getAccountResponse_dedicatedIpAutoWarmupEnabled,
+    getAccountResponse_details,
+    getAccountResponse_enforcementStatus,
+    getAccountResponse_productionAccessEnabled,
+    getAccountResponse_sendQuota,
+    getAccountResponse_sendingEnabled,
+    getAccountResponse_suppressionAttributes,
+    getAccountResponse_vdmAttributes,
+    getAccountResponse_httpStatus,
+
+    -- ** GetBlacklistReports
+    getBlacklistReports_blacklistItemNames,
+    getBlacklistReportsResponse_httpStatus,
+    getBlacklistReportsResponse_blacklistReport,
+
+    -- ** GetConfigurationSet
+    getConfigurationSet_configurationSetName,
+    getConfigurationSetResponse_configurationSetName,
+    getConfigurationSetResponse_deliveryOptions,
+    getConfigurationSetResponse_reputationOptions,
+    getConfigurationSetResponse_sendingOptions,
+    getConfigurationSetResponse_suppressionOptions,
+    getConfigurationSetResponse_tags,
+    getConfigurationSetResponse_trackingOptions,
+    getConfigurationSetResponse_vdmOptions,
+    getConfigurationSetResponse_httpStatus,
+
+    -- ** GetConfigurationSetEventDestinations
+    getConfigurationSetEventDestinations_configurationSetName,
+    getConfigurationSetEventDestinationsResponse_eventDestinations,
+    getConfigurationSetEventDestinationsResponse_httpStatus,
+
+    -- ** GetContact
+    getContact_contactListName,
+    getContact_emailAddress,
+    getContactResponse_attributesData,
+    getContactResponse_contactListName,
+    getContactResponse_createdTimestamp,
+    getContactResponse_emailAddress,
+    getContactResponse_lastUpdatedTimestamp,
+    getContactResponse_topicDefaultPreferences,
+    getContactResponse_topicPreferences,
+    getContactResponse_unsubscribeAll,
+    getContactResponse_httpStatus,
+
+    -- ** GetContactList
+    getContactList_contactListName,
+    getContactListResponse_contactListName,
+    getContactListResponse_createdTimestamp,
+    getContactListResponse_description,
+    getContactListResponse_lastUpdatedTimestamp,
+    getContactListResponse_tags,
+    getContactListResponse_topics,
+    getContactListResponse_httpStatus,
+
+    -- ** GetCustomVerificationEmailTemplate
+    getCustomVerificationEmailTemplate_templateName,
+    getCustomVerificationEmailTemplateResponse_failureRedirectionURL,
+    getCustomVerificationEmailTemplateResponse_fromEmailAddress,
+    getCustomVerificationEmailTemplateResponse_successRedirectionURL,
+    getCustomVerificationEmailTemplateResponse_templateContent,
+    getCustomVerificationEmailTemplateResponse_templateName,
+    getCustomVerificationEmailTemplateResponse_templateSubject,
+    getCustomVerificationEmailTemplateResponse_httpStatus,
+
+    -- ** GetDedicatedIp
+    getDedicatedIp_ip,
+    getDedicatedIpResponse_dedicatedIp,
+    getDedicatedIpResponse_httpStatus,
+
+    -- ** GetDedicatedIpPool
+    getDedicatedIpPool_poolName,
+    getDedicatedIpPoolResponse_dedicatedIpPool,
+    getDedicatedIpPoolResponse_httpStatus,
+
+    -- ** GetDedicatedIps
+    getDedicatedIps_nextToken,
+    getDedicatedIps_pageSize,
+    getDedicatedIps_poolName,
+    getDedicatedIpsResponse_dedicatedIps,
+    getDedicatedIpsResponse_nextToken,
+    getDedicatedIpsResponse_httpStatus,
+
+    -- ** GetDeliverabilityDashboardOptions
+    getDeliverabilityDashboardOptionsResponse_accountStatus,
+    getDeliverabilityDashboardOptionsResponse_activeSubscribedDomains,
+    getDeliverabilityDashboardOptionsResponse_pendingExpirationSubscribedDomains,
+    getDeliverabilityDashboardOptionsResponse_subscriptionExpiryDate,
+    getDeliverabilityDashboardOptionsResponse_httpStatus,
+    getDeliverabilityDashboardOptionsResponse_dashboardEnabled,
+
+    -- ** GetDeliverabilityTestReport
+    getDeliverabilityTestReport_reportId,
+    getDeliverabilityTestReportResponse_message,
+    getDeliverabilityTestReportResponse_tags,
+    getDeliverabilityTestReportResponse_httpStatus,
+    getDeliverabilityTestReportResponse_deliverabilityTestReport,
+    getDeliverabilityTestReportResponse_overallPlacement,
+    getDeliverabilityTestReportResponse_ispPlacements,
+
+    -- ** GetDomainDeliverabilityCampaign
+    getDomainDeliverabilityCampaign_campaignId,
+    getDomainDeliverabilityCampaignResponse_httpStatus,
+    getDomainDeliverabilityCampaignResponse_domainDeliverabilityCampaign,
+
+    -- ** GetDomainStatisticsReport
+    getDomainStatisticsReport_domain,
+    getDomainStatisticsReport_startDate,
+    getDomainStatisticsReport_endDate,
+    getDomainStatisticsReportResponse_httpStatus,
+    getDomainStatisticsReportResponse_overallVolume,
+    getDomainStatisticsReportResponse_dailyVolumes,
+
+    -- ** GetEmailIdentity
+    getEmailIdentity_emailIdentity,
+    getEmailIdentityResponse_configurationSetName,
+    getEmailIdentityResponse_dkimAttributes,
+    getEmailIdentityResponse_feedbackForwardingStatus,
+    getEmailIdentityResponse_identityType,
+    getEmailIdentityResponse_mailFromAttributes,
+    getEmailIdentityResponse_policies,
+    getEmailIdentityResponse_tags,
+    getEmailIdentityResponse_verificationStatus,
+    getEmailIdentityResponse_verifiedForSendingStatus,
+    getEmailIdentityResponse_httpStatus,
+
+    -- ** GetEmailIdentityPolicies
+    getEmailIdentityPolicies_emailIdentity,
+    getEmailIdentityPoliciesResponse_policies,
+    getEmailIdentityPoliciesResponse_httpStatus,
+
+    -- ** GetEmailTemplate
+    getEmailTemplate_templateName,
+    getEmailTemplateResponse_httpStatus,
+    getEmailTemplateResponse_templateName,
+    getEmailTemplateResponse_templateContent,
+
+    -- ** GetImportJob
+    getImportJob_jobId,
+    getImportJobResponse_completedTimestamp,
+    getImportJobResponse_createdTimestamp,
+    getImportJobResponse_failedRecordsCount,
+    getImportJobResponse_failureInfo,
+    getImportJobResponse_importDataSource,
+    getImportJobResponse_importDestination,
+    getImportJobResponse_jobId,
+    getImportJobResponse_jobStatus,
+    getImportJobResponse_processedRecordsCount,
+    getImportJobResponse_httpStatus,
+
+    -- ** GetSuppressedDestination
+    getSuppressedDestination_emailAddress,
+    getSuppressedDestinationResponse_httpStatus,
+    getSuppressedDestinationResponse_suppressedDestination,
+
+    -- ** ListConfigurationSets
+    listConfigurationSets_nextToken,
+    listConfigurationSets_pageSize,
+    listConfigurationSetsResponse_configurationSets,
+    listConfigurationSetsResponse_nextToken,
+    listConfigurationSetsResponse_httpStatus,
+
+    -- ** ListContactLists
+    listContactLists_nextToken,
+    listContactLists_pageSize,
+    listContactListsResponse_contactLists,
+    listContactListsResponse_nextToken,
+    listContactListsResponse_httpStatus,
+
+    -- ** ListContacts
+    listContacts_filter,
+    listContacts_nextToken,
+    listContacts_pageSize,
+    listContacts_contactListName,
+    listContactsResponse_contacts,
+    listContactsResponse_nextToken,
+    listContactsResponse_httpStatus,
+
+    -- ** ListCustomVerificationEmailTemplates
+    listCustomVerificationEmailTemplates_nextToken,
+    listCustomVerificationEmailTemplates_pageSize,
+    listCustomVerificationEmailTemplatesResponse_customVerificationEmailTemplates,
+    listCustomVerificationEmailTemplatesResponse_nextToken,
+    listCustomVerificationEmailTemplatesResponse_httpStatus,
+
+    -- ** ListDedicatedIpPools
+    listDedicatedIpPools_nextToken,
+    listDedicatedIpPools_pageSize,
+    listDedicatedIpPoolsResponse_dedicatedIpPools,
+    listDedicatedIpPoolsResponse_nextToken,
+    listDedicatedIpPoolsResponse_httpStatus,
+
+    -- ** ListDeliverabilityTestReports
+    listDeliverabilityTestReports_nextToken,
+    listDeliverabilityTestReports_pageSize,
+    listDeliverabilityTestReportsResponse_nextToken,
+    listDeliverabilityTestReportsResponse_httpStatus,
+    listDeliverabilityTestReportsResponse_deliverabilityTestReports,
+
+    -- ** ListDomainDeliverabilityCampaigns
+    listDomainDeliverabilityCampaigns_nextToken,
+    listDomainDeliverabilityCampaigns_pageSize,
+    listDomainDeliverabilityCampaigns_startDate,
+    listDomainDeliverabilityCampaigns_endDate,
+    listDomainDeliverabilityCampaigns_subscribedDomain,
+    listDomainDeliverabilityCampaignsResponse_nextToken,
+    listDomainDeliverabilityCampaignsResponse_httpStatus,
+    listDomainDeliverabilityCampaignsResponse_domainDeliverabilityCampaigns,
+
+    -- ** ListEmailIdentities
+    listEmailIdentities_nextToken,
+    listEmailIdentities_pageSize,
+    listEmailIdentitiesResponse_emailIdentities,
+    listEmailIdentitiesResponse_nextToken,
+    listEmailIdentitiesResponse_httpStatus,
+
+    -- ** ListEmailTemplates
+    listEmailTemplates_nextToken,
+    listEmailTemplates_pageSize,
+    listEmailTemplatesResponse_nextToken,
+    listEmailTemplatesResponse_templatesMetadata,
+    listEmailTemplatesResponse_httpStatus,
+
+    -- ** ListImportJobs
+    listImportJobs_importDestinationType,
+    listImportJobs_nextToken,
+    listImportJobs_pageSize,
+    listImportJobsResponse_importJobs,
+    listImportJobsResponse_nextToken,
+    listImportJobsResponse_httpStatus,
+
+    -- ** ListRecommendations
+    listRecommendations_filter,
+    listRecommendations_nextToken,
+    listRecommendations_pageSize,
+    listRecommendationsResponse_nextToken,
+    listRecommendationsResponse_recommendations,
+    listRecommendationsResponse_httpStatus,
+
+    -- ** ListSuppressedDestinations
+    listSuppressedDestinations_endDate,
+    listSuppressedDestinations_nextToken,
+    listSuppressedDestinations_pageSize,
+    listSuppressedDestinations_reasons,
+    listSuppressedDestinations_startDate,
+    listSuppressedDestinationsResponse_nextToken,
+    listSuppressedDestinationsResponse_suppressedDestinationSummaries,
+    listSuppressedDestinationsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_httpStatus,
+    listTagsForResourceResponse_tags,
+
+    -- ** PutAccountDedicatedIpWarmupAttributes
+    putAccountDedicatedIpWarmupAttributes_autoWarmupEnabled,
+    putAccountDedicatedIpWarmupAttributesResponse_httpStatus,
+
+    -- ** PutAccountDetails
+    putAccountDetails_additionalContactEmailAddresses,
+    putAccountDetails_contactLanguage,
+    putAccountDetails_productionAccessEnabled,
+    putAccountDetails_mailType,
+    putAccountDetails_websiteURL,
+    putAccountDetails_useCaseDescription,
+    putAccountDetailsResponse_httpStatus,
+
+    -- ** PutAccountSendingAttributes
+    putAccountSendingAttributes_sendingEnabled,
+    putAccountSendingAttributesResponse_httpStatus,
+
+    -- ** PutAccountSuppressionAttributes
+    putAccountSuppressionAttributes_suppressedReasons,
+    putAccountSuppressionAttributesResponse_httpStatus,
+
+    -- ** PutAccountVdmAttributes
+    putAccountVdmAttributes_vdmAttributes,
+    putAccountVdmAttributesResponse_httpStatus,
+
+    -- ** PutConfigurationSetDeliveryOptions
+    putConfigurationSetDeliveryOptions_sendingPoolName,
+    putConfigurationSetDeliveryOptions_tlsPolicy,
+    putConfigurationSetDeliveryOptions_configurationSetName,
+    putConfigurationSetDeliveryOptionsResponse_httpStatus,
+
+    -- ** PutConfigurationSetReputationOptions
+    putConfigurationSetReputationOptions_reputationMetricsEnabled,
+    putConfigurationSetReputationOptions_configurationSetName,
+    putConfigurationSetReputationOptionsResponse_httpStatus,
+
+    -- ** PutConfigurationSetSendingOptions
+    putConfigurationSetSendingOptions_sendingEnabled,
+    putConfigurationSetSendingOptions_configurationSetName,
+    putConfigurationSetSendingOptionsResponse_httpStatus,
+
+    -- ** PutConfigurationSetSuppressionOptions
+    putConfigurationSetSuppressionOptions_suppressedReasons,
+    putConfigurationSetSuppressionOptions_configurationSetName,
+    putConfigurationSetSuppressionOptionsResponse_httpStatus,
+
+    -- ** PutConfigurationSetTrackingOptions
+    putConfigurationSetTrackingOptions_customRedirectDomain,
+    putConfigurationSetTrackingOptions_configurationSetName,
+    putConfigurationSetTrackingOptionsResponse_httpStatus,
+
+    -- ** PutConfigurationSetVdmOptions
+    putConfigurationSetVdmOptions_vdmOptions,
+    putConfigurationSetVdmOptions_configurationSetName,
+    putConfigurationSetVdmOptionsResponse_httpStatus,
+
+    -- ** PutDedicatedIpInPool
+    putDedicatedIpInPool_ip,
+    putDedicatedIpInPool_destinationPoolName,
+    putDedicatedIpInPoolResponse_httpStatus,
+
+    -- ** PutDedicatedIpWarmupAttributes
+    putDedicatedIpWarmupAttributes_ip,
+    putDedicatedIpWarmupAttributes_warmupPercentage,
+    putDedicatedIpWarmupAttributesResponse_httpStatus,
+
+    -- ** PutDeliverabilityDashboardOption
+    putDeliverabilityDashboardOption_subscribedDomains,
+    putDeliverabilityDashboardOption_dashboardEnabled,
+    putDeliverabilityDashboardOptionResponse_httpStatus,
+
+    -- ** PutEmailIdentityConfigurationSetAttributes
+    putEmailIdentityConfigurationSetAttributes_configurationSetName,
+    putEmailIdentityConfigurationSetAttributes_emailIdentity,
+    putEmailIdentityConfigurationSetAttributesResponse_httpStatus,
+
+    -- ** PutEmailIdentityDkimAttributes
+    putEmailIdentityDkimAttributes_signingEnabled,
+    putEmailIdentityDkimAttributes_emailIdentity,
+    putEmailIdentityDkimAttributesResponse_httpStatus,
+
+    -- ** PutEmailIdentityDkimSigningAttributes
+    putEmailIdentityDkimSigningAttributes_signingAttributes,
+    putEmailIdentityDkimSigningAttributes_emailIdentity,
+    putEmailIdentityDkimSigningAttributes_signingAttributesOrigin,
+    putEmailIdentityDkimSigningAttributesResponse_dkimStatus,
+    putEmailIdentityDkimSigningAttributesResponse_dkimTokens,
+    putEmailIdentityDkimSigningAttributesResponse_httpStatus,
+
+    -- ** PutEmailIdentityFeedbackAttributes
+    putEmailIdentityFeedbackAttributes_emailForwardingEnabled,
+    putEmailIdentityFeedbackAttributes_emailIdentity,
+    putEmailIdentityFeedbackAttributesResponse_httpStatus,
+
+    -- ** PutEmailIdentityMailFromAttributes
+    putEmailIdentityMailFromAttributes_behaviorOnMxFailure,
+    putEmailIdentityMailFromAttributes_mailFromDomain,
+    putEmailIdentityMailFromAttributes_emailIdentity,
+    putEmailIdentityMailFromAttributesResponse_httpStatus,
+
+    -- ** PutSuppressedDestination
+    putSuppressedDestination_emailAddress,
+    putSuppressedDestination_reason,
+    putSuppressedDestinationResponse_httpStatus,
+
+    -- ** SendBulkEmail
+    sendBulkEmail_configurationSetName,
+    sendBulkEmail_defaultEmailTags,
+    sendBulkEmail_feedbackForwardingEmailAddress,
+    sendBulkEmail_feedbackForwardingEmailAddressIdentityArn,
+    sendBulkEmail_fromEmailAddress,
+    sendBulkEmail_fromEmailAddressIdentityArn,
+    sendBulkEmail_replyToAddresses,
+    sendBulkEmail_defaultContent,
+    sendBulkEmail_bulkEmailEntries,
+    sendBulkEmailResponse_httpStatus,
+    sendBulkEmailResponse_bulkEmailEntryResults,
+
+    -- ** SendCustomVerificationEmail
+    sendCustomVerificationEmail_configurationSetName,
+    sendCustomVerificationEmail_emailAddress,
+    sendCustomVerificationEmail_templateName,
+    sendCustomVerificationEmailResponse_messageId,
+    sendCustomVerificationEmailResponse_httpStatus,
+
+    -- ** SendEmail
+    sendEmail_configurationSetName,
+    sendEmail_destination,
+    sendEmail_emailTags,
+    sendEmail_feedbackForwardingEmailAddress,
+    sendEmail_feedbackForwardingEmailAddressIdentityArn,
+    sendEmail_fromEmailAddress,
+    sendEmail_fromEmailAddressIdentityArn,
+    sendEmail_listManagementOptions,
+    sendEmail_replyToAddresses,
+    sendEmail_content,
+    sendEmailResponse_messageId,
+    sendEmailResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** TestRenderEmailTemplate
+    testRenderEmailTemplate_templateName,
+    testRenderEmailTemplate_templateData,
+    testRenderEmailTemplateResponse_httpStatus,
+    testRenderEmailTemplateResponse_renderedTemplate,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateConfigurationSetEventDestination
+    updateConfigurationSetEventDestination_configurationSetName,
+    updateConfigurationSetEventDestination_eventDestinationName,
+    updateConfigurationSetEventDestination_eventDestination,
+    updateConfigurationSetEventDestinationResponse_httpStatus,
+
+    -- ** UpdateContact
+    updateContact_attributesData,
+    updateContact_topicPreferences,
+    updateContact_unsubscribeAll,
+    updateContact_contactListName,
+    updateContact_emailAddress,
+    updateContactResponse_httpStatus,
+
+    -- ** UpdateContactList
+    updateContactList_description,
+    updateContactList_topics,
+    updateContactList_contactListName,
+    updateContactListResponse_httpStatus,
+
+    -- ** UpdateCustomVerificationEmailTemplate
+    updateCustomVerificationEmailTemplate_templateName,
+    updateCustomVerificationEmailTemplate_fromEmailAddress,
+    updateCustomVerificationEmailTemplate_templateSubject,
+    updateCustomVerificationEmailTemplate_templateContent,
+    updateCustomVerificationEmailTemplate_successRedirectionURL,
+    updateCustomVerificationEmailTemplate_failureRedirectionURL,
+    updateCustomVerificationEmailTemplateResponse_httpStatus,
+
+    -- ** UpdateEmailIdentityPolicy
+    updateEmailIdentityPolicy_emailIdentity,
+    updateEmailIdentityPolicy_policyName,
+    updateEmailIdentityPolicy_policy,
+    updateEmailIdentityPolicyResponse_httpStatus,
+
+    -- ** UpdateEmailTemplate
+    updateEmailTemplate_templateName,
+    updateEmailTemplate_templateContent,
+    updateEmailTemplateResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AccountDetails
+    accountDetails_additionalContactEmailAddresses,
+    accountDetails_contactLanguage,
+    accountDetails_mailType,
+    accountDetails_reviewDetails,
+    accountDetails_useCaseDescription,
+    accountDetails_websiteURL,
+
+    -- ** BatchGetMetricDataQuery
+    batchGetMetricDataQuery_dimensions,
+    batchGetMetricDataQuery_id,
+    batchGetMetricDataQuery_namespace,
+    batchGetMetricDataQuery_metric,
+    batchGetMetricDataQuery_startDate,
+    batchGetMetricDataQuery_endDate,
+
+    -- ** BlacklistEntry
+    blacklistEntry_description,
+    blacklistEntry_listingTime,
+    blacklistEntry_rblName,
+
+    -- ** Body
+    body_html,
+    body_text,
+
+    -- ** BulkEmailContent
+    bulkEmailContent_template,
+
+    -- ** BulkEmailEntry
+    bulkEmailEntry_replacementEmailContent,
+    bulkEmailEntry_replacementTags,
+    bulkEmailEntry_destination,
+
+    -- ** BulkEmailEntryResult
+    bulkEmailEntryResult_error,
+    bulkEmailEntryResult_messageId,
+    bulkEmailEntryResult_status,
+
+    -- ** CloudWatchDestination
+    cloudWatchDestination_dimensionConfigurations,
+
+    -- ** CloudWatchDimensionConfiguration
+    cloudWatchDimensionConfiguration_dimensionName,
+    cloudWatchDimensionConfiguration_dimensionValueSource,
+    cloudWatchDimensionConfiguration_defaultDimensionValue,
+
+    -- ** Contact
+    contact_emailAddress,
+    contact_lastUpdatedTimestamp,
+    contact_topicDefaultPreferences,
+    contact_topicPreferences,
+    contact_unsubscribeAll,
+
+    -- ** ContactList
+    contactList_contactListName,
+    contactList_lastUpdatedTimestamp,
+
+    -- ** ContactListDestination
+    contactListDestination_contactListName,
+    contactListDestination_contactListImportAction,
+
+    -- ** Content
+    content_charset,
+    content_data,
+
+    -- ** CustomVerificationEmailTemplateMetadata
+    customVerificationEmailTemplateMetadata_failureRedirectionURL,
+    customVerificationEmailTemplateMetadata_fromEmailAddress,
+    customVerificationEmailTemplateMetadata_successRedirectionURL,
+    customVerificationEmailTemplateMetadata_templateName,
+    customVerificationEmailTemplateMetadata_templateSubject,
+
+    -- ** DailyVolume
+    dailyVolume_domainIspPlacements,
+    dailyVolume_startDate,
+    dailyVolume_volumeStatistics,
+
+    -- ** DashboardAttributes
+    dashboardAttributes_engagementMetrics,
+
+    -- ** DashboardOptions
+    dashboardOptions_engagementMetrics,
+
+    -- ** DedicatedIp
+    dedicatedIp_poolName,
+    dedicatedIp_ip,
+    dedicatedIp_warmupStatus,
+    dedicatedIp_warmupPercentage,
+
+    -- ** DedicatedIpPool
+    dedicatedIpPool_poolName,
+    dedicatedIpPool_scalingMode,
+
+    -- ** DeliverabilityTestReport
+    deliverabilityTestReport_createDate,
+    deliverabilityTestReport_deliverabilityTestStatus,
+    deliverabilityTestReport_fromEmailAddress,
+    deliverabilityTestReport_reportId,
+    deliverabilityTestReport_reportName,
+    deliverabilityTestReport_subject,
+
+    -- ** DeliveryOptions
+    deliveryOptions_sendingPoolName,
+    deliveryOptions_tlsPolicy,
+
+    -- ** Destination
+    destination_bccAddresses,
+    destination_ccAddresses,
+    destination_toAddresses,
+
+    -- ** DkimAttributes
+    dkimAttributes_currentSigningKeyLength,
+    dkimAttributes_lastKeyGenerationTimestamp,
+    dkimAttributes_nextSigningKeyLength,
+    dkimAttributes_signingAttributesOrigin,
+    dkimAttributes_signingEnabled,
+    dkimAttributes_status,
+    dkimAttributes_tokens,
+
+    -- ** DkimSigningAttributes
+    dkimSigningAttributes_domainSigningPrivateKey,
+    dkimSigningAttributes_domainSigningSelector,
+    dkimSigningAttributes_nextSigningKeyLength,
+
+    -- ** DomainDeliverabilityCampaign
+    domainDeliverabilityCampaign_campaignId,
+    domainDeliverabilityCampaign_deleteRate,
+    domainDeliverabilityCampaign_esps,
+    domainDeliverabilityCampaign_firstSeenDateTime,
+    domainDeliverabilityCampaign_fromAddress,
+    domainDeliverabilityCampaign_imageUrl,
+    domainDeliverabilityCampaign_inboxCount,
+    domainDeliverabilityCampaign_lastSeenDateTime,
+    domainDeliverabilityCampaign_projectedVolume,
+    domainDeliverabilityCampaign_readDeleteRate,
+    domainDeliverabilityCampaign_readRate,
+    domainDeliverabilityCampaign_sendingIps,
+    domainDeliverabilityCampaign_spamCount,
+    domainDeliverabilityCampaign_subject,
+
+    -- ** DomainDeliverabilityTrackingOption
+    domainDeliverabilityTrackingOption_domain,
+    domainDeliverabilityTrackingOption_inboxPlacementTrackingOption,
+    domainDeliverabilityTrackingOption_subscriptionStartDate,
+
+    -- ** DomainIspPlacement
+    domainIspPlacement_inboxPercentage,
+    domainIspPlacement_inboxRawCount,
+    domainIspPlacement_ispName,
+    domainIspPlacement_spamPercentage,
+    domainIspPlacement_spamRawCount,
+
+    -- ** EmailContent
+    emailContent_raw,
+    emailContent_simple,
+    emailContent_template,
+
+    -- ** EmailTemplateContent
+    emailTemplateContent_html,
+    emailTemplateContent_subject,
+    emailTemplateContent_text,
+
+    -- ** EmailTemplateMetadata
+    emailTemplateMetadata_createdTimestamp,
+    emailTemplateMetadata_templateName,
+
+    -- ** EventDestination
+    eventDestination_cloudWatchDestination,
+    eventDestination_enabled,
+    eventDestination_kinesisFirehoseDestination,
+    eventDestination_pinpointDestination,
+    eventDestination_snsDestination,
+    eventDestination_name,
+    eventDestination_matchingEventTypes,
+
+    -- ** EventDestinationDefinition
+    eventDestinationDefinition_cloudWatchDestination,
+    eventDestinationDefinition_enabled,
+    eventDestinationDefinition_kinesisFirehoseDestination,
+    eventDestinationDefinition_matchingEventTypes,
+    eventDestinationDefinition_pinpointDestination,
+    eventDestinationDefinition_snsDestination,
+
+    -- ** FailureInfo
+    failureInfo_errorMessage,
+    failureInfo_failedRecordsS3Url,
+
+    -- ** GuardianAttributes
+    guardianAttributes_optimizedSharedDelivery,
+
+    -- ** GuardianOptions
+    guardianOptions_optimizedSharedDelivery,
+
+    -- ** IdentityInfo
+    identityInfo_identityName,
+    identityInfo_identityType,
+    identityInfo_sendingEnabled,
+    identityInfo_verificationStatus,
+
+    -- ** ImportDataSource
+    importDataSource_s3Url,
+    importDataSource_dataFormat,
+
+    -- ** ImportDestination
+    importDestination_contactListDestination,
+    importDestination_suppressionListDestination,
+
+    -- ** ImportJobSummary
+    importJobSummary_createdTimestamp,
+    importJobSummary_failedRecordsCount,
+    importJobSummary_importDestination,
+    importJobSummary_jobId,
+    importJobSummary_jobStatus,
+    importJobSummary_processedRecordsCount,
+
+    -- ** InboxPlacementTrackingOption
+    inboxPlacementTrackingOption_global,
+    inboxPlacementTrackingOption_trackedIsps,
+
+    -- ** IspPlacement
+    ispPlacement_ispName,
+    ispPlacement_placementStatistics,
+
+    -- ** KinesisFirehoseDestination
+    kinesisFirehoseDestination_iamRoleArn,
+    kinesisFirehoseDestination_deliveryStreamArn,
+
+    -- ** ListContactsFilter
+    listContactsFilter_filteredStatus,
+    listContactsFilter_topicFilter,
+
+    -- ** ListManagementOptions
+    listManagementOptions_topicName,
+    listManagementOptions_contactListName,
+
+    -- ** MailFromAttributes
+    mailFromAttributes_mailFromDomain,
+    mailFromAttributes_mailFromDomainStatus,
+    mailFromAttributes_behaviorOnMxFailure,
+
+    -- ** Message
+    message_subject,
+    message_body,
+
+    -- ** MessageTag
+    messageTag_name,
+    messageTag_value,
+
+    -- ** MetricDataError
+    metricDataError_code,
+    metricDataError_id,
+    metricDataError_message,
+
+    -- ** MetricDataResult
+    metricDataResult_id,
+    metricDataResult_timestamps,
+    metricDataResult_values,
+
+    -- ** OverallVolume
+    overallVolume_domainIspPlacements,
+    overallVolume_readRatePercent,
+    overallVolume_volumeStatistics,
+
+    -- ** PinpointDestination
+    pinpointDestination_applicationArn,
+
+    -- ** PlacementStatistics
+    placementStatistics_dkimPercentage,
+    placementStatistics_inboxPercentage,
+    placementStatistics_missingPercentage,
+    placementStatistics_spamPercentage,
+    placementStatistics_spfPercentage,
+
+    -- ** RawMessage
+    rawMessage_data,
+
+    -- ** Recommendation
+    recommendation_createdTimestamp,
+    recommendation_description,
+    recommendation_impact,
+    recommendation_lastUpdatedTimestamp,
+    recommendation_resourceArn,
+    recommendation_status,
+    recommendation_type,
+
+    -- ** ReplacementEmailContent
+    replacementEmailContent_replacementTemplate,
+
+    -- ** ReplacementTemplate
+    replacementTemplate_replacementTemplateData,
+
+    -- ** ReputationOptions
+    reputationOptions_lastFreshStart,
+    reputationOptions_reputationMetricsEnabled,
+
+    -- ** ReviewDetails
+    reviewDetails_caseId,
+    reviewDetails_status,
+
+    -- ** SendQuota
+    sendQuota_max24HourSend,
+    sendQuota_maxSendRate,
+    sendQuota_sentLast24Hours,
+
+    -- ** SendingOptions
+    sendingOptions_sendingEnabled,
+
+    -- ** SnsDestination
+    snsDestination_topicArn,
+
+    -- ** SuppressedDestination
+    suppressedDestination_attributes,
+    suppressedDestination_emailAddress,
+    suppressedDestination_reason,
+    suppressedDestination_lastUpdateTime,
+
+    -- ** SuppressedDestinationAttributes
+    suppressedDestinationAttributes_feedbackId,
+    suppressedDestinationAttributes_messageId,
+
+    -- ** SuppressedDestinationSummary
+    suppressedDestinationSummary_emailAddress,
+    suppressedDestinationSummary_reason,
+    suppressedDestinationSummary_lastUpdateTime,
+
+    -- ** SuppressionAttributes
+    suppressionAttributes_suppressedReasons,
+
+    -- ** SuppressionListDestination
+    suppressionListDestination_suppressionListImportAction,
+
+    -- ** SuppressionOptions
+    suppressionOptions_suppressedReasons,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+
+    -- ** Template
+    template_templateArn,
+    template_templateData,
+    template_templateName,
+
+    -- ** Topic
+    topic_description,
+    topic_topicName,
+    topic_displayName,
+    topic_defaultSubscriptionStatus,
+
+    -- ** TopicFilter
+    topicFilter_topicName,
+    topicFilter_useDefaultIfPreferenceUnavailable,
+
+    -- ** TopicPreference
+    topicPreference_topicName,
+    topicPreference_subscriptionStatus,
+
+    -- ** TrackingOptions
+    trackingOptions_customRedirectDomain,
+
+    -- ** VdmAttributes
+    vdmAttributes_dashboardAttributes,
+    vdmAttributes_guardianAttributes,
+    vdmAttributes_vdmEnabled,
+
+    -- ** VdmOptions
+    vdmOptions_dashboardOptions,
+    vdmOptions_guardianOptions,
+
+    -- ** VolumeStatistics
+    volumeStatistics_inboxRawCount,
+    volumeStatistics_projectedInbox,
+    volumeStatistics_projectedSpam,
+    volumeStatistics_spamRawCount,
+  )
+where
+
+import Amazonka.SESV2.BatchGetMetricData
+import Amazonka.SESV2.CreateConfigurationSet
+import Amazonka.SESV2.CreateConfigurationSetEventDestination
+import Amazonka.SESV2.CreateContact
+import Amazonka.SESV2.CreateContactList
+import Amazonka.SESV2.CreateCustomVerificationEmailTemplate
+import Amazonka.SESV2.CreateDedicatedIpPool
+import Amazonka.SESV2.CreateDeliverabilityTestReport
+import Amazonka.SESV2.CreateEmailIdentity
+import Amazonka.SESV2.CreateEmailIdentityPolicy
+import Amazonka.SESV2.CreateEmailTemplate
+import Amazonka.SESV2.CreateImportJob
+import Amazonka.SESV2.DeleteConfigurationSet
+import Amazonka.SESV2.DeleteConfigurationSetEventDestination
+import Amazonka.SESV2.DeleteContact
+import Amazonka.SESV2.DeleteContactList
+import Amazonka.SESV2.DeleteCustomVerificationEmailTemplate
+import Amazonka.SESV2.DeleteDedicatedIpPool
+import Amazonka.SESV2.DeleteEmailIdentity
+import Amazonka.SESV2.DeleteEmailIdentityPolicy
+import Amazonka.SESV2.DeleteEmailTemplate
+import Amazonka.SESV2.DeleteSuppressedDestination
+import Amazonka.SESV2.GetAccount
+import Amazonka.SESV2.GetBlacklistReports
+import Amazonka.SESV2.GetConfigurationSet
+import Amazonka.SESV2.GetConfigurationSetEventDestinations
+import Amazonka.SESV2.GetContact
+import Amazonka.SESV2.GetContactList
+import Amazonka.SESV2.GetCustomVerificationEmailTemplate
+import Amazonka.SESV2.GetDedicatedIp
+import Amazonka.SESV2.GetDedicatedIpPool
+import Amazonka.SESV2.GetDedicatedIps
+import Amazonka.SESV2.GetDeliverabilityDashboardOptions
+import Amazonka.SESV2.GetDeliverabilityTestReport
+import Amazonka.SESV2.GetDomainDeliverabilityCampaign
+import Amazonka.SESV2.GetDomainStatisticsReport
+import Amazonka.SESV2.GetEmailIdentity
+import Amazonka.SESV2.GetEmailIdentityPolicies
+import Amazonka.SESV2.GetEmailTemplate
+import Amazonka.SESV2.GetImportJob
+import Amazonka.SESV2.GetSuppressedDestination
+import Amazonka.SESV2.ListConfigurationSets
+import Amazonka.SESV2.ListContactLists
+import Amazonka.SESV2.ListContacts
+import Amazonka.SESV2.ListCustomVerificationEmailTemplates
+import Amazonka.SESV2.ListDedicatedIpPools
+import Amazonka.SESV2.ListDeliverabilityTestReports
+import Amazonka.SESV2.ListDomainDeliverabilityCampaigns
+import Amazonka.SESV2.ListEmailIdentities
+import Amazonka.SESV2.ListEmailTemplates
+import Amazonka.SESV2.ListImportJobs
+import Amazonka.SESV2.ListRecommendations
+import Amazonka.SESV2.ListSuppressedDestinations
+import Amazonka.SESV2.ListTagsForResource
+import Amazonka.SESV2.PutAccountDedicatedIpWarmupAttributes
+import Amazonka.SESV2.PutAccountDetails
+import Amazonka.SESV2.PutAccountSendingAttributes
+import Amazonka.SESV2.PutAccountSuppressionAttributes
+import Amazonka.SESV2.PutAccountVdmAttributes
+import Amazonka.SESV2.PutConfigurationSetDeliveryOptions
+import Amazonka.SESV2.PutConfigurationSetReputationOptions
+import Amazonka.SESV2.PutConfigurationSetSendingOptions
+import Amazonka.SESV2.PutConfigurationSetSuppressionOptions
+import Amazonka.SESV2.PutConfigurationSetTrackingOptions
+import Amazonka.SESV2.PutConfigurationSetVdmOptions
+import Amazonka.SESV2.PutDedicatedIpInPool
+import Amazonka.SESV2.PutDedicatedIpWarmupAttributes
+import Amazonka.SESV2.PutDeliverabilityDashboardOption
+import Amazonka.SESV2.PutEmailIdentityConfigurationSetAttributes
+import Amazonka.SESV2.PutEmailIdentityDkimAttributes
+import Amazonka.SESV2.PutEmailIdentityDkimSigningAttributes
+import Amazonka.SESV2.PutEmailIdentityFeedbackAttributes
+import Amazonka.SESV2.PutEmailIdentityMailFromAttributes
+import Amazonka.SESV2.PutSuppressedDestination
+import Amazonka.SESV2.SendBulkEmail
+import Amazonka.SESV2.SendCustomVerificationEmail
+import Amazonka.SESV2.SendEmail
+import Amazonka.SESV2.TagResource
+import Amazonka.SESV2.TestRenderEmailTemplate
+import Amazonka.SESV2.Types.AccountDetails
+import Amazonka.SESV2.Types.BatchGetMetricDataQuery
+import Amazonka.SESV2.Types.BlacklistEntry
+import Amazonka.SESV2.Types.Body
+import Amazonka.SESV2.Types.BulkEmailContent
+import Amazonka.SESV2.Types.BulkEmailEntry
+import Amazonka.SESV2.Types.BulkEmailEntryResult
+import Amazonka.SESV2.Types.CloudWatchDestination
+import Amazonka.SESV2.Types.CloudWatchDimensionConfiguration
+import Amazonka.SESV2.Types.Contact
+import Amazonka.SESV2.Types.ContactList
+import Amazonka.SESV2.Types.ContactListDestination
+import Amazonka.SESV2.Types.Content
+import Amazonka.SESV2.Types.CustomVerificationEmailTemplateMetadata
+import Amazonka.SESV2.Types.DailyVolume
+import Amazonka.SESV2.Types.DashboardAttributes
+import Amazonka.SESV2.Types.DashboardOptions
+import Amazonka.SESV2.Types.DedicatedIp
+import Amazonka.SESV2.Types.DedicatedIpPool
+import Amazonka.SESV2.Types.DeliverabilityTestReport
+import Amazonka.SESV2.Types.DeliveryOptions
+import Amazonka.SESV2.Types.Destination
+import Amazonka.SESV2.Types.DkimAttributes
+import Amazonka.SESV2.Types.DkimSigningAttributes
+import Amazonka.SESV2.Types.DomainDeliverabilityCampaign
+import Amazonka.SESV2.Types.DomainDeliverabilityTrackingOption
+import Amazonka.SESV2.Types.DomainIspPlacement
+import Amazonka.SESV2.Types.EmailContent
+import Amazonka.SESV2.Types.EmailTemplateContent
+import Amazonka.SESV2.Types.EmailTemplateMetadata
+import Amazonka.SESV2.Types.EventDestination
+import Amazonka.SESV2.Types.EventDestinationDefinition
+import Amazonka.SESV2.Types.FailureInfo
+import Amazonka.SESV2.Types.GuardianAttributes
+import Amazonka.SESV2.Types.GuardianOptions
+import Amazonka.SESV2.Types.IdentityInfo
+import Amazonka.SESV2.Types.ImportDataSource
+import Amazonka.SESV2.Types.ImportDestination
+import Amazonka.SESV2.Types.ImportJobSummary
+import Amazonka.SESV2.Types.InboxPlacementTrackingOption
+import Amazonka.SESV2.Types.IspPlacement
+import Amazonka.SESV2.Types.KinesisFirehoseDestination
+import Amazonka.SESV2.Types.ListContactsFilter
+import Amazonka.SESV2.Types.ListManagementOptions
+import Amazonka.SESV2.Types.MailFromAttributes
+import Amazonka.SESV2.Types.Message
+import Amazonka.SESV2.Types.MessageTag
+import Amazonka.SESV2.Types.MetricDataError
+import Amazonka.SESV2.Types.MetricDataResult
+import Amazonka.SESV2.Types.OverallVolume
+import Amazonka.SESV2.Types.PinpointDestination
+import Amazonka.SESV2.Types.PlacementStatistics
+import Amazonka.SESV2.Types.RawMessage
+import Amazonka.SESV2.Types.Recommendation
+import Amazonka.SESV2.Types.ReplacementEmailContent
+import Amazonka.SESV2.Types.ReplacementTemplate
+import Amazonka.SESV2.Types.ReputationOptions
+import Amazonka.SESV2.Types.ReviewDetails
+import Amazonka.SESV2.Types.SendQuota
+import Amazonka.SESV2.Types.SendingOptions
+import Amazonka.SESV2.Types.SnsDestination
+import Amazonka.SESV2.Types.SuppressedDestination
+import Amazonka.SESV2.Types.SuppressedDestinationAttributes
+import Amazonka.SESV2.Types.SuppressedDestinationSummary
+import Amazonka.SESV2.Types.SuppressionAttributes
+import Amazonka.SESV2.Types.SuppressionListDestination
+import Amazonka.SESV2.Types.SuppressionOptions
+import Amazonka.SESV2.Types.Tag
+import Amazonka.SESV2.Types.Template
+import Amazonka.SESV2.Types.Topic
+import Amazonka.SESV2.Types.TopicFilter
+import Amazonka.SESV2.Types.TopicPreference
+import Amazonka.SESV2.Types.TrackingOptions
+import Amazonka.SESV2.Types.VdmAttributes
+import Amazonka.SESV2.Types.VdmOptions
+import Amazonka.SESV2.Types.VolumeStatistics
+import Amazonka.SESV2.UntagResource
+import Amazonka.SESV2.UpdateConfigurationSetEventDestination
+import Amazonka.SESV2.UpdateContact
+import Amazonka.SESV2.UpdateContactList
+import Amazonka.SESV2.UpdateCustomVerificationEmailTemplate
+import Amazonka.SESV2.UpdateEmailIdentityPolicy
+import Amazonka.SESV2.UpdateEmailTemplate
diff --git a/gen/Amazonka/SESV2/ListConfigurationSets.hs b/gen/Amazonka/SESV2/ListConfigurationSets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/ListConfigurationSets.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.SESV2.ListConfigurationSets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List all of the configuration sets associated with your account in the
+-- current region.
+--
+-- /Configuration sets/ are groups of rules that you can apply to the
+-- emails you send. You apply a configuration set to an email by including
+-- a reference to the configuration set in the headers of the email. When
+-- you apply a configuration set to an email, all of the rules in that
+-- configuration set are applied to the email.
+module Amazonka.SESV2.ListConfigurationSets
+  ( -- * Creating a Request
+    ListConfigurationSets (..),
+    newListConfigurationSets,
+
+    -- * Request Lenses
+    listConfigurationSets_nextToken,
+    listConfigurationSets_pageSize,
+
+    -- * Destructuring the Response
+    ListConfigurationSetsResponse (..),
+    newListConfigurationSetsResponse,
+
+    -- * Response Lenses
+    listConfigurationSetsResponse_configurationSets,
+    listConfigurationSetsResponse_nextToken,
+    listConfigurationSetsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to obtain a list of configuration sets for your Amazon SES
+-- account in the current Amazon Web Services Region.
+--
+-- /See:/ 'newListConfigurationSets' smart constructor.
+data ListConfigurationSets = ListConfigurationSets'
+  { -- | A token returned from a previous call to @ListConfigurationSets@ to
+    -- indicate the position in the list of configuration sets.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The number of results to show in a single call to
+    -- @ListConfigurationSets@. If the number of results is larger than the
+    -- number you specified in this parameter, then the response includes a
+    -- @NextToken@ element, which you can use to obtain additional results.
+    pageSize :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListConfigurationSets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listConfigurationSets_nextToken' - A token returned from a previous call to @ListConfigurationSets@ to
+-- indicate the position in the list of configuration sets.
+--
+-- 'pageSize', 'listConfigurationSets_pageSize' - The number of results to show in a single call to
+-- @ListConfigurationSets@. If the number of results is larger than the
+-- number you specified in this parameter, then the response includes a
+-- @NextToken@ element, which you can use to obtain additional results.
+newListConfigurationSets ::
+  ListConfigurationSets
+newListConfigurationSets =
+  ListConfigurationSets'
+    { nextToken = Prelude.Nothing,
+      pageSize = Prelude.Nothing
+    }
+
+-- | A token returned from a previous call to @ListConfigurationSets@ to
+-- indicate the position in the list of configuration sets.
+listConfigurationSets_nextToken :: Lens.Lens' ListConfigurationSets (Prelude.Maybe Prelude.Text)
+listConfigurationSets_nextToken = Lens.lens (\ListConfigurationSets' {nextToken} -> nextToken) (\s@ListConfigurationSets' {} a -> s {nextToken = a} :: ListConfigurationSets)
+
+-- | The number of results to show in a single call to
+-- @ListConfigurationSets@. If the number of results is larger than the
+-- number you specified in this parameter, then the response includes a
+-- @NextToken@ element, which you can use to obtain additional results.
+listConfigurationSets_pageSize :: Lens.Lens' ListConfigurationSets (Prelude.Maybe Prelude.Int)
+listConfigurationSets_pageSize = Lens.lens (\ListConfigurationSets' {pageSize} -> pageSize) (\s@ListConfigurationSets' {} a -> s {pageSize = a} :: ListConfigurationSets)
+
+instance Core.AWSRequest ListConfigurationSets where
+  type
+    AWSResponse ListConfigurationSets =
+      ListConfigurationSetsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListConfigurationSetsResponse'
+            Prelude.<$> ( x
+                            Data..?> "ConfigurationSets"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListConfigurationSets where
+  hashWithSalt _salt ListConfigurationSets' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` pageSize
+
+instance Prelude.NFData ListConfigurationSets where
+  rnf ListConfigurationSets' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf pageSize
+
+instance Data.ToHeaders ListConfigurationSets where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListConfigurationSets where
+  toPath = Prelude.const "/v2/email/configuration-sets"
+
+instance Data.ToQuery ListConfigurationSets where
+  toQuery ListConfigurationSets' {..} =
+    Prelude.mconcat
+      [ "NextToken" Data.=: nextToken,
+        "PageSize" Data.=: pageSize
+      ]
+
+-- | A list of configuration sets in your Amazon SES account in the current
+-- Amazon Web Services Region.
+--
+-- /See:/ 'newListConfigurationSetsResponse' smart constructor.
+data ListConfigurationSetsResponse = ListConfigurationSetsResponse'
+  { -- | An array that contains all of the configuration sets in your Amazon SES
+    -- account in the current Amazon Web Services Region.
+    configurationSets :: Prelude.Maybe [Prelude.Text],
+    -- | A token that indicates that there are additional configuration sets to
+    -- list. To view additional configuration sets, issue another request to
+    -- @ListConfigurationSets@, and pass this token in the @NextToken@
+    -- parameter.
+    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 'ListConfigurationSetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configurationSets', 'listConfigurationSetsResponse_configurationSets' - An array that contains all of the configuration sets in your Amazon SES
+-- account in the current Amazon Web Services Region.
+--
+-- 'nextToken', 'listConfigurationSetsResponse_nextToken' - A token that indicates that there are additional configuration sets to
+-- list. To view additional configuration sets, issue another request to
+-- @ListConfigurationSets@, and pass this token in the @NextToken@
+-- parameter.
+--
+-- 'httpStatus', 'listConfigurationSetsResponse_httpStatus' - The response's http status code.
+newListConfigurationSetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListConfigurationSetsResponse
+newListConfigurationSetsResponse pHttpStatus_ =
+  ListConfigurationSetsResponse'
+    { configurationSets =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array that contains all of the configuration sets in your Amazon SES
+-- account in the current Amazon Web Services Region.
+listConfigurationSetsResponse_configurationSets :: Lens.Lens' ListConfigurationSetsResponse (Prelude.Maybe [Prelude.Text])
+listConfigurationSetsResponse_configurationSets = Lens.lens (\ListConfigurationSetsResponse' {configurationSets} -> configurationSets) (\s@ListConfigurationSetsResponse' {} a -> s {configurationSets = a} :: ListConfigurationSetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A token that indicates that there are additional configuration sets to
+-- list. To view additional configuration sets, issue another request to
+-- @ListConfigurationSets@, and pass this token in the @NextToken@
+-- parameter.
+listConfigurationSetsResponse_nextToken :: Lens.Lens' ListConfigurationSetsResponse (Prelude.Maybe Prelude.Text)
+listConfigurationSetsResponse_nextToken = Lens.lens (\ListConfigurationSetsResponse' {nextToken} -> nextToken) (\s@ListConfigurationSetsResponse' {} a -> s {nextToken = a} :: ListConfigurationSetsResponse)
+
+-- | The response's http status code.
+listConfigurationSetsResponse_httpStatus :: Lens.Lens' ListConfigurationSetsResponse Prelude.Int
+listConfigurationSetsResponse_httpStatus = Lens.lens (\ListConfigurationSetsResponse' {httpStatus} -> httpStatus) (\s@ListConfigurationSetsResponse' {} a -> s {httpStatus = a} :: ListConfigurationSetsResponse)
+
+instance Prelude.NFData ListConfigurationSetsResponse where
+  rnf ListConfigurationSetsResponse' {..} =
+    Prelude.rnf configurationSets
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/ListContactLists.hs b/gen/Amazonka/SESV2/ListContactLists.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/ListContactLists.hs
@@ -0,0 +1,214 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.ListContactLists
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all of the contact lists available.
+module Amazonka.SESV2.ListContactLists
+  ( -- * Creating a Request
+    ListContactLists (..),
+    newListContactLists,
+
+    -- * Request Lenses
+    listContactLists_nextToken,
+    listContactLists_pageSize,
+
+    -- * Destructuring the Response
+    ListContactListsResponse (..),
+    newListContactListsResponse,
+
+    -- * Response Lenses
+    listContactListsResponse_contactLists,
+    listContactListsResponse_nextToken,
+    listContactListsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | /See:/ 'newListContactLists' smart constructor.
+data ListContactLists = ListContactLists'
+  { -- | A string token indicating that there might be additional contact lists
+    -- available to be listed. Use the token provided in the Response to use in
+    -- the subsequent call to ListContactLists with the same parameters to
+    -- retrieve the next page of contact lists.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Maximum number of contact lists to return at once. Use this parameter to
+    -- paginate results. If additional contact lists exist beyond the specified
+    -- limit, the @NextToken@ element is sent in the response. Use the
+    -- @NextToken@ value in subsequent requests to retrieve additional lists.
+    pageSize :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListContactLists' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listContactLists_nextToken' - A string token indicating that there might be additional contact lists
+-- available to be listed. Use the token provided in the Response to use in
+-- the subsequent call to ListContactLists with the same parameters to
+-- retrieve the next page of contact lists.
+--
+-- 'pageSize', 'listContactLists_pageSize' - Maximum number of contact lists to return at once. Use this parameter to
+-- paginate results. If additional contact lists exist beyond the specified
+-- limit, the @NextToken@ element is sent in the response. Use the
+-- @NextToken@ value in subsequent requests to retrieve additional lists.
+newListContactLists ::
+  ListContactLists
+newListContactLists =
+  ListContactLists'
+    { nextToken = Prelude.Nothing,
+      pageSize = Prelude.Nothing
+    }
+
+-- | A string token indicating that there might be additional contact lists
+-- available to be listed. Use the token provided in the Response to use in
+-- the subsequent call to ListContactLists with the same parameters to
+-- retrieve the next page of contact lists.
+listContactLists_nextToken :: Lens.Lens' ListContactLists (Prelude.Maybe Prelude.Text)
+listContactLists_nextToken = Lens.lens (\ListContactLists' {nextToken} -> nextToken) (\s@ListContactLists' {} a -> s {nextToken = a} :: ListContactLists)
+
+-- | Maximum number of contact lists to return at once. Use this parameter to
+-- paginate results. If additional contact lists exist beyond the specified
+-- limit, the @NextToken@ element is sent in the response. Use the
+-- @NextToken@ value in subsequent requests to retrieve additional lists.
+listContactLists_pageSize :: Lens.Lens' ListContactLists (Prelude.Maybe Prelude.Int)
+listContactLists_pageSize = Lens.lens (\ListContactLists' {pageSize} -> pageSize) (\s@ListContactLists' {} a -> s {pageSize = a} :: ListContactLists)
+
+instance Core.AWSRequest ListContactLists where
+  type
+    AWSResponse ListContactLists =
+      ListContactListsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListContactListsResponse'
+            Prelude.<$> (x Data..?> "ContactLists" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListContactLists where
+  hashWithSalt _salt ListContactLists' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` pageSize
+
+instance Prelude.NFData ListContactLists where
+  rnf ListContactLists' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf pageSize
+
+instance Data.ToHeaders ListContactLists where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListContactLists where
+  toPath = Prelude.const "/v2/email/contact-lists"
+
+instance Data.ToQuery ListContactLists where
+  toQuery ListContactLists' {..} =
+    Prelude.mconcat
+      [ "NextToken" Data.=: nextToken,
+        "PageSize" Data.=: pageSize
+      ]
+
+-- | /See:/ 'newListContactListsResponse' smart constructor.
+data ListContactListsResponse = ListContactListsResponse'
+  { -- | The available contact lists.
+    contactLists :: Prelude.Maybe [ContactList],
+    -- | A string token indicating that there might be additional contact lists
+    -- available to be listed. Copy this token to a subsequent call to
+    -- @ListContactLists@ with the same parameters to retrieve the next page of
+    -- contact lists.
+    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 'ListContactListsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactLists', 'listContactListsResponse_contactLists' - The available contact lists.
+--
+-- 'nextToken', 'listContactListsResponse_nextToken' - A string token indicating that there might be additional contact lists
+-- available to be listed. Copy this token to a subsequent call to
+-- @ListContactLists@ with the same parameters to retrieve the next page of
+-- contact lists.
+--
+-- 'httpStatus', 'listContactListsResponse_httpStatus' - The response's http status code.
+newListContactListsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListContactListsResponse
+newListContactListsResponse pHttpStatus_ =
+  ListContactListsResponse'
+    { contactLists =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The available contact lists.
+listContactListsResponse_contactLists :: Lens.Lens' ListContactListsResponse (Prelude.Maybe [ContactList])
+listContactListsResponse_contactLists = Lens.lens (\ListContactListsResponse' {contactLists} -> contactLists) (\s@ListContactListsResponse' {} a -> s {contactLists = a} :: ListContactListsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A string token indicating that there might be additional contact lists
+-- available to be listed. Copy this token to a subsequent call to
+-- @ListContactLists@ with the same parameters to retrieve the next page of
+-- contact lists.
+listContactListsResponse_nextToken :: Lens.Lens' ListContactListsResponse (Prelude.Maybe Prelude.Text)
+listContactListsResponse_nextToken = Lens.lens (\ListContactListsResponse' {nextToken} -> nextToken) (\s@ListContactListsResponse' {} a -> s {nextToken = a} :: ListContactListsResponse)
+
+-- | The response's http status code.
+listContactListsResponse_httpStatus :: Lens.Lens' ListContactListsResponse Prelude.Int
+listContactListsResponse_httpStatus = Lens.lens (\ListContactListsResponse' {httpStatus} -> httpStatus) (\s@ListContactListsResponse' {} a -> s {httpStatus = a} :: ListContactListsResponse)
+
+instance Prelude.NFData ListContactListsResponse where
+  rnf ListContactListsResponse' {..} =
+    Prelude.rnf contactLists
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/ListContacts.hs b/gen/Amazonka/SESV2/ListContacts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/ListContacts.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.ListContacts
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the contacts present in a specific contact list.
+module Amazonka.SESV2.ListContacts
+  ( -- * Creating a Request
+    ListContacts (..),
+    newListContacts,
+
+    -- * Request Lenses
+    listContacts_filter,
+    listContacts_nextToken,
+    listContacts_pageSize,
+    listContacts_contactListName,
+
+    -- * Destructuring the Response
+    ListContactsResponse (..),
+    newListContactsResponse,
+
+    -- * Response Lenses
+    listContactsResponse_contacts,
+    listContactsResponse_nextToken,
+    listContactsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | /See:/ 'newListContacts' smart constructor.
+data ListContacts = ListContacts'
+  { -- | A filter that can be applied to a list of contacts.
+    filter' :: Prelude.Maybe ListContactsFilter,
+    -- | A string token indicating that there might be additional contacts
+    -- available to be listed. Use the token provided in the Response to use in
+    -- the subsequent call to ListContacts with the same parameters to retrieve
+    -- the next page of contacts.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The number of contacts that may be returned at once, which is dependent
+    -- on if there are more or less contacts than the value of the PageSize.
+    -- Use this parameter to paginate results. If additional contacts exist
+    -- beyond the specified limit, the @NextToken@ element is sent in the
+    -- response. Use the @NextToken@ value in subsequent requests to retrieve
+    -- additional contacts.
+    pageSize :: Prelude.Maybe Prelude.Int,
+    -- | The name of the contact list.
+    contactListName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListContacts' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filter'', 'listContacts_filter' - A filter that can be applied to a list of contacts.
+--
+-- 'nextToken', 'listContacts_nextToken' - A string token indicating that there might be additional contacts
+-- available to be listed. Use the token provided in the Response to use in
+-- the subsequent call to ListContacts with the same parameters to retrieve
+-- the next page of contacts.
+--
+-- 'pageSize', 'listContacts_pageSize' - The number of contacts that may be returned at once, which is dependent
+-- on if there are more or less contacts than the value of the PageSize.
+-- Use this parameter to paginate results. If additional contacts exist
+-- beyond the specified limit, the @NextToken@ element is sent in the
+-- response. Use the @NextToken@ value in subsequent requests to retrieve
+-- additional contacts.
+--
+-- 'contactListName', 'listContacts_contactListName' - The name of the contact list.
+newListContacts ::
+  -- | 'contactListName'
+  Prelude.Text ->
+  ListContacts
+newListContacts pContactListName_ =
+  ListContacts'
+    { filter' = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      pageSize = Prelude.Nothing,
+      contactListName = pContactListName_
+    }
+
+-- | A filter that can be applied to a list of contacts.
+listContacts_filter :: Lens.Lens' ListContacts (Prelude.Maybe ListContactsFilter)
+listContacts_filter = Lens.lens (\ListContacts' {filter'} -> filter') (\s@ListContacts' {} a -> s {filter' = a} :: ListContacts)
+
+-- | A string token indicating that there might be additional contacts
+-- available to be listed. Use the token provided in the Response to use in
+-- the subsequent call to ListContacts with the same parameters to retrieve
+-- the next page of contacts.
+listContacts_nextToken :: Lens.Lens' ListContacts (Prelude.Maybe Prelude.Text)
+listContacts_nextToken = Lens.lens (\ListContacts' {nextToken} -> nextToken) (\s@ListContacts' {} a -> s {nextToken = a} :: ListContacts)
+
+-- | The number of contacts that may be returned at once, which is dependent
+-- on if there are more or less contacts than the value of the PageSize.
+-- Use this parameter to paginate results. If additional contacts exist
+-- beyond the specified limit, the @NextToken@ element is sent in the
+-- response. Use the @NextToken@ value in subsequent requests to retrieve
+-- additional contacts.
+listContacts_pageSize :: Lens.Lens' ListContacts (Prelude.Maybe Prelude.Int)
+listContacts_pageSize = Lens.lens (\ListContacts' {pageSize} -> pageSize) (\s@ListContacts' {} a -> s {pageSize = a} :: ListContacts)
+
+-- | The name of the contact list.
+listContacts_contactListName :: Lens.Lens' ListContacts Prelude.Text
+listContacts_contactListName = Lens.lens (\ListContacts' {contactListName} -> contactListName) (\s@ListContacts' {} a -> s {contactListName = a} :: ListContacts)
+
+instance Core.AWSRequest ListContacts where
+  type AWSResponse ListContacts = ListContactsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListContactsResponse'
+            Prelude.<$> (x Data..?> "Contacts" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListContacts where
+  hashWithSalt _salt ListContacts' {..} =
+    _salt
+      `Prelude.hashWithSalt` filter'
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` pageSize
+      `Prelude.hashWithSalt` contactListName
+
+instance Prelude.NFData ListContacts where
+  rnf ListContacts' {..} =
+    Prelude.rnf filter'
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf pageSize
+      `Prelude.seq` Prelude.rnf contactListName
+
+instance Data.ToHeaders ListContacts where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListContacts where
+  toPath ListContacts' {..} =
+    Prelude.mconcat
+      [ "/v2/email/contact-lists/",
+        Data.toBS contactListName,
+        "/contacts"
+      ]
+
+instance Data.ToQuery ListContacts where
+  toQuery ListContacts' {..} =
+    Prelude.mconcat
+      [ "NextToken" Data.=: nextToken,
+        "PageSize" Data.=: pageSize
+      ]
+
+-- | /See:/ 'newListContactsResponse' smart constructor.
+data ListContactsResponse = ListContactsResponse'
+  { -- | The contacts present in a specific contact list.
+    contacts :: Prelude.Maybe [Contact],
+    -- | A string token indicating that there might be additional contacts
+    -- available to be listed. Copy this token to a subsequent call to
+    -- @ListContacts@ with the same parameters to retrieve the next page of
+    -- contacts.
+    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 'ListContactsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contacts', 'listContactsResponse_contacts' - The contacts present in a specific contact list.
+--
+-- 'nextToken', 'listContactsResponse_nextToken' - A string token indicating that there might be additional contacts
+-- available to be listed. Copy this token to a subsequent call to
+-- @ListContacts@ with the same parameters to retrieve the next page of
+-- contacts.
+--
+-- 'httpStatus', 'listContactsResponse_httpStatus' - The response's http status code.
+newListContactsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListContactsResponse
+newListContactsResponse pHttpStatus_ =
+  ListContactsResponse'
+    { contacts = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The contacts present in a specific contact list.
+listContactsResponse_contacts :: Lens.Lens' ListContactsResponse (Prelude.Maybe [Contact])
+listContactsResponse_contacts = Lens.lens (\ListContactsResponse' {contacts} -> contacts) (\s@ListContactsResponse' {} a -> s {contacts = a} :: ListContactsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A string token indicating that there might be additional contacts
+-- available to be listed. Copy this token to a subsequent call to
+-- @ListContacts@ with the same parameters to retrieve the next page of
+-- contacts.
+listContactsResponse_nextToken :: Lens.Lens' ListContactsResponse (Prelude.Maybe Prelude.Text)
+listContactsResponse_nextToken = Lens.lens (\ListContactsResponse' {nextToken} -> nextToken) (\s@ListContactsResponse' {} a -> s {nextToken = a} :: ListContactsResponse)
+
+-- | The response's http status code.
+listContactsResponse_httpStatus :: Lens.Lens' ListContactsResponse Prelude.Int
+listContactsResponse_httpStatus = Lens.lens (\ListContactsResponse' {httpStatus} -> httpStatus) (\s@ListContactsResponse' {} a -> s {httpStatus = a} :: ListContactsResponse)
+
+instance Prelude.NFData ListContactsResponse where
+  rnf ListContactsResponse' {..} =
+    Prelude.rnf contacts
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/ListCustomVerificationEmailTemplates.hs b/gen/Amazonka/SESV2/ListCustomVerificationEmailTemplates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/ListCustomVerificationEmailTemplates.hs
@@ -0,0 +1,265 @@
+{-# 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.SESV2.ListCustomVerificationEmailTemplates
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the existing custom verification email templates for your account
+-- in the current Amazon Web Services Region.
+--
+-- For more information about custom verification email templates, see
+-- <https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#send-email-verify-address-custom Using custom verification email templates>
+-- in the /Amazon SES Developer Guide/.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.ListCustomVerificationEmailTemplates
+  ( -- * Creating a Request
+    ListCustomVerificationEmailTemplates (..),
+    newListCustomVerificationEmailTemplates,
+
+    -- * Request Lenses
+    listCustomVerificationEmailTemplates_nextToken,
+    listCustomVerificationEmailTemplates_pageSize,
+
+    -- * Destructuring the Response
+    ListCustomVerificationEmailTemplatesResponse (..),
+    newListCustomVerificationEmailTemplatesResponse,
+
+    -- * Response Lenses
+    listCustomVerificationEmailTemplatesResponse_customVerificationEmailTemplates,
+    listCustomVerificationEmailTemplatesResponse_nextToken,
+    listCustomVerificationEmailTemplatesResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to list the existing custom verification email
+-- templates for your account.
+--
+-- /See:/ 'newListCustomVerificationEmailTemplates' smart constructor.
+data ListCustomVerificationEmailTemplates = ListCustomVerificationEmailTemplates'
+  { -- | A token returned from a previous call to
+    -- @ListCustomVerificationEmailTemplates@ to indicate the position in the
+    -- list of custom verification email templates.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The number of results to show in a single call to
+    -- @ListCustomVerificationEmailTemplates@. If the number of results is
+    -- larger than the number you specified in this parameter, then the
+    -- response includes a @NextToken@ element, which you can use to obtain
+    -- additional results.
+    --
+    -- The value you specify has to be at least 1, and can be no more than 50.
+    pageSize :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCustomVerificationEmailTemplates' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listCustomVerificationEmailTemplates_nextToken' - A token returned from a previous call to
+-- @ListCustomVerificationEmailTemplates@ to indicate the position in the
+-- list of custom verification email templates.
+--
+-- 'pageSize', 'listCustomVerificationEmailTemplates_pageSize' - The number of results to show in a single call to
+-- @ListCustomVerificationEmailTemplates@. If the number of results is
+-- larger than the number you specified in this parameter, then the
+-- response includes a @NextToken@ element, which you can use to obtain
+-- additional results.
+--
+-- The value you specify has to be at least 1, and can be no more than 50.
+newListCustomVerificationEmailTemplates ::
+  ListCustomVerificationEmailTemplates
+newListCustomVerificationEmailTemplates =
+  ListCustomVerificationEmailTemplates'
+    { nextToken =
+        Prelude.Nothing,
+      pageSize = Prelude.Nothing
+    }
+
+-- | A token returned from a previous call to
+-- @ListCustomVerificationEmailTemplates@ to indicate the position in the
+-- list of custom verification email templates.
+listCustomVerificationEmailTemplates_nextToken :: Lens.Lens' ListCustomVerificationEmailTemplates (Prelude.Maybe Prelude.Text)
+listCustomVerificationEmailTemplates_nextToken = Lens.lens (\ListCustomVerificationEmailTemplates' {nextToken} -> nextToken) (\s@ListCustomVerificationEmailTemplates' {} a -> s {nextToken = a} :: ListCustomVerificationEmailTemplates)
+
+-- | The number of results to show in a single call to
+-- @ListCustomVerificationEmailTemplates@. If the number of results is
+-- larger than the number you specified in this parameter, then the
+-- response includes a @NextToken@ element, which you can use to obtain
+-- additional results.
+--
+-- The value you specify has to be at least 1, and can be no more than 50.
+listCustomVerificationEmailTemplates_pageSize :: Lens.Lens' ListCustomVerificationEmailTemplates (Prelude.Maybe Prelude.Int)
+listCustomVerificationEmailTemplates_pageSize = Lens.lens (\ListCustomVerificationEmailTemplates' {pageSize} -> pageSize) (\s@ListCustomVerificationEmailTemplates' {} a -> s {pageSize = a} :: ListCustomVerificationEmailTemplates)
+
+instance
+  Core.AWSRequest
+    ListCustomVerificationEmailTemplates
+  where
+  type
+    AWSResponse ListCustomVerificationEmailTemplates =
+      ListCustomVerificationEmailTemplatesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListCustomVerificationEmailTemplatesResponse'
+            Prelude.<$> ( x
+                            Data..?> "CustomVerificationEmailTemplates"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListCustomVerificationEmailTemplates
+  where
+  hashWithSalt
+    _salt
+    ListCustomVerificationEmailTemplates' {..} =
+      _salt
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` pageSize
+
+instance
+  Prelude.NFData
+    ListCustomVerificationEmailTemplates
+  where
+  rnf ListCustomVerificationEmailTemplates' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf pageSize
+
+instance
+  Data.ToHeaders
+    ListCustomVerificationEmailTemplates
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToPath
+    ListCustomVerificationEmailTemplates
+  where
+  toPath =
+    Prelude.const
+      "/v2/email/custom-verification-email-templates"
+
+instance
+  Data.ToQuery
+    ListCustomVerificationEmailTemplates
+  where
+  toQuery ListCustomVerificationEmailTemplates' {..} =
+    Prelude.mconcat
+      [ "NextToken" Data.=: nextToken,
+        "PageSize" Data.=: pageSize
+      ]
+
+-- | The following elements are returned by the service.
+--
+-- /See:/ 'newListCustomVerificationEmailTemplatesResponse' smart constructor.
+data ListCustomVerificationEmailTemplatesResponse = ListCustomVerificationEmailTemplatesResponse'
+  { -- | A list of the custom verification email templates that exist in your
+    -- account.
+    customVerificationEmailTemplates :: Prelude.Maybe [CustomVerificationEmailTemplateMetadata],
+    -- | A token indicating that there are additional custom verification email
+    -- templates available to be listed. Pass this token to a subsequent call
+    -- to @ListCustomVerificationEmailTemplates@ to retrieve the next 50 custom
+    -- verification email templates.
+    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 'ListCustomVerificationEmailTemplatesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'customVerificationEmailTemplates', 'listCustomVerificationEmailTemplatesResponse_customVerificationEmailTemplates' - A list of the custom verification email templates that exist in your
+-- account.
+--
+-- 'nextToken', 'listCustomVerificationEmailTemplatesResponse_nextToken' - A token indicating that there are additional custom verification email
+-- templates available to be listed. Pass this token to a subsequent call
+-- to @ListCustomVerificationEmailTemplates@ to retrieve the next 50 custom
+-- verification email templates.
+--
+-- 'httpStatus', 'listCustomVerificationEmailTemplatesResponse_httpStatus' - The response's http status code.
+newListCustomVerificationEmailTemplatesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListCustomVerificationEmailTemplatesResponse
+newListCustomVerificationEmailTemplatesResponse
+  pHttpStatus_ =
+    ListCustomVerificationEmailTemplatesResponse'
+      { customVerificationEmailTemplates =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | A list of the custom verification email templates that exist in your
+-- account.
+listCustomVerificationEmailTemplatesResponse_customVerificationEmailTemplates :: Lens.Lens' ListCustomVerificationEmailTemplatesResponse (Prelude.Maybe [CustomVerificationEmailTemplateMetadata])
+listCustomVerificationEmailTemplatesResponse_customVerificationEmailTemplates = Lens.lens (\ListCustomVerificationEmailTemplatesResponse' {customVerificationEmailTemplates} -> customVerificationEmailTemplates) (\s@ListCustomVerificationEmailTemplatesResponse' {} a -> s {customVerificationEmailTemplates = a} :: ListCustomVerificationEmailTemplatesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A token indicating that there are additional custom verification email
+-- templates available to be listed. Pass this token to a subsequent call
+-- to @ListCustomVerificationEmailTemplates@ to retrieve the next 50 custom
+-- verification email templates.
+listCustomVerificationEmailTemplatesResponse_nextToken :: Lens.Lens' ListCustomVerificationEmailTemplatesResponse (Prelude.Maybe Prelude.Text)
+listCustomVerificationEmailTemplatesResponse_nextToken = Lens.lens (\ListCustomVerificationEmailTemplatesResponse' {nextToken} -> nextToken) (\s@ListCustomVerificationEmailTemplatesResponse' {} a -> s {nextToken = a} :: ListCustomVerificationEmailTemplatesResponse)
+
+-- | The response's http status code.
+listCustomVerificationEmailTemplatesResponse_httpStatus :: Lens.Lens' ListCustomVerificationEmailTemplatesResponse Prelude.Int
+listCustomVerificationEmailTemplatesResponse_httpStatus = Lens.lens (\ListCustomVerificationEmailTemplatesResponse' {httpStatus} -> httpStatus) (\s@ListCustomVerificationEmailTemplatesResponse' {} a -> s {httpStatus = a} :: ListCustomVerificationEmailTemplatesResponse)
+
+instance
+  Prelude.NFData
+    ListCustomVerificationEmailTemplatesResponse
+  where
+  rnf ListCustomVerificationEmailTemplatesResponse' {..} =
+    Prelude.rnf customVerificationEmailTemplates
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/ListDedicatedIpPools.hs b/gen/Amazonka/SESV2/ListDedicatedIpPools.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/ListDedicatedIpPools.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.SESV2.ListDedicatedIpPools
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List all of the dedicated IP pools that exist in your Amazon Web
+-- Services account in the current Region.
+module Amazonka.SESV2.ListDedicatedIpPools
+  ( -- * Creating a Request
+    ListDedicatedIpPools (..),
+    newListDedicatedIpPools,
+
+    -- * Request Lenses
+    listDedicatedIpPools_nextToken,
+    listDedicatedIpPools_pageSize,
+
+    -- * Destructuring the Response
+    ListDedicatedIpPoolsResponse (..),
+    newListDedicatedIpPoolsResponse,
+
+    -- * Response Lenses
+    listDedicatedIpPoolsResponse_dedicatedIpPools,
+    listDedicatedIpPoolsResponse_nextToken,
+    listDedicatedIpPoolsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to obtain a list of dedicated IP pools.
+--
+-- /See:/ 'newListDedicatedIpPools' smart constructor.
+data ListDedicatedIpPools = ListDedicatedIpPools'
+  { -- | A token returned from a previous call to @ListDedicatedIpPools@ to
+    -- indicate the position in the list of dedicated IP pools.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The number of results to show in a single call to
+    -- @ListDedicatedIpPools@. If the number of results is larger than the
+    -- number you specified in this parameter, then the response includes a
+    -- @NextToken@ element, which you can use to obtain additional results.
+    pageSize :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDedicatedIpPools' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDedicatedIpPools_nextToken' - A token returned from a previous call to @ListDedicatedIpPools@ to
+-- indicate the position in the list of dedicated IP pools.
+--
+-- 'pageSize', 'listDedicatedIpPools_pageSize' - The number of results to show in a single call to
+-- @ListDedicatedIpPools@. If the number of results is larger than the
+-- number you specified in this parameter, then the response includes a
+-- @NextToken@ element, which you can use to obtain additional results.
+newListDedicatedIpPools ::
+  ListDedicatedIpPools
+newListDedicatedIpPools =
+  ListDedicatedIpPools'
+    { nextToken = Prelude.Nothing,
+      pageSize = Prelude.Nothing
+    }
+
+-- | A token returned from a previous call to @ListDedicatedIpPools@ to
+-- indicate the position in the list of dedicated IP pools.
+listDedicatedIpPools_nextToken :: Lens.Lens' ListDedicatedIpPools (Prelude.Maybe Prelude.Text)
+listDedicatedIpPools_nextToken = Lens.lens (\ListDedicatedIpPools' {nextToken} -> nextToken) (\s@ListDedicatedIpPools' {} a -> s {nextToken = a} :: ListDedicatedIpPools)
+
+-- | The number of results to show in a single call to
+-- @ListDedicatedIpPools@. If the number of results is larger than the
+-- number you specified in this parameter, then the response includes a
+-- @NextToken@ element, which you can use to obtain additional results.
+listDedicatedIpPools_pageSize :: Lens.Lens' ListDedicatedIpPools (Prelude.Maybe Prelude.Int)
+listDedicatedIpPools_pageSize = Lens.lens (\ListDedicatedIpPools' {pageSize} -> pageSize) (\s@ListDedicatedIpPools' {} a -> s {pageSize = a} :: ListDedicatedIpPools)
+
+instance Core.AWSRequest ListDedicatedIpPools where
+  type
+    AWSResponse ListDedicatedIpPools =
+      ListDedicatedIpPoolsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDedicatedIpPoolsResponse'
+            Prelude.<$> ( x
+                            Data..?> "DedicatedIpPools"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDedicatedIpPools where
+  hashWithSalt _salt ListDedicatedIpPools' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` pageSize
+
+instance Prelude.NFData ListDedicatedIpPools where
+  rnf ListDedicatedIpPools' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf pageSize
+
+instance Data.ToHeaders ListDedicatedIpPools where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListDedicatedIpPools where
+  toPath = Prelude.const "/v2/email/dedicated-ip-pools"
+
+instance Data.ToQuery ListDedicatedIpPools where
+  toQuery ListDedicatedIpPools' {..} =
+    Prelude.mconcat
+      [ "NextToken" Data.=: nextToken,
+        "PageSize" Data.=: pageSize
+      ]
+
+-- | A list of dedicated IP pools.
+--
+-- /See:/ 'newListDedicatedIpPoolsResponse' smart constructor.
+data ListDedicatedIpPoolsResponse = ListDedicatedIpPoolsResponse'
+  { -- | A list of all of the dedicated IP pools that are associated with your
+    -- Amazon Web Services account in the current Region.
+    dedicatedIpPools :: Prelude.Maybe [Prelude.Text],
+    -- | A token that indicates that there are additional IP pools to list. To
+    -- view additional IP pools, issue another request to
+    -- @ListDedicatedIpPools@, passing this token in the @NextToken@ parameter.
+    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 'ListDedicatedIpPoolsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dedicatedIpPools', 'listDedicatedIpPoolsResponse_dedicatedIpPools' - A list of all of the dedicated IP pools that are associated with your
+-- Amazon Web Services account in the current Region.
+--
+-- 'nextToken', 'listDedicatedIpPoolsResponse_nextToken' - A token that indicates that there are additional IP pools to list. To
+-- view additional IP pools, issue another request to
+-- @ListDedicatedIpPools@, passing this token in the @NextToken@ parameter.
+--
+-- 'httpStatus', 'listDedicatedIpPoolsResponse_httpStatus' - The response's http status code.
+newListDedicatedIpPoolsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDedicatedIpPoolsResponse
+newListDedicatedIpPoolsResponse pHttpStatus_ =
+  ListDedicatedIpPoolsResponse'
+    { dedicatedIpPools =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of all of the dedicated IP pools that are associated with your
+-- Amazon Web Services account in the current Region.
+listDedicatedIpPoolsResponse_dedicatedIpPools :: Lens.Lens' ListDedicatedIpPoolsResponse (Prelude.Maybe [Prelude.Text])
+listDedicatedIpPoolsResponse_dedicatedIpPools = Lens.lens (\ListDedicatedIpPoolsResponse' {dedicatedIpPools} -> dedicatedIpPools) (\s@ListDedicatedIpPoolsResponse' {} a -> s {dedicatedIpPools = a} :: ListDedicatedIpPoolsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A token that indicates that there are additional IP pools to list. To
+-- view additional IP pools, issue another request to
+-- @ListDedicatedIpPools@, passing this token in the @NextToken@ parameter.
+listDedicatedIpPoolsResponse_nextToken :: Lens.Lens' ListDedicatedIpPoolsResponse (Prelude.Maybe Prelude.Text)
+listDedicatedIpPoolsResponse_nextToken = Lens.lens (\ListDedicatedIpPoolsResponse' {nextToken} -> nextToken) (\s@ListDedicatedIpPoolsResponse' {} a -> s {nextToken = a} :: ListDedicatedIpPoolsResponse)
+
+-- | The response's http status code.
+listDedicatedIpPoolsResponse_httpStatus :: Lens.Lens' ListDedicatedIpPoolsResponse Prelude.Int
+listDedicatedIpPoolsResponse_httpStatus = Lens.lens (\ListDedicatedIpPoolsResponse' {httpStatus} -> httpStatus) (\s@ListDedicatedIpPoolsResponse' {} a -> s {httpStatus = a} :: ListDedicatedIpPoolsResponse)
+
+instance Prelude.NFData ListDedicatedIpPoolsResponse where
+  rnf ListDedicatedIpPoolsResponse' {..} =
+    Prelude.rnf dedicatedIpPools
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/ListDeliverabilityTestReports.hs b/gen/Amazonka/SESV2/ListDeliverabilityTestReports.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/ListDeliverabilityTestReports.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.ListDeliverabilityTestReports
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Show a list of the predictive inbox placement tests that you\'ve
+-- performed, regardless of their statuses. For predictive inbox placement
+-- tests that are complete, you can use the @GetDeliverabilityTestReport@
+-- operation to view the results.
+module Amazonka.SESV2.ListDeliverabilityTestReports
+  ( -- * Creating a Request
+    ListDeliverabilityTestReports (..),
+    newListDeliverabilityTestReports,
+
+    -- * Request Lenses
+    listDeliverabilityTestReports_nextToken,
+    listDeliverabilityTestReports_pageSize,
+
+    -- * Destructuring the Response
+    ListDeliverabilityTestReportsResponse (..),
+    newListDeliverabilityTestReportsResponse,
+
+    -- * Response Lenses
+    listDeliverabilityTestReportsResponse_nextToken,
+    listDeliverabilityTestReportsResponse_httpStatus,
+    listDeliverabilityTestReportsResponse_deliverabilityTestReports,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to list all of the predictive inbox placement tests that
+-- you\'ve performed.
+--
+-- /See:/ 'newListDeliverabilityTestReports' smart constructor.
+data ListDeliverabilityTestReports = ListDeliverabilityTestReports'
+  { -- | A token returned from a previous call to @ListDeliverabilityTestReports@
+    -- to indicate the position in the list of predictive inbox placement
+    -- tests.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The number of results to show in a single call to
+    -- @ListDeliverabilityTestReports@. If the number of results is larger than
+    -- the number you specified in this parameter, then the response includes a
+    -- @NextToken@ element, which you can use to obtain additional results.
+    --
+    -- The value you specify has to be at least 0, and can be no more than
+    -- 1000.
+    pageSize :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDeliverabilityTestReports' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDeliverabilityTestReports_nextToken' - A token returned from a previous call to @ListDeliverabilityTestReports@
+-- to indicate the position in the list of predictive inbox placement
+-- tests.
+--
+-- 'pageSize', 'listDeliverabilityTestReports_pageSize' - The number of results to show in a single call to
+-- @ListDeliverabilityTestReports@. If the number of results is larger than
+-- the number you specified in this parameter, then the response includes a
+-- @NextToken@ element, which you can use to obtain additional results.
+--
+-- The value you specify has to be at least 0, and can be no more than
+-- 1000.
+newListDeliverabilityTestReports ::
+  ListDeliverabilityTestReports
+newListDeliverabilityTestReports =
+  ListDeliverabilityTestReports'
+    { nextToken =
+        Prelude.Nothing,
+      pageSize = Prelude.Nothing
+    }
+
+-- | A token returned from a previous call to @ListDeliverabilityTestReports@
+-- to indicate the position in the list of predictive inbox placement
+-- tests.
+listDeliverabilityTestReports_nextToken :: Lens.Lens' ListDeliverabilityTestReports (Prelude.Maybe Prelude.Text)
+listDeliverabilityTestReports_nextToken = Lens.lens (\ListDeliverabilityTestReports' {nextToken} -> nextToken) (\s@ListDeliverabilityTestReports' {} a -> s {nextToken = a} :: ListDeliverabilityTestReports)
+
+-- | The number of results to show in a single call to
+-- @ListDeliverabilityTestReports@. If the number of results is larger than
+-- the number you specified in this parameter, then the response includes a
+-- @NextToken@ element, which you can use to obtain additional results.
+--
+-- The value you specify has to be at least 0, and can be no more than
+-- 1000.
+listDeliverabilityTestReports_pageSize :: Lens.Lens' ListDeliverabilityTestReports (Prelude.Maybe Prelude.Int)
+listDeliverabilityTestReports_pageSize = Lens.lens (\ListDeliverabilityTestReports' {pageSize} -> pageSize) (\s@ListDeliverabilityTestReports' {} a -> s {pageSize = a} :: ListDeliverabilityTestReports)
+
+instance
+  Core.AWSRequest
+    ListDeliverabilityTestReports
+  where
+  type
+    AWSResponse ListDeliverabilityTestReports =
+      ListDeliverabilityTestReportsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDeliverabilityTestReportsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "DeliverabilityTestReports"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    ListDeliverabilityTestReports
+  where
+  hashWithSalt _salt ListDeliverabilityTestReports' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` pageSize
+
+instance Prelude.NFData ListDeliverabilityTestReports where
+  rnf ListDeliverabilityTestReports' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf pageSize
+
+instance Data.ToHeaders ListDeliverabilityTestReports where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListDeliverabilityTestReports where
+  toPath =
+    Prelude.const
+      "/v2/email/deliverability-dashboard/test-reports"
+
+instance Data.ToQuery ListDeliverabilityTestReports where
+  toQuery ListDeliverabilityTestReports' {..} =
+    Prelude.mconcat
+      [ "NextToken" Data.=: nextToken,
+        "PageSize" Data.=: pageSize
+      ]
+
+-- | A list of the predictive inbox placement test reports that are available
+-- for your account, regardless of whether or not those tests are complete.
+--
+-- /See:/ 'newListDeliverabilityTestReportsResponse' smart constructor.
+data ListDeliverabilityTestReportsResponse = ListDeliverabilityTestReportsResponse'
+  { -- | A token that indicates that there are additional predictive inbox
+    -- placement tests to list. To view additional predictive inbox placement
+    -- tests, issue another request to @ListDeliverabilityTestReports@, and
+    -- pass this token in the @NextToken@ parameter.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | An object that contains a lists of predictive inbox placement tests that
+    -- you\'ve performed.
+    deliverabilityTestReports :: [DeliverabilityTestReport]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDeliverabilityTestReportsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDeliverabilityTestReportsResponse_nextToken' - A token that indicates that there are additional predictive inbox
+-- placement tests to list. To view additional predictive inbox placement
+-- tests, issue another request to @ListDeliverabilityTestReports@, and
+-- pass this token in the @NextToken@ parameter.
+--
+-- 'httpStatus', 'listDeliverabilityTestReportsResponse_httpStatus' - The response's http status code.
+--
+-- 'deliverabilityTestReports', 'listDeliverabilityTestReportsResponse_deliverabilityTestReports' - An object that contains a lists of predictive inbox placement tests that
+-- you\'ve performed.
+newListDeliverabilityTestReportsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDeliverabilityTestReportsResponse
+newListDeliverabilityTestReportsResponse pHttpStatus_ =
+  ListDeliverabilityTestReportsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      deliverabilityTestReports =
+        Prelude.mempty
+    }
+
+-- | A token that indicates that there are additional predictive inbox
+-- placement tests to list. To view additional predictive inbox placement
+-- tests, issue another request to @ListDeliverabilityTestReports@, and
+-- pass this token in the @NextToken@ parameter.
+listDeliverabilityTestReportsResponse_nextToken :: Lens.Lens' ListDeliverabilityTestReportsResponse (Prelude.Maybe Prelude.Text)
+listDeliverabilityTestReportsResponse_nextToken = Lens.lens (\ListDeliverabilityTestReportsResponse' {nextToken} -> nextToken) (\s@ListDeliverabilityTestReportsResponse' {} a -> s {nextToken = a} :: ListDeliverabilityTestReportsResponse)
+
+-- | The response's http status code.
+listDeliverabilityTestReportsResponse_httpStatus :: Lens.Lens' ListDeliverabilityTestReportsResponse Prelude.Int
+listDeliverabilityTestReportsResponse_httpStatus = Lens.lens (\ListDeliverabilityTestReportsResponse' {httpStatus} -> httpStatus) (\s@ListDeliverabilityTestReportsResponse' {} a -> s {httpStatus = a} :: ListDeliverabilityTestReportsResponse)
+
+-- | An object that contains a lists of predictive inbox placement tests that
+-- you\'ve performed.
+listDeliverabilityTestReportsResponse_deliverabilityTestReports :: Lens.Lens' ListDeliverabilityTestReportsResponse [DeliverabilityTestReport]
+listDeliverabilityTestReportsResponse_deliverabilityTestReports = Lens.lens (\ListDeliverabilityTestReportsResponse' {deliverabilityTestReports} -> deliverabilityTestReports) (\s@ListDeliverabilityTestReportsResponse' {} a -> s {deliverabilityTestReports = a} :: ListDeliverabilityTestReportsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListDeliverabilityTestReportsResponse
+  where
+  rnf ListDeliverabilityTestReportsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf deliverabilityTestReports
diff --git a/gen/Amazonka/SESV2/ListDomainDeliverabilityCampaigns.hs b/gen/Amazonka/SESV2/ListDomainDeliverabilityCampaigns.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/ListDomainDeliverabilityCampaigns.hs
@@ -0,0 +1,314 @@
+{-# 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.SESV2.ListDomainDeliverabilityCampaigns
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve deliverability data for all the campaigns that used a specific
+-- domain to send email during a specified time range. This data is
+-- available for a domain only if you enabled the Deliverability dashboard
+-- for the domain.
+module Amazonka.SESV2.ListDomainDeliverabilityCampaigns
+  ( -- * Creating a Request
+    ListDomainDeliverabilityCampaigns (..),
+    newListDomainDeliverabilityCampaigns,
+
+    -- * Request Lenses
+    listDomainDeliverabilityCampaigns_nextToken,
+    listDomainDeliverabilityCampaigns_pageSize,
+    listDomainDeliverabilityCampaigns_startDate,
+    listDomainDeliverabilityCampaigns_endDate,
+    listDomainDeliverabilityCampaigns_subscribedDomain,
+
+    -- * Destructuring the Response
+    ListDomainDeliverabilityCampaignsResponse (..),
+    newListDomainDeliverabilityCampaignsResponse,
+
+    -- * Response Lenses
+    listDomainDeliverabilityCampaignsResponse_nextToken,
+    listDomainDeliverabilityCampaignsResponse_httpStatus,
+    listDomainDeliverabilityCampaignsResponse_domainDeliverabilityCampaigns,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Retrieve deliverability data for all the campaigns that used a specific
+-- domain to send email during a specified time range. This data is
+-- available for a domain only if you enabled the Deliverability dashboard.
+--
+-- /See:/ 'newListDomainDeliverabilityCampaigns' smart constructor.
+data ListDomainDeliverabilityCampaigns = ListDomainDeliverabilityCampaigns'
+  { -- | A token that’s returned from a previous call to the
+    -- @ListDomainDeliverabilityCampaigns@ operation. This token indicates the
+    -- position of a campaign in the list of campaigns.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results to include in response to a single call to
+    -- the @ListDomainDeliverabilityCampaigns@ operation. If the number of
+    -- results is larger than the number that you specify in this parameter,
+    -- the response includes a @NextToken@ element, which you can use to obtain
+    -- additional results.
+    pageSize :: Prelude.Maybe Prelude.Int,
+    -- | The first day that you want to obtain deliverability data for.
+    startDate :: Data.POSIX,
+    -- | The last day that you want to obtain deliverability data for. This value
+    -- has to be less than or equal to 30 days after the value of the
+    -- @StartDate@ parameter.
+    endDate :: Data.POSIX,
+    -- | The domain to obtain deliverability data for.
+    subscribedDomain :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDomainDeliverabilityCampaigns' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDomainDeliverabilityCampaigns_nextToken' - A token that’s returned from a previous call to the
+-- @ListDomainDeliverabilityCampaigns@ operation. This token indicates the
+-- position of a campaign in the list of campaigns.
+--
+-- 'pageSize', 'listDomainDeliverabilityCampaigns_pageSize' - The maximum number of results to include in response to a single call to
+-- the @ListDomainDeliverabilityCampaigns@ operation. If the number of
+-- results is larger than the number that you specify in this parameter,
+-- the response includes a @NextToken@ element, which you can use to obtain
+-- additional results.
+--
+-- 'startDate', 'listDomainDeliverabilityCampaigns_startDate' - The first day that you want to obtain deliverability data for.
+--
+-- 'endDate', 'listDomainDeliverabilityCampaigns_endDate' - The last day that you want to obtain deliverability data for. This value
+-- has to be less than or equal to 30 days after the value of the
+-- @StartDate@ parameter.
+--
+-- 'subscribedDomain', 'listDomainDeliverabilityCampaigns_subscribedDomain' - The domain to obtain deliverability data for.
+newListDomainDeliverabilityCampaigns ::
+  -- | 'startDate'
+  Prelude.UTCTime ->
+  -- | 'endDate'
+  Prelude.UTCTime ->
+  -- | 'subscribedDomain'
+  Prelude.Text ->
+  ListDomainDeliverabilityCampaigns
+newListDomainDeliverabilityCampaigns
+  pStartDate_
+  pEndDate_
+  pSubscribedDomain_ =
+    ListDomainDeliverabilityCampaigns'
+      { nextToken =
+          Prelude.Nothing,
+        pageSize = Prelude.Nothing,
+        startDate =
+          Data._Time Lens.# pStartDate_,
+        endDate = Data._Time Lens.# pEndDate_,
+        subscribedDomain = pSubscribedDomain_
+      }
+
+-- | A token that’s returned from a previous call to the
+-- @ListDomainDeliverabilityCampaigns@ operation. This token indicates the
+-- position of a campaign in the list of campaigns.
+listDomainDeliverabilityCampaigns_nextToken :: Lens.Lens' ListDomainDeliverabilityCampaigns (Prelude.Maybe Prelude.Text)
+listDomainDeliverabilityCampaigns_nextToken = Lens.lens (\ListDomainDeliverabilityCampaigns' {nextToken} -> nextToken) (\s@ListDomainDeliverabilityCampaigns' {} a -> s {nextToken = a} :: ListDomainDeliverabilityCampaigns)
+
+-- | The maximum number of results to include in response to a single call to
+-- the @ListDomainDeliverabilityCampaigns@ operation. If the number of
+-- results is larger than the number that you specify in this parameter,
+-- the response includes a @NextToken@ element, which you can use to obtain
+-- additional results.
+listDomainDeliverabilityCampaigns_pageSize :: Lens.Lens' ListDomainDeliverabilityCampaigns (Prelude.Maybe Prelude.Int)
+listDomainDeliverabilityCampaigns_pageSize = Lens.lens (\ListDomainDeliverabilityCampaigns' {pageSize} -> pageSize) (\s@ListDomainDeliverabilityCampaigns' {} a -> s {pageSize = a} :: ListDomainDeliverabilityCampaigns)
+
+-- | The first day that you want to obtain deliverability data for.
+listDomainDeliverabilityCampaigns_startDate :: Lens.Lens' ListDomainDeliverabilityCampaigns Prelude.UTCTime
+listDomainDeliverabilityCampaigns_startDate = Lens.lens (\ListDomainDeliverabilityCampaigns' {startDate} -> startDate) (\s@ListDomainDeliverabilityCampaigns' {} a -> s {startDate = a} :: ListDomainDeliverabilityCampaigns) Prelude.. Data._Time
+
+-- | The last day that you want to obtain deliverability data for. This value
+-- has to be less than or equal to 30 days after the value of the
+-- @StartDate@ parameter.
+listDomainDeliverabilityCampaigns_endDate :: Lens.Lens' ListDomainDeliverabilityCampaigns Prelude.UTCTime
+listDomainDeliverabilityCampaigns_endDate = Lens.lens (\ListDomainDeliverabilityCampaigns' {endDate} -> endDate) (\s@ListDomainDeliverabilityCampaigns' {} a -> s {endDate = a} :: ListDomainDeliverabilityCampaigns) Prelude.. Data._Time
+
+-- | The domain to obtain deliverability data for.
+listDomainDeliverabilityCampaigns_subscribedDomain :: Lens.Lens' ListDomainDeliverabilityCampaigns Prelude.Text
+listDomainDeliverabilityCampaigns_subscribedDomain = Lens.lens (\ListDomainDeliverabilityCampaigns' {subscribedDomain} -> subscribedDomain) (\s@ListDomainDeliverabilityCampaigns' {} a -> s {subscribedDomain = a} :: ListDomainDeliverabilityCampaigns)
+
+instance
+  Core.AWSRequest
+    ListDomainDeliverabilityCampaigns
+  where
+  type
+    AWSResponse ListDomainDeliverabilityCampaigns =
+      ListDomainDeliverabilityCampaignsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDomainDeliverabilityCampaignsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "DomainDeliverabilityCampaigns"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    ListDomainDeliverabilityCampaigns
+  where
+  hashWithSalt
+    _salt
+    ListDomainDeliverabilityCampaigns' {..} =
+      _salt
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` pageSize
+        `Prelude.hashWithSalt` startDate
+        `Prelude.hashWithSalt` endDate
+        `Prelude.hashWithSalt` subscribedDomain
+
+instance
+  Prelude.NFData
+    ListDomainDeliverabilityCampaigns
+  where
+  rnf ListDomainDeliverabilityCampaigns' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf pageSize
+      `Prelude.seq` Prelude.rnf startDate
+      `Prelude.seq` Prelude.rnf endDate
+      `Prelude.seq` Prelude.rnf subscribedDomain
+
+instance
+  Data.ToHeaders
+    ListDomainDeliverabilityCampaigns
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToPath
+    ListDomainDeliverabilityCampaigns
+  where
+  toPath ListDomainDeliverabilityCampaigns' {..} =
+    Prelude.mconcat
+      [ "/v2/email/deliverability-dashboard/domains/",
+        Data.toBS subscribedDomain,
+        "/campaigns"
+      ]
+
+instance
+  Data.ToQuery
+    ListDomainDeliverabilityCampaigns
+  where
+  toQuery ListDomainDeliverabilityCampaigns' {..} =
+    Prelude.mconcat
+      [ "NextToken" Data.=: nextToken,
+        "PageSize" Data.=: pageSize,
+        "StartDate" Data.=: startDate,
+        "EndDate" Data.=: endDate
+      ]
+
+-- | An array of objects that provide deliverability data for all the
+-- campaigns that used a specific domain to send email during a specified
+-- time range. This data is available for a domain only if you enabled the
+-- Deliverability dashboard for the domain.
+--
+-- /See:/ 'newListDomainDeliverabilityCampaignsResponse' smart constructor.
+data ListDomainDeliverabilityCampaignsResponse = ListDomainDeliverabilityCampaignsResponse'
+  { -- | A token that’s returned from a previous call to the
+    -- @ListDomainDeliverabilityCampaigns@ operation. This token indicates the
+    -- position of the campaign in the list of campaigns.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | An array of responses, one for each campaign that used the domain to
+    -- send email during the specified time range.
+    domainDeliverabilityCampaigns :: [DomainDeliverabilityCampaign]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDomainDeliverabilityCampaignsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDomainDeliverabilityCampaignsResponse_nextToken' - A token that’s returned from a previous call to the
+-- @ListDomainDeliverabilityCampaigns@ operation. This token indicates the
+-- position of the campaign in the list of campaigns.
+--
+-- 'httpStatus', 'listDomainDeliverabilityCampaignsResponse_httpStatus' - The response's http status code.
+--
+-- 'domainDeliverabilityCampaigns', 'listDomainDeliverabilityCampaignsResponse_domainDeliverabilityCampaigns' - An array of responses, one for each campaign that used the domain to
+-- send email during the specified time range.
+newListDomainDeliverabilityCampaignsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDomainDeliverabilityCampaignsResponse
+newListDomainDeliverabilityCampaignsResponse
+  pHttpStatus_ =
+    ListDomainDeliverabilityCampaignsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        domainDeliverabilityCampaigns =
+          Prelude.mempty
+      }
+
+-- | A token that’s returned from a previous call to the
+-- @ListDomainDeliverabilityCampaigns@ operation. This token indicates the
+-- position of the campaign in the list of campaigns.
+listDomainDeliverabilityCampaignsResponse_nextToken :: Lens.Lens' ListDomainDeliverabilityCampaignsResponse (Prelude.Maybe Prelude.Text)
+listDomainDeliverabilityCampaignsResponse_nextToken = Lens.lens (\ListDomainDeliverabilityCampaignsResponse' {nextToken} -> nextToken) (\s@ListDomainDeliverabilityCampaignsResponse' {} a -> s {nextToken = a} :: ListDomainDeliverabilityCampaignsResponse)
+
+-- | The response's http status code.
+listDomainDeliverabilityCampaignsResponse_httpStatus :: Lens.Lens' ListDomainDeliverabilityCampaignsResponse Prelude.Int
+listDomainDeliverabilityCampaignsResponse_httpStatus = Lens.lens (\ListDomainDeliverabilityCampaignsResponse' {httpStatus} -> httpStatus) (\s@ListDomainDeliverabilityCampaignsResponse' {} a -> s {httpStatus = a} :: ListDomainDeliverabilityCampaignsResponse)
+
+-- | An array of responses, one for each campaign that used the domain to
+-- send email during the specified time range.
+listDomainDeliverabilityCampaignsResponse_domainDeliverabilityCampaigns :: Lens.Lens' ListDomainDeliverabilityCampaignsResponse [DomainDeliverabilityCampaign]
+listDomainDeliverabilityCampaignsResponse_domainDeliverabilityCampaigns = Lens.lens (\ListDomainDeliverabilityCampaignsResponse' {domainDeliverabilityCampaigns} -> domainDeliverabilityCampaigns) (\s@ListDomainDeliverabilityCampaignsResponse' {} a -> s {domainDeliverabilityCampaigns = a} :: ListDomainDeliverabilityCampaignsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListDomainDeliverabilityCampaignsResponse
+  where
+  rnf ListDomainDeliverabilityCampaignsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf domainDeliverabilityCampaigns
diff --git a/gen/Amazonka/SESV2/ListEmailIdentities.hs b/gen/Amazonka/SESV2/ListEmailIdentities.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/ListEmailIdentities.hs
@@ -0,0 +1,233 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.ListEmailIdentities
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of all of the email identities that are associated with
+-- your Amazon Web Services account. An identity can be either an email
+-- address or a domain. This operation returns identities that are verified
+-- as well as those that aren\'t. This operation returns identities that
+-- are associated with Amazon SES and Amazon Pinpoint.
+module Amazonka.SESV2.ListEmailIdentities
+  ( -- * Creating a Request
+    ListEmailIdentities (..),
+    newListEmailIdentities,
+
+    -- * Request Lenses
+    listEmailIdentities_nextToken,
+    listEmailIdentities_pageSize,
+
+    -- * Destructuring the Response
+    ListEmailIdentitiesResponse (..),
+    newListEmailIdentitiesResponse,
+
+    -- * Response Lenses
+    listEmailIdentitiesResponse_emailIdentities,
+    listEmailIdentitiesResponse_nextToken,
+    listEmailIdentitiesResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to list all of the email identities associated with your
+-- Amazon Web Services account. This list includes identities that you\'ve
+-- already verified, identities that are unverified, and identities that
+-- were verified in the past, but are no longer verified.
+--
+-- /See:/ 'newListEmailIdentities' smart constructor.
+data ListEmailIdentities = ListEmailIdentities'
+  { -- | A token returned from a previous call to @ListEmailIdentities@ to
+    -- indicate the position in the list of identities.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The number of results to show in a single call to @ListEmailIdentities@.
+    -- If the number of results is larger than the number you specified in this
+    -- parameter, then the response includes a @NextToken@ element, which you
+    -- can use to obtain additional results.
+    --
+    -- The value you specify has to be at least 0, and can be no more than
+    -- 1000.
+    pageSize :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEmailIdentities' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listEmailIdentities_nextToken' - A token returned from a previous call to @ListEmailIdentities@ to
+-- indicate the position in the list of identities.
+--
+-- 'pageSize', 'listEmailIdentities_pageSize' - The number of results to show in a single call to @ListEmailIdentities@.
+-- If the number of results is larger than the number you specified in this
+-- parameter, then the response includes a @NextToken@ element, which you
+-- can use to obtain additional results.
+--
+-- The value you specify has to be at least 0, and can be no more than
+-- 1000.
+newListEmailIdentities ::
+  ListEmailIdentities
+newListEmailIdentities =
+  ListEmailIdentities'
+    { nextToken = Prelude.Nothing,
+      pageSize = Prelude.Nothing
+    }
+
+-- | A token returned from a previous call to @ListEmailIdentities@ to
+-- indicate the position in the list of identities.
+listEmailIdentities_nextToken :: Lens.Lens' ListEmailIdentities (Prelude.Maybe Prelude.Text)
+listEmailIdentities_nextToken = Lens.lens (\ListEmailIdentities' {nextToken} -> nextToken) (\s@ListEmailIdentities' {} a -> s {nextToken = a} :: ListEmailIdentities)
+
+-- | The number of results to show in a single call to @ListEmailIdentities@.
+-- If the number of results is larger than the number you specified in this
+-- parameter, then the response includes a @NextToken@ element, which you
+-- can use to obtain additional results.
+--
+-- The value you specify has to be at least 0, and can be no more than
+-- 1000.
+listEmailIdentities_pageSize :: Lens.Lens' ListEmailIdentities (Prelude.Maybe Prelude.Int)
+listEmailIdentities_pageSize = Lens.lens (\ListEmailIdentities' {pageSize} -> pageSize) (\s@ListEmailIdentities' {} a -> s {pageSize = a} :: ListEmailIdentities)
+
+instance Core.AWSRequest ListEmailIdentities where
+  type
+    AWSResponse ListEmailIdentities =
+      ListEmailIdentitiesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEmailIdentitiesResponse'
+            Prelude.<$> ( x
+                            Data..?> "EmailIdentities"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListEmailIdentities where
+  hashWithSalt _salt ListEmailIdentities' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` pageSize
+
+instance Prelude.NFData ListEmailIdentities where
+  rnf ListEmailIdentities' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf pageSize
+
+instance Data.ToHeaders ListEmailIdentities where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListEmailIdentities where
+  toPath = Prelude.const "/v2/email/identities"
+
+instance Data.ToQuery ListEmailIdentities where
+  toQuery ListEmailIdentities' {..} =
+    Prelude.mconcat
+      [ "NextToken" Data.=: nextToken,
+        "PageSize" Data.=: pageSize
+      ]
+
+-- | A list of all of the identities that you\'ve attempted to verify,
+-- regardless of whether or not those identities were successfully
+-- verified.
+--
+-- /See:/ 'newListEmailIdentitiesResponse' smart constructor.
+data ListEmailIdentitiesResponse = ListEmailIdentitiesResponse'
+  { -- | An array that includes all of the email identities associated with your
+    -- Amazon Web Services account.
+    emailIdentities :: Prelude.Maybe [IdentityInfo],
+    -- | A token that indicates that there are additional configuration sets to
+    -- list. To view additional configuration sets, issue another request to
+    -- @ListEmailIdentities@, and pass this token in the @NextToken@ parameter.
+    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 'ListEmailIdentitiesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'emailIdentities', 'listEmailIdentitiesResponse_emailIdentities' - An array that includes all of the email identities associated with your
+-- Amazon Web Services account.
+--
+-- 'nextToken', 'listEmailIdentitiesResponse_nextToken' - A token that indicates that there are additional configuration sets to
+-- list. To view additional configuration sets, issue another request to
+-- @ListEmailIdentities@, and pass this token in the @NextToken@ parameter.
+--
+-- 'httpStatus', 'listEmailIdentitiesResponse_httpStatus' - The response's http status code.
+newListEmailIdentitiesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEmailIdentitiesResponse
+newListEmailIdentitiesResponse pHttpStatus_ =
+  ListEmailIdentitiesResponse'
+    { emailIdentities =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array that includes all of the email identities associated with your
+-- Amazon Web Services account.
+listEmailIdentitiesResponse_emailIdentities :: Lens.Lens' ListEmailIdentitiesResponse (Prelude.Maybe [IdentityInfo])
+listEmailIdentitiesResponse_emailIdentities = Lens.lens (\ListEmailIdentitiesResponse' {emailIdentities} -> emailIdentities) (\s@ListEmailIdentitiesResponse' {} a -> s {emailIdentities = a} :: ListEmailIdentitiesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A token that indicates that there are additional configuration sets to
+-- list. To view additional configuration sets, issue another request to
+-- @ListEmailIdentities@, and pass this token in the @NextToken@ parameter.
+listEmailIdentitiesResponse_nextToken :: Lens.Lens' ListEmailIdentitiesResponse (Prelude.Maybe Prelude.Text)
+listEmailIdentitiesResponse_nextToken = Lens.lens (\ListEmailIdentitiesResponse' {nextToken} -> nextToken) (\s@ListEmailIdentitiesResponse' {} a -> s {nextToken = a} :: ListEmailIdentitiesResponse)
+
+-- | The response's http status code.
+listEmailIdentitiesResponse_httpStatus :: Lens.Lens' ListEmailIdentitiesResponse Prelude.Int
+listEmailIdentitiesResponse_httpStatus = Lens.lens (\ListEmailIdentitiesResponse' {httpStatus} -> httpStatus) (\s@ListEmailIdentitiesResponse' {} a -> s {httpStatus = a} :: ListEmailIdentitiesResponse)
+
+instance Prelude.NFData ListEmailIdentitiesResponse where
+  rnf ListEmailIdentitiesResponse' {..} =
+    Prelude.rnf emailIdentities
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/ListEmailTemplates.hs b/gen/Amazonka/SESV2/ListEmailTemplates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/ListEmailTemplates.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.SESV2.ListEmailTemplates
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the email templates present in your Amazon SES account in the
+-- current Amazon Web Services Region.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.ListEmailTemplates
+  ( -- * Creating a Request
+    ListEmailTemplates (..),
+    newListEmailTemplates,
+
+    -- * Request Lenses
+    listEmailTemplates_nextToken,
+    listEmailTemplates_pageSize,
+
+    -- * Destructuring the Response
+    ListEmailTemplatesResponse (..),
+    newListEmailTemplatesResponse,
+
+    -- * Response Lenses
+    listEmailTemplatesResponse_nextToken,
+    listEmailTemplatesResponse_templatesMetadata,
+    listEmailTemplatesResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to list the email templates present in your Amazon
+-- SES account in the current Amazon Web Services Region. For more
+-- information, see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-personalized-email-api.html Amazon SES Developer Guide>.
+--
+-- /See:/ 'newListEmailTemplates' smart constructor.
+data ListEmailTemplates = ListEmailTemplates'
+  { -- | A token returned from a previous call to @ListEmailTemplates@ to
+    -- indicate the position in the list of email templates.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The number of results to show in a single call to @ListEmailTemplates@.
+    -- If the number of results is larger than the number you specified in this
+    -- parameter, then the response includes a @NextToken@ element, which you
+    -- can use to obtain additional results.
+    --
+    -- The value you specify has to be at least 1, and can be no more than 10.
+    pageSize :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEmailTemplates' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listEmailTemplates_nextToken' - A token returned from a previous call to @ListEmailTemplates@ to
+-- indicate the position in the list of email templates.
+--
+-- 'pageSize', 'listEmailTemplates_pageSize' - The number of results to show in a single call to @ListEmailTemplates@.
+-- If the number of results is larger than the number you specified in this
+-- parameter, then the response includes a @NextToken@ element, which you
+-- can use to obtain additional results.
+--
+-- The value you specify has to be at least 1, and can be no more than 10.
+newListEmailTemplates ::
+  ListEmailTemplates
+newListEmailTemplates =
+  ListEmailTemplates'
+    { nextToken = Prelude.Nothing,
+      pageSize = Prelude.Nothing
+    }
+
+-- | A token returned from a previous call to @ListEmailTemplates@ to
+-- indicate the position in the list of email templates.
+listEmailTemplates_nextToken :: Lens.Lens' ListEmailTemplates (Prelude.Maybe Prelude.Text)
+listEmailTemplates_nextToken = Lens.lens (\ListEmailTemplates' {nextToken} -> nextToken) (\s@ListEmailTemplates' {} a -> s {nextToken = a} :: ListEmailTemplates)
+
+-- | The number of results to show in a single call to @ListEmailTemplates@.
+-- If the number of results is larger than the number you specified in this
+-- parameter, then the response includes a @NextToken@ element, which you
+-- can use to obtain additional results.
+--
+-- The value you specify has to be at least 1, and can be no more than 10.
+listEmailTemplates_pageSize :: Lens.Lens' ListEmailTemplates (Prelude.Maybe Prelude.Int)
+listEmailTemplates_pageSize = Lens.lens (\ListEmailTemplates' {pageSize} -> pageSize) (\s@ListEmailTemplates' {} a -> s {pageSize = a} :: ListEmailTemplates)
+
+instance Core.AWSRequest ListEmailTemplates where
+  type
+    AWSResponse ListEmailTemplates =
+      ListEmailTemplatesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEmailTemplatesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "TemplatesMetadata"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListEmailTemplates where
+  hashWithSalt _salt ListEmailTemplates' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` pageSize
+
+instance Prelude.NFData ListEmailTemplates where
+  rnf ListEmailTemplates' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf pageSize
+
+instance Data.ToHeaders ListEmailTemplates where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListEmailTemplates where
+  toPath = Prelude.const "/v2/email/templates"
+
+instance Data.ToQuery ListEmailTemplates where
+  toQuery ListEmailTemplates' {..} =
+    Prelude.mconcat
+      [ "NextToken" Data.=: nextToken,
+        "PageSize" Data.=: pageSize
+      ]
+
+-- | The following elements are returned by the service.
+--
+-- /See:/ 'newListEmailTemplatesResponse' smart constructor.
+data ListEmailTemplatesResponse = ListEmailTemplatesResponse'
+  { -- | A token indicating that there are additional email templates available
+    -- to be listed. Pass this token to a subsequent @ListEmailTemplates@ call
+    -- to retrieve the next 10 email templates.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array the contains the name and creation time stamp for each template
+    -- in your Amazon SES account.
+    templatesMetadata :: Prelude.Maybe [EmailTemplateMetadata],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEmailTemplatesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listEmailTemplatesResponse_nextToken' - A token indicating that there are additional email templates available
+-- to be listed. Pass this token to a subsequent @ListEmailTemplates@ call
+-- to retrieve the next 10 email templates.
+--
+-- 'templatesMetadata', 'listEmailTemplatesResponse_templatesMetadata' - An array the contains the name and creation time stamp for each template
+-- in your Amazon SES account.
+--
+-- 'httpStatus', 'listEmailTemplatesResponse_httpStatus' - The response's http status code.
+newListEmailTemplatesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEmailTemplatesResponse
+newListEmailTemplatesResponse pHttpStatus_ =
+  ListEmailTemplatesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      templatesMetadata = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A token indicating that there are additional email templates available
+-- to be listed. Pass this token to a subsequent @ListEmailTemplates@ call
+-- to retrieve the next 10 email templates.
+listEmailTemplatesResponse_nextToken :: Lens.Lens' ListEmailTemplatesResponse (Prelude.Maybe Prelude.Text)
+listEmailTemplatesResponse_nextToken = Lens.lens (\ListEmailTemplatesResponse' {nextToken} -> nextToken) (\s@ListEmailTemplatesResponse' {} a -> s {nextToken = a} :: ListEmailTemplatesResponse)
+
+-- | An array the contains the name and creation time stamp for each template
+-- in your Amazon SES account.
+listEmailTemplatesResponse_templatesMetadata :: Lens.Lens' ListEmailTemplatesResponse (Prelude.Maybe [EmailTemplateMetadata])
+listEmailTemplatesResponse_templatesMetadata = Lens.lens (\ListEmailTemplatesResponse' {templatesMetadata} -> templatesMetadata) (\s@ListEmailTemplatesResponse' {} a -> s {templatesMetadata = a} :: ListEmailTemplatesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listEmailTemplatesResponse_httpStatus :: Lens.Lens' ListEmailTemplatesResponse Prelude.Int
+listEmailTemplatesResponse_httpStatus = Lens.lens (\ListEmailTemplatesResponse' {httpStatus} -> httpStatus) (\s@ListEmailTemplatesResponse' {} a -> s {httpStatus = a} :: ListEmailTemplatesResponse)
+
+instance Prelude.NFData ListEmailTemplatesResponse where
+  rnf ListEmailTemplatesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf templatesMetadata
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/ListImportJobs.hs b/gen/Amazonka/SESV2/ListImportJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/ListImportJobs.hs
@@ -0,0 +1,239 @@
+{-# 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.SESV2.ListImportJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all of the import jobs.
+module Amazonka.SESV2.ListImportJobs
+  ( -- * Creating a Request
+    ListImportJobs (..),
+    newListImportJobs,
+
+    -- * Request Lenses
+    listImportJobs_importDestinationType,
+    listImportJobs_nextToken,
+    listImportJobs_pageSize,
+
+    -- * Destructuring the Response
+    ListImportJobsResponse (..),
+    newListImportJobsResponse,
+
+    -- * Response Lenses
+    listImportJobsResponse_importJobs,
+    listImportJobsResponse_nextToken,
+    listImportJobsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to list all of the import jobs for a data
+-- destination within the specified maximum number of import jobs.
+--
+-- /See:/ 'newListImportJobs' smart constructor.
+data ListImportJobs = ListImportJobs'
+  { -- | The destination of the import job, which can be used to list import jobs
+    -- that have a certain @ImportDestinationType@.
+    importDestinationType :: Prelude.Maybe ImportDestinationType,
+    -- | A string token indicating that there might be additional import jobs
+    -- available to be listed. Copy this token to a subsequent call to
+    -- @ListImportJobs@ with the same parameters to retrieve the next page of
+    -- import jobs.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Maximum number of import jobs to return at once. Use this parameter to
+    -- paginate results. If additional import jobs exist beyond the specified
+    -- limit, the @NextToken@ element is sent in the response. Use the
+    -- @NextToken@ value in subsequent requests to retrieve additional
+    -- addresses.
+    pageSize :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListImportJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'importDestinationType', 'listImportJobs_importDestinationType' - The destination of the import job, which can be used to list import jobs
+-- that have a certain @ImportDestinationType@.
+--
+-- 'nextToken', 'listImportJobs_nextToken' - A string token indicating that there might be additional import jobs
+-- available to be listed. Copy this token to a subsequent call to
+-- @ListImportJobs@ with the same parameters to retrieve the next page of
+-- import jobs.
+--
+-- 'pageSize', 'listImportJobs_pageSize' - Maximum number of import jobs to return at once. Use this parameter to
+-- paginate results. If additional import jobs exist beyond the specified
+-- limit, the @NextToken@ element is sent in the response. Use the
+-- @NextToken@ value in subsequent requests to retrieve additional
+-- addresses.
+newListImportJobs ::
+  ListImportJobs
+newListImportJobs =
+  ListImportJobs'
+    { importDestinationType =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      pageSize = Prelude.Nothing
+    }
+
+-- | The destination of the import job, which can be used to list import jobs
+-- that have a certain @ImportDestinationType@.
+listImportJobs_importDestinationType :: Lens.Lens' ListImportJobs (Prelude.Maybe ImportDestinationType)
+listImportJobs_importDestinationType = Lens.lens (\ListImportJobs' {importDestinationType} -> importDestinationType) (\s@ListImportJobs' {} a -> s {importDestinationType = a} :: ListImportJobs)
+
+-- | A string token indicating that there might be additional import jobs
+-- available to be listed. Copy this token to a subsequent call to
+-- @ListImportJobs@ with the same parameters to retrieve the next page of
+-- import jobs.
+listImportJobs_nextToken :: Lens.Lens' ListImportJobs (Prelude.Maybe Prelude.Text)
+listImportJobs_nextToken = Lens.lens (\ListImportJobs' {nextToken} -> nextToken) (\s@ListImportJobs' {} a -> s {nextToken = a} :: ListImportJobs)
+
+-- | Maximum number of import jobs to return at once. Use this parameter to
+-- paginate results. If additional import jobs exist beyond the specified
+-- limit, the @NextToken@ element is sent in the response. Use the
+-- @NextToken@ value in subsequent requests to retrieve additional
+-- addresses.
+listImportJobs_pageSize :: Lens.Lens' ListImportJobs (Prelude.Maybe Prelude.Int)
+listImportJobs_pageSize = Lens.lens (\ListImportJobs' {pageSize} -> pageSize) (\s@ListImportJobs' {} a -> s {pageSize = a} :: ListImportJobs)
+
+instance Core.AWSRequest ListImportJobs where
+  type
+    AWSResponse ListImportJobs =
+      ListImportJobsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListImportJobsResponse'
+            Prelude.<$> (x Data..?> "ImportJobs" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListImportJobs where
+  hashWithSalt _salt ListImportJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` importDestinationType
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` pageSize
+
+instance Prelude.NFData ListImportJobs where
+  rnf ListImportJobs' {..} =
+    Prelude.rnf importDestinationType
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf pageSize
+
+instance Data.ToHeaders ListImportJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListImportJobs where
+  toPath = Prelude.const "/v2/email/import-jobs"
+
+instance Data.ToQuery ListImportJobs where
+  toQuery ListImportJobs' {..} =
+    Prelude.mconcat
+      [ "NextToken" Data.=: nextToken,
+        "PageSize" Data.=: pageSize
+      ]
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newListImportJobsResponse' smart constructor.
+data ListImportJobsResponse = ListImportJobsResponse'
+  { -- | A list of the import job summaries.
+    importJobs :: Prelude.Maybe [ImportJobSummary],
+    -- | A string token indicating that there might be additional import jobs
+    -- available to be listed. Copy this token to a subsequent call to
+    -- @ListImportJobs@ with the same parameters to retrieve the next page of
+    -- import jobs.
+    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 'ListImportJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'importJobs', 'listImportJobsResponse_importJobs' - A list of the import job summaries.
+--
+-- 'nextToken', 'listImportJobsResponse_nextToken' - A string token indicating that there might be additional import jobs
+-- available to be listed. Copy this token to a subsequent call to
+-- @ListImportJobs@ with the same parameters to retrieve the next page of
+-- import jobs.
+--
+-- 'httpStatus', 'listImportJobsResponse_httpStatus' - The response's http status code.
+newListImportJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListImportJobsResponse
+newListImportJobsResponse pHttpStatus_ =
+  ListImportJobsResponse'
+    { importJobs =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of the import job summaries.
+listImportJobsResponse_importJobs :: Lens.Lens' ListImportJobsResponse (Prelude.Maybe [ImportJobSummary])
+listImportJobsResponse_importJobs = Lens.lens (\ListImportJobsResponse' {importJobs} -> importJobs) (\s@ListImportJobsResponse' {} a -> s {importJobs = a} :: ListImportJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A string token indicating that there might be additional import jobs
+-- available to be listed. Copy this token to a subsequent call to
+-- @ListImportJobs@ with the same parameters to retrieve the next page of
+-- import jobs.
+listImportJobsResponse_nextToken :: Lens.Lens' ListImportJobsResponse (Prelude.Maybe Prelude.Text)
+listImportJobsResponse_nextToken = Lens.lens (\ListImportJobsResponse' {nextToken} -> nextToken) (\s@ListImportJobsResponse' {} a -> s {nextToken = a} :: ListImportJobsResponse)
+
+-- | The response's http status code.
+listImportJobsResponse_httpStatus :: Lens.Lens' ListImportJobsResponse Prelude.Int
+listImportJobsResponse_httpStatus = Lens.lens (\ListImportJobsResponse' {httpStatus} -> httpStatus) (\s@ListImportJobsResponse' {} a -> s {httpStatus = a} :: ListImportJobsResponse)
+
+instance Prelude.NFData ListImportJobsResponse where
+  rnf ListImportJobsResponse' {..} =
+    Prelude.rnf importJobs
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/ListRecommendations.hs b/gen/Amazonka/SESV2/ListRecommendations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/ListRecommendations.hs
@@ -0,0 +1,254 @@
+{-# 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.SESV2.ListRecommendations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the recommendations present in your Amazon SES account in the
+-- current Amazon Web Services Region.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.ListRecommendations
+  ( -- * Creating a Request
+    ListRecommendations (..),
+    newListRecommendations,
+
+    -- * Request Lenses
+    listRecommendations_filter,
+    listRecommendations_nextToken,
+    listRecommendations_pageSize,
+
+    -- * Destructuring the Response
+    ListRecommendationsResponse (..),
+    newListRecommendationsResponse,
+
+    -- * Response Lenses
+    listRecommendationsResponse_nextToken,
+    listRecommendationsResponse_recommendations,
+    listRecommendationsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to list the existing recommendations for your
+-- account.
+--
+-- /See:/ 'newListRecommendations' smart constructor.
+data ListRecommendations = ListRecommendations'
+  { -- | Filters applied when retrieving recommendations. Can eiter be an
+    -- individual filter, or combinations of @STATUS@ and @IMPACT@ or @STATUS@
+    -- and @TYPE@
+    filter' :: Prelude.Maybe (Prelude.HashMap ListRecommendationsFilterKey Prelude.Text),
+    -- | A token returned from a previous call to @ListRecommendations@ to
+    -- indicate the position in the list of recommendations.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The number of results to show in a single call to @ListRecommendations@.
+    -- If the number of results is larger than the number you specified in this
+    -- parameter, then the response includes a @NextToken@ element, which you
+    -- can use to obtain additional results.
+    --
+    -- The value you specify has to be at least 1, and can be no more than 100.
+    pageSize :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRecommendations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filter'', 'listRecommendations_filter' - Filters applied when retrieving recommendations. Can eiter be an
+-- individual filter, or combinations of @STATUS@ and @IMPACT@ or @STATUS@
+-- and @TYPE@
+--
+-- 'nextToken', 'listRecommendations_nextToken' - A token returned from a previous call to @ListRecommendations@ to
+-- indicate the position in the list of recommendations.
+--
+-- 'pageSize', 'listRecommendations_pageSize' - The number of results to show in a single call to @ListRecommendations@.
+-- If the number of results is larger than the number you specified in this
+-- parameter, then the response includes a @NextToken@ element, which you
+-- can use to obtain additional results.
+--
+-- The value you specify has to be at least 1, and can be no more than 100.
+newListRecommendations ::
+  ListRecommendations
+newListRecommendations =
+  ListRecommendations'
+    { filter' = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      pageSize = Prelude.Nothing
+    }
+
+-- | Filters applied when retrieving recommendations. Can eiter be an
+-- individual filter, or combinations of @STATUS@ and @IMPACT@ or @STATUS@
+-- and @TYPE@
+listRecommendations_filter :: Lens.Lens' ListRecommendations (Prelude.Maybe (Prelude.HashMap ListRecommendationsFilterKey Prelude.Text))
+listRecommendations_filter = Lens.lens (\ListRecommendations' {filter'} -> filter') (\s@ListRecommendations' {} a -> s {filter' = a} :: ListRecommendations) Prelude.. Lens.mapping Lens.coerced
+
+-- | A token returned from a previous call to @ListRecommendations@ to
+-- indicate the position in the list of recommendations.
+listRecommendations_nextToken :: Lens.Lens' ListRecommendations (Prelude.Maybe Prelude.Text)
+listRecommendations_nextToken = Lens.lens (\ListRecommendations' {nextToken} -> nextToken) (\s@ListRecommendations' {} a -> s {nextToken = a} :: ListRecommendations)
+
+-- | The number of results to show in a single call to @ListRecommendations@.
+-- If the number of results is larger than the number you specified in this
+-- parameter, then the response includes a @NextToken@ element, which you
+-- can use to obtain additional results.
+--
+-- The value you specify has to be at least 1, and can be no more than 100.
+listRecommendations_pageSize :: Lens.Lens' ListRecommendations (Prelude.Maybe Prelude.Int)
+listRecommendations_pageSize = Lens.lens (\ListRecommendations' {pageSize} -> pageSize) (\s@ListRecommendations' {} a -> s {pageSize = a} :: ListRecommendations)
+
+instance Core.AWSRequest ListRecommendations where
+  type
+    AWSResponse ListRecommendations =
+      ListRecommendationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListRecommendationsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "Recommendations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListRecommendations where
+  hashWithSalt _salt ListRecommendations' {..} =
+    _salt
+      `Prelude.hashWithSalt` filter'
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` pageSize
+
+instance Prelude.NFData ListRecommendations where
+  rnf ListRecommendations' {..} =
+    Prelude.rnf filter'
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf pageSize
+
+instance Data.ToHeaders ListRecommendations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListRecommendations where
+  toJSON ListRecommendations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filter" Data..=) Prelude.<$> filter',
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("PageSize" Data..=) Prelude.<$> pageSize
+          ]
+      )
+
+instance Data.ToPath ListRecommendations where
+  toPath =
+    Prelude.const "/v2/email/vdm/recommendations"
+
+instance Data.ToQuery ListRecommendations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | Contains the response to your request to retrieve the list of
+-- recommendations for your account.
+--
+-- /See:/ 'newListRecommendationsResponse' smart constructor.
+data ListRecommendationsResponse = ListRecommendationsResponse'
+  { -- | A string token indicating that there might be additional recommendations
+    -- available to be listed. Use the token provided in the
+    -- @ListRecommendationsResponse@ to use in the subsequent call to
+    -- @ListRecommendations@ with the same parameters to retrieve the next page
+    -- of recommendations.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The recommendations applicable to your account.
+    recommendations :: Prelude.Maybe [Recommendation],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRecommendationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listRecommendationsResponse_nextToken' - A string token indicating that there might be additional recommendations
+-- available to be listed. Use the token provided in the
+-- @ListRecommendationsResponse@ to use in the subsequent call to
+-- @ListRecommendations@ with the same parameters to retrieve the next page
+-- of recommendations.
+--
+-- 'recommendations', 'listRecommendationsResponse_recommendations' - The recommendations applicable to your account.
+--
+-- 'httpStatus', 'listRecommendationsResponse_httpStatus' - The response's http status code.
+newListRecommendationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListRecommendationsResponse
+newListRecommendationsResponse pHttpStatus_ =
+  ListRecommendationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      recommendations = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A string token indicating that there might be additional recommendations
+-- available to be listed. Use the token provided in the
+-- @ListRecommendationsResponse@ to use in the subsequent call to
+-- @ListRecommendations@ with the same parameters to retrieve the next page
+-- of recommendations.
+listRecommendationsResponse_nextToken :: Lens.Lens' ListRecommendationsResponse (Prelude.Maybe Prelude.Text)
+listRecommendationsResponse_nextToken = Lens.lens (\ListRecommendationsResponse' {nextToken} -> nextToken) (\s@ListRecommendationsResponse' {} a -> s {nextToken = a} :: ListRecommendationsResponse)
+
+-- | The recommendations applicable to your account.
+listRecommendationsResponse_recommendations :: Lens.Lens' ListRecommendationsResponse (Prelude.Maybe [Recommendation])
+listRecommendationsResponse_recommendations = Lens.lens (\ListRecommendationsResponse' {recommendations} -> recommendations) (\s@ListRecommendationsResponse' {} a -> s {recommendations = a} :: ListRecommendationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listRecommendationsResponse_httpStatus :: Lens.Lens' ListRecommendationsResponse Prelude.Int
+listRecommendationsResponse_httpStatus = Lens.lens (\ListRecommendationsResponse' {httpStatus} -> httpStatus) (\s@ListRecommendationsResponse' {} a -> s {httpStatus = a} :: ListRecommendationsResponse)
+
+instance Prelude.NFData ListRecommendationsResponse where
+  rnf ListRecommendationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf recommendations
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/ListSuppressedDestinations.hs b/gen/Amazonka/SESV2/ListSuppressedDestinations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/ListSuppressedDestinations.hs
@@ -0,0 +1,273 @@
+{-# 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.SESV2.ListSuppressedDestinations
+-- 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 list of email addresses that are on the suppression list for
+-- your account.
+module Amazonka.SESV2.ListSuppressedDestinations
+  ( -- * Creating a Request
+    ListSuppressedDestinations (..),
+    newListSuppressedDestinations,
+
+    -- * Request Lenses
+    listSuppressedDestinations_endDate,
+    listSuppressedDestinations_nextToken,
+    listSuppressedDestinations_pageSize,
+    listSuppressedDestinations_reasons,
+    listSuppressedDestinations_startDate,
+
+    -- * Destructuring the Response
+    ListSuppressedDestinationsResponse (..),
+    newListSuppressedDestinationsResponse,
+
+    -- * Response Lenses
+    listSuppressedDestinationsResponse_nextToken,
+    listSuppressedDestinationsResponse_suppressedDestinationSummaries,
+    listSuppressedDestinationsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to obtain a list of email destinations that are on the
+-- suppression list for your account.
+--
+-- /See:/ 'newListSuppressedDestinations' smart constructor.
+data ListSuppressedDestinations = ListSuppressedDestinations'
+  { -- | Used to filter the list of suppressed email destinations so that it only
+    -- includes addresses that were added to the list before a specific date.
+    endDate :: Prelude.Maybe Data.POSIX,
+    -- | A token returned from a previous call to @ListSuppressedDestinations@ to
+    -- indicate the position in the list of suppressed email addresses.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The number of results to show in a single call to
+    -- @ListSuppressedDestinations@. If the number of results is larger than
+    -- the number you specified in this parameter, then the response includes a
+    -- @NextToken@ element, which you can use to obtain additional results.
+    pageSize :: Prelude.Maybe Prelude.Int,
+    -- | The factors that caused the email address to be added to .
+    reasons :: Prelude.Maybe [SuppressionListReason],
+    -- | Used to filter the list of suppressed email destinations so that it only
+    -- includes addresses that were added to the list after a specific date.
+    startDate :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSuppressedDestinations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endDate', 'listSuppressedDestinations_endDate' - Used to filter the list of suppressed email destinations so that it only
+-- includes addresses that were added to the list before a specific date.
+--
+-- 'nextToken', 'listSuppressedDestinations_nextToken' - A token returned from a previous call to @ListSuppressedDestinations@ to
+-- indicate the position in the list of suppressed email addresses.
+--
+-- 'pageSize', 'listSuppressedDestinations_pageSize' - The number of results to show in a single call to
+-- @ListSuppressedDestinations@. If the number of results is larger than
+-- the number you specified in this parameter, then the response includes a
+-- @NextToken@ element, which you can use to obtain additional results.
+--
+-- 'reasons', 'listSuppressedDestinations_reasons' - The factors that caused the email address to be added to .
+--
+-- 'startDate', 'listSuppressedDestinations_startDate' - Used to filter the list of suppressed email destinations so that it only
+-- includes addresses that were added to the list after a specific date.
+newListSuppressedDestinations ::
+  ListSuppressedDestinations
+newListSuppressedDestinations =
+  ListSuppressedDestinations'
+    { endDate =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      pageSize = Prelude.Nothing,
+      reasons = Prelude.Nothing,
+      startDate = Prelude.Nothing
+    }
+
+-- | Used to filter the list of suppressed email destinations so that it only
+-- includes addresses that were added to the list before a specific date.
+listSuppressedDestinations_endDate :: Lens.Lens' ListSuppressedDestinations (Prelude.Maybe Prelude.UTCTime)
+listSuppressedDestinations_endDate = Lens.lens (\ListSuppressedDestinations' {endDate} -> endDate) (\s@ListSuppressedDestinations' {} a -> s {endDate = a} :: ListSuppressedDestinations) Prelude.. Lens.mapping Data._Time
+
+-- | A token returned from a previous call to @ListSuppressedDestinations@ to
+-- indicate the position in the list of suppressed email addresses.
+listSuppressedDestinations_nextToken :: Lens.Lens' ListSuppressedDestinations (Prelude.Maybe Prelude.Text)
+listSuppressedDestinations_nextToken = Lens.lens (\ListSuppressedDestinations' {nextToken} -> nextToken) (\s@ListSuppressedDestinations' {} a -> s {nextToken = a} :: ListSuppressedDestinations)
+
+-- | The number of results to show in a single call to
+-- @ListSuppressedDestinations@. If the number of results is larger than
+-- the number you specified in this parameter, then the response includes a
+-- @NextToken@ element, which you can use to obtain additional results.
+listSuppressedDestinations_pageSize :: Lens.Lens' ListSuppressedDestinations (Prelude.Maybe Prelude.Int)
+listSuppressedDestinations_pageSize = Lens.lens (\ListSuppressedDestinations' {pageSize} -> pageSize) (\s@ListSuppressedDestinations' {} a -> s {pageSize = a} :: ListSuppressedDestinations)
+
+-- | The factors that caused the email address to be added to .
+listSuppressedDestinations_reasons :: Lens.Lens' ListSuppressedDestinations (Prelude.Maybe [SuppressionListReason])
+listSuppressedDestinations_reasons = Lens.lens (\ListSuppressedDestinations' {reasons} -> reasons) (\s@ListSuppressedDestinations' {} a -> s {reasons = a} :: ListSuppressedDestinations) Prelude.. Lens.mapping Lens.coerced
+
+-- | Used to filter the list of suppressed email destinations so that it only
+-- includes addresses that were added to the list after a specific date.
+listSuppressedDestinations_startDate :: Lens.Lens' ListSuppressedDestinations (Prelude.Maybe Prelude.UTCTime)
+listSuppressedDestinations_startDate = Lens.lens (\ListSuppressedDestinations' {startDate} -> startDate) (\s@ListSuppressedDestinations' {} a -> s {startDate = a} :: ListSuppressedDestinations) Prelude.. Lens.mapping Data._Time
+
+instance Core.AWSRequest ListSuppressedDestinations where
+  type
+    AWSResponse ListSuppressedDestinations =
+      ListSuppressedDestinationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSuppressedDestinationsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "SuppressedDestinationSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSuppressedDestinations where
+  hashWithSalt _salt ListSuppressedDestinations' {..} =
+    _salt
+      `Prelude.hashWithSalt` endDate
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` pageSize
+      `Prelude.hashWithSalt` reasons
+      `Prelude.hashWithSalt` startDate
+
+instance Prelude.NFData ListSuppressedDestinations where
+  rnf ListSuppressedDestinations' {..} =
+    Prelude.rnf endDate
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf pageSize
+      `Prelude.seq` Prelude.rnf reasons
+      `Prelude.seq` Prelude.rnf startDate
+
+instance Data.ToHeaders ListSuppressedDestinations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListSuppressedDestinations where
+  toPath =
+    Prelude.const "/v2/email/suppression/addresses"
+
+instance Data.ToQuery ListSuppressedDestinations where
+  toQuery ListSuppressedDestinations' {..} =
+    Prelude.mconcat
+      [ "EndDate" Data.=: endDate,
+        "NextToken" Data.=: nextToken,
+        "PageSize" Data.=: pageSize,
+        "Reason"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> reasons),
+        "StartDate" Data.=: startDate
+      ]
+
+-- | A list of suppressed email addresses.
+--
+-- /See:/ 'newListSuppressedDestinationsResponse' smart constructor.
+data ListSuppressedDestinationsResponse = ListSuppressedDestinationsResponse'
+  { -- | A token that indicates that there are additional email addresses on the
+    -- suppression list for your account. To view additional suppressed
+    -- addresses, issue another request to @ListSuppressedDestinations@, and
+    -- pass this token in the @NextToken@ parameter.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of summaries, each containing a summary for a suppressed email
+    -- destination.
+    suppressedDestinationSummaries :: Prelude.Maybe [SuppressedDestinationSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSuppressedDestinationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listSuppressedDestinationsResponse_nextToken' - A token that indicates that there are additional email addresses on the
+-- suppression list for your account. To view additional suppressed
+-- addresses, issue another request to @ListSuppressedDestinations@, and
+-- pass this token in the @NextToken@ parameter.
+--
+-- 'suppressedDestinationSummaries', 'listSuppressedDestinationsResponse_suppressedDestinationSummaries' - A list of summaries, each containing a summary for a suppressed email
+-- destination.
+--
+-- 'httpStatus', 'listSuppressedDestinationsResponse_httpStatus' - The response's http status code.
+newListSuppressedDestinationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSuppressedDestinationsResponse
+newListSuppressedDestinationsResponse pHttpStatus_ =
+  ListSuppressedDestinationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      suppressedDestinationSummaries =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A token that indicates that there are additional email addresses on the
+-- suppression list for your account. To view additional suppressed
+-- addresses, issue another request to @ListSuppressedDestinations@, and
+-- pass this token in the @NextToken@ parameter.
+listSuppressedDestinationsResponse_nextToken :: Lens.Lens' ListSuppressedDestinationsResponse (Prelude.Maybe Prelude.Text)
+listSuppressedDestinationsResponse_nextToken = Lens.lens (\ListSuppressedDestinationsResponse' {nextToken} -> nextToken) (\s@ListSuppressedDestinationsResponse' {} a -> s {nextToken = a} :: ListSuppressedDestinationsResponse)
+
+-- | A list of summaries, each containing a summary for a suppressed email
+-- destination.
+listSuppressedDestinationsResponse_suppressedDestinationSummaries :: Lens.Lens' ListSuppressedDestinationsResponse (Prelude.Maybe [SuppressedDestinationSummary])
+listSuppressedDestinationsResponse_suppressedDestinationSummaries = Lens.lens (\ListSuppressedDestinationsResponse' {suppressedDestinationSummaries} -> suppressedDestinationSummaries) (\s@ListSuppressedDestinationsResponse' {} a -> s {suppressedDestinationSummaries = a} :: ListSuppressedDestinationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSuppressedDestinationsResponse_httpStatus :: Lens.Lens' ListSuppressedDestinationsResponse Prelude.Int
+listSuppressedDestinationsResponse_httpStatus = Lens.lens (\ListSuppressedDestinationsResponse' {httpStatus} -> httpStatus) (\s@ListSuppressedDestinationsResponse' {} a -> s {httpStatus = a} :: ListSuppressedDestinationsResponse)
+
+instance
+  Prelude.NFData
+    ListSuppressedDestinationsResponse
+  where
+  rnf ListSuppressedDestinationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf suppressedDestinationSummaries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/ListTagsForResource.hs b/gen/Amazonka/SESV2/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/ListTagsForResource.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.SESV2.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)
+--
+-- Retrieve a list of the tags (keys and values) that are associated with a
+-- specified resource. A /tag/ is a label that you optionally define and
+-- associate with a resource. Each tag consists of a required /tag key/ and
+-- an optional associated /tag value/. A tag key is a general label that
+-- acts as a category for more specific tag values. A tag value acts as a
+-- descriptor within a tag key.
+module Amazonka.SESV2.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_httpStatus,
+    listTagsForResourceResponse_tags,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) of the resource that you want to retrieve
+    -- tag information for.
+    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 that you want to retrieve
+-- tag information for.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the resource that you want to retrieve
+-- tag information for.
+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.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+      )
+
+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 = Prelude.const "/v2/email/tags"
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery ListTagsForResource' {..} =
+    Prelude.mconcat ["ResourceArn" Data.=: resourceArn]
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | An array that lists all the tags that are associated with the resource.
+    -- Each tag consists of a required tag key (@Key@) and an associated tag
+    -- value (@Value@)
+    tags :: [Tag]
+  }
+  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:
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - An array that lists all the tags that are associated with the resource.
+-- Each tag consists of a required tag key (@Key@) and an associated tag
+-- value (@Value@)
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { httpStatus =
+        pHttpStatus_,
+      tags = Prelude.mempty
+    }
+
+-- | 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)
+
+-- | An array that lists all the tags that are associated with the resource.
+-- Each tag consists of a required tag key (@Key@) and an associated tag
+-- value (@Value@)
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse [Tag]
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/SESV2/PutAccountDedicatedIpWarmupAttributes.hs b/gen/Amazonka/SESV2/PutAccountDedicatedIpWarmupAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutAccountDedicatedIpWarmupAttributes.hs
@@ -0,0 +1,202 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.PutAccountDedicatedIpWarmupAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enable or disable the automatic warm-up feature for dedicated IP
+-- addresses.
+module Amazonka.SESV2.PutAccountDedicatedIpWarmupAttributes
+  ( -- * Creating a Request
+    PutAccountDedicatedIpWarmupAttributes (..),
+    newPutAccountDedicatedIpWarmupAttributes,
+
+    -- * Request Lenses
+    putAccountDedicatedIpWarmupAttributes_autoWarmupEnabled,
+
+    -- * Destructuring the Response
+    PutAccountDedicatedIpWarmupAttributesResponse (..),
+    newPutAccountDedicatedIpWarmupAttributesResponse,
+
+    -- * Response Lenses
+    putAccountDedicatedIpWarmupAttributesResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to enable or disable the automatic IP address warm-up feature.
+--
+-- /See:/ 'newPutAccountDedicatedIpWarmupAttributes' smart constructor.
+data PutAccountDedicatedIpWarmupAttributes = PutAccountDedicatedIpWarmupAttributes'
+  { -- | Enables or disables the automatic warm-up feature for dedicated IP
+    -- addresses that are associated with your Amazon SES account in the
+    -- current Amazon Web Services Region. Set to @true@ to enable the
+    -- automatic warm-up feature, or set to @false@ to disable it.
+    autoWarmupEnabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAccountDedicatedIpWarmupAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoWarmupEnabled', 'putAccountDedicatedIpWarmupAttributes_autoWarmupEnabled' - Enables or disables the automatic warm-up feature for dedicated IP
+-- addresses that are associated with your Amazon SES account in the
+-- current Amazon Web Services Region. Set to @true@ to enable the
+-- automatic warm-up feature, or set to @false@ to disable it.
+newPutAccountDedicatedIpWarmupAttributes ::
+  PutAccountDedicatedIpWarmupAttributes
+newPutAccountDedicatedIpWarmupAttributes =
+  PutAccountDedicatedIpWarmupAttributes'
+    { autoWarmupEnabled =
+        Prelude.Nothing
+    }
+
+-- | Enables or disables the automatic warm-up feature for dedicated IP
+-- addresses that are associated with your Amazon SES account in the
+-- current Amazon Web Services Region. Set to @true@ to enable the
+-- automatic warm-up feature, or set to @false@ to disable it.
+putAccountDedicatedIpWarmupAttributes_autoWarmupEnabled :: Lens.Lens' PutAccountDedicatedIpWarmupAttributes (Prelude.Maybe Prelude.Bool)
+putAccountDedicatedIpWarmupAttributes_autoWarmupEnabled = Lens.lens (\PutAccountDedicatedIpWarmupAttributes' {autoWarmupEnabled} -> autoWarmupEnabled) (\s@PutAccountDedicatedIpWarmupAttributes' {} a -> s {autoWarmupEnabled = a} :: PutAccountDedicatedIpWarmupAttributes)
+
+instance
+  Core.AWSRequest
+    PutAccountDedicatedIpWarmupAttributes
+  where
+  type
+    AWSResponse
+      PutAccountDedicatedIpWarmupAttributes =
+      PutAccountDedicatedIpWarmupAttributesResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutAccountDedicatedIpWarmupAttributesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutAccountDedicatedIpWarmupAttributes
+  where
+  hashWithSalt
+    _salt
+    PutAccountDedicatedIpWarmupAttributes' {..} =
+      _salt `Prelude.hashWithSalt` autoWarmupEnabled
+
+instance
+  Prelude.NFData
+    PutAccountDedicatedIpWarmupAttributes
+  where
+  rnf PutAccountDedicatedIpWarmupAttributes' {..} =
+    Prelude.rnf autoWarmupEnabled
+
+instance
+  Data.ToHeaders
+    PutAccountDedicatedIpWarmupAttributes
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    PutAccountDedicatedIpWarmupAttributes
+  where
+  toJSON PutAccountDedicatedIpWarmupAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AutoWarmupEnabled" Data..=)
+              Prelude.<$> autoWarmupEnabled
+          ]
+      )
+
+instance
+  Data.ToPath
+    PutAccountDedicatedIpWarmupAttributes
+  where
+  toPath =
+    Prelude.const
+      "/v2/email/account/dedicated-ips/warmup"
+
+instance
+  Data.ToQuery
+    PutAccountDedicatedIpWarmupAttributes
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newPutAccountDedicatedIpWarmupAttributesResponse' smart constructor.
+data PutAccountDedicatedIpWarmupAttributesResponse = PutAccountDedicatedIpWarmupAttributesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAccountDedicatedIpWarmupAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putAccountDedicatedIpWarmupAttributesResponse_httpStatus' - The response's http status code.
+newPutAccountDedicatedIpWarmupAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutAccountDedicatedIpWarmupAttributesResponse
+newPutAccountDedicatedIpWarmupAttributesResponse
+  pHttpStatus_ =
+    PutAccountDedicatedIpWarmupAttributesResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+putAccountDedicatedIpWarmupAttributesResponse_httpStatus :: Lens.Lens' PutAccountDedicatedIpWarmupAttributesResponse Prelude.Int
+putAccountDedicatedIpWarmupAttributesResponse_httpStatus = Lens.lens (\PutAccountDedicatedIpWarmupAttributesResponse' {httpStatus} -> httpStatus) (\s@PutAccountDedicatedIpWarmupAttributesResponse' {} a -> s {httpStatus = a} :: PutAccountDedicatedIpWarmupAttributesResponse)
+
+instance
+  Prelude.NFData
+    PutAccountDedicatedIpWarmupAttributesResponse
+  where
+  rnf
+    PutAccountDedicatedIpWarmupAttributesResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutAccountDetails.hs b/gen/Amazonka/SESV2/PutAccountDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutAccountDetails.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.SESV2.PutAccountDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update your Amazon SES account details.
+module Amazonka.SESV2.PutAccountDetails
+  ( -- * Creating a Request
+    PutAccountDetails (..),
+    newPutAccountDetails,
+
+    -- * Request Lenses
+    putAccountDetails_additionalContactEmailAddresses,
+    putAccountDetails_contactLanguage,
+    putAccountDetails_productionAccessEnabled,
+    putAccountDetails_mailType,
+    putAccountDetails_websiteURL,
+    putAccountDetails_useCaseDescription,
+
+    -- * Destructuring the Response
+    PutAccountDetailsResponse (..),
+    newPutAccountDetailsResponse,
+
+    -- * Response Lenses
+    putAccountDetailsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to submit new account details.
+--
+-- /See:/ 'newPutAccountDetails' smart constructor.
+data PutAccountDetails = PutAccountDetails'
+  { -- | Additional email addresses that you would like to be notified regarding
+    -- Amazon SES matters.
+    additionalContactEmailAddresses :: Prelude.Maybe (Data.Sensitive (Prelude.NonEmpty (Data.Sensitive Prelude.Text))),
+    -- | The language you would prefer to be contacted with.
+    contactLanguage :: Prelude.Maybe ContactLanguage,
+    -- | Indicates whether or not your account should have production access in
+    -- the current Amazon Web Services Region.
+    --
+    -- If the value is @false@, then your account is in the /sandbox/. When
+    -- your account is in the sandbox, you can only send email to verified
+    -- identities. Additionally, the maximum number of emails you can send in a
+    -- 24-hour period (your sending quota) is 200, and the maximum number of
+    -- emails you can send per second (your maximum sending rate) is 1.
+    --
+    -- If the value is @true@, then your account has production access. When
+    -- your account has production access, you can send email to any address.
+    -- The sending quota and maximum sending rate for your account vary based
+    -- on your specific use case.
+    productionAccessEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The type of email your account will send.
+    mailType :: MailType,
+    -- | The URL of your website. This information helps us better understand the
+    -- type of content that you plan to send.
+    websiteURL :: Data.Sensitive Prelude.Text,
+    -- | A description of the types of email that you plan to send.
+    useCaseDescription :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAccountDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'additionalContactEmailAddresses', 'putAccountDetails_additionalContactEmailAddresses' - Additional email addresses that you would like to be notified regarding
+-- Amazon SES matters.
+--
+-- 'contactLanguage', 'putAccountDetails_contactLanguage' - The language you would prefer to be contacted with.
+--
+-- 'productionAccessEnabled', 'putAccountDetails_productionAccessEnabled' - Indicates whether or not your account should have production access in
+-- the current Amazon Web Services Region.
+--
+-- If the value is @false@, then your account is in the /sandbox/. When
+-- your account is in the sandbox, you can only send email to verified
+-- identities. Additionally, the maximum number of emails you can send in a
+-- 24-hour period (your sending quota) is 200, and the maximum number of
+-- emails you can send per second (your maximum sending rate) is 1.
+--
+-- If the value is @true@, then your account has production access. When
+-- your account has production access, you can send email to any address.
+-- The sending quota and maximum sending rate for your account vary based
+-- on your specific use case.
+--
+-- 'mailType', 'putAccountDetails_mailType' - The type of email your account will send.
+--
+-- 'websiteURL', 'putAccountDetails_websiteURL' - The URL of your website. This information helps us better understand the
+-- type of content that you plan to send.
+--
+-- 'useCaseDescription', 'putAccountDetails_useCaseDescription' - A description of the types of email that you plan to send.
+newPutAccountDetails ::
+  -- | 'mailType'
+  MailType ->
+  -- | 'websiteURL'
+  Prelude.Text ->
+  -- | 'useCaseDescription'
+  Prelude.Text ->
+  PutAccountDetails
+newPutAccountDetails
+  pMailType_
+  pWebsiteURL_
+  pUseCaseDescription_ =
+    PutAccountDetails'
+      { additionalContactEmailAddresses =
+          Prelude.Nothing,
+        contactLanguage = Prelude.Nothing,
+        productionAccessEnabled = Prelude.Nothing,
+        mailType = pMailType_,
+        websiteURL = Data._Sensitive Lens.# pWebsiteURL_,
+        useCaseDescription =
+          Data._Sensitive Lens.# pUseCaseDescription_
+      }
+
+-- | Additional email addresses that you would like to be notified regarding
+-- Amazon SES matters.
+putAccountDetails_additionalContactEmailAddresses :: Lens.Lens' PutAccountDetails (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+putAccountDetails_additionalContactEmailAddresses = Lens.lens (\PutAccountDetails' {additionalContactEmailAddresses} -> additionalContactEmailAddresses) (\s@PutAccountDetails' {} a -> s {additionalContactEmailAddresses = a} :: PutAccountDetails) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The language you would prefer to be contacted with.
+putAccountDetails_contactLanguage :: Lens.Lens' PutAccountDetails (Prelude.Maybe ContactLanguage)
+putAccountDetails_contactLanguage = Lens.lens (\PutAccountDetails' {contactLanguage} -> contactLanguage) (\s@PutAccountDetails' {} a -> s {contactLanguage = a} :: PutAccountDetails)
+
+-- | Indicates whether or not your account should have production access in
+-- the current Amazon Web Services Region.
+--
+-- If the value is @false@, then your account is in the /sandbox/. When
+-- your account is in the sandbox, you can only send email to verified
+-- identities. Additionally, the maximum number of emails you can send in a
+-- 24-hour period (your sending quota) is 200, and the maximum number of
+-- emails you can send per second (your maximum sending rate) is 1.
+--
+-- If the value is @true@, then your account has production access. When
+-- your account has production access, you can send email to any address.
+-- The sending quota and maximum sending rate for your account vary based
+-- on your specific use case.
+putAccountDetails_productionAccessEnabled :: Lens.Lens' PutAccountDetails (Prelude.Maybe Prelude.Bool)
+putAccountDetails_productionAccessEnabled = Lens.lens (\PutAccountDetails' {productionAccessEnabled} -> productionAccessEnabled) (\s@PutAccountDetails' {} a -> s {productionAccessEnabled = a} :: PutAccountDetails)
+
+-- | The type of email your account will send.
+putAccountDetails_mailType :: Lens.Lens' PutAccountDetails MailType
+putAccountDetails_mailType = Lens.lens (\PutAccountDetails' {mailType} -> mailType) (\s@PutAccountDetails' {} a -> s {mailType = a} :: PutAccountDetails)
+
+-- | The URL of your website. This information helps us better understand the
+-- type of content that you plan to send.
+putAccountDetails_websiteURL :: Lens.Lens' PutAccountDetails Prelude.Text
+putAccountDetails_websiteURL = Lens.lens (\PutAccountDetails' {websiteURL} -> websiteURL) (\s@PutAccountDetails' {} a -> s {websiteURL = a} :: PutAccountDetails) Prelude.. Data._Sensitive
+
+-- | A description of the types of email that you plan to send.
+putAccountDetails_useCaseDescription :: Lens.Lens' PutAccountDetails Prelude.Text
+putAccountDetails_useCaseDescription = Lens.lens (\PutAccountDetails' {useCaseDescription} -> useCaseDescription) (\s@PutAccountDetails' {} a -> s {useCaseDescription = a} :: PutAccountDetails) Prelude.. Data._Sensitive
+
+instance Core.AWSRequest PutAccountDetails where
+  type
+    AWSResponse PutAccountDetails =
+      PutAccountDetailsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutAccountDetailsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutAccountDetails where
+  hashWithSalt _salt PutAccountDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalContactEmailAddresses
+      `Prelude.hashWithSalt` contactLanguage
+      `Prelude.hashWithSalt` productionAccessEnabled
+      `Prelude.hashWithSalt` mailType
+      `Prelude.hashWithSalt` websiteURL
+      `Prelude.hashWithSalt` useCaseDescription
+
+instance Prelude.NFData PutAccountDetails where
+  rnf PutAccountDetails' {..} =
+    Prelude.rnf additionalContactEmailAddresses
+      `Prelude.seq` Prelude.rnf contactLanguage
+      `Prelude.seq` Prelude.rnf productionAccessEnabled
+      `Prelude.seq` Prelude.rnf mailType
+      `Prelude.seq` Prelude.rnf websiteURL
+      `Prelude.seq` Prelude.rnf useCaseDescription
+
+instance Data.ToHeaders PutAccountDetails where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutAccountDetails where
+  toJSON PutAccountDetails' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AdditionalContactEmailAddresses" Data..=)
+              Prelude.<$> additionalContactEmailAddresses,
+            ("ContactLanguage" Data..=)
+              Prelude.<$> contactLanguage,
+            ("ProductionAccessEnabled" Data..=)
+              Prelude.<$> productionAccessEnabled,
+            Prelude.Just ("MailType" Data..= mailType),
+            Prelude.Just ("WebsiteURL" Data..= websiteURL),
+            Prelude.Just
+              ("UseCaseDescription" Data..= useCaseDescription)
+          ]
+      )
+
+instance Data.ToPath PutAccountDetails where
+  toPath = Prelude.const "/v2/email/account/details"
+
+instance Data.ToQuery PutAccountDetails where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newPutAccountDetailsResponse' smart constructor.
+data PutAccountDetailsResponse = PutAccountDetailsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAccountDetailsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putAccountDetailsResponse_httpStatus' - The response's http status code.
+newPutAccountDetailsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutAccountDetailsResponse
+newPutAccountDetailsResponse pHttpStatus_ =
+  PutAccountDetailsResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putAccountDetailsResponse_httpStatus :: Lens.Lens' PutAccountDetailsResponse Prelude.Int
+putAccountDetailsResponse_httpStatus = Lens.lens (\PutAccountDetailsResponse' {httpStatus} -> httpStatus) (\s@PutAccountDetailsResponse' {} a -> s {httpStatus = a} :: PutAccountDetailsResponse)
+
+instance Prelude.NFData PutAccountDetailsResponse where
+  rnf PutAccountDetailsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutAccountSendingAttributes.hs b/gen/Amazonka/SESV2/PutAccountSendingAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutAccountSendingAttributes.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.SESV2.PutAccountSendingAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enable or disable the ability of your account to send email.
+module Amazonka.SESV2.PutAccountSendingAttributes
+  ( -- * Creating a Request
+    PutAccountSendingAttributes (..),
+    newPutAccountSendingAttributes,
+
+    -- * Request Lenses
+    putAccountSendingAttributes_sendingEnabled,
+
+    -- * Destructuring the Response
+    PutAccountSendingAttributesResponse (..),
+    newPutAccountSendingAttributesResponse,
+
+    -- * Response Lenses
+    putAccountSendingAttributesResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to change the ability of your account to send email.
+--
+-- /See:/ 'newPutAccountSendingAttributes' smart constructor.
+data PutAccountSendingAttributes = PutAccountSendingAttributes'
+  { -- | Enables or disables your account\'s ability to send email. Set to @true@
+    -- to enable email sending, or set to @false@ to disable email sending.
+    --
+    -- If Amazon Web Services paused your account\'s ability to send email, you
+    -- can\'t use this operation to resume your account\'s ability to send
+    -- email.
+    sendingEnabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAccountSendingAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sendingEnabled', 'putAccountSendingAttributes_sendingEnabled' - Enables or disables your account\'s ability to send email. Set to @true@
+-- to enable email sending, or set to @false@ to disable email sending.
+--
+-- If Amazon Web Services paused your account\'s ability to send email, you
+-- can\'t use this operation to resume your account\'s ability to send
+-- email.
+newPutAccountSendingAttributes ::
+  PutAccountSendingAttributes
+newPutAccountSendingAttributes =
+  PutAccountSendingAttributes'
+    { sendingEnabled =
+        Prelude.Nothing
+    }
+
+-- | Enables or disables your account\'s ability to send email. Set to @true@
+-- to enable email sending, or set to @false@ to disable email sending.
+--
+-- If Amazon Web Services paused your account\'s ability to send email, you
+-- can\'t use this operation to resume your account\'s ability to send
+-- email.
+putAccountSendingAttributes_sendingEnabled :: Lens.Lens' PutAccountSendingAttributes (Prelude.Maybe Prelude.Bool)
+putAccountSendingAttributes_sendingEnabled = Lens.lens (\PutAccountSendingAttributes' {sendingEnabled} -> sendingEnabled) (\s@PutAccountSendingAttributes' {} a -> s {sendingEnabled = a} :: PutAccountSendingAttributes)
+
+instance Core.AWSRequest PutAccountSendingAttributes where
+  type
+    AWSResponse PutAccountSendingAttributes =
+      PutAccountSendingAttributesResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutAccountSendingAttributesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutAccountSendingAttributes where
+  hashWithSalt _salt PutAccountSendingAttributes' {..} =
+    _salt `Prelude.hashWithSalt` sendingEnabled
+
+instance Prelude.NFData PutAccountSendingAttributes where
+  rnf PutAccountSendingAttributes' {..} =
+    Prelude.rnf sendingEnabled
+
+instance Data.ToHeaders PutAccountSendingAttributes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutAccountSendingAttributes where
+  toJSON PutAccountSendingAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SendingEnabled" Data..=)
+              Prelude.<$> sendingEnabled
+          ]
+      )
+
+instance Data.ToPath PutAccountSendingAttributes where
+  toPath = Prelude.const "/v2/email/account/sending"
+
+instance Data.ToQuery PutAccountSendingAttributes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newPutAccountSendingAttributesResponse' smart constructor.
+data PutAccountSendingAttributesResponse = PutAccountSendingAttributesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAccountSendingAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putAccountSendingAttributesResponse_httpStatus' - The response's http status code.
+newPutAccountSendingAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutAccountSendingAttributesResponse
+newPutAccountSendingAttributesResponse pHttpStatus_ =
+  PutAccountSendingAttributesResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putAccountSendingAttributesResponse_httpStatus :: Lens.Lens' PutAccountSendingAttributesResponse Prelude.Int
+putAccountSendingAttributesResponse_httpStatus = Lens.lens (\PutAccountSendingAttributesResponse' {httpStatus} -> httpStatus) (\s@PutAccountSendingAttributesResponse' {} a -> s {httpStatus = a} :: PutAccountSendingAttributesResponse)
+
+instance
+  Prelude.NFData
+    PutAccountSendingAttributesResponse
+  where
+  rnf PutAccountSendingAttributesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutAccountSuppressionAttributes.hs b/gen/Amazonka/SESV2/PutAccountSuppressionAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutAccountSuppressionAttributes.hs
@@ -0,0 +1,210 @@
+{-# 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.SESV2.PutAccountSuppressionAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Change the settings for the account-level suppression list.
+module Amazonka.SESV2.PutAccountSuppressionAttributes
+  ( -- * Creating a Request
+    PutAccountSuppressionAttributes (..),
+    newPutAccountSuppressionAttributes,
+
+    -- * Request Lenses
+    putAccountSuppressionAttributes_suppressedReasons,
+
+    -- * Destructuring the Response
+    PutAccountSuppressionAttributesResponse (..),
+    newPutAccountSuppressionAttributesResponse,
+
+    -- * Response Lenses
+    putAccountSuppressionAttributesResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to change your account\'s suppression preferences.
+--
+-- /See:/ 'newPutAccountSuppressionAttributes' smart constructor.
+data PutAccountSuppressionAttributes = PutAccountSuppressionAttributes'
+  { -- | A list that contains the reasons that email addresses will be
+    -- automatically added to the suppression list for your account. This list
+    -- can contain any or all of the following:
+    --
+    -- -   @COMPLAINT@ – Amazon SES adds an email address to the suppression
+    --     list for your account when a message sent to that address results in
+    --     a complaint.
+    --
+    -- -   @BOUNCE@ – Amazon SES adds an email address to the suppression list
+    --     for your account when a message sent to that address results in a
+    --     hard bounce.
+    suppressedReasons :: Prelude.Maybe [SuppressionListReason]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAccountSuppressionAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'suppressedReasons', 'putAccountSuppressionAttributes_suppressedReasons' - A list that contains the reasons that email addresses will be
+-- automatically added to the suppression list for your account. This list
+-- can contain any or all of the following:
+--
+-- -   @COMPLAINT@ – Amazon SES adds an email address to the suppression
+--     list for your account when a message sent to that address results in
+--     a complaint.
+--
+-- -   @BOUNCE@ – Amazon SES adds an email address to the suppression list
+--     for your account when a message sent to that address results in a
+--     hard bounce.
+newPutAccountSuppressionAttributes ::
+  PutAccountSuppressionAttributes
+newPutAccountSuppressionAttributes =
+  PutAccountSuppressionAttributes'
+    { suppressedReasons =
+        Prelude.Nothing
+    }
+
+-- | A list that contains the reasons that email addresses will be
+-- automatically added to the suppression list for your account. This list
+-- can contain any or all of the following:
+--
+-- -   @COMPLAINT@ – Amazon SES adds an email address to the suppression
+--     list for your account when a message sent to that address results in
+--     a complaint.
+--
+-- -   @BOUNCE@ – Amazon SES adds an email address to the suppression list
+--     for your account when a message sent to that address results in a
+--     hard bounce.
+putAccountSuppressionAttributes_suppressedReasons :: Lens.Lens' PutAccountSuppressionAttributes (Prelude.Maybe [SuppressionListReason])
+putAccountSuppressionAttributes_suppressedReasons = Lens.lens (\PutAccountSuppressionAttributes' {suppressedReasons} -> suppressedReasons) (\s@PutAccountSuppressionAttributes' {} a -> s {suppressedReasons = a} :: PutAccountSuppressionAttributes) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSRequest
+    PutAccountSuppressionAttributes
+  where
+  type
+    AWSResponse PutAccountSuppressionAttributes =
+      PutAccountSuppressionAttributesResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutAccountSuppressionAttributesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutAccountSuppressionAttributes
+  where
+  hashWithSalt
+    _salt
+    PutAccountSuppressionAttributes' {..} =
+      _salt `Prelude.hashWithSalt` suppressedReasons
+
+instance
+  Prelude.NFData
+    PutAccountSuppressionAttributes
+  where
+  rnf PutAccountSuppressionAttributes' {..} =
+    Prelude.rnf suppressedReasons
+
+instance
+  Data.ToHeaders
+    PutAccountSuppressionAttributes
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutAccountSuppressionAttributes where
+  toJSON PutAccountSuppressionAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SuppressedReasons" Data..=)
+              Prelude.<$> suppressedReasons
+          ]
+      )
+
+instance Data.ToPath PutAccountSuppressionAttributes where
+  toPath =
+    Prelude.const "/v2/email/account/suppression"
+
+instance Data.ToQuery PutAccountSuppressionAttributes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newPutAccountSuppressionAttributesResponse' smart constructor.
+data PutAccountSuppressionAttributesResponse = PutAccountSuppressionAttributesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAccountSuppressionAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putAccountSuppressionAttributesResponse_httpStatus' - The response's http status code.
+newPutAccountSuppressionAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutAccountSuppressionAttributesResponse
+newPutAccountSuppressionAttributesResponse
+  pHttpStatus_ =
+    PutAccountSuppressionAttributesResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+putAccountSuppressionAttributesResponse_httpStatus :: Lens.Lens' PutAccountSuppressionAttributesResponse Prelude.Int
+putAccountSuppressionAttributesResponse_httpStatus = Lens.lens (\PutAccountSuppressionAttributesResponse' {httpStatus} -> httpStatus) (\s@PutAccountSuppressionAttributesResponse' {} a -> s {httpStatus = a} :: PutAccountSuppressionAttributesResponse)
+
+instance
+  Prelude.NFData
+    PutAccountSuppressionAttributesResponse
+  where
+  rnf PutAccountSuppressionAttributesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutAccountVdmAttributes.hs b/gen/Amazonka/SESV2/PutAccountVdmAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutAccountVdmAttributes.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.PutAccountVdmAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update your Amazon SES account VDM attributes.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.PutAccountVdmAttributes
+  ( -- * Creating a Request
+    PutAccountVdmAttributes (..),
+    newPutAccountVdmAttributes,
+
+    -- * Request Lenses
+    putAccountVdmAttributes_vdmAttributes,
+
+    -- * Destructuring the Response
+    PutAccountVdmAttributesResponse (..),
+    newPutAccountVdmAttributesResponse,
+
+    -- * Response Lenses
+    putAccountVdmAttributesResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to submit new account VDM attributes.
+--
+-- /See:/ 'newPutAccountVdmAttributes' smart constructor.
+data PutAccountVdmAttributes = PutAccountVdmAttributes'
+  { -- | The VDM attributes that you wish to apply to your Amazon SES account.
+    vdmAttributes :: VdmAttributes
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAccountVdmAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vdmAttributes', 'putAccountVdmAttributes_vdmAttributes' - The VDM attributes that you wish to apply to your Amazon SES account.
+newPutAccountVdmAttributes ::
+  -- | 'vdmAttributes'
+  VdmAttributes ->
+  PutAccountVdmAttributes
+newPutAccountVdmAttributes pVdmAttributes_ =
+  PutAccountVdmAttributes'
+    { vdmAttributes =
+        pVdmAttributes_
+    }
+
+-- | The VDM attributes that you wish to apply to your Amazon SES account.
+putAccountVdmAttributes_vdmAttributes :: Lens.Lens' PutAccountVdmAttributes VdmAttributes
+putAccountVdmAttributes_vdmAttributes = Lens.lens (\PutAccountVdmAttributes' {vdmAttributes} -> vdmAttributes) (\s@PutAccountVdmAttributes' {} a -> s {vdmAttributes = a} :: PutAccountVdmAttributes)
+
+instance Core.AWSRequest PutAccountVdmAttributes where
+  type
+    AWSResponse PutAccountVdmAttributes =
+      PutAccountVdmAttributesResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutAccountVdmAttributesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutAccountVdmAttributes where
+  hashWithSalt _salt PutAccountVdmAttributes' {..} =
+    _salt `Prelude.hashWithSalt` vdmAttributes
+
+instance Prelude.NFData PutAccountVdmAttributes where
+  rnf PutAccountVdmAttributes' {..} =
+    Prelude.rnf vdmAttributes
+
+instance Data.ToHeaders PutAccountVdmAttributes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutAccountVdmAttributes where
+  toJSON PutAccountVdmAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("VdmAttributes" Data..= vdmAttributes)
+          ]
+      )
+
+instance Data.ToPath PutAccountVdmAttributes where
+  toPath = Prelude.const "/v2/email/account/vdm"
+
+instance Data.ToQuery PutAccountVdmAttributes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutAccountVdmAttributesResponse' smart constructor.
+data PutAccountVdmAttributesResponse = PutAccountVdmAttributesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAccountVdmAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putAccountVdmAttributesResponse_httpStatus' - The response's http status code.
+newPutAccountVdmAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutAccountVdmAttributesResponse
+newPutAccountVdmAttributesResponse pHttpStatus_ =
+  PutAccountVdmAttributesResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putAccountVdmAttributesResponse_httpStatus :: Lens.Lens' PutAccountVdmAttributesResponse Prelude.Int
+putAccountVdmAttributesResponse_httpStatus = Lens.lens (\PutAccountVdmAttributesResponse' {httpStatus} -> httpStatus) (\s@PutAccountVdmAttributesResponse' {} a -> s {httpStatus = a} :: PutAccountVdmAttributesResponse)
+
+instance
+  Prelude.NFData
+    PutAccountVdmAttributesResponse
+  where
+  rnf PutAccountVdmAttributesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutConfigurationSetDeliveryOptions.hs b/gen/Amazonka/SESV2/PutConfigurationSetDeliveryOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutConfigurationSetDeliveryOptions.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.SESV2.PutConfigurationSetDeliveryOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associate a configuration set with a dedicated IP pool. You can use
+-- dedicated IP pools to create groups of dedicated IP addresses for
+-- sending specific types of email.
+module Amazonka.SESV2.PutConfigurationSetDeliveryOptions
+  ( -- * Creating a Request
+    PutConfigurationSetDeliveryOptions (..),
+    newPutConfigurationSetDeliveryOptions,
+
+    -- * Request Lenses
+    putConfigurationSetDeliveryOptions_sendingPoolName,
+    putConfigurationSetDeliveryOptions_tlsPolicy,
+    putConfigurationSetDeliveryOptions_configurationSetName,
+
+    -- * Destructuring the Response
+    PutConfigurationSetDeliveryOptionsResponse (..),
+    newPutConfigurationSetDeliveryOptionsResponse,
+
+    -- * Response Lenses
+    putConfigurationSetDeliveryOptionsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to associate a configuration set with a dedicated IP pool.
+--
+-- /See:/ 'newPutConfigurationSetDeliveryOptions' smart constructor.
+data PutConfigurationSetDeliveryOptions = PutConfigurationSetDeliveryOptions'
+  { -- | The name of the dedicated IP pool to associate with the configuration
+    -- set.
+    sendingPoolName :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether messages that use the configuration set are required
+    -- to use Transport Layer Security (TLS). If the value is @Require@,
+    -- messages are only delivered if a TLS connection can be established. If
+    -- the value is @Optional@, messages can be delivered in plain text if a
+    -- TLS connection can\'t be established.
+    tlsPolicy :: Prelude.Maybe TlsPolicy,
+    -- | The name of the configuration set to associate with a dedicated IP pool.
+    configurationSetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutConfigurationSetDeliveryOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sendingPoolName', 'putConfigurationSetDeliveryOptions_sendingPoolName' - The name of the dedicated IP pool to associate with the configuration
+-- set.
+--
+-- 'tlsPolicy', 'putConfigurationSetDeliveryOptions_tlsPolicy' - Specifies whether messages that use the configuration set are required
+-- to use Transport Layer Security (TLS). If the value is @Require@,
+-- messages are only delivered if a TLS connection can be established. If
+-- the value is @Optional@, messages can be delivered in plain text if a
+-- TLS connection can\'t be established.
+--
+-- 'configurationSetName', 'putConfigurationSetDeliveryOptions_configurationSetName' - The name of the configuration set to associate with a dedicated IP pool.
+newPutConfigurationSetDeliveryOptions ::
+  -- | 'configurationSetName'
+  Prelude.Text ->
+  PutConfigurationSetDeliveryOptions
+newPutConfigurationSetDeliveryOptions
+  pConfigurationSetName_ =
+    PutConfigurationSetDeliveryOptions'
+      { sendingPoolName =
+          Prelude.Nothing,
+        tlsPolicy = Prelude.Nothing,
+        configurationSetName =
+          pConfigurationSetName_
+      }
+
+-- | The name of the dedicated IP pool to associate with the configuration
+-- set.
+putConfigurationSetDeliveryOptions_sendingPoolName :: Lens.Lens' PutConfigurationSetDeliveryOptions (Prelude.Maybe Prelude.Text)
+putConfigurationSetDeliveryOptions_sendingPoolName = Lens.lens (\PutConfigurationSetDeliveryOptions' {sendingPoolName} -> sendingPoolName) (\s@PutConfigurationSetDeliveryOptions' {} a -> s {sendingPoolName = a} :: PutConfigurationSetDeliveryOptions)
+
+-- | Specifies whether messages that use the configuration set are required
+-- to use Transport Layer Security (TLS). If the value is @Require@,
+-- messages are only delivered if a TLS connection can be established. If
+-- the value is @Optional@, messages can be delivered in plain text if a
+-- TLS connection can\'t be established.
+putConfigurationSetDeliveryOptions_tlsPolicy :: Lens.Lens' PutConfigurationSetDeliveryOptions (Prelude.Maybe TlsPolicy)
+putConfigurationSetDeliveryOptions_tlsPolicy = Lens.lens (\PutConfigurationSetDeliveryOptions' {tlsPolicy} -> tlsPolicy) (\s@PutConfigurationSetDeliveryOptions' {} a -> s {tlsPolicy = a} :: PutConfigurationSetDeliveryOptions)
+
+-- | The name of the configuration set to associate with a dedicated IP pool.
+putConfigurationSetDeliveryOptions_configurationSetName :: Lens.Lens' PutConfigurationSetDeliveryOptions Prelude.Text
+putConfigurationSetDeliveryOptions_configurationSetName = Lens.lens (\PutConfigurationSetDeliveryOptions' {configurationSetName} -> configurationSetName) (\s@PutConfigurationSetDeliveryOptions' {} a -> s {configurationSetName = a} :: PutConfigurationSetDeliveryOptions)
+
+instance
+  Core.AWSRequest
+    PutConfigurationSetDeliveryOptions
+  where
+  type
+    AWSResponse PutConfigurationSetDeliveryOptions =
+      PutConfigurationSetDeliveryOptionsResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutConfigurationSetDeliveryOptionsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutConfigurationSetDeliveryOptions
+  where
+  hashWithSalt
+    _salt
+    PutConfigurationSetDeliveryOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` sendingPoolName
+        `Prelude.hashWithSalt` tlsPolicy
+        `Prelude.hashWithSalt` configurationSetName
+
+instance
+  Prelude.NFData
+    PutConfigurationSetDeliveryOptions
+  where
+  rnf PutConfigurationSetDeliveryOptions' {..} =
+    Prelude.rnf sendingPoolName
+      `Prelude.seq` Prelude.rnf tlsPolicy
+      `Prelude.seq` Prelude.rnf configurationSetName
+
+instance
+  Data.ToHeaders
+    PutConfigurationSetDeliveryOptions
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    PutConfigurationSetDeliveryOptions
+  where
+  toJSON PutConfigurationSetDeliveryOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SendingPoolName" Data..=)
+              Prelude.<$> sendingPoolName,
+            ("TlsPolicy" Data..=) Prelude.<$> tlsPolicy
+          ]
+      )
+
+instance
+  Data.ToPath
+    PutConfigurationSetDeliveryOptions
+  where
+  toPath PutConfigurationSetDeliveryOptions' {..} =
+    Prelude.mconcat
+      [ "/v2/email/configuration-sets/",
+        Data.toBS configurationSetName,
+        "/delivery-options"
+      ]
+
+instance
+  Data.ToQuery
+    PutConfigurationSetDeliveryOptions
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newPutConfigurationSetDeliveryOptionsResponse' smart constructor.
+data PutConfigurationSetDeliveryOptionsResponse = PutConfigurationSetDeliveryOptionsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutConfigurationSetDeliveryOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putConfigurationSetDeliveryOptionsResponse_httpStatus' - The response's http status code.
+newPutConfigurationSetDeliveryOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutConfigurationSetDeliveryOptionsResponse
+newPutConfigurationSetDeliveryOptionsResponse
+  pHttpStatus_ =
+    PutConfigurationSetDeliveryOptionsResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+putConfigurationSetDeliveryOptionsResponse_httpStatus :: Lens.Lens' PutConfigurationSetDeliveryOptionsResponse Prelude.Int
+putConfigurationSetDeliveryOptionsResponse_httpStatus = Lens.lens (\PutConfigurationSetDeliveryOptionsResponse' {httpStatus} -> httpStatus) (\s@PutConfigurationSetDeliveryOptionsResponse' {} a -> s {httpStatus = a} :: PutConfigurationSetDeliveryOptionsResponse)
+
+instance
+  Prelude.NFData
+    PutConfigurationSetDeliveryOptionsResponse
+  where
+  rnf PutConfigurationSetDeliveryOptionsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutConfigurationSetReputationOptions.hs b/gen/Amazonka/SESV2/PutConfigurationSetReputationOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutConfigurationSetReputationOptions.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.SESV2.PutConfigurationSetReputationOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enable or disable collection of reputation metrics for emails that you
+-- send using a particular configuration set in a specific Amazon Web
+-- Services Region.
+module Amazonka.SESV2.PutConfigurationSetReputationOptions
+  ( -- * Creating a Request
+    PutConfigurationSetReputationOptions (..),
+    newPutConfigurationSetReputationOptions,
+
+    -- * Request Lenses
+    putConfigurationSetReputationOptions_reputationMetricsEnabled,
+    putConfigurationSetReputationOptions_configurationSetName,
+
+    -- * Destructuring the Response
+    PutConfigurationSetReputationOptionsResponse (..),
+    newPutConfigurationSetReputationOptionsResponse,
+
+    -- * Response Lenses
+    putConfigurationSetReputationOptionsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to enable or disable tracking of reputation metrics for a
+-- configuration set.
+--
+-- /See:/ 'newPutConfigurationSetReputationOptions' smart constructor.
+data PutConfigurationSetReputationOptions = PutConfigurationSetReputationOptions'
+  { -- | If @true@, tracking of reputation metrics is enabled for the
+    -- configuration set. If @false@, tracking of reputation metrics is
+    -- disabled for the configuration set.
+    reputationMetricsEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the configuration set.
+    configurationSetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutConfigurationSetReputationOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reputationMetricsEnabled', 'putConfigurationSetReputationOptions_reputationMetricsEnabled' - If @true@, tracking of reputation metrics is enabled for the
+-- configuration set. If @false@, tracking of reputation metrics is
+-- disabled for the configuration set.
+--
+-- 'configurationSetName', 'putConfigurationSetReputationOptions_configurationSetName' - The name of the configuration set.
+newPutConfigurationSetReputationOptions ::
+  -- | 'configurationSetName'
+  Prelude.Text ->
+  PutConfigurationSetReputationOptions
+newPutConfigurationSetReputationOptions
+  pConfigurationSetName_ =
+    PutConfigurationSetReputationOptions'
+      { reputationMetricsEnabled =
+          Prelude.Nothing,
+        configurationSetName =
+          pConfigurationSetName_
+      }
+
+-- | If @true@, tracking of reputation metrics is enabled for the
+-- configuration set. If @false@, tracking of reputation metrics is
+-- disabled for the configuration set.
+putConfigurationSetReputationOptions_reputationMetricsEnabled :: Lens.Lens' PutConfigurationSetReputationOptions (Prelude.Maybe Prelude.Bool)
+putConfigurationSetReputationOptions_reputationMetricsEnabled = Lens.lens (\PutConfigurationSetReputationOptions' {reputationMetricsEnabled} -> reputationMetricsEnabled) (\s@PutConfigurationSetReputationOptions' {} a -> s {reputationMetricsEnabled = a} :: PutConfigurationSetReputationOptions)
+
+-- | The name of the configuration set.
+putConfigurationSetReputationOptions_configurationSetName :: Lens.Lens' PutConfigurationSetReputationOptions Prelude.Text
+putConfigurationSetReputationOptions_configurationSetName = Lens.lens (\PutConfigurationSetReputationOptions' {configurationSetName} -> configurationSetName) (\s@PutConfigurationSetReputationOptions' {} a -> s {configurationSetName = a} :: PutConfigurationSetReputationOptions)
+
+instance
+  Core.AWSRequest
+    PutConfigurationSetReputationOptions
+  where
+  type
+    AWSResponse PutConfigurationSetReputationOptions =
+      PutConfigurationSetReputationOptionsResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutConfigurationSetReputationOptionsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutConfigurationSetReputationOptions
+  where
+  hashWithSalt
+    _salt
+    PutConfigurationSetReputationOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` reputationMetricsEnabled
+        `Prelude.hashWithSalt` configurationSetName
+
+instance
+  Prelude.NFData
+    PutConfigurationSetReputationOptions
+  where
+  rnf PutConfigurationSetReputationOptions' {..} =
+    Prelude.rnf reputationMetricsEnabled
+      `Prelude.seq` Prelude.rnf configurationSetName
+
+instance
+  Data.ToHeaders
+    PutConfigurationSetReputationOptions
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    PutConfigurationSetReputationOptions
+  where
+  toJSON PutConfigurationSetReputationOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ReputationMetricsEnabled" Data..=)
+              Prelude.<$> reputationMetricsEnabled
+          ]
+      )
+
+instance
+  Data.ToPath
+    PutConfigurationSetReputationOptions
+  where
+  toPath PutConfigurationSetReputationOptions' {..} =
+    Prelude.mconcat
+      [ "/v2/email/configuration-sets/",
+        Data.toBS configurationSetName,
+        "/reputation-options"
+      ]
+
+instance
+  Data.ToQuery
+    PutConfigurationSetReputationOptions
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newPutConfigurationSetReputationOptionsResponse' smart constructor.
+data PutConfigurationSetReputationOptionsResponse = PutConfigurationSetReputationOptionsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutConfigurationSetReputationOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putConfigurationSetReputationOptionsResponse_httpStatus' - The response's http status code.
+newPutConfigurationSetReputationOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutConfigurationSetReputationOptionsResponse
+newPutConfigurationSetReputationOptionsResponse
+  pHttpStatus_ =
+    PutConfigurationSetReputationOptionsResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+putConfigurationSetReputationOptionsResponse_httpStatus :: Lens.Lens' PutConfigurationSetReputationOptionsResponse Prelude.Int
+putConfigurationSetReputationOptionsResponse_httpStatus = Lens.lens (\PutConfigurationSetReputationOptionsResponse' {httpStatus} -> httpStatus) (\s@PutConfigurationSetReputationOptionsResponse' {} a -> s {httpStatus = a} :: PutConfigurationSetReputationOptionsResponse)
+
+instance
+  Prelude.NFData
+    PutConfigurationSetReputationOptionsResponse
+  where
+  rnf PutConfigurationSetReputationOptionsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutConfigurationSetSendingOptions.hs b/gen/Amazonka/SESV2/PutConfigurationSetSendingOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutConfigurationSetSendingOptions.hs
@@ -0,0 +1,218 @@
+{-# 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.SESV2.PutConfigurationSetSendingOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enable or disable email sending for messages that use a particular
+-- configuration set in a specific Amazon Web Services Region.
+module Amazonka.SESV2.PutConfigurationSetSendingOptions
+  ( -- * Creating a Request
+    PutConfigurationSetSendingOptions (..),
+    newPutConfigurationSetSendingOptions,
+
+    -- * Request Lenses
+    putConfigurationSetSendingOptions_sendingEnabled,
+    putConfigurationSetSendingOptions_configurationSetName,
+
+    -- * Destructuring the Response
+    PutConfigurationSetSendingOptionsResponse (..),
+    newPutConfigurationSetSendingOptionsResponse,
+
+    -- * Response Lenses
+    putConfigurationSetSendingOptionsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to enable or disable the ability of Amazon SES to send emails
+-- that use a specific configuration set.
+--
+-- /See:/ 'newPutConfigurationSetSendingOptions' smart constructor.
+data PutConfigurationSetSendingOptions = PutConfigurationSetSendingOptions'
+  { -- | If @true@, email sending is enabled for the configuration set. If
+    -- @false@, email sending is disabled for the configuration set.
+    sendingEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the configuration set to enable or disable email sending
+    -- for.
+    configurationSetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutConfigurationSetSendingOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sendingEnabled', 'putConfigurationSetSendingOptions_sendingEnabled' - If @true@, email sending is enabled for the configuration set. If
+-- @false@, email sending is disabled for the configuration set.
+--
+-- 'configurationSetName', 'putConfigurationSetSendingOptions_configurationSetName' - The name of the configuration set to enable or disable email sending
+-- for.
+newPutConfigurationSetSendingOptions ::
+  -- | 'configurationSetName'
+  Prelude.Text ->
+  PutConfigurationSetSendingOptions
+newPutConfigurationSetSendingOptions
+  pConfigurationSetName_ =
+    PutConfigurationSetSendingOptions'
+      { sendingEnabled =
+          Prelude.Nothing,
+        configurationSetName =
+          pConfigurationSetName_
+      }
+
+-- | If @true@, email sending is enabled for the configuration set. If
+-- @false@, email sending is disabled for the configuration set.
+putConfigurationSetSendingOptions_sendingEnabled :: Lens.Lens' PutConfigurationSetSendingOptions (Prelude.Maybe Prelude.Bool)
+putConfigurationSetSendingOptions_sendingEnabled = Lens.lens (\PutConfigurationSetSendingOptions' {sendingEnabled} -> sendingEnabled) (\s@PutConfigurationSetSendingOptions' {} a -> s {sendingEnabled = a} :: PutConfigurationSetSendingOptions)
+
+-- | The name of the configuration set to enable or disable email sending
+-- for.
+putConfigurationSetSendingOptions_configurationSetName :: Lens.Lens' PutConfigurationSetSendingOptions Prelude.Text
+putConfigurationSetSendingOptions_configurationSetName = Lens.lens (\PutConfigurationSetSendingOptions' {configurationSetName} -> configurationSetName) (\s@PutConfigurationSetSendingOptions' {} a -> s {configurationSetName = a} :: PutConfigurationSetSendingOptions)
+
+instance
+  Core.AWSRequest
+    PutConfigurationSetSendingOptions
+  where
+  type
+    AWSResponse PutConfigurationSetSendingOptions =
+      PutConfigurationSetSendingOptionsResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutConfigurationSetSendingOptionsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutConfigurationSetSendingOptions
+  where
+  hashWithSalt
+    _salt
+    PutConfigurationSetSendingOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` sendingEnabled
+        `Prelude.hashWithSalt` configurationSetName
+
+instance
+  Prelude.NFData
+    PutConfigurationSetSendingOptions
+  where
+  rnf PutConfigurationSetSendingOptions' {..} =
+    Prelude.rnf sendingEnabled
+      `Prelude.seq` Prelude.rnf configurationSetName
+
+instance
+  Data.ToHeaders
+    PutConfigurationSetSendingOptions
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    PutConfigurationSetSendingOptions
+  where
+  toJSON PutConfigurationSetSendingOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SendingEnabled" Data..=)
+              Prelude.<$> sendingEnabled
+          ]
+      )
+
+instance
+  Data.ToPath
+    PutConfigurationSetSendingOptions
+  where
+  toPath PutConfigurationSetSendingOptions' {..} =
+    Prelude.mconcat
+      [ "/v2/email/configuration-sets/",
+        Data.toBS configurationSetName,
+        "/sending"
+      ]
+
+instance
+  Data.ToQuery
+    PutConfigurationSetSendingOptions
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newPutConfigurationSetSendingOptionsResponse' smart constructor.
+data PutConfigurationSetSendingOptionsResponse = PutConfigurationSetSendingOptionsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutConfigurationSetSendingOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putConfigurationSetSendingOptionsResponse_httpStatus' - The response's http status code.
+newPutConfigurationSetSendingOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutConfigurationSetSendingOptionsResponse
+newPutConfigurationSetSendingOptionsResponse
+  pHttpStatus_ =
+    PutConfigurationSetSendingOptionsResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+putConfigurationSetSendingOptionsResponse_httpStatus :: Lens.Lens' PutConfigurationSetSendingOptionsResponse Prelude.Int
+putConfigurationSetSendingOptionsResponse_httpStatus = Lens.lens (\PutConfigurationSetSendingOptionsResponse' {httpStatus} -> httpStatus) (\s@PutConfigurationSetSendingOptionsResponse' {} a -> s {httpStatus = a} :: PutConfigurationSetSendingOptionsResponse)
+
+instance
+  Prelude.NFData
+    PutConfigurationSetSendingOptionsResponse
+  where
+  rnf PutConfigurationSetSendingOptionsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutConfigurationSetSuppressionOptions.hs b/gen/Amazonka/SESV2/PutConfigurationSetSuppressionOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutConfigurationSetSuppressionOptions.hs
@@ -0,0 +1,247 @@
+{-# 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.SESV2.PutConfigurationSetSuppressionOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Specify the account suppression list preferences for a configuration
+-- set.
+module Amazonka.SESV2.PutConfigurationSetSuppressionOptions
+  ( -- * Creating a Request
+    PutConfigurationSetSuppressionOptions (..),
+    newPutConfigurationSetSuppressionOptions,
+
+    -- * Request Lenses
+    putConfigurationSetSuppressionOptions_suppressedReasons,
+    putConfigurationSetSuppressionOptions_configurationSetName,
+
+    -- * Destructuring the Response
+    PutConfigurationSetSuppressionOptionsResponse (..),
+    newPutConfigurationSetSuppressionOptionsResponse,
+
+    -- * Response Lenses
+    putConfigurationSetSuppressionOptionsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to change the account suppression list preferences for a
+-- specific configuration set.
+--
+-- /See:/ 'newPutConfigurationSetSuppressionOptions' smart constructor.
+data PutConfigurationSetSuppressionOptions = PutConfigurationSetSuppressionOptions'
+  { -- | A list that contains the reasons that email addresses are automatically
+    -- added to the suppression list for your account. This list can contain
+    -- any or all of the following:
+    --
+    -- -   @COMPLAINT@ – Amazon SES adds an email address to the suppression
+    --     list for your account when a message sent to that address results in
+    --     a complaint.
+    --
+    -- -   @BOUNCE@ – Amazon SES adds an email address to the suppression list
+    --     for your account when a message sent to that address results in a
+    --     hard bounce.
+    suppressedReasons :: Prelude.Maybe [SuppressionListReason],
+    -- | The name of the configuration set to change the suppression list
+    -- preferences for.
+    configurationSetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutConfigurationSetSuppressionOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'suppressedReasons', 'putConfigurationSetSuppressionOptions_suppressedReasons' - A list that contains the reasons that email addresses are automatically
+-- added to the suppression list for your account. This list can contain
+-- any or all of the following:
+--
+-- -   @COMPLAINT@ – Amazon SES adds an email address to the suppression
+--     list for your account when a message sent to that address results in
+--     a complaint.
+--
+-- -   @BOUNCE@ – Amazon SES adds an email address to the suppression list
+--     for your account when a message sent to that address results in a
+--     hard bounce.
+--
+-- 'configurationSetName', 'putConfigurationSetSuppressionOptions_configurationSetName' - The name of the configuration set to change the suppression list
+-- preferences for.
+newPutConfigurationSetSuppressionOptions ::
+  -- | 'configurationSetName'
+  Prelude.Text ->
+  PutConfigurationSetSuppressionOptions
+newPutConfigurationSetSuppressionOptions
+  pConfigurationSetName_ =
+    PutConfigurationSetSuppressionOptions'
+      { suppressedReasons =
+          Prelude.Nothing,
+        configurationSetName =
+          pConfigurationSetName_
+      }
+
+-- | A list that contains the reasons that email addresses are automatically
+-- added to the suppression list for your account. This list can contain
+-- any or all of the following:
+--
+-- -   @COMPLAINT@ – Amazon SES adds an email address to the suppression
+--     list for your account when a message sent to that address results in
+--     a complaint.
+--
+-- -   @BOUNCE@ – Amazon SES adds an email address to the suppression list
+--     for your account when a message sent to that address results in a
+--     hard bounce.
+putConfigurationSetSuppressionOptions_suppressedReasons :: Lens.Lens' PutConfigurationSetSuppressionOptions (Prelude.Maybe [SuppressionListReason])
+putConfigurationSetSuppressionOptions_suppressedReasons = Lens.lens (\PutConfigurationSetSuppressionOptions' {suppressedReasons} -> suppressedReasons) (\s@PutConfigurationSetSuppressionOptions' {} a -> s {suppressedReasons = a} :: PutConfigurationSetSuppressionOptions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the configuration set to change the suppression list
+-- preferences for.
+putConfigurationSetSuppressionOptions_configurationSetName :: Lens.Lens' PutConfigurationSetSuppressionOptions Prelude.Text
+putConfigurationSetSuppressionOptions_configurationSetName = Lens.lens (\PutConfigurationSetSuppressionOptions' {configurationSetName} -> configurationSetName) (\s@PutConfigurationSetSuppressionOptions' {} a -> s {configurationSetName = a} :: PutConfigurationSetSuppressionOptions)
+
+instance
+  Core.AWSRequest
+    PutConfigurationSetSuppressionOptions
+  where
+  type
+    AWSResponse
+      PutConfigurationSetSuppressionOptions =
+      PutConfigurationSetSuppressionOptionsResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutConfigurationSetSuppressionOptionsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutConfigurationSetSuppressionOptions
+  where
+  hashWithSalt
+    _salt
+    PutConfigurationSetSuppressionOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` suppressedReasons
+        `Prelude.hashWithSalt` configurationSetName
+
+instance
+  Prelude.NFData
+    PutConfigurationSetSuppressionOptions
+  where
+  rnf PutConfigurationSetSuppressionOptions' {..} =
+    Prelude.rnf suppressedReasons
+      `Prelude.seq` Prelude.rnf configurationSetName
+
+instance
+  Data.ToHeaders
+    PutConfigurationSetSuppressionOptions
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    PutConfigurationSetSuppressionOptions
+  where
+  toJSON PutConfigurationSetSuppressionOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SuppressedReasons" Data..=)
+              Prelude.<$> suppressedReasons
+          ]
+      )
+
+instance
+  Data.ToPath
+    PutConfigurationSetSuppressionOptions
+  where
+  toPath PutConfigurationSetSuppressionOptions' {..} =
+    Prelude.mconcat
+      [ "/v2/email/configuration-sets/",
+        Data.toBS configurationSetName,
+        "/suppression-options"
+      ]
+
+instance
+  Data.ToQuery
+    PutConfigurationSetSuppressionOptions
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newPutConfigurationSetSuppressionOptionsResponse' smart constructor.
+data PutConfigurationSetSuppressionOptionsResponse = PutConfigurationSetSuppressionOptionsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutConfigurationSetSuppressionOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putConfigurationSetSuppressionOptionsResponse_httpStatus' - The response's http status code.
+newPutConfigurationSetSuppressionOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutConfigurationSetSuppressionOptionsResponse
+newPutConfigurationSetSuppressionOptionsResponse
+  pHttpStatus_ =
+    PutConfigurationSetSuppressionOptionsResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+putConfigurationSetSuppressionOptionsResponse_httpStatus :: Lens.Lens' PutConfigurationSetSuppressionOptionsResponse Prelude.Int
+putConfigurationSetSuppressionOptionsResponse_httpStatus = Lens.lens (\PutConfigurationSetSuppressionOptionsResponse' {httpStatus} -> httpStatus) (\s@PutConfigurationSetSuppressionOptionsResponse' {} a -> s {httpStatus = a} :: PutConfigurationSetSuppressionOptionsResponse)
+
+instance
+  Prelude.NFData
+    PutConfigurationSetSuppressionOptionsResponse
+  where
+  rnf
+    PutConfigurationSetSuppressionOptionsResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutConfigurationSetTrackingOptions.hs b/gen/Amazonka/SESV2/PutConfigurationSetTrackingOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutConfigurationSetTrackingOptions.hs
@@ -0,0 +1,212 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.PutConfigurationSetTrackingOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Specify a custom domain to use for open and click tracking elements in
+-- email that you send.
+module Amazonka.SESV2.PutConfigurationSetTrackingOptions
+  ( -- * Creating a Request
+    PutConfigurationSetTrackingOptions (..),
+    newPutConfigurationSetTrackingOptions,
+
+    -- * Request Lenses
+    putConfigurationSetTrackingOptions_customRedirectDomain,
+    putConfigurationSetTrackingOptions_configurationSetName,
+
+    -- * Destructuring the Response
+    PutConfigurationSetTrackingOptionsResponse (..),
+    newPutConfigurationSetTrackingOptionsResponse,
+
+    -- * Response Lenses
+    putConfigurationSetTrackingOptionsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to add a custom domain for tracking open and click events to a
+-- configuration set.
+--
+-- /See:/ 'newPutConfigurationSetTrackingOptions' smart constructor.
+data PutConfigurationSetTrackingOptions = PutConfigurationSetTrackingOptions'
+  { -- | The domain to use to track open and click events.
+    customRedirectDomain :: Prelude.Maybe Prelude.Text,
+    -- | The name of the configuration set.
+    configurationSetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutConfigurationSetTrackingOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'customRedirectDomain', 'putConfigurationSetTrackingOptions_customRedirectDomain' - The domain to use to track open and click events.
+--
+-- 'configurationSetName', 'putConfigurationSetTrackingOptions_configurationSetName' - The name of the configuration set.
+newPutConfigurationSetTrackingOptions ::
+  -- | 'configurationSetName'
+  Prelude.Text ->
+  PutConfigurationSetTrackingOptions
+newPutConfigurationSetTrackingOptions
+  pConfigurationSetName_ =
+    PutConfigurationSetTrackingOptions'
+      { customRedirectDomain =
+          Prelude.Nothing,
+        configurationSetName =
+          pConfigurationSetName_
+      }
+
+-- | The domain to use to track open and click events.
+putConfigurationSetTrackingOptions_customRedirectDomain :: Lens.Lens' PutConfigurationSetTrackingOptions (Prelude.Maybe Prelude.Text)
+putConfigurationSetTrackingOptions_customRedirectDomain = Lens.lens (\PutConfigurationSetTrackingOptions' {customRedirectDomain} -> customRedirectDomain) (\s@PutConfigurationSetTrackingOptions' {} a -> s {customRedirectDomain = a} :: PutConfigurationSetTrackingOptions)
+
+-- | The name of the configuration set.
+putConfigurationSetTrackingOptions_configurationSetName :: Lens.Lens' PutConfigurationSetTrackingOptions Prelude.Text
+putConfigurationSetTrackingOptions_configurationSetName = Lens.lens (\PutConfigurationSetTrackingOptions' {configurationSetName} -> configurationSetName) (\s@PutConfigurationSetTrackingOptions' {} a -> s {configurationSetName = a} :: PutConfigurationSetTrackingOptions)
+
+instance
+  Core.AWSRequest
+    PutConfigurationSetTrackingOptions
+  where
+  type
+    AWSResponse PutConfigurationSetTrackingOptions =
+      PutConfigurationSetTrackingOptionsResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutConfigurationSetTrackingOptionsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutConfigurationSetTrackingOptions
+  where
+  hashWithSalt
+    _salt
+    PutConfigurationSetTrackingOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` customRedirectDomain
+        `Prelude.hashWithSalt` configurationSetName
+
+instance
+  Prelude.NFData
+    PutConfigurationSetTrackingOptions
+  where
+  rnf PutConfigurationSetTrackingOptions' {..} =
+    Prelude.rnf customRedirectDomain
+      `Prelude.seq` Prelude.rnf configurationSetName
+
+instance
+  Data.ToHeaders
+    PutConfigurationSetTrackingOptions
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    PutConfigurationSetTrackingOptions
+  where
+  toJSON PutConfigurationSetTrackingOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CustomRedirectDomain" Data..=)
+              Prelude.<$> customRedirectDomain
+          ]
+      )
+
+instance
+  Data.ToPath
+    PutConfigurationSetTrackingOptions
+  where
+  toPath PutConfigurationSetTrackingOptions' {..} =
+    Prelude.mconcat
+      [ "/v2/email/configuration-sets/",
+        Data.toBS configurationSetName,
+        "/tracking-options"
+      ]
+
+instance
+  Data.ToQuery
+    PutConfigurationSetTrackingOptions
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newPutConfigurationSetTrackingOptionsResponse' smart constructor.
+data PutConfigurationSetTrackingOptionsResponse = PutConfigurationSetTrackingOptionsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutConfigurationSetTrackingOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putConfigurationSetTrackingOptionsResponse_httpStatus' - The response's http status code.
+newPutConfigurationSetTrackingOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutConfigurationSetTrackingOptionsResponse
+newPutConfigurationSetTrackingOptionsResponse
+  pHttpStatus_ =
+    PutConfigurationSetTrackingOptionsResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+putConfigurationSetTrackingOptionsResponse_httpStatus :: Lens.Lens' PutConfigurationSetTrackingOptionsResponse Prelude.Int
+putConfigurationSetTrackingOptionsResponse_httpStatus = Lens.lens (\PutConfigurationSetTrackingOptionsResponse' {httpStatus} -> httpStatus) (\s@PutConfigurationSetTrackingOptionsResponse' {} a -> s {httpStatus = a} :: PutConfigurationSetTrackingOptionsResponse)
+
+instance
+  Prelude.NFData
+    PutConfigurationSetTrackingOptionsResponse
+  where
+  rnf PutConfigurationSetTrackingOptionsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutConfigurationSetVdmOptions.hs b/gen/Amazonka/SESV2/PutConfigurationSetVdmOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutConfigurationSetVdmOptions.hs
@@ -0,0 +1,193 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.PutConfigurationSetVdmOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Specify VDM preferences for email that you send using the configuration
+-- set.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.PutConfigurationSetVdmOptions
+  ( -- * Creating a Request
+    PutConfigurationSetVdmOptions (..),
+    newPutConfigurationSetVdmOptions,
+
+    -- * Request Lenses
+    putConfigurationSetVdmOptions_vdmOptions,
+    putConfigurationSetVdmOptions_configurationSetName,
+
+    -- * Destructuring the Response
+    PutConfigurationSetVdmOptionsResponse (..),
+    newPutConfigurationSetVdmOptionsResponse,
+
+    -- * Response Lenses
+    putConfigurationSetVdmOptionsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to add specific VDM settings to a configuration set.
+--
+-- /See:/ 'newPutConfigurationSetVdmOptions' smart constructor.
+data PutConfigurationSetVdmOptions = PutConfigurationSetVdmOptions'
+  { -- | The VDM options to apply to the configuration set.
+    vdmOptions :: Prelude.Maybe VdmOptions,
+    -- | The name of the configuration set.
+    configurationSetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutConfigurationSetVdmOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vdmOptions', 'putConfigurationSetVdmOptions_vdmOptions' - The VDM options to apply to the configuration set.
+--
+-- 'configurationSetName', 'putConfigurationSetVdmOptions_configurationSetName' - The name of the configuration set.
+newPutConfigurationSetVdmOptions ::
+  -- | 'configurationSetName'
+  Prelude.Text ->
+  PutConfigurationSetVdmOptions
+newPutConfigurationSetVdmOptions
+  pConfigurationSetName_ =
+    PutConfigurationSetVdmOptions'
+      { vdmOptions =
+          Prelude.Nothing,
+        configurationSetName =
+          pConfigurationSetName_
+      }
+
+-- | The VDM options to apply to the configuration set.
+putConfigurationSetVdmOptions_vdmOptions :: Lens.Lens' PutConfigurationSetVdmOptions (Prelude.Maybe VdmOptions)
+putConfigurationSetVdmOptions_vdmOptions = Lens.lens (\PutConfigurationSetVdmOptions' {vdmOptions} -> vdmOptions) (\s@PutConfigurationSetVdmOptions' {} a -> s {vdmOptions = a} :: PutConfigurationSetVdmOptions)
+
+-- | The name of the configuration set.
+putConfigurationSetVdmOptions_configurationSetName :: Lens.Lens' PutConfigurationSetVdmOptions Prelude.Text
+putConfigurationSetVdmOptions_configurationSetName = Lens.lens (\PutConfigurationSetVdmOptions' {configurationSetName} -> configurationSetName) (\s@PutConfigurationSetVdmOptions' {} a -> s {configurationSetName = a} :: PutConfigurationSetVdmOptions)
+
+instance
+  Core.AWSRequest
+    PutConfigurationSetVdmOptions
+  where
+  type
+    AWSResponse PutConfigurationSetVdmOptions =
+      PutConfigurationSetVdmOptionsResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutConfigurationSetVdmOptionsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutConfigurationSetVdmOptions
+  where
+  hashWithSalt _salt PutConfigurationSetVdmOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` vdmOptions
+      `Prelude.hashWithSalt` configurationSetName
+
+instance Prelude.NFData PutConfigurationSetVdmOptions where
+  rnf PutConfigurationSetVdmOptions' {..} =
+    Prelude.rnf vdmOptions
+      `Prelude.seq` Prelude.rnf configurationSetName
+
+instance Data.ToHeaders PutConfigurationSetVdmOptions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutConfigurationSetVdmOptions where
+  toJSON PutConfigurationSetVdmOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("VdmOptions" Data..=) Prelude.<$> vdmOptions]
+      )
+
+instance Data.ToPath PutConfigurationSetVdmOptions where
+  toPath PutConfigurationSetVdmOptions' {..} =
+    Prelude.mconcat
+      [ "/v2/email/configuration-sets/",
+        Data.toBS configurationSetName,
+        "/vdm-options"
+      ]
+
+instance Data.ToQuery PutConfigurationSetVdmOptions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newPutConfigurationSetVdmOptionsResponse' smart constructor.
+data PutConfigurationSetVdmOptionsResponse = PutConfigurationSetVdmOptionsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutConfigurationSetVdmOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putConfigurationSetVdmOptionsResponse_httpStatus' - The response's http status code.
+newPutConfigurationSetVdmOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutConfigurationSetVdmOptionsResponse
+newPutConfigurationSetVdmOptionsResponse pHttpStatus_ =
+  PutConfigurationSetVdmOptionsResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putConfigurationSetVdmOptionsResponse_httpStatus :: Lens.Lens' PutConfigurationSetVdmOptionsResponse Prelude.Int
+putConfigurationSetVdmOptionsResponse_httpStatus = Lens.lens (\PutConfigurationSetVdmOptionsResponse' {httpStatus} -> httpStatus) (\s@PutConfigurationSetVdmOptionsResponse' {} a -> s {httpStatus = a} :: PutConfigurationSetVdmOptionsResponse)
+
+instance
+  Prelude.NFData
+    PutConfigurationSetVdmOptionsResponse
+  where
+  rnf PutConfigurationSetVdmOptionsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutDedicatedIpInPool.hs b/gen/Amazonka/SESV2/PutDedicatedIpInPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutDedicatedIpInPool.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.PutDedicatedIpInPool
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Move a dedicated IP address to an existing dedicated IP pool.
+--
+-- The dedicated IP address that you specify must already exist, and must
+-- be associated with your Amazon Web Services account.
+--
+-- The dedicated IP pool you specify must already exist. You can create a
+-- new pool by using the @CreateDedicatedIpPool@ operation.
+module Amazonka.SESV2.PutDedicatedIpInPool
+  ( -- * Creating a Request
+    PutDedicatedIpInPool (..),
+    newPutDedicatedIpInPool,
+
+    -- * Request Lenses
+    putDedicatedIpInPool_ip,
+    putDedicatedIpInPool_destinationPoolName,
+
+    -- * Destructuring the Response
+    PutDedicatedIpInPoolResponse (..),
+    newPutDedicatedIpInPoolResponse,
+
+    -- * Response Lenses
+    putDedicatedIpInPoolResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to move a dedicated IP address to a dedicated IP pool.
+--
+-- /See:/ 'newPutDedicatedIpInPool' smart constructor.
+data PutDedicatedIpInPool = PutDedicatedIpInPool'
+  { -- | The IP address that you want to move to the dedicated IP pool. The value
+    -- you specify has to be a dedicated IP address that\'s associated with
+    -- your Amazon Web Services account.
+    ip :: Prelude.Text,
+    -- | The name of the IP pool that you want to add the dedicated IP address
+    -- to. You have to specify an IP pool that already exists.
+    destinationPoolName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDedicatedIpInPool' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ip', 'putDedicatedIpInPool_ip' - The IP address that you want to move to the dedicated IP pool. The value
+-- you specify has to be a dedicated IP address that\'s associated with
+-- your Amazon Web Services account.
+--
+-- 'destinationPoolName', 'putDedicatedIpInPool_destinationPoolName' - The name of the IP pool that you want to add the dedicated IP address
+-- to. You have to specify an IP pool that already exists.
+newPutDedicatedIpInPool ::
+  -- | 'ip'
+  Prelude.Text ->
+  -- | 'destinationPoolName'
+  Prelude.Text ->
+  PutDedicatedIpInPool
+newPutDedicatedIpInPool pIp_ pDestinationPoolName_ =
+  PutDedicatedIpInPool'
+    { ip = pIp_,
+      destinationPoolName = pDestinationPoolName_
+    }
+
+-- | The IP address that you want to move to the dedicated IP pool. The value
+-- you specify has to be a dedicated IP address that\'s associated with
+-- your Amazon Web Services account.
+putDedicatedIpInPool_ip :: Lens.Lens' PutDedicatedIpInPool Prelude.Text
+putDedicatedIpInPool_ip = Lens.lens (\PutDedicatedIpInPool' {ip} -> ip) (\s@PutDedicatedIpInPool' {} a -> s {ip = a} :: PutDedicatedIpInPool)
+
+-- | The name of the IP pool that you want to add the dedicated IP address
+-- to. You have to specify an IP pool that already exists.
+putDedicatedIpInPool_destinationPoolName :: Lens.Lens' PutDedicatedIpInPool Prelude.Text
+putDedicatedIpInPool_destinationPoolName = Lens.lens (\PutDedicatedIpInPool' {destinationPoolName} -> destinationPoolName) (\s@PutDedicatedIpInPool' {} a -> s {destinationPoolName = a} :: PutDedicatedIpInPool)
+
+instance Core.AWSRequest PutDedicatedIpInPool where
+  type
+    AWSResponse PutDedicatedIpInPool =
+      PutDedicatedIpInPoolResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutDedicatedIpInPoolResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutDedicatedIpInPool where
+  hashWithSalt _salt PutDedicatedIpInPool' {..} =
+    _salt
+      `Prelude.hashWithSalt` ip
+      `Prelude.hashWithSalt` destinationPoolName
+
+instance Prelude.NFData PutDedicatedIpInPool where
+  rnf PutDedicatedIpInPool' {..} =
+    Prelude.rnf ip
+      `Prelude.seq` Prelude.rnf destinationPoolName
+
+instance Data.ToHeaders PutDedicatedIpInPool where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutDedicatedIpInPool where
+  toJSON PutDedicatedIpInPool' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("DestinationPoolName" Data..= destinationPoolName)
+          ]
+      )
+
+instance Data.ToPath PutDedicatedIpInPool where
+  toPath PutDedicatedIpInPool' {..} =
+    Prelude.mconcat
+      ["/v2/email/dedicated-ips/", Data.toBS ip, "/pool"]
+
+instance Data.ToQuery PutDedicatedIpInPool where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newPutDedicatedIpInPoolResponse' smart constructor.
+data PutDedicatedIpInPoolResponse = PutDedicatedIpInPoolResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDedicatedIpInPoolResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putDedicatedIpInPoolResponse_httpStatus' - The response's http status code.
+newPutDedicatedIpInPoolResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutDedicatedIpInPoolResponse
+newPutDedicatedIpInPoolResponse pHttpStatus_ =
+  PutDedicatedIpInPoolResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putDedicatedIpInPoolResponse_httpStatus :: Lens.Lens' PutDedicatedIpInPoolResponse Prelude.Int
+putDedicatedIpInPoolResponse_httpStatus = Lens.lens (\PutDedicatedIpInPoolResponse' {httpStatus} -> httpStatus) (\s@PutDedicatedIpInPoolResponse' {} a -> s {httpStatus = a} :: PutDedicatedIpInPoolResponse)
+
+instance Prelude.NFData PutDedicatedIpInPoolResponse where
+  rnf PutDedicatedIpInPoolResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutDedicatedIpWarmupAttributes.hs b/gen/Amazonka/SESV2/PutDedicatedIpWarmupAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutDedicatedIpWarmupAttributes.hs
@@ -0,0 +1,205 @@
+{-# 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.SESV2.PutDedicatedIpWarmupAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.PutDedicatedIpWarmupAttributes
+  ( -- * Creating a Request
+    PutDedicatedIpWarmupAttributes (..),
+    newPutDedicatedIpWarmupAttributes,
+
+    -- * Request Lenses
+    putDedicatedIpWarmupAttributes_ip,
+    putDedicatedIpWarmupAttributes_warmupPercentage,
+
+    -- * Destructuring the Response
+    PutDedicatedIpWarmupAttributesResponse (..),
+    newPutDedicatedIpWarmupAttributesResponse,
+
+    -- * Response Lenses
+    putDedicatedIpWarmupAttributesResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to change the warm-up attributes for a dedicated IP address.
+-- This operation is useful when you want to resume the warm-up process for
+-- an existing IP address.
+--
+-- /See:/ 'newPutDedicatedIpWarmupAttributes' smart constructor.
+data PutDedicatedIpWarmupAttributes = PutDedicatedIpWarmupAttributes'
+  { -- | The dedicated IP address that you want to update the warm-up attributes
+    -- for.
+    ip :: Prelude.Text,
+    -- | The warm-up percentage that you want to associate with the dedicated IP
+    -- address.
+    warmupPercentage :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDedicatedIpWarmupAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ip', 'putDedicatedIpWarmupAttributes_ip' - The dedicated IP address that you want to update the warm-up attributes
+-- for.
+--
+-- 'warmupPercentage', 'putDedicatedIpWarmupAttributes_warmupPercentage' - The warm-up percentage that you want to associate with the dedicated IP
+-- address.
+newPutDedicatedIpWarmupAttributes ::
+  -- | 'ip'
+  Prelude.Text ->
+  -- | 'warmupPercentage'
+  Prelude.Int ->
+  PutDedicatedIpWarmupAttributes
+newPutDedicatedIpWarmupAttributes
+  pIp_
+  pWarmupPercentage_ =
+    PutDedicatedIpWarmupAttributes'
+      { ip = pIp_,
+        warmupPercentage = pWarmupPercentage_
+      }
+
+-- | The dedicated IP address that you want to update the warm-up attributes
+-- for.
+putDedicatedIpWarmupAttributes_ip :: Lens.Lens' PutDedicatedIpWarmupAttributes Prelude.Text
+putDedicatedIpWarmupAttributes_ip = Lens.lens (\PutDedicatedIpWarmupAttributes' {ip} -> ip) (\s@PutDedicatedIpWarmupAttributes' {} a -> s {ip = a} :: PutDedicatedIpWarmupAttributes)
+
+-- | The warm-up percentage that you want to associate with the dedicated IP
+-- address.
+putDedicatedIpWarmupAttributes_warmupPercentage :: Lens.Lens' PutDedicatedIpWarmupAttributes Prelude.Int
+putDedicatedIpWarmupAttributes_warmupPercentage = Lens.lens (\PutDedicatedIpWarmupAttributes' {warmupPercentage} -> warmupPercentage) (\s@PutDedicatedIpWarmupAttributes' {} a -> s {warmupPercentage = a} :: PutDedicatedIpWarmupAttributes)
+
+instance
+  Core.AWSRequest
+    PutDedicatedIpWarmupAttributes
+  where
+  type
+    AWSResponse PutDedicatedIpWarmupAttributes =
+      PutDedicatedIpWarmupAttributesResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutDedicatedIpWarmupAttributesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutDedicatedIpWarmupAttributes
+  where
+  hashWithSalt
+    _salt
+    PutDedicatedIpWarmupAttributes' {..} =
+      _salt
+        `Prelude.hashWithSalt` ip
+        `Prelude.hashWithSalt` warmupPercentage
+
+instance
+  Prelude.NFData
+    PutDedicatedIpWarmupAttributes
+  where
+  rnf PutDedicatedIpWarmupAttributes' {..} =
+    Prelude.rnf ip
+      `Prelude.seq` Prelude.rnf warmupPercentage
+
+instance
+  Data.ToHeaders
+    PutDedicatedIpWarmupAttributes
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutDedicatedIpWarmupAttributes where
+  toJSON PutDedicatedIpWarmupAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("WarmupPercentage" Data..= warmupPercentage)
+          ]
+      )
+
+instance Data.ToPath PutDedicatedIpWarmupAttributes where
+  toPath PutDedicatedIpWarmupAttributes' {..} =
+    Prelude.mconcat
+      ["/v2/email/dedicated-ips/", Data.toBS ip, "/warmup"]
+
+instance Data.ToQuery PutDedicatedIpWarmupAttributes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newPutDedicatedIpWarmupAttributesResponse' smart constructor.
+data PutDedicatedIpWarmupAttributesResponse = PutDedicatedIpWarmupAttributesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDedicatedIpWarmupAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putDedicatedIpWarmupAttributesResponse_httpStatus' - The response's http status code.
+newPutDedicatedIpWarmupAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutDedicatedIpWarmupAttributesResponse
+newPutDedicatedIpWarmupAttributesResponse
+  pHttpStatus_ =
+    PutDedicatedIpWarmupAttributesResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+putDedicatedIpWarmupAttributesResponse_httpStatus :: Lens.Lens' PutDedicatedIpWarmupAttributesResponse Prelude.Int
+putDedicatedIpWarmupAttributesResponse_httpStatus = Lens.lens (\PutDedicatedIpWarmupAttributesResponse' {httpStatus} -> httpStatus) (\s@PutDedicatedIpWarmupAttributesResponse' {} a -> s {httpStatus = a} :: PutDedicatedIpWarmupAttributesResponse)
+
+instance
+  Prelude.NFData
+    PutDedicatedIpWarmupAttributesResponse
+  where
+  rnf PutDedicatedIpWarmupAttributesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutDeliverabilityDashboardOption.hs b/gen/Amazonka/SESV2/PutDeliverabilityDashboardOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutDeliverabilityDashboardOption.hs
@@ -0,0 +1,228 @@
+{-# 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.SESV2.PutDeliverabilityDashboardOption
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enable or disable the Deliverability dashboard. When you enable the
+-- Deliverability dashboard, you gain access to reputation, deliverability,
+-- and other metrics for the domains that you use to send email. You also
+-- gain the ability to perform predictive inbox placement tests.
+--
+-- When you use the Deliverability dashboard, you pay a monthly
+-- subscription charge, in addition to any other fees that you accrue by
+-- using Amazon SES and other Amazon Web Services services. For more
+-- information about the features and cost of a Deliverability dashboard
+-- subscription, see
+-- <http://aws.amazon.com/ses/pricing/ Amazon SES Pricing>.
+module Amazonka.SESV2.PutDeliverabilityDashboardOption
+  ( -- * Creating a Request
+    PutDeliverabilityDashboardOption (..),
+    newPutDeliverabilityDashboardOption,
+
+    -- * Request Lenses
+    putDeliverabilityDashboardOption_subscribedDomains,
+    putDeliverabilityDashboardOption_dashboardEnabled,
+
+    -- * Destructuring the Response
+    PutDeliverabilityDashboardOptionResponse (..),
+    newPutDeliverabilityDashboardOptionResponse,
+
+    -- * Response Lenses
+    putDeliverabilityDashboardOptionResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Enable or disable the Deliverability dashboard. When you enable the
+-- Deliverability dashboard, you gain access to reputation, deliverability,
+-- and other metrics for the domains that you use to send email using
+-- Amazon SES API v2. You also gain the ability to perform predictive inbox
+-- placement tests.
+--
+-- When you use the Deliverability dashboard, you pay a monthly
+-- subscription charge, in addition to any other fees that you accrue by
+-- using Amazon SES and other Amazon Web Services services. For more
+-- information about the features and cost of a Deliverability dashboard
+-- subscription, see
+-- <http://aws.amazon.com/pinpoint/pricing/ Amazon Pinpoint Pricing>.
+--
+-- /See:/ 'newPutDeliverabilityDashboardOption' smart constructor.
+data PutDeliverabilityDashboardOption = PutDeliverabilityDashboardOption'
+  { -- | An array of objects, one for each verified domain that you use to send
+    -- email and enabled the Deliverability dashboard for.
+    subscribedDomains :: Prelude.Maybe [DomainDeliverabilityTrackingOption],
+    -- | Specifies whether to enable the Deliverability dashboard. To enable the
+    -- dashboard, set this value to @true@.
+    dashboardEnabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDeliverabilityDashboardOption' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'subscribedDomains', 'putDeliverabilityDashboardOption_subscribedDomains' - An array of objects, one for each verified domain that you use to send
+-- email and enabled the Deliverability dashboard for.
+--
+-- 'dashboardEnabled', 'putDeliverabilityDashboardOption_dashboardEnabled' - Specifies whether to enable the Deliverability dashboard. To enable the
+-- dashboard, set this value to @true@.
+newPutDeliverabilityDashboardOption ::
+  -- | 'dashboardEnabled'
+  Prelude.Bool ->
+  PutDeliverabilityDashboardOption
+newPutDeliverabilityDashboardOption
+  pDashboardEnabled_ =
+    PutDeliverabilityDashboardOption'
+      { subscribedDomains =
+          Prelude.Nothing,
+        dashboardEnabled = pDashboardEnabled_
+      }
+
+-- | An array of objects, one for each verified domain that you use to send
+-- email and enabled the Deliverability dashboard for.
+putDeliverabilityDashboardOption_subscribedDomains :: Lens.Lens' PutDeliverabilityDashboardOption (Prelude.Maybe [DomainDeliverabilityTrackingOption])
+putDeliverabilityDashboardOption_subscribedDomains = Lens.lens (\PutDeliverabilityDashboardOption' {subscribedDomains} -> subscribedDomains) (\s@PutDeliverabilityDashboardOption' {} a -> s {subscribedDomains = a} :: PutDeliverabilityDashboardOption) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies whether to enable the Deliverability dashboard. To enable the
+-- dashboard, set this value to @true@.
+putDeliverabilityDashboardOption_dashboardEnabled :: Lens.Lens' PutDeliverabilityDashboardOption Prelude.Bool
+putDeliverabilityDashboardOption_dashboardEnabled = Lens.lens (\PutDeliverabilityDashboardOption' {dashboardEnabled} -> dashboardEnabled) (\s@PutDeliverabilityDashboardOption' {} a -> s {dashboardEnabled = a} :: PutDeliverabilityDashboardOption)
+
+instance
+  Core.AWSRequest
+    PutDeliverabilityDashboardOption
+  where
+  type
+    AWSResponse PutDeliverabilityDashboardOption =
+      PutDeliverabilityDashboardOptionResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutDeliverabilityDashboardOptionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutDeliverabilityDashboardOption
+  where
+  hashWithSalt
+    _salt
+    PutDeliverabilityDashboardOption' {..} =
+      _salt
+        `Prelude.hashWithSalt` subscribedDomains
+        `Prelude.hashWithSalt` dashboardEnabled
+
+instance
+  Prelude.NFData
+    PutDeliverabilityDashboardOption
+  where
+  rnf PutDeliverabilityDashboardOption' {..} =
+    Prelude.rnf subscribedDomains
+      `Prelude.seq` Prelude.rnf dashboardEnabled
+
+instance
+  Data.ToHeaders
+    PutDeliverabilityDashboardOption
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutDeliverabilityDashboardOption where
+  toJSON PutDeliverabilityDashboardOption' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SubscribedDomains" Data..=)
+              Prelude.<$> subscribedDomains,
+            Prelude.Just
+              ("DashboardEnabled" Data..= dashboardEnabled)
+          ]
+      )
+
+instance Data.ToPath PutDeliverabilityDashboardOption where
+  toPath =
+    Prelude.const "/v2/email/deliverability-dashboard"
+
+instance
+  Data.ToQuery
+    PutDeliverabilityDashboardOption
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | A response that indicates whether the Deliverability dashboard is
+-- enabled.
+--
+-- /See:/ 'newPutDeliverabilityDashboardOptionResponse' smart constructor.
+data PutDeliverabilityDashboardOptionResponse = PutDeliverabilityDashboardOptionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDeliverabilityDashboardOptionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putDeliverabilityDashboardOptionResponse_httpStatus' - The response's http status code.
+newPutDeliverabilityDashboardOptionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutDeliverabilityDashboardOptionResponse
+newPutDeliverabilityDashboardOptionResponse
+  pHttpStatus_ =
+    PutDeliverabilityDashboardOptionResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+putDeliverabilityDashboardOptionResponse_httpStatus :: Lens.Lens' PutDeliverabilityDashboardOptionResponse Prelude.Int
+putDeliverabilityDashboardOptionResponse_httpStatus = Lens.lens (\PutDeliverabilityDashboardOptionResponse' {httpStatus} -> httpStatus) (\s@PutDeliverabilityDashboardOptionResponse' {} a -> s {httpStatus = a} :: PutDeliverabilityDashboardOptionResponse)
+
+instance
+  Prelude.NFData
+    PutDeliverabilityDashboardOptionResponse
+  where
+  rnf PutDeliverabilityDashboardOptionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutEmailIdentityConfigurationSetAttributes.hs b/gen/Amazonka/SESV2/PutEmailIdentityConfigurationSetAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutEmailIdentityConfigurationSetAttributes.hs
@@ -0,0 +1,213 @@
+{-# 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.SESV2.PutEmailIdentityConfigurationSetAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Used to associate a configuration set with an email identity.
+module Amazonka.SESV2.PutEmailIdentityConfigurationSetAttributes
+  ( -- * Creating a Request
+    PutEmailIdentityConfigurationSetAttributes (..),
+    newPutEmailIdentityConfigurationSetAttributes,
+
+    -- * Request Lenses
+    putEmailIdentityConfigurationSetAttributes_configurationSetName,
+    putEmailIdentityConfigurationSetAttributes_emailIdentity,
+
+    -- * Destructuring the Response
+    PutEmailIdentityConfigurationSetAttributesResponse (..),
+    newPutEmailIdentityConfigurationSetAttributesResponse,
+
+    -- * Response Lenses
+    putEmailIdentityConfigurationSetAttributesResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to associate a configuration set with an email identity.
+--
+-- /See:/ 'newPutEmailIdentityConfigurationSetAttributes' smart constructor.
+data PutEmailIdentityConfigurationSetAttributes = PutEmailIdentityConfigurationSetAttributes'
+  { -- | The configuration set to associate with an email identity.
+    configurationSetName :: Prelude.Maybe Prelude.Text,
+    -- | The email address or domain to associate with a configuration set.
+    emailIdentity :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutEmailIdentityConfigurationSetAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configurationSetName', 'putEmailIdentityConfigurationSetAttributes_configurationSetName' - The configuration set to associate with an email identity.
+--
+-- 'emailIdentity', 'putEmailIdentityConfigurationSetAttributes_emailIdentity' - The email address or domain to associate with a configuration set.
+newPutEmailIdentityConfigurationSetAttributes ::
+  -- | 'emailIdentity'
+  Prelude.Text ->
+  PutEmailIdentityConfigurationSetAttributes
+newPutEmailIdentityConfigurationSetAttributes
+  pEmailIdentity_ =
+    PutEmailIdentityConfigurationSetAttributes'
+      { configurationSetName =
+          Prelude.Nothing,
+        emailIdentity = pEmailIdentity_
+      }
+
+-- | The configuration set to associate with an email identity.
+putEmailIdentityConfigurationSetAttributes_configurationSetName :: Lens.Lens' PutEmailIdentityConfigurationSetAttributes (Prelude.Maybe Prelude.Text)
+putEmailIdentityConfigurationSetAttributes_configurationSetName = Lens.lens (\PutEmailIdentityConfigurationSetAttributes' {configurationSetName} -> configurationSetName) (\s@PutEmailIdentityConfigurationSetAttributes' {} a -> s {configurationSetName = a} :: PutEmailIdentityConfigurationSetAttributes)
+
+-- | The email address or domain to associate with a configuration set.
+putEmailIdentityConfigurationSetAttributes_emailIdentity :: Lens.Lens' PutEmailIdentityConfigurationSetAttributes Prelude.Text
+putEmailIdentityConfigurationSetAttributes_emailIdentity = Lens.lens (\PutEmailIdentityConfigurationSetAttributes' {emailIdentity} -> emailIdentity) (\s@PutEmailIdentityConfigurationSetAttributes' {} a -> s {emailIdentity = a} :: PutEmailIdentityConfigurationSetAttributes)
+
+instance
+  Core.AWSRequest
+    PutEmailIdentityConfigurationSetAttributes
+  where
+  type
+    AWSResponse
+      PutEmailIdentityConfigurationSetAttributes =
+      PutEmailIdentityConfigurationSetAttributesResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutEmailIdentityConfigurationSetAttributesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutEmailIdentityConfigurationSetAttributes
+  where
+  hashWithSalt
+    _salt
+    PutEmailIdentityConfigurationSetAttributes' {..} =
+      _salt
+        `Prelude.hashWithSalt` configurationSetName
+        `Prelude.hashWithSalt` emailIdentity
+
+instance
+  Prelude.NFData
+    PutEmailIdentityConfigurationSetAttributes
+  where
+  rnf PutEmailIdentityConfigurationSetAttributes' {..} =
+    Prelude.rnf configurationSetName
+      `Prelude.seq` Prelude.rnf emailIdentity
+
+instance
+  Data.ToHeaders
+    PutEmailIdentityConfigurationSetAttributes
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    PutEmailIdentityConfigurationSetAttributes
+  where
+  toJSON
+    PutEmailIdentityConfigurationSetAttributes' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ ("ConfigurationSetName" Data..=)
+                Prelude.<$> configurationSetName
+            ]
+        )
+
+instance
+  Data.ToPath
+    PutEmailIdentityConfigurationSetAttributes
+  where
+  toPath
+    PutEmailIdentityConfigurationSetAttributes' {..} =
+      Prelude.mconcat
+        [ "/v2/email/identities/",
+          Data.toBS emailIdentity,
+          "/configuration-set"
+        ]
+
+instance
+  Data.ToQuery
+    PutEmailIdentityConfigurationSetAttributes
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | If the action is successful, the service sends back an HTTP 200 response
+-- with an empty HTTP body.
+--
+-- /See:/ 'newPutEmailIdentityConfigurationSetAttributesResponse' smart constructor.
+data PutEmailIdentityConfigurationSetAttributesResponse = PutEmailIdentityConfigurationSetAttributesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutEmailIdentityConfigurationSetAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putEmailIdentityConfigurationSetAttributesResponse_httpStatus' - The response's http status code.
+newPutEmailIdentityConfigurationSetAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutEmailIdentityConfigurationSetAttributesResponse
+newPutEmailIdentityConfigurationSetAttributesResponse
+  pHttpStatus_ =
+    PutEmailIdentityConfigurationSetAttributesResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+putEmailIdentityConfigurationSetAttributesResponse_httpStatus :: Lens.Lens' PutEmailIdentityConfigurationSetAttributesResponse Prelude.Int
+putEmailIdentityConfigurationSetAttributesResponse_httpStatus = Lens.lens (\PutEmailIdentityConfigurationSetAttributesResponse' {httpStatus} -> httpStatus) (\s@PutEmailIdentityConfigurationSetAttributesResponse' {} a -> s {httpStatus = a} :: PutEmailIdentityConfigurationSetAttributesResponse)
+
+instance
+  Prelude.NFData
+    PutEmailIdentityConfigurationSetAttributesResponse
+  where
+  rnf
+    PutEmailIdentityConfigurationSetAttributesResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutEmailIdentityDkimAttributes.hs b/gen/Amazonka/SESV2/PutEmailIdentityDkimAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutEmailIdentityDkimAttributes.hs
@@ -0,0 +1,212 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.PutEmailIdentityDkimAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Used to enable or disable DKIM authentication for an email identity.
+module Amazonka.SESV2.PutEmailIdentityDkimAttributes
+  ( -- * Creating a Request
+    PutEmailIdentityDkimAttributes (..),
+    newPutEmailIdentityDkimAttributes,
+
+    -- * Request Lenses
+    putEmailIdentityDkimAttributes_signingEnabled,
+    putEmailIdentityDkimAttributes_emailIdentity,
+
+    -- * Destructuring the Response
+    PutEmailIdentityDkimAttributesResponse (..),
+    newPutEmailIdentityDkimAttributesResponse,
+
+    -- * Response Lenses
+    putEmailIdentityDkimAttributesResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to enable or disable DKIM signing of email that you send from
+-- an email identity.
+--
+-- /See:/ 'newPutEmailIdentityDkimAttributes' smart constructor.
+data PutEmailIdentityDkimAttributes = PutEmailIdentityDkimAttributes'
+  { -- | Sets the DKIM signing configuration for the identity.
+    --
+    -- When you set this value @true@, then the messages that are sent from the
+    -- identity are signed using DKIM. If you set this value to @false@, your
+    -- messages are sent without DKIM signing.
+    signingEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The email identity.
+    emailIdentity :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutEmailIdentityDkimAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'signingEnabled', 'putEmailIdentityDkimAttributes_signingEnabled' - Sets the DKIM signing configuration for the identity.
+--
+-- When you set this value @true@, then the messages that are sent from the
+-- identity are signed using DKIM. If you set this value to @false@, your
+-- messages are sent without DKIM signing.
+--
+-- 'emailIdentity', 'putEmailIdentityDkimAttributes_emailIdentity' - The email identity.
+newPutEmailIdentityDkimAttributes ::
+  -- | 'emailIdentity'
+  Prelude.Text ->
+  PutEmailIdentityDkimAttributes
+newPutEmailIdentityDkimAttributes pEmailIdentity_ =
+  PutEmailIdentityDkimAttributes'
+    { signingEnabled =
+        Prelude.Nothing,
+      emailIdentity = pEmailIdentity_
+    }
+
+-- | Sets the DKIM signing configuration for the identity.
+--
+-- When you set this value @true@, then the messages that are sent from the
+-- identity are signed using DKIM. If you set this value to @false@, your
+-- messages are sent without DKIM signing.
+putEmailIdentityDkimAttributes_signingEnabled :: Lens.Lens' PutEmailIdentityDkimAttributes (Prelude.Maybe Prelude.Bool)
+putEmailIdentityDkimAttributes_signingEnabled = Lens.lens (\PutEmailIdentityDkimAttributes' {signingEnabled} -> signingEnabled) (\s@PutEmailIdentityDkimAttributes' {} a -> s {signingEnabled = a} :: PutEmailIdentityDkimAttributes)
+
+-- | The email identity.
+putEmailIdentityDkimAttributes_emailIdentity :: Lens.Lens' PutEmailIdentityDkimAttributes Prelude.Text
+putEmailIdentityDkimAttributes_emailIdentity = Lens.lens (\PutEmailIdentityDkimAttributes' {emailIdentity} -> emailIdentity) (\s@PutEmailIdentityDkimAttributes' {} a -> s {emailIdentity = a} :: PutEmailIdentityDkimAttributes)
+
+instance
+  Core.AWSRequest
+    PutEmailIdentityDkimAttributes
+  where
+  type
+    AWSResponse PutEmailIdentityDkimAttributes =
+      PutEmailIdentityDkimAttributesResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutEmailIdentityDkimAttributesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutEmailIdentityDkimAttributes
+  where
+  hashWithSalt
+    _salt
+    PutEmailIdentityDkimAttributes' {..} =
+      _salt
+        `Prelude.hashWithSalt` signingEnabled
+        `Prelude.hashWithSalt` emailIdentity
+
+instance
+  Prelude.NFData
+    PutEmailIdentityDkimAttributes
+  where
+  rnf PutEmailIdentityDkimAttributes' {..} =
+    Prelude.rnf signingEnabled
+      `Prelude.seq` Prelude.rnf emailIdentity
+
+instance
+  Data.ToHeaders
+    PutEmailIdentityDkimAttributes
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutEmailIdentityDkimAttributes where
+  toJSON PutEmailIdentityDkimAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SigningEnabled" Data..=)
+              Prelude.<$> signingEnabled
+          ]
+      )
+
+instance Data.ToPath PutEmailIdentityDkimAttributes where
+  toPath PutEmailIdentityDkimAttributes' {..} =
+    Prelude.mconcat
+      [ "/v2/email/identities/",
+        Data.toBS emailIdentity,
+        "/dkim"
+      ]
+
+instance Data.ToQuery PutEmailIdentityDkimAttributes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newPutEmailIdentityDkimAttributesResponse' smart constructor.
+data PutEmailIdentityDkimAttributesResponse = PutEmailIdentityDkimAttributesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutEmailIdentityDkimAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putEmailIdentityDkimAttributesResponse_httpStatus' - The response's http status code.
+newPutEmailIdentityDkimAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutEmailIdentityDkimAttributesResponse
+newPutEmailIdentityDkimAttributesResponse
+  pHttpStatus_ =
+    PutEmailIdentityDkimAttributesResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+putEmailIdentityDkimAttributesResponse_httpStatus :: Lens.Lens' PutEmailIdentityDkimAttributesResponse Prelude.Int
+putEmailIdentityDkimAttributesResponse_httpStatus = Lens.lens (\PutEmailIdentityDkimAttributesResponse' {httpStatus} -> httpStatus) (\s@PutEmailIdentityDkimAttributesResponse' {} a -> s {httpStatus = a} :: PutEmailIdentityDkimAttributesResponse)
+
+instance
+  Prelude.NFData
+    PutEmailIdentityDkimAttributesResponse
+  where
+  rnf PutEmailIdentityDkimAttributesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutEmailIdentityDkimSigningAttributes.hs b/gen/Amazonka/SESV2/PutEmailIdentityDkimSigningAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutEmailIdentityDkimSigningAttributes.hs
@@ -0,0 +1,431 @@
+{-# 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.SESV2.PutEmailIdentityDkimSigningAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Used to configure or change the DKIM authentication settings for an
+-- email domain identity. You can use this operation to do any of the
+-- following:
+--
+-- -   Update the signing attributes for an identity that uses Bring Your
+--     Own DKIM (BYODKIM).
+--
+-- -   Update the key length that should be used for Easy DKIM.
+--
+-- -   Change from using no DKIM authentication to using Easy DKIM.
+--
+-- -   Change from using no DKIM authentication to using BYODKIM.
+--
+-- -   Change from using Easy DKIM to using BYODKIM.
+--
+-- -   Change from using BYODKIM to using Easy DKIM.
+module Amazonka.SESV2.PutEmailIdentityDkimSigningAttributes
+  ( -- * Creating a Request
+    PutEmailIdentityDkimSigningAttributes (..),
+    newPutEmailIdentityDkimSigningAttributes,
+
+    -- * Request Lenses
+    putEmailIdentityDkimSigningAttributes_signingAttributes,
+    putEmailIdentityDkimSigningAttributes_emailIdentity,
+    putEmailIdentityDkimSigningAttributes_signingAttributesOrigin,
+
+    -- * Destructuring the Response
+    PutEmailIdentityDkimSigningAttributesResponse (..),
+    newPutEmailIdentityDkimSigningAttributesResponse,
+
+    -- * Response Lenses
+    putEmailIdentityDkimSigningAttributesResponse_dkimStatus,
+    putEmailIdentityDkimSigningAttributesResponse_dkimTokens,
+    putEmailIdentityDkimSigningAttributesResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to change the DKIM attributes for an email identity.
+--
+-- /See:/ 'newPutEmailIdentityDkimSigningAttributes' smart constructor.
+data PutEmailIdentityDkimSigningAttributes = PutEmailIdentityDkimSigningAttributes'
+  { -- | An object that contains information about the private key and selector
+    -- that you want to use to configure DKIM for the identity for Bring Your
+    -- Own DKIM (BYODKIM) for the identity, or, configures the key length to be
+    -- used for
+    -- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>.
+    signingAttributes :: Prelude.Maybe DkimSigningAttributes,
+    -- | The email identity.
+    emailIdentity :: Prelude.Text,
+    -- | The method to use to configure DKIM for the identity. There are the
+    -- following possible values:
+    --
+    -- -   @AWS_SES@ – Configure DKIM for the identity by using
+    --     <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>.
+    --
+    -- -   @EXTERNAL@ – Configure DKIM for the identity by using Bring Your Own
+    --     DKIM (BYODKIM).
+    signingAttributesOrigin :: DkimSigningAttributesOrigin
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutEmailIdentityDkimSigningAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'signingAttributes', 'putEmailIdentityDkimSigningAttributes_signingAttributes' - An object that contains information about the private key and selector
+-- that you want to use to configure DKIM for the identity for Bring Your
+-- Own DKIM (BYODKIM) for the identity, or, configures the key length to be
+-- used for
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>.
+--
+-- 'emailIdentity', 'putEmailIdentityDkimSigningAttributes_emailIdentity' - The email identity.
+--
+-- 'signingAttributesOrigin', 'putEmailIdentityDkimSigningAttributes_signingAttributesOrigin' - The method to use to configure DKIM for the identity. There are the
+-- following possible values:
+--
+-- -   @AWS_SES@ – Configure DKIM for the identity by using
+--     <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>.
+--
+-- -   @EXTERNAL@ – Configure DKIM for the identity by using Bring Your Own
+--     DKIM (BYODKIM).
+newPutEmailIdentityDkimSigningAttributes ::
+  -- | 'emailIdentity'
+  Prelude.Text ->
+  -- | 'signingAttributesOrigin'
+  DkimSigningAttributesOrigin ->
+  PutEmailIdentityDkimSigningAttributes
+newPutEmailIdentityDkimSigningAttributes
+  pEmailIdentity_
+  pSigningAttributesOrigin_ =
+    PutEmailIdentityDkimSigningAttributes'
+      { signingAttributes =
+          Prelude.Nothing,
+        emailIdentity = pEmailIdentity_,
+        signingAttributesOrigin =
+          pSigningAttributesOrigin_
+      }
+
+-- | An object that contains information about the private key and selector
+-- that you want to use to configure DKIM for the identity for Bring Your
+-- Own DKIM (BYODKIM) for the identity, or, configures the key length to be
+-- used for
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>.
+putEmailIdentityDkimSigningAttributes_signingAttributes :: Lens.Lens' PutEmailIdentityDkimSigningAttributes (Prelude.Maybe DkimSigningAttributes)
+putEmailIdentityDkimSigningAttributes_signingAttributes = Lens.lens (\PutEmailIdentityDkimSigningAttributes' {signingAttributes} -> signingAttributes) (\s@PutEmailIdentityDkimSigningAttributes' {} a -> s {signingAttributes = a} :: PutEmailIdentityDkimSigningAttributes)
+
+-- | The email identity.
+putEmailIdentityDkimSigningAttributes_emailIdentity :: Lens.Lens' PutEmailIdentityDkimSigningAttributes Prelude.Text
+putEmailIdentityDkimSigningAttributes_emailIdentity = Lens.lens (\PutEmailIdentityDkimSigningAttributes' {emailIdentity} -> emailIdentity) (\s@PutEmailIdentityDkimSigningAttributes' {} a -> s {emailIdentity = a} :: PutEmailIdentityDkimSigningAttributes)
+
+-- | The method to use to configure DKIM for the identity. There are the
+-- following possible values:
+--
+-- -   @AWS_SES@ – Configure DKIM for the identity by using
+--     <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>.
+--
+-- -   @EXTERNAL@ – Configure DKIM for the identity by using Bring Your Own
+--     DKIM (BYODKIM).
+putEmailIdentityDkimSigningAttributes_signingAttributesOrigin :: Lens.Lens' PutEmailIdentityDkimSigningAttributes DkimSigningAttributesOrigin
+putEmailIdentityDkimSigningAttributes_signingAttributesOrigin = Lens.lens (\PutEmailIdentityDkimSigningAttributes' {signingAttributesOrigin} -> signingAttributesOrigin) (\s@PutEmailIdentityDkimSigningAttributes' {} a -> s {signingAttributesOrigin = a} :: PutEmailIdentityDkimSigningAttributes)
+
+instance
+  Core.AWSRequest
+    PutEmailIdentityDkimSigningAttributes
+  where
+  type
+    AWSResponse
+      PutEmailIdentityDkimSigningAttributes =
+      PutEmailIdentityDkimSigningAttributesResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutEmailIdentityDkimSigningAttributesResponse'
+            Prelude.<$> (x Data..?> "DkimStatus")
+            Prelude.<*> (x Data..?> "DkimTokens" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutEmailIdentityDkimSigningAttributes
+  where
+  hashWithSalt
+    _salt
+    PutEmailIdentityDkimSigningAttributes' {..} =
+      _salt
+        `Prelude.hashWithSalt` signingAttributes
+        `Prelude.hashWithSalt` emailIdentity
+        `Prelude.hashWithSalt` signingAttributesOrigin
+
+instance
+  Prelude.NFData
+    PutEmailIdentityDkimSigningAttributes
+  where
+  rnf PutEmailIdentityDkimSigningAttributes' {..} =
+    Prelude.rnf signingAttributes
+      `Prelude.seq` Prelude.rnf emailIdentity
+      `Prelude.seq` Prelude.rnf signingAttributesOrigin
+
+instance
+  Data.ToHeaders
+    PutEmailIdentityDkimSigningAttributes
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    PutEmailIdentityDkimSigningAttributes
+  where
+  toJSON PutEmailIdentityDkimSigningAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SigningAttributes" Data..=)
+              Prelude.<$> signingAttributes,
+            Prelude.Just
+              ( "SigningAttributesOrigin"
+                  Data..= signingAttributesOrigin
+              )
+          ]
+      )
+
+instance
+  Data.ToPath
+    PutEmailIdentityDkimSigningAttributes
+  where
+  toPath PutEmailIdentityDkimSigningAttributes' {..} =
+    Prelude.mconcat
+      [ "/v1/email/identities/",
+        Data.toBS emailIdentity,
+        "/dkim/signing"
+      ]
+
+instance
+  Data.ToQuery
+    PutEmailIdentityDkimSigningAttributes
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | If the action is successful, the service sends back an HTTP 200
+-- response.
+--
+-- The following data is returned in JSON format by the service.
+--
+-- /See:/ 'newPutEmailIdentityDkimSigningAttributesResponse' smart constructor.
+data PutEmailIdentityDkimSigningAttributesResponse = PutEmailIdentityDkimSigningAttributesResponse'
+  { -- | The DKIM authentication status of the identity. Amazon SES determines
+    -- the authentication status by searching for specific records in the DNS
+    -- configuration for your domain. If you used
+    -- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>
+    -- to set up DKIM authentication, Amazon SES tries to find three unique
+    -- CNAME records in the DNS configuration for your domain.
+    --
+    -- If you provided a public key to perform DKIM authentication, Amazon SES
+    -- tries to find a TXT record that uses the selector that you specified.
+    -- The value of the TXT record must be a public key that\'s paired with the
+    -- private key that you specified in the process of creating the identity.
+    --
+    -- The status can be one of the following:
+    --
+    -- -   @PENDING@ – The verification process was initiated, but Amazon SES
+    --     hasn\'t yet detected the DKIM records in the DNS configuration for
+    --     the domain.
+    --
+    -- -   @SUCCESS@ – The verification process completed successfully.
+    --
+    -- -   @FAILED@ – The verification process failed. This typically occurs
+    --     when Amazon SES fails to find the DKIM records in the DNS
+    --     configuration of the domain.
+    --
+    -- -   @TEMPORARY_FAILURE@ – A temporary issue is preventing Amazon SES
+    --     from determining the DKIM authentication status of the domain.
+    --
+    -- -   @NOT_STARTED@ – The DKIM verification process hasn\'t been initiated
+    --     for the domain.
+    dkimStatus :: Prelude.Maybe DkimStatus,
+    -- | If you used
+    -- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>
+    -- to configure DKIM authentication for the domain, then this object
+    -- contains a set of unique strings that you use to create a set of CNAME
+    -- records that you add to the DNS configuration for your domain. When
+    -- Amazon SES detects these records in the DNS configuration for your
+    -- domain, the DKIM authentication process is complete.
+    --
+    -- If you configured DKIM authentication for the domain by providing your
+    -- own public-private key pair, then this object contains the selector
+    -- that\'s associated with your public key.
+    --
+    -- Regardless of the DKIM authentication method you use, Amazon SES
+    -- searches for the appropriate records in the DNS configuration of the
+    -- domain for up to 72 hours.
+    dkimTokens :: 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 'PutEmailIdentityDkimSigningAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dkimStatus', 'putEmailIdentityDkimSigningAttributesResponse_dkimStatus' - The DKIM authentication status of the identity. Amazon SES determines
+-- the authentication status by searching for specific records in the DNS
+-- configuration for your domain. If you used
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>
+-- to set up DKIM authentication, Amazon SES tries to find three unique
+-- CNAME records in the DNS configuration for your domain.
+--
+-- If you provided a public key to perform DKIM authentication, Amazon SES
+-- tries to find a TXT record that uses the selector that you specified.
+-- The value of the TXT record must be a public key that\'s paired with the
+-- private key that you specified in the process of creating the identity.
+--
+-- The status can be one of the following:
+--
+-- -   @PENDING@ – The verification process was initiated, but Amazon SES
+--     hasn\'t yet detected the DKIM records in the DNS configuration for
+--     the domain.
+--
+-- -   @SUCCESS@ – The verification process completed successfully.
+--
+-- -   @FAILED@ – The verification process failed. This typically occurs
+--     when Amazon SES fails to find the DKIM records in the DNS
+--     configuration of the domain.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue is preventing Amazon SES
+--     from determining the DKIM authentication status of the domain.
+--
+-- -   @NOT_STARTED@ – The DKIM verification process hasn\'t been initiated
+--     for the domain.
+--
+-- 'dkimTokens', 'putEmailIdentityDkimSigningAttributesResponse_dkimTokens' - If you used
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>
+-- to configure DKIM authentication for the domain, then this object
+-- contains a set of unique strings that you use to create a set of CNAME
+-- records that you add to the DNS configuration for your domain. When
+-- Amazon SES detects these records in the DNS configuration for your
+-- domain, the DKIM authentication process is complete.
+--
+-- If you configured DKIM authentication for the domain by providing your
+-- own public-private key pair, then this object contains the selector
+-- that\'s associated with your public key.
+--
+-- Regardless of the DKIM authentication method you use, Amazon SES
+-- searches for the appropriate records in the DNS configuration of the
+-- domain for up to 72 hours.
+--
+-- 'httpStatus', 'putEmailIdentityDkimSigningAttributesResponse_httpStatus' - The response's http status code.
+newPutEmailIdentityDkimSigningAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutEmailIdentityDkimSigningAttributesResponse
+newPutEmailIdentityDkimSigningAttributesResponse
+  pHttpStatus_ =
+    PutEmailIdentityDkimSigningAttributesResponse'
+      { dkimStatus =
+          Prelude.Nothing,
+        dkimTokens = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The DKIM authentication status of the identity. Amazon SES determines
+-- the authentication status by searching for specific records in the DNS
+-- configuration for your domain. If you used
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>
+-- to set up DKIM authentication, Amazon SES tries to find three unique
+-- CNAME records in the DNS configuration for your domain.
+--
+-- If you provided a public key to perform DKIM authentication, Amazon SES
+-- tries to find a TXT record that uses the selector that you specified.
+-- The value of the TXT record must be a public key that\'s paired with the
+-- private key that you specified in the process of creating the identity.
+--
+-- The status can be one of the following:
+--
+-- -   @PENDING@ – The verification process was initiated, but Amazon SES
+--     hasn\'t yet detected the DKIM records in the DNS configuration for
+--     the domain.
+--
+-- -   @SUCCESS@ – The verification process completed successfully.
+--
+-- -   @FAILED@ – The verification process failed. This typically occurs
+--     when Amazon SES fails to find the DKIM records in the DNS
+--     configuration of the domain.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue is preventing Amazon SES
+--     from determining the DKIM authentication status of the domain.
+--
+-- -   @NOT_STARTED@ – The DKIM verification process hasn\'t been initiated
+--     for the domain.
+putEmailIdentityDkimSigningAttributesResponse_dkimStatus :: Lens.Lens' PutEmailIdentityDkimSigningAttributesResponse (Prelude.Maybe DkimStatus)
+putEmailIdentityDkimSigningAttributesResponse_dkimStatus = Lens.lens (\PutEmailIdentityDkimSigningAttributesResponse' {dkimStatus} -> dkimStatus) (\s@PutEmailIdentityDkimSigningAttributesResponse' {} a -> s {dkimStatus = a} :: PutEmailIdentityDkimSigningAttributesResponse)
+
+-- | If you used
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>
+-- to configure DKIM authentication for the domain, then this object
+-- contains a set of unique strings that you use to create a set of CNAME
+-- records that you add to the DNS configuration for your domain. When
+-- Amazon SES detects these records in the DNS configuration for your
+-- domain, the DKIM authentication process is complete.
+--
+-- If you configured DKIM authentication for the domain by providing your
+-- own public-private key pair, then this object contains the selector
+-- that\'s associated with your public key.
+--
+-- Regardless of the DKIM authentication method you use, Amazon SES
+-- searches for the appropriate records in the DNS configuration of the
+-- domain for up to 72 hours.
+putEmailIdentityDkimSigningAttributesResponse_dkimTokens :: Lens.Lens' PutEmailIdentityDkimSigningAttributesResponse (Prelude.Maybe [Prelude.Text])
+putEmailIdentityDkimSigningAttributesResponse_dkimTokens = Lens.lens (\PutEmailIdentityDkimSigningAttributesResponse' {dkimTokens} -> dkimTokens) (\s@PutEmailIdentityDkimSigningAttributesResponse' {} a -> s {dkimTokens = a} :: PutEmailIdentityDkimSigningAttributesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+putEmailIdentityDkimSigningAttributesResponse_httpStatus :: Lens.Lens' PutEmailIdentityDkimSigningAttributesResponse Prelude.Int
+putEmailIdentityDkimSigningAttributesResponse_httpStatus = Lens.lens (\PutEmailIdentityDkimSigningAttributesResponse' {httpStatus} -> httpStatus) (\s@PutEmailIdentityDkimSigningAttributesResponse' {} a -> s {httpStatus = a} :: PutEmailIdentityDkimSigningAttributesResponse)
+
+instance
+  Prelude.NFData
+    PutEmailIdentityDkimSigningAttributesResponse
+  where
+  rnf
+    PutEmailIdentityDkimSigningAttributesResponse' {..} =
+      Prelude.rnf dkimStatus
+        `Prelude.seq` Prelude.rnf dkimTokens
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutEmailIdentityFeedbackAttributes.hs b/gen/Amazonka/SESV2/PutEmailIdentityFeedbackAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutEmailIdentityFeedbackAttributes.hs
@@ -0,0 +1,251 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.PutEmailIdentityFeedbackAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Used to enable or disable feedback forwarding for an identity. This
+-- setting determines what happens when an identity is used to send an
+-- email that results in a bounce or complaint event.
+--
+-- If the value is @true@, you receive email notifications when bounce or
+-- complaint events occur. These notifications are sent to the address that
+-- you specified in the @Return-Path@ header of the original email.
+--
+-- You\'re required to have a method of tracking bounces and complaints. If
+-- you haven\'t set up another mechanism for receiving bounce or complaint
+-- notifications (for example, by setting up an event destination), you
+-- receive an email notification when these events occur (even if this
+-- setting is disabled).
+module Amazonka.SESV2.PutEmailIdentityFeedbackAttributes
+  ( -- * Creating a Request
+    PutEmailIdentityFeedbackAttributes (..),
+    newPutEmailIdentityFeedbackAttributes,
+
+    -- * Request Lenses
+    putEmailIdentityFeedbackAttributes_emailForwardingEnabled,
+    putEmailIdentityFeedbackAttributes_emailIdentity,
+
+    -- * Destructuring the Response
+    PutEmailIdentityFeedbackAttributesResponse (..),
+    newPutEmailIdentityFeedbackAttributesResponse,
+
+    -- * Response Lenses
+    putEmailIdentityFeedbackAttributesResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to set the attributes that control how bounce and complaint
+-- events are processed.
+--
+-- /See:/ 'newPutEmailIdentityFeedbackAttributes' smart constructor.
+data PutEmailIdentityFeedbackAttributes = PutEmailIdentityFeedbackAttributes'
+  { -- | Sets the feedback forwarding configuration for the identity.
+    --
+    -- If the value is @true@, you receive email notifications when bounce or
+    -- complaint events occur. These notifications are sent to the address that
+    -- you specified in the @Return-Path@ header of the original email.
+    --
+    -- You\'re required to have a method of tracking bounces and complaints. If
+    -- you haven\'t set up another mechanism for receiving bounce or complaint
+    -- notifications (for example, by setting up an event destination), you
+    -- receive an email notification when these events occur (even if this
+    -- setting is disabled).
+    emailForwardingEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The email identity.
+    emailIdentity :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutEmailIdentityFeedbackAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'emailForwardingEnabled', 'putEmailIdentityFeedbackAttributes_emailForwardingEnabled' - Sets the feedback forwarding configuration for the identity.
+--
+-- If the value is @true@, you receive email notifications when bounce or
+-- complaint events occur. These notifications are sent to the address that
+-- you specified in the @Return-Path@ header of the original email.
+--
+-- You\'re required to have a method of tracking bounces and complaints. If
+-- you haven\'t set up another mechanism for receiving bounce or complaint
+-- notifications (for example, by setting up an event destination), you
+-- receive an email notification when these events occur (even if this
+-- setting is disabled).
+--
+-- 'emailIdentity', 'putEmailIdentityFeedbackAttributes_emailIdentity' - The email identity.
+newPutEmailIdentityFeedbackAttributes ::
+  -- | 'emailIdentity'
+  Prelude.Text ->
+  PutEmailIdentityFeedbackAttributes
+newPutEmailIdentityFeedbackAttributes pEmailIdentity_ =
+  PutEmailIdentityFeedbackAttributes'
+    { emailForwardingEnabled =
+        Prelude.Nothing,
+      emailIdentity = pEmailIdentity_
+    }
+
+-- | Sets the feedback forwarding configuration for the identity.
+--
+-- If the value is @true@, you receive email notifications when bounce or
+-- complaint events occur. These notifications are sent to the address that
+-- you specified in the @Return-Path@ header of the original email.
+--
+-- You\'re required to have a method of tracking bounces and complaints. If
+-- you haven\'t set up another mechanism for receiving bounce or complaint
+-- notifications (for example, by setting up an event destination), you
+-- receive an email notification when these events occur (even if this
+-- setting is disabled).
+putEmailIdentityFeedbackAttributes_emailForwardingEnabled :: Lens.Lens' PutEmailIdentityFeedbackAttributes (Prelude.Maybe Prelude.Bool)
+putEmailIdentityFeedbackAttributes_emailForwardingEnabled = Lens.lens (\PutEmailIdentityFeedbackAttributes' {emailForwardingEnabled} -> emailForwardingEnabled) (\s@PutEmailIdentityFeedbackAttributes' {} a -> s {emailForwardingEnabled = a} :: PutEmailIdentityFeedbackAttributes)
+
+-- | The email identity.
+putEmailIdentityFeedbackAttributes_emailIdentity :: Lens.Lens' PutEmailIdentityFeedbackAttributes Prelude.Text
+putEmailIdentityFeedbackAttributes_emailIdentity = Lens.lens (\PutEmailIdentityFeedbackAttributes' {emailIdentity} -> emailIdentity) (\s@PutEmailIdentityFeedbackAttributes' {} a -> s {emailIdentity = a} :: PutEmailIdentityFeedbackAttributes)
+
+instance
+  Core.AWSRequest
+    PutEmailIdentityFeedbackAttributes
+  where
+  type
+    AWSResponse PutEmailIdentityFeedbackAttributes =
+      PutEmailIdentityFeedbackAttributesResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutEmailIdentityFeedbackAttributesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutEmailIdentityFeedbackAttributes
+  where
+  hashWithSalt
+    _salt
+    PutEmailIdentityFeedbackAttributes' {..} =
+      _salt
+        `Prelude.hashWithSalt` emailForwardingEnabled
+        `Prelude.hashWithSalt` emailIdentity
+
+instance
+  Prelude.NFData
+    PutEmailIdentityFeedbackAttributes
+  where
+  rnf PutEmailIdentityFeedbackAttributes' {..} =
+    Prelude.rnf emailForwardingEnabled
+      `Prelude.seq` Prelude.rnf emailIdentity
+
+instance
+  Data.ToHeaders
+    PutEmailIdentityFeedbackAttributes
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    PutEmailIdentityFeedbackAttributes
+  where
+  toJSON PutEmailIdentityFeedbackAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EmailForwardingEnabled" Data..=)
+              Prelude.<$> emailForwardingEnabled
+          ]
+      )
+
+instance
+  Data.ToPath
+    PutEmailIdentityFeedbackAttributes
+  where
+  toPath PutEmailIdentityFeedbackAttributes' {..} =
+    Prelude.mconcat
+      [ "/v2/email/identities/",
+        Data.toBS emailIdentity,
+        "/feedback"
+      ]
+
+instance
+  Data.ToQuery
+    PutEmailIdentityFeedbackAttributes
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newPutEmailIdentityFeedbackAttributesResponse' smart constructor.
+data PutEmailIdentityFeedbackAttributesResponse = PutEmailIdentityFeedbackAttributesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutEmailIdentityFeedbackAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putEmailIdentityFeedbackAttributesResponse_httpStatus' - The response's http status code.
+newPutEmailIdentityFeedbackAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutEmailIdentityFeedbackAttributesResponse
+newPutEmailIdentityFeedbackAttributesResponse
+  pHttpStatus_ =
+    PutEmailIdentityFeedbackAttributesResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+putEmailIdentityFeedbackAttributesResponse_httpStatus :: Lens.Lens' PutEmailIdentityFeedbackAttributesResponse Prelude.Int
+putEmailIdentityFeedbackAttributesResponse_httpStatus = Lens.lens (\PutEmailIdentityFeedbackAttributesResponse' {httpStatus} -> httpStatus) (\s@PutEmailIdentityFeedbackAttributesResponse' {} a -> s {httpStatus = a} :: PutEmailIdentityFeedbackAttributesResponse)
+
+instance
+  Prelude.NFData
+    PutEmailIdentityFeedbackAttributesResponse
+  where
+  rnf PutEmailIdentityFeedbackAttributesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutEmailIdentityMailFromAttributes.hs b/gen/Amazonka/SESV2/PutEmailIdentityMailFromAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutEmailIdentityMailFromAttributes.hs
@@ -0,0 +1,272 @@
+{-# 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.SESV2.PutEmailIdentityMailFromAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Used to enable or disable the custom Mail-From domain configuration for
+-- an email identity.
+module Amazonka.SESV2.PutEmailIdentityMailFromAttributes
+  ( -- * Creating a Request
+    PutEmailIdentityMailFromAttributes (..),
+    newPutEmailIdentityMailFromAttributes,
+
+    -- * Request Lenses
+    putEmailIdentityMailFromAttributes_behaviorOnMxFailure,
+    putEmailIdentityMailFromAttributes_mailFromDomain,
+    putEmailIdentityMailFromAttributes_emailIdentity,
+
+    -- * Destructuring the Response
+    PutEmailIdentityMailFromAttributesResponse (..),
+    newPutEmailIdentityMailFromAttributesResponse,
+
+    -- * Response Lenses
+    putEmailIdentityMailFromAttributesResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to configure the custom MAIL FROM domain for a verified
+-- identity.
+--
+-- /See:/ 'newPutEmailIdentityMailFromAttributes' smart constructor.
+data PutEmailIdentityMailFromAttributes = PutEmailIdentityMailFromAttributes'
+  { -- | The action to take if the required MX record isn\'t found when you send
+    -- an email. When you set this value to @UseDefaultValue@, the mail is sent
+    -- using /amazonses.com/ as the MAIL FROM domain. When you set this value
+    -- to @RejectMessage@, the Amazon SES API v2 returns a
+    -- @MailFromDomainNotVerified@ error, and doesn\'t attempt to deliver the
+    -- email.
+    --
+    -- These behaviors are taken when the custom MAIL FROM domain configuration
+    -- is in the @Pending@, @Failed@, and @TemporaryFailure@ states.
+    behaviorOnMxFailure :: Prelude.Maybe BehaviorOnMxFailure,
+    -- | The custom MAIL FROM domain that you want the verified identity to use.
+    -- The MAIL FROM domain must meet the following criteria:
+    --
+    -- -   It has to be a subdomain of the verified identity.
+    --
+    -- -   It can\'t be used to receive email.
+    --
+    -- -   It can\'t be used in a \"From\" address if the MAIL FROM domain is a
+    --     destination for feedback forwarding emails.
+    mailFromDomain :: Prelude.Maybe Prelude.Text,
+    -- | The verified email identity.
+    emailIdentity :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutEmailIdentityMailFromAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'behaviorOnMxFailure', 'putEmailIdentityMailFromAttributes_behaviorOnMxFailure' - The action to take if the required MX record isn\'t found when you send
+-- an email. When you set this value to @UseDefaultValue@, the mail is sent
+-- using /amazonses.com/ as the MAIL FROM domain. When you set this value
+-- to @RejectMessage@, the Amazon SES API v2 returns a
+-- @MailFromDomainNotVerified@ error, and doesn\'t attempt to deliver the
+-- email.
+--
+-- These behaviors are taken when the custom MAIL FROM domain configuration
+-- is in the @Pending@, @Failed@, and @TemporaryFailure@ states.
+--
+-- 'mailFromDomain', 'putEmailIdentityMailFromAttributes_mailFromDomain' - The custom MAIL FROM domain that you want the verified identity to use.
+-- The MAIL FROM domain must meet the following criteria:
+--
+-- -   It has to be a subdomain of the verified identity.
+--
+-- -   It can\'t be used to receive email.
+--
+-- -   It can\'t be used in a \"From\" address if the MAIL FROM domain is a
+--     destination for feedback forwarding emails.
+--
+-- 'emailIdentity', 'putEmailIdentityMailFromAttributes_emailIdentity' - The verified email identity.
+newPutEmailIdentityMailFromAttributes ::
+  -- | 'emailIdentity'
+  Prelude.Text ->
+  PutEmailIdentityMailFromAttributes
+newPutEmailIdentityMailFromAttributes pEmailIdentity_ =
+  PutEmailIdentityMailFromAttributes'
+    { behaviorOnMxFailure =
+        Prelude.Nothing,
+      mailFromDomain = Prelude.Nothing,
+      emailIdentity = pEmailIdentity_
+    }
+
+-- | The action to take if the required MX record isn\'t found when you send
+-- an email. When you set this value to @UseDefaultValue@, the mail is sent
+-- using /amazonses.com/ as the MAIL FROM domain. When you set this value
+-- to @RejectMessage@, the Amazon SES API v2 returns a
+-- @MailFromDomainNotVerified@ error, and doesn\'t attempt to deliver the
+-- email.
+--
+-- These behaviors are taken when the custom MAIL FROM domain configuration
+-- is in the @Pending@, @Failed@, and @TemporaryFailure@ states.
+putEmailIdentityMailFromAttributes_behaviorOnMxFailure :: Lens.Lens' PutEmailIdentityMailFromAttributes (Prelude.Maybe BehaviorOnMxFailure)
+putEmailIdentityMailFromAttributes_behaviorOnMxFailure = Lens.lens (\PutEmailIdentityMailFromAttributes' {behaviorOnMxFailure} -> behaviorOnMxFailure) (\s@PutEmailIdentityMailFromAttributes' {} a -> s {behaviorOnMxFailure = a} :: PutEmailIdentityMailFromAttributes)
+
+-- | The custom MAIL FROM domain that you want the verified identity to use.
+-- The MAIL FROM domain must meet the following criteria:
+--
+-- -   It has to be a subdomain of the verified identity.
+--
+-- -   It can\'t be used to receive email.
+--
+-- -   It can\'t be used in a \"From\" address if the MAIL FROM domain is a
+--     destination for feedback forwarding emails.
+putEmailIdentityMailFromAttributes_mailFromDomain :: Lens.Lens' PutEmailIdentityMailFromAttributes (Prelude.Maybe Prelude.Text)
+putEmailIdentityMailFromAttributes_mailFromDomain = Lens.lens (\PutEmailIdentityMailFromAttributes' {mailFromDomain} -> mailFromDomain) (\s@PutEmailIdentityMailFromAttributes' {} a -> s {mailFromDomain = a} :: PutEmailIdentityMailFromAttributes)
+
+-- | The verified email identity.
+putEmailIdentityMailFromAttributes_emailIdentity :: Lens.Lens' PutEmailIdentityMailFromAttributes Prelude.Text
+putEmailIdentityMailFromAttributes_emailIdentity = Lens.lens (\PutEmailIdentityMailFromAttributes' {emailIdentity} -> emailIdentity) (\s@PutEmailIdentityMailFromAttributes' {} a -> s {emailIdentity = a} :: PutEmailIdentityMailFromAttributes)
+
+instance
+  Core.AWSRequest
+    PutEmailIdentityMailFromAttributes
+  where
+  type
+    AWSResponse PutEmailIdentityMailFromAttributes =
+      PutEmailIdentityMailFromAttributesResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutEmailIdentityMailFromAttributesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutEmailIdentityMailFromAttributes
+  where
+  hashWithSalt
+    _salt
+    PutEmailIdentityMailFromAttributes' {..} =
+      _salt
+        `Prelude.hashWithSalt` behaviorOnMxFailure
+        `Prelude.hashWithSalt` mailFromDomain
+        `Prelude.hashWithSalt` emailIdentity
+
+instance
+  Prelude.NFData
+    PutEmailIdentityMailFromAttributes
+  where
+  rnf PutEmailIdentityMailFromAttributes' {..} =
+    Prelude.rnf behaviorOnMxFailure
+      `Prelude.seq` Prelude.rnf mailFromDomain
+      `Prelude.seq` Prelude.rnf emailIdentity
+
+instance
+  Data.ToHeaders
+    PutEmailIdentityMailFromAttributes
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    PutEmailIdentityMailFromAttributes
+  where
+  toJSON PutEmailIdentityMailFromAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BehaviorOnMxFailure" Data..=)
+              Prelude.<$> behaviorOnMxFailure,
+            ("MailFromDomain" Data..=)
+              Prelude.<$> mailFromDomain
+          ]
+      )
+
+instance
+  Data.ToPath
+    PutEmailIdentityMailFromAttributes
+  where
+  toPath PutEmailIdentityMailFromAttributes' {..} =
+    Prelude.mconcat
+      [ "/v2/email/identities/",
+        Data.toBS emailIdentity,
+        "/mail-from"
+      ]
+
+instance
+  Data.ToQuery
+    PutEmailIdentityMailFromAttributes
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newPutEmailIdentityMailFromAttributesResponse' smart constructor.
+data PutEmailIdentityMailFromAttributesResponse = PutEmailIdentityMailFromAttributesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutEmailIdentityMailFromAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putEmailIdentityMailFromAttributesResponse_httpStatus' - The response's http status code.
+newPutEmailIdentityMailFromAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutEmailIdentityMailFromAttributesResponse
+newPutEmailIdentityMailFromAttributesResponse
+  pHttpStatus_ =
+    PutEmailIdentityMailFromAttributesResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+putEmailIdentityMailFromAttributesResponse_httpStatus :: Lens.Lens' PutEmailIdentityMailFromAttributesResponse Prelude.Int
+putEmailIdentityMailFromAttributesResponse_httpStatus = Lens.lens (\PutEmailIdentityMailFromAttributesResponse' {httpStatus} -> httpStatus) (\s@PutEmailIdentityMailFromAttributesResponse' {} a -> s {httpStatus = a} :: PutEmailIdentityMailFromAttributesResponse)
+
+instance
+  Prelude.NFData
+    PutEmailIdentityMailFromAttributesResponse
+  where
+  rnf PutEmailIdentityMailFromAttributesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/PutSuppressedDestination.hs b/gen/Amazonka/SESV2/PutSuppressedDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/PutSuppressedDestination.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.SESV2.PutSuppressedDestination
+-- 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 an email address to the suppression list for your account.
+module Amazonka.SESV2.PutSuppressedDestination
+  ( -- * Creating a Request
+    PutSuppressedDestination (..),
+    newPutSuppressedDestination,
+
+    -- * Request Lenses
+    putSuppressedDestination_emailAddress,
+    putSuppressedDestination_reason,
+
+    -- * Destructuring the Response
+    PutSuppressedDestinationResponse (..),
+    newPutSuppressedDestinationResponse,
+
+    -- * Response Lenses
+    putSuppressedDestinationResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to add an email destination to the suppression list for your
+-- account.
+--
+-- /See:/ 'newPutSuppressedDestination' smart constructor.
+data PutSuppressedDestination = PutSuppressedDestination'
+  { -- | The email address that should be added to the suppression list for your
+    -- account.
+    emailAddress :: Prelude.Text,
+    -- | The factors that should cause the email address to be added to the
+    -- suppression list for your account.
+    reason :: SuppressionListReason
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutSuppressedDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'emailAddress', 'putSuppressedDestination_emailAddress' - The email address that should be added to the suppression list for your
+-- account.
+--
+-- 'reason', 'putSuppressedDestination_reason' - The factors that should cause the email address to be added to the
+-- suppression list for your account.
+newPutSuppressedDestination ::
+  -- | 'emailAddress'
+  Prelude.Text ->
+  -- | 'reason'
+  SuppressionListReason ->
+  PutSuppressedDestination
+newPutSuppressedDestination pEmailAddress_ pReason_ =
+  PutSuppressedDestination'
+    { emailAddress =
+        pEmailAddress_,
+      reason = pReason_
+    }
+
+-- | The email address that should be added to the suppression list for your
+-- account.
+putSuppressedDestination_emailAddress :: Lens.Lens' PutSuppressedDestination Prelude.Text
+putSuppressedDestination_emailAddress = Lens.lens (\PutSuppressedDestination' {emailAddress} -> emailAddress) (\s@PutSuppressedDestination' {} a -> s {emailAddress = a} :: PutSuppressedDestination)
+
+-- | The factors that should cause the email address to be added to the
+-- suppression list for your account.
+putSuppressedDestination_reason :: Lens.Lens' PutSuppressedDestination SuppressionListReason
+putSuppressedDestination_reason = Lens.lens (\PutSuppressedDestination' {reason} -> reason) (\s@PutSuppressedDestination' {} a -> s {reason = a} :: PutSuppressedDestination)
+
+instance Core.AWSRequest PutSuppressedDestination where
+  type
+    AWSResponse PutSuppressedDestination =
+      PutSuppressedDestinationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutSuppressedDestinationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutSuppressedDestination where
+  hashWithSalt _salt PutSuppressedDestination' {..} =
+    _salt
+      `Prelude.hashWithSalt` emailAddress
+      `Prelude.hashWithSalt` reason
+
+instance Prelude.NFData PutSuppressedDestination where
+  rnf PutSuppressedDestination' {..} =
+    Prelude.rnf emailAddress
+      `Prelude.seq` Prelude.rnf reason
+
+instance Data.ToHeaders PutSuppressedDestination where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutSuppressedDestination where
+  toJSON PutSuppressedDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("EmailAddress" Data..= emailAddress),
+            Prelude.Just ("Reason" Data..= reason)
+          ]
+      )
+
+instance Data.ToPath PutSuppressedDestination where
+  toPath =
+    Prelude.const "/v2/email/suppression/addresses"
+
+instance Data.ToQuery PutSuppressedDestination where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newPutSuppressedDestinationResponse' smart constructor.
+data PutSuppressedDestinationResponse = PutSuppressedDestinationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutSuppressedDestinationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putSuppressedDestinationResponse_httpStatus' - The response's http status code.
+newPutSuppressedDestinationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutSuppressedDestinationResponse
+newPutSuppressedDestinationResponse pHttpStatus_ =
+  PutSuppressedDestinationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putSuppressedDestinationResponse_httpStatus :: Lens.Lens' PutSuppressedDestinationResponse Prelude.Int
+putSuppressedDestinationResponse_httpStatus = Lens.lens (\PutSuppressedDestinationResponse' {httpStatus} -> httpStatus) (\s@PutSuppressedDestinationResponse' {} a -> s {httpStatus = a} :: PutSuppressedDestinationResponse)
+
+instance
+  Prelude.NFData
+    PutSuppressedDestinationResponse
+  where
+  rnf PutSuppressedDestinationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/SendBulkEmail.hs b/gen/Amazonka/SESV2/SendBulkEmail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/SendBulkEmail.hs
@@ -0,0 +1,395 @@
+{-# 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.SESV2.SendBulkEmail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Composes an email message to multiple destinations.
+module Amazonka.SESV2.SendBulkEmail
+  ( -- * Creating a Request
+    SendBulkEmail (..),
+    newSendBulkEmail,
+
+    -- * Request Lenses
+    sendBulkEmail_configurationSetName,
+    sendBulkEmail_defaultEmailTags,
+    sendBulkEmail_feedbackForwardingEmailAddress,
+    sendBulkEmail_feedbackForwardingEmailAddressIdentityArn,
+    sendBulkEmail_fromEmailAddress,
+    sendBulkEmail_fromEmailAddressIdentityArn,
+    sendBulkEmail_replyToAddresses,
+    sendBulkEmail_defaultContent,
+    sendBulkEmail_bulkEmailEntries,
+
+    -- * Destructuring the Response
+    SendBulkEmailResponse (..),
+    newSendBulkEmailResponse,
+
+    -- * Response Lenses
+    sendBulkEmailResponse_httpStatus,
+    sendBulkEmailResponse_bulkEmailEntryResults,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to send email messages to multiple destinations
+-- using Amazon SES. For more information, see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-personalized-email-api.html Amazon SES Developer Guide>.
+--
+-- /See:/ 'newSendBulkEmail' smart constructor.
+data SendBulkEmail = SendBulkEmail'
+  { -- | The name of the configuration set to use when sending the email.
+    configurationSetName :: Prelude.Maybe Prelude.Text,
+    -- | A list of tags, in the form of name\/value pairs, to apply to an email
+    -- that you send using the @SendEmail@ operation. Tags correspond to
+    -- characteristics of the email that you define, so that you can publish
+    -- email sending events.
+    defaultEmailTags :: Prelude.Maybe [MessageTag],
+    -- | The address that you want bounce and complaint notifications to be sent
+    -- to.
+    feedbackForwardingEmailAddress :: Prelude.Maybe Prelude.Text,
+    -- | This parameter is used only for sending authorization. It is the ARN of
+    -- the identity that is associated with the sending authorization policy
+    -- that permits you to use the email address specified in the
+    -- @FeedbackForwardingEmailAddress@ parameter.
+    --
+    -- For example, if the owner of example.com (which has ARN
+    -- arn:aws:ses:us-east-1:123456789012:identity\/example.com) attaches a
+    -- policy to it that authorizes you to use feedback\@example.com, then you
+    -- would specify the @FeedbackForwardingEmailAddressIdentityArn@ to be
+    -- arn:aws:ses:us-east-1:123456789012:identity\/example.com, and the
+    -- @FeedbackForwardingEmailAddress@ to be feedback\@example.com.
+    --
+    -- For more information about sending authorization, see the
+    -- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html Amazon SES Developer Guide>.
+    feedbackForwardingEmailAddressIdentityArn :: Prelude.Maybe Prelude.Text,
+    -- | The email address to use as the \"From\" address for the email. The
+    -- address that you specify has to be verified.
+    fromEmailAddress :: Prelude.Maybe Prelude.Text,
+    -- | This parameter is used only for sending authorization. It is the ARN of
+    -- the identity that is associated with the sending authorization policy
+    -- that permits you to use the email address specified in the
+    -- @FromEmailAddress@ parameter.
+    --
+    -- For example, if the owner of example.com (which has ARN
+    -- arn:aws:ses:us-east-1:123456789012:identity\/example.com) attaches a
+    -- policy to it that authorizes you to use sender\@example.com, then you
+    -- would specify the @FromEmailAddressIdentityArn@ to be
+    -- arn:aws:ses:us-east-1:123456789012:identity\/example.com, and the
+    -- @FromEmailAddress@ to be sender\@example.com.
+    --
+    -- For more information about sending authorization, see the
+    -- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html Amazon SES Developer Guide>.
+    fromEmailAddressIdentityArn :: Prelude.Maybe Prelude.Text,
+    -- | The \"Reply-to\" email addresses for the message. When the recipient
+    -- replies to the message, each Reply-to address receives the reply.
+    replyToAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | An object that contains the body of the message. You can specify a
+    -- template message.
+    defaultContent :: BulkEmailContent,
+    -- | The list of bulk email entry objects.
+    bulkEmailEntries :: [BulkEmailEntry]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendBulkEmail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configurationSetName', 'sendBulkEmail_configurationSetName' - The name of the configuration set to use when sending the email.
+--
+-- 'defaultEmailTags', 'sendBulkEmail_defaultEmailTags' - A list of tags, in the form of name\/value pairs, to apply to an email
+-- that you send using the @SendEmail@ operation. Tags correspond to
+-- characteristics of the email that you define, so that you can publish
+-- email sending events.
+--
+-- 'feedbackForwardingEmailAddress', 'sendBulkEmail_feedbackForwardingEmailAddress' - The address that you want bounce and complaint notifications to be sent
+-- to.
+--
+-- 'feedbackForwardingEmailAddressIdentityArn', 'sendBulkEmail_feedbackForwardingEmailAddressIdentityArn' - This parameter is used only for sending authorization. It is the ARN of
+-- the identity that is associated with the sending authorization policy
+-- that permits you to use the email address specified in the
+-- @FeedbackForwardingEmailAddress@ parameter.
+--
+-- For example, if the owner of example.com (which has ARN
+-- arn:aws:ses:us-east-1:123456789012:identity\/example.com) attaches a
+-- policy to it that authorizes you to use feedback\@example.com, then you
+-- would specify the @FeedbackForwardingEmailAddressIdentityArn@ to be
+-- arn:aws:ses:us-east-1:123456789012:identity\/example.com, and the
+-- @FeedbackForwardingEmailAddress@ to be feedback\@example.com.
+--
+-- For more information about sending authorization, see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html Amazon SES Developer Guide>.
+--
+-- 'fromEmailAddress', 'sendBulkEmail_fromEmailAddress' - The email address to use as the \"From\" address for the email. The
+-- address that you specify has to be verified.
+--
+-- 'fromEmailAddressIdentityArn', 'sendBulkEmail_fromEmailAddressIdentityArn' - This parameter is used only for sending authorization. It is the ARN of
+-- the identity that is associated with the sending authorization policy
+-- that permits you to use the email address specified in the
+-- @FromEmailAddress@ parameter.
+--
+-- For example, if the owner of example.com (which has ARN
+-- arn:aws:ses:us-east-1:123456789012:identity\/example.com) attaches a
+-- policy to it that authorizes you to use sender\@example.com, then you
+-- would specify the @FromEmailAddressIdentityArn@ to be
+-- arn:aws:ses:us-east-1:123456789012:identity\/example.com, and the
+-- @FromEmailAddress@ to be sender\@example.com.
+--
+-- For more information about sending authorization, see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html Amazon SES Developer Guide>.
+--
+-- 'replyToAddresses', 'sendBulkEmail_replyToAddresses' - The \"Reply-to\" email addresses for the message. When the recipient
+-- replies to the message, each Reply-to address receives the reply.
+--
+-- 'defaultContent', 'sendBulkEmail_defaultContent' - An object that contains the body of the message. You can specify a
+-- template message.
+--
+-- 'bulkEmailEntries', 'sendBulkEmail_bulkEmailEntries' - The list of bulk email entry objects.
+newSendBulkEmail ::
+  -- | 'defaultContent'
+  BulkEmailContent ->
+  SendBulkEmail
+newSendBulkEmail pDefaultContent_ =
+  SendBulkEmail'
+    { configurationSetName =
+        Prelude.Nothing,
+      defaultEmailTags = Prelude.Nothing,
+      feedbackForwardingEmailAddress = Prelude.Nothing,
+      feedbackForwardingEmailAddressIdentityArn =
+        Prelude.Nothing,
+      fromEmailAddress = Prelude.Nothing,
+      fromEmailAddressIdentityArn = Prelude.Nothing,
+      replyToAddresses = Prelude.Nothing,
+      defaultContent = pDefaultContent_,
+      bulkEmailEntries = Prelude.mempty
+    }
+
+-- | The name of the configuration set to use when sending the email.
+sendBulkEmail_configurationSetName :: Lens.Lens' SendBulkEmail (Prelude.Maybe Prelude.Text)
+sendBulkEmail_configurationSetName = Lens.lens (\SendBulkEmail' {configurationSetName} -> configurationSetName) (\s@SendBulkEmail' {} a -> s {configurationSetName = a} :: SendBulkEmail)
+
+-- | A list of tags, in the form of name\/value pairs, to apply to an email
+-- that you send using the @SendEmail@ operation. Tags correspond to
+-- characteristics of the email that you define, so that you can publish
+-- email sending events.
+sendBulkEmail_defaultEmailTags :: Lens.Lens' SendBulkEmail (Prelude.Maybe [MessageTag])
+sendBulkEmail_defaultEmailTags = Lens.lens (\SendBulkEmail' {defaultEmailTags} -> defaultEmailTags) (\s@SendBulkEmail' {} a -> s {defaultEmailTags = a} :: SendBulkEmail) Prelude.. Lens.mapping Lens.coerced
+
+-- | The address that you want bounce and complaint notifications to be sent
+-- to.
+sendBulkEmail_feedbackForwardingEmailAddress :: Lens.Lens' SendBulkEmail (Prelude.Maybe Prelude.Text)
+sendBulkEmail_feedbackForwardingEmailAddress = Lens.lens (\SendBulkEmail' {feedbackForwardingEmailAddress} -> feedbackForwardingEmailAddress) (\s@SendBulkEmail' {} a -> s {feedbackForwardingEmailAddress = a} :: SendBulkEmail)
+
+-- | This parameter is used only for sending authorization. It is the ARN of
+-- the identity that is associated with the sending authorization policy
+-- that permits you to use the email address specified in the
+-- @FeedbackForwardingEmailAddress@ parameter.
+--
+-- For example, if the owner of example.com (which has ARN
+-- arn:aws:ses:us-east-1:123456789012:identity\/example.com) attaches a
+-- policy to it that authorizes you to use feedback\@example.com, then you
+-- would specify the @FeedbackForwardingEmailAddressIdentityArn@ to be
+-- arn:aws:ses:us-east-1:123456789012:identity\/example.com, and the
+-- @FeedbackForwardingEmailAddress@ to be feedback\@example.com.
+--
+-- For more information about sending authorization, see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html Amazon SES Developer Guide>.
+sendBulkEmail_feedbackForwardingEmailAddressIdentityArn :: Lens.Lens' SendBulkEmail (Prelude.Maybe Prelude.Text)
+sendBulkEmail_feedbackForwardingEmailAddressIdentityArn = Lens.lens (\SendBulkEmail' {feedbackForwardingEmailAddressIdentityArn} -> feedbackForwardingEmailAddressIdentityArn) (\s@SendBulkEmail' {} a -> s {feedbackForwardingEmailAddressIdentityArn = a} :: SendBulkEmail)
+
+-- | The email address to use as the \"From\" address for the email. The
+-- address that you specify has to be verified.
+sendBulkEmail_fromEmailAddress :: Lens.Lens' SendBulkEmail (Prelude.Maybe Prelude.Text)
+sendBulkEmail_fromEmailAddress = Lens.lens (\SendBulkEmail' {fromEmailAddress} -> fromEmailAddress) (\s@SendBulkEmail' {} a -> s {fromEmailAddress = a} :: SendBulkEmail)
+
+-- | This parameter is used only for sending authorization. It is the ARN of
+-- the identity that is associated with the sending authorization policy
+-- that permits you to use the email address specified in the
+-- @FromEmailAddress@ parameter.
+--
+-- For example, if the owner of example.com (which has ARN
+-- arn:aws:ses:us-east-1:123456789012:identity\/example.com) attaches a
+-- policy to it that authorizes you to use sender\@example.com, then you
+-- would specify the @FromEmailAddressIdentityArn@ to be
+-- arn:aws:ses:us-east-1:123456789012:identity\/example.com, and the
+-- @FromEmailAddress@ to be sender\@example.com.
+--
+-- For more information about sending authorization, see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html Amazon SES Developer Guide>.
+sendBulkEmail_fromEmailAddressIdentityArn :: Lens.Lens' SendBulkEmail (Prelude.Maybe Prelude.Text)
+sendBulkEmail_fromEmailAddressIdentityArn = Lens.lens (\SendBulkEmail' {fromEmailAddressIdentityArn} -> fromEmailAddressIdentityArn) (\s@SendBulkEmail' {} a -> s {fromEmailAddressIdentityArn = a} :: SendBulkEmail)
+
+-- | The \"Reply-to\" email addresses for the message. When the recipient
+-- replies to the message, each Reply-to address receives the reply.
+sendBulkEmail_replyToAddresses :: Lens.Lens' SendBulkEmail (Prelude.Maybe [Prelude.Text])
+sendBulkEmail_replyToAddresses = Lens.lens (\SendBulkEmail' {replyToAddresses} -> replyToAddresses) (\s@SendBulkEmail' {} a -> s {replyToAddresses = a} :: SendBulkEmail) Prelude.. Lens.mapping Lens.coerced
+
+-- | An object that contains the body of the message. You can specify a
+-- template message.
+sendBulkEmail_defaultContent :: Lens.Lens' SendBulkEmail BulkEmailContent
+sendBulkEmail_defaultContent = Lens.lens (\SendBulkEmail' {defaultContent} -> defaultContent) (\s@SendBulkEmail' {} a -> s {defaultContent = a} :: SendBulkEmail)
+
+-- | The list of bulk email entry objects.
+sendBulkEmail_bulkEmailEntries :: Lens.Lens' SendBulkEmail [BulkEmailEntry]
+sendBulkEmail_bulkEmailEntries = Lens.lens (\SendBulkEmail' {bulkEmailEntries} -> bulkEmailEntries) (\s@SendBulkEmail' {} a -> s {bulkEmailEntries = a} :: SendBulkEmail) Prelude.. Lens.coerced
+
+instance Core.AWSRequest SendBulkEmail where
+  type
+    AWSResponse SendBulkEmail =
+      SendBulkEmailResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SendBulkEmailResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "BulkEmailEntryResults"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable SendBulkEmail where
+  hashWithSalt _salt SendBulkEmail' {..} =
+    _salt
+      `Prelude.hashWithSalt` configurationSetName
+      `Prelude.hashWithSalt` defaultEmailTags
+      `Prelude.hashWithSalt` feedbackForwardingEmailAddress
+      `Prelude.hashWithSalt` feedbackForwardingEmailAddressIdentityArn
+      `Prelude.hashWithSalt` fromEmailAddress
+      `Prelude.hashWithSalt` fromEmailAddressIdentityArn
+      `Prelude.hashWithSalt` replyToAddresses
+      `Prelude.hashWithSalt` defaultContent
+      `Prelude.hashWithSalt` bulkEmailEntries
+
+instance Prelude.NFData SendBulkEmail where
+  rnf SendBulkEmail' {..} =
+    Prelude.rnf configurationSetName
+      `Prelude.seq` Prelude.rnf defaultEmailTags
+      `Prelude.seq` Prelude.rnf feedbackForwardingEmailAddress
+      `Prelude.seq` Prelude.rnf feedbackForwardingEmailAddressIdentityArn
+      `Prelude.seq` Prelude.rnf fromEmailAddress
+      `Prelude.seq` Prelude.rnf fromEmailAddressIdentityArn
+      `Prelude.seq` Prelude.rnf replyToAddresses
+      `Prelude.seq` Prelude.rnf defaultContent
+      `Prelude.seq` Prelude.rnf bulkEmailEntries
+
+instance Data.ToHeaders SendBulkEmail where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SendBulkEmail where
+  toJSON SendBulkEmail' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ConfigurationSetName" Data..=)
+              Prelude.<$> configurationSetName,
+            ("DefaultEmailTags" Data..=)
+              Prelude.<$> defaultEmailTags,
+            ("FeedbackForwardingEmailAddress" Data..=)
+              Prelude.<$> feedbackForwardingEmailAddress,
+            ("FeedbackForwardingEmailAddressIdentityArn" Data..=)
+              Prelude.<$> feedbackForwardingEmailAddressIdentityArn,
+            ("FromEmailAddress" Data..=)
+              Prelude.<$> fromEmailAddress,
+            ("FromEmailAddressIdentityArn" Data..=)
+              Prelude.<$> fromEmailAddressIdentityArn,
+            ("ReplyToAddresses" Data..=)
+              Prelude.<$> replyToAddresses,
+            Prelude.Just
+              ("DefaultContent" Data..= defaultContent),
+            Prelude.Just
+              ("BulkEmailEntries" Data..= bulkEmailEntries)
+          ]
+      )
+
+instance Data.ToPath SendBulkEmail where
+  toPath =
+    Prelude.const "/v2/email/outbound-bulk-emails"
+
+instance Data.ToQuery SendBulkEmail where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The following data is returned in JSON format by the service.
+--
+-- /See:/ 'newSendBulkEmailResponse' smart constructor.
+data SendBulkEmailResponse = SendBulkEmailResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | One object per intended recipient. Check each response object and retry
+    -- any messages with a failure status.
+    bulkEmailEntryResults :: [BulkEmailEntryResult]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendBulkEmailResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'sendBulkEmailResponse_httpStatus' - The response's http status code.
+--
+-- 'bulkEmailEntryResults', 'sendBulkEmailResponse_bulkEmailEntryResults' - One object per intended recipient. Check each response object and retry
+-- any messages with a failure status.
+newSendBulkEmailResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SendBulkEmailResponse
+newSendBulkEmailResponse pHttpStatus_ =
+  SendBulkEmailResponse'
+    { httpStatus = pHttpStatus_,
+      bulkEmailEntryResults = Prelude.mempty
+    }
+
+-- | The response's http status code.
+sendBulkEmailResponse_httpStatus :: Lens.Lens' SendBulkEmailResponse Prelude.Int
+sendBulkEmailResponse_httpStatus = Lens.lens (\SendBulkEmailResponse' {httpStatus} -> httpStatus) (\s@SendBulkEmailResponse' {} a -> s {httpStatus = a} :: SendBulkEmailResponse)
+
+-- | One object per intended recipient. Check each response object and retry
+-- any messages with a failure status.
+sendBulkEmailResponse_bulkEmailEntryResults :: Lens.Lens' SendBulkEmailResponse [BulkEmailEntryResult]
+sendBulkEmailResponse_bulkEmailEntryResults = Lens.lens (\SendBulkEmailResponse' {bulkEmailEntryResults} -> bulkEmailEntryResults) (\s@SendBulkEmailResponse' {} a -> s {bulkEmailEntryResults = a} :: SendBulkEmailResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData SendBulkEmailResponse where
+  rnf SendBulkEmailResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf bulkEmailEntryResults
diff --git a/gen/Amazonka/SESV2/SendCustomVerificationEmail.hs b/gen/Amazonka/SESV2/SendCustomVerificationEmail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/SendCustomVerificationEmail.hs
@@ -0,0 +1,228 @@
+{-# 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.SESV2.SendCustomVerificationEmail
+-- 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 an email address to the list of identities for your Amazon SES
+-- account in the current Amazon Web Services Region and attempts to verify
+-- it. As a result of executing this operation, a customized verification
+-- email is sent to the specified address.
+--
+-- To use this operation, you must first create a custom verification email
+-- template. For more information about creating and using custom
+-- verification email templates, see
+-- <https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#send-email-verify-address-custom Using custom verification email templates>
+-- in the /Amazon SES Developer Guide/.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.SendCustomVerificationEmail
+  ( -- * Creating a Request
+    SendCustomVerificationEmail (..),
+    newSendCustomVerificationEmail,
+
+    -- * Request Lenses
+    sendCustomVerificationEmail_configurationSetName,
+    sendCustomVerificationEmail_emailAddress,
+    sendCustomVerificationEmail_templateName,
+
+    -- * Destructuring the Response
+    SendCustomVerificationEmailResponse (..),
+    newSendCustomVerificationEmailResponse,
+
+    -- * Response Lenses
+    sendCustomVerificationEmailResponse_messageId,
+    sendCustomVerificationEmailResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to send a custom verification email to a specified
+-- recipient.
+--
+-- /See:/ 'newSendCustomVerificationEmail' smart constructor.
+data SendCustomVerificationEmail = SendCustomVerificationEmail'
+  { -- | Name of a configuration set to use when sending the verification email.
+    configurationSetName :: Prelude.Maybe Prelude.Text,
+    -- | The email address to verify.
+    emailAddress :: Prelude.Text,
+    -- | The name of the custom verification email template to use when sending
+    -- the verification email.
+    templateName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendCustomVerificationEmail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configurationSetName', 'sendCustomVerificationEmail_configurationSetName' - Name of a configuration set to use when sending the verification email.
+--
+-- 'emailAddress', 'sendCustomVerificationEmail_emailAddress' - The email address to verify.
+--
+-- 'templateName', 'sendCustomVerificationEmail_templateName' - The name of the custom verification email template to use when sending
+-- the verification email.
+newSendCustomVerificationEmail ::
+  -- | 'emailAddress'
+  Prelude.Text ->
+  -- | 'templateName'
+  Prelude.Text ->
+  SendCustomVerificationEmail
+newSendCustomVerificationEmail
+  pEmailAddress_
+  pTemplateName_ =
+    SendCustomVerificationEmail'
+      { configurationSetName =
+          Prelude.Nothing,
+        emailAddress = pEmailAddress_,
+        templateName = pTemplateName_
+      }
+
+-- | Name of a configuration set to use when sending the verification email.
+sendCustomVerificationEmail_configurationSetName :: Lens.Lens' SendCustomVerificationEmail (Prelude.Maybe Prelude.Text)
+sendCustomVerificationEmail_configurationSetName = Lens.lens (\SendCustomVerificationEmail' {configurationSetName} -> configurationSetName) (\s@SendCustomVerificationEmail' {} a -> s {configurationSetName = a} :: SendCustomVerificationEmail)
+
+-- | The email address to verify.
+sendCustomVerificationEmail_emailAddress :: Lens.Lens' SendCustomVerificationEmail Prelude.Text
+sendCustomVerificationEmail_emailAddress = Lens.lens (\SendCustomVerificationEmail' {emailAddress} -> emailAddress) (\s@SendCustomVerificationEmail' {} a -> s {emailAddress = a} :: SendCustomVerificationEmail)
+
+-- | The name of the custom verification email template to use when sending
+-- the verification email.
+sendCustomVerificationEmail_templateName :: Lens.Lens' SendCustomVerificationEmail Prelude.Text
+sendCustomVerificationEmail_templateName = Lens.lens (\SendCustomVerificationEmail' {templateName} -> templateName) (\s@SendCustomVerificationEmail' {} a -> s {templateName = a} :: SendCustomVerificationEmail)
+
+instance Core.AWSRequest SendCustomVerificationEmail where
+  type
+    AWSResponse SendCustomVerificationEmail =
+      SendCustomVerificationEmailResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SendCustomVerificationEmailResponse'
+            Prelude.<$> (x Data..?> "MessageId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SendCustomVerificationEmail where
+  hashWithSalt _salt SendCustomVerificationEmail' {..} =
+    _salt
+      `Prelude.hashWithSalt` configurationSetName
+      `Prelude.hashWithSalt` emailAddress
+      `Prelude.hashWithSalt` templateName
+
+instance Prelude.NFData SendCustomVerificationEmail where
+  rnf SendCustomVerificationEmail' {..} =
+    Prelude.rnf configurationSetName
+      `Prelude.seq` Prelude.rnf emailAddress
+      `Prelude.seq` Prelude.rnf templateName
+
+instance Data.ToHeaders SendCustomVerificationEmail where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SendCustomVerificationEmail where
+  toJSON SendCustomVerificationEmail' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ConfigurationSetName" Data..=)
+              Prelude.<$> configurationSetName,
+            Prelude.Just ("EmailAddress" Data..= emailAddress),
+            Prelude.Just ("TemplateName" Data..= templateName)
+          ]
+      )
+
+instance Data.ToPath SendCustomVerificationEmail where
+  toPath =
+    Prelude.const
+      "/v2/email/outbound-custom-verification-emails"
+
+instance Data.ToQuery SendCustomVerificationEmail where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The following element is returned by the service.
+--
+-- /See:/ 'newSendCustomVerificationEmailResponse' smart constructor.
+data SendCustomVerificationEmailResponse = SendCustomVerificationEmailResponse'
+  { -- | The unique message identifier returned from the
+    -- @SendCustomVerificationEmail@ operation.
+    messageId :: 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 'SendCustomVerificationEmailResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'messageId', 'sendCustomVerificationEmailResponse_messageId' - The unique message identifier returned from the
+-- @SendCustomVerificationEmail@ operation.
+--
+-- 'httpStatus', 'sendCustomVerificationEmailResponse_httpStatus' - The response's http status code.
+newSendCustomVerificationEmailResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SendCustomVerificationEmailResponse
+newSendCustomVerificationEmailResponse pHttpStatus_ =
+  SendCustomVerificationEmailResponse'
+    { messageId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique message identifier returned from the
+-- @SendCustomVerificationEmail@ operation.
+sendCustomVerificationEmailResponse_messageId :: Lens.Lens' SendCustomVerificationEmailResponse (Prelude.Maybe Prelude.Text)
+sendCustomVerificationEmailResponse_messageId = Lens.lens (\SendCustomVerificationEmailResponse' {messageId} -> messageId) (\s@SendCustomVerificationEmailResponse' {} a -> s {messageId = a} :: SendCustomVerificationEmailResponse)
+
+-- | The response's http status code.
+sendCustomVerificationEmailResponse_httpStatus :: Lens.Lens' SendCustomVerificationEmailResponse Prelude.Int
+sendCustomVerificationEmailResponse_httpStatus = Lens.lens (\SendCustomVerificationEmailResponse' {httpStatus} -> httpStatus) (\s@SendCustomVerificationEmailResponse' {} a -> s {httpStatus = a} :: SendCustomVerificationEmailResponse)
+
+instance
+  Prelude.NFData
+    SendCustomVerificationEmailResponse
+  where
+  rnf SendCustomVerificationEmailResponse' {..} =
+    Prelude.rnf messageId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/SendEmail.hs b/gen/Amazonka/SESV2/SendEmail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/SendEmail.hs
@@ -0,0 +1,445 @@
+{-# 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.SESV2.SendEmail
+-- 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 email message. You can use the Amazon SES API v2 to send the
+-- following types of messages:
+--
+-- -   __Simple__ – A standard email message. When you create this type of
+--     message, you specify the sender, the recipient, and the message
+--     body, and Amazon SES assembles the message for you.
+--
+-- -   __Raw__ – A raw, MIME-formatted email message. When you send this
+--     type of email, you have to specify all of the message headers, as
+--     well as the message body. You can use this message type to send
+--     messages that contain attachments. The message that you specify has
+--     to be a valid MIME message.
+--
+-- -   __Templated__ – A message that contains personalization tags. When
+--     you send this type of email, Amazon SES API v2 automatically
+--     replaces the tags with values that you specify.
+module Amazonka.SESV2.SendEmail
+  ( -- * Creating a Request
+    SendEmail (..),
+    newSendEmail,
+
+    -- * Request Lenses
+    sendEmail_configurationSetName,
+    sendEmail_destination,
+    sendEmail_emailTags,
+    sendEmail_feedbackForwardingEmailAddress,
+    sendEmail_feedbackForwardingEmailAddressIdentityArn,
+    sendEmail_fromEmailAddress,
+    sendEmail_fromEmailAddressIdentityArn,
+    sendEmail_listManagementOptions,
+    sendEmail_replyToAddresses,
+    sendEmail_content,
+
+    -- * Destructuring the Response
+    SendEmailResponse (..),
+    newSendEmailResponse,
+
+    -- * Response Lenses
+    sendEmailResponse_messageId,
+    sendEmailResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to send a single formatted email using Amazon SES.
+-- For more information, see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-formatted.html Amazon SES Developer Guide>.
+--
+-- /See:/ 'newSendEmail' smart constructor.
+data SendEmail = SendEmail'
+  { -- | The name of the configuration set to use when sending the email.
+    configurationSetName :: Prelude.Maybe Prelude.Text,
+    -- | An object that contains the recipients of the email message.
+    destination :: Prelude.Maybe Destination,
+    -- | A list of tags, in the form of name\/value pairs, to apply to an email
+    -- that you send using the @SendEmail@ operation. Tags correspond to
+    -- characteristics of the email that you define, so that you can publish
+    -- email sending events.
+    emailTags :: Prelude.Maybe [MessageTag],
+    -- | The address that you want bounce and complaint notifications to be sent
+    -- to.
+    feedbackForwardingEmailAddress :: Prelude.Maybe Prelude.Text,
+    -- | This parameter is used only for sending authorization. It is the ARN of
+    -- the identity that is associated with the sending authorization policy
+    -- that permits you to use the email address specified in the
+    -- @FeedbackForwardingEmailAddress@ parameter.
+    --
+    -- For example, if the owner of example.com (which has ARN
+    -- arn:aws:ses:us-east-1:123456789012:identity\/example.com) attaches a
+    -- policy to it that authorizes you to use feedback\@example.com, then you
+    -- would specify the @FeedbackForwardingEmailAddressIdentityArn@ to be
+    -- arn:aws:ses:us-east-1:123456789012:identity\/example.com, and the
+    -- @FeedbackForwardingEmailAddress@ to be feedback\@example.com.
+    --
+    -- For more information about sending authorization, see the
+    -- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html Amazon SES Developer Guide>.
+    feedbackForwardingEmailAddressIdentityArn :: Prelude.Maybe Prelude.Text,
+    -- | The email address to use as the \"From\" address for the email. The
+    -- address that you specify has to be verified.
+    fromEmailAddress :: Prelude.Maybe Prelude.Text,
+    -- | This parameter is used only for sending authorization. It is the ARN of
+    -- the identity that is associated with the sending authorization policy
+    -- that permits you to use the email address specified in the
+    -- @FromEmailAddress@ parameter.
+    --
+    -- For example, if the owner of example.com (which has ARN
+    -- arn:aws:ses:us-east-1:123456789012:identity\/example.com) attaches a
+    -- policy to it that authorizes you to use sender\@example.com, then you
+    -- would specify the @FromEmailAddressIdentityArn@ to be
+    -- arn:aws:ses:us-east-1:123456789012:identity\/example.com, and the
+    -- @FromEmailAddress@ to be sender\@example.com.
+    --
+    -- For more information about sending authorization, see the
+    -- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html Amazon SES Developer Guide>.
+    --
+    -- For Raw emails, the @FromEmailAddressIdentityArn@ value overrides the
+    -- X-SES-SOURCE-ARN and X-SES-FROM-ARN headers specified in raw email
+    -- message content.
+    fromEmailAddressIdentityArn :: Prelude.Maybe Prelude.Text,
+    -- | An object used to specify a list or topic to which an email belongs,
+    -- which will be used when a contact chooses to unsubscribe.
+    listManagementOptions :: Prelude.Maybe ListManagementOptions,
+    -- | The \"Reply-to\" email addresses for the message. When the recipient
+    -- replies to the message, each Reply-to address receives the reply.
+    replyToAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | An object that contains the body of the message. You can send either a
+    -- Simple message Raw message or a template Message.
+    content :: EmailContent
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendEmail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configurationSetName', 'sendEmail_configurationSetName' - The name of the configuration set to use when sending the email.
+--
+-- 'destination', 'sendEmail_destination' - An object that contains the recipients of the email message.
+--
+-- 'emailTags', 'sendEmail_emailTags' - A list of tags, in the form of name\/value pairs, to apply to an email
+-- that you send using the @SendEmail@ operation. Tags correspond to
+-- characteristics of the email that you define, so that you can publish
+-- email sending events.
+--
+-- 'feedbackForwardingEmailAddress', 'sendEmail_feedbackForwardingEmailAddress' - The address that you want bounce and complaint notifications to be sent
+-- to.
+--
+-- 'feedbackForwardingEmailAddressIdentityArn', 'sendEmail_feedbackForwardingEmailAddressIdentityArn' - This parameter is used only for sending authorization. It is the ARN of
+-- the identity that is associated with the sending authorization policy
+-- that permits you to use the email address specified in the
+-- @FeedbackForwardingEmailAddress@ parameter.
+--
+-- For example, if the owner of example.com (which has ARN
+-- arn:aws:ses:us-east-1:123456789012:identity\/example.com) attaches a
+-- policy to it that authorizes you to use feedback\@example.com, then you
+-- would specify the @FeedbackForwardingEmailAddressIdentityArn@ to be
+-- arn:aws:ses:us-east-1:123456789012:identity\/example.com, and the
+-- @FeedbackForwardingEmailAddress@ to be feedback\@example.com.
+--
+-- For more information about sending authorization, see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html Amazon SES Developer Guide>.
+--
+-- 'fromEmailAddress', 'sendEmail_fromEmailAddress' - The email address to use as the \"From\" address for the email. The
+-- address that you specify has to be verified.
+--
+-- 'fromEmailAddressIdentityArn', 'sendEmail_fromEmailAddressIdentityArn' - This parameter is used only for sending authorization. It is the ARN of
+-- the identity that is associated with the sending authorization policy
+-- that permits you to use the email address specified in the
+-- @FromEmailAddress@ parameter.
+--
+-- For example, if the owner of example.com (which has ARN
+-- arn:aws:ses:us-east-1:123456789012:identity\/example.com) attaches a
+-- policy to it that authorizes you to use sender\@example.com, then you
+-- would specify the @FromEmailAddressIdentityArn@ to be
+-- arn:aws:ses:us-east-1:123456789012:identity\/example.com, and the
+-- @FromEmailAddress@ to be sender\@example.com.
+--
+-- For more information about sending authorization, see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html Amazon SES Developer Guide>.
+--
+-- For Raw emails, the @FromEmailAddressIdentityArn@ value overrides the
+-- X-SES-SOURCE-ARN and X-SES-FROM-ARN headers specified in raw email
+-- message content.
+--
+-- 'listManagementOptions', 'sendEmail_listManagementOptions' - An object used to specify a list or topic to which an email belongs,
+-- which will be used when a contact chooses to unsubscribe.
+--
+-- 'replyToAddresses', 'sendEmail_replyToAddresses' - The \"Reply-to\" email addresses for the message. When the recipient
+-- replies to the message, each Reply-to address receives the reply.
+--
+-- 'content', 'sendEmail_content' - An object that contains the body of the message. You can send either a
+-- Simple message Raw message or a template Message.
+newSendEmail ::
+  -- | 'content'
+  EmailContent ->
+  SendEmail
+newSendEmail pContent_ =
+  SendEmail'
+    { configurationSetName = Prelude.Nothing,
+      destination = Prelude.Nothing,
+      emailTags = Prelude.Nothing,
+      feedbackForwardingEmailAddress = Prelude.Nothing,
+      feedbackForwardingEmailAddressIdentityArn =
+        Prelude.Nothing,
+      fromEmailAddress = Prelude.Nothing,
+      fromEmailAddressIdentityArn = Prelude.Nothing,
+      listManagementOptions = Prelude.Nothing,
+      replyToAddresses = Prelude.Nothing,
+      content = pContent_
+    }
+
+-- | The name of the configuration set to use when sending the email.
+sendEmail_configurationSetName :: Lens.Lens' SendEmail (Prelude.Maybe Prelude.Text)
+sendEmail_configurationSetName = Lens.lens (\SendEmail' {configurationSetName} -> configurationSetName) (\s@SendEmail' {} a -> s {configurationSetName = a} :: SendEmail)
+
+-- | An object that contains the recipients of the email message.
+sendEmail_destination :: Lens.Lens' SendEmail (Prelude.Maybe Destination)
+sendEmail_destination = Lens.lens (\SendEmail' {destination} -> destination) (\s@SendEmail' {} a -> s {destination = a} :: SendEmail)
+
+-- | A list of tags, in the form of name\/value pairs, to apply to an email
+-- that you send using the @SendEmail@ operation. Tags correspond to
+-- characteristics of the email that you define, so that you can publish
+-- email sending events.
+sendEmail_emailTags :: Lens.Lens' SendEmail (Prelude.Maybe [MessageTag])
+sendEmail_emailTags = Lens.lens (\SendEmail' {emailTags} -> emailTags) (\s@SendEmail' {} a -> s {emailTags = a} :: SendEmail) Prelude.. Lens.mapping Lens.coerced
+
+-- | The address that you want bounce and complaint notifications to be sent
+-- to.
+sendEmail_feedbackForwardingEmailAddress :: Lens.Lens' SendEmail (Prelude.Maybe Prelude.Text)
+sendEmail_feedbackForwardingEmailAddress = Lens.lens (\SendEmail' {feedbackForwardingEmailAddress} -> feedbackForwardingEmailAddress) (\s@SendEmail' {} a -> s {feedbackForwardingEmailAddress = a} :: SendEmail)
+
+-- | This parameter is used only for sending authorization. It is the ARN of
+-- the identity that is associated with the sending authorization policy
+-- that permits you to use the email address specified in the
+-- @FeedbackForwardingEmailAddress@ parameter.
+--
+-- For example, if the owner of example.com (which has ARN
+-- arn:aws:ses:us-east-1:123456789012:identity\/example.com) attaches a
+-- policy to it that authorizes you to use feedback\@example.com, then you
+-- would specify the @FeedbackForwardingEmailAddressIdentityArn@ to be
+-- arn:aws:ses:us-east-1:123456789012:identity\/example.com, and the
+-- @FeedbackForwardingEmailAddress@ to be feedback\@example.com.
+--
+-- For more information about sending authorization, see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html Amazon SES Developer Guide>.
+sendEmail_feedbackForwardingEmailAddressIdentityArn :: Lens.Lens' SendEmail (Prelude.Maybe Prelude.Text)
+sendEmail_feedbackForwardingEmailAddressIdentityArn = Lens.lens (\SendEmail' {feedbackForwardingEmailAddressIdentityArn} -> feedbackForwardingEmailAddressIdentityArn) (\s@SendEmail' {} a -> s {feedbackForwardingEmailAddressIdentityArn = a} :: SendEmail)
+
+-- | The email address to use as the \"From\" address for the email. The
+-- address that you specify has to be verified.
+sendEmail_fromEmailAddress :: Lens.Lens' SendEmail (Prelude.Maybe Prelude.Text)
+sendEmail_fromEmailAddress = Lens.lens (\SendEmail' {fromEmailAddress} -> fromEmailAddress) (\s@SendEmail' {} a -> s {fromEmailAddress = a} :: SendEmail)
+
+-- | This parameter is used only for sending authorization. It is the ARN of
+-- the identity that is associated with the sending authorization policy
+-- that permits you to use the email address specified in the
+-- @FromEmailAddress@ parameter.
+--
+-- For example, if the owner of example.com (which has ARN
+-- arn:aws:ses:us-east-1:123456789012:identity\/example.com) attaches a
+-- policy to it that authorizes you to use sender\@example.com, then you
+-- would specify the @FromEmailAddressIdentityArn@ to be
+-- arn:aws:ses:us-east-1:123456789012:identity\/example.com, and the
+-- @FromEmailAddress@ to be sender\@example.com.
+--
+-- For more information about sending authorization, see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html Amazon SES Developer Guide>.
+--
+-- For Raw emails, the @FromEmailAddressIdentityArn@ value overrides the
+-- X-SES-SOURCE-ARN and X-SES-FROM-ARN headers specified in raw email
+-- message content.
+sendEmail_fromEmailAddressIdentityArn :: Lens.Lens' SendEmail (Prelude.Maybe Prelude.Text)
+sendEmail_fromEmailAddressIdentityArn = Lens.lens (\SendEmail' {fromEmailAddressIdentityArn} -> fromEmailAddressIdentityArn) (\s@SendEmail' {} a -> s {fromEmailAddressIdentityArn = a} :: SendEmail)
+
+-- | An object used to specify a list or topic to which an email belongs,
+-- which will be used when a contact chooses to unsubscribe.
+sendEmail_listManagementOptions :: Lens.Lens' SendEmail (Prelude.Maybe ListManagementOptions)
+sendEmail_listManagementOptions = Lens.lens (\SendEmail' {listManagementOptions} -> listManagementOptions) (\s@SendEmail' {} a -> s {listManagementOptions = a} :: SendEmail)
+
+-- | The \"Reply-to\" email addresses for the message. When the recipient
+-- replies to the message, each Reply-to address receives the reply.
+sendEmail_replyToAddresses :: Lens.Lens' SendEmail (Prelude.Maybe [Prelude.Text])
+sendEmail_replyToAddresses = Lens.lens (\SendEmail' {replyToAddresses} -> replyToAddresses) (\s@SendEmail' {} a -> s {replyToAddresses = a} :: SendEmail) Prelude.. Lens.mapping Lens.coerced
+
+-- | An object that contains the body of the message. You can send either a
+-- Simple message Raw message or a template Message.
+sendEmail_content :: Lens.Lens' SendEmail EmailContent
+sendEmail_content = Lens.lens (\SendEmail' {content} -> content) (\s@SendEmail' {} a -> s {content = a} :: SendEmail)
+
+instance Core.AWSRequest SendEmail where
+  type AWSResponse SendEmail = SendEmailResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SendEmailResponse'
+            Prelude.<$> (x Data..?> "MessageId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SendEmail where
+  hashWithSalt _salt SendEmail' {..} =
+    _salt
+      `Prelude.hashWithSalt` configurationSetName
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` emailTags
+      `Prelude.hashWithSalt` feedbackForwardingEmailAddress
+      `Prelude.hashWithSalt` feedbackForwardingEmailAddressIdentityArn
+      `Prelude.hashWithSalt` fromEmailAddress
+      `Prelude.hashWithSalt` fromEmailAddressIdentityArn
+      `Prelude.hashWithSalt` listManagementOptions
+      `Prelude.hashWithSalt` replyToAddresses
+      `Prelude.hashWithSalt` content
+
+instance Prelude.NFData SendEmail where
+  rnf SendEmail' {..} =
+    Prelude.rnf configurationSetName
+      `Prelude.seq` Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf emailTags
+      `Prelude.seq` Prelude.rnf feedbackForwardingEmailAddress
+      `Prelude.seq` Prelude.rnf feedbackForwardingEmailAddressIdentityArn
+      `Prelude.seq` Prelude.rnf fromEmailAddress
+      `Prelude.seq` Prelude.rnf fromEmailAddressIdentityArn
+      `Prelude.seq` Prelude.rnf listManagementOptions
+      `Prelude.seq` Prelude.rnf replyToAddresses
+      `Prelude.seq` Prelude.rnf content
+
+instance Data.ToHeaders SendEmail where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SendEmail where
+  toJSON SendEmail' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ConfigurationSetName" Data..=)
+              Prelude.<$> configurationSetName,
+            ("Destination" Data..=) Prelude.<$> destination,
+            ("EmailTags" Data..=) Prelude.<$> emailTags,
+            ("FeedbackForwardingEmailAddress" Data..=)
+              Prelude.<$> feedbackForwardingEmailAddress,
+            ("FeedbackForwardingEmailAddressIdentityArn" Data..=)
+              Prelude.<$> feedbackForwardingEmailAddressIdentityArn,
+            ("FromEmailAddress" Data..=)
+              Prelude.<$> fromEmailAddress,
+            ("FromEmailAddressIdentityArn" Data..=)
+              Prelude.<$> fromEmailAddressIdentityArn,
+            ("ListManagementOptions" Data..=)
+              Prelude.<$> listManagementOptions,
+            ("ReplyToAddresses" Data..=)
+              Prelude.<$> replyToAddresses,
+            Prelude.Just ("Content" Data..= content)
+          ]
+      )
+
+instance Data.ToPath SendEmail where
+  toPath = Prelude.const "/v2/email/outbound-emails"
+
+instance Data.ToQuery SendEmail where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | A unique message ID that you receive when an email is accepted for
+-- sending.
+--
+-- /See:/ 'newSendEmailResponse' smart constructor.
+data SendEmailResponse = SendEmailResponse'
+  { -- | A unique identifier for the message that is generated when the message
+    -- is accepted.
+    --
+    -- It\'s possible for Amazon SES to accept a message without sending it.
+    -- This can happen when the message that you\'re trying to send has an
+    -- attachment contains a virus, or when you send a templated email that
+    -- contains invalid personalization content, for example.
+    messageId :: 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 'SendEmailResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'messageId', 'sendEmailResponse_messageId' - A unique identifier for the message that is generated when the message
+-- is accepted.
+--
+-- It\'s possible for Amazon SES to accept a message without sending it.
+-- This can happen when the message that you\'re trying to send has an
+-- attachment contains a virus, or when you send a templated email that
+-- contains invalid personalization content, for example.
+--
+-- 'httpStatus', 'sendEmailResponse_httpStatus' - The response's http status code.
+newSendEmailResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SendEmailResponse
+newSendEmailResponse pHttpStatus_ =
+  SendEmailResponse'
+    { messageId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A unique identifier for the message that is generated when the message
+-- is accepted.
+--
+-- It\'s possible for Amazon SES to accept a message without sending it.
+-- This can happen when the message that you\'re trying to send has an
+-- attachment contains a virus, or when you send a templated email that
+-- contains invalid personalization content, for example.
+sendEmailResponse_messageId :: Lens.Lens' SendEmailResponse (Prelude.Maybe Prelude.Text)
+sendEmailResponse_messageId = Lens.lens (\SendEmailResponse' {messageId} -> messageId) (\s@SendEmailResponse' {} a -> s {messageId = a} :: SendEmailResponse)
+
+-- | The response's http status code.
+sendEmailResponse_httpStatus :: Lens.Lens' SendEmailResponse Prelude.Int
+sendEmailResponse_httpStatus = Lens.lens (\SendEmailResponse' {httpStatus} -> httpStatus) (\s@SendEmailResponse' {} a -> s {httpStatus = a} :: SendEmailResponse)
+
+instance Prelude.NFData SendEmailResponse where
+  rnf SendEmailResponse' {..} =
+    Prelude.rnf messageId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/TagResource.hs b/gen/Amazonka/SESV2/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/TagResource.hs
@@ -0,0 +1,185 @@
+{-# 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.SESV2.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)
+--
+-- Add one or more tags (keys and values) to a specified resource. A
+-- /tag/ is a label that you optionally define and associate with a
+-- resource. Tags can help you categorize and manage resources in different
+-- ways, such as by purpose, owner, environment, or other criteria. A
+-- resource can have as many as 50 tags.
+--
+-- Each tag consists of a required /tag key/ and an associated /tag value/,
+-- both of which you define. A tag key is a general label that acts as a
+-- category for more specific tag values. A tag value acts as a descriptor
+-- within a tag key.
+module Amazonka.SESV2.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 qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource that you want to add one
+    -- or more tags to.
+    resourceArn :: Prelude.Text,
+    -- | A list of the tags that you want to add to the resource. A tag consists
+    -- of a required tag key (@Key@) and an associated tag value (@Value@). The
+    -- maximum length of a tag key is 128 characters. The maximum length of a
+    -- tag value is 256 characters.
+    tags :: [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource that you want to add one
+-- or more tags to.
+--
+-- 'tags', 'tagResource_tags' - A list of the tags that you want to add to the resource. A tag consists
+-- of a required tag key (@Key@) and an associated tag value (@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 that you want to add one
+-- or more tags to.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | A list of the tags that you want to add to the resource. A tag consists
+-- of a required tag key (@Key@) and an associated tag value (@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 [Tag]
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceArn" Data..= resourceArn),
+            Prelude.Just ("Tags" Data..= tags)
+          ]
+      )
+
+instance Data.ToPath TagResource where
+  toPath = Prelude.const "/v2/email/tags"
+
+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/SESV2/TestRenderEmailTemplate.hs b/gen/Amazonka/SESV2/TestRenderEmailTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/TestRenderEmailTemplate.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.SESV2.TestRenderEmailTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a preview of the MIME content of an email when provided with a
+-- template and a set of replacement data.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.TestRenderEmailTemplate
+  ( -- * Creating a Request
+    TestRenderEmailTemplate (..),
+    newTestRenderEmailTemplate,
+
+    -- * Request Lenses
+    testRenderEmailTemplate_templateName,
+    testRenderEmailTemplate_templateData,
+
+    -- * Destructuring the Response
+    TestRenderEmailTemplateResponse (..),
+    newTestRenderEmailTemplateResponse,
+
+    -- * Response Lenses
+    testRenderEmailTemplateResponse_httpStatus,
+    testRenderEmailTemplateResponse_renderedTemplate,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | >Represents a request to create a preview of the MIME content of an
+-- email when provided with a template and a set of replacement data.
+--
+-- /See:/ 'newTestRenderEmailTemplate' smart constructor.
+data TestRenderEmailTemplate = TestRenderEmailTemplate'
+  { -- | The name of the template.
+    templateName :: Prelude.Text,
+    -- | A list of replacement values to apply to the template. This parameter is
+    -- a JSON object, typically consisting of key-value pairs in which the keys
+    -- correspond to replacement tags in the email template.
+    templateData :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TestRenderEmailTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'templateName', 'testRenderEmailTemplate_templateName' - The name of the template.
+--
+-- 'templateData', 'testRenderEmailTemplate_templateData' - A list of replacement values to apply to the template. This parameter is
+-- a JSON object, typically consisting of key-value pairs in which the keys
+-- correspond to replacement tags in the email template.
+newTestRenderEmailTemplate ::
+  -- | 'templateName'
+  Prelude.Text ->
+  -- | 'templateData'
+  Prelude.Text ->
+  TestRenderEmailTemplate
+newTestRenderEmailTemplate
+  pTemplateName_
+  pTemplateData_ =
+    TestRenderEmailTemplate'
+      { templateName =
+          pTemplateName_,
+        templateData = pTemplateData_
+      }
+
+-- | The name of the template.
+testRenderEmailTemplate_templateName :: Lens.Lens' TestRenderEmailTemplate Prelude.Text
+testRenderEmailTemplate_templateName = Lens.lens (\TestRenderEmailTemplate' {templateName} -> templateName) (\s@TestRenderEmailTemplate' {} a -> s {templateName = a} :: TestRenderEmailTemplate)
+
+-- | A list of replacement values to apply to the template. This parameter is
+-- a JSON object, typically consisting of key-value pairs in which the keys
+-- correspond to replacement tags in the email template.
+testRenderEmailTemplate_templateData :: Lens.Lens' TestRenderEmailTemplate Prelude.Text
+testRenderEmailTemplate_templateData = Lens.lens (\TestRenderEmailTemplate' {templateData} -> templateData) (\s@TestRenderEmailTemplate' {} a -> s {templateData = a} :: TestRenderEmailTemplate)
+
+instance Core.AWSRequest TestRenderEmailTemplate where
+  type
+    AWSResponse TestRenderEmailTemplate =
+      TestRenderEmailTemplateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          TestRenderEmailTemplateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "RenderedTemplate")
+      )
+
+instance Prelude.Hashable TestRenderEmailTemplate where
+  hashWithSalt _salt TestRenderEmailTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` templateName
+      `Prelude.hashWithSalt` templateData
+
+instance Prelude.NFData TestRenderEmailTemplate where
+  rnf TestRenderEmailTemplate' {..} =
+    Prelude.rnf templateName
+      `Prelude.seq` Prelude.rnf templateData
+
+instance Data.ToHeaders TestRenderEmailTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TestRenderEmailTemplate where
+  toJSON TestRenderEmailTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("TemplateData" Data..= templateData)]
+      )
+
+instance Data.ToPath TestRenderEmailTemplate where
+  toPath TestRenderEmailTemplate' {..} =
+    Prelude.mconcat
+      [ "/v2/email/templates/",
+        Data.toBS templateName,
+        "/render"
+      ]
+
+instance Data.ToQuery TestRenderEmailTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The following element is returned by the service.
+--
+-- /See:/ 'newTestRenderEmailTemplateResponse' smart constructor.
+data TestRenderEmailTemplateResponse = TestRenderEmailTemplateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The complete MIME message rendered by applying the data in the
+    -- @TemplateData@ parameter to the template specified in the TemplateName
+    -- parameter.
+    renderedTemplate :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TestRenderEmailTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'testRenderEmailTemplateResponse_httpStatus' - The response's http status code.
+--
+-- 'renderedTemplate', 'testRenderEmailTemplateResponse_renderedTemplate' - The complete MIME message rendered by applying the data in the
+-- @TemplateData@ parameter to the template specified in the TemplateName
+-- parameter.
+newTestRenderEmailTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'renderedTemplate'
+  Prelude.Text ->
+  TestRenderEmailTemplateResponse
+newTestRenderEmailTemplateResponse
+  pHttpStatus_
+  pRenderedTemplate_ =
+    TestRenderEmailTemplateResponse'
+      { httpStatus =
+          pHttpStatus_,
+        renderedTemplate = pRenderedTemplate_
+      }
+
+-- | The response's http status code.
+testRenderEmailTemplateResponse_httpStatus :: Lens.Lens' TestRenderEmailTemplateResponse Prelude.Int
+testRenderEmailTemplateResponse_httpStatus = Lens.lens (\TestRenderEmailTemplateResponse' {httpStatus} -> httpStatus) (\s@TestRenderEmailTemplateResponse' {} a -> s {httpStatus = a} :: TestRenderEmailTemplateResponse)
+
+-- | The complete MIME message rendered by applying the data in the
+-- @TemplateData@ parameter to the template specified in the TemplateName
+-- parameter.
+testRenderEmailTemplateResponse_renderedTemplate :: Lens.Lens' TestRenderEmailTemplateResponse Prelude.Text
+testRenderEmailTemplateResponse_renderedTemplate = Lens.lens (\TestRenderEmailTemplateResponse' {renderedTemplate} -> renderedTemplate) (\s@TestRenderEmailTemplateResponse' {} a -> s {renderedTemplate = a} :: TestRenderEmailTemplateResponse)
+
+instance
+  Prelude.NFData
+    TestRenderEmailTemplateResponse
+  where
+  rnf TestRenderEmailTemplateResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf renderedTemplate
diff --git a/gen/Amazonka/SESV2/Types.hs b/gen/Amazonka/SESV2/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types.hs
@@ -0,0 +1,956 @@
+{-# 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.SESV2.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.SESV2.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccountSuspendedException,
+    _AlreadyExistsException,
+    _BadRequestException,
+    _ConcurrentModificationException,
+    _ConflictException,
+    _InternalServiceErrorException,
+    _InvalidNextTokenException,
+    _LimitExceededException,
+    _MailFromDomainNotVerifiedException,
+    _MessageRejected,
+    _NotFoundException,
+    _SendingPausedException,
+    _TooManyRequestsException,
+
+    -- * BehaviorOnMxFailure
+    BehaviorOnMxFailure (..),
+
+    -- * BulkEmailStatus
+    BulkEmailStatus (..),
+
+    -- * ContactLanguage
+    ContactLanguage (..),
+
+    -- * ContactListImportAction
+    ContactListImportAction (..),
+
+    -- * DataFormat
+    DataFormat (..),
+
+    -- * DeliverabilityDashboardAccountStatus
+    DeliverabilityDashboardAccountStatus (..),
+
+    -- * DeliverabilityTestStatus
+    DeliverabilityTestStatus (..),
+
+    -- * DimensionValueSource
+    DimensionValueSource (..),
+
+    -- * DkimSigningAttributesOrigin
+    DkimSigningAttributesOrigin (..),
+
+    -- * DkimSigningKeyLength
+    DkimSigningKeyLength (..),
+
+    -- * DkimStatus
+    DkimStatus (..),
+
+    -- * EventType
+    EventType (..),
+
+    -- * FeatureStatus
+    FeatureStatus (..),
+
+    -- * IdentityType
+    IdentityType (..),
+
+    -- * ImportDestinationType
+    ImportDestinationType (..),
+
+    -- * JobStatus
+    JobStatus (..),
+
+    -- * ListRecommendationsFilterKey
+    ListRecommendationsFilterKey (..),
+
+    -- * MailFromDomainStatus
+    MailFromDomainStatus (..),
+
+    -- * MailType
+    MailType (..),
+
+    -- * Metric
+    Metric (..),
+
+    -- * MetricDimensionName
+    MetricDimensionName (..),
+
+    -- * MetricNamespace
+    MetricNamespace (..),
+
+    -- * QueryErrorCode
+    QueryErrorCode (..),
+
+    -- * RecommendationImpact
+    RecommendationImpact (..),
+
+    -- * RecommendationStatus
+    RecommendationStatus (..),
+
+    -- * RecommendationType
+    RecommendationType (..),
+
+    -- * ReviewStatus
+    ReviewStatus (..),
+
+    -- * ScalingMode
+    ScalingMode (..),
+
+    -- * SubscriptionStatus
+    SubscriptionStatus (..),
+
+    -- * SuppressionListImportAction
+    SuppressionListImportAction (..),
+
+    -- * SuppressionListReason
+    SuppressionListReason (..),
+
+    -- * TlsPolicy
+    TlsPolicy (..),
+
+    -- * VerificationStatus
+    VerificationStatus (..),
+
+    -- * WarmupStatus
+    WarmupStatus (..),
+
+    -- * AccountDetails
+    AccountDetails (..),
+    newAccountDetails,
+    accountDetails_additionalContactEmailAddresses,
+    accountDetails_contactLanguage,
+    accountDetails_mailType,
+    accountDetails_reviewDetails,
+    accountDetails_useCaseDescription,
+    accountDetails_websiteURL,
+
+    -- * BatchGetMetricDataQuery
+    BatchGetMetricDataQuery (..),
+    newBatchGetMetricDataQuery,
+    batchGetMetricDataQuery_dimensions,
+    batchGetMetricDataQuery_id,
+    batchGetMetricDataQuery_namespace,
+    batchGetMetricDataQuery_metric,
+    batchGetMetricDataQuery_startDate,
+    batchGetMetricDataQuery_endDate,
+
+    -- * BlacklistEntry
+    BlacklistEntry (..),
+    newBlacklistEntry,
+    blacklistEntry_description,
+    blacklistEntry_listingTime,
+    blacklistEntry_rblName,
+
+    -- * Body
+    Body (..),
+    newBody,
+    body_html,
+    body_text,
+
+    -- * BulkEmailContent
+    BulkEmailContent (..),
+    newBulkEmailContent,
+    bulkEmailContent_template,
+
+    -- * BulkEmailEntry
+    BulkEmailEntry (..),
+    newBulkEmailEntry,
+    bulkEmailEntry_replacementEmailContent,
+    bulkEmailEntry_replacementTags,
+    bulkEmailEntry_destination,
+
+    -- * BulkEmailEntryResult
+    BulkEmailEntryResult (..),
+    newBulkEmailEntryResult,
+    bulkEmailEntryResult_error,
+    bulkEmailEntryResult_messageId,
+    bulkEmailEntryResult_status,
+
+    -- * CloudWatchDestination
+    CloudWatchDestination (..),
+    newCloudWatchDestination,
+    cloudWatchDestination_dimensionConfigurations,
+
+    -- * CloudWatchDimensionConfiguration
+    CloudWatchDimensionConfiguration (..),
+    newCloudWatchDimensionConfiguration,
+    cloudWatchDimensionConfiguration_dimensionName,
+    cloudWatchDimensionConfiguration_dimensionValueSource,
+    cloudWatchDimensionConfiguration_defaultDimensionValue,
+
+    -- * Contact
+    Contact (..),
+    newContact,
+    contact_emailAddress,
+    contact_lastUpdatedTimestamp,
+    contact_topicDefaultPreferences,
+    contact_topicPreferences,
+    contact_unsubscribeAll,
+
+    -- * ContactList
+    ContactList (..),
+    newContactList,
+    contactList_contactListName,
+    contactList_lastUpdatedTimestamp,
+
+    -- * ContactListDestination
+    ContactListDestination (..),
+    newContactListDestination,
+    contactListDestination_contactListName,
+    contactListDestination_contactListImportAction,
+
+    -- * Content
+    Content (..),
+    newContent,
+    content_charset,
+    content_data,
+
+    -- * CustomVerificationEmailTemplateMetadata
+    CustomVerificationEmailTemplateMetadata (..),
+    newCustomVerificationEmailTemplateMetadata,
+    customVerificationEmailTemplateMetadata_failureRedirectionURL,
+    customVerificationEmailTemplateMetadata_fromEmailAddress,
+    customVerificationEmailTemplateMetadata_successRedirectionURL,
+    customVerificationEmailTemplateMetadata_templateName,
+    customVerificationEmailTemplateMetadata_templateSubject,
+
+    -- * DailyVolume
+    DailyVolume (..),
+    newDailyVolume,
+    dailyVolume_domainIspPlacements,
+    dailyVolume_startDate,
+    dailyVolume_volumeStatistics,
+
+    -- * DashboardAttributes
+    DashboardAttributes (..),
+    newDashboardAttributes,
+    dashboardAttributes_engagementMetrics,
+
+    -- * DashboardOptions
+    DashboardOptions (..),
+    newDashboardOptions,
+    dashboardOptions_engagementMetrics,
+
+    -- * DedicatedIp
+    DedicatedIp (..),
+    newDedicatedIp,
+    dedicatedIp_poolName,
+    dedicatedIp_ip,
+    dedicatedIp_warmupStatus,
+    dedicatedIp_warmupPercentage,
+
+    -- * DedicatedIpPool
+    DedicatedIpPool (..),
+    newDedicatedIpPool,
+    dedicatedIpPool_poolName,
+    dedicatedIpPool_scalingMode,
+
+    -- * DeliverabilityTestReport
+    DeliverabilityTestReport (..),
+    newDeliverabilityTestReport,
+    deliverabilityTestReport_createDate,
+    deliverabilityTestReport_deliverabilityTestStatus,
+    deliverabilityTestReport_fromEmailAddress,
+    deliverabilityTestReport_reportId,
+    deliverabilityTestReport_reportName,
+    deliverabilityTestReport_subject,
+
+    -- * DeliveryOptions
+    DeliveryOptions (..),
+    newDeliveryOptions,
+    deliveryOptions_sendingPoolName,
+    deliveryOptions_tlsPolicy,
+
+    -- * Destination
+    Destination (..),
+    newDestination,
+    destination_bccAddresses,
+    destination_ccAddresses,
+    destination_toAddresses,
+
+    -- * DkimAttributes
+    DkimAttributes (..),
+    newDkimAttributes,
+    dkimAttributes_currentSigningKeyLength,
+    dkimAttributes_lastKeyGenerationTimestamp,
+    dkimAttributes_nextSigningKeyLength,
+    dkimAttributes_signingAttributesOrigin,
+    dkimAttributes_signingEnabled,
+    dkimAttributes_status,
+    dkimAttributes_tokens,
+
+    -- * DkimSigningAttributes
+    DkimSigningAttributes (..),
+    newDkimSigningAttributes,
+    dkimSigningAttributes_domainSigningPrivateKey,
+    dkimSigningAttributes_domainSigningSelector,
+    dkimSigningAttributes_nextSigningKeyLength,
+
+    -- * DomainDeliverabilityCampaign
+    DomainDeliverabilityCampaign (..),
+    newDomainDeliverabilityCampaign,
+    domainDeliverabilityCampaign_campaignId,
+    domainDeliverabilityCampaign_deleteRate,
+    domainDeliverabilityCampaign_esps,
+    domainDeliverabilityCampaign_firstSeenDateTime,
+    domainDeliverabilityCampaign_fromAddress,
+    domainDeliverabilityCampaign_imageUrl,
+    domainDeliverabilityCampaign_inboxCount,
+    domainDeliverabilityCampaign_lastSeenDateTime,
+    domainDeliverabilityCampaign_projectedVolume,
+    domainDeliverabilityCampaign_readDeleteRate,
+    domainDeliverabilityCampaign_readRate,
+    domainDeliverabilityCampaign_sendingIps,
+    domainDeliverabilityCampaign_spamCount,
+    domainDeliverabilityCampaign_subject,
+
+    -- * DomainDeliverabilityTrackingOption
+    DomainDeliverabilityTrackingOption (..),
+    newDomainDeliverabilityTrackingOption,
+    domainDeliverabilityTrackingOption_domain,
+    domainDeliverabilityTrackingOption_inboxPlacementTrackingOption,
+    domainDeliverabilityTrackingOption_subscriptionStartDate,
+
+    -- * DomainIspPlacement
+    DomainIspPlacement (..),
+    newDomainIspPlacement,
+    domainIspPlacement_inboxPercentage,
+    domainIspPlacement_inboxRawCount,
+    domainIspPlacement_ispName,
+    domainIspPlacement_spamPercentage,
+    domainIspPlacement_spamRawCount,
+
+    -- * EmailContent
+    EmailContent (..),
+    newEmailContent,
+    emailContent_raw,
+    emailContent_simple,
+    emailContent_template,
+
+    -- * EmailTemplateContent
+    EmailTemplateContent (..),
+    newEmailTemplateContent,
+    emailTemplateContent_html,
+    emailTemplateContent_subject,
+    emailTemplateContent_text,
+
+    -- * EmailTemplateMetadata
+    EmailTemplateMetadata (..),
+    newEmailTemplateMetadata,
+    emailTemplateMetadata_createdTimestamp,
+    emailTemplateMetadata_templateName,
+
+    -- * EventDestination
+    EventDestination (..),
+    newEventDestination,
+    eventDestination_cloudWatchDestination,
+    eventDestination_enabled,
+    eventDestination_kinesisFirehoseDestination,
+    eventDestination_pinpointDestination,
+    eventDestination_snsDestination,
+    eventDestination_name,
+    eventDestination_matchingEventTypes,
+
+    -- * EventDestinationDefinition
+    EventDestinationDefinition (..),
+    newEventDestinationDefinition,
+    eventDestinationDefinition_cloudWatchDestination,
+    eventDestinationDefinition_enabled,
+    eventDestinationDefinition_kinesisFirehoseDestination,
+    eventDestinationDefinition_matchingEventTypes,
+    eventDestinationDefinition_pinpointDestination,
+    eventDestinationDefinition_snsDestination,
+
+    -- * FailureInfo
+    FailureInfo (..),
+    newFailureInfo,
+    failureInfo_errorMessage,
+    failureInfo_failedRecordsS3Url,
+
+    -- * GuardianAttributes
+    GuardianAttributes (..),
+    newGuardianAttributes,
+    guardianAttributes_optimizedSharedDelivery,
+
+    -- * GuardianOptions
+    GuardianOptions (..),
+    newGuardianOptions,
+    guardianOptions_optimizedSharedDelivery,
+
+    -- * IdentityInfo
+    IdentityInfo (..),
+    newIdentityInfo,
+    identityInfo_identityName,
+    identityInfo_identityType,
+    identityInfo_sendingEnabled,
+    identityInfo_verificationStatus,
+
+    -- * ImportDataSource
+    ImportDataSource (..),
+    newImportDataSource,
+    importDataSource_s3Url,
+    importDataSource_dataFormat,
+
+    -- * ImportDestination
+    ImportDestination (..),
+    newImportDestination,
+    importDestination_contactListDestination,
+    importDestination_suppressionListDestination,
+
+    -- * ImportJobSummary
+    ImportJobSummary (..),
+    newImportJobSummary,
+    importJobSummary_createdTimestamp,
+    importJobSummary_failedRecordsCount,
+    importJobSummary_importDestination,
+    importJobSummary_jobId,
+    importJobSummary_jobStatus,
+    importJobSummary_processedRecordsCount,
+
+    -- * InboxPlacementTrackingOption
+    InboxPlacementTrackingOption (..),
+    newInboxPlacementTrackingOption,
+    inboxPlacementTrackingOption_global,
+    inboxPlacementTrackingOption_trackedIsps,
+
+    -- * IspPlacement
+    IspPlacement (..),
+    newIspPlacement,
+    ispPlacement_ispName,
+    ispPlacement_placementStatistics,
+
+    -- * KinesisFirehoseDestination
+    KinesisFirehoseDestination (..),
+    newKinesisFirehoseDestination,
+    kinesisFirehoseDestination_iamRoleArn,
+    kinesisFirehoseDestination_deliveryStreamArn,
+
+    -- * ListContactsFilter
+    ListContactsFilter (..),
+    newListContactsFilter,
+    listContactsFilter_filteredStatus,
+    listContactsFilter_topicFilter,
+
+    -- * ListManagementOptions
+    ListManagementOptions (..),
+    newListManagementOptions,
+    listManagementOptions_topicName,
+    listManagementOptions_contactListName,
+
+    -- * MailFromAttributes
+    MailFromAttributes (..),
+    newMailFromAttributes,
+    mailFromAttributes_mailFromDomain,
+    mailFromAttributes_mailFromDomainStatus,
+    mailFromAttributes_behaviorOnMxFailure,
+
+    -- * Message
+    Message (..),
+    newMessage,
+    message_subject,
+    message_body,
+
+    -- * MessageTag
+    MessageTag (..),
+    newMessageTag,
+    messageTag_name,
+    messageTag_value,
+
+    -- * MetricDataError
+    MetricDataError (..),
+    newMetricDataError,
+    metricDataError_code,
+    metricDataError_id,
+    metricDataError_message,
+
+    -- * MetricDataResult
+    MetricDataResult (..),
+    newMetricDataResult,
+    metricDataResult_id,
+    metricDataResult_timestamps,
+    metricDataResult_values,
+
+    -- * OverallVolume
+    OverallVolume (..),
+    newOverallVolume,
+    overallVolume_domainIspPlacements,
+    overallVolume_readRatePercent,
+    overallVolume_volumeStatistics,
+
+    -- * PinpointDestination
+    PinpointDestination (..),
+    newPinpointDestination,
+    pinpointDestination_applicationArn,
+
+    -- * PlacementStatistics
+    PlacementStatistics (..),
+    newPlacementStatistics,
+    placementStatistics_dkimPercentage,
+    placementStatistics_inboxPercentage,
+    placementStatistics_missingPercentage,
+    placementStatistics_spamPercentage,
+    placementStatistics_spfPercentage,
+
+    -- * RawMessage
+    RawMessage (..),
+    newRawMessage,
+    rawMessage_data,
+
+    -- * Recommendation
+    Recommendation (..),
+    newRecommendation,
+    recommendation_createdTimestamp,
+    recommendation_description,
+    recommendation_impact,
+    recommendation_lastUpdatedTimestamp,
+    recommendation_resourceArn,
+    recommendation_status,
+    recommendation_type,
+
+    -- * ReplacementEmailContent
+    ReplacementEmailContent (..),
+    newReplacementEmailContent,
+    replacementEmailContent_replacementTemplate,
+
+    -- * ReplacementTemplate
+    ReplacementTemplate (..),
+    newReplacementTemplate,
+    replacementTemplate_replacementTemplateData,
+
+    -- * ReputationOptions
+    ReputationOptions (..),
+    newReputationOptions,
+    reputationOptions_lastFreshStart,
+    reputationOptions_reputationMetricsEnabled,
+
+    -- * ReviewDetails
+    ReviewDetails (..),
+    newReviewDetails,
+    reviewDetails_caseId,
+    reviewDetails_status,
+
+    -- * SendQuota
+    SendQuota (..),
+    newSendQuota,
+    sendQuota_max24HourSend,
+    sendQuota_maxSendRate,
+    sendQuota_sentLast24Hours,
+
+    -- * SendingOptions
+    SendingOptions (..),
+    newSendingOptions,
+    sendingOptions_sendingEnabled,
+
+    -- * SnsDestination
+    SnsDestination (..),
+    newSnsDestination,
+    snsDestination_topicArn,
+
+    -- * SuppressedDestination
+    SuppressedDestination (..),
+    newSuppressedDestination,
+    suppressedDestination_attributes,
+    suppressedDestination_emailAddress,
+    suppressedDestination_reason,
+    suppressedDestination_lastUpdateTime,
+
+    -- * SuppressedDestinationAttributes
+    SuppressedDestinationAttributes (..),
+    newSuppressedDestinationAttributes,
+    suppressedDestinationAttributes_feedbackId,
+    suppressedDestinationAttributes_messageId,
+
+    -- * SuppressedDestinationSummary
+    SuppressedDestinationSummary (..),
+    newSuppressedDestinationSummary,
+    suppressedDestinationSummary_emailAddress,
+    suppressedDestinationSummary_reason,
+    suppressedDestinationSummary_lastUpdateTime,
+
+    -- * SuppressionAttributes
+    SuppressionAttributes (..),
+    newSuppressionAttributes,
+    suppressionAttributes_suppressedReasons,
+
+    -- * SuppressionListDestination
+    SuppressionListDestination (..),
+    newSuppressionListDestination,
+    suppressionListDestination_suppressionListImportAction,
+
+    -- * SuppressionOptions
+    SuppressionOptions (..),
+    newSuppressionOptions,
+    suppressionOptions_suppressedReasons,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+
+    -- * Template
+    Template (..),
+    newTemplate,
+    template_templateArn,
+    template_templateData,
+    template_templateName,
+
+    -- * Topic
+    Topic (..),
+    newTopic,
+    topic_description,
+    topic_topicName,
+    topic_displayName,
+    topic_defaultSubscriptionStatus,
+
+    -- * TopicFilter
+    TopicFilter (..),
+    newTopicFilter,
+    topicFilter_topicName,
+    topicFilter_useDefaultIfPreferenceUnavailable,
+
+    -- * TopicPreference
+    TopicPreference (..),
+    newTopicPreference,
+    topicPreference_topicName,
+    topicPreference_subscriptionStatus,
+
+    -- * TrackingOptions
+    TrackingOptions (..),
+    newTrackingOptions,
+    trackingOptions_customRedirectDomain,
+
+    -- * VdmAttributes
+    VdmAttributes (..),
+    newVdmAttributes,
+    vdmAttributes_dashboardAttributes,
+    vdmAttributes_guardianAttributes,
+    vdmAttributes_vdmEnabled,
+
+    -- * VdmOptions
+    VdmOptions (..),
+    newVdmOptions,
+    vdmOptions_dashboardOptions,
+    vdmOptions_guardianOptions,
+
+    -- * VolumeStatistics
+    VolumeStatistics (..),
+    newVolumeStatistics,
+    volumeStatistics_inboxRawCount,
+    volumeStatistics_projectedInbox,
+    volumeStatistics_projectedSpam,
+    volumeStatistics_spamRawCount,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.SESV2.Types.AccountDetails
+import Amazonka.SESV2.Types.BatchGetMetricDataQuery
+import Amazonka.SESV2.Types.BehaviorOnMxFailure
+import Amazonka.SESV2.Types.BlacklistEntry
+import Amazonka.SESV2.Types.Body
+import Amazonka.SESV2.Types.BulkEmailContent
+import Amazonka.SESV2.Types.BulkEmailEntry
+import Amazonka.SESV2.Types.BulkEmailEntryResult
+import Amazonka.SESV2.Types.BulkEmailStatus
+import Amazonka.SESV2.Types.CloudWatchDestination
+import Amazonka.SESV2.Types.CloudWatchDimensionConfiguration
+import Amazonka.SESV2.Types.Contact
+import Amazonka.SESV2.Types.ContactLanguage
+import Amazonka.SESV2.Types.ContactList
+import Amazonka.SESV2.Types.ContactListDestination
+import Amazonka.SESV2.Types.ContactListImportAction
+import Amazonka.SESV2.Types.Content
+import Amazonka.SESV2.Types.CustomVerificationEmailTemplateMetadata
+import Amazonka.SESV2.Types.DailyVolume
+import Amazonka.SESV2.Types.DashboardAttributes
+import Amazonka.SESV2.Types.DashboardOptions
+import Amazonka.SESV2.Types.DataFormat
+import Amazonka.SESV2.Types.DedicatedIp
+import Amazonka.SESV2.Types.DedicatedIpPool
+import Amazonka.SESV2.Types.DeliverabilityDashboardAccountStatus
+import Amazonka.SESV2.Types.DeliverabilityTestReport
+import Amazonka.SESV2.Types.DeliverabilityTestStatus
+import Amazonka.SESV2.Types.DeliveryOptions
+import Amazonka.SESV2.Types.Destination
+import Amazonka.SESV2.Types.DimensionValueSource
+import Amazonka.SESV2.Types.DkimAttributes
+import Amazonka.SESV2.Types.DkimSigningAttributes
+import Amazonka.SESV2.Types.DkimSigningAttributesOrigin
+import Amazonka.SESV2.Types.DkimSigningKeyLength
+import Amazonka.SESV2.Types.DkimStatus
+import Amazonka.SESV2.Types.DomainDeliverabilityCampaign
+import Amazonka.SESV2.Types.DomainDeliverabilityTrackingOption
+import Amazonka.SESV2.Types.DomainIspPlacement
+import Amazonka.SESV2.Types.EmailContent
+import Amazonka.SESV2.Types.EmailTemplateContent
+import Amazonka.SESV2.Types.EmailTemplateMetadata
+import Amazonka.SESV2.Types.EventDestination
+import Amazonka.SESV2.Types.EventDestinationDefinition
+import Amazonka.SESV2.Types.EventType
+import Amazonka.SESV2.Types.FailureInfo
+import Amazonka.SESV2.Types.FeatureStatus
+import Amazonka.SESV2.Types.GuardianAttributes
+import Amazonka.SESV2.Types.GuardianOptions
+import Amazonka.SESV2.Types.IdentityInfo
+import Amazonka.SESV2.Types.IdentityType
+import Amazonka.SESV2.Types.ImportDataSource
+import Amazonka.SESV2.Types.ImportDestination
+import Amazonka.SESV2.Types.ImportDestinationType
+import Amazonka.SESV2.Types.ImportJobSummary
+import Amazonka.SESV2.Types.InboxPlacementTrackingOption
+import Amazonka.SESV2.Types.IspPlacement
+import Amazonka.SESV2.Types.JobStatus
+import Amazonka.SESV2.Types.KinesisFirehoseDestination
+import Amazonka.SESV2.Types.ListContactsFilter
+import Amazonka.SESV2.Types.ListManagementOptions
+import Amazonka.SESV2.Types.ListRecommendationsFilterKey
+import Amazonka.SESV2.Types.MailFromAttributes
+import Amazonka.SESV2.Types.MailFromDomainStatus
+import Amazonka.SESV2.Types.MailType
+import Amazonka.SESV2.Types.Message
+import Amazonka.SESV2.Types.MessageTag
+import Amazonka.SESV2.Types.Metric
+import Amazonka.SESV2.Types.MetricDataError
+import Amazonka.SESV2.Types.MetricDataResult
+import Amazonka.SESV2.Types.MetricDimensionName
+import Amazonka.SESV2.Types.MetricNamespace
+import Amazonka.SESV2.Types.OverallVolume
+import Amazonka.SESV2.Types.PinpointDestination
+import Amazonka.SESV2.Types.PlacementStatistics
+import Amazonka.SESV2.Types.QueryErrorCode
+import Amazonka.SESV2.Types.RawMessage
+import Amazonka.SESV2.Types.Recommendation
+import Amazonka.SESV2.Types.RecommendationImpact
+import Amazonka.SESV2.Types.RecommendationStatus
+import Amazonka.SESV2.Types.RecommendationType
+import Amazonka.SESV2.Types.ReplacementEmailContent
+import Amazonka.SESV2.Types.ReplacementTemplate
+import Amazonka.SESV2.Types.ReputationOptions
+import Amazonka.SESV2.Types.ReviewDetails
+import Amazonka.SESV2.Types.ReviewStatus
+import Amazonka.SESV2.Types.ScalingMode
+import Amazonka.SESV2.Types.SendQuota
+import Amazonka.SESV2.Types.SendingOptions
+import Amazonka.SESV2.Types.SnsDestination
+import Amazonka.SESV2.Types.SubscriptionStatus
+import Amazonka.SESV2.Types.SuppressedDestination
+import Amazonka.SESV2.Types.SuppressedDestinationAttributes
+import Amazonka.SESV2.Types.SuppressedDestinationSummary
+import Amazonka.SESV2.Types.SuppressionAttributes
+import Amazonka.SESV2.Types.SuppressionListDestination
+import Amazonka.SESV2.Types.SuppressionListImportAction
+import Amazonka.SESV2.Types.SuppressionListReason
+import Amazonka.SESV2.Types.SuppressionOptions
+import Amazonka.SESV2.Types.Tag
+import Amazonka.SESV2.Types.Template
+import Amazonka.SESV2.Types.TlsPolicy
+import Amazonka.SESV2.Types.Topic
+import Amazonka.SESV2.Types.TopicFilter
+import Amazonka.SESV2.Types.TopicPreference
+import Amazonka.SESV2.Types.TrackingOptions
+import Amazonka.SESV2.Types.VdmAttributes
+import Amazonka.SESV2.Types.VdmOptions
+import Amazonka.SESV2.Types.VerificationStatus
+import Amazonka.SESV2.Types.VolumeStatistics
+import Amazonka.SESV2.Types.WarmupStatus
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2019-09-27@ of the Amazon Simple Email Service SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "SESV2",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "email",
+      Core.signingName = "ses",
+      Core.version = "2019-09-27",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "SESV2",
+      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
+
+-- | The message can\'t be sent because the account\'s ability to send email
+-- has been permanently restricted.
+_AccountSuspendedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccountSuspendedException =
+  Core._MatchServiceError
+    defaultService
+    "AccountSuspendedException"
+    Prelude.. Core.hasStatus 400
+
+-- | The resource specified in your request already exists.
+_AlreadyExistsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AlreadyExistsException =
+  Core._MatchServiceError
+    defaultService
+    "AlreadyExistsException"
+    Prelude.. Core.hasStatus 400
+
+-- | The input you provided is invalid.
+_BadRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_BadRequestException =
+  Core._MatchServiceError
+    defaultService
+    "BadRequestException"
+    Prelude.. Core.hasStatus 400
+
+-- | The resource is being modified by another operation or thread.
+_ConcurrentModificationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConcurrentModificationException =
+  Core._MatchServiceError
+    defaultService
+    "ConcurrentModificationException"
+    Prelude.. Core.hasStatus 500
+
+-- | If there is already an ongoing account details update under review.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | The request couldn\'t be processed because an error occurred with the
+-- Amazon SES API v2.
+_InternalServiceErrorException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServiceErrorException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServiceErrorException"
+    Prelude.. Core.hasStatus 500
+
+-- | The specified request includes an invalid or expired token.
+_InvalidNextTokenException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidNextTokenException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidNextTokenException"
+    Prelude.. Core.hasStatus 400
+
+-- | There are too many instances of the specified resource type.
+_LimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_LimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "LimitExceededException"
+    Prelude.. Core.hasStatus 400
+
+-- | The message can\'t be sent because the sending domain isn\'t verified.
+_MailFromDomainNotVerifiedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_MailFromDomainNotVerifiedException =
+  Core._MatchServiceError
+    defaultService
+    "MailFromDomainNotVerifiedException"
+    Prelude.. Core.hasStatus 400
+
+-- | The message can\'t be sent because it contains invalid content.
+_MessageRejected :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_MessageRejected =
+  Core._MatchServiceError
+    defaultService
+    "MessageRejected"
+    Prelude.. Core.hasStatus 400
+
+-- | The resource you attempted to access doesn\'t exist.
+_NotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "NotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The message can\'t be sent because the account\'s ability to send email
+-- is currently paused.
+_SendingPausedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_SendingPausedException =
+  Core._MatchServiceError
+    defaultService
+    "SendingPausedException"
+    Prelude.. Core.hasStatus 400
+
+-- | Too many requests have been made to the operation.
+_TooManyRequestsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TooManyRequestsException =
+  Core._MatchServiceError
+    defaultService
+    "TooManyRequestsException"
+    Prelude.. Core.hasStatus 429
diff --git a/gen/Amazonka/SESV2/Types/AccountDetails.hs b/gen/Amazonka/SESV2/Types/AccountDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/AccountDetails.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.AccountDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.AccountDetails 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
+import Amazonka.SESV2.Types.ContactLanguage
+import Amazonka.SESV2.Types.MailType
+import Amazonka.SESV2.Types.ReviewDetails
+
+-- | An object that contains information about your account details.
+--
+-- /See:/ 'newAccountDetails' smart constructor.
+data AccountDetails = AccountDetails'
+  { -- | Additional email addresses where updates are sent about your account
+    -- review process.
+    additionalContactEmailAddresses :: Prelude.Maybe (Data.Sensitive (Prelude.NonEmpty (Data.Sensitive Prelude.Text))),
+    -- | The language you would prefer for the case. The contact language can be
+    -- one of @ENGLISH@ or @JAPANESE@.
+    contactLanguage :: Prelude.Maybe ContactLanguage,
+    -- | The type of email your account is sending. The mail type can be one of
+    -- the following:
+    --
+    -- -   @MARKETING@ – Most of your sending traffic is to keep your customers
+    --     informed of your latest offering.
+    --
+    -- -   @TRANSACTIONAL@ – Most of your sending traffic is to communicate
+    --     during a transaction with a customer.
+    mailType :: Prelude.Maybe MailType,
+    -- | Information about the review of the latest details you submitted.
+    reviewDetails :: Prelude.Maybe ReviewDetails,
+    -- | A description of the types of email that you plan to send.
+    useCaseDescription :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The URL of your website. This information helps us better understand the
+    -- type of content that you plan to send.
+    websiteURL :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccountDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'additionalContactEmailAddresses', 'accountDetails_additionalContactEmailAddresses' - Additional email addresses where updates are sent about your account
+-- review process.
+--
+-- 'contactLanguage', 'accountDetails_contactLanguage' - The language you would prefer for the case. The contact language can be
+-- one of @ENGLISH@ or @JAPANESE@.
+--
+-- 'mailType', 'accountDetails_mailType' - The type of email your account is sending. The mail type can be one of
+-- the following:
+--
+-- -   @MARKETING@ – Most of your sending traffic is to keep your customers
+--     informed of your latest offering.
+--
+-- -   @TRANSACTIONAL@ – Most of your sending traffic is to communicate
+--     during a transaction with a customer.
+--
+-- 'reviewDetails', 'accountDetails_reviewDetails' - Information about the review of the latest details you submitted.
+--
+-- 'useCaseDescription', 'accountDetails_useCaseDescription' - A description of the types of email that you plan to send.
+--
+-- 'websiteURL', 'accountDetails_websiteURL' - The URL of your website. This information helps us better understand the
+-- type of content that you plan to send.
+newAccountDetails ::
+  AccountDetails
+newAccountDetails =
+  AccountDetails'
+    { additionalContactEmailAddresses =
+        Prelude.Nothing,
+      contactLanguage = Prelude.Nothing,
+      mailType = Prelude.Nothing,
+      reviewDetails = Prelude.Nothing,
+      useCaseDescription = Prelude.Nothing,
+      websiteURL = Prelude.Nothing
+    }
+
+-- | Additional email addresses where updates are sent about your account
+-- review process.
+accountDetails_additionalContactEmailAddresses :: Lens.Lens' AccountDetails (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+accountDetails_additionalContactEmailAddresses = Lens.lens (\AccountDetails' {additionalContactEmailAddresses} -> additionalContactEmailAddresses) (\s@AccountDetails' {} a -> s {additionalContactEmailAddresses = a} :: AccountDetails) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The language you would prefer for the case. The contact language can be
+-- one of @ENGLISH@ or @JAPANESE@.
+accountDetails_contactLanguage :: Lens.Lens' AccountDetails (Prelude.Maybe ContactLanguage)
+accountDetails_contactLanguage = Lens.lens (\AccountDetails' {contactLanguage} -> contactLanguage) (\s@AccountDetails' {} a -> s {contactLanguage = a} :: AccountDetails)
+
+-- | The type of email your account is sending. The mail type can be one of
+-- the following:
+--
+-- -   @MARKETING@ – Most of your sending traffic is to keep your customers
+--     informed of your latest offering.
+--
+-- -   @TRANSACTIONAL@ – Most of your sending traffic is to communicate
+--     during a transaction with a customer.
+accountDetails_mailType :: Lens.Lens' AccountDetails (Prelude.Maybe MailType)
+accountDetails_mailType = Lens.lens (\AccountDetails' {mailType} -> mailType) (\s@AccountDetails' {} a -> s {mailType = a} :: AccountDetails)
+
+-- | Information about the review of the latest details you submitted.
+accountDetails_reviewDetails :: Lens.Lens' AccountDetails (Prelude.Maybe ReviewDetails)
+accountDetails_reviewDetails = Lens.lens (\AccountDetails' {reviewDetails} -> reviewDetails) (\s@AccountDetails' {} a -> s {reviewDetails = a} :: AccountDetails)
+
+-- | A description of the types of email that you plan to send.
+accountDetails_useCaseDescription :: Lens.Lens' AccountDetails (Prelude.Maybe Prelude.Text)
+accountDetails_useCaseDescription = Lens.lens (\AccountDetails' {useCaseDescription} -> useCaseDescription) (\s@AccountDetails' {} a -> s {useCaseDescription = a} :: AccountDetails) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The URL of your website. This information helps us better understand the
+-- type of content that you plan to send.
+accountDetails_websiteURL :: Lens.Lens' AccountDetails (Prelude.Maybe Prelude.Text)
+accountDetails_websiteURL = Lens.lens (\AccountDetails' {websiteURL} -> websiteURL) (\s@AccountDetails' {} a -> s {websiteURL = a} :: AccountDetails) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON AccountDetails where
+  parseJSON =
+    Data.withObject
+      "AccountDetails"
+      ( \x ->
+          AccountDetails'
+            Prelude.<$> (x Data..:? "AdditionalContactEmailAddresses")
+            Prelude.<*> (x Data..:? "ContactLanguage")
+            Prelude.<*> (x Data..:? "MailType")
+            Prelude.<*> (x Data..:? "ReviewDetails")
+            Prelude.<*> (x Data..:? "UseCaseDescription")
+            Prelude.<*> (x Data..:? "WebsiteURL")
+      )
+
+instance Prelude.Hashable AccountDetails where
+  hashWithSalt _salt AccountDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalContactEmailAddresses
+      `Prelude.hashWithSalt` contactLanguage
+      `Prelude.hashWithSalt` mailType
+      `Prelude.hashWithSalt` reviewDetails
+      `Prelude.hashWithSalt` useCaseDescription
+      `Prelude.hashWithSalt` websiteURL
+
+instance Prelude.NFData AccountDetails where
+  rnf AccountDetails' {..} =
+    Prelude.rnf additionalContactEmailAddresses
+      `Prelude.seq` Prelude.rnf contactLanguage
+      `Prelude.seq` Prelude.rnf mailType
+      `Prelude.seq` Prelude.rnf reviewDetails
+      `Prelude.seq` Prelude.rnf useCaseDescription
+      `Prelude.seq` Prelude.rnf websiteURL
diff --git a/gen/Amazonka/SESV2/Types/BatchGetMetricDataQuery.hs b/gen/Amazonka/SESV2/Types/BatchGetMetricDataQuery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/BatchGetMetricDataQuery.hs
@@ -0,0 +1,285 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.BatchGetMetricDataQuery
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.BatchGetMetricDataQuery 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
+import Amazonka.SESV2.Types.Metric
+import Amazonka.SESV2.Types.MetricDimensionName
+import Amazonka.SESV2.Types.MetricNamespace
+
+-- | Represents a single metric data query to include in a batch.
+--
+-- /See:/ 'newBatchGetMetricDataQuery' smart constructor.
+data BatchGetMetricDataQuery = BatchGetMetricDataQuery'
+  { -- | An object that contains mapping between @MetricDimensionName@ and
+    -- @MetricDimensionValue@ to filter metrics by.
+    dimensions :: Prelude.Maybe (Prelude.HashMap MetricDimensionName Prelude.Text),
+    -- | The query identifier.
+    id :: Prelude.Text,
+    -- | The query namespace - e.g. @VDM@
+    namespace :: MetricNamespace,
+    -- | The queried metric. This can be one of the following:
+    --
+    -- -   @SEND@ – Emails sent eligible for tracking in the VDM dashboard.
+    --     This excludes emails sent to the mailbox simulator and emails
+    --     addressed to more than one recipient.
+    --
+    -- -   @COMPLAINT@ – Complaints received for your account. This excludes
+    --     complaints from the mailbox simulator, those originating from your
+    --     account-level suppression list (if enabled), and those for emails
+    --     addressed to more than one recipient
+    --
+    -- -   @PERMANENT_BOUNCE@ – Permanent bounces - i.e. feedback received for
+    --     emails sent to non-existent mailboxes. Excludes bounces from the
+    --     mailbox simulator, those originating from your account-level
+    --     suppression list (if enabled), and those for emails addressed to
+    --     more than one recipient.
+    --
+    -- -   @TRANSIENT_BOUNCE@ – Transient bounces - i.e. feedback received for
+    --     delivery failures excluding issues with non-existent mailboxes.
+    --     Excludes bounces from the mailbox simulator, and those for emails
+    --     addressed to more than one recipient.
+    --
+    -- -   @OPEN@ – Unique open events for emails including open trackers.
+    --     Excludes opens for emails addressed to more than one recipient.
+    --
+    -- -   @CLICK@ – Unique click events for emails including wrapped links.
+    --     Excludes clicks for emails addressed to more than one recipient.
+    --
+    -- -   @DELIVERY@ – Successful deliveries for email sending attempts.
+    --     Excludes deliveries to the mailbox simulator and for emails
+    --     addressed to more than one recipient.
+    --
+    -- -   @DELIVERY_OPEN@ – Successful deliveries for email sending attempts.
+    --     Excludes deliveries to the mailbox simulator, for emails addressed
+    --     to more than one recipient, and emails without open trackers.
+    --
+    -- -   @DELIVERY_CLICK@ – Successful deliveries for email sending attempts.
+    --     Excludes deliveries to the mailbox simulator, for emails addressed
+    --     to more than one recipient, and emails without click trackers.
+    --
+    -- -   @DELIVERY_COMPLAINT@ – Successful deliveries for email sending
+    --     attempts. Excludes deliveries to the mailbox simulator, for emails
+    --     addressed to more than one recipient, and emails addressed to
+    --     recipients hosted by ISPs with which Amazon SES does not have a
+    --     feedback loop agreement.
+    metric :: Metric,
+    -- | Represents the start date for the query interval.
+    startDate :: Data.POSIX,
+    -- | Represents the end date for the query interval.
+    endDate :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetMetricDataQuery' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dimensions', 'batchGetMetricDataQuery_dimensions' - An object that contains mapping between @MetricDimensionName@ and
+-- @MetricDimensionValue@ to filter metrics by.
+--
+-- 'id', 'batchGetMetricDataQuery_id' - The query identifier.
+--
+-- 'namespace', 'batchGetMetricDataQuery_namespace' - The query namespace - e.g. @VDM@
+--
+-- 'metric', 'batchGetMetricDataQuery_metric' - The queried metric. This can be one of the following:
+--
+-- -   @SEND@ – Emails sent eligible for tracking in the VDM dashboard.
+--     This excludes emails sent to the mailbox simulator and emails
+--     addressed to more than one recipient.
+--
+-- -   @COMPLAINT@ – Complaints received for your account. This excludes
+--     complaints from the mailbox simulator, those originating from your
+--     account-level suppression list (if enabled), and those for emails
+--     addressed to more than one recipient
+--
+-- -   @PERMANENT_BOUNCE@ – Permanent bounces - i.e. feedback received for
+--     emails sent to non-existent mailboxes. Excludes bounces from the
+--     mailbox simulator, those originating from your account-level
+--     suppression list (if enabled), and those for emails addressed to
+--     more than one recipient.
+--
+-- -   @TRANSIENT_BOUNCE@ – Transient bounces - i.e. feedback received for
+--     delivery failures excluding issues with non-existent mailboxes.
+--     Excludes bounces from the mailbox simulator, and those for emails
+--     addressed to more than one recipient.
+--
+-- -   @OPEN@ – Unique open events for emails including open trackers.
+--     Excludes opens for emails addressed to more than one recipient.
+--
+-- -   @CLICK@ – Unique click events for emails including wrapped links.
+--     Excludes clicks for emails addressed to more than one recipient.
+--
+-- -   @DELIVERY@ – Successful deliveries for email sending attempts.
+--     Excludes deliveries to the mailbox simulator and for emails
+--     addressed to more than one recipient.
+--
+-- -   @DELIVERY_OPEN@ – Successful deliveries for email sending attempts.
+--     Excludes deliveries to the mailbox simulator, for emails addressed
+--     to more than one recipient, and emails without open trackers.
+--
+-- -   @DELIVERY_CLICK@ – Successful deliveries for email sending attempts.
+--     Excludes deliveries to the mailbox simulator, for emails addressed
+--     to more than one recipient, and emails without click trackers.
+--
+-- -   @DELIVERY_COMPLAINT@ – Successful deliveries for email sending
+--     attempts. Excludes deliveries to the mailbox simulator, for emails
+--     addressed to more than one recipient, and emails addressed to
+--     recipients hosted by ISPs with which Amazon SES does not have a
+--     feedback loop agreement.
+--
+-- 'startDate', 'batchGetMetricDataQuery_startDate' - Represents the start date for the query interval.
+--
+-- 'endDate', 'batchGetMetricDataQuery_endDate' - Represents the end date for the query interval.
+newBatchGetMetricDataQuery ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'namespace'
+  MetricNamespace ->
+  -- | 'metric'
+  Metric ->
+  -- | 'startDate'
+  Prelude.UTCTime ->
+  -- | 'endDate'
+  Prelude.UTCTime ->
+  BatchGetMetricDataQuery
+newBatchGetMetricDataQuery
+  pId_
+  pNamespace_
+  pMetric_
+  pStartDate_
+  pEndDate_ =
+    BatchGetMetricDataQuery'
+      { dimensions =
+          Prelude.Nothing,
+        id = pId_,
+        namespace = pNamespace_,
+        metric = pMetric_,
+        startDate = Data._Time Lens.# pStartDate_,
+        endDate = Data._Time Lens.# pEndDate_
+      }
+
+-- | An object that contains mapping between @MetricDimensionName@ and
+-- @MetricDimensionValue@ to filter metrics by.
+batchGetMetricDataQuery_dimensions :: Lens.Lens' BatchGetMetricDataQuery (Prelude.Maybe (Prelude.HashMap MetricDimensionName Prelude.Text))
+batchGetMetricDataQuery_dimensions = Lens.lens (\BatchGetMetricDataQuery' {dimensions} -> dimensions) (\s@BatchGetMetricDataQuery' {} a -> s {dimensions = a} :: BatchGetMetricDataQuery) Prelude.. Lens.mapping Lens.coerced
+
+-- | The query identifier.
+batchGetMetricDataQuery_id :: Lens.Lens' BatchGetMetricDataQuery Prelude.Text
+batchGetMetricDataQuery_id = Lens.lens (\BatchGetMetricDataQuery' {id} -> id) (\s@BatchGetMetricDataQuery' {} a -> s {id = a} :: BatchGetMetricDataQuery)
+
+-- | The query namespace - e.g. @VDM@
+batchGetMetricDataQuery_namespace :: Lens.Lens' BatchGetMetricDataQuery MetricNamespace
+batchGetMetricDataQuery_namespace = Lens.lens (\BatchGetMetricDataQuery' {namespace} -> namespace) (\s@BatchGetMetricDataQuery' {} a -> s {namespace = a} :: BatchGetMetricDataQuery)
+
+-- | The queried metric. This can be one of the following:
+--
+-- -   @SEND@ – Emails sent eligible for tracking in the VDM dashboard.
+--     This excludes emails sent to the mailbox simulator and emails
+--     addressed to more than one recipient.
+--
+-- -   @COMPLAINT@ – Complaints received for your account. This excludes
+--     complaints from the mailbox simulator, those originating from your
+--     account-level suppression list (if enabled), and those for emails
+--     addressed to more than one recipient
+--
+-- -   @PERMANENT_BOUNCE@ – Permanent bounces - i.e. feedback received for
+--     emails sent to non-existent mailboxes. Excludes bounces from the
+--     mailbox simulator, those originating from your account-level
+--     suppression list (if enabled), and those for emails addressed to
+--     more than one recipient.
+--
+-- -   @TRANSIENT_BOUNCE@ – Transient bounces - i.e. feedback received for
+--     delivery failures excluding issues with non-existent mailboxes.
+--     Excludes bounces from the mailbox simulator, and those for emails
+--     addressed to more than one recipient.
+--
+-- -   @OPEN@ – Unique open events for emails including open trackers.
+--     Excludes opens for emails addressed to more than one recipient.
+--
+-- -   @CLICK@ – Unique click events for emails including wrapped links.
+--     Excludes clicks for emails addressed to more than one recipient.
+--
+-- -   @DELIVERY@ – Successful deliveries for email sending attempts.
+--     Excludes deliveries to the mailbox simulator and for emails
+--     addressed to more than one recipient.
+--
+-- -   @DELIVERY_OPEN@ – Successful deliveries for email sending attempts.
+--     Excludes deliveries to the mailbox simulator, for emails addressed
+--     to more than one recipient, and emails without open trackers.
+--
+-- -   @DELIVERY_CLICK@ – Successful deliveries for email sending attempts.
+--     Excludes deliveries to the mailbox simulator, for emails addressed
+--     to more than one recipient, and emails without click trackers.
+--
+-- -   @DELIVERY_COMPLAINT@ – Successful deliveries for email sending
+--     attempts. Excludes deliveries to the mailbox simulator, for emails
+--     addressed to more than one recipient, and emails addressed to
+--     recipients hosted by ISPs with which Amazon SES does not have a
+--     feedback loop agreement.
+batchGetMetricDataQuery_metric :: Lens.Lens' BatchGetMetricDataQuery Metric
+batchGetMetricDataQuery_metric = Lens.lens (\BatchGetMetricDataQuery' {metric} -> metric) (\s@BatchGetMetricDataQuery' {} a -> s {metric = a} :: BatchGetMetricDataQuery)
+
+-- | Represents the start date for the query interval.
+batchGetMetricDataQuery_startDate :: Lens.Lens' BatchGetMetricDataQuery Prelude.UTCTime
+batchGetMetricDataQuery_startDate = Lens.lens (\BatchGetMetricDataQuery' {startDate} -> startDate) (\s@BatchGetMetricDataQuery' {} a -> s {startDate = a} :: BatchGetMetricDataQuery) Prelude.. Data._Time
+
+-- | Represents the end date for the query interval.
+batchGetMetricDataQuery_endDate :: Lens.Lens' BatchGetMetricDataQuery Prelude.UTCTime
+batchGetMetricDataQuery_endDate = Lens.lens (\BatchGetMetricDataQuery' {endDate} -> endDate) (\s@BatchGetMetricDataQuery' {} a -> s {endDate = a} :: BatchGetMetricDataQuery) Prelude.. Data._Time
+
+instance Prelude.Hashable BatchGetMetricDataQuery where
+  hashWithSalt _salt BatchGetMetricDataQuery' {..} =
+    _salt
+      `Prelude.hashWithSalt` dimensions
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` metric
+      `Prelude.hashWithSalt` startDate
+      `Prelude.hashWithSalt` endDate
+
+instance Prelude.NFData BatchGetMetricDataQuery where
+  rnf BatchGetMetricDataQuery' {..} =
+    Prelude.rnf dimensions
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf metric
+      `Prelude.seq` Prelude.rnf startDate
+      `Prelude.seq` Prelude.rnf endDate
+
+instance Data.ToJSON BatchGetMetricDataQuery where
+  toJSON BatchGetMetricDataQuery' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Dimensions" Data..=) Prelude.<$> dimensions,
+            Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("Namespace" Data..= namespace),
+            Prelude.Just ("Metric" Data..= metric),
+            Prelude.Just ("StartDate" Data..= startDate),
+            Prelude.Just ("EndDate" Data..= endDate)
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/BehaviorOnMxFailure.hs b/gen/Amazonka/SESV2/Types/BehaviorOnMxFailure.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/BehaviorOnMxFailure.hs
@@ -0,0 +1,80 @@
+{-# 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.SESV2.Types.BehaviorOnMxFailure
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.BehaviorOnMxFailure
+  ( BehaviorOnMxFailure
+      ( ..,
+        BehaviorOnMxFailure_REJECT_MESSAGE,
+        BehaviorOnMxFailure_USE_DEFAULT_VALUE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The action to take if the required MX record can\'t be found when you
+-- send an email. When you set this value to @UseDefaultValue@, the mail is
+-- sent using /amazonses.com/ as the MAIL FROM domain. When you set this
+-- value to @RejectMessage@, the Amazon SES API v2 returns a
+-- @MailFromDomainNotVerified@ error, and doesn\'t attempt to deliver the
+-- email.
+--
+-- These behaviors are taken when the custom MAIL FROM domain configuration
+-- is in the @Pending@, @Failed@, and @TemporaryFailure@ states.
+newtype BehaviorOnMxFailure = BehaviorOnMxFailure'
+  { fromBehaviorOnMxFailure ::
+      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 BehaviorOnMxFailure_REJECT_MESSAGE :: BehaviorOnMxFailure
+pattern BehaviorOnMxFailure_REJECT_MESSAGE = BehaviorOnMxFailure' "REJECT_MESSAGE"
+
+pattern BehaviorOnMxFailure_USE_DEFAULT_VALUE :: BehaviorOnMxFailure
+pattern BehaviorOnMxFailure_USE_DEFAULT_VALUE = BehaviorOnMxFailure' "USE_DEFAULT_VALUE"
+
+{-# COMPLETE
+  BehaviorOnMxFailure_REJECT_MESSAGE,
+  BehaviorOnMxFailure_USE_DEFAULT_VALUE,
+  BehaviorOnMxFailure'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/BlacklistEntry.hs b/gen/Amazonka/SESV2/Types/BlacklistEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/BlacklistEntry.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.SESV2.Types.BlacklistEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.BlacklistEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that contains information about a blacklisting event that
+-- impacts one of the dedicated IP addresses that is associated with your
+-- account.
+--
+-- /See:/ 'newBlacklistEntry' smart constructor.
+data BlacklistEntry = BlacklistEntry'
+  { -- | Additional information about the blacklisting event, as provided by the
+    -- blacklist maintainer.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The time when the blacklisting event occurred.
+    listingTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the blacklist that the IP address appears on.
+    rblName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BlacklistEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'blacklistEntry_description' - Additional information about the blacklisting event, as provided by the
+-- blacklist maintainer.
+--
+-- 'listingTime', 'blacklistEntry_listingTime' - The time when the blacklisting event occurred.
+--
+-- 'rblName', 'blacklistEntry_rblName' - The name of the blacklist that the IP address appears on.
+newBlacklistEntry ::
+  BlacklistEntry
+newBlacklistEntry =
+  BlacklistEntry'
+    { description = Prelude.Nothing,
+      listingTime = Prelude.Nothing,
+      rblName = Prelude.Nothing
+    }
+
+-- | Additional information about the blacklisting event, as provided by the
+-- blacklist maintainer.
+blacklistEntry_description :: Lens.Lens' BlacklistEntry (Prelude.Maybe Prelude.Text)
+blacklistEntry_description = Lens.lens (\BlacklistEntry' {description} -> description) (\s@BlacklistEntry' {} a -> s {description = a} :: BlacklistEntry)
+
+-- | The time when the blacklisting event occurred.
+blacklistEntry_listingTime :: Lens.Lens' BlacklistEntry (Prelude.Maybe Prelude.UTCTime)
+blacklistEntry_listingTime = Lens.lens (\BlacklistEntry' {listingTime} -> listingTime) (\s@BlacklistEntry' {} a -> s {listingTime = a} :: BlacklistEntry) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the blacklist that the IP address appears on.
+blacklistEntry_rblName :: Lens.Lens' BlacklistEntry (Prelude.Maybe Prelude.Text)
+blacklistEntry_rblName = Lens.lens (\BlacklistEntry' {rblName} -> rblName) (\s@BlacklistEntry' {} a -> s {rblName = a} :: BlacklistEntry)
+
+instance Data.FromJSON BlacklistEntry where
+  parseJSON =
+    Data.withObject
+      "BlacklistEntry"
+      ( \x ->
+          BlacklistEntry'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "ListingTime")
+            Prelude.<*> (x Data..:? "RblName")
+      )
+
+instance Prelude.Hashable BlacklistEntry where
+  hashWithSalt _salt BlacklistEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` listingTime
+      `Prelude.hashWithSalt` rblName
+
+instance Prelude.NFData BlacklistEntry where
+  rnf BlacklistEntry' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf listingTime
+      `Prelude.seq` Prelude.rnf rblName
diff --git a/gen/Amazonka/SESV2/Types/Body.hs b/gen/Amazonka/SESV2/Types/Body.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/Body.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.Body
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.Body 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
+import Amazonka.SESV2.Types.Content
+
+-- | Represents the body of the email message.
+--
+-- /See:/ 'newBody' smart constructor.
+data Body = Body'
+  { -- | An object that represents the version of the message that is displayed
+    -- in email clients that support HTML. HTML messages can include formatted
+    -- text, hyperlinks, images, and more.
+    html :: Prelude.Maybe Content,
+    -- | An object that represents the version of the message that is displayed
+    -- in email clients that don\'t support HTML, or clients where the
+    -- recipient has disabled HTML rendering.
+    text :: Prelude.Maybe Content
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Body' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'html', 'body_html' - An object that represents the version of the message that is displayed
+-- in email clients that support HTML. HTML messages can include formatted
+-- text, hyperlinks, images, and more.
+--
+-- 'text', 'body_text' - An object that represents the version of the message that is displayed
+-- in email clients that don\'t support HTML, or clients where the
+-- recipient has disabled HTML rendering.
+newBody ::
+  Body
+newBody =
+  Body'
+    { html = Prelude.Nothing,
+      text = Prelude.Nothing
+    }
+
+-- | An object that represents the version of the message that is displayed
+-- in email clients that support HTML. HTML messages can include formatted
+-- text, hyperlinks, images, and more.
+body_html :: Lens.Lens' Body (Prelude.Maybe Content)
+body_html = Lens.lens (\Body' {html} -> html) (\s@Body' {} a -> s {html = a} :: Body)
+
+-- | An object that represents the version of the message that is displayed
+-- in email clients that don\'t support HTML, or clients where the
+-- recipient has disabled HTML rendering.
+body_text :: Lens.Lens' Body (Prelude.Maybe Content)
+body_text = Lens.lens (\Body' {text} -> text) (\s@Body' {} a -> s {text = a} :: Body)
+
+instance Prelude.Hashable Body where
+  hashWithSalt _salt Body' {..} =
+    _salt
+      `Prelude.hashWithSalt` html
+      `Prelude.hashWithSalt` text
+
+instance Prelude.NFData Body where
+  rnf Body' {..} =
+    Prelude.rnf html `Prelude.seq` Prelude.rnf text
+
+instance Data.ToJSON Body where
+  toJSON Body' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Html" Data..=) Prelude.<$> html,
+            ("Text" Data..=) Prelude.<$> text
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/BulkEmailContent.hs b/gen/Amazonka/SESV2/Types/BulkEmailContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/BulkEmailContent.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.SESV2.Types.BulkEmailContent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.BulkEmailContent 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
+import Amazonka.SESV2.Types.Template
+
+-- | An object that contains the body of the message. You can specify a
+-- template message.
+--
+-- /See:/ 'newBulkEmailContent' smart constructor.
+data BulkEmailContent = BulkEmailContent'
+  { -- | The template to use for the bulk email message.
+    template :: Prelude.Maybe Template
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BulkEmailContent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'template', 'bulkEmailContent_template' - The template to use for the bulk email message.
+newBulkEmailContent ::
+  BulkEmailContent
+newBulkEmailContent =
+  BulkEmailContent' {template = Prelude.Nothing}
+
+-- | The template to use for the bulk email message.
+bulkEmailContent_template :: Lens.Lens' BulkEmailContent (Prelude.Maybe Template)
+bulkEmailContent_template = Lens.lens (\BulkEmailContent' {template} -> template) (\s@BulkEmailContent' {} a -> s {template = a} :: BulkEmailContent)
+
+instance Prelude.Hashable BulkEmailContent where
+  hashWithSalt _salt BulkEmailContent' {..} =
+    _salt `Prelude.hashWithSalt` template
+
+instance Prelude.NFData BulkEmailContent where
+  rnf BulkEmailContent' {..} = Prelude.rnf template
+
+instance Data.ToJSON BulkEmailContent where
+  toJSON BulkEmailContent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Template" Data..=) Prelude.<$> template]
+      )
diff --git a/gen/Amazonka/SESV2/Types/BulkEmailEntry.hs b/gen/Amazonka/SESV2/Types/BulkEmailEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/BulkEmailEntry.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.SESV2.Types.BulkEmailEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.BulkEmailEntry 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
+import Amazonka.SESV2.Types.Destination
+import Amazonka.SESV2.Types.MessageTag
+import Amazonka.SESV2.Types.ReplacementEmailContent
+
+-- | /See:/ 'newBulkEmailEntry' smart constructor.
+data BulkEmailEntry = BulkEmailEntry'
+  { -- | The @ReplacementEmailContent@ associated with a @BulkEmailEntry@.
+    replacementEmailContent :: Prelude.Maybe ReplacementEmailContent,
+    -- | A list of tags, in the form of name\/value pairs, to apply to an email
+    -- that you send using the @SendBulkTemplatedEmail@ operation. Tags
+    -- correspond to characteristics of the email that you define, so that you
+    -- can publish email sending events.
+    replacementTags :: Prelude.Maybe [MessageTag],
+    -- | Represents the destination of the message, consisting of To:, CC:, and
+    -- BCC: fields.
+    --
+    -- Amazon SES does not support the SMTPUTF8 extension, as described in
+    -- <https://tools.ietf.org/html/rfc6531 RFC6531>. For this reason, the
+    -- local part of a destination email address (the part of the email address
+    -- that precedes the \@ sign) may only contain
+    -- <https://en.wikipedia.org/wiki/Email_address#Local-part 7-bit ASCII characters>.
+    -- If the domain part of an address (the part after the \@ sign) contains
+    -- non-ASCII characters, they must be encoded using Punycode, as described
+    -- in <https://tools.ietf.org/html/rfc3492.html RFC3492>.
+    destination :: Destination
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BulkEmailEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'replacementEmailContent', 'bulkEmailEntry_replacementEmailContent' - The @ReplacementEmailContent@ associated with a @BulkEmailEntry@.
+--
+-- 'replacementTags', 'bulkEmailEntry_replacementTags' - A list of tags, in the form of name\/value pairs, to apply to an email
+-- that you send using the @SendBulkTemplatedEmail@ operation. Tags
+-- correspond to characteristics of the email that you define, so that you
+-- can publish email sending events.
+--
+-- 'destination', 'bulkEmailEntry_destination' - Represents the destination of the message, consisting of To:, CC:, and
+-- BCC: fields.
+--
+-- Amazon SES does not support the SMTPUTF8 extension, as described in
+-- <https://tools.ietf.org/html/rfc6531 RFC6531>. For this reason, the
+-- local part of a destination email address (the part of the email address
+-- that precedes the \@ sign) may only contain
+-- <https://en.wikipedia.org/wiki/Email_address#Local-part 7-bit ASCII characters>.
+-- If the domain part of an address (the part after the \@ sign) contains
+-- non-ASCII characters, they must be encoded using Punycode, as described
+-- in <https://tools.ietf.org/html/rfc3492.html RFC3492>.
+newBulkEmailEntry ::
+  -- | 'destination'
+  Destination ->
+  BulkEmailEntry
+newBulkEmailEntry pDestination_ =
+  BulkEmailEntry'
+    { replacementEmailContent =
+        Prelude.Nothing,
+      replacementTags = Prelude.Nothing,
+      destination = pDestination_
+    }
+
+-- | The @ReplacementEmailContent@ associated with a @BulkEmailEntry@.
+bulkEmailEntry_replacementEmailContent :: Lens.Lens' BulkEmailEntry (Prelude.Maybe ReplacementEmailContent)
+bulkEmailEntry_replacementEmailContent = Lens.lens (\BulkEmailEntry' {replacementEmailContent} -> replacementEmailContent) (\s@BulkEmailEntry' {} a -> s {replacementEmailContent = a} :: BulkEmailEntry)
+
+-- | A list of tags, in the form of name\/value pairs, to apply to an email
+-- that you send using the @SendBulkTemplatedEmail@ operation. Tags
+-- correspond to characteristics of the email that you define, so that you
+-- can publish email sending events.
+bulkEmailEntry_replacementTags :: Lens.Lens' BulkEmailEntry (Prelude.Maybe [MessageTag])
+bulkEmailEntry_replacementTags = Lens.lens (\BulkEmailEntry' {replacementTags} -> replacementTags) (\s@BulkEmailEntry' {} a -> s {replacementTags = a} :: BulkEmailEntry) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents the destination of the message, consisting of To:, CC:, and
+-- BCC: fields.
+--
+-- Amazon SES does not support the SMTPUTF8 extension, as described in
+-- <https://tools.ietf.org/html/rfc6531 RFC6531>. For this reason, the
+-- local part of a destination email address (the part of the email address
+-- that precedes the \@ sign) may only contain
+-- <https://en.wikipedia.org/wiki/Email_address#Local-part 7-bit ASCII characters>.
+-- If the domain part of an address (the part after the \@ sign) contains
+-- non-ASCII characters, they must be encoded using Punycode, as described
+-- in <https://tools.ietf.org/html/rfc3492.html RFC3492>.
+bulkEmailEntry_destination :: Lens.Lens' BulkEmailEntry Destination
+bulkEmailEntry_destination = Lens.lens (\BulkEmailEntry' {destination} -> destination) (\s@BulkEmailEntry' {} a -> s {destination = a} :: BulkEmailEntry)
+
+instance Prelude.Hashable BulkEmailEntry where
+  hashWithSalt _salt BulkEmailEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` replacementEmailContent
+      `Prelude.hashWithSalt` replacementTags
+      `Prelude.hashWithSalt` destination
+
+instance Prelude.NFData BulkEmailEntry where
+  rnf BulkEmailEntry' {..} =
+    Prelude.rnf replacementEmailContent
+      `Prelude.seq` Prelude.rnf replacementTags
+      `Prelude.seq` Prelude.rnf destination
+
+instance Data.ToJSON BulkEmailEntry where
+  toJSON BulkEmailEntry' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ReplacementEmailContent" Data..=)
+              Prelude.<$> replacementEmailContent,
+            ("ReplacementTags" Data..=)
+              Prelude.<$> replacementTags,
+            Prelude.Just ("Destination" Data..= destination)
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/BulkEmailEntryResult.hs b/gen/Amazonka/SESV2/Types/BulkEmailEntryResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/BulkEmailEntryResult.hs
@@ -0,0 +1,257 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.BulkEmailEntryResult
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.BulkEmailEntryResult 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
+import Amazonka.SESV2.Types.BulkEmailStatus
+
+-- | The result of the @SendBulkEmail@ operation of each specified
+-- @BulkEmailEntry@.
+--
+-- /See:/ 'newBulkEmailEntryResult' smart constructor.
+data BulkEmailEntryResult = BulkEmailEntryResult'
+  { -- | A description of an error that prevented a message being sent using the
+    -- @SendBulkTemplatedEmail@ operation.
+    error :: Prelude.Maybe Prelude.Text,
+    -- | The unique message identifier returned from the @SendBulkTemplatedEmail@
+    -- operation.
+    messageId :: Prelude.Maybe Prelude.Text,
+    -- | The status of a message sent using the @SendBulkTemplatedEmail@
+    -- operation.
+    --
+    -- Possible values for this parameter include:
+    --
+    -- -   SUCCESS: Amazon SES accepted the message, and will attempt to
+    --     deliver it to the recipients.
+    --
+    -- -   MESSAGE_REJECTED: The message was rejected because it contained a
+    --     virus.
+    --
+    -- -   MAIL_FROM_DOMAIN_NOT_VERIFIED: The sender\'s email address or domain
+    --     was not verified.
+    --
+    -- -   CONFIGURATION_SET_DOES_NOT_EXIST: The configuration set you
+    --     specified does not exist.
+    --
+    -- -   TEMPLATE_DOES_NOT_EXIST: The template you specified does not exist.
+    --
+    -- -   ACCOUNT_SUSPENDED: Your account has been shut down because of issues
+    --     related to your email sending practices.
+    --
+    -- -   ACCOUNT_THROTTLED: The number of emails you can send has been
+    --     reduced because your account has exceeded its allocated sending
+    --     limit.
+    --
+    -- -   ACCOUNT_DAILY_QUOTA_EXCEEDED: You have reached or exceeded the
+    --     maximum number of emails you can send from your account in a 24-hour
+    --     period.
+    --
+    -- -   INVALID_SENDING_POOL_NAME: The configuration set you specified
+    --     refers to an IP pool that does not exist.
+    --
+    -- -   ACCOUNT_SENDING_PAUSED: Email sending for the Amazon SES account was
+    --     disabled using the
+    --     <https://docs.aws.amazon.com/ses/latest/APIReference/API_UpdateAccountSendingEnabled.html UpdateAccountSendingEnabled>
+    --     operation.
+    --
+    -- -   CONFIGURATION_SET_SENDING_PAUSED: Email sending for this
+    --     configuration set was disabled using the
+    --     <https://docs.aws.amazon.com/ses/latest/APIReference/API_UpdateConfigurationSetSendingEnabled.html UpdateConfigurationSetSendingEnabled>
+    --     operation.
+    --
+    -- -   INVALID_PARAMETER_VALUE: One or more of the parameters you specified
+    --     when calling this operation was invalid. See the error message for
+    --     additional information.
+    --
+    -- -   TRANSIENT_FAILURE: Amazon SES was unable to process your request
+    --     because of a temporary issue.
+    --
+    -- -   FAILED: Amazon SES was unable to process your request. See the error
+    --     message for additional information.
+    status :: Prelude.Maybe BulkEmailStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BulkEmailEntryResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'bulkEmailEntryResult_error' - A description of an error that prevented a message being sent using the
+-- @SendBulkTemplatedEmail@ operation.
+--
+-- 'messageId', 'bulkEmailEntryResult_messageId' - The unique message identifier returned from the @SendBulkTemplatedEmail@
+-- operation.
+--
+-- 'status', 'bulkEmailEntryResult_status' - The status of a message sent using the @SendBulkTemplatedEmail@
+-- operation.
+--
+-- Possible values for this parameter include:
+--
+-- -   SUCCESS: Amazon SES accepted the message, and will attempt to
+--     deliver it to the recipients.
+--
+-- -   MESSAGE_REJECTED: The message was rejected because it contained a
+--     virus.
+--
+-- -   MAIL_FROM_DOMAIN_NOT_VERIFIED: The sender\'s email address or domain
+--     was not verified.
+--
+-- -   CONFIGURATION_SET_DOES_NOT_EXIST: The configuration set you
+--     specified does not exist.
+--
+-- -   TEMPLATE_DOES_NOT_EXIST: The template you specified does not exist.
+--
+-- -   ACCOUNT_SUSPENDED: Your account has been shut down because of issues
+--     related to your email sending practices.
+--
+-- -   ACCOUNT_THROTTLED: The number of emails you can send has been
+--     reduced because your account has exceeded its allocated sending
+--     limit.
+--
+-- -   ACCOUNT_DAILY_QUOTA_EXCEEDED: You have reached or exceeded the
+--     maximum number of emails you can send from your account in a 24-hour
+--     period.
+--
+-- -   INVALID_SENDING_POOL_NAME: The configuration set you specified
+--     refers to an IP pool that does not exist.
+--
+-- -   ACCOUNT_SENDING_PAUSED: Email sending for the Amazon SES account was
+--     disabled using the
+--     <https://docs.aws.amazon.com/ses/latest/APIReference/API_UpdateAccountSendingEnabled.html UpdateAccountSendingEnabled>
+--     operation.
+--
+-- -   CONFIGURATION_SET_SENDING_PAUSED: Email sending for this
+--     configuration set was disabled using the
+--     <https://docs.aws.amazon.com/ses/latest/APIReference/API_UpdateConfigurationSetSendingEnabled.html UpdateConfigurationSetSendingEnabled>
+--     operation.
+--
+-- -   INVALID_PARAMETER_VALUE: One or more of the parameters you specified
+--     when calling this operation was invalid. See the error message for
+--     additional information.
+--
+-- -   TRANSIENT_FAILURE: Amazon SES was unable to process your request
+--     because of a temporary issue.
+--
+-- -   FAILED: Amazon SES was unable to process your request. See the error
+--     message for additional information.
+newBulkEmailEntryResult ::
+  BulkEmailEntryResult
+newBulkEmailEntryResult =
+  BulkEmailEntryResult'
+    { error = Prelude.Nothing,
+      messageId = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | A description of an error that prevented a message being sent using the
+-- @SendBulkTemplatedEmail@ operation.
+bulkEmailEntryResult_error :: Lens.Lens' BulkEmailEntryResult (Prelude.Maybe Prelude.Text)
+bulkEmailEntryResult_error = Lens.lens (\BulkEmailEntryResult' {error} -> error) (\s@BulkEmailEntryResult' {} a -> s {error = a} :: BulkEmailEntryResult)
+
+-- | The unique message identifier returned from the @SendBulkTemplatedEmail@
+-- operation.
+bulkEmailEntryResult_messageId :: Lens.Lens' BulkEmailEntryResult (Prelude.Maybe Prelude.Text)
+bulkEmailEntryResult_messageId = Lens.lens (\BulkEmailEntryResult' {messageId} -> messageId) (\s@BulkEmailEntryResult' {} a -> s {messageId = a} :: BulkEmailEntryResult)
+
+-- | The status of a message sent using the @SendBulkTemplatedEmail@
+-- operation.
+--
+-- Possible values for this parameter include:
+--
+-- -   SUCCESS: Amazon SES accepted the message, and will attempt to
+--     deliver it to the recipients.
+--
+-- -   MESSAGE_REJECTED: The message was rejected because it contained a
+--     virus.
+--
+-- -   MAIL_FROM_DOMAIN_NOT_VERIFIED: The sender\'s email address or domain
+--     was not verified.
+--
+-- -   CONFIGURATION_SET_DOES_NOT_EXIST: The configuration set you
+--     specified does not exist.
+--
+-- -   TEMPLATE_DOES_NOT_EXIST: The template you specified does not exist.
+--
+-- -   ACCOUNT_SUSPENDED: Your account has been shut down because of issues
+--     related to your email sending practices.
+--
+-- -   ACCOUNT_THROTTLED: The number of emails you can send has been
+--     reduced because your account has exceeded its allocated sending
+--     limit.
+--
+-- -   ACCOUNT_DAILY_QUOTA_EXCEEDED: You have reached or exceeded the
+--     maximum number of emails you can send from your account in a 24-hour
+--     period.
+--
+-- -   INVALID_SENDING_POOL_NAME: The configuration set you specified
+--     refers to an IP pool that does not exist.
+--
+-- -   ACCOUNT_SENDING_PAUSED: Email sending for the Amazon SES account was
+--     disabled using the
+--     <https://docs.aws.amazon.com/ses/latest/APIReference/API_UpdateAccountSendingEnabled.html UpdateAccountSendingEnabled>
+--     operation.
+--
+-- -   CONFIGURATION_SET_SENDING_PAUSED: Email sending for this
+--     configuration set was disabled using the
+--     <https://docs.aws.amazon.com/ses/latest/APIReference/API_UpdateConfigurationSetSendingEnabled.html UpdateConfigurationSetSendingEnabled>
+--     operation.
+--
+-- -   INVALID_PARAMETER_VALUE: One or more of the parameters you specified
+--     when calling this operation was invalid. See the error message for
+--     additional information.
+--
+-- -   TRANSIENT_FAILURE: Amazon SES was unable to process your request
+--     because of a temporary issue.
+--
+-- -   FAILED: Amazon SES was unable to process your request. See the error
+--     message for additional information.
+bulkEmailEntryResult_status :: Lens.Lens' BulkEmailEntryResult (Prelude.Maybe BulkEmailStatus)
+bulkEmailEntryResult_status = Lens.lens (\BulkEmailEntryResult' {status} -> status) (\s@BulkEmailEntryResult' {} a -> s {status = a} :: BulkEmailEntryResult)
+
+instance Data.FromJSON BulkEmailEntryResult where
+  parseJSON =
+    Data.withObject
+      "BulkEmailEntryResult"
+      ( \x ->
+          BulkEmailEntryResult'
+            Prelude.<$> (x Data..:? "Error")
+            Prelude.<*> (x Data..:? "MessageId")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable BulkEmailEntryResult where
+  hashWithSalt _salt BulkEmailEntryResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` error
+      `Prelude.hashWithSalt` messageId
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData BulkEmailEntryResult where
+  rnf BulkEmailEntryResult' {..} =
+    Prelude.rnf error
+      `Prelude.seq` Prelude.rnf messageId
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/SESV2/Types/BulkEmailStatus.hs b/gen/Amazonka/SESV2/Types/BulkEmailStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/BulkEmailStatus.hs
@@ -0,0 +1,131 @@
+{-# 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.SESV2.Types.BulkEmailStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.BulkEmailStatus
+  ( BulkEmailStatus
+      ( ..,
+        BulkEmailStatus_ACCOUNT_DAILY_QUOTA_EXCEEDED,
+        BulkEmailStatus_ACCOUNT_SENDING_PAUSED,
+        BulkEmailStatus_ACCOUNT_SUSPENDED,
+        BulkEmailStatus_ACCOUNT_THROTTLED,
+        BulkEmailStatus_CONFIGURATION_SET_NOT_FOUND,
+        BulkEmailStatus_CONFIGURATION_SET_SENDING_PAUSED,
+        BulkEmailStatus_FAILED,
+        BulkEmailStatus_INVALID_PARAMETER,
+        BulkEmailStatus_INVALID_SENDING_POOL_NAME,
+        BulkEmailStatus_MAIL_FROM_DOMAIN_NOT_VERIFIED,
+        BulkEmailStatus_MESSAGE_REJECTED,
+        BulkEmailStatus_SUCCESS,
+        BulkEmailStatus_TEMPLATE_NOT_FOUND,
+        BulkEmailStatus_TRANSIENT_FAILURE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BulkEmailStatus = BulkEmailStatus'
+  { fromBulkEmailStatus ::
+      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 BulkEmailStatus_ACCOUNT_DAILY_QUOTA_EXCEEDED :: BulkEmailStatus
+pattern BulkEmailStatus_ACCOUNT_DAILY_QUOTA_EXCEEDED = BulkEmailStatus' "ACCOUNT_DAILY_QUOTA_EXCEEDED"
+
+pattern BulkEmailStatus_ACCOUNT_SENDING_PAUSED :: BulkEmailStatus
+pattern BulkEmailStatus_ACCOUNT_SENDING_PAUSED = BulkEmailStatus' "ACCOUNT_SENDING_PAUSED"
+
+pattern BulkEmailStatus_ACCOUNT_SUSPENDED :: BulkEmailStatus
+pattern BulkEmailStatus_ACCOUNT_SUSPENDED = BulkEmailStatus' "ACCOUNT_SUSPENDED"
+
+pattern BulkEmailStatus_ACCOUNT_THROTTLED :: BulkEmailStatus
+pattern BulkEmailStatus_ACCOUNT_THROTTLED = BulkEmailStatus' "ACCOUNT_THROTTLED"
+
+pattern BulkEmailStatus_CONFIGURATION_SET_NOT_FOUND :: BulkEmailStatus
+pattern BulkEmailStatus_CONFIGURATION_SET_NOT_FOUND = BulkEmailStatus' "CONFIGURATION_SET_NOT_FOUND"
+
+pattern BulkEmailStatus_CONFIGURATION_SET_SENDING_PAUSED :: BulkEmailStatus
+pattern BulkEmailStatus_CONFIGURATION_SET_SENDING_PAUSED = BulkEmailStatus' "CONFIGURATION_SET_SENDING_PAUSED"
+
+pattern BulkEmailStatus_FAILED :: BulkEmailStatus
+pattern BulkEmailStatus_FAILED = BulkEmailStatus' "FAILED"
+
+pattern BulkEmailStatus_INVALID_PARAMETER :: BulkEmailStatus
+pattern BulkEmailStatus_INVALID_PARAMETER = BulkEmailStatus' "INVALID_PARAMETER"
+
+pattern BulkEmailStatus_INVALID_SENDING_POOL_NAME :: BulkEmailStatus
+pattern BulkEmailStatus_INVALID_SENDING_POOL_NAME = BulkEmailStatus' "INVALID_SENDING_POOL_NAME"
+
+pattern BulkEmailStatus_MAIL_FROM_DOMAIN_NOT_VERIFIED :: BulkEmailStatus
+pattern BulkEmailStatus_MAIL_FROM_DOMAIN_NOT_VERIFIED = BulkEmailStatus' "MAIL_FROM_DOMAIN_NOT_VERIFIED"
+
+pattern BulkEmailStatus_MESSAGE_REJECTED :: BulkEmailStatus
+pattern BulkEmailStatus_MESSAGE_REJECTED = BulkEmailStatus' "MESSAGE_REJECTED"
+
+pattern BulkEmailStatus_SUCCESS :: BulkEmailStatus
+pattern BulkEmailStatus_SUCCESS = BulkEmailStatus' "SUCCESS"
+
+pattern BulkEmailStatus_TEMPLATE_NOT_FOUND :: BulkEmailStatus
+pattern BulkEmailStatus_TEMPLATE_NOT_FOUND = BulkEmailStatus' "TEMPLATE_NOT_FOUND"
+
+pattern BulkEmailStatus_TRANSIENT_FAILURE :: BulkEmailStatus
+pattern BulkEmailStatus_TRANSIENT_FAILURE = BulkEmailStatus' "TRANSIENT_FAILURE"
+
+{-# COMPLETE
+  BulkEmailStatus_ACCOUNT_DAILY_QUOTA_EXCEEDED,
+  BulkEmailStatus_ACCOUNT_SENDING_PAUSED,
+  BulkEmailStatus_ACCOUNT_SUSPENDED,
+  BulkEmailStatus_ACCOUNT_THROTTLED,
+  BulkEmailStatus_CONFIGURATION_SET_NOT_FOUND,
+  BulkEmailStatus_CONFIGURATION_SET_SENDING_PAUSED,
+  BulkEmailStatus_FAILED,
+  BulkEmailStatus_INVALID_PARAMETER,
+  BulkEmailStatus_INVALID_SENDING_POOL_NAME,
+  BulkEmailStatus_MAIL_FROM_DOMAIN_NOT_VERIFIED,
+  BulkEmailStatus_MESSAGE_REJECTED,
+  BulkEmailStatus_SUCCESS,
+  BulkEmailStatus_TEMPLATE_NOT_FOUND,
+  BulkEmailStatus_TRANSIENT_FAILURE,
+  BulkEmailStatus'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/CloudWatchDestination.hs b/gen/Amazonka/SESV2/Types/CloudWatchDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/CloudWatchDestination.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.SESV2.Types.CloudWatchDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.CloudWatchDestination 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
+import Amazonka.SESV2.Types.CloudWatchDimensionConfiguration
+
+-- | An object that defines an Amazon CloudWatch destination for email
+-- events. You can use Amazon CloudWatch to monitor and gain insights on
+-- your email sending metrics.
+--
+-- /See:/ 'newCloudWatchDestination' smart constructor.
+data CloudWatchDestination = CloudWatchDestination'
+  { -- | An array of objects that define the dimensions to use when you send
+    -- email events to Amazon CloudWatch.
+    dimensionConfigurations :: [CloudWatchDimensionConfiguration]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CloudWatchDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dimensionConfigurations', 'cloudWatchDestination_dimensionConfigurations' - An array of objects that define the dimensions to use when you send
+-- email events to Amazon CloudWatch.
+newCloudWatchDestination ::
+  CloudWatchDestination
+newCloudWatchDestination =
+  CloudWatchDestination'
+    { dimensionConfigurations =
+        Prelude.mempty
+    }
+
+-- | An array of objects that define the dimensions to use when you send
+-- email events to Amazon CloudWatch.
+cloudWatchDestination_dimensionConfigurations :: Lens.Lens' CloudWatchDestination [CloudWatchDimensionConfiguration]
+cloudWatchDestination_dimensionConfigurations = Lens.lens (\CloudWatchDestination' {dimensionConfigurations} -> dimensionConfigurations) (\s@CloudWatchDestination' {} a -> s {dimensionConfigurations = a} :: CloudWatchDestination) Prelude.. Lens.coerced
+
+instance Data.FromJSON CloudWatchDestination where
+  parseJSON =
+    Data.withObject
+      "CloudWatchDestination"
+      ( \x ->
+          CloudWatchDestination'
+            Prelude.<$> ( x
+                            Data..:? "DimensionConfigurations"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable CloudWatchDestination where
+  hashWithSalt _salt CloudWatchDestination' {..} =
+    _salt
+      `Prelude.hashWithSalt` dimensionConfigurations
+
+instance Prelude.NFData CloudWatchDestination where
+  rnf CloudWatchDestination' {..} =
+    Prelude.rnf dimensionConfigurations
+
+instance Data.ToJSON CloudWatchDestination where
+  toJSON CloudWatchDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "DimensionConfigurations"
+                  Data..= dimensionConfigurations
+              )
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/CloudWatchDimensionConfiguration.hs b/gen/Amazonka/SESV2/Types/CloudWatchDimensionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/CloudWatchDimensionConfiguration.hs
@@ -0,0 +1,192 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.CloudWatchDimensionConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.CloudWatchDimensionConfiguration 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
+import Amazonka.SESV2.Types.DimensionValueSource
+
+-- | An object that defines the dimension configuration to use when you send
+-- email events to Amazon CloudWatch.
+--
+-- /See:/ 'newCloudWatchDimensionConfiguration' smart constructor.
+data CloudWatchDimensionConfiguration = CloudWatchDimensionConfiguration'
+  { -- | The name of an Amazon CloudWatch dimension associated with an email
+    -- sending metric. The name has to meet the following criteria:
+    --
+    -- -   It can only contain ASCII letters (a–z, A–Z), numbers (0–9),
+    --     underscores (_), or dashes (-).
+    --
+    -- -   It can contain no more than 256 characters.
+    dimensionName :: Prelude.Text,
+    -- | The location where the Amazon SES API v2 finds the value of a dimension
+    -- to publish to Amazon CloudWatch. To use the message tags that you
+    -- specify using an @X-SES-MESSAGE-TAGS@ header or a parameter to the
+    -- @SendEmail@ or @SendRawEmail@ API, choose @messageTag@. To use your own
+    -- email headers, choose @emailHeader@. To use link tags, choose
+    -- @linkTags@.
+    dimensionValueSource :: DimensionValueSource,
+    -- | The default value of the dimension that is published to Amazon
+    -- CloudWatch if you don\'t provide the value of the dimension when you
+    -- send an email. This value has to meet the following criteria:
+    --
+    -- -   Can only contain ASCII letters (a–z, A–Z), numbers (0–9),
+    --     underscores (_), or dashes (-), at signs (\@), and periods (.).
+    --
+    -- -   It can contain no more than 256 characters.
+    defaultDimensionValue :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CloudWatchDimensionConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dimensionName', 'cloudWatchDimensionConfiguration_dimensionName' - The name of an Amazon CloudWatch dimension associated with an email
+-- sending metric. The name has to meet the following criteria:
+--
+-- -   It can only contain ASCII letters (a–z, A–Z), numbers (0–9),
+--     underscores (_), or dashes (-).
+--
+-- -   It can contain no more than 256 characters.
+--
+-- 'dimensionValueSource', 'cloudWatchDimensionConfiguration_dimensionValueSource' - The location where the Amazon SES API v2 finds the value of a dimension
+-- to publish to Amazon CloudWatch. To use the message tags that you
+-- specify using an @X-SES-MESSAGE-TAGS@ header or a parameter to the
+-- @SendEmail@ or @SendRawEmail@ API, choose @messageTag@. To use your own
+-- email headers, choose @emailHeader@. To use link tags, choose
+-- @linkTags@.
+--
+-- 'defaultDimensionValue', 'cloudWatchDimensionConfiguration_defaultDimensionValue' - The default value of the dimension that is published to Amazon
+-- CloudWatch if you don\'t provide the value of the dimension when you
+-- send an email. This value has to meet the following criteria:
+--
+-- -   Can only contain ASCII letters (a–z, A–Z), numbers (0–9),
+--     underscores (_), or dashes (-), at signs (\@), and periods (.).
+--
+-- -   It can contain no more than 256 characters.
+newCloudWatchDimensionConfiguration ::
+  -- | 'dimensionName'
+  Prelude.Text ->
+  -- | 'dimensionValueSource'
+  DimensionValueSource ->
+  -- | 'defaultDimensionValue'
+  Prelude.Text ->
+  CloudWatchDimensionConfiguration
+newCloudWatchDimensionConfiguration
+  pDimensionName_
+  pDimensionValueSource_
+  pDefaultDimensionValue_ =
+    CloudWatchDimensionConfiguration'
+      { dimensionName =
+          pDimensionName_,
+        dimensionValueSource =
+          pDimensionValueSource_,
+        defaultDimensionValue =
+          pDefaultDimensionValue_
+      }
+
+-- | The name of an Amazon CloudWatch dimension associated with an email
+-- sending metric. The name has to meet the following criteria:
+--
+-- -   It can only contain ASCII letters (a–z, A–Z), numbers (0–9),
+--     underscores (_), or dashes (-).
+--
+-- -   It can contain no more than 256 characters.
+cloudWatchDimensionConfiguration_dimensionName :: Lens.Lens' CloudWatchDimensionConfiguration Prelude.Text
+cloudWatchDimensionConfiguration_dimensionName = Lens.lens (\CloudWatchDimensionConfiguration' {dimensionName} -> dimensionName) (\s@CloudWatchDimensionConfiguration' {} a -> s {dimensionName = a} :: CloudWatchDimensionConfiguration)
+
+-- | The location where the Amazon SES API v2 finds the value of a dimension
+-- to publish to Amazon CloudWatch. To use the message tags that you
+-- specify using an @X-SES-MESSAGE-TAGS@ header or a parameter to the
+-- @SendEmail@ or @SendRawEmail@ API, choose @messageTag@. To use your own
+-- email headers, choose @emailHeader@. To use link tags, choose
+-- @linkTags@.
+cloudWatchDimensionConfiguration_dimensionValueSource :: Lens.Lens' CloudWatchDimensionConfiguration DimensionValueSource
+cloudWatchDimensionConfiguration_dimensionValueSource = Lens.lens (\CloudWatchDimensionConfiguration' {dimensionValueSource} -> dimensionValueSource) (\s@CloudWatchDimensionConfiguration' {} a -> s {dimensionValueSource = a} :: CloudWatchDimensionConfiguration)
+
+-- | The default value of the dimension that is published to Amazon
+-- CloudWatch if you don\'t provide the value of the dimension when you
+-- send an email. This value has to meet the following criteria:
+--
+-- -   Can only contain ASCII letters (a–z, A–Z), numbers (0–9),
+--     underscores (_), or dashes (-), at signs (\@), and periods (.).
+--
+-- -   It can contain no more than 256 characters.
+cloudWatchDimensionConfiguration_defaultDimensionValue :: Lens.Lens' CloudWatchDimensionConfiguration Prelude.Text
+cloudWatchDimensionConfiguration_defaultDimensionValue = Lens.lens (\CloudWatchDimensionConfiguration' {defaultDimensionValue} -> defaultDimensionValue) (\s@CloudWatchDimensionConfiguration' {} a -> s {defaultDimensionValue = a} :: CloudWatchDimensionConfiguration)
+
+instance
+  Data.FromJSON
+    CloudWatchDimensionConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "CloudWatchDimensionConfiguration"
+      ( \x ->
+          CloudWatchDimensionConfiguration'
+            Prelude.<$> (x Data..: "DimensionName")
+            Prelude.<*> (x Data..: "DimensionValueSource")
+            Prelude.<*> (x Data..: "DefaultDimensionValue")
+      )
+
+instance
+  Prelude.Hashable
+    CloudWatchDimensionConfiguration
+  where
+  hashWithSalt
+    _salt
+    CloudWatchDimensionConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` dimensionName
+        `Prelude.hashWithSalt` dimensionValueSource
+        `Prelude.hashWithSalt` defaultDimensionValue
+
+instance
+  Prelude.NFData
+    CloudWatchDimensionConfiguration
+  where
+  rnf CloudWatchDimensionConfiguration' {..} =
+    Prelude.rnf dimensionName
+      `Prelude.seq` Prelude.rnf dimensionValueSource
+      `Prelude.seq` Prelude.rnf defaultDimensionValue
+
+instance Data.ToJSON CloudWatchDimensionConfiguration where
+  toJSON CloudWatchDimensionConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("DimensionName" Data..= dimensionName),
+            Prelude.Just
+              ( "DimensionValueSource"
+                  Data..= dimensionValueSource
+              ),
+            Prelude.Just
+              ( "DefaultDimensionValue"
+                  Data..= defaultDimensionValue
+              )
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/Contact.hs b/gen/Amazonka/SESV2/Types/Contact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/Contact.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.SESV2.Types.Contact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.Contact 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
+import Amazonka.SESV2.Types.TopicPreference
+
+-- | A contact is the end-user who is receiving the email.
+--
+-- /See:/ 'newContact' smart constructor.
+data Contact = Contact'
+  { -- | The contact\'s email address.
+    emailAddress :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp noting the last time the contact\'s information was updated.
+    lastUpdatedTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The default topic preferences applied to the contact.
+    topicDefaultPreferences :: Prelude.Maybe [TopicPreference],
+    -- | The contact\'s preference for being opted-in to or opted-out of a topic.
+    topicPreferences :: Prelude.Maybe [TopicPreference],
+    -- | A boolean value status noting if the contact is unsubscribed from all
+    -- contact list topics.
+    unsubscribeAll :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Contact' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'emailAddress', 'contact_emailAddress' - The contact\'s email address.
+--
+-- 'lastUpdatedTimestamp', 'contact_lastUpdatedTimestamp' - A timestamp noting the last time the contact\'s information was updated.
+--
+-- 'topicDefaultPreferences', 'contact_topicDefaultPreferences' - The default topic preferences applied to the contact.
+--
+-- 'topicPreferences', 'contact_topicPreferences' - The contact\'s preference for being opted-in to or opted-out of a topic.
+--
+-- 'unsubscribeAll', 'contact_unsubscribeAll' - A boolean value status noting if the contact is unsubscribed from all
+-- contact list topics.
+newContact ::
+  Contact
+newContact =
+  Contact'
+    { emailAddress = Prelude.Nothing,
+      lastUpdatedTimestamp = Prelude.Nothing,
+      topicDefaultPreferences = Prelude.Nothing,
+      topicPreferences = Prelude.Nothing,
+      unsubscribeAll = Prelude.Nothing
+    }
+
+-- | The contact\'s email address.
+contact_emailAddress :: Lens.Lens' Contact (Prelude.Maybe Prelude.Text)
+contact_emailAddress = Lens.lens (\Contact' {emailAddress} -> emailAddress) (\s@Contact' {} a -> s {emailAddress = a} :: Contact)
+
+-- | A timestamp noting the last time the contact\'s information was updated.
+contact_lastUpdatedTimestamp :: Lens.Lens' Contact (Prelude.Maybe Prelude.UTCTime)
+contact_lastUpdatedTimestamp = Lens.lens (\Contact' {lastUpdatedTimestamp} -> lastUpdatedTimestamp) (\s@Contact' {} a -> s {lastUpdatedTimestamp = a} :: Contact) Prelude.. Lens.mapping Data._Time
+
+-- | The default topic preferences applied to the contact.
+contact_topicDefaultPreferences :: Lens.Lens' Contact (Prelude.Maybe [TopicPreference])
+contact_topicDefaultPreferences = Lens.lens (\Contact' {topicDefaultPreferences} -> topicDefaultPreferences) (\s@Contact' {} a -> s {topicDefaultPreferences = a} :: Contact) Prelude.. Lens.mapping Lens.coerced
+
+-- | The contact\'s preference for being opted-in to or opted-out of a topic.
+contact_topicPreferences :: Lens.Lens' Contact (Prelude.Maybe [TopicPreference])
+contact_topicPreferences = Lens.lens (\Contact' {topicPreferences} -> topicPreferences) (\s@Contact' {} a -> s {topicPreferences = a} :: Contact) Prelude.. Lens.mapping Lens.coerced
+
+-- | A boolean value status noting if the contact is unsubscribed from all
+-- contact list topics.
+contact_unsubscribeAll :: Lens.Lens' Contact (Prelude.Maybe Prelude.Bool)
+contact_unsubscribeAll = Lens.lens (\Contact' {unsubscribeAll} -> unsubscribeAll) (\s@Contact' {} a -> s {unsubscribeAll = a} :: Contact)
+
+instance Data.FromJSON Contact where
+  parseJSON =
+    Data.withObject
+      "Contact"
+      ( \x ->
+          Contact'
+            Prelude.<$> (x Data..:? "EmailAddress")
+            Prelude.<*> (x Data..:? "LastUpdatedTimestamp")
+            Prelude.<*> ( x
+                            Data..:? "TopicDefaultPreferences"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "TopicPreferences"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "UnsubscribeAll")
+      )
+
+instance Prelude.Hashable Contact where
+  hashWithSalt _salt Contact' {..} =
+    _salt
+      `Prelude.hashWithSalt` emailAddress
+      `Prelude.hashWithSalt` lastUpdatedTimestamp
+      `Prelude.hashWithSalt` topicDefaultPreferences
+      `Prelude.hashWithSalt` topicPreferences
+      `Prelude.hashWithSalt` unsubscribeAll
+
+instance Prelude.NFData Contact where
+  rnf Contact' {..} =
+    Prelude.rnf emailAddress
+      `Prelude.seq` Prelude.rnf lastUpdatedTimestamp
+      `Prelude.seq` Prelude.rnf topicDefaultPreferences
+      `Prelude.seq` Prelude.rnf topicPreferences
+      `Prelude.seq` Prelude.rnf unsubscribeAll
diff --git a/gen/Amazonka/SESV2/Types/ContactLanguage.hs b/gen/Amazonka/SESV2/Types/ContactLanguage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/ContactLanguage.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.ContactLanguage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.ContactLanguage
+  ( ContactLanguage
+      ( ..,
+        ContactLanguage_EN,
+        ContactLanguage_JA
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ContactLanguage = ContactLanguage'
+  { fromContactLanguage ::
+      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 ContactLanguage_EN :: ContactLanguage
+pattern ContactLanguage_EN = ContactLanguage' "EN"
+
+pattern ContactLanguage_JA :: ContactLanguage
+pattern ContactLanguage_JA = ContactLanguage' "JA"
+
+{-# COMPLETE
+  ContactLanguage_EN,
+  ContactLanguage_JA,
+  ContactLanguage'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/ContactList.hs b/gen/Amazonka/SESV2/Types/ContactList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/ContactList.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.SESV2.Types.ContactList
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.ContactList where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A list that contains contacts that have subscribed to a particular topic
+-- or topics.
+--
+-- /See:/ 'newContactList' smart constructor.
+data ContactList = ContactList'
+  { -- | The name of the contact list.
+    contactListName :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp noting the last time the contact list was updated.
+    lastUpdatedTimestamp :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ContactList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactListName', 'contactList_contactListName' - The name of the contact list.
+--
+-- 'lastUpdatedTimestamp', 'contactList_lastUpdatedTimestamp' - A timestamp noting the last time the contact list was updated.
+newContactList ::
+  ContactList
+newContactList =
+  ContactList'
+    { contactListName = Prelude.Nothing,
+      lastUpdatedTimestamp = Prelude.Nothing
+    }
+
+-- | The name of the contact list.
+contactList_contactListName :: Lens.Lens' ContactList (Prelude.Maybe Prelude.Text)
+contactList_contactListName = Lens.lens (\ContactList' {contactListName} -> contactListName) (\s@ContactList' {} a -> s {contactListName = a} :: ContactList)
+
+-- | A timestamp noting the last time the contact list was updated.
+contactList_lastUpdatedTimestamp :: Lens.Lens' ContactList (Prelude.Maybe Prelude.UTCTime)
+contactList_lastUpdatedTimestamp = Lens.lens (\ContactList' {lastUpdatedTimestamp} -> lastUpdatedTimestamp) (\s@ContactList' {} a -> s {lastUpdatedTimestamp = a} :: ContactList) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON ContactList where
+  parseJSON =
+    Data.withObject
+      "ContactList"
+      ( \x ->
+          ContactList'
+            Prelude.<$> (x Data..:? "ContactListName")
+            Prelude.<*> (x Data..:? "LastUpdatedTimestamp")
+      )
+
+instance Prelude.Hashable ContactList where
+  hashWithSalt _salt ContactList' {..} =
+    _salt
+      `Prelude.hashWithSalt` contactListName
+      `Prelude.hashWithSalt` lastUpdatedTimestamp
+
+instance Prelude.NFData ContactList where
+  rnf ContactList' {..} =
+    Prelude.rnf contactListName
+      `Prelude.seq` Prelude.rnf lastUpdatedTimestamp
diff --git a/gen/Amazonka/SESV2/Types/ContactListDestination.hs b/gen/Amazonka/SESV2/Types/ContactListDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/ContactListDestination.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.SESV2.Types.ContactListDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.ContactListDestination 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
+import Amazonka.SESV2.Types.ContactListImportAction
+
+-- | An object that contains details about the action of a contact list.
+--
+-- /See:/ 'newContactListDestination' smart constructor.
+data ContactListDestination = ContactListDestination'
+  { -- | The name of the contact list.
+    contactListName :: Prelude.Text,
+    -- | >The type of action to perform on the addresses. The following are the
+    -- possible values:
+    --
+    -- -   PUT: add the addresses to the contact list. If the record already
+    --     exists, it will override it with the new value.
+    --
+    -- -   DELETE: remove the addresses from the contact list.
+    contactListImportAction :: ContactListImportAction
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ContactListDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactListName', 'contactListDestination_contactListName' - The name of the contact list.
+--
+-- 'contactListImportAction', 'contactListDestination_contactListImportAction' - >The type of action to perform on the addresses. The following are the
+-- possible values:
+--
+-- -   PUT: add the addresses to the contact list. If the record already
+--     exists, it will override it with the new value.
+--
+-- -   DELETE: remove the addresses from the contact list.
+newContactListDestination ::
+  -- | 'contactListName'
+  Prelude.Text ->
+  -- | 'contactListImportAction'
+  ContactListImportAction ->
+  ContactListDestination
+newContactListDestination
+  pContactListName_
+  pContactListImportAction_ =
+    ContactListDestination'
+      { contactListName =
+          pContactListName_,
+        contactListImportAction = pContactListImportAction_
+      }
+
+-- | The name of the contact list.
+contactListDestination_contactListName :: Lens.Lens' ContactListDestination Prelude.Text
+contactListDestination_contactListName = Lens.lens (\ContactListDestination' {contactListName} -> contactListName) (\s@ContactListDestination' {} a -> s {contactListName = a} :: ContactListDestination)
+
+-- | >The type of action to perform on the addresses. The following are the
+-- possible values:
+--
+-- -   PUT: add the addresses to the contact list. If the record already
+--     exists, it will override it with the new value.
+--
+-- -   DELETE: remove the addresses from the contact list.
+contactListDestination_contactListImportAction :: Lens.Lens' ContactListDestination ContactListImportAction
+contactListDestination_contactListImportAction = Lens.lens (\ContactListDestination' {contactListImportAction} -> contactListImportAction) (\s@ContactListDestination' {} a -> s {contactListImportAction = a} :: ContactListDestination)
+
+instance Data.FromJSON ContactListDestination where
+  parseJSON =
+    Data.withObject
+      "ContactListDestination"
+      ( \x ->
+          ContactListDestination'
+            Prelude.<$> (x Data..: "ContactListName")
+            Prelude.<*> (x Data..: "ContactListImportAction")
+      )
+
+instance Prelude.Hashable ContactListDestination where
+  hashWithSalt _salt ContactListDestination' {..} =
+    _salt
+      `Prelude.hashWithSalt` contactListName
+      `Prelude.hashWithSalt` contactListImportAction
+
+instance Prelude.NFData ContactListDestination where
+  rnf ContactListDestination' {..} =
+    Prelude.rnf contactListName
+      `Prelude.seq` Prelude.rnf contactListImportAction
+
+instance Data.ToJSON ContactListDestination where
+  toJSON ContactListDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("ContactListName" Data..= contactListName),
+            Prelude.Just
+              ( "ContactListImportAction"
+                  Data..= contactListImportAction
+              )
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/ContactListImportAction.hs b/gen/Amazonka/SESV2/Types/ContactListImportAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/ContactListImportAction.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.ContactListImportAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.ContactListImportAction
+  ( ContactListImportAction
+      ( ..,
+        ContactListImportAction_DELETE,
+        ContactListImportAction_PUT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ContactListImportAction = ContactListImportAction'
+  { fromContactListImportAction ::
+      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 ContactListImportAction_DELETE :: ContactListImportAction
+pattern ContactListImportAction_DELETE = ContactListImportAction' "DELETE"
+
+pattern ContactListImportAction_PUT :: ContactListImportAction
+pattern ContactListImportAction_PUT = ContactListImportAction' "PUT"
+
+{-# COMPLETE
+  ContactListImportAction_DELETE,
+  ContactListImportAction_PUT,
+  ContactListImportAction'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/Content.hs b/gen/Amazonka/SESV2/Types/Content.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/Content.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.SESV2.Types.Content
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.Content where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that represents the content of the email, and optionally a
+-- character set specification.
+--
+-- /See:/ 'newContent' smart constructor.
+data Content = Content'
+  { -- | The character set for the content. Because of the constraints of the
+    -- SMTP protocol, Amazon SES uses 7-bit ASCII by default. If the text
+    -- includes characters outside of the ASCII range, you have to specify a
+    -- character set. For example, you could specify @UTF-8@, @ISO-8859-1@, or
+    -- @Shift_JIS@.
+    charset :: Prelude.Maybe Prelude.Text,
+    -- | The content of the message itself.
+    data' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Content' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'charset', 'content_charset' - The character set for the content. Because of the constraints of the
+-- SMTP protocol, Amazon SES uses 7-bit ASCII by default. If the text
+-- includes characters outside of the ASCII range, you have to specify a
+-- character set. For example, you could specify @UTF-8@, @ISO-8859-1@, or
+-- @Shift_JIS@.
+--
+-- 'data'', 'content_data' - The content of the message itself.
+newContent ::
+  -- | 'data''
+  Prelude.Text ->
+  Content
+newContent pData_ =
+  Content' {charset = Prelude.Nothing, data' = pData_}
+
+-- | The character set for the content. Because of the constraints of the
+-- SMTP protocol, Amazon SES uses 7-bit ASCII by default. If the text
+-- includes characters outside of the ASCII range, you have to specify a
+-- character set. For example, you could specify @UTF-8@, @ISO-8859-1@, or
+-- @Shift_JIS@.
+content_charset :: Lens.Lens' Content (Prelude.Maybe Prelude.Text)
+content_charset = Lens.lens (\Content' {charset} -> charset) (\s@Content' {} a -> s {charset = a} :: Content)
+
+-- | The content of the message itself.
+content_data :: Lens.Lens' Content Prelude.Text
+content_data = Lens.lens (\Content' {data'} -> data') (\s@Content' {} a -> s {data' = a} :: Content)
+
+instance Prelude.Hashable Content where
+  hashWithSalt _salt Content' {..} =
+    _salt
+      `Prelude.hashWithSalt` charset
+      `Prelude.hashWithSalt` data'
+
+instance Prelude.NFData Content where
+  rnf Content' {..} =
+    Prelude.rnf charset `Prelude.seq` Prelude.rnf data'
+
+instance Data.ToJSON Content where
+  toJSON Content' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Charset" Data..=) Prelude.<$> charset,
+            Prelude.Just ("Data" Data..= data')
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/CustomVerificationEmailTemplateMetadata.hs b/gen/Amazonka/SESV2/Types/CustomVerificationEmailTemplateMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/CustomVerificationEmailTemplateMetadata.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.SESV2.Types.CustomVerificationEmailTemplateMetadata
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.CustomVerificationEmailTemplateMetadata where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about a custom verification email template.
+--
+-- /See:/ 'newCustomVerificationEmailTemplateMetadata' smart constructor.
+data CustomVerificationEmailTemplateMetadata = CustomVerificationEmailTemplateMetadata'
+  { -- | The URL that the recipient of the verification email is sent to if his
+    -- or her address is not successfully verified.
+    failureRedirectionURL :: Prelude.Maybe Prelude.Text,
+    -- | The email address that the custom verification email is sent from.
+    fromEmailAddress :: Prelude.Maybe Prelude.Text,
+    -- | The URL that the recipient of the verification email is sent to if his
+    -- or her address is successfully verified.
+    successRedirectionURL :: Prelude.Maybe Prelude.Text,
+    -- | The name of the custom verification email template.
+    templateName :: Prelude.Maybe Prelude.Text,
+    -- | The subject line of the custom verification email.
+    templateSubject :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomVerificationEmailTemplateMetadata' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failureRedirectionURL', 'customVerificationEmailTemplateMetadata_failureRedirectionURL' - The URL that the recipient of the verification email is sent to if his
+-- or her address is not successfully verified.
+--
+-- 'fromEmailAddress', 'customVerificationEmailTemplateMetadata_fromEmailAddress' - The email address that the custom verification email is sent from.
+--
+-- 'successRedirectionURL', 'customVerificationEmailTemplateMetadata_successRedirectionURL' - The URL that the recipient of the verification email is sent to if his
+-- or her address is successfully verified.
+--
+-- 'templateName', 'customVerificationEmailTemplateMetadata_templateName' - The name of the custom verification email template.
+--
+-- 'templateSubject', 'customVerificationEmailTemplateMetadata_templateSubject' - The subject line of the custom verification email.
+newCustomVerificationEmailTemplateMetadata ::
+  CustomVerificationEmailTemplateMetadata
+newCustomVerificationEmailTemplateMetadata =
+  CustomVerificationEmailTemplateMetadata'
+    { failureRedirectionURL =
+        Prelude.Nothing,
+      fromEmailAddress = Prelude.Nothing,
+      successRedirectionURL =
+        Prelude.Nothing,
+      templateName = Prelude.Nothing,
+      templateSubject = Prelude.Nothing
+    }
+
+-- | The URL that the recipient of the verification email is sent to if his
+-- or her address is not successfully verified.
+customVerificationEmailTemplateMetadata_failureRedirectionURL :: Lens.Lens' CustomVerificationEmailTemplateMetadata (Prelude.Maybe Prelude.Text)
+customVerificationEmailTemplateMetadata_failureRedirectionURL = Lens.lens (\CustomVerificationEmailTemplateMetadata' {failureRedirectionURL} -> failureRedirectionURL) (\s@CustomVerificationEmailTemplateMetadata' {} a -> s {failureRedirectionURL = a} :: CustomVerificationEmailTemplateMetadata)
+
+-- | The email address that the custom verification email is sent from.
+customVerificationEmailTemplateMetadata_fromEmailAddress :: Lens.Lens' CustomVerificationEmailTemplateMetadata (Prelude.Maybe Prelude.Text)
+customVerificationEmailTemplateMetadata_fromEmailAddress = Lens.lens (\CustomVerificationEmailTemplateMetadata' {fromEmailAddress} -> fromEmailAddress) (\s@CustomVerificationEmailTemplateMetadata' {} a -> s {fromEmailAddress = a} :: CustomVerificationEmailTemplateMetadata)
+
+-- | The URL that the recipient of the verification email is sent to if his
+-- or her address is successfully verified.
+customVerificationEmailTemplateMetadata_successRedirectionURL :: Lens.Lens' CustomVerificationEmailTemplateMetadata (Prelude.Maybe Prelude.Text)
+customVerificationEmailTemplateMetadata_successRedirectionURL = Lens.lens (\CustomVerificationEmailTemplateMetadata' {successRedirectionURL} -> successRedirectionURL) (\s@CustomVerificationEmailTemplateMetadata' {} a -> s {successRedirectionURL = a} :: CustomVerificationEmailTemplateMetadata)
+
+-- | The name of the custom verification email template.
+customVerificationEmailTemplateMetadata_templateName :: Lens.Lens' CustomVerificationEmailTemplateMetadata (Prelude.Maybe Prelude.Text)
+customVerificationEmailTemplateMetadata_templateName = Lens.lens (\CustomVerificationEmailTemplateMetadata' {templateName} -> templateName) (\s@CustomVerificationEmailTemplateMetadata' {} a -> s {templateName = a} :: CustomVerificationEmailTemplateMetadata)
+
+-- | The subject line of the custom verification email.
+customVerificationEmailTemplateMetadata_templateSubject :: Lens.Lens' CustomVerificationEmailTemplateMetadata (Prelude.Maybe Prelude.Text)
+customVerificationEmailTemplateMetadata_templateSubject = Lens.lens (\CustomVerificationEmailTemplateMetadata' {templateSubject} -> templateSubject) (\s@CustomVerificationEmailTemplateMetadata' {} a -> s {templateSubject = a} :: CustomVerificationEmailTemplateMetadata)
+
+instance
+  Data.FromJSON
+    CustomVerificationEmailTemplateMetadata
+  where
+  parseJSON =
+    Data.withObject
+      "CustomVerificationEmailTemplateMetadata"
+      ( \x ->
+          CustomVerificationEmailTemplateMetadata'
+            Prelude.<$> (x Data..:? "FailureRedirectionURL")
+            Prelude.<*> (x Data..:? "FromEmailAddress")
+            Prelude.<*> (x Data..:? "SuccessRedirectionURL")
+            Prelude.<*> (x Data..:? "TemplateName")
+            Prelude.<*> (x Data..:? "TemplateSubject")
+      )
+
+instance
+  Prelude.Hashable
+    CustomVerificationEmailTemplateMetadata
+  where
+  hashWithSalt
+    _salt
+    CustomVerificationEmailTemplateMetadata' {..} =
+      _salt
+        `Prelude.hashWithSalt` failureRedirectionURL
+        `Prelude.hashWithSalt` fromEmailAddress
+        `Prelude.hashWithSalt` successRedirectionURL
+        `Prelude.hashWithSalt` templateName
+        `Prelude.hashWithSalt` templateSubject
+
+instance
+  Prelude.NFData
+    CustomVerificationEmailTemplateMetadata
+  where
+  rnf CustomVerificationEmailTemplateMetadata' {..} =
+    Prelude.rnf failureRedirectionURL
+      `Prelude.seq` Prelude.rnf fromEmailAddress
+      `Prelude.seq` Prelude.rnf successRedirectionURL
+      `Prelude.seq` Prelude.rnf templateName
+      `Prelude.seq` Prelude.rnf templateSubject
diff --git a/gen/Amazonka/SESV2/Types/DailyVolume.hs b/gen/Amazonka/SESV2/Types/DailyVolume.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DailyVolume.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.DailyVolume
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DailyVolume 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
+import Amazonka.SESV2.Types.DomainIspPlacement
+import Amazonka.SESV2.Types.VolumeStatistics
+
+-- | An object that contains information about the volume of email sent on
+-- each day of the analysis period.
+--
+-- /See:/ 'newDailyVolume' smart constructor.
+data DailyVolume = DailyVolume'
+  { -- | An object that contains inbox placement metrics for a specified day in
+    -- the analysis period, broken out by the recipient\'s email provider.
+    domainIspPlacements :: Prelude.Maybe [DomainIspPlacement],
+    -- | The date that the DailyVolume metrics apply to, in Unix time.
+    startDate :: Prelude.Maybe Data.POSIX,
+    -- | An object that contains inbox placement metrics for a specific day in
+    -- the analysis period.
+    volumeStatistics :: Prelude.Maybe VolumeStatistics
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DailyVolume' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainIspPlacements', 'dailyVolume_domainIspPlacements' - An object that contains inbox placement metrics for a specified day in
+-- the analysis period, broken out by the recipient\'s email provider.
+--
+-- 'startDate', 'dailyVolume_startDate' - The date that the DailyVolume metrics apply to, in Unix time.
+--
+-- 'volumeStatistics', 'dailyVolume_volumeStatistics' - An object that contains inbox placement metrics for a specific day in
+-- the analysis period.
+newDailyVolume ::
+  DailyVolume
+newDailyVolume =
+  DailyVolume'
+    { domainIspPlacements = Prelude.Nothing,
+      startDate = Prelude.Nothing,
+      volumeStatistics = Prelude.Nothing
+    }
+
+-- | An object that contains inbox placement metrics for a specified day in
+-- the analysis period, broken out by the recipient\'s email provider.
+dailyVolume_domainIspPlacements :: Lens.Lens' DailyVolume (Prelude.Maybe [DomainIspPlacement])
+dailyVolume_domainIspPlacements = Lens.lens (\DailyVolume' {domainIspPlacements} -> domainIspPlacements) (\s@DailyVolume' {} a -> s {domainIspPlacements = a} :: DailyVolume) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date that the DailyVolume metrics apply to, in Unix time.
+dailyVolume_startDate :: Lens.Lens' DailyVolume (Prelude.Maybe Prelude.UTCTime)
+dailyVolume_startDate = Lens.lens (\DailyVolume' {startDate} -> startDate) (\s@DailyVolume' {} a -> s {startDate = a} :: DailyVolume) Prelude.. Lens.mapping Data._Time
+
+-- | An object that contains inbox placement metrics for a specific day in
+-- the analysis period.
+dailyVolume_volumeStatistics :: Lens.Lens' DailyVolume (Prelude.Maybe VolumeStatistics)
+dailyVolume_volumeStatistics = Lens.lens (\DailyVolume' {volumeStatistics} -> volumeStatistics) (\s@DailyVolume' {} a -> s {volumeStatistics = a} :: DailyVolume)
+
+instance Data.FromJSON DailyVolume where
+  parseJSON =
+    Data.withObject
+      "DailyVolume"
+      ( \x ->
+          DailyVolume'
+            Prelude.<$> ( x
+                            Data..:? "DomainIspPlacements"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "StartDate")
+            Prelude.<*> (x Data..:? "VolumeStatistics")
+      )
+
+instance Prelude.Hashable DailyVolume where
+  hashWithSalt _salt DailyVolume' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainIspPlacements
+      `Prelude.hashWithSalt` startDate
+      `Prelude.hashWithSalt` volumeStatistics
+
+instance Prelude.NFData DailyVolume where
+  rnf DailyVolume' {..} =
+    Prelude.rnf domainIspPlacements
+      `Prelude.seq` Prelude.rnf startDate
+      `Prelude.seq` Prelude.rnf volumeStatistics
diff --git a/gen/Amazonka/SESV2/Types/DashboardAttributes.hs b/gen/Amazonka/SESV2/Types/DashboardAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DashboardAttributes.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.SESV2.Types.DashboardAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DashboardAttributes 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
+import Amazonka.SESV2.Types.FeatureStatus
+
+-- | An object containing additional settings for your VDM configuration as
+-- applicable to the Dashboard.
+--
+-- /See:/ 'newDashboardAttributes' smart constructor.
+data DashboardAttributes = DashboardAttributes'
+  { -- | Specifies the status of your VDM engagement metrics collection. Can be
+    -- one of the following:
+    --
+    -- -   @ENABLED@ – Amazon SES enables engagement metrics for your account.
+    --
+    -- -   @DISABLED@ – Amazon SES disables engagement metrics for your
+    --     account.
+    engagementMetrics :: Prelude.Maybe FeatureStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DashboardAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'engagementMetrics', 'dashboardAttributes_engagementMetrics' - Specifies the status of your VDM engagement metrics collection. Can be
+-- one of the following:
+--
+-- -   @ENABLED@ – Amazon SES enables engagement metrics for your account.
+--
+-- -   @DISABLED@ – Amazon SES disables engagement metrics for your
+--     account.
+newDashboardAttributes ::
+  DashboardAttributes
+newDashboardAttributes =
+  DashboardAttributes'
+    { engagementMetrics =
+        Prelude.Nothing
+    }
+
+-- | Specifies the status of your VDM engagement metrics collection. Can be
+-- one of the following:
+--
+-- -   @ENABLED@ – Amazon SES enables engagement metrics for your account.
+--
+-- -   @DISABLED@ – Amazon SES disables engagement metrics for your
+--     account.
+dashboardAttributes_engagementMetrics :: Lens.Lens' DashboardAttributes (Prelude.Maybe FeatureStatus)
+dashboardAttributes_engagementMetrics = Lens.lens (\DashboardAttributes' {engagementMetrics} -> engagementMetrics) (\s@DashboardAttributes' {} a -> s {engagementMetrics = a} :: DashboardAttributes)
+
+instance Data.FromJSON DashboardAttributes where
+  parseJSON =
+    Data.withObject
+      "DashboardAttributes"
+      ( \x ->
+          DashboardAttributes'
+            Prelude.<$> (x Data..:? "EngagementMetrics")
+      )
+
+instance Prelude.Hashable DashboardAttributes where
+  hashWithSalt _salt DashboardAttributes' {..} =
+    _salt `Prelude.hashWithSalt` engagementMetrics
+
+instance Prelude.NFData DashboardAttributes where
+  rnf DashboardAttributes' {..} =
+    Prelude.rnf engagementMetrics
+
+instance Data.ToJSON DashboardAttributes where
+  toJSON DashboardAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EngagementMetrics" Data..=)
+              Prelude.<$> engagementMetrics
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/DashboardOptions.hs b/gen/Amazonka/SESV2/Types/DashboardOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DashboardOptions.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.SESV2.Types.DashboardOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DashboardOptions 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
+import Amazonka.SESV2.Types.FeatureStatus
+
+-- | An object containing additional settings for your VDM configuration as
+-- applicable to the Dashboard.
+--
+-- /See:/ 'newDashboardOptions' smart constructor.
+data DashboardOptions = DashboardOptions'
+  { -- | Specifies the status of your VDM engagement metrics collection. Can be
+    -- one of the following:
+    --
+    -- -   @ENABLED@ – Amazon SES enables engagement metrics for the
+    --     configuration set.
+    --
+    -- -   @DISABLED@ – Amazon SES disables engagement metrics for the
+    --     configuration set.
+    engagementMetrics :: Prelude.Maybe FeatureStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DashboardOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'engagementMetrics', 'dashboardOptions_engagementMetrics' - Specifies the status of your VDM engagement metrics collection. Can be
+-- one of the following:
+--
+-- -   @ENABLED@ – Amazon SES enables engagement metrics for the
+--     configuration set.
+--
+-- -   @DISABLED@ – Amazon SES disables engagement metrics for the
+--     configuration set.
+newDashboardOptions ::
+  DashboardOptions
+newDashboardOptions =
+  DashboardOptions'
+    { engagementMetrics =
+        Prelude.Nothing
+    }
+
+-- | Specifies the status of your VDM engagement metrics collection. Can be
+-- one of the following:
+--
+-- -   @ENABLED@ – Amazon SES enables engagement metrics for the
+--     configuration set.
+--
+-- -   @DISABLED@ – Amazon SES disables engagement metrics for the
+--     configuration set.
+dashboardOptions_engagementMetrics :: Lens.Lens' DashboardOptions (Prelude.Maybe FeatureStatus)
+dashboardOptions_engagementMetrics = Lens.lens (\DashboardOptions' {engagementMetrics} -> engagementMetrics) (\s@DashboardOptions' {} a -> s {engagementMetrics = a} :: DashboardOptions)
+
+instance Data.FromJSON DashboardOptions where
+  parseJSON =
+    Data.withObject
+      "DashboardOptions"
+      ( \x ->
+          DashboardOptions'
+            Prelude.<$> (x Data..:? "EngagementMetrics")
+      )
+
+instance Prelude.Hashable DashboardOptions where
+  hashWithSalt _salt DashboardOptions' {..} =
+    _salt `Prelude.hashWithSalt` engagementMetrics
+
+instance Prelude.NFData DashboardOptions where
+  rnf DashboardOptions' {..} =
+    Prelude.rnf engagementMetrics
+
+instance Data.ToJSON DashboardOptions where
+  toJSON DashboardOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EngagementMetrics" Data..=)
+              Prelude.<$> engagementMetrics
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/DataFormat.hs b/gen/Amazonka/SESV2/Types/DataFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DataFormat.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.SESV2.Types.DataFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DataFormat
+  ( DataFormat
+      ( ..,
+        DataFormat_CSV,
+        DataFormat_JSON
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The data format of the import job\'s data source.
+newtype DataFormat = DataFormat'
+  { fromDataFormat ::
+      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 DataFormat_CSV :: DataFormat
+pattern DataFormat_CSV = DataFormat' "CSV"
+
+pattern DataFormat_JSON :: DataFormat
+pattern DataFormat_JSON = DataFormat' "JSON"
+
+{-# COMPLETE
+  DataFormat_CSV,
+  DataFormat_JSON,
+  DataFormat'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/DedicatedIp.hs b/gen/Amazonka/SESV2/Types/DedicatedIp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DedicatedIp.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.SESV2.Types.DedicatedIp
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DedicatedIp 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
+import Amazonka.SESV2.Types.WarmupStatus
+
+-- | Contains information about a dedicated IP address that is associated
+-- with your Amazon SES account.
+--
+-- To learn more about requesting dedicated IP addresses, see
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/dedicated-ip-case.html Requesting and Relinquishing Dedicated IP Addresses>
+-- in the /Amazon SES Developer Guide/.
+--
+-- /See:/ 'newDedicatedIp' smart constructor.
+data DedicatedIp = DedicatedIp'
+  { -- | The name of the dedicated IP pool that the IP address is associated
+    -- with.
+    poolName :: Prelude.Maybe Prelude.Text,
+    -- | An IPv4 address.
+    ip :: Prelude.Text,
+    -- | The warm-up status of a dedicated IP address. The status can have one of
+    -- the following values:
+    --
+    -- -   @IN_PROGRESS@ – The IP address isn\'t ready to use because the
+    --     dedicated IP warm-up process is ongoing.
+    --
+    -- -   @DONE@ – The dedicated IP warm-up process is complete, and the IP
+    --     address is ready to use.
+    warmupStatus :: WarmupStatus,
+    -- | Indicates how complete the dedicated IP warm-up process is. When this
+    -- value equals 1, the address has completed the warm-up process and is
+    -- ready for use.
+    warmupPercentage :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DedicatedIp' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'poolName', 'dedicatedIp_poolName' - The name of the dedicated IP pool that the IP address is associated
+-- with.
+--
+-- 'ip', 'dedicatedIp_ip' - An IPv4 address.
+--
+-- 'warmupStatus', 'dedicatedIp_warmupStatus' - The warm-up status of a dedicated IP address. The status can have one of
+-- the following values:
+--
+-- -   @IN_PROGRESS@ – The IP address isn\'t ready to use because the
+--     dedicated IP warm-up process is ongoing.
+--
+-- -   @DONE@ – The dedicated IP warm-up process is complete, and the IP
+--     address is ready to use.
+--
+-- 'warmupPercentage', 'dedicatedIp_warmupPercentage' - Indicates how complete the dedicated IP warm-up process is. When this
+-- value equals 1, the address has completed the warm-up process and is
+-- ready for use.
+newDedicatedIp ::
+  -- | 'ip'
+  Prelude.Text ->
+  -- | 'warmupStatus'
+  WarmupStatus ->
+  -- | 'warmupPercentage'
+  Prelude.Int ->
+  DedicatedIp
+newDedicatedIp pIp_ pWarmupStatus_ pWarmupPercentage_ =
+  DedicatedIp'
+    { poolName = Prelude.Nothing,
+      ip = pIp_,
+      warmupStatus = pWarmupStatus_,
+      warmupPercentage = pWarmupPercentage_
+    }
+
+-- | The name of the dedicated IP pool that the IP address is associated
+-- with.
+dedicatedIp_poolName :: Lens.Lens' DedicatedIp (Prelude.Maybe Prelude.Text)
+dedicatedIp_poolName = Lens.lens (\DedicatedIp' {poolName} -> poolName) (\s@DedicatedIp' {} a -> s {poolName = a} :: DedicatedIp)
+
+-- | An IPv4 address.
+dedicatedIp_ip :: Lens.Lens' DedicatedIp Prelude.Text
+dedicatedIp_ip = Lens.lens (\DedicatedIp' {ip} -> ip) (\s@DedicatedIp' {} a -> s {ip = a} :: DedicatedIp)
+
+-- | The warm-up status of a dedicated IP address. The status can have one of
+-- the following values:
+--
+-- -   @IN_PROGRESS@ – The IP address isn\'t ready to use because the
+--     dedicated IP warm-up process is ongoing.
+--
+-- -   @DONE@ – The dedicated IP warm-up process is complete, and the IP
+--     address is ready to use.
+dedicatedIp_warmupStatus :: Lens.Lens' DedicatedIp WarmupStatus
+dedicatedIp_warmupStatus = Lens.lens (\DedicatedIp' {warmupStatus} -> warmupStatus) (\s@DedicatedIp' {} a -> s {warmupStatus = a} :: DedicatedIp)
+
+-- | Indicates how complete the dedicated IP warm-up process is. When this
+-- value equals 1, the address has completed the warm-up process and is
+-- ready for use.
+dedicatedIp_warmupPercentage :: Lens.Lens' DedicatedIp Prelude.Int
+dedicatedIp_warmupPercentage = Lens.lens (\DedicatedIp' {warmupPercentage} -> warmupPercentage) (\s@DedicatedIp' {} a -> s {warmupPercentage = a} :: DedicatedIp)
+
+instance Data.FromJSON DedicatedIp where
+  parseJSON =
+    Data.withObject
+      "DedicatedIp"
+      ( \x ->
+          DedicatedIp'
+            Prelude.<$> (x Data..:? "PoolName")
+            Prelude.<*> (x Data..: "Ip")
+            Prelude.<*> (x Data..: "WarmupStatus")
+            Prelude.<*> (x Data..: "WarmupPercentage")
+      )
+
+instance Prelude.Hashable DedicatedIp where
+  hashWithSalt _salt DedicatedIp' {..} =
+    _salt
+      `Prelude.hashWithSalt` poolName
+      `Prelude.hashWithSalt` ip
+      `Prelude.hashWithSalt` warmupStatus
+      `Prelude.hashWithSalt` warmupPercentage
+
+instance Prelude.NFData DedicatedIp where
+  rnf DedicatedIp' {..} =
+    Prelude.rnf poolName
+      `Prelude.seq` Prelude.rnf ip
+      `Prelude.seq` Prelude.rnf warmupStatus
+      `Prelude.seq` Prelude.rnf warmupPercentage
diff --git a/gen/Amazonka/SESV2/Types/DedicatedIpPool.hs b/gen/Amazonka/SESV2/Types/DedicatedIpPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DedicatedIpPool.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.DedicatedIpPool
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DedicatedIpPool 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
+import Amazonka.SESV2.Types.ScalingMode
+
+-- | Contains information about a dedicated IP pool.
+--
+-- /See:/ 'newDedicatedIpPool' smart constructor.
+data DedicatedIpPool = DedicatedIpPool'
+  { -- | The name of the dedicated IP pool.
+    poolName :: Prelude.Text,
+    -- | The type of the dedicated IP pool.
+    --
+    -- -   @STANDARD@ – A dedicated IP pool where the customer can control
+    --     which IPs are part of the pool.
+    --
+    -- -   @MANAGED@ – A dedicated IP pool where the reputation and number of
+    --     IPs is automatically managed by Amazon SES.
+    scalingMode :: ScalingMode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DedicatedIpPool' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'poolName', 'dedicatedIpPool_poolName' - The name of the dedicated IP pool.
+--
+-- 'scalingMode', 'dedicatedIpPool_scalingMode' - The type of the dedicated IP pool.
+--
+-- -   @STANDARD@ – A dedicated IP pool where the customer can control
+--     which IPs are part of the pool.
+--
+-- -   @MANAGED@ – A dedicated IP pool where the reputation and number of
+--     IPs is automatically managed by Amazon SES.
+newDedicatedIpPool ::
+  -- | 'poolName'
+  Prelude.Text ->
+  -- | 'scalingMode'
+  ScalingMode ->
+  DedicatedIpPool
+newDedicatedIpPool pPoolName_ pScalingMode_ =
+  DedicatedIpPool'
+    { poolName = pPoolName_,
+      scalingMode = pScalingMode_
+    }
+
+-- | The name of the dedicated IP pool.
+dedicatedIpPool_poolName :: Lens.Lens' DedicatedIpPool Prelude.Text
+dedicatedIpPool_poolName = Lens.lens (\DedicatedIpPool' {poolName} -> poolName) (\s@DedicatedIpPool' {} a -> s {poolName = a} :: DedicatedIpPool)
+
+-- | The type of the dedicated IP pool.
+--
+-- -   @STANDARD@ – A dedicated IP pool where the customer can control
+--     which IPs are part of the pool.
+--
+-- -   @MANAGED@ – A dedicated IP pool where the reputation and number of
+--     IPs is automatically managed by Amazon SES.
+dedicatedIpPool_scalingMode :: Lens.Lens' DedicatedIpPool ScalingMode
+dedicatedIpPool_scalingMode = Lens.lens (\DedicatedIpPool' {scalingMode} -> scalingMode) (\s@DedicatedIpPool' {} a -> s {scalingMode = a} :: DedicatedIpPool)
+
+instance Data.FromJSON DedicatedIpPool where
+  parseJSON =
+    Data.withObject
+      "DedicatedIpPool"
+      ( \x ->
+          DedicatedIpPool'
+            Prelude.<$> (x Data..: "PoolName")
+            Prelude.<*> (x Data..: "ScalingMode")
+      )
+
+instance Prelude.Hashable DedicatedIpPool where
+  hashWithSalt _salt DedicatedIpPool' {..} =
+    _salt
+      `Prelude.hashWithSalt` poolName
+      `Prelude.hashWithSalt` scalingMode
+
+instance Prelude.NFData DedicatedIpPool where
+  rnf DedicatedIpPool' {..} =
+    Prelude.rnf poolName
+      `Prelude.seq` Prelude.rnf scalingMode
diff --git a/gen/Amazonka/SESV2/Types/DeliverabilityDashboardAccountStatus.hs b/gen/Amazonka/SESV2/Types/DeliverabilityDashboardAccountStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DeliverabilityDashboardAccountStatus.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.SESV2.Types.DeliverabilityDashboardAccountStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DeliverabilityDashboardAccountStatus
+  ( DeliverabilityDashboardAccountStatus
+      ( ..,
+        DeliverabilityDashboardAccountStatus_ACTIVE,
+        DeliverabilityDashboardAccountStatus_DISABLED,
+        DeliverabilityDashboardAccountStatus_PENDING_EXPIRATION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The current status of your Deliverability dashboard subscription. If
+-- this value is @PENDING_EXPIRATION@, your subscription is scheduled to
+-- expire at the end of the current calendar month.
+newtype DeliverabilityDashboardAccountStatus = DeliverabilityDashboardAccountStatus'
+  { fromDeliverabilityDashboardAccountStatus ::
+      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 DeliverabilityDashboardAccountStatus_ACTIVE :: DeliverabilityDashboardAccountStatus
+pattern DeliverabilityDashboardAccountStatus_ACTIVE = DeliverabilityDashboardAccountStatus' "ACTIVE"
+
+pattern DeliverabilityDashboardAccountStatus_DISABLED :: DeliverabilityDashboardAccountStatus
+pattern DeliverabilityDashboardAccountStatus_DISABLED = DeliverabilityDashboardAccountStatus' "DISABLED"
+
+pattern DeliverabilityDashboardAccountStatus_PENDING_EXPIRATION :: DeliverabilityDashboardAccountStatus
+pattern DeliverabilityDashboardAccountStatus_PENDING_EXPIRATION = DeliverabilityDashboardAccountStatus' "PENDING_EXPIRATION"
+
+{-# COMPLETE
+  DeliverabilityDashboardAccountStatus_ACTIVE,
+  DeliverabilityDashboardAccountStatus_DISABLED,
+  DeliverabilityDashboardAccountStatus_PENDING_EXPIRATION,
+  DeliverabilityDashboardAccountStatus'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/DeliverabilityTestReport.hs b/gen/Amazonka/SESV2/Types/DeliverabilityTestReport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DeliverabilityTestReport.hs
@@ -0,0 +1,156 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.DeliverabilityTestReport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DeliverabilityTestReport 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
+import Amazonka.SESV2.Types.DeliverabilityTestStatus
+
+-- | An object that contains metadata related to a predictive inbox placement
+-- test.
+--
+-- /See:/ 'newDeliverabilityTestReport' smart constructor.
+data DeliverabilityTestReport = DeliverabilityTestReport'
+  { -- | The date and time when the predictive inbox placement test was created.
+    createDate :: Prelude.Maybe Data.POSIX,
+    -- | The status of the predictive inbox placement test. If the status is
+    -- @IN_PROGRESS@, then the predictive inbox placement test is currently
+    -- running. Predictive inbox placement tests are usually complete within 24
+    -- hours of creating the test. If the status is @COMPLETE@, then the test
+    -- is finished, and you can use the @GetDeliverabilityTestReport@ to view
+    -- the results of the test.
+    deliverabilityTestStatus :: Prelude.Maybe DeliverabilityTestStatus,
+    -- | The sender address that you specified for the predictive inbox placement
+    -- test.
+    fromEmailAddress :: Prelude.Maybe Prelude.Text,
+    -- | A unique string that identifies the predictive inbox placement test.
+    reportId :: Prelude.Maybe Prelude.Text,
+    -- | A name that helps you identify a predictive inbox placement test report.
+    reportName :: Prelude.Maybe Prelude.Text,
+    -- | The subject line for an email that you submitted in a predictive inbox
+    -- placement test.
+    subject :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeliverabilityTestReport' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createDate', 'deliverabilityTestReport_createDate' - The date and time when the predictive inbox placement test was created.
+--
+-- 'deliverabilityTestStatus', 'deliverabilityTestReport_deliverabilityTestStatus' - The status of the predictive inbox placement test. If the status is
+-- @IN_PROGRESS@, then the predictive inbox placement test is currently
+-- running. Predictive inbox placement tests are usually complete within 24
+-- hours of creating the test. If the status is @COMPLETE@, then the test
+-- is finished, and you can use the @GetDeliverabilityTestReport@ to view
+-- the results of the test.
+--
+-- 'fromEmailAddress', 'deliverabilityTestReport_fromEmailAddress' - The sender address that you specified for the predictive inbox placement
+-- test.
+--
+-- 'reportId', 'deliverabilityTestReport_reportId' - A unique string that identifies the predictive inbox placement test.
+--
+-- 'reportName', 'deliverabilityTestReport_reportName' - A name that helps you identify a predictive inbox placement test report.
+--
+-- 'subject', 'deliverabilityTestReport_subject' - The subject line for an email that you submitted in a predictive inbox
+-- placement test.
+newDeliverabilityTestReport ::
+  DeliverabilityTestReport
+newDeliverabilityTestReport =
+  DeliverabilityTestReport'
+    { createDate =
+        Prelude.Nothing,
+      deliverabilityTestStatus = Prelude.Nothing,
+      fromEmailAddress = Prelude.Nothing,
+      reportId = Prelude.Nothing,
+      reportName = Prelude.Nothing,
+      subject = Prelude.Nothing
+    }
+
+-- | The date and time when the predictive inbox placement test was created.
+deliverabilityTestReport_createDate :: Lens.Lens' DeliverabilityTestReport (Prelude.Maybe Prelude.UTCTime)
+deliverabilityTestReport_createDate = Lens.lens (\DeliverabilityTestReport' {createDate} -> createDate) (\s@DeliverabilityTestReport' {} a -> s {createDate = a} :: DeliverabilityTestReport) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the predictive inbox placement test. If the status is
+-- @IN_PROGRESS@, then the predictive inbox placement test is currently
+-- running. Predictive inbox placement tests are usually complete within 24
+-- hours of creating the test. If the status is @COMPLETE@, then the test
+-- is finished, and you can use the @GetDeliverabilityTestReport@ to view
+-- the results of the test.
+deliverabilityTestReport_deliverabilityTestStatus :: Lens.Lens' DeliverabilityTestReport (Prelude.Maybe DeliverabilityTestStatus)
+deliverabilityTestReport_deliverabilityTestStatus = Lens.lens (\DeliverabilityTestReport' {deliverabilityTestStatus} -> deliverabilityTestStatus) (\s@DeliverabilityTestReport' {} a -> s {deliverabilityTestStatus = a} :: DeliverabilityTestReport)
+
+-- | The sender address that you specified for the predictive inbox placement
+-- test.
+deliverabilityTestReport_fromEmailAddress :: Lens.Lens' DeliverabilityTestReport (Prelude.Maybe Prelude.Text)
+deliverabilityTestReport_fromEmailAddress = Lens.lens (\DeliverabilityTestReport' {fromEmailAddress} -> fromEmailAddress) (\s@DeliverabilityTestReport' {} a -> s {fromEmailAddress = a} :: DeliverabilityTestReport)
+
+-- | A unique string that identifies the predictive inbox placement test.
+deliverabilityTestReport_reportId :: Lens.Lens' DeliverabilityTestReport (Prelude.Maybe Prelude.Text)
+deliverabilityTestReport_reportId = Lens.lens (\DeliverabilityTestReport' {reportId} -> reportId) (\s@DeliverabilityTestReport' {} a -> s {reportId = a} :: DeliverabilityTestReport)
+
+-- | A name that helps you identify a predictive inbox placement test report.
+deliverabilityTestReport_reportName :: Lens.Lens' DeliverabilityTestReport (Prelude.Maybe Prelude.Text)
+deliverabilityTestReport_reportName = Lens.lens (\DeliverabilityTestReport' {reportName} -> reportName) (\s@DeliverabilityTestReport' {} a -> s {reportName = a} :: DeliverabilityTestReport)
+
+-- | The subject line for an email that you submitted in a predictive inbox
+-- placement test.
+deliverabilityTestReport_subject :: Lens.Lens' DeliverabilityTestReport (Prelude.Maybe Prelude.Text)
+deliverabilityTestReport_subject = Lens.lens (\DeliverabilityTestReport' {subject} -> subject) (\s@DeliverabilityTestReport' {} a -> s {subject = a} :: DeliverabilityTestReport)
+
+instance Data.FromJSON DeliverabilityTestReport where
+  parseJSON =
+    Data.withObject
+      "DeliverabilityTestReport"
+      ( \x ->
+          DeliverabilityTestReport'
+            Prelude.<$> (x Data..:? "CreateDate")
+            Prelude.<*> (x Data..:? "DeliverabilityTestStatus")
+            Prelude.<*> (x Data..:? "FromEmailAddress")
+            Prelude.<*> (x Data..:? "ReportId")
+            Prelude.<*> (x Data..:? "ReportName")
+            Prelude.<*> (x Data..:? "Subject")
+      )
+
+instance Prelude.Hashable DeliverabilityTestReport where
+  hashWithSalt _salt DeliverabilityTestReport' {..} =
+    _salt
+      `Prelude.hashWithSalt` createDate
+      `Prelude.hashWithSalt` deliverabilityTestStatus
+      `Prelude.hashWithSalt` fromEmailAddress
+      `Prelude.hashWithSalt` reportId
+      `Prelude.hashWithSalt` reportName
+      `Prelude.hashWithSalt` subject
+
+instance Prelude.NFData DeliverabilityTestReport where
+  rnf DeliverabilityTestReport' {..} =
+    Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf deliverabilityTestStatus
+      `Prelude.seq` Prelude.rnf fromEmailAddress
+      `Prelude.seq` Prelude.rnf reportId
+      `Prelude.seq` Prelude.rnf reportName
+      `Prelude.seq` Prelude.rnf subject
diff --git a/gen/Amazonka/SESV2/Types/DeliverabilityTestStatus.hs b/gen/Amazonka/SESV2/Types/DeliverabilityTestStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DeliverabilityTestStatus.hs
@@ -0,0 +1,77 @@
+{-# 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.SESV2.Types.DeliverabilityTestStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DeliverabilityTestStatus
+  ( DeliverabilityTestStatus
+      ( ..,
+        DeliverabilityTestStatus_COMPLETED,
+        DeliverabilityTestStatus_IN_PROGRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status of a predictive inbox placement test. If the status is
+-- @IN_PROGRESS@, then the predictive inbox placement test is currently
+-- running. Predictive inbox placement tests are usually complete within 24
+-- hours of creating the test. If the status is @COMPLETE@, then the test
+-- is finished, and you can use the @GetDeliverabilityTestReport@ operation
+-- to view the results of the test.
+newtype DeliverabilityTestStatus = DeliverabilityTestStatus'
+  { fromDeliverabilityTestStatus ::
+      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 DeliverabilityTestStatus_COMPLETED :: DeliverabilityTestStatus
+pattern DeliverabilityTestStatus_COMPLETED = DeliverabilityTestStatus' "COMPLETED"
+
+pattern DeliverabilityTestStatus_IN_PROGRESS :: DeliverabilityTestStatus
+pattern DeliverabilityTestStatus_IN_PROGRESS = DeliverabilityTestStatus' "IN_PROGRESS"
+
+{-# COMPLETE
+  DeliverabilityTestStatus_COMPLETED,
+  DeliverabilityTestStatus_IN_PROGRESS,
+  DeliverabilityTestStatus'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/DeliveryOptions.hs b/gen/Amazonka/SESV2/Types/DeliveryOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DeliveryOptions.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.SESV2.Types.DeliveryOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DeliveryOptions 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
+import Amazonka.SESV2.Types.TlsPolicy
+
+-- | Used to associate a configuration set with a dedicated IP pool.
+--
+-- /See:/ 'newDeliveryOptions' smart constructor.
+data DeliveryOptions = DeliveryOptions'
+  { -- | The name of the dedicated IP pool to associate with the configuration
+    -- set.
+    sendingPoolName :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether messages that use the configuration set are required
+    -- to use Transport Layer Security (TLS). If the value is @Require@,
+    -- messages are only delivered if a TLS connection can be established. If
+    -- the value is @Optional@, messages can be delivered in plain text if a
+    -- TLS connection can\'t be established.
+    tlsPolicy :: Prelude.Maybe TlsPolicy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeliveryOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sendingPoolName', 'deliveryOptions_sendingPoolName' - The name of the dedicated IP pool to associate with the configuration
+-- set.
+--
+-- 'tlsPolicy', 'deliveryOptions_tlsPolicy' - Specifies whether messages that use the configuration set are required
+-- to use Transport Layer Security (TLS). If the value is @Require@,
+-- messages are only delivered if a TLS connection can be established. If
+-- the value is @Optional@, messages can be delivered in plain text if a
+-- TLS connection can\'t be established.
+newDeliveryOptions ::
+  DeliveryOptions
+newDeliveryOptions =
+  DeliveryOptions'
+    { sendingPoolName = Prelude.Nothing,
+      tlsPolicy = Prelude.Nothing
+    }
+
+-- | The name of the dedicated IP pool to associate with the configuration
+-- set.
+deliveryOptions_sendingPoolName :: Lens.Lens' DeliveryOptions (Prelude.Maybe Prelude.Text)
+deliveryOptions_sendingPoolName = Lens.lens (\DeliveryOptions' {sendingPoolName} -> sendingPoolName) (\s@DeliveryOptions' {} a -> s {sendingPoolName = a} :: DeliveryOptions)
+
+-- | Specifies whether messages that use the configuration set are required
+-- to use Transport Layer Security (TLS). If the value is @Require@,
+-- messages are only delivered if a TLS connection can be established. If
+-- the value is @Optional@, messages can be delivered in plain text if a
+-- TLS connection can\'t be established.
+deliveryOptions_tlsPolicy :: Lens.Lens' DeliveryOptions (Prelude.Maybe TlsPolicy)
+deliveryOptions_tlsPolicy = Lens.lens (\DeliveryOptions' {tlsPolicy} -> tlsPolicy) (\s@DeliveryOptions' {} a -> s {tlsPolicy = a} :: DeliveryOptions)
+
+instance Data.FromJSON DeliveryOptions where
+  parseJSON =
+    Data.withObject
+      "DeliveryOptions"
+      ( \x ->
+          DeliveryOptions'
+            Prelude.<$> (x Data..:? "SendingPoolName")
+            Prelude.<*> (x Data..:? "TlsPolicy")
+      )
+
+instance Prelude.Hashable DeliveryOptions where
+  hashWithSalt _salt DeliveryOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` sendingPoolName
+      `Prelude.hashWithSalt` tlsPolicy
+
+instance Prelude.NFData DeliveryOptions where
+  rnf DeliveryOptions' {..} =
+    Prelude.rnf sendingPoolName
+      `Prelude.seq` Prelude.rnf tlsPolicy
+
+instance Data.ToJSON DeliveryOptions where
+  toJSON DeliveryOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SendingPoolName" Data..=)
+              Prelude.<$> sendingPoolName,
+            ("TlsPolicy" Data..=) Prelude.<$> tlsPolicy
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/Destination.hs b/gen/Amazonka/SESV2/Types/Destination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/Destination.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.Destination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.Destination where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that describes the recipients for an email.
+--
+-- Amazon SES does not support the SMTPUTF8 extension, as described in
+-- <https://tools.ietf.org/html/rfc6531 RFC6531>. For this reason, the
+-- /local part/ of a destination email address (the part of the email
+-- address that precedes the \@ sign) may only contain
+-- <https://en.wikipedia.org/wiki/Email_address#Local-part 7-bit ASCII characters>.
+-- If the /domain part/ of an address (the part after the \@ sign) contains
+-- non-ASCII characters, they must be encoded using Punycode, as described
+-- in <https://tools.ietf.org/html/rfc3492.html RFC3492>.
+--
+-- /See:/ 'newDestination' smart constructor.
+data Destination = Destination'
+  { -- | An array that contains the email addresses of the \"BCC\" (blind carbon
+    -- copy) recipients for the email.
+    bccAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | An array that contains the email addresses of the \"CC\" (carbon copy)
+    -- recipients for the email.
+    ccAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | An array that contains the email addresses of the \"To\" recipients for
+    -- the email.
+    toAddresses :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Destination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bccAddresses', 'destination_bccAddresses' - An array that contains the email addresses of the \"BCC\" (blind carbon
+-- copy) recipients for the email.
+--
+-- 'ccAddresses', 'destination_ccAddresses' - An array that contains the email addresses of the \"CC\" (carbon copy)
+-- recipients for the email.
+--
+-- 'toAddresses', 'destination_toAddresses' - An array that contains the email addresses of the \"To\" recipients for
+-- the email.
+newDestination ::
+  Destination
+newDestination =
+  Destination'
+    { bccAddresses = Prelude.Nothing,
+      ccAddresses = Prelude.Nothing,
+      toAddresses = Prelude.Nothing
+    }
+
+-- | An array that contains the email addresses of the \"BCC\" (blind carbon
+-- copy) recipients for the email.
+destination_bccAddresses :: Lens.Lens' Destination (Prelude.Maybe [Prelude.Text])
+destination_bccAddresses = Lens.lens (\Destination' {bccAddresses} -> bccAddresses) (\s@Destination' {} a -> s {bccAddresses = a} :: Destination) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array that contains the email addresses of the \"CC\" (carbon copy)
+-- recipients for the email.
+destination_ccAddresses :: Lens.Lens' Destination (Prelude.Maybe [Prelude.Text])
+destination_ccAddresses = Lens.lens (\Destination' {ccAddresses} -> ccAddresses) (\s@Destination' {} a -> s {ccAddresses = a} :: Destination) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array that contains the email addresses of the \"To\" recipients for
+-- the email.
+destination_toAddresses :: Lens.Lens' Destination (Prelude.Maybe [Prelude.Text])
+destination_toAddresses = Lens.lens (\Destination' {toAddresses} -> toAddresses) (\s@Destination' {} a -> s {toAddresses = a} :: Destination) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable Destination where
+  hashWithSalt _salt Destination' {..} =
+    _salt
+      `Prelude.hashWithSalt` bccAddresses
+      `Prelude.hashWithSalt` ccAddresses
+      `Prelude.hashWithSalt` toAddresses
+
+instance Prelude.NFData Destination where
+  rnf Destination' {..} =
+    Prelude.rnf bccAddresses
+      `Prelude.seq` Prelude.rnf ccAddresses
+      `Prelude.seq` Prelude.rnf toAddresses
+
+instance Data.ToJSON Destination where
+  toJSON Destination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BccAddresses" Data..=) Prelude.<$> bccAddresses,
+            ("CcAddresses" Data..=) Prelude.<$> ccAddresses,
+            ("ToAddresses" Data..=) Prelude.<$> toAddresses
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/DimensionValueSource.hs b/gen/Amazonka/SESV2/Types/DimensionValueSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DimensionValueSource.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.SESV2.Types.DimensionValueSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DimensionValueSource
+  ( DimensionValueSource
+      ( ..,
+        DimensionValueSource_EMAIL_HEADER,
+        DimensionValueSource_LINK_TAG,
+        DimensionValueSource_MESSAGE_TAG
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The location where the Amazon SES API v2 finds the value of a dimension
+-- to publish to Amazon CloudWatch. To use the message tags that you
+-- specify using an @X-SES-MESSAGE-TAGS@ header or a parameter to the
+-- @SendEmail@ or @SendRawEmail@ API, choose @messageTag@. To use your own
+-- email headers, choose @emailHeader@. To use link tags, choose
+-- @linkTags@.
+newtype DimensionValueSource = DimensionValueSource'
+  { fromDimensionValueSource ::
+      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 DimensionValueSource_EMAIL_HEADER :: DimensionValueSource
+pattern DimensionValueSource_EMAIL_HEADER = DimensionValueSource' "EMAIL_HEADER"
+
+pattern DimensionValueSource_LINK_TAG :: DimensionValueSource
+pattern DimensionValueSource_LINK_TAG = DimensionValueSource' "LINK_TAG"
+
+pattern DimensionValueSource_MESSAGE_TAG :: DimensionValueSource
+pattern DimensionValueSource_MESSAGE_TAG = DimensionValueSource' "MESSAGE_TAG"
+
+{-# COMPLETE
+  DimensionValueSource_EMAIL_HEADER,
+  DimensionValueSource_LINK_TAG,
+  DimensionValueSource_MESSAGE_TAG,
+  DimensionValueSource'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/DkimAttributes.hs b/gen/Amazonka/SESV2/Types/DkimAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DkimAttributes.hs
@@ -0,0 +1,288 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.DkimAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DkimAttributes 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
+import Amazonka.SESV2.Types.DkimSigningAttributesOrigin
+import Amazonka.SESV2.Types.DkimSigningKeyLength
+import Amazonka.SESV2.Types.DkimStatus
+
+-- | An object that contains information about the DKIM authentication status
+-- for an email identity.
+--
+-- Amazon SES determines the authentication status by searching for
+-- specific records in the DNS configuration for the domain. If you used
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>
+-- to set up DKIM authentication, Amazon SES tries to find three unique
+-- CNAME records in the DNS configuration for your domain. If you provided
+-- a public key to perform DKIM authentication, Amazon SES tries to find a
+-- TXT record that uses the selector that you specified. The value of the
+-- TXT record must be a public key that\'s paired with the private key that
+-- you specified in the process of creating the identity
+--
+-- /See:/ 'newDkimAttributes' smart constructor.
+data DkimAttributes = DkimAttributes'
+  { -- | [Easy DKIM] The key length of the DKIM key pair in use.
+    currentSigningKeyLength :: Prelude.Maybe DkimSigningKeyLength,
+    -- | [Easy DKIM] The last time a key pair was generated for this identity.
+    lastKeyGenerationTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | [Easy DKIM] The key length of the future DKIM key pair to be generated.
+    -- This can be changed at most once per day.
+    nextSigningKeyLength :: Prelude.Maybe DkimSigningKeyLength,
+    -- | A string that indicates how DKIM was configured for the identity. These
+    -- are the possible values:
+    --
+    -- -   @AWS_SES@ – Indicates that DKIM was configured for the identity by
+    --     using
+    --     <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>.
+    --
+    -- -   @EXTERNAL@ – Indicates that DKIM was configured for the identity by
+    --     using Bring Your Own DKIM (BYODKIM).
+    signingAttributesOrigin :: Prelude.Maybe DkimSigningAttributesOrigin,
+    -- | If the value is @true@, then the messages that you send from the
+    -- identity are signed using DKIM. If the value is @false@, then the
+    -- messages that you send from the identity aren\'t DKIM-signed.
+    signingEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | Describes whether or not Amazon SES has successfully located the DKIM
+    -- records in the DNS records for the domain. The status can be one of the
+    -- following:
+    --
+    -- -   @PENDING@ – The verification process was initiated, but Amazon SES
+    --     hasn\'t yet detected the DKIM records in the DNS configuration for
+    --     the domain.
+    --
+    -- -   @SUCCESS@ – The verification process completed successfully.
+    --
+    -- -   @FAILED@ – The verification process failed. This typically occurs
+    --     when Amazon SES fails to find the DKIM records in the DNS
+    --     configuration of the domain.
+    --
+    -- -   @TEMPORARY_FAILURE@ – A temporary issue is preventing Amazon SES
+    --     from determining the DKIM authentication status of the domain.
+    --
+    -- -   @NOT_STARTED@ – The DKIM verification process hasn\'t been initiated
+    --     for the domain.
+    status :: Prelude.Maybe DkimStatus,
+    -- | If you used
+    -- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>
+    -- to configure DKIM authentication for the domain, then this object
+    -- contains a set of unique strings that you use to create a set of CNAME
+    -- records that you add to the DNS configuration for your domain. When
+    -- Amazon SES detects these records in the DNS configuration for your
+    -- domain, the DKIM authentication process is complete.
+    --
+    -- If you configured DKIM authentication for the domain by providing your
+    -- own public-private key pair, then this object contains the selector for
+    -- the public key.
+    --
+    -- Regardless of the DKIM authentication method you use, Amazon SES
+    -- searches for the appropriate records in the DNS configuration of the
+    -- domain for up to 72 hours.
+    tokens :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DkimAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'currentSigningKeyLength', 'dkimAttributes_currentSigningKeyLength' - [Easy DKIM] The key length of the DKIM key pair in use.
+--
+-- 'lastKeyGenerationTimestamp', 'dkimAttributes_lastKeyGenerationTimestamp' - [Easy DKIM] The last time a key pair was generated for this identity.
+--
+-- 'nextSigningKeyLength', 'dkimAttributes_nextSigningKeyLength' - [Easy DKIM] The key length of the future DKIM key pair to be generated.
+-- This can be changed at most once per day.
+--
+-- 'signingAttributesOrigin', 'dkimAttributes_signingAttributesOrigin' - A string that indicates how DKIM was configured for the identity. These
+-- are the possible values:
+--
+-- -   @AWS_SES@ – Indicates that DKIM was configured for the identity by
+--     using
+--     <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>.
+--
+-- -   @EXTERNAL@ – Indicates that DKIM was configured for the identity by
+--     using Bring Your Own DKIM (BYODKIM).
+--
+-- 'signingEnabled', 'dkimAttributes_signingEnabled' - If the value is @true@, then the messages that you send from the
+-- identity are signed using DKIM. If the value is @false@, then the
+-- messages that you send from the identity aren\'t DKIM-signed.
+--
+-- 'status', 'dkimAttributes_status' - Describes whether or not Amazon SES has successfully located the DKIM
+-- records in the DNS records for the domain. The status can be one of the
+-- following:
+--
+-- -   @PENDING@ – The verification process was initiated, but Amazon SES
+--     hasn\'t yet detected the DKIM records in the DNS configuration for
+--     the domain.
+--
+-- -   @SUCCESS@ – The verification process completed successfully.
+--
+-- -   @FAILED@ – The verification process failed. This typically occurs
+--     when Amazon SES fails to find the DKIM records in the DNS
+--     configuration of the domain.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue is preventing Amazon SES
+--     from determining the DKIM authentication status of the domain.
+--
+-- -   @NOT_STARTED@ – The DKIM verification process hasn\'t been initiated
+--     for the domain.
+--
+-- 'tokens', 'dkimAttributes_tokens' - If you used
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>
+-- to configure DKIM authentication for the domain, then this object
+-- contains a set of unique strings that you use to create a set of CNAME
+-- records that you add to the DNS configuration for your domain. When
+-- Amazon SES detects these records in the DNS configuration for your
+-- domain, the DKIM authentication process is complete.
+--
+-- If you configured DKIM authentication for the domain by providing your
+-- own public-private key pair, then this object contains the selector for
+-- the public key.
+--
+-- Regardless of the DKIM authentication method you use, Amazon SES
+-- searches for the appropriate records in the DNS configuration of the
+-- domain for up to 72 hours.
+newDkimAttributes ::
+  DkimAttributes
+newDkimAttributes =
+  DkimAttributes'
+    { currentSigningKeyLength =
+        Prelude.Nothing,
+      lastKeyGenerationTimestamp = Prelude.Nothing,
+      nextSigningKeyLength = Prelude.Nothing,
+      signingAttributesOrigin = Prelude.Nothing,
+      signingEnabled = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tokens = Prelude.Nothing
+    }
+
+-- | [Easy DKIM] The key length of the DKIM key pair in use.
+dkimAttributes_currentSigningKeyLength :: Lens.Lens' DkimAttributes (Prelude.Maybe DkimSigningKeyLength)
+dkimAttributes_currentSigningKeyLength = Lens.lens (\DkimAttributes' {currentSigningKeyLength} -> currentSigningKeyLength) (\s@DkimAttributes' {} a -> s {currentSigningKeyLength = a} :: DkimAttributes)
+
+-- | [Easy DKIM] The last time a key pair was generated for this identity.
+dkimAttributes_lastKeyGenerationTimestamp :: Lens.Lens' DkimAttributes (Prelude.Maybe Prelude.UTCTime)
+dkimAttributes_lastKeyGenerationTimestamp = Lens.lens (\DkimAttributes' {lastKeyGenerationTimestamp} -> lastKeyGenerationTimestamp) (\s@DkimAttributes' {} a -> s {lastKeyGenerationTimestamp = a} :: DkimAttributes) Prelude.. Lens.mapping Data._Time
+
+-- | [Easy DKIM] The key length of the future DKIM key pair to be generated.
+-- This can be changed at most once per day.
+dkimAttributes_nextSigningKeyLength :: Lens.Lens' DkimAttributes (Prelude.Maybe DkimSigningKeyLength)
+dkimAttributes_nextSigningKeyLength = Lens.lens (\DkimAttributes' {nextSigningKeyLength} -> nextSigningKeyLength) (\s@DkimAttributes' {} a -> s {nextSigningKeyLength = a} :: DkimAttributes)
+
+-- | A string that indicates how DKIM was configured for the identity. These
+-- are the possible values:
+--
+-- -   @AWS_SES@ – Indicates that DKIM was configured for the identity by
+--     using
+--     <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>.
+--
+-- -   @EXTERNAL@ – Indicates that DKIM was configured for the identity by
+--     using Bring Your Own DKIM (BYODKIM).
+dkimAttributes_signingAttributesOrigin :: Lens.Lens' DkimAttributes (Prelude.Maybe DkimSigningAttributesOrigin)
+dkimAttributes_signingAttributesOrigin = Lens.lens (\DkimAttributes' {signingAttributesOrigin} -> signingAttributesOrigin) (\s@DkimAttributes' {} a -> s {signingAttributesOrigin = a} :: DkimAttributes)
+
+-- | If the value is @true@, then the messages that you send from the
+-- identity are signed using DKIM. If the value is @false@, then the
+-- messages that you send from the identity aren\'t DKIM-signed.
+dkimAttributes_signingEnabled :: Lens.Lens' DkimAttributes (Prelude.Maybe Prelude.Bool)
+dkimAttributes_signingEnabled = Lens.lens (\DkimAttributes' {signingEnabled} -> signingEnabled) (\s@DkimAttributes' {} a -> s {signingEnabled = a} :: DkimAttributes)
+
+-- | Describes whether or not Amazon SES has successfully located the DKIM
+-- records in the DNS records for the domain. The status can be one of the
+-- following:
+--
+-- -   @PENDING@ – The verification process was initiated, but Amazon SES
+--     hasn\'t yet detected the DKIM records in the DNS configuration for
+--     the domain.
+--
+-- -   @SUCCESS@ – The verification process completed successfully.
+--
+-- -   @FAILED@ – The verification process failed. This typically occurs
+--     when Amazon SES fails to find the DKIM records in the DNS
+--     configuration of the domain.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue is preventing Amazon SES
+--     from determining the DKIM authentication status of the domain.
+--
+-- -   @NOT_STARTED@ – The DKIM verification process hasn\'t been initiated
+--     for the domain.
+dkimAttributes_status :: Lens.Lens' DkimAttributes (Prelude.Maybe DkimStatus)
+dkimAttributes_status = Lens.lens (\DkimAttributes' {status} -> status) (\s@DkimAttributes' {} a -> s {status = a} :: DkimAttributes)
+
+-- | If you used
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html Easy DKIM>
+-- to configure DKIM authentication for the domain, then this object
+-- contains a set of unique strings that you use to create a set of CNAME
+-- records that you add to the DNS configuration for your domain. When
+-- Amazon SES detects these records in the DNS configuration for your
+-- domain, the DKIM authentication process is complete.
+--
+-- If you configured DKIM authentication for the domain by providing your
+-- own public-private key pair, then this object contains the selector for
+-- the public key.
+--
+-- Regardless of the DKIM authentication method you use, Amazon SES
+-- searches for the appropriate records in the DNS configuration of the
+-- domain for up to 72 hours.
+dkimAttributes_tokens :: Lens.Lens' DkimAttributes (Prelude.Maybe [Prelude.Text])
+dkimAttributes_tokens = Lens.lens (\DkimAttributes' {tokens} -> tokens) (\s@DkimAttributes' {} a -> s {tokens = a} :: DkimAttributes) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON DkimAttributes where
+  parseJSON =
+    Data.withObject
+      "DkimAttributes"
+      ( \x ->
+          DkimAttributes'
+            Prelude.<$> (x Data..:? "CurrentSigningKeyLength")
+            Prelude.<*> (x Data..:? "LastKeyGenerationTimestamp")
+            Prelude.<*> (x Data..:? "NextSigningKeyLength")
+            Prelude.<*> (x Data..:? "SigningAttributesOrigin")
+            Prelude.<*> (x Data..:? "SigningEnabled")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "Tokens" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable DkimAttributes where
+  hashWithSalt _salt DkimAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` currentSigningKeyLength
+      `Prelude.hashWithSalt` lastKeyGenerationTimestamp
+      `Prelude.hashWithSalt` nextSigningKeyLength
+      `Prelude.hashWithSalt` signingAttributesOrigin
+      `Prelude.hashWithSalt` signingEnabled
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tokens
+
+instance Prelude.NFData DkimAttributes where
+  rnf DkimAttributes' {..} =
+    Prelude.rnf currentSigningKeyLength
+      `Prelude.seq` Prelude.rnf lastKeyGenerationTimestamp
+      `Prelude.seq` Prelude.rnf nextSigningKeyLength
+      `Prelude.seq` Prelude.rnf signingAttributesOrigin
+      `Prelude.seq` Prelude.rnf signingEnabled
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tokens
diff --git a/gen/Amazonka/SESV2/Types/DkimSigningAttributes.hs b/gen/Amazonka/SESV2/Types/DkimSigningAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DkimSigningAttributes.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.SESV2.Types.DkimSigningAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DkimSigningAttributes 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
+import Amazonka.SESV2.Types.DkimSigningKeyLength
+
+-- | An object that contains configuration for Bring Your Own DKIM (BYODKIM),
+-- or, for Easy DKIM
+--
+-- /See:/ 'newDkimSigningAttributes' smart constructor.
+data DkimSigningAttributes = DkimSigningAttributes'
+  { -- | [Bring Your Own DKIM] A private key that\'s used to generate a DKIM
+    -- signature.
+    --
+    -- The private key must use 1024 or 2048-bit RSA encryption, and must be
+    -- encoded using base64 encoding.
+    domainSigningPrivateKey :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | [Bring Your Own DKIM] A string that\'s used to identify a public key in
+    -- the DNS configuration for a domain.
+    domainSigningSelector :: Prelude.Maybe Prelude.Text,
+    -- | [Easy DKIM] The key length of the future DKIM key pair to be generated.
+    -- This can be changed at most once per day.
+    nextSigningKeyLength :: Prelude.Maybe DkimSigningKeyLength
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DkimSigningAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainSigningPrivateKey', 'dkimSigningAttributes_domainSigningPrivateKey' - [Bring Your Own DKIM] A private key that\'s used to generate a DKIM
+-- signature.
+--
+-- The private key must use 1024 or 2048-bit RSA encryption, and must be
+-- encoded using base64 encoding.
+--
+-- 'domainSigningSelector', 'dkimSigningAttributes_domainSigningSelector' - [Bring Your Own DKIM] A string that\'s used to identify a public key in
+-- the DNS configuration for a domain.
+--
+-- 'nextSigningKeyLength', 'dkimSigningAttributes_nextSigningKeyLength' - [Easy DKIM] The key length of the future DKIM key pair to be generated.
+-- This can be changed at most once per day.
+newDkimSigningAttributes ::
+  DkimSigningAttributes
+newDkimSigningAttributes =
+  DkimSigningAttributes'
+    { domainSigningPrivateKey =
+        Prelude.Nothing,
+      domainSigningSelector = Prelude.Nothing,
+      nextSigningKeyLength = Prelude.Nothing
+    }
+
+-- | [Bring Your Own DKIM] A private key that\'s used to generate a DKIM
+-- signature.
+--
+-- The private key must use 1024 or 2048-bit RSA encryption, and must be
+-- encoded using base64 encoding.
+dkimSigningAttributes_domainSigningPrivateKey :: Lens.Lens' DkimSigningAttributes (Prelude.Maybe Prelude.Text)
+dkimSigningAttributes_domainSigningPrivateKey = Lens.lens (\DkimSigningAttributes' {domainSigningPrivateKey} -> domainSigningPrivateKey) (\s@DkimSigningAttributes' {} a -> s {domainSigningPrivateKey = a} :: DkimSigningAttributes) Prelude.. Lens.mapping Data._Sensitive
+
+-- | [Bring Your Own DKIM] A string that\'s used to identify a public key in
+-- the DNS configuration for a domain.
+dkimSigningAttributes_domainSigningSelector :: Lens.Lens' DkimSigningAttributes (Prelude.Maybe Prelude.Text)
+dkimSigningAttributes_domainSigningSelector = Lens.lens (\DkimSigningAttributes' {domainSigningSelector} -> domainSigningSelector) (\s@DkimSigningAttributes' {} a -> s {domainSigningSelector = a} :: DkimSigningAttributes)
+
+-- | [Easy DKIM] The key length of the future DKIM key pair to be generated.
+-- This can be changed at most once per day.
+dkimSigningAttributes_nextSigningKeyLength :: Lens.Lens' DkimSigningAttributes (Prelude.Maybe DkimSigningKeyLength)
+dkimSigningAttributes_nextSigningKeyLength = Lens.lens (\DkimSigningAttributes' {nextSigningKeyLength} -> nextSigningKeyLength) (\s@DkimSigningAttributes' {} a -> s {nextSigningKeyLength = a} :: DkimSigningAttributes)
+
+instance Prelude.Hashable DkimSigningAttributes where
+  hashWithSalt _salt DkimSigningAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainSigningPrivateKey
+      `Prelude.hashWithSalt` domainSigningSelector
+      `Prelude.hashWithSalt` nextSigningKeyLength
+
+instance Prelude.NFData DkimSigningAttributes where
+  rnf DkimSigningAttributes' {..} =
+    Prelude.rnf domainSigningPrivateKey
+      `Prelude.seq` Prelude.rnf domainSigningSelector
+      `Prelude.seq` Prelude.rnf nextSigningKeyLength
+
+instance Data.ToJSON DkimSigningAttributes where
+  toJSON DkimSigningAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DomainSigningPrivateKey" Data..=)
+              Prelude.<$> domainSigningPrivateKey,
+            ("DomainSigningSelector" Data..=)
+              Prelude.<$> domainSigningSelector,
+            ("NextSigningKeyLength" Data..=)
+              Prelude.<$> nextSigningKeyLength
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/DkimSigningAttributesOrigin.hs b/gen/Amazonka/SESV2/Types/DkimSigningAttributesOrigin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DkimSigningAttributesOrigin.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.DkimSigningAttributesOrigin
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DkimSigningAttributesOrigin
+  ( DkimSigningAttributesOrigin
+      ( ..,
+        DkimSigningAttributesOrigin_AWS_SES,
+        DkimSigningAttributesOrigin_EXTERNAL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DkimSigningAttributesOrigin = DkimSigningAttributesOrigin'
+  { fromDkimSigningAttributesOrigin ::
+      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 DkimSigningAttributesOrigin_AWS_SES :: DkimSigningAttributesOrigin
+pattern DkimSigningAttributesOrigin_AWS_SES = DkimSigningAttributesOrigin' "AWS_SES"
+
+pattern DkimSigningAttributesOrigin_EXTERNAL :: DkimSigningAttributesOrigin
+pattern DkimSigningAttributesOrigin_EXTERNAL = DkimSigningAttributesOrigin' "EXTERNAL"
+
+{-# COMPLETE
+  DkimSigningAttributesOrigin_AWS_SES,
+  DkimSigningAttributesOrigin_EXTERNAL,
+  DkimSigningAttributesOrigin'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/DkimSigningKeyLength.hs b/gen/Amazonka/SESV2/Types/DkimSigningKeyLength.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DkimSigningKeyLength.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.DkimSigningKeyLength
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DkimSigningKeyLength
+  ( DkimSigningKeyLength
+      ( ..,
+        DkimSigningKeyLength_RSA_1024_BIT,
+        DkimSigningKeyLength_RSA_2048_BIT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DkimSigningKeyLength = DkimSigningKeyLength'
+  { fromDkimSigningKeyLength ::
+      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 DkimSigningKeyLength_RSA_1024_BIT :: DkimSigningKeyLength
+pattern DkimSigningKeyLength_RSA_1024_BIT = DkimSigningKeyLength' "RSA_1024_BIT"
+
+pattern DkimSigningKeyLength_RSA_2048_BIT :: DkimSigningKeyLength
+pattern DkimSigningKeyLength_RSA_2048_BIT = DkimSigningKeyLength' "RSA_2048_BIT"
+
+{-# COMPLETE
+  DkimSigningKeyLength_RSA_1024_BIT,
+  DkimSigningKeyLength_RSA_2048_BIT,
+  DkimSigningKeyLength'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/DkimStatus.hs b/gen/Amazonka/SESV2/Types/DkimStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DkimStatus.hs
@@ -0,0 +1,104 @@
+{-# 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.SESV2.Types.DkimStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DkimStatus
+  ( DkimStatus
+      ( ..,
+        DkimStatus_FAILED,
+        DkimStatus_NOT_STARTED,
+        DkimStatus_PENDING,
+        DkimStatus_SUCCESS,
+        DkimStatus_TEMPORARY_FAILURE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The DKIM authentication status of the identity. The status can be one of
+-- the following:
+--
+-- -   @PENDING@ – The verification process was initiated, but Amazon SES
+--     hasn\'t yet detected the DKIM records in the DNS configuration for
+--     the domain.
+--
+-- -   @SUCCESS@ – The verification process completed successfully.
+--
+-- -   @FAILED@ – The verification process failed. This typically occurs
+--     when Amazon SES fails to find the DKIM records in the DNS
+--     configuration of the domain.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue is preventing Amazon SES
+--     from determining the DKIM authentication status of the domain.
+--
+-- -   @NOT_STARTED@ – The DKIM verification process hasn\'t been initiated
+--     for the domain.
+newtype DkimStatus = DkimStatus'
+  { fromDkimStatus ::
+      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 DkimStatus_FAILED :: DkimStatus
+pattern DkimStatus_FAILED = DkimStatus' "FAILED"
+
+pattern DkimStatus_NOT_STARTED :: DkimStatus
+pattern DkimStatus_NOT_STARTED = DkimStatus' "NOT_STARTED"
+
+pattern DkimStatus_PENDING :: DkimStatus
+pattern DkimStatus_PENDING = DkimStatus' "PENDING"
+
+pattern DkimStatus_SUCCESS :: DkimStatus
+pattern DkimStatus_SUCCESS = DkimStatus' "SUCCESS"
+
+pattern DkimStatus_TEMPORARY_FAILURE :: DkimStatus
+pattern DkimStatus_TEMPORARY_FAILURE = DkimStatus' "TEMPORARY_FAILURE"
+
+{-# COMPLETE
+  DkimStatus_FAILED,
+  DkimStatus_NOT_STARTED,
+  DkimStatus_PENDING,
+  DkimStatus_SUCCESS,
+  DkimStatus_TEMPORARY_FAILURE,
+  DkimStatus'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/DomainDeliverabilityCampaign.hs b/gen/Amazonka/SESV2/Types/DomainDeliverabilityCampaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DomainDeliverabilityCampaign.hs
@@ -0,0 +1,280 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.DomainDeliverabilityCampaign
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DomainDeliverabilityCampaign where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that contains the deliverability data for a specific campaign.
+-- This data is available for a campaign only if the campaign sent email by
+-- using a domain that the Deliverability dashboard is enabled for
+-- (@PutDeliverabilityDashboardOption@ operation).
+--
+-- /See:/ 'newDomainDeliverabilityCampaign' smart constructor.
+data DomainDeliverabilityCampaign = DomainDeliverabilityCampaign'
+  { -- | The unique identifier for the campaign. The Deliverability dashboard
+    -- automatically generates and assigns this identifier to a campaign.
+    campaignId :: Prelude.Maybe Prelude.Text,
+    -- | The percentage of email messages that were deleted by recipients,
+    -- without being opened first. Due to technical limitations, this value
+    -- only includes recipients who opened the message by using an email client
+    -- that supports images.
+    deleteRate :: Prelude.Maybe Prelude.Double,
+    -- | The major email providers who handled the email message.
+    esps :: Prelude.Maybe [Prelude.Text],
+    -- | The first time when the email message was delivered to any recipient\'s
+    -- inbox. This value can help you determine how long it took for a campaign
+    -- to deliver an email message.
+    firstSeenDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The verified email address that the email message was sent from.
+    fromAddress :: Prelude.Maybe Prelude.Text,
+    -- | The URL of an image that contains a snapshot of the email message that
+    -- was sent.
+    imageUrl :: Prelude.Maybe Prelude.Text,
+    -- | The number of email messages that were delivered to recipients’ inboxes.
+    inboxCount :: Prelude.Maybe Prelude.Integer,
+    -- | The last time when the email message was delivered to any recipient\'s
+    -- inbox. This value can help you determine how long it took for a campaign
+    -- to deliver an email message.
+    lastSeenDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The projected number of recipients that the email message was sent to.
+    projectedVolume :: Prelude.Maybe Prelude.Integer,
+    -- | The percentage of email messages that were opened and then deleted by
+    -- recipients. Due to technical limitations, this value only includes
+    -- recipients who opened the message by using an email client that supports
+    -- images.
+    readDeleteRate :: Prelude.Maybe Prelude.Double,
+    -- | The percentage of email messages that were opened by recipients. Due to
+    -- technical limitations, this value only includes recipients who opened
+    -- the message by using an email client that supports images.
+    readRate :: Prelude.Maybe Prelude.Double,
+    -- | The IP addresses that were used to send the email message.
+    sendingIps :: Prelude.Maybe [Prelude.Text],
+    -- | The number of email messages that were delivered to recipients\' spam or
+    -- junk mail folders.
+    spamCount :: Prelude.Maybe Prelude.Integer,
+    -- | The subject line, or title, of the email message.
+    subject :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DomainDeliverabilityCampaign' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'campaignId', 'domainDeliverabilityCampaign_campaignId' - The unique identifier for the campaign. The Deliverability dashboard
+-- automatically generates and assigns this identifier to a campaign.
+--
+-- 'deleteRate', 'domainDeliverabilityCampaign_deleteRate' - The percentage of email messages that were deleted by recipients,
+-- without being opened first. Due to technical limitations, this value
+-- only includes recipients who opened the message by using an email client
+-- that supports images.
+--
+-- 'esps', 'domainDeliverabilityCampaign_esps' - The major email providers who handled the email message.
+--
+-- 'firstSeenDateTime', 'domainDeliverabilityCampaign_firstSeenDateTime' - The first time when the email message was delivered to any recipient\'s
+-- inbox. This value can help you determine how long it took for a campaign
+-- to deliver an email message.
+--
+-- 'fromAddress', 'domainDeliverabilityCampaign_fromAddress' - The verified email address that the email message was sent from.
+--
+-- 'imageUrl', 'domainDeliverabilityCampaign_imageUrl' - The URL of an image that contains a snapshot of the email message that
+-- was sent.
+--
+-- 'inboxCount', 'domainDeliverabilityCampaign_inboxCount' - The number of email messages that were delivered to recipients’ inboxes.
+--
+-- 'lastSeenDateTime', 'domainDeliverabilityCampaign_lastSeenDateTime' - The last time when the email message was delivered to any recipient\'s
+-- inbox. This value can help you determine how long it took for a campaign
+-- to deliver an email message.
+--
+-- 'projectedVolume', 'domainDeliverabilityCampaign_projectedVolume' - The projected number of recipients that the email message was sent to.
+--
+-- 'readDeleteRate', 'domainDeliverabilityCampaign_readDeleteRate' - The percentage of email messages that were opened and then deleted by
+-- recipients. Due to technical limitations, this value only includes
+-- recipients who opened the message by using an email client that supports
+-- images.
+--
+-- 'readRate', 'domainDeliverabilityCampaign_readRate' - The percentage of email messages that were opened by recipients. Due to
+-- technical limitations, this value only includes recipients who opened
+-- the message by using an email client that supports images.
+--
+-- 'sendingIps', 'domainDeliverabilityCampaign_sendingIps' - The IP addresses that were used to send the email message.
+--
+-- 'spamCount', 'domainDeliverabilityCampaign_spamCount' - The number of email messages that were delivered to recipients\' spam or
+-- junk mail folders.
+--
+-- 'subject', 'domainDeliverabilityCampaign_subject' - The subject line, or title, of the email message.
+newDomainDeliverabilityCampaign ::
+  DomainDeliverabilityCampaign
+newDomainDeliverabilityCampaign =
+  DomainDeliverabilityCampaign'
+    { campaignId =
+        Prelude.Nothing,
+      deleteRate = Prelude.Nothing,
+      esps = Prelude.Nothing,
+      firstSeenDateTime = Prelude.Nothing,
+      fromAddress = Prelude.Nothing,
+      imageUrl = Prelude.Nothing,
+      inboxCount = Prelude.Nothing,
+      lastSeenDateTime = Prelude.Nothing,
+      projectedVolume = Prelude.Nothing,
+      readDeleteRate = Prelude.Nothing,
+      readRate = Prelude.Nothing,
+      sendingIps = Prelude.Nothing,
+      spamCount = Prelude.Nothing,
+      subject = Prelude.Nothing
+    }
+
+-- | The unique identifier for the campaign. The Deliverability dashboard
+-- automatically generates and assigns this identifier to a campaign.
+domainDeliverabilityCampaign_campaignId :: Lens.Lens' DomainDeliverabilityCampaign (Prelude.Maybe Prelude.Text)
+domainDeliverabilityCampaign_campaignId = Lens.lens (\DomainDeliverabilityCampaign' {campaignId} -> campaignId) (\s@DomainDeliverabilityCampaign' {} a -> s {campaignId = a} :: DomainDeliverabilityCampaign)
+
+-- | The percentage of email messages that were deleted by recipients,
+-- without being opened first. Due to technical limitations, this value
+-- only includes recipients who opened the message by using an email client
+-- that supports images.
+domainDeliverabilityCampaign_deleteRate :: Lens.Lens' DomainDeliverabilityCampaign (Prelude.Maybe Prelude.Double)
+domainDeliverabilityCampaign_deleteRate = Lens.lens (\DomainDeliverabilityCampaign' {deleteRate} -> deleteRate) (\s@DomainDeliverabilityCampaign' {} a -> s {deleteRate = a} :: DomainDeliverabilityCampaign)
+
+-- | The major email providers who handled the email message.
+domainDeliverabilityCampaign_esps :: Lens.Lens' DomainDeliverabilityCampaign (Prelude.Maybe [Prelude.Text])
+domainDeliverabilityCampaign_esps = Lens.lens (\DomainDeliverabilityCampaign' {esps} -> esps) (\s@DomainDeliverabilityCampaign' {} a -> s {esps = a} :: DomainDeliverabilityCampaign) Prelude.. Lens.mapping Lens.coerced
+
+-- | The first time when the email message was delivered to any recipient\'s
+-- inbox. This value can help you determine how long it took for a campaign
+-- to deliver an email message.
+domainDeliverabilityCampaign_firstSeenDateTime :: Lens.Lens' DomainDeliverabilityCampaign (Prelude.Maybe Prelude.UTCTime)
+domainDeliverabilityCampaign_firstSeenDateTime = Lens.lens (\DomainDeliverabilityCampaign' {firstSeenDateTime} -> firstSeenDateTime) (\s@DomainDeliverabilityCampaign' {} a -> s {firstSeenDateTime = a} :: DomainDeliverabilityCampaign) Prelude.. Lens.mapping Data._Time
+
+-- | The verified email address that the email message was sent from.
+domainDeliverabilityCampaign_fromAddress :: Lens.Lens' DomainDeliverabilityCampaign (Prelude.Maybe Prelude.Text)
+domainDeliverabilityCampaign_fromAddress = Lens.lens (\DomainDeliverabilityCampaign' {fromAddress} -> fromAddress) (\s@DomainDeliverabilityCampaign' {} a -> s {fromAddress = a} :: DomainDeliverabilityCampaign)
+
+-- | The URL of an image that contains a snapshot of the email message that
+-- was sent.
+domainDeliverabilityCampaign_imageUrl :: Lens.Lens' DomainDeliverabilityCampaign (Prelude.Maybe Prelude.Text)
+domainDeliverabilityCampaign_imageUrl = Lens.lens (\DomainDeliverabilityCampaign' {imageUrl} -> imageUrl) (\s@DomainDeliverabilityCampaign' {} a -> s {imageUrl = a} :: DomainDeliverabilityCampaign)
+
+-- | The number of email messages that were delivered to recipients’ inboxes.
+domainDeliverabilityCampaign_inboxCount :: Lens.Lens' DomainDeliverabilityCampaign (Prelude.Maybe Prelude.Integer)
+domainDeliverabilityCampaign_inboxCount = Lens.lens (\DomainDeliverabilityCampaign' {inboxCount} -> inboxCount) (\s@DomainDeliverabilityCampaign' {} a -> s {inboxCount = a} :: DomainDeliverabilityCampaign)
+
+-- | The last time when the email message was delivered to any recipient\'s
+-- inbox. This value can help you determine how long it took for a campaign
+-- to deliver an email message.
+domainDeliverabilityCampaign_lastSeenDateTime :: Lens.Lens' DomainDeliverabilityCampaign (Prelude.Maybe Prelude.UTCTime)
+domainDeliverabilityCampaign_lastSeenDateTime = Lens.lens (\DomainDeliverabilityCampaign' {lastSeenDateTime} -> lastSeenDateTime) (\s@DomainDeliverabilityCampaign' {} a -> s {lastSeenDateTime = a} :: DomainDeliverabilityCampaign) Prelude.. Lens.mapping Data._Time
+
+-- | The projected number of recipients that the email message was sent to.
+domainDeliverabilityCampaign_projectedVolume :: Lens.Lens' DomainDeliverabilityCampaign (Prelude.Maybe Prelude.Integer)
+domainDeliverabilityCampaign_projectedVolume = Lens.lens (\DomainDeliverabilityCampaign' {projectedVolume} -> projectedVolume) (\s@DomainDeliverabilityCampaign' {} a -> s {projectedVolume = a} :: DomainDeliverabilityCampaign)
+
+-- | The percentage of email messages that were opened and then deleted by
+-- recipients. Due to technical limitations, this value only includes
+-- recipients who opened the message by using an email client that supports
+-- images.
+domainDeliverabilityCampaign_readDeleteRate :: Lens.Lens' DomainDeliverabilityCampaign (Prelude.Maybe Prelude.Double)
+domainDeliverabilityCampaign_readDeleteRate = Lens.lens (\DomainDeliverabilityCampaign' {readDeleteRate} -> readDeleteRate) (\s@DomainDeliverabilityCampaign' {} a -> s {readDeleteRate = a} :: DomainDeliverabilityCampaign)
+
+-- | The percentage of email messages that were opened by recipients. Due to
+-- technical limitations, this value only includes recipients who opened
+-- the message by using an email client that supports images.
+domainDeliverabilityCampaign_readRate :: Lens.Lens' DomainDeliverabilityCampaign (Prelude.Maybe Prelude.Double)
+domainDeliverabilityCampaign_readRate = Lens.lens (\DomainDeliverabilityCampaign' {readRate} -> readRate) (\s@DomainDeliverabilityCampaign' {} a -> s {readRate = a} :: DomainDeliverabilityCampaign)
+
+-- | The IP addresses that were used to send the email message.
+domainDeliverabilityCampaign_sendingIps :: Lens.Lens' DomainDeliverabilityCampaign (Prelude.Maybe [Prelude.Text])
+domainDeliverabilityCampaign_sendingIps = Lens.lens (\DomainDeliverabilityCampaign' {sendingIps} -> sendingIps) (\s@DomainDeliverabilityCampaign' {} a -> s {sendingIps = a} :: DomainDeliverabilityCampaign) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of email messages that were delivered to recipients\' spam or
+-- junk mail folders.
+domainDeliverabilityCampaign_spamCount :: Lens.Lens' DomainDeliverabilityCampaign (Prelude.Maybe Prelude.Integer)
+domainDeliverabilityCampaign_spamCount = Lens.lens (\DomainDeliverabilityCampaign' {spamCount} -> spamCount) (\s@DomainDeliverabilityCampaign' {} a -> s {spamCount = a} :: DomainDeliverabilityCampaign)
+
+-- | The subject line, or title, of the email message.
+domainDeliverabilityCampaign_subject :: Lens.Lens' DomainDeliverabilityCampaign (Prelude.Maybe Prelude.Text)
+domainDeliverabilityCampaign_subject = Lens.lens (\DomainDeliverabilityCampaign' {subject} -> subject) (\s@DomainDeliverabilityCampaign' {} a -> s {subject = a} :: DomainDeliverabilityCampaign)
+
+instance Data.FromJSON DomainDeliverabilityCampaign where
+  parseJSON =
+    Data.withObject
+      "DomainDeliverabilityCampaign"
+      ( \x ->
+          DomainDeliverabilityCampaign'
+            Prelude.<$> (x Data..:? "CampaignId")
+            Prelude.<*> (x Data..:? "DeleteRate")
+            Prelude.<*> (x Data..:? "Esps" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "FirstSeenDateTime")
+            Prelude.<*> (x Data..:? "FromAddress")
+            Prelude.<*> (x Data..:? "ImageUrl")
+            Prelude.<*> (x Data..:? "InboxCount")
+            Prelude.<*> (x Data..:? "LastSeenDateTime")
+            Prelude.<*> (x Data..:? "ProjectedVolume")
+            Prelude.<*> (x Data..:? "ReadDeleteRate")
+            Prelude.<*> (x Data..:? "ReadRate")
+            Prelude.<*> (x Data..:? "SendingIps" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "SpamCount")
+            Prelude.<*> (x Data..:? "Subject")
+      )
+
+instance
+  Prelude.Hashable
+    DomainDeliverabilityCampaign
+  where
+  hashWithSalt _salt DomainDeliverabilityCampaign' {..} =
+    _salt
+      `Prelude.hashWithSalt` campaignId
+      `Prelude.hashWithSalt` deleteRate
+      `Prelude.hashWithSalt` esps
+      `Prelude.hashWithSalt` firstSeenDateTime
+      `Prelude.hashWithSalt` fromAddress
+      `Prelude.hashWithSalt` imageUrl
+      `Prelude.hashWithSalt` inboxCount
+      `Prelude.hashWithSalt` lastSeenDateTime
+      `Prelude.hashWithSalt` projectedVolume
+      `Prelude.hashWithSalt` readDeleteRate
+      `Prelude.hashWithSalt` readRate
+      `Prelude.hashWithSalt` sendingIps
+      `Prelude.hashWithSalt` spamCount
+      `Prelude.hashWithSalt` subject
+
+instance Prelude.NFData DomainDeliverabilityCampaign where
+  rnf DomainDeliverabilityCampaign' {..} =
+    Prelude.rnf campaignId
+      `Prelude.seq` Prelude.rnf deleteRate
+      `Prelude.seq` Prelude.rnf esps
+      `Prelude.seq` Prelude.rnf firstSeenDateTime
+      `Prelude.seq` Prelude.rnf fromAddress
+      `Prelude.seq` Prelude.rnf imageUrl
+      `Prelude.seq` Prelude.rnf inboxCount
+      `Prelude.seq` Prelude.rnf lastSeenDateTime
+      `Prelude.seq` Prelude.rnf projectedVolume
+      `Prelude.seq` Prelude.rnf readDeleteRate
+      `Prelude.seq` Prelude.rnf readRate
+      `Prelude.seq` Prelude.rnf sendingIps
+      `Prelude.seq` Prelude.rnf spamCount
+      `Prelude.seq` Prelude.rnf subject
diff --git a/gen/Amazonka/SESV2/Types/DomainDeliverabilityTrackingOption.hs b/gen/Amazonka/SESV2/Types/DomainDeliverabilityTrackingOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DomainDeliverabilityTrackingOption.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.SESV2.Types.DomainDeliverabilityTrackingOption
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DomainDeliverabilityTrackingOption 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
+import Amazonka.SESV2.Types.InboxPlacementTrackingOption
+
+-- | An object that contains information about the Deliverability dashboard
+-- subscription for a verified domain that you use to send email and
+-- currently has an active Deliverability dashboard subscription. If a
+-- Deliverability dashboard subscription is active for a domain, you gain
+-- access to reputation, inbox placement, and other metrics for the domain.
+--
+-- /See:/ 'newDomainDeliverabilityTrackingOption' smart constructor.
+data DomainDeliverabilityTrackingOption = DomainDeliverabilityTrackingOption'
+  { -- | A verified domain that’s associated with your Amazon Web Services
+    -- account and currently has an active Deliverability dashboard
+    -- subscription.
+    domain :: Prelude.Maybe Prelude.Text,
+    -- | An object that contains information about the inbox placement data
+    -- settings for the domain.
+    inboxPlacementTrackingOption :: Prelude.Maybe InboxPlacementTrackingOption,
+    -- | The date when you enabled the Deliverability dashboard for the domain.
+    subscriptionStartDate :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DomainDeliverabilityTrackingOption' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domain', 'domainDeliverabilityTrackingOption_domain' - A verified domain that’s associated with your Amazon Web Services
+-- account and currently has an active Deliverability dashboard
+-- subscription.
+--
+-- 'inboxPlacementTrackingOption', 'domainDeliverabilityTrackingOption_inboxPlacementTrackingOption' - An object that contains information about the inbox placement data
+-- settings for the domain.
+--
+-- 'subscriptionStartDate', 'domainDeliverabilityTrackingOption_subscriptionStartDate' - The date when you enabled the Deliverability dashboard for the domain.
+newDomainDeliverabilityTrackingOption ::
+  DomainDeliverabilityTrackingOption
+newDomainDeliverabilityTrackingOption =
+  DomainDeliverabilityTrackingOption'
+    { domain =
+        Prelude.Nothing,
+      inboxPlacementTrackingOption =
+        Prelude.Nothing,
+      subscriptionStartDate = Prelude.Nothing
+    }
+
+-- | A verified domain that’s associated with your Amazon Web Services
+-- account and currently has an active Deliverability dashboard
+-- subscription.
+domainDeliverabilityTrackingOption_domain :: Lens.Lens' DomainDeliverabilityTrackingOption (Prelude.Maybe Prelude.Text)
+domainDeliverabilityTrackingOption_domain = Lens.lens (\DomainDeliverabilityTrackingOption' {domain} -> domain) (\s@DomainDeliverabilityTrackingOption' {} a -> s {domain = a} :: DomainDeliverabilityTrackingOption)
+
+-- | An object that contains information about the inbox placement data
+-- settings for the domain.
+domainDeliverabilityTrackingOption_inboxPlacementTrackingOption :: Lens.Lens' DomainDeliverabilityTrackingOption (Prelude.Maybe InboxPlacementTrackingOption)
+domainDeliverabilityTrackingOption_inboxPlacementTrackingOption = Lens.lens (\DomainDeliverabilityTrackingOption' {inboxPlacementTrackingOption} -> inboxPlacementTrackingOption) (\s@DomainDeliverabilityTrackingOption' {} a -> s {inboxPlacementTrackingOption = a} :: DomainDeliverabilityTrackingOption)
+
+-- | The date when you enabled the Deliverability dashboard for the domain.
+domainDeliverabilityTrackingOption_subscriptionStartDate :: Lens.Lens' DomainDeliverabilityTrackingOption (Prelude.Maybe Prelude.UTCTime)
+domainDeliverabilityTrackingOption_subscriptionStartDate = Lens.lens (\DomainDeliverabilityTrackingOption' {subscriptionStartDate} -> subscriptionStartDate) (\s@DomainDeliverabilityTrackingOption' {} a -> s {subscriptionStartDate = a} :: DomainDeliverabilityTrackingOption) Prelude.. Lens.mapping Data._Time
+
+instance
+  Data.FromJSON
+    DomainDeliverabilityTrackingOption
+  where
+  parseJSON =
+    Data.withObject
+      "DomainDeliverabilityTrackingOption"
+      ( \x ->
+          DomainDeliverabilityTrackingOption'
+            Prelude.<$> (x Data..:? "Domain")
+            Prelude.<*> (x Data..:? "InboxPlacementTrackingOption")
+            Prelude.<*> (x Data..:? "SubscriptionStartDate")
+      )
+
+instance
+  Prelude.Hashable
+    DomainDeliverabilityTrackingOption
+  where
+  hashWithSalt
+    _salt
+    DomainDeliverabilityTrackingOption' {..} =
+      _salt
+        `Prelude.hashWithSalt` domain
+        `Prelude.hashWithSalt` inboxPlacementTrackingOption
+        `Prelude.hashWithSalt` subscriptionStartDate
+
+instance
+  Prelude.NFData
+    DomainDeliverabilityTrackingOption
+  where
+  rnf DomainDeliverabilityTrackingOption' {..} =
+    Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf inboxPlacementTrackingOption
+      `Prelude.seq` Prelude.rnf subscriptionStartDate
+
+instance
+  Data.ToJSON
+    DomainDeliverabilityTrackingOption
+  where
+  toJSON DomainDeliverabilityTrackingOption' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Domain" Data..=) Prelude.<$> domain,
+            ("InboxPlacementTrackingOption" Data..=)
+              Prelude.<$> inboxPlacementTrackingOption,
+            ("SubscriptionStartDate" Data..=)
+              Prelude.<$> subscriptionStartDate
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/DomainIspPlacement.hs b/gen/Amazonka/SESV2/Types/DomainIspPlacement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/DomainIspPlacement.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.SESV2.Types.DomainIspPlacement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.DomainIspPlacement where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that contains inbox placement data for email sent from one of
+-- your email domains to a specific email provider.
+--
+-- /See:/ 'newDomainIspPlacement' smart constructor.
+data DomainIspPlacement = DomainIspPlacement'
+  { -- | The percentage of messages that were sent from the selected domain to
+    -- the specified email provider that arrived in recipients\' inboxes.
+    inboxPercentage :: Prelude.Maybe Prelude.Double,
+    -- | The total number of messages that were sent from the selected domain to
+    -- the specified email provider that arrived in recipients\' inboxes.
+    inboxRawCount :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the email provider that the inbox placement data applies to.
+    ispName :: Prelude.Maybe Prelude.Text,
+    -- | The percentage of messages that were sent from the selected domain to
+    -- the specified email provider that arrived in recipients\' spam or junk
+    -- mail folders.
+    spamPercentage :: Prelude.Maybe Prelude.Double,
+    -- | The total number of messages that were sent from the selected domain to
+    -- the specified email provider that arrived in recipients\' spam or junk
+    -- mail folders.
+    spamRawCount :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DomainIspPlacement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'inboxPercentage', 'domainIspPlacement_inboxPercentage' - The percentage of messages that were sent from the selected domain to
+-- the specified email provider that arrived in recipients\' inboxes.
+--
+-- 'inboxRawCount', 'domainIspPlacement_inboxRawCount' - The total number of messages that were sent from the selected domain to
+-- the specified email provider that arrived in recipients\' inboxes.
+--
+-- 'ispName', 'domainIspPlacement_ispName' - The name of the email provider that the inbox placement data applies to.
+--
+-- 'spamPercentage', 'domainIspPlacement_spamPercentage' - The percentage of messages that were sent from the selected domain to
+-- the specified email provider that arrived in recipients\' spam or junk
+-- mail folders.
+--
+-- 'spamRawCount', 'domainIspPlacement_spamRawCount' - The total number of messages that were sent from the selected domain to
+-- the specified email provider that arrived in recipients\' spam or junk
+-- mail folders.
+newDomainIspPlacement ::
+  DomainIspPlacement
+newDomainIspPlacement =
+  DomainIspPlacement'
+    { inboxPercentage =
+        Prelude.Nothing,
+      inboxRawCount = Prelude.Nothing,
+      ispName = Prelude.Nothing,
+      spamPercentage = Prelude.Nothing,
+      spamRawCount = Prelude.Nothing
+    }
+
+-- | The percentage of messages that were sent from the selected domain to
+-- the specified email provider that arrived in recipients\' inboxes.
+domainIspPlacement_inboxPercentage :: Lens.Lens' DomainIspPlacement (Prelude.Maybe Prelude.Double)
+domainIspPlacement_inboxPercentage = Lens.lens (\DomainIspPlacement' {inboxPercentage} -> inboxPercentage) (\s@DomainIspPlacement' {} a -> s {inboxPercentage = a} :: DomainIspPlacement)
+
+-- | The total number of messages that were sent from the selected domain to
+-- the specified email provider that arrived in recipients\' inboxes.
+domainIspPlacement_inboxRawCount :: Lens.Lens' DomainIspPlacement (Prelude.Maybe Prelude.Integer)
+domainIspPlacement_inboxRawCount = Lens.lens (\DomainIspPlacement' {inboxRawCount} -> inboxRawCount) (\s@DomainIspPlacement' {} a -> s {inboxRawCount = a} :: DomainIspPlacement)
+
+-- | The name of the email provider that the inbox placement data applies to.
+domainIspPlacement_ispName :: Lens.Lens' DomainIspPlacement (Prelude.Maybe Prelude.Text)
+domainIspPlacement_ispName = Lens.lens (\DomainIspPlacement' {ispName} -> ispName) (\s@DomainIspPlacement' {} a -> s {ispName = a} :: DomainIspPlacement)
+
+-- | The percentage of messages that were sent from the selected domain to
+-- the specified email provider that arrived in recipients\' spam or junk
+-- mail folders.
+domainIspPlacement_spamPercentage :: Lens.Lens' DomainIspPlacement (Prelude.Maybe Prelude.Double)
+domainIspPlacement_spamPercentage = Lens.lens (\DomainIspPlacement' {spamPercentage} -> spamPercentage) (\s@DomainIspPlacement' {} a -> s {spamPercentage = a} :: DomainIspPlacement)
+
+-- | The total number of messages that were sent from the selected domain to
+-- the specified email provider that arrived in recipients\' spam or junk
+-- mail folders.
+domainIspPlacement_spamRawCount :: Lens.Lens' DomainIspPlacement (Prelude.Maybe Prelude.Integer)
+domainIspPlacement_spamRawCount = Lens.lens (\DomainIspPlacement' {spamRawCount} -> spamRawCount) (\s@DomainIspPlacement' {} a -> s {spamRawCount = a} :: DomainIspPlacement)
+
+instance Data.FromJSON DomainIspPlacement where
+  parseJSON =
+    Data.withObject
+      "DomainIspPlacement"
+      ( \x ->
+          DomainIspPlacement'
+            Prelude.<$> (x Data..:? "InboxPercentage")
+            Prelude.<*> (x Data..:? "InboxRawCount")
+            Prelude.<*> (x Data..:? "IspName")
+            Prelude.<*> (x Data..:? "SpamPercentage")
+            Prelude.<*> (x Data..:? "SpamRawCount")
+      )
+
+instance Prelude.Hashable DomainIspPlacement where
+  hashWithSalt _salt DomainIspPlacement' {..} =
+    _salt
+      `Prelude.hashWithSalt` inboxPercentage
+      `Prelude.hashWithSalt` inboxRawCount
+      `Prelude.hashWithSalt` ispName
+      `Prelude.hashWithSalt` spamPercentage
+      `Prelude.hashWithSalt` spamRawCount
+
+instance Prelude.NFData DomainIspPlacement where
+  rnf DomainIspPlacement' {..} =
+    Prelude.rnf inboxPercentage
+      `Prelude.seq` Prelude.rnf inboxRawCount
+      `Prelude.seq` Prelude.rnf ispName
+      `Prelude.seq` Prelude.rnf spamPercentage
+      `Prelude.seq` Prelude.rnf spamRawCount
diff --git a/gen/Amazonka/SESV2/Types/EmailContent.hs b/gen/Amazonka/SESV2/Types/EmailContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/EmailContent.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.EmailContent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.EmailContent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.SESV2.Types.Message
+import Amazonka.SESV2.Types.RawMessage
+import Amazonka.SESV2.Types.Template
+
+-- | An object that defines the entire content of the email, including the
+-- message headers and the body content. You can create a simple email
+-- message, in which you specify the subject and the text and HTML versions
+-- of the message body. You can also create raw messages, in which you
+-- specify a complete MIME-formatted message. Raw messages can include
+-- attachments and custom headers.
+--
+-- /See:/ 'newEmailContent' smart constructor.
+data EmailContent = EmailContent'
+  { -- | The raw email message. The message has to meet the following criteria:
+    --
+    -- -   The message has to contain a header and a body, separated by one
+    --     blank line.
+    --
+    -- -   All of the required header fields must be present in the message.
+    --
+    -- -   Each part of a multipart MIME message must be formatted properly.
+    --
+    -- -   If you include attachments, they must be in a file format that the
+    --     Amazon SES API v2 supports.
+    --
+    -- -   The entire message must be Base64 encoded.
+    --
+    -- -   If any of the MIME parts in your message contain content that is
+    --     outside of the 7-bit ASCII character range, you should encode that
+    --     content to ensure that recipients\' email clients render the message
+    --     properly.
+    --
+    -- -   The length of any single line of text in the message can\'t exceed
+    --     1,000 characters. This restriction is defined in
+    --     <https://tools.ietf.org/html/rfc5321 RFC 5321>.
+    raw :: Prelude.Maybe RawMessage,
+    -- | The simple email message. The message consists of a subject and a
+    -- message body.
+    simple :: Prelude.Maybe Message,
+    -- | The template to use for the email message.
+    template :: Prelude.Maybe Template
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EmailContent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'raw', 'emailContent_raw' - The raw email message. The message has to meet the following criteria:
+--
+-- -   The message has to contain a header and a body, separated by one
+--     blank line.
+--
+-- -   All of the required header fields must be present in the message.
+--
+-- -   Each part of a multipart MIME message must be formatted properly.
+--
+-- -   If you include attachments, they must be in a file format that the
+--     Amazon SES API v2 supports.
+--
+-- -   The entire message must be Base64 encoded.
+--
+-- -   If any of the MIME parts in your message contain content that is
+--     outside of the 7-bit ASCII character range, you should encode that
+--     content to ensure that recipients\' email clients render the message
+--     properly.
+--
+-- -   The length of any single line of text in the message can\'t exceed
+--     1,000 characters. This restriction is defined in
+--     <https://tools.ietf.org/html/rfc5321 RFC 5321>.
+--
+-- 'simple', 'emailContent_simple' - The simple email message. The message consists of a subject and a
+-- message body.
+--
+-- 'template', 'emailContent_template' - The template to use for the email message.
+newEmailContent ::
+  EmailContent
+newEmailContent =
+  EmailContent'
+    { raw = Prelude.Nothing,
+      simple = Prelude.Nothing,
+      template = Prelude.Nothing
+    }
+
+-- | The raw email message. The message has to meet the following criteria:
+--
+-- -   The message has to contain a header and a body, separated by one
+--     blank line.
+--
+-- -   All of the required header fields must be present in the message.
+--
+-- -   Each part of a multipart MIME message must be formatted properly.
+--
+-- -   If you include attachments, they must be in a file format that the
+--     Amazon SES API v2 supports.
+--
+-- -   The entire message must be Base64 encoded.
+--
+-- -   If any of the MIME parts in your message contain content that is
+--     outside of the 7-bit ASCII character range, you should encode that
+--     content to ensure that recipients\' email clients render the message
+--     properly.
+--
+-- -   The length of any single line of text in the message can\'t exceed
+--     1,000 characters. This restriction is defined in
+--     <https://tools.ietf.org/html/rfc5321 RFC 5321>.
+emailContent_raw :: Lens.Lens' EmailContent (Prelude.Maybe RawMessage)
+emailContent_raw = Lens.lens (\EmailContent' {raw} -> raw) (\s@EmailContent' {} a -> s {raw = a} :: EmailContent)
+
+-- | The simple email message. The message consists of a subject and a
+-- message body.
+emailContent_simple :: Lens.Lens' EmailContent (Prelude.Maybe Message)
+emailContent_simple = Lens.lens (\EmailContent' {simple} -> simple) (\s@EmailContent' {} a -> s {simple = a} :: EmailContent)
+
+-- | The template to use for the email message.
+emailContent_template :: Lens.Lens' EmailContent (Prelude.Maybe Template)
+emailContent_template = Lens.lens (\EmailContent' {template} -> template) (\s@EmailContent' {} a -> s {template = a} :: EmailContent)
+
+instance Prelude.Hashable EmailContent where
+  hashWithSalt _salt EmailContent' {..} =
+    _salt
+      `Prelude.hashWithSalt` raw
+      `Prelude.hashWithSalt` simple
+      `Prelude.hashWithSalt` template
+
+instance Prelude.NFData EmailContent where
+  rnf EmailContent' {..} =
+    Prelude.rnf raw
+      `Prelude.seq` Prelude.rnf simple
+      `Prelude.seq` Prelude.rnf template
+
+instance Data.ToJSON EmailContent where
+  toJSON EmailContent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Raw" Data..=) Prelude.<$> raw,
+            ("Simple" Data..=) Prelude.<$> simple,
+            ("Template" Data..=) Prelude.<$> template
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/EmailTemplateContent.hs b/gen/Amazonka/SESV2/Types/EmailTemplateContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/EmailTemplateContent.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.SESV2.Types.EmailTemplateContent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.EmailTemplateContent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The content of the email, composed of a subject line, an HTML part, and
+-- a text-only part.
+--
+-- /See:/ 'newEmailTemplateContent' smart constructor.
+data EmailTemplateContent = EmailTemplateContent'
+  { -- | The HTML body of the email.
+    html :: Prelude.Maybe Prelude.Text,
+    -- | The subject line of the email.
+    subject :: Prelude.Maybe Prelude.Text,
+    -- | The email body that will be visible to recipients whose email clients do
+    -- not display HTML.
+    text :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EmailTemplateContent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'html', 'emailTemplateContent_html' - The HTML body of the email.
+--
+-- 'subject', 'emailTemplateContent_subject' - The subject line of the email.
+--
+-- 'text', 'emailTemplateContent_text' - The email body that will be visible to recipients whose email clients do
+-- not display HTML.
+newEmailTemplateContent ::
+  EmailTemplateContent
+newEmailTemplateContent =
+  EmailTemplateContent'
+    { html = Prelude.Nothing,
+      subject = Prelude.Nothing,
+      text = Prelude.Nothing
+    }
+
+-- | The HTML body of the email.
+emailTemplateContent_html :: Lens.Lens' EmailTemplateContent (Prelude.Maybe Prelude.Text)
+emailTemplateContent_html = Lens.lens (\EmailTemplateContent' {html} -> html) (\s@EmailTemplateContent' {} a -> s {html = a} :: EmailTemplateContent)
+
+-- | The subject line of the email.
+emailTemplateContent_subject :: Lens.Lens' EmailTemplateContent (Prelude.Maybe Prelude.Text)
+emailTemplateContent_subject = Lens.lens (\EmailTemplateContent' {subject} -> subject) (\s@EmailTemplateContent' {} a -> s {subject = a} :: EmailTemplateContent)
+
+-- | The email body that will be visible to recipients whose email clients do
+-- not display HTML.
+emailTemplateContent_text :: Lens.Lens' EmailTemplateContent (Prelude.Maybe Prelude.Text)
+emailTemplateContent_text = Lens.lens (\EmailTemplateContent' {text} -> text) (\s@EmailTemplateContent' {} a -> s {text = a} :: EmailTemplateContent)
+
+instance Data.FromJSON EmailTemplateContent where
+  parseJSON =
+    Data.withObject
+      "EmailTemplateContent"
+      ( \x ->
+          EmailTemplateContent'
+            Prelude.<$> (x Data..:? "Html")
+            Prelude.<*> (x Data..:? "Subject")
+            Prelude.<*> (x Data..:? "Text")
+      )
+
+instance Prelude.Hashable EmailTemplateContent where
+  hashWithSalt _salt EmailTemplateContent' {..} =
+    _salt
+      `Prelude.hashWithSalt` html
+      `Prelude.hashWithSalt` subject
+      `Prelude.hashWithSalt` text
+
+instance Prelude.NFData EmailTemplateContent where
+  rnf EmailTemplateContent' {..} =
+    Prelude.rnf html
+      `Prelude.seq` Prelude.rnf subject
+      `Prelude.seq` Prelude.rnf text
+
+instance Data.ToJSON EmailTemplateContent where
+  toJSON EmailTemplateContent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Html" Data..=) Prelude.<$> html,
+            ("Subject" Data..=) Prelude.<$> subject,
+            ("Text" Data..=) Prelude.<$> text
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/EmailTemplateMetadata.hs b/gen/Amazonka/SESV2/Types/EmailTemplateMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/EmailTemplateMetadata.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.SESV2.Types.EmailTemplateMetadata
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.EmailTemplateMetadata where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about an email template.
+--
+-- /See:/ 'newEmailTemplateMetadata' smart constructor.
+data EmailTemplateMetadata = EmailTemplateMetadata'
+  { -- | The time and date the template was created.
+    createdTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The name of the template.
+    templateName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EmailTemplateMetadata' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdTimestamp', 'emailTemplateMetadata_createdTimestamp' - The time and date the template was created.
+--
+-- 'templateName', 'emailTemplateMetadata_templateName' - The name of the template.
+newEmailTemplateMetadata ::
+  EmailTemplateMetadata
+newEmailTemplateMetadata =
+  EmailTemplateMetadata'
+    { createdTimestamp =
+        Prelude.Nothing,
+      templateName = Prelude.Nothing
+    }
+
+-- | The time and date the template was created.
+emailTemplateMetadata_createdTimestamp :: Lens.Lens' EmailTemplateMetadata (Prelude.Maybe Prelude.UTCTime)
+emailTemplateMetadata_createdTimestamp = Lens.lens (\EmailTemplateMetadata' {createdTimestamp} -> createdTimestamp) (\s@EmailTemplateMetadata' {} a -> s {createdTimestamp = a} :: EmailTemplateMetadata) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the template.
+emailTemplateMetadata_templateName :: Lens.Lens' EmailTemplateMetadata (Prelude.Maybe Prelude.Text)
+emailTemplateMetadata_templateName = Lens.lens (\EmailTemplateMetadata' {templateName} -> templateName) (\s@EmailTemplateMetadata' {} a -> s {templateName = a} :: EmailTemplateMetadata)
+
+instance Data.FromJSON EmailTemplateMetadata where
+  parseJSON =
+    Data.withObject
+      "EmailTemplateMetadata"
+      ( \x ->
+          EmailTemplateMetadata'
+            Prelude.<$> (x Data..:? "CreatedTimestamp")
+            Prelude.<*> (x Data..:? "TemplateName")
+      )
+
+instance Prelude.Hashable EmailTemplateMetadata where
+  hashWithSalt _salt EmailTemplateMetadata' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdTimestamp
+      `Prelude.hashWithSalt` templateName
+
+instance Prelude.NFData EmailTemplateMetadata where
+  rnf EmailTemplateMetadata' {..} =
+    Prelude.rnf createdTimestamp
+      `Prelude.seq` Prelude.rnf templateName
diff --git a/gen/Amazonka/SESV2/Types/EventDestination.hs b/gen/Amazonka/SESV2/Types/EventDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/EventDestination.hs
@@ -0,0 +1,212 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.EventDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.EventDestination 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
+import Amazonka.SESV2.Types.CloudWatchDestination
+import Amazonka.SESV2.Types.EventType
+import Amazonka.SESV2.Types.KinesisFirehoseDestination
+import Amazonka.SESV2.Types.PinpointDestination
+import Amazonka.SESV2.Types.SnsDestination
+
+-- | In the Amazon SES API v2, /events/ include message sends, deliveries,
+-- opens, clicks, bounces, complaints and delivery delays. /Event
+-- destinations/ are places that you can send information about these
+-- events to. For example, you can send event data to Amazon SNS to receive
+-- notifications when you receive bounces or complaints, or you can use
+-- Amazon Kinesis Data Firehose to stream data to Amazon S3 for long-term
+-- storage.
+--
+-- /See:/ 'newEventDestination' smart constructor.
+data EventDestination = EventDestination'
+  { -- | An object that defines an Amazon CloudWatch destination for email
+    -- events. You can use Amazon CloudWatch to monitor and gain insights on
+    -- your email sending metrics.
+    cloudWatchDestination :: Prelude.Maybe CloudWatchDestination,
+    -- | If @true@, the event destination is enabled. When the event destination
+    -- is enabled, the specified event types are sent to the destinations in
+    -- this @EventDestinationDefinition@.
+    --
+    -- If @false@, the event destination is disabled. When the event
+    -- destination is disabled, events aren\'t sent to the specified
+    -- destinations.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | An object that defines an Amazon Kinesis Data Firehose destination for
+    -- email events. You can use Amazon Kinesis Data Firehose to stream data to
+    -- other services, such as Amazon S3 and Amazon Redshift.
+    kinesisFirehoseDestination :: Prelude.Maybe KinesisFirehoseDestination,
+    -- | An object that defines an Amazon Pinpoint project destination for email
+    -- events. You can send email event data to a Amazon Pinpoint project to
+    -- view metrics using the Transactional Messaging dashboards that are built
+    -- in to Amazon Pinpoint. For more information, see
+    -- <https://docs.aws.amazon.com/pinpoint/latest/userguide/analytics-transactional-messages.html Transactional Messaging Charts>
+    -- in the /Amazon Pinpoint User Guide/.
+    pinpointDestination :: Prelude.Maybe PinpointDestination,
+    -- | An object that defines an Amazon SNS destination for email events. You
+    -- can use Amazon SNS to send notification when certain email events occur.
+    snsDestination :: Prelude.Maybe SnsDestination,
+    -- | A name that identifies the event destination.
+    name :: Prelude.Text,
+    -- | The types of events that Amazon SES sends to the specified event
+    -- destinations.
+    matchingEventTypes :: [EventType]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cloudWatchDestination', 'eventDestination_cloudWatchDestination' - An object that defines an Amazon CloudWatch destination for email
+-- events. You can use Amazon CloudWatch to monitor and gain insights on
+-- your email sending metrics.
+--
+-- 'enabled', 'eventDestination_enabled' - If @true@, the event destination is enabled. When the event destination
+-- is enabled, the specified event types are sent to the destinations in
+-- this @EventDestinationDefinition@.
+--
+-- If @false@, the event destination is disabled. When the event
+-- destination is disabled, events aren\'t sent to the specified
+-- destinations.
+--
+-- 'kinesisFirehoseDestination', 'eventDestination_kinesisFirehoseDestination' - An object that defines an Amazon Kinesis Data Firehose destination for
+-- email events. You can use Amazon Kinesis Data Firehose to stream data to
+-- other services, such as Amazon S3 and Amazon Redshift.
+--
+-- 'pinpointDestination', 'eventDestination_pinpointDestination' - An object that defines an Amazon Pinpoint project destination for email
+-- events. You can send email event data to a Amazon Pinpoint project to
+-- view metrics using the Transactional Messaging dashboards that are built
+-- in to Amazon Pinpoint. For more information, see
+-- <https://docs.aws.amazon.com/pinpoint/latest/userguide/analytics-transactional-messages.html Transactional Messaging Charts>
+-- in the /Amazon Pinpoint User Guide/.
+--
+-- 'snsDestination', 'eventDestination_snsDestination' - An object that defines an Amazon SNS destination for email events. You
+-- can use Amazon SNS to send notification when certain email events occur.
+--
+-- 'name', 'eventDestination_name' - A name that identifies the event destination.
+--
+-- 'matchingEventTypes', 'eventDestination_matchingEventTypes' - The types of events that Amazon SES sends to the specified event
+-- destinations.
+newEventDestination ::
+  -- | 'name'
+  Prelude.Text ->
+  EventDestination
+newEventDestination pName_ =
+  EventDestination'
+    { cloudWatchDestination =
+        Prelude.Nothing,
+      enabled = Prelude.Nothing,
+      kinesisFirehoseDestination = Prelude.Nothing,
+      pinpointDestination = Prelude.Nothing,
+      snsDestination = Prelude.Nothing,
+      name = pName_,
+      matchingEventTypes = Prelude.mempty
+    }
+
+-- | An object that defines an Amazon CloudWatch destination for email
+-- events. You can use Amazon CloudWatch to monitor and gain insights on
+-- your email sending metrics.
+eventDestination_cloudWatchDestination :: Lens.Lens' EventDestination (Prelude.Maybe CloudWatchDestination)
+eventDestination_cloudWatchDestination = Lens.lens (\EventDestination' {cloudWatchDestination} -> cloudWatchDestination) (\s@EventDestination' {} a -> s {cloudWatchDestination = a} :: EventDestination)
+
+-- | If @true@, the event destination is enabled. When the event destination
+-- is enabled, the specified event types are sent to the destinations in
+-- this @EventDestinationDefinition@.
+--
+-- If @false@, the event destination is disabled. When the event
+-- destination is disabled, events aren\'t sent to the specified
+-- destinations.
+eventDestination_enabled :: Lens.Lens' EventDestination (Prelude.Maybe Prelude.Bool)
+eventDestination_enabled = Lens.lens (\EventDestination' {enabled} -> enabled) (\s@EventDestination' {} a -> s {enabled = a} :: EventDestination)
+
+-- | An object that defines an Amazon Kinesis Data Firehose destination for
+-- email events. You can use Amazon Kinesis Data Firehose to stream data to
+-- other services, such as Amazon S3 and Amazon Redshift.
+eventDestination_kinesisFirehoseDestination :: Lens.Lens' EventDestination (Prelude.Maybe KinesisFirehoseDestination)
+eventDestination_kinesisFirehoseDestination = Lens.lens (\EventDestination' {kinesisFirehoseDestination} -> kinesisFirehoseDestination) (\s@EventDestination' {} a -> s {kinesisFirehoseDestination = a} :: EventDestination)
+
+-- | An object that defines an Amazon Pinpoint project destination for email
+-- events. You can send email event data to a Amazon Pinpoint project to
+-- view metrics using the Transactional Messaging dashboards that are built
+-- in to Amazon Pinpoint. For more information, see
+-- <https://docs.aws.amazon.com/pinpoint/latest/userguide/analytics-transactional-messages.html Transactional Messaging Charts>
+-- in the /Amazon Pinpoint User Guide/.
+eventDestination_pinpointDestination :: Lens.Lens' EventDestination (Prelude.Maybe PinpointDestination)
+eventDestination_pinpointDestination = Lens.lens (\EventDestination' {pinpointDestination} -> pinpointDestination) (\s@EventDestination' {} a -> s {pinpointDestination = a} :: EventDestination)
+
+-- | An object that defines an Amazon SNS destination for email events. You
+-- can use Amazon SNS to send notification when certain email events occur.
+eventDestination_snsDestination :: Lens.Lens' EventDestination (Prelude.Maybe SnsDestination)
+eventDestination_snsDestination = Lens.lens (\EventDestination' {snsDestination} -> snsDestination) (\s@EventDestination' {} a -> s {snsDestination = a} :: EventDestination)
+
+-- | A name that identifies the event destination.
+eventDestination_name :: Lens.Lens' EventDestination Prelude.Text
+eventDestination_name = Lens.lens (\EventDestination' {name} -> name) (\s@EventDestination' {} a -> s {name = a} :: EventDestination)
+
+-- | The types of events that Amazon SES sends to the specified event
+-- destinations.
+eventDestination_matchingEventTypes :: Lens.Lens' EventDestination [EventType]
+eventDestination_matchingEventTypes = Lens.lens (\EventDestination' {matchingEventTypes} -> matchingEventTypes) (\s@EventDestination' {} a -> s {matchingEventTypes = a} :: EventDestination) Prelude.. Lens.coerced
+
+instance Data.FromJSON EventDestination where
+  parseJSON =
+    Data.withObject
+      "EventDestination"
+      ( \x ->
+          EventDestination'
+            Prelude.<$> (x Data..:? "CloudWatchDestination")
+            Prelude.<*> (x Data..:? "Enabled")
+            Prelude.<*> (x Data..:? "KinesisFirehoseDestination")
+            Prelude.<*> (x Data..:? "PinpointDestination")
+            Prelude.<*> (x Data..:? "SnsDestination")
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> ( x
+                            Data..:? "MatchingEventTypes"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable EventDestination where
+  hashWithSalt _salt EventDestination' {..} =
+    _salt
+      `Prelude.hashWithSalt` cloudWatchDestination
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` kinesisFirehoseDestination
+      `Prelude.hashWithSalt` pinpointDestination
+      `Prelude.hashWithSalt` snsDestination
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` matchingEventTypes
+
+instance Prelude.NFData EventDestination where
+  rnf EventDestination' {..} =
+    Prelude.rnf cloudWatchDestination
+      `Prelude.seq` Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf kinesisFirehoseDestination
+      `Prelude.seq` Prelude.rnf pinpointDestination
+      `Prelude.seq` Prelude.rnf snsDestination
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf matchingEventTypes
diff --git a/gen/Amazonka/SESV2/Types/EventDestinationDefinition.hs b/gen/Amazonka/SESV2/Types/EventDestinationDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/EventDestinationDefinition.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.EventDestinationDefinition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.EventDestinationDefinition 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
+import Amazonka.SESV2.Types.CloudWatchDestination
+import Amazonka.SESV2.Types.EventType
+import Amazonka.SESV2.Types.KinesisFirehoseDestination
+import Amazonka.SESV2.Types.PinpointDestination
+import Amazonka.SESV2.Types.SnsDestination
+
+-- | An object that defines the event destination. Specifically, it defines
+-- which services receive events from emails sent using the configuration
+-- set that the event destination is associated with. Also defines the
+-- types of events that are sent to the event destination.
+--
+-- /See:/ 'newEventDestinationDefinition' smart constructor.
+data EventDestinationDefinition = EventDestinationDefinition'
+  { -- | An object that defines an Amazon CloudWatch destination for email
+    -- events. You can use Amazon CloudWatch to monitor and gain insights on
+    -- your email sending metrics.
+    cloudWatchDestination :: Prelude.Maybe CloudWatchDestination,
+    -- | If @true@, the event destination is enabled. When the event destination
+    -- is enabled, the specified event types are sent to the destinations in
+    -- this @EventDestinationDefinition@.
+    --
+    -- If @false@, the event destination is disabled. When the event
+    -- destination is disabled, events aren\'t sent to the specified
+    -- destinations.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | An object that defines an Amazon Kinesis Data Firehose destination for
+    -- email events. You can use Amazon Kinesis Data Firehose to stream data to
+    -- other services, such as Amazon S3 and Amazon Redshift.
+    kinesisFirehoseDestination :: Prelude.Maybe KinesisFirehoseDestination,
+    -- | An array that specifies which events the Amazon SES API v2 should send
+    -- to the destinations in this @EventDestinationDefinition@.
+    matchingEventTypes :: Prelude.Maybe [EventType],
+    -- | An object that defines an Amazon Pinpoint project destination for email
+    -- events. You can send email event data to a Amazon Pinpoint project to
+    -- view metrics using the Transactional Messaging dashboards that are built
+    -- in to Amazon Pinpoint. For more information, see
+    -- <https://docs.aws.amazon.com/pinpoint/latest/userguide/analytics-transactional-messages.html Transactional Messaging Charts>
+    -- in the /Amazon Pinpoint User Guide/.
+    pinpointDestination :: Prelude.Maybe PinpointDestination,
+    -- | An object that defines an Amazon SNS destination for email events. You
+    -- can use Amazon SNS to send notification when certain email events occur.
+    snsDestination :: Prelude.Maybe SnsDestination
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventDestinationDefinition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cloudWatchDestination', 'eventDestinationDefinition_cloudWatchDestination' - An object that defines an Amazon CloudWatch destination for email
+-- events. You can use Amazon CloudWatch to monitor and gain insights on
+-- your email sending metrics.
+--
+-- 'enabled', 'eventDestinationDefinition_enabled' - If @true@, the event destination is enabled. When the event destination
+-- is enabled, the specified event types are sent to the destinations in
+-- this @EventDestinationDefinition@.
+--
+-- If @false@, the event destination is disabled. When the event
+-- destination is disabled, events aren\'t sent to the specified
+-- destinations.
+--
+-- 'kinesisFirehoseDestination', 'eventDestinationDefinition_kinesisFirehoseDestination' - An object that defines an Amazon Kinesis Data Firehose destination for
+-- email events. You can use Amazon Kinesis Data Firehose to stream data to
+-- other services, such as Amazon S3 and Amazon Redshift.
+--
+-- 'matchingEventTypes', 'eventDestinationDefinition_matchingEventTypes' - An array that specifies which events the Amazon SES API v2 should send
+-- to the destinations in this @EventDestinationDefinition@.
+--
+-- 'pinpointDestination', 'eventDestinationDefinition_pinpointDestination' - An object that defines an Amazon Pinpoint project destination for email
+-- events. You can send email event data to a Amazon Pinpoint project to
+-- view metrics using the Transactional Messaging dashboards that are built
+-- in to Amazon Pinpoint. For more information, see
+-- <https://docs.aws.amazon.com/pinpoint/latest/userguide/analytics-transactional-messages.html Transactional Messaging Charts>
+-- in the /Amazon Pinpoint User Guide/.
+--
+-- 'snsDestination', 'eventDestinationDefinition_snsDestination' - An object that defines an Amazon SNS destination for email events. You
+-- can use Amazon SNS to send notification when certain email events occur.
+newEventDestinationDefinition ::
+  EventDestinationDefinition
+newEventDestinationDefinition =
+  EventDestinationDefinition'
+    { cloudWatchDestination =
+        Prelude.Nothing,
+      enabled = Prelude.Nothing,
+      kinesisFirehoseDestination = Prelude.Nothing,
+      matchingEventTypes = Prelude.Nothing,
+      pinpointDestination = Prelude.Nothing,
+      snsDestination = Prelude.Nothing
+    }
+
+-- | An object that defines an Amazon CloudWatch destination for email
+-- events. You can use Amazon CloudWatch to monitor and gain insights on
+-- your email sending metrics.
+eventDestinationDefinition_cloudWatchDestination :: Lens.Lens' EventDestinationDefinition (Prelude.Maybe CloudWatchDestination)
+eventDestinationDefinition_cloudWatchDestination = Lens.lens (\EventDestinationDefinition' {cloudWatchDestination} -> cloudWatchDestination) (\s@EventDestinationDefinition' {} a -> s {cloudWatchDestination = a} :: EventDestinationDefinition)
+
+-- | If @true@, the event destination is enabled. When the event destination
+-- is enabled, the specified event types are sent to the destinations in
+-- this @EventDestinationDefinition@.
+--
+-- If @false@, the event destination is disabled. When the event
+-- destination is disabled, events aren\'t sent to the specified
+-- destinations.
+eventDestinationDefinition_enabled :: Lens.Lens' EventDestinationDefinition (Prelude.Maybe Prelude.Bool)
+eventDestinationDefinition_enabled = Lens.lens (\EventDestinationDefinition' {enabled} -> enabled) (\s@EventDestinationDefinition' {} a -> s {enabled = a} :: EventDestinationDefinition)
+
+-- | An object that defines an Amazon Kinesis Data Firehose destination for
+-- email events. You can use Amazon Kinesis Data Firehose to stream data to
+-- other services, such as Amazon S3 and Amazon Redshift.
+eventDestinationDefinition_kinesisFirehoseDestination :: Lens.Lens' EventDestinationDefinition (Prelude.Maybe KinesisFirehoseDestination)
+eventDestinationDefinition_kinesisFirehoseDestination = Lens.lens (\EventDestinationDefinition' {kinesisFirehoseDestination} -> kinesisFirehoseDestination) (\s@EventDestinationDefinition' {} a -> s {kinesisFirehoseDestination = a} :: EventDestinationDefinition)
+
+-- | An array that specifies which events the Amazon SES API v2 should send
+-- to the destinations in this @EventDestinationDefinition@.
+eventDestinationDefinition_matchingEventTypes :: Lens.Lens' EventDestinationDefinition (Prelude.Maybe [EventType])
+eventDestinationDefinition_matchingEventTypes = Lens.lens (\EventDestinationDefinition' {matchingEventTypes} -> matchingEventTypes) (\s@EventDestinationDefinition' {} a -> s {matchingEventTypes = a} :: EventDestinationDefinition) Prelude.. Lens.mapping Lens.coerced
+
+-- | An object that defines an Amazon Pinpoint project destination for email
+-- events. You can send email event data to a Amazon Pinpoint project to
+-- view metrics using the Transactional Messaging dashboards that are built
+-- in to Amazon Pinpoint. For more information, see
+-- <https://docs.aws.amazon.com/pinpoint/latest/userguide/analytics-transactional-messages.html Transactional Messaging Charts>
+-- in the /Amazon Pinpoint User Guide/.
+eventDestinationDefinition_pinpointDestination :: Lens.Lens' EventDestinationDefinition (Prelude.Maybe PinpointDestination)
+eventDestinationDefinition_pinpointDestination = Lens.lens (\EventDestinationDefinition' {pinpointDestination} -> pinpointDestination) (\s@EventDestinationDefinition' {} a -> s {pinpointDestination = a} :: EventDestinationDefinition)
+
+-- | An object that defines an Amazon SNS destination for email events. You
+-- can use Amazon SNS to send notification when certain email events occur.
+eventDestinationDefinition_snsDestination :: Lens.Lens' EventDestinationDefinition (Prelude.Maybe SnsDestination)
+eventDestinationDefinition_snsDestination = Lens.lens (\EventDestinationDefinition' {snsDestination} -> snsDestination) (\s@EventDestinationDefinition' {} a -> s {snsDestination = a} :: EventDestinationDefinition)
+
+instance Prelude.Hashable EventDestinationDefinition where
+  hashWithSalt _salt EventDestinationDefinition' {..} =
+    _salt
+      `Prelude.hashWithSalt` cloudWatchDestination
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` kinesisFirehoseDestination
+      `Prelude.hashWithSalt` matchingEventTypes
+      `Prelude.hashWithSalt` pinpointDestination
+      `Prelude.hashWithSalt` snsDestination
+
+instance Prelude.NFData EventDestinationDefinition where
+  rnf EventDestinationDefinition' {..} =
+    Prelude.rnf cloudWatchDestination
+      `Prelude.seq` Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf kinesisFirehoseDestination
+      `Prelude.seq` Prelude.rnf matchingEventTypes
+      `Prelude.seq` Prelude.rnf pinpointDestination
+      `Prelude.seq` Prelude.rnf snsDestination
+
+instance Data.ToJSON EventDestinationDefinition where
+  toJSON EventDestinationDefinition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CloudWatchDestination" Data..=)
+              Prelude.<$> cloudWatchDestination,
+            ("Enabled" Data..=) Prelude.<$> enabled,
+            ("KinesisFirehoseDestination" Data..=)
+              Prelude.<$> kinesisFirehoseDestination,
+            ("MatchingEventTypes" Data..=)
+              Prelude.<$> matchingEventTypes,
+            ("PinpointDestination" Data..=)
+              Prelude.<$> pinpointDestination,
+            ("SnsDestination" Data..=)
+              Prelude.<$> snsDestination
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/EventType.hs b/gen/Amazonka/SESV2/Types/EventType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/EventType.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.SESV2.Types.EventType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.EventType
+  ( EventType
+      ( ..,
+        EventType_BOUNCE,
+        EventType_CLICK,
+        EventType_COMPLAINT,
+        EventType_DELIVERY,
+        EventType_DELIVERY_DELAY,
+        EventType_OPEN,
+        EventType_REJECT,
+        EventType_RENDERING_FAILURE,
+        EventType_SEND,
+        EventType_SUBSCRIPTION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An email sending event type. For example, email sends, opens, and
+-- bounces are all email events.
+newtype EventType = EventType'
+  { fromEventType ::
+      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 EventType_BOUNCE :: EventType
+pattern EventType_BOUNCE = EventType' "BOUNCE"
+
+pattern EventType_CLICK :: EventType
+pattern EventType_CLICK = EventType' "CLICK"
+
+pattern EventType_COMPLAINT :: EventType
+pattern EventType_COMPLAINT = EventType' "COMPLAINT"
+
+pattern EventType_DELIVERY :: EventType
+pattern EventType_DELIVERY = EventType' "DELIVERY"
+
+pattern EventType_DELIVERY_DELAY :: EventType
+pattern EventType_DELIVERY_DELAY = EventType' "DELIVERY_DELAY"
+
+pattern EventType_OPEN :: EventType
+pattern EventType_OPEN = EventType' "OPEN"
+
+pattern EventType_REJECT :: EventType
+pattern EventType_REJECT = EventType' "REJECT"
+
+pattern EventType_RENDERING_FAILURE :: EventType
+pattern EventType_RENDERING_FAILURE = EventType' "RENDERING_FAILURE"
+
+pattern EventType_SEND :: EventType
+pattern EventType_SEND = EventType' "SEND"
+
+pattern EventType_SUBSCRIPTION :: EventType
+pattern EventType_SUBSCRIPTION = EventType' "SUBSCRIPTION"
+
+{-# COMPLETE
+  EventType_BOUNCE,
+  EventType_CLICK,
+  EventType_COMPLAINT,
+  EventType_DELIVERY,
+  EventType_DELIVERY_DELAY,
+  EventType_OPEN,
+  EventType_REJECT,
+  EventType_RENDERING_FAILURE,
+  EventType_SEND,
+  EventType_SUBSCRIPTION,
+  EventType'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/FailureInfo.hs b/gen/Amazonka/SESV2/Types/FailureInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/FailureInfo.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.SESV2.Types.FailureInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.FailureInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that contains the failure details about an import job.
+--
+-- /See:/ 'newFailureInfo' smart constructor.
+data FailureInfo = FailureInfo'
+  { -- | A message about why the import job failed.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | An Amazon S3 presigned URL that contains all the failed records and
+    -- related information.
+    failedRecordsS3Url :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FailureInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorMessage', 'failureInfo_errorMessage' - A message about why the import job failed.
+--
+-- 'failedRecordsS3Url', 'failureInfo_failedRecordsS3Url' - An Amazon S3 presigned URL that contains all the failed records and
+-- related information.
+newFailureInfo ::
+  FailureInfo
+newFailureInfo =
+  FailureInfo'
+    { errorMessage = Prelude.Nothing,
+      failedRecordsS3Url = Prelude.Nothing
+    }
+
+-- | A message about why the import job failed.
+failureInfo_errorMessage :: Lens.Lens' FailureInfo (Prelude.Maybe Prelude.Text)
+failureInfo_errorMessage = Lens.lens (\FailureInfo' {errorMessage} -> errorMessage) (\s@FailureInfo' {} a -> s {errorMessage = a} :: FailureInfo)
+
+-- | An Amazon S3 presigned URL that contains all the failed records and
+-- related information.
+failureInfo_failedRecordsS3Url :: Lens.Lens' FailureInfo (Prelude.Maybe Prelude.Text)
+failureInfo_failedRecordsS3Url = Lens.lens (\FailureInfo' {failedRecordsS3Url} -> failedRecordsS3Url) (\s@FailureInfo' {} a -> s {failedRecordsS3Url = a} :: FailureInfo)
+
+instance Data.FromJSON FailureInfo where
+  parseJSON =
+    Data.withObject
+      "FailureInfo"
+      ( \x ->
+          FailureInfo'
+            Prelude.<$> (x Data..:? "ErrorMessage")
+            Prelude.<*> (x Data..:? "FailedRecordsS3Url")
+      )
+
+instance Prelude.Hashable FailureInfo where
+  hashWithSalt _salt FailureInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` failedRecordsS3Url
+
+instance Prelude.NFData FailureInfo where
+  rnf FailureInfo' {..} =
+    Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf failedRecordsS3Url
diff --git a/gen/Amazonka/SESV2/Types/FeatureStatus.hs b/gen/Amazonka/SESV2/Types/FeatureStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/FeatureStatus.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.FeatureStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.FeatureStatus
+  ( FeatureStatus
+      ( ..,
+        FeatureStatus_DISABLED,
+        FeatureStatus_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FeatureStatus = FeatureStatus'
+  { fromFeatureStatus ::
+      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 FeatureStatus_DISABLED :: FeatureStatus
+pattern FeatureStatus_DISABLED = FeatureStatus' "DISABLED"
+
+pattern FeatureStatus_ENABLED :: FeatureStatus
+pattern FeatureStatus_ENABLED = FeatureStatus' "ENABLED"
+
+{-# COMPLETE
+  FeatureStatus_DISABLED,
+  FeatureStatus_ENABLED,
+  FeatureStatus'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/GuardianAttributes.hs b/gen/Amazonka/SESV2/Types/GuardianAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/GuardianAttributes.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.SESV2.Types.GuardianAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.GuardianAttributes 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
+import Amazonka.SESV2.Types.FeatureStatus
+
+-- | An object containing additional settings for your VDM configuration as
+-- applicable to the Guardian.
+--
+-- /See:/ 'newGuardianAttributes' smart constructor.
+data GuardianAttributes = GuardianAttributes'
+  { -- | Specifies the status of your VDM optimized shared delivery. Can be one
+    -- of the following:
+    --
+    -- -   @ENABLED@ – Amazon SES enables optimized shared delivery for your
+    --     account.
+    --
+    -- -   @DISABLED@ – Amazon SES disables optimized shared delivery for your
+    --     account.
+    optimizedSharedDelivery :: Prelude.Maybe FeatureStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GuardianAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'optimizedSharedDelivery', 'guardianAttributes_optimizedSharedDelivery' - Specifies the status of your VDM optimized shared delivery. Can be one
+-- of the following:
+--
+-- -   @ENABLED@ – Amazon SES enables optimized shared delivery for your
+--     account.
+--
+-- -   @DISABLED@ – Amazon SES disables optimized shared delivery for your
+--     account.
+newGuardianAttributes ::
+  GuardianAttributes
+newGuardianAttributes =
+  GuardianAttributes'
+    { optimizedSharedDelivery =
+        Prelude.Nothing
+    }
+
+-- | Specifies the status of your VDM optimized shared delivery. Can be one
+-- of the following:
+--
+-- -   @ENABLED@ – Amazon SES enables optimized shared delivery for your
+--     account.
+--
+-- -   @DISABLED@ – Amazon SES disables optimized shared delivery for your
+--     account.
+guardianAttributes_optimizedSharedDelivery :: Lens.Lens' GuardianAttributes (Prelude.Maybe FeatureStatus)
+guardianAttributes_optimizedSharedDelivery = Lens.lens (\GuardianAttributes' {optimizedSharedDelivery} -> optimizedSharedDelivery) (\s@GuardianAttributes' {} a -> s {optimizedSharedDelivery = a} :: GuardianAttributes)
+
+instance Data.FromJSON GuardianAttributes where
+  parseJSON =
+    Data.withObject
+      "GuardianAttributes"
+      ( \x ->
+          GuardianAttributes'
+            Prelude.<$> (x Data..:? "OptimizedSharedDelivery")
+      )
+
+instance Prelude.Hashable GuardianAttributes where
+  hashWithSalt _salt GuardianAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` optimizedSharedDelivery
+
+instance Prelude.NFData GuardianAttributes where
+  rnf GuardianAttributes' {..} =
+    Prelude.rnf optimizedSharedDelivery
+
+instance Data.ToJSON GuardianAttributes where
+  toJSON GuardianAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("OptimizedSharedDelivery" Data..=)
+              Prelude.<$> optimizedSharedDelivery
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/GuardianOptions.hs b/gen/Amazonka/SESV2/Types/GuardianOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/GuardianOptions.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.SESV2.Types.GuardianOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.GuardianOptions 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
+import Amazonka.SESV2.Types.FeatureStatus
+
+-- | An object containing additional settings for your VDM configuration as
+-- applicable to the Guardian.
+--
+-- /See:/ 'newGuardianOptions' smart constructor.
+data GuardianOptions = GuardianOptions'
+  { -- | Specifies the status of your VDM optimized shared delivery. Can be one
+    -- of the following:
+    --
+    -- -   @ENABLED@ – Amazon SES enables optimized shared delivery for the
+    --     configuration set.
+    --
+    -- -   @DISABLED@ – Amazon SES disables optimized shared delivery for the
+    --     configuration set.
+    optimizedSharedDelivery :: Prelude.Maybe FeatureStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GuardianOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'optimizedSharedDelivery', 'guardianOptions_optimizedSharedDelivery' - Specifies the status of your VDM optimized shared delivery. Can be one
+-- of the following:
+--
+-- -   @ENABLED@ – Amazon SES enables optimized shared delivery for the
+--     configuration set.
+--
+-- -   @DISABLED@ – Amazon SES disables optimized shared delivery for the
+--     configuration set.
+newGuardianOptions ::
+  GuardianOptions
+newGuardianOptions =
+  GuardianOptions'
+    { optimizedSharedDelivery =
+        Prelude.Nothing
+    }
+
+-- | Specifies the status of your VDM optimized shared delivery. Can be one
+-- of the following:
+--
+-- -   @ENABLED@ – Amazon SES enables optimized shared delivery for the
+--     configuration set.
+--
+-- -   @DISABLED@ – Amazon SES disables optimized shared delivery for the
+--     configuration set.
+guardianOptions_optimizedSharedDelivery :: Lens.Lens' GuardianOptions (Prelude.Maybe FeatureStatus)
+guardianOptions_optimizedSharedDelivery = Lens.lens (\GuardianOptions' {optimizedSharedDelivery} -> optimizedSharedDelivery) (\s@GuardianOptions' {} a -> s {optimizedSharedDelivery = a} :: GuardianOptions)
+
+instance Data.FromJSON GuardianOptions where
+  parseJSON =
+    Data.withObject
+      "GuardianOptions"
+      ( \x ->
+          GuardianOptions'
+            Prelude.<$> (x Data..:? "OptimizedSharedDelivery")
+      )
+
+instance Prelude.Hashable GuardianOptions where
+  hashWithSalt _salt GuardianOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` optimizedSharedDelivery
+
+instance Prelude.NFData GuardianOptions where
+  rnf GuardianOptions' {..} =
+    Prelude.rnf optimizedSharedDelivery
+
+instance Data.ToJSON GuardianOptions where
+  toJSON GuardianOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("OptimizedSharedDelivery" Data..=)
+              Prelude.<$> optimizedSharedDelivery
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/IdentityInfo.hs b/gen/Amazonka/SESV2/Types/IdentityInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/IdentityInfo.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.SESV2.Types.IdentityInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.IdentityInfo 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
+import Amazonka.SESV2.Types.IdentityType
+import Amazonka.SESV2.Types.VerificationStatus
+
+-- | Information about an email identity.
+--
+-- /See:/ 'newIdentityInfo' smart constructor.
+data IdentityInfo = IdentityInfo'
+  { -- | The address or domain of the identity.
+    identityName :: Prelude.Maybe Prelude.Text,
+    -- | The email identity type. Note: the @MANAGED_DOMAIN@ type is not
+    -- supported for email identity types.
+    identityType :: Prelude.Maybe IdentityType,
+    -- | Indicates whether or not you can send email from the identity.
+    --
+    -- An /identity/ is an email address or domain that you send email from.
+    -- Before you can send email from an identity, you have to demostrate that
+    -- you own the identity, and that you authorize Amazon SES to send email
+    -- from that identity.
+    sendingEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The verification status of the identity. The status can be one of the
+    -- following:
+    --
+    -- -   @PENDING@ – The verification process was initiated, but Amazon SES
+    --     hasn\'t yet been able to verify the identity.
+    --
+    -- -   @SUCCESS@ – The verification process completed successfully.
+    --
+    -- -   @FAILED@ – The verification process failed.
+    --
+    -- -   @TEMPORARY_FAILURE@ – A temporary issue is preventing Amazon SES
+    --     from determining the verification status of the identity.
+    --
+    -- -   @NOT_STARTED@ – The verification process hasn\'t been initiated for
+    --     the identity.
+    verificationStatus :: Prelude.Maybe VerificationStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IdentityInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'identityName', 'identityInfo_identityName' - The address or domain of the identity.
+--
+-- 'identityType', 'identityInfo_identityType' - The email identity type. Note: the @MANAGED_DOMAIN@ type is not
+-- supported for email identity types.
+--
+-- 'sendingEnabled', 'identityInfo_sendingEnabled' - Indicates whether or not you can send email from the identity.
+--
+-- An /identity/ is an email address or domain that you send email from.
+-- Before you can send email from an identity, you have to demostrate that
+-- you own the identity, and that you authorize Amazon SES to send email
+-- from that identity.
+--
+-- 'verificationStatus', 'identityInfo_verificationStatus' - The verification status of the identity. The status can be one of the
+-- following:
+--
+-- -   @PENDING@ – The verification process was initiated, but Amazon SES
+--     hasn\'t yet been able to verify the identity.
+--
+-- -   @SUCCESS@ – The verification process completed successfully.
+--
+-- -   @FAILED@ – The verification process failed.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue is preventing Amazon SES
+--     from determining the verification status of the identity.
+--
+-- -   @NOT_STARTED@ – The verification process hasn\'t been initiated for
+--     the identity.
+newIdentityInfo ::
+  IdentityInfo
+newIdentityInfo =
+  IdentityInfo'
+    { identityName = Prelude.Nothing,
+      identityType = Prelude.Nothing,
+      sendingEnabled = Prelude.Nothing,
+      verificationStatus = Prelude.Nothing
+    }
+
+-- | The address or domain of the identity.
+identityInfo_identityName :: Lens.Lens' IdentityInfo (Prelude.Maybe Prelude.Text)
+identityInfo_identityName = Lens.lens (\IdentityInfo' {identityName} -> identityName) (\s@IdentityInfo' {} a -> s {identityName = a} :: IdentityInfo)
+
+-- | The email identity type. Note: the @MANAGED_DOMAIN@ type is not
+-- supported for email identity types.
+identityInfo_identityType :: Lens.Lens' IdentityInfo (Prelude.Maybe IdentityType)
+identityInfo_identityType = Lens.lens (\IdentityInfo' {identityType} -> identityType) (\s@IdentityInfo' {} a -> s {identityType = a} :: IdentityInfo)
+
+-- | Indicates whether or not you can send email from the identity.
+--
+-- An /identity/ is an email address or domain that you send email from.
+-- Before you can send email from an identity, you have to demostrate that
+-- you own the identity, and that you authorize Amazon SES to send email
+-- from that identity.
+identityInfo_sendingEnabled :: Lens.Lens' IdentityInfo (Prelude.Maybe Prelude.Bool)
+identityInfo_sendingEnabled = Lens.lens (\IdentityInfo' {sendingEnabled} -> sendingEnabled) (\s@IdentityInfo' {} a -> s {sendingEnabled = a} :: IdentityInfo)
+
+-- | The verification status of the identity. The status can be one of the
+-- following:
+--
+-- -   @PENDING@ – The verification process was initiated, but Amazon SES
+--     hasn\'t yet been able to verify the identity.
+--
+-- -   @SUCCESS@ – The verification process completed successfully.
+--
+-- -   @FAILED@ – The verification process failed.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue is preventing Amazon SES
+--     from determining the verification status of the identity.
+--
+-- -   @NOT_STARTED@ – The verification process hasn\'t been initiated for
+--     the identity.
+identityInfo_verificationStatus :: Lens.Lens' IdentityInfo (Prelude.Maybe VerificationStatus)
+identityInfo_verificationStatus = Lens.lens (\IdentityInfo' {verificationStatus} -> verificationStatus) (\s@IdentityInfo' {} a -> s {verificationStatus = a} :: IdentityInfo)
+
+instance Data.FromJSON IdentityInfo where
+  parseJSON =
+    Data.withObject
+      "IdentityInfo"
+      ( \x ->
+          IdentityInfo'
+            Prelude.<$> (x Data..:? "IdentityName")
+            Prelude.<*> (x Data..:? "IdentityType")
+            Prelude.<*> (x Data..:? "SendingEnabled")
+            Prelude.<*> (x Data..:? "VerificationStatus")
+      )
+
+instance Prelude.Hashable IdentityInfo where
+  hashWithSalt _salt IdentityInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` identityName
+      `Prelude.hashWithSalt` identityType
+      `Prelude.hashWithSalt` sendingEnabled
+      `Prelude.hashWithSalt` verificationStatus
+
+instance Prelude.NFData IdentityInfo where
+  rnf IdentityInfo' {..} =
+    Prelude.rnf identityName
+      `Prelude.seq` Prelude.rnf identityType
+      `Prelude.seq` Prelude.rnf sendingEnabled
+      `Prelude.seq` Prelude.rnf verificationStatus
diff --git a/gen/Amazonka/SESV2/Types/IdentityType.hs b/gen/Amazonka/SESV2/Types/IdentityType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/IdentityType.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.SESV2.Types.IdentityType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.IdentityType
+  ( IdentityType
+      ( ..,
+        IdentityType_DOMAIN,
+        IdentityType_EMAIL_ADDRESS,
+        IdentityType_MANAGED_DOMAIN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype IdentityType = IdentityType'
+  { fromIdentityType ::
+      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 IdentityType_DOMAIN :: IdentityType
+pattern IdentityType_DOMAIN = IdentityType' "DOMAIN"
+
+pattern IdentityType_EMAIL_ADDRESS :: IdentityType
+pattern IdentityType_EMAIL_ADDRESS = IdentityType' "EMAIL_ADDRESS"
+
+pattern IdentityType_MANAGED_DOMAIN :: IdentityType
+pattern IdentityType_MANAGED_DOMAIN = IdentityType' "MANAGED_DOMAIN"
+
+{-# COMPLETE
+  IdentityType_DOMAIN,
+  IdentityType_EMAIL_ADDRESS,
+  IdentityType_MANAGED_DOMAIN,
+  IdentityType'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/ImportDataSource.hs b/gen/Amazonka/SESV2/Types/ImportDataSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/ImportDataSource.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.SESV2.Types.ImportDataSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.ImportDataSource 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
+import Amazonka.SESV2.Types.DataFormat
+
+-- | An object that contains details about the data source of the import job.
+--
+-- /See:/ 'newImportDataSource' smart constructor.
+data ImportDataSource = ImportDataSource'
+  { -- | An Amazon S3 URL in the format s3:\/\//\<bucket_name>/\//\<object>/.
+    s3Url :: Prelude.Text,
+    -- | The data format of the import job\'s data source.
+    dataFormat :: DataFormat
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportDataSource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Url', 'importDataSource_s3Url' - An Amazon S3 URL in the format s3:\/\//\<bucket_name>/\//\<object>/.
+--
+-- 'dataFormat', 'importDataSource_dataFormat' - The data format of the import job\'s data source.
+newImportDataSource ::
+  -- | 's3Url'
+  Prelude.Text ->
+  -- | 'dataFormat'
+  DataFormat ->
+  ImportDataSource
+newImportDataSource pS3Url_ pDataFormat_ =
+  ImportDataSource'
+    { s3Url = pS3Url_,
+      dataFormat = pDataFormat_
+    }
+
+-- | An Amazon S3 URL in the format s3:\/\//\<bucket_name>/\//\<object>/.
+importDataSource_s3Url :: Lens.Lens' ImportDataSource Prelude.Text
+importDataSource_s3Url = Lens.lens (\ImportDataSource' {s3Url} -> s3Url) (\s@ImportDataSource' {} a -> s {s3Url = a} :: ImportDataSource)
+
+-- | The data format of the import job\'s data source.
+importDataSource_dataFormat :: Lens.Lens' ImportDataSource DataFormat
+importDataSource_dataFormat = Lens.lens (\ImportDataSource' {dataFormat} -> dataFormat) (\s@ImportDataSource' {} a -> s {dataFormat = a} :: ImportDataSource)
+
+instance Data.FromJSON ImportDataSource where
+  parseJSON =
+    Data.withObject
+      "ImportDataSource"
+      ( \x ->
+          ImportDataSource'
+            Prelude.<$> (x Data..: "S3Url")
+            Prelude.<*> (x Data..: "DataFormat")
+      )
+
+instance Prelude.Hashable ImportDataSource where
+  hashWithSalt _salt ImportDataSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` s3Url
+      `Prelude.hashWithSalt` dataFormat
+
+instance Prelude.NFData ImportDataSource where
+  rnf ImportDataSource' {..} =
+    Prelude.rnf s3Url
+      `Prelude.seq` Prelude.rnf dataFormat
+
+instance Data.ToJSON ImportDataSource where
+  toJSON ImportDataSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("S3Url" Data..= s3Url),
+            Prelude.Just ("DataFormat" Data..= dataFormat)
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/ImportDestination.hs b/gen/Amazonka/SESV2/Types/ImportDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/ImportDestination.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.SESV2.Types.ImportDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.ImportDestination 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
+import Amazonka.SESV2.Types.ContactListDestination
+import Amazonka.SESV2.Types.SuppressionListDestination
+
+-- | An object that contains details about the resource destination the
+-- import job is going to target.
+--
+-- /See:/ 'newImportDestination' smart constructor.
+data ImportDestination = ImportDestination'
+  { -- | An object that contains the action of the import job towards a contact
+    -- list.
+    contactListDestination :: Prelude.Maybe ContactListDestination,
+    -- | An object that contains the action of the import job towards suppression
+    -- list.
+    suppressionListDestination :: Prelude.Maybe SuppressionListDestination
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactListDestination', 'importDestination_contactListDestination' - An object that contains the action of the import job towards a contact
+-- list.
+--
+-- 'suppressionListDestination', 'importDestination_suppressionListDestination' - An object that contains the action of the import job towards suppression
+-- list.
+newImportDestination ::
+  ImportDestination
+newImportDestination =
+  ImportDestination'
+    { contactListDestination =
+        Prelude.Nothing,
+      suppressionListDestination = Prelude.Nothing
+    }
+
+-- | An object that contains the action of the import job towards a contact
+-- list.
+importDestination_contactListDestination :: Lens.Lens' ImportDestination (Prelude.Maybe ContactListDestination)
+importDestination_contactListDestination = Lens.lens (\ImportDestination' {contactListDestination} -> contactListDestination) (\s@ImportDestination' {} a -> s {contactListDestination = a} :: ImportDestination)
+
+-- | An object that contains the action of the import job towards suppression
+-- list.
+importDestination_suppressionListDestination :: Lens.Lens' ImportDestination (Prelude.Maybe SuppressionListDestination)
+importDestination_suppressionListDestination = Lens.lens (\ImportDestination' {suppressionListDestination} -> suppressionListDestination) (\s@ImportDestination' {} a -> s {suppressionListDestination = a} :: ImportDestination)
+
+instance Data.FromJSON ImportDestination where
+  parseJSON =
+    Data.withObject
+      "ImportDestination"
+      ( \x ->
+          ImportDestination'
+            Prelude.<$> (x Data..:? "ContactListDestination")
+            Prelude.<*> (x Data..:? "SuppressionListDestination")
+      )
+
+instance Prelude.Hashable ImportDestination where
+  hashWithSalt _salt ImportDestination' {..} =
+    _salt
+      `Prelude.hashWithSalt` contactListDestination
+      `Prelude.hashWithSalt` suppressionListDestination
+
+instance Prelude.NFData ImportDestination where
+  rnf ImportDestination' {..} =
+    Prelude.rnf contactListDestination
+      `Prelude.seq` Prelude.rnf suppressionListDestination
+
+instance Data.ToJSON ImportDestination where
+  toJSON ImportDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ContactListDestination" Data..=)
+              Prelude.<$> contactListDestination,
+            ("SuppressionListDestination" Data..=)
+              Prelude.<$> suppressionListDestination
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/ImportDestinationType.hs b/gen/Amazonka/SESV2/Types/ImportDestinationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/ImportDestinationType.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.SESV2.Types.ImportDestinationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.ImportDestinationType
+  ( ImportDestinationType
+      ( ..,
+        ImportDestinationType_CONTACT_LIST,
+        ImportDestinationType_SUPPRESSION_LIST
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The destination of the import job, which can be used to list import jobs
+-- that have a certain @ImportDestinationType@.
+newtype ImportDestinationType = ImportDestinationType'
+  { fromImportDestinationType ::
+      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 ImportDestinationType_CONTACT_LIST :: ImportDestinationType
+pattern ImportDestinationType_CONTACT_LIST = ImportDestinationType' "CONTACT_LIST"
+
+pattern ImportDestinationType_SUPPRESSION_LIST :: ImportDestinationType
+pattern ImportDestinationType_SUPPRESSION_LIST = ImportDestinationType' "SUPPRESSION_LIST"
+
+{-# COMPLETE
+  ImportDestinationType_CONTACT_LIST,
+  ImportDestinationType_SUPPRESSION_LIST,
+  ImportDestinationType'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/ImportJobSummary.hs b/gen/Amazonka/SESV2/Types/ImportJobSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/ImportJobSummary.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.SESV2.Types.ImportJobSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.ImportJobSummary 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
+import Amazonka.SESV2.Types.ImportDestination
+import Amazonka.SESV2.Types.JobStatus
+
+-- | A summary of the import job.
+--
+-- /See:/ 'newImportJobSummary' smart constructor.
+data ImportJobSummary = ImportJobSummary'
+  { -- | The date and time when the import job was created.
+    createdTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The number of records that failed processing because of invalid input or
+    -- other reasons.
+    failedRecordsCount :: Prelude.Maybe Prelude.Int,
+    importDestination :: Prelude.Maybe ImportDestination,
+    jobId :: Prelude.Maybe Prelude.Text,
+    jobStatus :: Prelude.Maybe JobStatus,
+    -- | The current number of records processed.
+    processedRecordsCount :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportJobSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdTimestamp', 'importJobSummary_createdTimestamp' - The date and time when the import job was created.
+--
+-- 'failedRecordsCount', 'importJobSummary_failedRecordsCount' - The number of records that failed processing because of invalid input or
+-- other reasons.
+--
+-- 'importDestination', 'importJobSummary_importDestination' - Undocumented member.
+--
+-- 'jobId', 'importJobSummary_jobId' - Undocumented member.
+--
+-- 'jobStatus', 'importJobSummary_jobStatus' - Undocumented member.
+--
+-- 'processedRecordsCount', 'importJobSummary_processedRecordsCount' - The current number of records processed.
+newImportJobSummary ::
+  ImportJobSummary
+newImportJobSummary =
+  ImportJobSummary'
+    { createdTimestamp =
+        Prelude.Nothing,
+      failedRecordsCount = Prelude.Nothing,
+      importDestination = Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      jobStatus = Prelude.Nothing,
+      processedRecordsCount = Prelude.Nothing
+    }
+
+-- | The date and time when the import job was created.
+importJobSummary_createdTimestamp :: Lens.Lens' ImportJobSummary (Prelude.Maybe Prelude.UTCTime)
+importJobSummary_createdTimestamp = Lens.lens (\ImportJobSummary' {createdTimestamp} -> createdTimestamp) (\s@ImportJobSummary' {} a -> s {createdTimestamp = a} :: ImportJobSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The number of records that failed processing because of invalid input or
+-- other reasons.
+importJobSummary_failedRecordsCount :: Lens.Lens' ImportJobSummary (Prelude.Maybe Prelude.Int)
+importJobSummary_failedRecordsCount = Lens.lens (\ImportJobSummary' {failedRecordsCount} -> failedRecordsCount) (\s@ImportJobSummary' {} a -> s {failedRecordsCount = a} :: ImportJobSummary)
+
+-- | Undocumented member.
+importJobSummary_importDestination :: Lens.Lens' ImportJobSummary (Prelude.Maybe ImportDestination)
+importJobSummary_importDestination = Lens.lens (\ImportJobSummary' {importDestination} -> importDestination) (\s@ImportJobSummary' {} a -> s {importDestination = a} :: ImportJobSummary)
+
+-- | Undocumented member.
+importJobSummary_jobId :: Lens.Lens' ImportJobSummary (Prelude.Maybe Prelude.Text)
+importJobSummary_jobId = Lens.lens (\ImportJobSummary' {jobId} -> jobId) (\s@ImportJobSummary' {} a -> s {jobId = a} :: ImportJobSummary)
+
+-- | Undocumented member.
+importJobSummary_jobStatus :: Lens.Lens' ImportJobSummary (Prelude.Maybe JobStatus)
+importJobSummary_jobStatus = Lens.lens (\ImportJobSummary' {jobStatus} -> jobStatus) (\s@ImportJobSummary' {} a -> s {jobStatus = a} :: ImportJobSummary)
+
+-- | The current number of records processed.
+importJobSummary_processedRecordsCount :: Lens.Lens' ImportJobSummary (Prelude.Maybe Prelude.Int)
+importJobSummary_processedRecordsCount = Lens.lens (\ImportJobSummary' {processedRecordsCount} -> processedRecordsCount) (\s@ImportJobSummary' {} a -> s {processedRecordsCount = a} :: ImportJobSummary)
+
+instance Data.FromJSON ImportJobSummary where
+  parseJSON =
+    Data.withObject
+      "ImportJobSummary"
+      ( \x ->
+          ImportJobSummary'
+            Prelude.<$> (x Data..:? "CreatedTimestamp")
+            Prelude.<*> (x Data..:? "FailedRecordsCount")
+            Prelude.<*> (x Data..:? "ImportDestination")
+            Prelude.<*> (x Data..:? "JobId")
+            Prelude.<*> (x Data..:? "JobStatus")
+            Prelude.<*> (x Data..:? "ProcessedRecordsCount")
+      )
+
+instance Prelude.Hashable ImportJobSummary where
+  hashWithSalt _salt ImportJobSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdTimestamp
+      `Prelude.hashWithSalt` failedRecordsCount
+      `Prelude.hashWithSalt` importDestination
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` jobStatus
+      `Prelude.hashWithSalt` processedRecordsCount
+
+instance Prelude.NFData ImportJobSummary where
+  rnf ImportJobSummary' {..} =
+    Prelude.rnf createdTimestamp
+      `Prelude.seq` Prelude.rnf failedRecordsCount
+      `Prelude.seq` Prelude.rnf importDestination
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf jobStatus
+      `Prelude.seq` Prelude.rnf processedRecordsCount
diff --git a/gen/Amazonka/SESV2/Types/InboxPlacementTrackingOption.hs b/gen/Amazonka/SESV2/Types/InboxPlacementTrackingOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/InboxPlacementTrackingOption.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.SESV2.Types.InboxPlacementTrackingOption
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.InboxPlacementTrackingOption where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that contains information about the inbox placement data
+-- settings for a verified domain that’s associated with your Amazon Web
+-- Services account. This data is available only if you enabled the
+-- Deliverability dashboard for the domain.
+--
+-- /See:/ 'newInboxPlacementTrackingOption' smart constructor.
+data InboxPlacementTrackingOption = InboxPlacementTrackingOption'
+  { -- | Specifies whether inbox placement data is being tracked for the domain.
+    global :: Prelude.Maybe Prelude.Bool,
+    -- | An array of strings, one for each major email provider that the inbox
+    -- placement data applies to.
+    trackedIsps :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InboxPlacementTrackingOption' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'global', 'inboxPlacementTrackingOption_global' - Specifies whether inbox placement data is being tracked for the domain.
+--
+-- 'trackedIsps', 'inboxPlacementTrackingOption_trackedIsps' - An array of strings, one for each major email provider that the inbox
+-- placement data applies to.
+newInboxPlacementTrackingOption ::
+  InboxPlacementTrackingOption
+newInboxPlacementTrackingOption =
+  InboxPlacementTrackingOption'
+    { global =
+        Prelude.Nothing,
+      trackedIsps = Prelude.Nothing
+    }
+
+-- | Specifies whether inbox placement data is being tracked for the domain.
+inboxPlacementTrackingOption_global :: Lens.Lens' InboxPlacementTrackingOption (Prelude.Maybe Prelude.Bool)
+inboxPlacementTrackingOption_global = Lens.lens (\InboxPlacementTrackingOption' {global} -> global) (\s@InboxPlacementTrackingOption' {} a -> s {global = a} :: InboxPlacementTrackingOption)
+
+-- | An array of strings, one for each major email provider that the inbox
+-- placement data applies to.
+inboxPlacementTrackingOption_trackedIsps :: Lens.Lens' InboxPlacementTrackingOption (Prelude.Maybe [Prelude.Text])
+inboxPlacementTrackingOption_trackedIsps = Lens.lens (\InboxPlacementTrackingOption' {trackedIsps} -> trackedIsps) (\s@InboxPlacementTrackingOption' {} a -> s {trackedIsps = a} :: InboxPlacementTrackingOption) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON InboxPlacementTrackingOption where
+  parseJSON =
+    Data.withObject
+      "InboxPlacementTrackingOption"
+      ( \x ->
+          InboxPlacementTrackingOption'
+            Prelude.<$> (x Data..:? "Global")
+            Prelude.<*> (x Data..:? "TrackedIsps" Data..!= Prelude.mempty)
+      )
+
+instance
+  Prelude.Hashable
+    InboxPlacementTrackingOption
+  where
+  hashWithSalt _salt InboxPlacementTrackingOption' {..} =
+    _salt
+      `Prelude.hashWithSalt` global
+      `Prelude.hashWithSalt` trackedIsps
+
+instance Prelude.NFData InboxPlacementTrackingOption where
+  rnf InboxPlacementTrackingOption' {..} =
+    Prelude.rnf global
+      `Prelude.seq` Prelude.rnf trackedIsps
+
+instance Data.ToJSON InboxPlacementTrackingOption where
+  toJSON InboxPlacementTrackingOption' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Global" Data..=) Prelude.<$> global,
+            ("TrackedIsps" Data..=) Prelude.<$> trackedIsps
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/IspPlacement.hs b/gen/Amazonka/SESV2/Types/IspPlacement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/IspPlacement.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.SESV2.Types.IspPlacement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.IspPlacement 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
+import Amazonka.SESV2.Types.PlacementStatistics
+
+-- | An object that describes how email sent during the predictive inbox
+-- placement test was handled by a certain email provider.
+--
+-- /See:/ 'newIspPlacement' smart constructor.
+data IspPlacement = IspPlacement'
+  { -- | The name of the email provider that the inbox placement data applies to.
+    ispName :: Prelude.Maybe Prelude.Text,
+    -- | An object that contains inbox placement metrics for a specific email
+    -- provider.
+    placementStatistics :: Prelude.Maybe PlacementStatistics
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IspPlacement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ispName', 'ispPlacement_ispName' - The name of the email provider that the inbox placement data applies to.
+--
+-- 'placementStatistics', 'ispPlacement_placementStatistics' - An object that contains inbox placement metrics for a specific email
+-- provider.
+newIspPlacement ::
+  IspPlacement
+newIspPlacement =
+  IspPlacement'
+    { ispName = Prelude.Nothing,
+      placementStatistics = Prelude.Nothing
+    }
+
+-- | The name of the email provider that the inbox placement data applies to.
+ispPlacement_ispName :: Lens.Lens' IspPlacement (Prelude.Maybe Prelude.Text)
+ispPlacement_ispName = Lens.lens (\IspPlacement' {ispName} -> ispName) (\s@IspPlacement' {} a -> s {ispName = a} :: IspPlacement)
+
+-- | An object that contains inbox placement metrics for a specific email
+-- provider.
+ispPlacement_placementStatistics :: Lens.Lens' IspPlacement (Prelude.Maybe PlacementStatistics)
+ispPlacement_placementStatistics = Lens.lens (\IspPlacement' {placementStatistics} -> placementStatistics) (\s@IspPlacement' {} a -> s {placementStatistics = a} :: IspPlacement)
+
+instance Data.FromJSON IspPlacement where
+  parseJSON =
+    Data.withObject
+      "IspPlacement"
+      ( \x ->
+          IspPlacement'
+            Prelude.<$> (x Data..:? "IspName")
+            Prelude.<*> (x Data..:? "PlacementStatistics")
+      )
+
+instance Prelude.Hashable IspPlacement where
+  hashWithSalt _salt IspPlacement' {..} =
+    _salt
+      `Prelude.hashWithSalt` ispName
+      `Prelude.hashWithSalt` placementStatistics
+
+instance Prelude.NFData IspPlacement where
+  rnf IspPlacement' {..} =
+    Prelude.rnf ispName
+      `Prelude.seq` Prelude.rnf placementStatistics
diff --git a/gen/Amazonka/SESV2/Types/JobStatus.hs b/gen/Amazonka/SESV2/Types/JobStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/JobStatus.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.SESV2.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.SESV2.Types.JobStatus
+  ( JobStatus
+      ( ..,
+        JobStatus_COMPLETED,
+        JobStatus_CREATED,
+        JobStatus_FAILED,
+        JobStatus_PROCESSING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status of the import job.
+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_COMPLETED :: JobStatus
+pattern JobStatus_COMPLETED = JobStatus' "COMPLETED"
+
+pattern JobStatus_CREATED :: JobStatus
+pattern JobStatus_CREATED = JobStatus' "CREATED"
+
+pattern JobStatus_FAILED :: JobStatus
+pattern JobStatus_FAILED = JobStatus' "FAILED"
+
+pattern JobStatus_PROCESSING :: JobStatus
+pattern JobStatus_PROCESSING = JobStatus' "PROCESSING"
+
+{-# COMPLETE
+  JobStatus_COMPLETED,
+  JobStatus_CREATED,
+  JobStatus_FAILED,
+  JobStatus_PROCESSING,
+  JobStatus'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/KinesisFirehoseDestination.hs b/gen/Amazonka/SESV2/Types/KinesisFirehoseDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/KinesisFirehoseDestination.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.SESV2.Types.KinesisFirehoseDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.KinesisFirehoseDestination where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that defines an Amazon Kinesis Data Firehose destination for
+-- email events. You can use Amazon Kinesis Data Firehose to stream data to
+-- other services, such as Amazon S3 and Amazon Redshift.
+--
+-- /See:/ 'newKinesisFirehoseDestination' smart constructor.
+data KinesisFirehoseDestination = KinesisFirehoseDestination'
+  { -- | The Amazon Resource Name (ARN) of the IAM role that the Amazon SES API
+    -- v2 uses to send email events to the Amazon Kinesis Data Firehose stream.
+    iamRoleArn :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Amazon Kinesis Data Firehose
+    -- stream that the Amazon SES API v2 sends email events to.
+    deliveryStreamArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'KinesisFirehoseDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'iamRoleArn', 'kinesisFirehoseDestination_iamRoleArn' - The Amazon Resource Name (ARN) of the IAM role that the Amazon SES API
+-- v2 uses to send email events to the Amazon Kinesis Data Firehose stream.
+--
+-- 'deliveryStreamArn', 'kinesisFirehoseDestination_deliveryStreamArn' - The Amazon Resource Name (ARN) of the Amazon Kinesis Data Firehose
+-- stream that the Amazon SES API v2 sends email events to.
+newKinesisFirehoseDestination ::
+  -- | 'iamRoleArn'
+  Prelude.Text ->
+  -- | 'deliveryStreamArn'
+  Prelude.Text ->
+  KinesisFirehoseDestination
+newKinesisFirehoseDestination
+  pIamRoleArn_
+  pDeliveryStreamArn_ =
+    KinesisFirehoseDestination'
+      { iamRoleArn =
+          pIamRoleArn_,
+        deliveryStreamArn = pDeliveryStreamArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the IAM role that the Amazon SES API
+-- v2 uses to send email events to the Amazon Kinesis Data Firehose stream.
+kinesisFirehoseDestination_iamRoleArn :: Lens.Lens' KinesisFirehoseDestination Prelude.Text
+kinesisFirehoseDestination_iamRoleArn = Lens.lens (\KinesisFirehoseDestination' {iamRoleArn} -> iamRoleArn) (\s@KinesisFirehoseDestination' {} a -> s {iamRoleArn = a} :: KinesisFirehoseDestination)
+
+-- | The Amazon Resource Name (ARN) of the Amazon Kinesis Data Firehose
+-- stream that the Amazon SES API v2 sends email events to.
+kinesisFirehoseDestination_deliveryStreamArn :: Lens.Lens' KinesisFirehoseDestination Prelude.Text
+kinesisFirehoseDestination_deliveryStreamArn = Lens.lens (\KinesisFirehoseDestination' {deliveryStreamArn} -> deliveryStreamArn) (\s@KinesisFirehoseDestination' {} a -> s {deliveryStreamArn = a} :: KinesisFirehoseDestination)
+
+instance Data.FromJSON KinesisFirehoseDestination where
+  parseJSON =
+    Data.withObject
+      "KinesisFirehoseDestination"
+      ( \x ->
+          KinesisFirehoseDestination'
+            Prelude.<$> (x Data..: "IamRoleArn")
+            Prelude.<*> (x Data..: "DeliveryStreamArn")
+      )
+
+instance Prelude.Hashable KinesisFirehoseDestination where
+  hashWithSalt _salt KinesisFirehoseDestination' {..} =
+    _salt
+      `Prelude.hashWithSalt` iamRoleArn
+      `Prelude.hashWithSalt` deliveryStreamArn
+
+instance Prelude.NFData KinesisFirehoseDestination where
+  rnf KinesisFirehoseDestination' {..} =
+    Prelude.rnf iamRoleArn
+      `Prelude.seq` Prelude.rnf deliveryStreamArn
+
+instance Data.ToJSON KinesisFirehoseDestination where
+  toJSON KinesisFirehoseDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("IamRoleArn" Data..= iamRoleArn),
+            Prelude.Just
+              ("DeliveryStreamArn" Data..= deliveryStreamArn)
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/ListContactsFilter.hs b/gen/Amazonka/SESV2/Types/ListContactsFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/ListContactsFilter.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.SESV2.Types.ListContactsFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.ListContactsFilter 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
+import Amazonka.SESV2.Types.SubscriptionStatus
+import Amazonka.SESV2.Types.TopicFilter
+
+-- | A filter that can be applied to a list of contacts.
+--
+-- /See:/ 'newListContactsFilter' smart constructor.
+data ListContactsFilter = ListContactsFilter'
+  { -- | The status by which you are filtering: @OPT_IN@ or @OPT_OUT@.
+    filteredStatus :: Prelude.Maybe SubscriptionStatus,
+    -- | Used for filtering by a specific topic preference.
+    topicFilter :: Prelude.Maybe TopicFilter
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListContactsFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filteredStatus', 'listContactsFilter_filteredStatus' - The status by which you are filtering: @OPT_IN@ or @OPT_OUT@.
+--
+-- 'topicFilter', 'listContactsFilter_topicFilter' - Used for filtering by a specific topic preference.
+newListContactsFilter ::
+  ListContactsFilter
+newListContactsFilter =
+  ListContactsFilter'
+    { filteredStatus =
+        Prelude.Nothing,
+      topicFilter = Prelude.Nothing
+    }
+
+-- | The status by which you are filtering: @OPT_IN@ or @OPT_OUT@.
+listContactsFilter_filteredStatus :: Lens.Lens' ListContactsFilter (Prelude.Maybe SubscriptionStatus)
+listContactsFilter_filteredStatus = Lens.lens (\ListContactsFilter' {filteredStatus} -> filteredStatus) (\s@ListContactsFilter' {} a -> s {filteredStatus = a} :: ListContactsFilter)
+
+-- | Used for filtering by a specific topic preference.
+listContactsFilter_topicFilter :: Lens.Lens' ListContactsFilter (Prelude.Maybe TopicFilter)
+listContactsFilter_topicFilter = Lens.lens (\ListContactsFilter' {topicFilter} -> topicFilter) (\s@ListContactsFilter' {} a -> s {topicFilter = a} :: ListContactsFilter)
+
+instance Prelude.Hashable ListContactsFilter where
+  hashWithSalt _salt ListContactsFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` filteredStatus
+      `Prelude.hashWithSalt` topicFilter
+
+instance Prelude.NFData ListContactsFilter where
+  rnf ListContactsFilter' {..} =
+    Prelude.rnf filteredStatus
+      `Prelude.seq` Prelude.rnf topicFilter
+
+instance Data.ToJSON ListContactsFilter where
+  toJSON ListContactsFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FilteredStatus" Data..=)
+              Prelude.<$> filteredStatus,
+            ("TopicFilter" Data..=) Prelude.<$> topicFilter
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/ListManagementOptions.hs b/gen/Amazonka/SESV2/Types/ListManagementOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/ListManagementOptions.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.SESV2.Types.ListManagementOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.ListManagementOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object used to specify a list or topic to which an email belongs,
+-- which will be used when a contact chooses to unsubscribe.
+--
+-- /See:/ 'newListManagementOptions' smart constructor.
+data ListManagementOptions = ListManagementOptions'
+  { -- | The name of the topic.
+    topicName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the contact list.
+    contactListName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListManagementOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'topicName', 'listManagementOptions_topicName' - The name of the topic.
+--
+-- 'contactListName', 'listManagementOptions_contactListName' - The name of the contact list.
+newListManagementOptions ::
+  -- | 'contactListName'
+  Prelude.Text ->
+  ListManagementOptions
+newListManagementOptions pContactListName_ =
+  ListManagementOptions'
+    { topicName = Prelude.Nothing,
+      contactListName = pContactListName_
+    }
+
+-- | The name of the topic.
+listManagementOptions_topicName :: Lens.Lens' ListManagementOptions (Prelude.Maybe Prelude.Text)
+listManagementOptions_topicName = Lens.lens (\ListManagementOptions' {topicName} -> topicName) (\s@ListManagementOptions' {} a -> s {topicName = a} :: ListManagementOptions)
+
+-- | The name of the contact list.
+listManagementOptions_contactListName :: Lens.Lens' ListManagementOptions Prelude.Text
+listManagementOptions_contactListName = Lens.lens (\ListManagementOptions' {contactListName} -> contactListName) (\s@ListManagementOptions' {} a -> s {contactListName = a} :: ListManagementOptions)
+
+instance Prelude.Hashable ListManagementOptions where
+  hashWithSalt _salt ListManagementOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` topicName
+      `Prelude.hashWithSalt` contactListName
+
+instance Prelude.NFData ListManagementOptions where
+  rnf ListManagementOptions' {..} =
+    Prelude.rnf topicName
+      `Prelude.seq` Prelude.rnf contactListName
+
+instance Data.ToJSON ListManagementOptions where
+  toJSON ListManagementOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("TopicName" Data..=) Prelude.<$> topicName,
+            Prelude.Just
+              ("ContactListName" Data..= contactListName)
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/ListRecommendationsFilterKey.hs b/gen/Amazonka/SESV2/Types/ListRecommendationsFilterKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/ListRecommendationsFilterKey.hs
@@ -0,0 +1,95 @@
+{-# 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.SESV2.Types.ListRecommendationsFilterKey
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.ListRecommendationsFilterKey
+  ( ListRecommendationsFilterKey
+      ( ..,
+        ListRecommendationsFilterKey_IMPACT,
+        ListRecommendationsFilterKey_RESOURCE_ARN,
+        ListRecommendationsFilterKey_STATUS,
+        ListRecommendationsFilterKey_TYPE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The @ListRecommendations@ filter type. This can be one of the following:
+--
+-- -   @TYPE@ – The recommendation type, with values like @DKIM@, @SPF@ or
+--     @DMARC@.
+--
+-- -   @IMPACT@ – The recommendation impact, with values like @HIGH@ or
+--     @LOW@.
+--
+-- -   @STATUS@ – The recommendation status, with values like @OPEN@ or
+--     @FIXED@.
+--
+-- -   @RESOURCE_ARN@ – The resource affected by the recommendation, with
+--     values like
+--     @arn:aws:ses:us-east-1:123456789012:identity\/example.com@.
+newtype ListRecommendationsFilterKey = ListRecommendationsFilterKey'
+  { fromListRecommendationsFilterKey ::
+      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 ListRecommendationsFilterKey_IMPACT :: ListRecommendationsFilterKey
+pattern ListRecommendationsFilterKey_IMPACT = ListRecommendationsFilterKey' "IMPACT"
+
+pattern ListRecommendationsFilterKey_RESOURCE_ARN :: ListRecommendationsFilterKey
+pattern ListRecommendationsFilterKey_RESOURCE_ARN = ListRecommendationsFilterKey' "RESOURCE_ARN"
+
+pattern ListRecommendationsFilterKey_STATUS :: ListRecommendationsFilterKey
+pattern ListRecommendationsFilterKey_STATUS = ListRecommendationsFilterKey' "STATUS"
+
+pattern ListRecommendationsFilterKey_TYPE :: ListRecommendationsFilterKey
+pattern ListRecommendationsFilterKey_TYPE = ListRecommendationsFilterKey' "TYPE"
+
+{-# COMPLETE
+  ListRecommendationsFilterKey_IMPACT,
+  ListRecommendationsFilterKey_RESOURCE_ARN,
+  ListRecommendationsFilterKey_STATUS,
+  ListRecommendationsFilterKey_TYPE,
+  ListRecommendationsFilterKey'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/MailFromAttributes.hs b/gen/Amazonka/SESV2/Types/MailFromAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/MailFromAttributes.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.MailFromAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.MailFromAttributes 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
+import Amazonka.SESV2.Types.BehaviorOnMxFailure
+import Amazonka.SESV2.Types.MailFromDomainStatus
+
+-- | A list of attributes that are associated with a MAIL FROM domain.
+--
+-- /See:/ 'newMailFromAttributes' smart constructor.
+data MailFromAttributes = MailFromAttributes'
+  { -- | The name of a domain that an email identity uses as a custom MAIL FROM
+    -- domain.
+    mailFromDomain :: Prelude.Text,
+    -- | The status of the MAIL FROM domain. This status can have the following
+    -- values:
+    --
+    -- -   @PENDING@ – Amazon SES hasn\'t started searching for the MX record
+    --     yet.
+    --
+    -- -   @SUCCESS@ – Amazon SES detected the required MX record for the MAIL
+    --     FROM domain.
+    --
+    -- -   @FAILED@ – Amazon SES can\'t find the required MX record, or the
+    --     record no longer exists.
+    --
+    -- -   @TEMPORARY_FAILURE@ – A temporary issue occurred, which prevented
+    --     Amazon SES from determining the status of the MAIL FROM domain.
+    mailFromDomainStatus :: MailFromDomainStatus,
+    -- | The action to take if the required MX record can\'t be found when you
+    -- send an email. When you set this value to @USE_DEFAULT_VALUE@, the mail
+    -- is sent using /amazonses.com/ as the MAIL FROM domain. When you set this
+    -- value to @REJECT_MESSAGE@, the Amazon SES API v2 returns a
+    -- @MailFromDomainNotVerified@ error, and doesn\'t attempt to deliver the
+    -- email.
+    --
+    -- These behaviors are taken when the custom MAIL FROM domain configuration
+    -- is in the @Pending@, @Failed@, and @TemporaryFailure@ states.
+    behaviorOnMxFailure :: BehaviorOnMxFailure
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MailFromAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'mailFromDomain', 'mailFromAttributes_mailFromDomain' - The name of a domain that an email identity uses as a custom MAIL FROM
+-- domain.
+--
+-- 'mailFromDomainStatus', 'mailFromAttributes_mailFromDomainStatus' - The status of the MAIL FROM domain. This status can have the following
+-- values:
+--
+-- -   @PENDING@ – Amazon SES hasn\'t started searching for the MX record
+--     yet.
+--
+-- -   @SUCCESS@ – Amazon SES detected the required MX record for the MAIL
+--     FROM domain.
+--
+-- -   @FAILED@ – Amazon SES can\'t find the required MX record, or the
+--     record no longer exists.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue occurred, which prevented
+--     Amazon SES from determining the status of the MAIL FROM domain.
+--
+-- 'behaviorOnMxFailure', 'mailFromAttributes_behaviorOnMxFailure' - The action to take if the required MX record can\'t be found when you
+-- send an email. When you set this value to @USE_DEFAULT_VALUE@, the mail
+-- is sent using /amazonses.com/ as the MAIL FROM domain. When you set this
+-- value to @REJECT_MESSAGE@, the Amazon SES API v2 returns a
+-- @MailFromDomainNotVerified@ error, and doesn\'t attempt to deliver the
+-- email.
+--
+-- These behaviors are taken when the custom MAIL FROM domain configuration
+-- is in the @Pending@, @Failed@, and @TemporaryFailure@ states.
+newMailFromAttributes ::
+  -- | 'mailFromDomain'
+  Prelude.Text ->
+  -- | 'mailFromDomainStatus'
+  MailFromDomainStatus ->
+  -- | 'behaviorOnMxFailure'
+  BehaviorOnMxFailure ->
+  MailFromAttributes
+newMailFromAttributes
+  pMailFromDomain_
+  pMailFromDomainStatus_
+  pBehaviorOnMxFailure_ =
+    MailFromAttributes'
+      { mailFromDomain =
+          pMailFromDomain_,
+        mailFromDomainStatus = pMailFromDomainStatus_,
+        behaviorOnMxFailure = pBehaviorOnMxFailure_
+      }
+
+-- | The name of a domain that an email identity uses as a custom MAIL FROM
+-- domain.
+mailFromAttributes_mailFromDomain :: Lens.Lens' MailFromAttributes Prelude.Text
+mailFromAttributes_mailFromDomain = Lens.lens (\MailFromAttributes' {mailFromDomain} -> mailFromDomain) (\s@MailFromAttributes' {} a -> s {mailFromDomain = a} :: MailFromAttributes)
+
+-- | The status of the MAIL FROM domain. This status can have the following
+-- values:
+--
+-- -   @PENDING@ – Amazon SES hasn\'t started searching for the MX record
+--     yet.
+--
+-- -   @SUCCESS@ – Amazon SES detected the required MX record for the MAIL
+--     FROM domain.
+--
+-- -   @FAILED@ – Amazon SES can\'t find the required MX record, or the
+--     record no longer exists.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue occurred, which prevented
+--     Amazon SES from determining the status of the MAIL FROM domain.
+mailFromAttributes_mailFromDomainStatus :: Lens.Lens' MailFromAttributes MailFromDomainStatus
+mailFromAttributes_mailFromDomainStatus = Lens.lens (\MailFromAttributes' {mailFromDomainStatus} -> mailFromDomainStatus) (\s@MailFromAttributes' {} a -> s {mailFromDomainStatus = a} :: MailFromAttributes)
+
+-- | The action to take if the required MX record can\'t be found when you
+-- send an email. When you set this value to @USE_DEFAULT_VALUE@, the mail
+-- is sent using /amazonses.com/ as the MAIL FROM domain. When you set this
+-- value to @REJECT_MESSAGE@, the Amazon SES API v2 returns a
+-- @MailFromDomainNotVerified@ error, and doesn\'t attempt to deliver the
+-- email.
+--
+-- These behaviors are taken when the custom MAIL FROM domain configuration
+-- is in the @Pending@, @Failed@, and @TemporaryFailure@ states.
+mailFromAttributes_behaviorOnMxFailure :: Lens.Lens' MailFromAttributes BehaviorOnMxFailure
+mailFromAttributes_behaviorOnMxFailure = Lens.lens (\MailFromAttributes' {behaviorOnMxFailure} -> behaviorOnMxFailure) (\s@MailFromAttributes' {} a -> s {behaviorOnMxFailure = a} :: MailFromAttributes)
+
+instance Data.FromJSON MailFromAttributes where
+  parseJSON =
+    Data.withObject
+      "MailFromAttributes"
+      ( \x ->
+          MailFromAttributes'
+            Prelude.<$> (x Data..: "MailFromDomain")
+            Prelude.<*> (x Data..: "MailFromDomainStatus")
+            Prelude.<*> (x Data..: "BehaviorOnMxFailure")
+      )
+
+instance Prelude.Hashable MailFromAttributes where
+  hashWithSalt _salt MailFromAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` mailFromDomain
+      `Prelude.hashWithSalt` mailFromDomainStatus
+      `Prelude.hashWithSalt` behaviorOnMxFailure
+
+instance Prelude.NFData MailFromAttributes where
+  rnf MailFromAttributes' {..} =
+    Prelude.rnf mailFromDomain
+      `Prelude.seq` Prelude.rnf mailFromDomainStatus
+      `Prelude.seq` Prelude.rnf behaviorOnMxFailure
diff --git a/gen/Amazonka/SESV2/Types/MailFromDomainStatus.hs b/gen/Amazonka/SESV2/Types/MailFromDomainStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/MailFromDomainStatus.hs
@@ -0,0 +1,95 @@
+{-# 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.SESV2.Types.MailFromDomainStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.MailFromDomainStatus
+  ( MailFromDomainStatus
+      ( ..,
+        MailFromDomainStatus_FAILED,
+        MailFromDomainStatus_PENDING,
+        MailFromDomainStatus_SUCCESS,
+        MailFromDomainStatus_TEMPORARY_FAILURE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status of the MAIL FROM domain. This status can have the following
+-- values:
+--
+-- -   @PENDING@ – Amazon SES hasn\'t started searching for the MX record
+--     yet.
+--
+-- -   @SUCCESS@ – Amazon SES detected the required MX record for the MAIL
+--     FROM domain.
+--
+-- -   @FAILED@ – Amazon SES can\'t find the required MX record, or the
+--     record no longer exists.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue occurred, which prevented
+--     Amazon SES from determining the status of the MAIL FROM domain.
+newtype MailFromDomainStatus = MailFromDomainStatus'
+  { fromMailFromDomainStatus ::
+      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 MailFromDomainStatus_FAILED :: MailFromDomainStatus
+pattern MailFromDomainStatus_FAILED = MailFromDomainStatus' "FAILED"
+
+pattern MailFromDomainStatus_PENDING :: MailFromDomainStatus
+pattern MailFromDomainStatus_PENDING = MailFromDomainStatus' "PENDING"
+
+pattern MailFromDomainStatus_SUCCESS :: MailFromDomainStatus
+pattern MailFromDomainStatus_SUCCESS = MailFromDomainStatus' "SUCCESS"
+
+pattern MailFromDomainStatus_TEMPORARY_FAILURE :: MailFromDomainStatus
+pattern MailFromDomainStatus_TEMPORARY_FAILURE = MailFromDomainStatus' "TEMPORARY_FAILURE"
+
+{-# COMPLETE
+  MailFromDomainStatus_FAILED,
+  MailFromDomainStatus_PENDING,
+  MailFromDomainStatus_SUCCESS,
+  MailFromDomainStatus_TEMPORARY_FAILURE,
+  MailFromDomainStatus'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/MailType.hs b/gen/Amazonka/SESV2/Types/MailType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/MailType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.MailType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.MailType
+  ( MailType
+      ( ..,
+        MailType_MARKETING,
+        MailType_TRANSACTIONAL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype MailType = MailType'
+  { fromMailType ::
+      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 MailType_MARKETING :: MailType
+pattern MailType_MARKETING = MailType' "MARKETING"
+
+pattern MailType_TRANSACTIONAL :: MailType
+pattern MailType_TRANSACTIONAL = MailType' "TRANSACTIONAL"
+
+{-# COMPLETE
+  MailType_MARKETING,
+  MailType_TRANSACTIONAL,
+  MailType'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/Message.hs b/gen/Amazonka/SESV2/Types/Message.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/Message.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.SESV2.Types.Message
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.Message 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
+import Amazonka.SESV2.Types.Body
+import Amazonka.SESV2.Types.Content
+
+-- | Represents the email message that you\'re sending. The @Message@ object
+-- consists of a subject line and a message body.
+--
+-- /See:/ 'newMessage' smart constructor.
+data Message = Message'
+  { -- | The subject line of the email. The subject line can only contain 7-bit
+    -- ASCII characters. However, you can specify non-ASCII characters in the
+    -- subject line by using encoded-word syntax, as described in
+    -- <https://tools.ietf.org/html/rfc2047 RFC 2047>.
+    subject :: Content,
+    -- | The body of the message. You can specify an HTML version of the message,
+    -- a text-only version of the message, or both.
+    body :: Body
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Message' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'subject', 'message_subject' - The subject line of the email. The subject line can only contain 7-bit
+-- ASCII characters. However, you can specify non-ASCII characters in the
+-- subject line by using encoded-word syntax, as described in
+-- <https://tools.ietf.org/html/rfc2047 RFC 2047>.
+--
+-- 'body', 'message_body' - The body of the message. You can specify an HTML version of the message,
+-- a text-only version of the message, or both.
+newMessage ::
+  -- | 'subject'
+  Content ->
+  -- | 'body'
+  Body ->
+  Message
+newMessage pSubject_ pBody_ =
+  Message' {subject = pSubject_, body = pBody_}
+
+-- | The subject line of the email. The subject line can only contain 7-bit
+-- ASCII characters. However, you can specify non-ASCII characters in the
+-- subject line by using encoded-word syntax, as described in
+-- <https://tools.ietf.org/html/rfc2047 RFC 2047>.
+message_subject :: Lens.Lens' Message Content
+message_subject = Lens.lens (\Message' {subject} -> subject) (\s@Message' {} a -> s {subject = a} :: Message)
+
+-- | The body of the message. You can specify an HTML version of the message,
+-- a text-only version of the message, or both.
+message_body :: Lens.Lens' Message Body
+message_body = Lens.lens (\Message' {body} -> body) (\s@Message' {} a -> s {body = a} :: Message)
+
+instance Prelude.Hashable Message where
+  hashWithSalt _salt Message' {..} =
+    _salt
+      `Prelude.hashWithSalt` subject
+      `Prelude.hashWithSalt` body
+
+instance Prelude.NFData Message where
+  rnf Message' {..} =
+    Prelude.rnf subject `Prelude.seq` Prelude.rnf body
+
+instance Data.ToJSON Message where
+  toJSON Message' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Subject" Data..= subject),
+            Prelude.Just ("Body" Data..= body)
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/MessageTag.hs b/gen/Amazonka/SESV2/Types/MessageTag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/MessageTag.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.SESV2.Types.MessageTag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.MessageTag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the name and value of a tag that you apply to an email. You can
+-- use message tags when you publish email sending events.
+--
+-- /See:/ 'newMessageTag' smart constructor.
+data MessageTag = MessageTag'
+  { -- | The name of the message tag. The message tag name has to meet the
+    -- following criteria:
+    --
+    -- -   It can only contain ASCII letters (a–z, A–Z), numbers (0–9),
+    --     underscores (_), or dashes (-).
+    --
+    -- -   It can contain no more than 256 characters.
+    name :: Prelude.Text,
+    -- | The value of the message tag. The message tag value has to meet the
+    -- following criteria:
+    --
+    -- -   It can only contain ASCII letters (a–z, A–Z), numbers (0–9),
+    --     underscores (_), or dashes (-).
+    --
+    -- -   It can contain no more than 256 characters.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MessageTag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'messageTag_name' - The name of the message tag. The message tag name has to meet the
+-- following criteria:
+--
+-- -   It can only contain ASCII letters (a–z, A–Z), numbers (0–9),
+--     underscores (_), or dashes (-).
+--
+-- -   It can contain no more than 256 characters.
+--
+-- 'value', 'messageTag_value' - The value of the message tag. The message tag value has to meet the
+-- following criteria:
+--
+-- -   It can only contain ASCII letters (a–z, A–Z), numbers (0–9),
+--     underscores (_), or dashes (-).
+--
+-- -   It can contain no more than 256 characters.
+newMessageTag ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  MessageTag
+newMessageTag pName_ pValue_ =
+  MessageTag' {name = pName_, value = pValue_}
+
+-- | The name of the message tag. The message tag name has to meet the
+-- following criteria:
+--
+-- -   It can only contain ASCII letters (a–z, A–Z), numbers (0–9),
+--     underscores (_), or dashes (-).
+--
+-- -   It can contain no more than 256 characters.
+messageTag_name :: Lens.Lens' MessageTag Prelude.Text
+messageTag_name = Lens.lens (\MessageTag' {name} -> name) (\s@MessageTag' {} a -> s {name = a} :: MessageTag)
+
+-- | The value of the message tag. The message tag value has to meet the
+-- following criteria:
+--
+-- -   It can only contain ASCII letters (a–z, A–Z), numbers (0–9),
+--     underscores (_), or dashes (-).
+--
+-- -   It can contain no more than 256 characters.
+messageTag_value :: Lens.Lens' MessageTag Prelude.Text
+messageTag_value = Lens.lens (\MessageTag' {value} -> value) (\s@MessageTag' {} a -> s {value = a} :: MessageTag)
+
+instance Prelude.Hashable MessageTag where
+  hashWithSalt _salt MessageTag' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData MessageTag where
+  rnf MessageTag' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON MessageTag where
+  toJSON MessageTag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/Metric.hs b/gen/Amazonka/SESV2/Types/Metric.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/Metric.hs
@@ -0,0 +1,108 @@
+{-# 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.SESV2.Types.Metric
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.Metric
+  ( Metric
+      ( ..,
+        Metric_CLICK,
+        Metric_COMPLAINT,
+        Metric_DELIVERY,
+        Metric_DELIVERY_CLICK,
+        Metric_DELIVERY_COMPLAINT,
+        Metric_DELIVERY_OPEN,
+        Metric_OPEN,
+        Metric_PERMANENT_BOUNCE,
+        Metric_SEND,
+        Metric_TRANSIENT_BOUNCE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Metric = Metric' {fromMetric :: 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 Metric_CLICK :: Metric
+pattern Metric_CLICK = Metric' "CLICK"
+
+pattern Metric_COMPLAINT :: Metric
+pattern Metric_COMPLAINT = Metric' "COMPLAINT"
+
+pattern Metric_DELIVERY :: Metric
+pattern Metric_DELIVERY = Metric' "DELIVERY"
+
+pattern Metric_DELIVERY_CLICK :: Metric
+pattern Metric_DELIVERY_CLICK = Metric' "DELIVERY_CLICK"
+
+pattern Metric_DELIVERY_COMPLAINT :: Metric
+pattern Metric_DELIVERY_COMPLAINT = Metric' "DELIVERY_COMPLAINT"
+
+pattern Metric_DELIVERY_OPEN :: Metric
+pattern Metric_DELIVERY_OPEN = Metric' "DELIVERY_OPEN"
+
+pattern Metric_OPEN :: Metric
+pattern Metric_OPEN = Metric' "OPEN"
+
+pattern Metric_PERMANENT_BOUNCE :: Metric
+pattern Metric_PERMANENT_BOUNCE = Metric' "PERMANENT_BOUNCE"
+
+pattern Metric_SEND :: Metric
+pattern Metric_SEND = Metric' "SEND"
+
+pattern Metric_TRANSIENT_BOUNCE :: Metric
+pattern Metric_TRANSIENT_BOUNCE = Metric' "TRANSIENT_BOUNCE"
+
+{-# COMPLETE
+  Metric_CLICK,
+  Metric_COMPLAINT,
+  Metric_DELIVERY,
+  Metric_DELIVERY_CLICK,
+  Metric_DELIVERY_COMPLAINT,
+  Metric_DELIVERY_OPEN,
+  Metric_OPEN,
+  Metric_PERMANENT_BOUNCE,
+  Metric_SEND,
+  Metric_TRANSIENT_BOUNCE,
+  Metric'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/MetricDataError.hs b/gen/Amazonka/SESV2/Types/MetricDataError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/MetricDataError.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.SESV2.Types.MetricDataError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.MetricDataError 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
+import Amazonka.SESV2.Types.QueryErrorCode
+
+-- | An error corresponding to the unsuccessful processing of a single metric
+-- data query.
+--
+-- /See:/ 'newMetricDataError' smart constructor.
+data MetricDataError = MetricDataError'
+  { -- | The query error code. Can be one of:
+    --
+    -- -   @INTERNAL_FAILURE@ – Amazon SES has failed to process one of the
+    --     queries.
+    --
+    -- -   @ACCESS_DENIED@ – You have insufficient access to retrieve metrics
+    --     based on the given query.
+    code :: Prelude.Maybe QueryErrorCode,
+    -- | The query identifier.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The error message associated with the current query error.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MetricDataError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'metricDataError_code' - The query error code. Can be one of:
+--
+-- -   @INTERNAL_FAILURE@ – Amazon SES has failed to process one of the
+--     queries.
+--
+-- -   @ACCESS_DENIED@ – You have insufficient access to retrieve metrics
+--     based on the given query.
+--
+-- 'id', 'metricDataError_id' - The query identifier.
+--
+-- 'message', 'metricDataError_message' - The error message associated with the current query error.
+newMetricDataError ::
+  MetricDataError
+newMetricDataError =
+  MetricDataError'
+    { code = Prelude.Nothing,
+      id = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The query error code. Can be one of:
+--
+-- -   @INTERNAL_FAILURE@ – Amazon SES has failed to process one of the
+--     queries.
+--
+-- -   @ACCESS_DENIED@ – You have insufficient access to retrieve metrics
+--     based on the given query.
+metricDataError_code :: Lens.Lens' MetricDataError (Prelude.Maybe QueryErrorCode)
+metricDataError_code = Lens.lens (\MetricDataError' {code} -> code) (\s@MetricDataError' {} a -> s {code = a} :: MetricDataError)
+
+-- | The query identifier.
+metricDataError_id :: Lens.Lens' MetricDataError (Prelude.Maybe Prelude.Text)
+metricDataError_id = Lens.lens (\MetricDataError' {id} -> id) (\s@MetricDataError' {} a -> s {id = a} :: MetricDataError)
+
+-- | The error message associated with the current query error.
+metricDataError_message :: Lens.Lens' MetricDataError (Prelude.Maybe Prelude.Text)
+metricDataError_message = Lens.lens (\MetricDataError' {message} -> message) (\s@MetricDataError' {} a -> s {message = a} :: MetricDataError)
+
+instance Data.FromJSON MetricDataError where
+  parseJSON =
+    Data.withObject
+      "MetricDataError"
+      ( \x ->
+          MetricDataError'
+            Prelude.<$> (x Data..:? "Code")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Message")
+      )
+
+instance Prelude.Hashable MetricDataError where
+  hashWithSalt _salt MetricDataError' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData MetricDataError where
+  rnf MetricDataError' {..} =
+    Prelude.rnf code
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/SESV2/Types/MetricDataResult.hs b/gen/Amazonka/SESV2/Types/MetricDataResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/MetricDataResult.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.SESV2.Types.MetricDataResult
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.MetricDataResult where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The result of a single metric data query.
+--
+-- /See:/ 'newMetricDataResult' smart constructor.
+data MetricDataResult = MetricDataResult'
+  { -- | The query identifier.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | A list of timestamps for the metric data results.
+    timestamps :: Prelude.Maybe [Data.POSIX],
+    -- | A list of values (cumulative \/ sum) for the metric data results.
+    values :: Prelude.Maybe [Prelude.Integer]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MetricDataResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'metricDataResult_id' - The query identifier.
+--
+-- 'timestamps', 'metricDataResult_timestamps' - A list of timestamps for the metric data results.
+--
+-- 'values', 'metricDataResult_values' - A list of values (cumulative \/ sum) for the metric data results.
+newMetricDataResult ::
+  MetricDataResult
+newMetricDataResult =
+  MetricDataResult'
+    { id = Prelude.Nothing,
+      timestamps = Prelude.Nothing,
+      values = Prelude.Nothing
+    }
+
+-- | The query identifier.
+metricDataResult_id :: Lens.Lens' MetricDataResult (Prelude.Maybe Prelude.Text)
+metricDataResult_id = Lens.lens (\MetricDataResult' {id} -> id) (\s@MetricDataResult' {} a -> s {id = a} :: MetricDataResult)
+
+-- | A list of timestamps for the metric data results.
+metricDataResult_timestamps :: Lens.Lens' MetricDataResult (Prelude.Maybe [Prelude.UTCTime])
+metricDataResult_timestamps = Lens.lens (\MetricDataResult' {timestamps} -> timestamps) (\s@MetricDataResult' {} a -> s {timestamps = a} :: MetricDataResult) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of values (cumulative \/ sum) for the metric data results.
+metricDataResult_values :: Lens.Lens' MetricDataResult (Prelude.Maybe [Prelude.Integer])
+metricDataResult_values = Lens.lens (\MetricDataResult' {values} -> values) (\s@MetricDataResult' {} a -> s {values = a} :: MetricDataResult) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON MetricDataResult where
+  parseJSON =
+    Data.withObject
+      "MetricDataResult"
+      ( \x ->
+          MetricDataResult'
+            Prelude.<$> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Timestamps" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Values" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable MetricDataResult where
+  hashWithSalt _salt MetricDataResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` timestamps
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData MetricDataResult where
+  rnf MetricDataResult' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf timestamps
+      `Prelude.seq` Prelude.rnf values
diff --git a/gen/Amazonka/SESV2/Types/MetricDimensionName.hs b/gen/Amazonka/SESV2/Types/MetricDimensionName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/MetricDimensionName.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.SESV2.Types.MetricDimensionName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.MetricDimensionName
+  ( MetricDimensionName
+      ( ..,
+        MetricDimensionName_CONFIGURATION_SET,
+        MetricDimensionName_EMAIL_IDENTITY,
+        MetricDimensionName_ISP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The @BatchGetMetricDataQuery@ dimension name. This can be one of the
+-- following:
+--
+-- -   @EMAIL_IDENTITY@ – The email identity used when sending messages.
+--
+-- -   @CONFIGURATION_SET@ – The configuration set used when sending
+--     messages (if one was used).
+--
+-- -   @ISP@ – The recipient ISP (e.g. @Gmail@, @Yahoo@, etc.).
+newtype MetricDimensionName = MetricDimensionName'
+  { fromMetricDimensionName ::
+      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 MetricDimensionName_CONFIGURATION_SET :: MetricDimensionName
+pattern MetricDimensionName_CONFIGURATION_SET = MetricDimensionName' "CONFIGURATION_SET"
+
+pattern MetricDimensionName_EMAIL_IDENTITY :: MetricDimensionName
+pattern MetricDimensionName_EMAIL_IDENTITY = MetricDimensionName' "EMAIL_IDENTITY"
+
+pattern MetricDimensionName_ISP :: MetricDimensionName
+pattern MetricDimensionName_ISP = MetricDimensionName' "ISP"
+
+{-# COMPLETE
+  MetricDimensionName_CONFIGURATION_SET,
+  MetricDimensionName_EMAIL_IDENTITY,
+  MetricDimensionName_ISP,
+  MetricDimensionName'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/MetricNamespace.hs b/gen/Amazonka/SESV2/Types/MetricNamespace.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/MetricNamespace.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.MetricNamespace
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.MetricNamespace
+  ( MetricNamespace
+      ( ..,
+        MetricNamespace_VDM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype MetricNamespace = MetricNamespace'
+  { fromMetricNamespace ::
+      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 MetricNamespace_VDM :: MetricNamespace
+pattern MetricNamespace_VDM = MetricNamespace' "VDM"
+
+{-# COMPLETE
+  MetricNamespace_VDM,
+  MetricNamespace'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/OverallVolume.hs b/gen/Amazonka/SESV2/Types/OverallVolume.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/OverallVolume.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.SESV2.Types.OverallVolume
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.OverallVolume 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
+import Amazonka.SESV2.Types.DomainIspPlacement
+import Amazonka.SESV2.Types.VolumeStatistics
+
+-- | An object that contains information about email that was sent from the
+-- selected domain.
+--
+-- /See:/ 'newOverallVolume' smart constructor.
+data OverallVolume = OverallVolume'
+  { -- | An object that contains inbox and junk mail placement metrics for
+    -- individual email providers.
+    domainIspPlacements :: Prelude.Maybe [DomainIspPlacement],
+    -- | The percentage of emails that were sent from the domain that were read
+    -- by their recipients.
+    readRatePercent :: Prelude.Maybe Prelude.Double,
+    -- | An object that contains information about the numbers of messages that
+    -- arrived in recipients\' inboxes and junk mail folders.
+    volumeStatistics :: Prelude.Maybe VolumeStatistics
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OverallVolume' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainIspPlacements', 'overallVolume_domainIspPlacements' - An object that contains inbox and junk mail placement metrics for
+-- individual email providers.
+--
+-- 'readRatePercent', 'overallVolume_readRatePercent' - The percentage of emails that were sent from the domain that were read
+-- by their recipients.
+--
+-- 'volumeStatistics', 'overallVolume_volumeStatistics' - An object that contains information about the numbers of messages that
+-- arrived in recipients\' inboxes and junk mail folders.
+newOverallVolume ::
+  OverallVolume
+newOverallVolume =
+  OverallVolume'
+    { domainIspPlacements =
+        Prelude.Nothing,
+      readRatePercent = Prelude.Nothing,
+      volumeStatistics = Prelude.Nothing
+    }
+
+-- | An object that contains inbox and junk mail placement metrics for
+-- individual email providers.
+overallVolume_domainIspPlacements :: Lens.Lens' OverallVolume (Prelude.Maybe [DomainIspPlacement])
+overallVolume_domainIspPlacements = Lens.lens (\OverallVolume' {domainIspPlacements} -> domainIspPlacements) (\s@OverallVolume' {} a -> s {domainIspPlacements = a} :: OverallVolume) Prelude.. Lens.mapping Lens.coerced
+
+-- | The percentage of emails that were sent from the domain that were read
+-- by their recipients.
+overallVolume_readRatePercent :: Lens.Lens' OverallVolume (Prelude.Maybe Prelude.Double)
+overallVolume_readRatePercent = Lens.lens (\OverallVolume' {readRatePercent} -> readRatePercent) (\s@OverallVolume' {} a -> s {readRatePercent = a} :: OverallVolume)
+
+-- | An object that contains information about the numbers of messages that
+-- arrived in recipients\' inboxes and junk mail folders.
+overallVolume_volumeStatistics :: Lens.Lens' OverallVolume (Prelude.Maybe VolumeStatistics)
+overallVolume_volumeStatistics = Lens.lens (\OverallVolume' {volumeStatistics} -> volumeStatistics) (\s@OverallVolume' {} a -> s {volumeStatistics = a} :: OverallVolume)
+
+instance Data.FromJSON OverallVolume where
+  parseJSON =
+    Data.withObject
+      "OverallVolume"
+      ( \x ->
+          OverallVolume'
+            Prelude.<$> ( x
+                            Data..:? "DomainIspPlacements"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "ReadRatePercent")
+            Prelude.<*> (x Data..:? "VolumeStatistics")
+      )
+
+instance Prelude.Hashable OverallVolume where
+  hashWithSalt _salt OverallVolume' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainIspPlacements
+      `Prelude.hashWithSalt` readRatePercent
+      `Prelude.hashWithSalt` volumeStatistics
+
+instance Prelude.NFData OverallVolume where
+  rnf OverallVolume' {..} =
+    Prelude.rnf domainIspPlacements
+      `Prelude.seq` Prelude.rnf readRatePercent
+      `Prelude.seq` Prelude.rnf volumeStatistics
diff --git a/gen/Amazonka/SESV2/Types/PinpointDestination.hs b/gen/Amazonka/SESV2/Types/PinpointDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/PinpointDestination.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.SESV2.Types.PinpointDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.PinpointDestination where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that defines an Amazon Pinpoint project destination for email
+-- events. You can send email event data to a Amazon Pinpoint project to
+-- view metrics using the Transactional Messaging dashboards that are built
+-- in to Amazon Pinpoint. For more information, see
+-- <https://docs.aws.amazon.com/pinpoint/latest/userguide/analytics-transactional-messages.html Transactional Messaging Charts>
+-- in the /Amazon Pinpoint User Guide/.
+--
+-- /See:/ 'newPinpointDestination' smart constructor.
+data PinpointDestination = PinpointDestination'
+  { -- | The Amazon Resource Name (ARN) of the Amazon Pinpoint project to send
+    -- email events to.
+    applicationArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PinpointDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationArn', 'pinpointDestination_applicationArn' - The Amazon Resource Name (ARN) of the Amazon Pinpoint project to send
+-- email events to.
+newPinpointDestination ::
+  PinpointDestination
+newPinpointDestination =
+  PinpointDestination'
+    { applicationArn =
+        Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the Amazon Pinpoint project to send
+-- email events to.
+pinpointDestination_applicationArn :: Lens.Lens' PinpointDestination (Prelude.Maybe Prelude.Text)
+pinpointDestination_applicationArn = Lens.lens (\PinpointDestination' {applicationArn} -> applicationArn) (\s@PinpointDestination' {} a -> s {applicationArn = a} :: PinpointDestination)
+
+instance Data.FromJSON PinpointDestination where
+  parseJSON =
+    Data.withObject
+      "PinpointDestination"
+      ( \x ->
+          PinpointDestination'
+            Prelude.<$> (x Data..:? "ApplicationArn")
+      )
+
+instance Prelude.Hashable PinpointDestination where
+  hashWithSalt _salt PinpointDestination' {..} =
+    _salt `Prelude.hashWithSalt` applicationArn
+
+instance Prelude.NFData PinpointDestination where
+  rnf PinpointDestination' {..} =
+    Prelude.rnf applicationArn
+
+instance Data.ToJSON PinpointDestination where
+  toJSON PinpointDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ApplicationArn" Data..=)
+              Prelude.<$> applicationArn
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/PlacementStatistics.hs b/gen/Amazonka/SESV2/Types/PlacementStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/PlacementStatistics.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.SESV2.Types.PlacementStatistics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.PlacementStatistics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that contains inbox placement data for an email provider.
+--
+-- /See:/ 'newPlacementStatistics' smart constructor.
+data PlacementStatistics = PlacementStatistics'
+  { -- | The percentage of emails that were authenticated by using DomainKeys
+    -- Identified Mail (DKIM) during the predictive inbox placement test.
+    dkimPercentage :: Prelude.Maybe Prelude.Double,
+    -- | The percentage of emails that arrived in recipients\' inboxes during the
+    -- predictive inbox placement test.
+    inboxPercentage :: Prelude.Maybe Prelude.Double,
+    -- | The percentage of emails that didn\'t arrive in recipients\' inboxes at
+    -- all during the predictive inbox placement test.
+    missingPercentage :: Prelude.Maybe Prelude.Double,
+    -- | The percentage of emails that arrived in recipients\' spam or junk mail
+    -- folders during the predictive inbox placement test.
+    spamPercentage :: Prelude.Maybe Prelude.Double,
+    -- | The percentage of emails that were authenticated by using Sender Policy
+    -- Framework (SPF) during the predictive inbox placement test.
+    spfPercentage :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PlacementStatistics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dkimPercentage', 'placementStatistics_dkimPercentage' - The percentage of emails that were authenticated by using DomainKeys
+-- Identified Mail (DKIM) during the predictive inbox placement test.
+--
+-- 'inboxPercentage', 'placementStatistics_inboxPercentage' - The percentage of emails that arrived in recipients\' inboxes during the
+-- predictive inbox placement test.
+--
+-- 'missingPercentage', 'placementStatistics_missingPercentage' - The percentage of emails that didn\'t arrive in recipients\' inboxes at
+-- all during the predictive inbox placement test.
+--
+-- 'spamPercentage', 'placementStatistics_spamPercentage' - The percentage of emails that arrived in recipients\' spam or junk mail
+-- folders during the predictive inbox placement test.
+--
+-- 'spfPercentage', 'placementStatistics_spfPercentage' - The percentage of emails that were authenticated by using Sender Policy
+-- Framework (SPF) during the predictive inbox placement test.
+newPlacementStatistics ::
+  PlacementStatistics
+newPlacementStatistics =
+  PlacementStatistics'
+    { dkimPercentage =
+        Prelude.Nothing,
+      inboxPercentage = Prelude.Nothing,
+      missingPercentage = Prelude.Nothing,
+      spamPercentage = Prelude.Nothing,
+      spfPercentage = Prelude.Nothing
+    }
+
+-- | The percentage of emails that were authenticated by using DomainKeys
+-- Identified Mail (DKIM) during the predictive inbox placement test.
+placementStatistics_dkimPercentage :: Lens.Lens' PlacementStatistics (Prelude.Maybe Prelude.Double)
+placementStatistics_dkimPercentage = Lens.lens (\PlacementStatistics' {dkimPercentage} -> dkimPercentage) (\s@PlacementStatistics' {} a -> s {dkimPercentage = a} :: PlacementStatistics)
+
+-- | The percentage of emails that arrived in recipients\' inboxes during the
+-- predictive inbox placement test.
+placementStatistics_inboxPercentage :: Lens.Lens' PlacementStatistics (Prelude.Maybe Prelude.Double)
+placementStatistics_inboxPercentage = Lens.lens (\PlacementStatistics' {inboxPercentage} -> inboxPercentage) (\s@PlacementStatistics' {} a -> s {inboxPercentage = a} :: PlacementStatistics)
+
+-- | The percentage of emails that didn\'t arrive in recipients\' inboxes at
+-- all during the predictive inbox placement test.
+placementStatistics_missingPercentage :: Lens.Lens' PlacementStatistics (Prelude.Maybe Prelude.Double)
+placementStatistics_missingPercentage = Lens.lens (\PlacementStatistics' {missingPercentage} -> missingPercentage) (\s@PlacementStatistics' {} a -> s {missingPercentage = a} :: PlacementStatistics)
+
+-- | The percentage of emails that arrived in recipients\' spam or junk mail
+-- folders during the predictive inbox placement test.
+placementStatistics_spamPercentage :: Lens.Lens' PlacementStatistics (Prelude.Maybe Prelude.Double)
+placementStatistics_spamPercentage = Lens.lens (\PlacementStatistics' {spamPercentage} -> spamPercentage) (\s@PlacementStatistics' {} a -> s {spamPercentage = a} :: PlacementStatistics)
+
+-- | The percentage of emails that were authenticated by using Sender Policy
+-- Framework (SPF) during the predictive inbox placement test.
+placementStatistics_spfPercentage :: Lens.Lens' PlacementStatistics (Prelude.Maybe Prelude.Double)
+placementStatistics_spfPercentage = Lens.lens (\PlacementStatistics' {spfPercentage} -> spfPercentage) (\s@PlacementStatistics' {} a -> s {spfPercentage = a} :: PlacementStatistics)
+
+instance Data.FromJSON PlacementStatistics where
+  parseJSON =
+    Data.withObject
+      "PlacementStatistics"
+      ( \x ->
+          PlacementStatistics'
+            Prelude.<$> (x Data..:? "DkimPercentage")
+            Prelude.<*> (x Data..:? "InboxPercentage")
+            Prelude.<*> (x Data..:? "MissingPercentage")
+            Prelude.<*> (x Data..:? "SpamPercentage")
+            Prelude.<*> (x Data..:? "SpfPercentage")
+      )
+
+instance Prelude.Hashable PlacementStatistics where
+  hashWithSalt _salt PlacementStatistics' {..} =
+    _salt
+      `Prelude.hashWithSalt` dkimPercentage
+      `Prelude.hashWithSalt` inboxPercentage
+      `Prelude.hashWithSalt` missingPercentage
+      `Prelude.hashWithSalt` spamPercentage
+      `Prelude.hashWithSalt` spfPercentage
+
+instance Prelude.NFData PlacementStatistics where
+  rnf PlacementStatistics' {..} =
+    Prelude.rnf dkimPercentage
+      `Prelude.seq` Prelude.rnf inboxPercentage
+      `Prelude.seq` Prelude.rnf missingPercentage
+      `Prelude.seq` Prelude.rnf spamPercentage
+      `Prelude.seq` Prelude.rnf spfPercentage
diff --git a/gen/Amazonka/SESV2/Types/QueryErrorCode.hs b/gen/Amazonka/SESV2/Types/QueryErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/QueryErrorCode.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.QueryErrorCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.QueryErrorCode
+  ( QueryErrorCode
+      ( ..,
+        QueryErrorCode_ACCESS_DENIED,
+        QueryErrorCode_INTERNAL_FAILURE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype QueryErrorCode = QueryErrorCode'
+  { fromQueryErrorCode ::
+      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 QueryErrorCode_ACCESS_DENIED :: QueryErrorCode
+pattern QueryErrorCode_ACCESS_DENIED = QueryErrorCode' "ACCESS_DENIED"
+
+pattern QueryErrorCode_INTERNAL_FAILURE :: QueryErrorCode
+pattern QueryErrorCode_INTERNAL_FAILURE = QueryErrorCode' "INTERNAL_FAILURE"
+
+{-# COMPLETE
+  QueryErrorCode_ACCESS_DENIED,
+  QueryErrorCode_INTERNAL_FAILURE,
+  QueryErrorCode'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/RawMessage.hs b/gen/Amazonka/SESV2/Types/RawMessage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/RawMessage.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.SESV2.Types.RawMessage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.RawMessage 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
+
+-- | Represents the raw content of an email message.
+--
+-- /See:/ 'newRawMessage' smart constructor.
+data RawMessage = RawMessage'
+  { -- | The raw email message. The message has to meet the following criteria:
+    --
+    -- -   The message has to contain a header and a body, separated by one
+    --     blank line.
+    --
+    -- -   All of the required header fields must be present in the message.
+    --
+    -- -   Each part of a multipart MIME message must be formatted properly.
+    --
+    -- -   Attachments must be in a file format that the Amazon SES supports.
+    --
+    -- -   The entire message must be Base64 encoded.
+    --
+    -- -   If any of the MIME parts in your message contain content that is
+    --     outside of the 7-bit ASCII character range, you should encode that
+    --     content to ensure that recipients\' email clients render the message
+    --     properly.
+    --
+    -- -   The length of any single line of text in the message can\'t exceed
+    --     1,000 characters. This restriction is defined in
+    --     <https://tools.ietf.org/html/rfc5321 RFC 5321>.
+    data' :: Data.Base64
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RawMessage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'data'', 'rawMessage_data' - The raw email message. The message has to meet the following criteria:
+--
+-- -   The message has to contain a header and a body, separated by one
+--     blank line.
+--
+-- -   All of the required header fields must be present in the message.
+--
+-- -   Each part of a multipart MIME message must be formatted properly.
+--
+-- -   Attachments must be in a file format that the Amazon SES supports.
+--
+-- -   The entire message must be Base64 encoded.
+--
+-- -   If any of the MIME parts in your message contain content that is
+--     outside of the 7-bit ASCII character range, you should encode that
+--     content to ensure that recipients\' email clients render the message
+--     properly.
+--
+-- -   The length of any single line of text in the message can\'t exceed
+--     1,000 characters. This restriction is defined in
+--     <https://tools.ietf.org/html/rfc5321 RFC 5321>.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+newRawMessage ::
+  -- | 'data''
+  Prelude.ByteString ->
+  RawMessage
+newRawMessage pData_ =
+  RawMessage' {data' = Data._Base64 Lens.# pData_}
+
+-- | The raw email message. The message has to meet the following criteria:
+--
+-- -   The message has to contain a header and a body, separated by one
+--     blank line.
+--
+-- -   All of the required header fields must be present in the message.
+--
+-- -   Each part of a multipart MIME message must be formatted properly.
+--
+-- -   Attachments must be in a file format that the Amazon SES supports.
+--
+-- -   The entire message must be Base64 encoded.
+--
+-- -   If any of the MIME parts in your message contain content that is
+--     outside of the 7-bit ASCII character range, you should encode that
+--     content to ensure that recipients\' email clients render the message
+--     properly.
+--
+-- -   The length of any single line of text in the message can\'t exceed
+--     1,000 characters. This restriction is defined in
+--     <https://tools.ietf.org/html/rfc5321 RFC 5321>.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+rawMessage_data :: Lens.Lens' RawMessage Prelude.ByteString
+rawMessage_data = Lens.lens (\RawMessage' {data'} -> data') (\s@RawMessage' {} a -> s {data' = a} :: RawMessage) Prelude.. Data._Base64
+
+instance Prelude.Hashable RawMessage where
+  hashWithSalt _salt RawMessage' {..} =
+    _salt `Prelude.hashWithSalt` data'
+
+instance Prelude.NFData RawMessage where
+  rnf RawMessage' {..} = Prelude.rnf data'
+
+instance Data.ToJSON RawMessage where
+  toJSON RawMessage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Data" Data..= data')]
+      )
diff --git a/gen/Amazonka/SESV2/Types/Recommendation.hs b/gen/Amazonka/SESV2/Types/Recommendation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/Recommendation.hs
@@ -0,0 +1,156 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.Recommendation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.Recommendation 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
+import Amazonka.SESV2.Types.RecommendationImpact
+import Amazonka.SESV2.Types.RecommendationStatus
+import Amazonka.SESV2.Types.RecommendationType
+
+-- | A recommendation generated for your account.
+--
+-- /See:/ 'newRecommendation' smart constructor.
+data Recommendation = Recommendation'
+  { -- | The first time this issue was encountered and the recommendation was
+    -- generated.
+    createdTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The recommendation description \/ disambiguator - e.g. @DKIM1@ and
+    -- @DKIM2@ are different recommendations about your DKIM setup.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The recommendation impact, with values like @HIGH@ or @LOW@.
+    impact :: Prelude.Maybe RecommendationImpact,
+    -- | The last time the recommendation was updated.
+    lastUpdatedTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The resource affected by the recommendation, with values like
+    -- @arn:aws:ses:us-east-1:123456789012:identity\/example.com@.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The recommendation status, with values like @OPEN@ or @FIXED@.
+    status :: Prelude.Maybe RecommendationStatus,
+    -- | The recommendation type, with values like @DKIM@, @SPF@ or @DMARC@.
+    type' :: Prelude.Maybe RecommendationType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Recommendation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdTimestamp', 'recommendation_createdTimestamp' - The first time this issue was encountered and the recommendation was
+-- generated.
+--
+-- 'description', 'recommendation_description' - The recommendation description \/ disambiguator - e.g. @DKIM1@ and
+-- @DKIM2@ are different recommendations about your DKIM setup.
+--
+-- 'impact', 'recommendation_impact' - The recommendation impact, with values like @HIGH@ or @LOW@.
+--
+-- 'lastUpdatedTimestamp', 'recommendation_lastUpdatedTimestamp' - The last time the recommendation was updated.
+--
+-- 'resourceArn', 'recommendation_resourceArn' - The resource affected by the recommendation, with values like
+-- @arn:aws:ses:us-east-1:123456789012:identity\/example.com@.
+--
+-- 'status', 'recommendation_status' - The recommendation status, with values like @OPEN@ or @FIXED@.
+--
+-- 'type'', 'recommendation_type' - The recommendation type, with values like @DKIM@, @SPF@ or @DMARC@.
+newRecommendation ::
+  Recommendation
+newRecommendation =
+  Recommendation'
+    { createdTimestamp = Prelude.Nothing,
+      description = Prelude.Nothing,
+      impact = Prelude.Nothing,
+      lastUpdatedTimestamp = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      status = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The first time this issue was encountered and the recommendation was
+-- generated.
+recommendation_createdTimestamp :: Lens.Lens' Recommendation (Prelude.Maybe Prelude.UTCTime)
+recommendation_createdTimestamp = Lens.lens (\Recommendation' {createdTimestamp} -> createdTimestamp) (\s@Recommendation' {} a -> s {createdTimestamp = a} :: Recommendation) Prelude.. Lens.mapping Data._Time
+
+-- | The recommendation description \/ disambiguator - e.g. @DKIM1@ and
+-- @DKIM2@ are different recommendations about your DKIM setup.
+recommendation_description :: Lens.Lens' Recommendation (Prelude.Maybe Prelude.Text)
+recommendation_description = Lens.lens (\Recommendation' {description} -> description) (\s@Recommendation' {} a -> s {description = a} :: Recommendation)
+
+-- | The recommendation impact, with values like @HIGH@ or @LOW@.
+recommendation_impact :: Lens.Lens' Recommendation (Prelude.Maybe RecommendationImpact)
+recommendation_impact = Lens.lens (\Recommendation' {impact} -> impact) (\s@Recommendation' {} a -> s {impact = a} :: Recommendation)
+
+-- | The last time the recommendation was updated.
+recommendation_lastUpdatedTimestamp :: Lens.Lens' Recommendation (Prelude.Maybe Prelude.UTCTime)
+recommendation_lastUpdatedTimestamp = Lens.lens (\Recommendation' {lastUpdatedTimestamp} -> lastUpdatedTimestamp) (\s@Recommendation' {} a -> s {lastUpdatedTimestamp = a} :: Recommendation) Prelude.. Lens.mapping Data._Time
+
+-- | The resource affected by the recommendation, with values like
+-- @arn:aws:ses:us-east-1:123456789012:identity\/example.com@.
+recommendation_resourceArn :: Lens.Lens' Recommendation (Prelude.Maybe Prelude.Text)
+recommendation_resourceArn = Lens.lens (\Recommendation' {resourceArn} -> resourceArn) (\s@Recommendation' {} a -> s {resourceArn = a} :: Recommendation)
+
+-- | The recommendation status, with values like @OPEN@ or @FIXED@.
+recommendation_status :: Lens.Lens' Recommendation (Prelude.Maybe RecommendationStatus)
+recommendation_status = Lens.lens (\Recommendation' {status} -> status) (\s@Recommendation' {} a -> s {status = a} :: Recommendation)
+
+-- | The recommendation type, with values like @DKIM@, @SPF@ or @DMARC@.
+recommendation_type :: Lens.Lens' Recommendation (Prelude.Maybe RecommendationType)
+recommendation_type = Lens.lens (\Recommendation' {type'} -> type') (\s@Recommendation' {} a -> s {type' = a} :: Recommendation)
+
+instance Data.FromJSON Recommendation where
+  parseJSON =
+    Data.withObject
+      "Recommendation"
+      ( \x ->
+          Recommendation'
+            Prelude.<$> (x Data..:? "CreatedTimestamp")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Impact")
+            Prelude.<*> (x Data..:? "LastUpdatedTimestamp")
+            Prelude.<*> (x Data..:? "ResourceArn")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable Recommendation where
+  hashWithSalt _salt Recommendation' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdTimestamp
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` impact
+      `Prelude.hashWithSalt` lastUpdatedTimestamp
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData Recommendation where
+  rnf Recommendation' {..} =
+    Prelude.rnf createdTimestamp
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf impact
+      `Prelude.seq` Prelude.rnf lastUpdatedTimestamp
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/SESV2/Types/RecommendationImpact.hs b/gen/Amazonka/SESV2/Types/RecommendationImpact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/RecommendationImpact.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.RecommendationImpact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.RecommendationImpact
+  ( RecommendationImpact
+      ( ..,
+        RecommendationImpact_HIGH,
+        RecommendationImpact_LOW
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RecommendationImpact = RecommendationImpact'
+  { fromRecommendationImpact ::
+      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 RecommendationImpact_HIGH :: RecommendationImpact
+pattern RecommendationImpact_HIGH = RecommendationImpact' "HIGH"
+
+pattern RecommendationImpact_LOW :: RecommendationImpact
+pattern RecommendationImpact_LOW = RecommendationImpact' "LOW"
+
+{-# COMPLETE
+  RecommendationImpact_HIGH,
+  RecommendationImpact_LOW,
+  RecommendationImpact'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/RecommendationStatus.hs b/gen/Amazonka/SESV2/Types/RecommendationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/RecommendationStatus.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.RecommendationStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.RecommendationStatus
+  ( RecommendationStatus
+      ( ..,
+        RecommendationStatus_FIXED,
+        RecommendationStatus_OPEN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RecommendationStatus = RecommendationStatus'
+  { fromRecommendationStatus ::
+      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 RecommendationStatus_FIXED :: RecommendationStatus
+pattern RecommendationStatus_FIXED = RecommendationStatus' "FIXED"
+
+pattern RecommendationStatus_OPEN :: RecommendationStatus
+pattern RecommendationStatus_OPEN = RecommendationStatus' "OPEN"
+
+{-# COMPLETE
+  RecommendationStatus_FIXED,
+  RecommendationStatus_OPEN,
+  RecommendationStatus'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/RecommendationType.hs b/gen/Amazonka/SESV2/Types/RecommendationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/RecommendationType.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.SESV2.Types.RecommendationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.RecommendationType
+  ( RecommendationType
+      ( ..,
+        RecommendationType_DKIM,
+        RecommendationType_DMARC,
+        RecommendationType_SPF
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RecommendationType = RecommendationType'
+  { fromRecommendationType ::
+      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 RecommendationType_DKIM :: RecommendationType
+pattern RecommendationType_DKIM = RecommendationType' "DKIM"
+
+pattern RecommendationType_DMARC :: RecommendationType
+pattern RecommendationType_DMARC = RecommendationType' "DMARC"
+
+pattern RecommendationType_SPF :: RecommendationType
+pattern RecommendationType_SPF = RecommendationType' "SPF"
+
+{-# COMPLETE
+  RecommendationType_DKIM,
+  RecommendationType_DMARC,
+  RecommendationType_SPF,
+  RecommendationType'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/ReplacementEmailContent.hs b/gen/Amazonka/SESV2/Types/ReplacementEmailContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/ReplacementEmailContent.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.SESV2.Types.ReplacementEmailContent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.ReplacementEmailContent 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
+import Amazonka.SESV2.Types.ReplacementTemplate
+
+-- | The @ReplaceEmailContent@ object to be used for a specific
+-- @BulkEmailEntry@. The @ReplacementTemplate@ can be specified within this
+-- object.
+--
+-- /See:/ 'newReplacementEmailContent' smart constructor.
+data ReplacementEmailContent = ReplacementEmailContent'
+  { -- | The @ReplacementTemplate@ associated with @ReplacementEmailContent@.
+    replacementTemplate :: Prelude.Maybe ReplacementTemplate
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplacementEmailContent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'replacementTemplate', 'replacementEmailContent_replacementTemplate' - The @ReplacementTemplate@ associated with @ReplacementEmailContent@.
+newReplacementEmailContent ::
+  ReplacementEmailContent
+newReplacementEmailContent =
+  ReplacementEmailContent'
+    { replacementTemplate =
+        Prelude.Nothing
+    }
+
+-- | The @ReplacementTemplate@ associated with @ReplacementEmailContent@.
+replacementEmailContent_replacementTemplate :: Lens.Lens' ReplacementEmailContent (Prelude.Maybe ReplacementTemplate)
+replacementEmailContent_replacementTemplate = Lens.lens (\ReplacementEmailContent' {replacementTemplate} -> replacementTemplate) (\s@ReplacementEmailContent' {} a -> s {replacementTemplate = a} :: ReplacementEmailContent)
+
+instance Prelude.Hashable ReplacementEmailContent where
+  hashWithSalt _salt ReplacementEmailContent' {..} =
+    _salt `Prelude.hashWithSalt` replacementTemplate
+
+instance Prelude.NFData ReplacementEmailContent where
+  rnf ReplacementEmailContent' {..} =
+    Prelude.rnf replacementTemplate
+
+instance Data.ToJSON ReplacementEmailContent where
+  toJSON ReplacementEmailContent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ReplacementTemplate" Data..=)
+              Prelude.<$> replacementTemplate
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/ReplacementTemplate.hs b/gen/Amazonka/SESV2/Types/ReplacementTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/ReplacementTemplate.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.SESV2.Types.ReplacementTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.ReplacementTemplate where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object which contains @ReplacementTemplateData@ to be used for a
+-- specific @BulkEmailEntry@.
+--
+-- /See:/ 'newReplacementTemplate' smart constructor.
+data ReplacementTemplate = ReplacementTemplate'
+  { -- | A list of replacement values to apply to the template. This parameter is
+    -- a JSON object, typically consisting of key-value pairs in which the keys
+    -- correspond to replacement tags in the email template.
+    replacementTemplateData :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplacementTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'replacementTemplateData', 'replacementTemplate_replacementTemplateData' - A list of replacement values to apply to the template. This parameter is
+-- a JSON object, typically consisting of key-value pairs in which the keys
+-- correspond to replacement tags in the email template.
+newReplacementTemplate ::
+  ReplacementTemplate
+newReplacementTemplate =
+  ReplacementTemplate'
+    { replacementTemplateData =
+        Prelude.Nothing
+    }
+
+-- | A list of replacement values to apply to the template. This parameter is
+-- a JSON object, typically consisting of key-value pairs in which the keys
+-- correspond to replacement tags in the email template.
+replacementTemplate_replacementTemplateData :: Lens.Lens' ReplacementTemplate (Prelude.Maybe Prelude.Text)
+replacementTemplate_replacementTemplateData = Lens.lens (\ReplacementTemplate' {replacementTemplateData} -> replacementTemplateData) (\s@ReplacementTemplate' {} a -> s {replacementTemplateData = a} :: ReplacementTemplate)
+
+instance Prelude.Hashable ReplacementTemplate where
+  hashWithSalt _salt ReplacementTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` replacementTemplateData
+
+instance Prelude.NFData ReplacementTemplate where
+  rnf ReplacementTemplate' {..} =
+    Prelude.rnf replacementTemplateData
+
+instance Data.ToJSON ReplacementTemplate where
+  toJSON ReplacementTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ReplacementTemplateData" Data..=)
+              Prelude.<$> replacementTemplateData
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/ReputationOptions.hs b/gen/Amazonka/SESV2/Types/ReputationOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/ReputationOptions.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.ReputationOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.ReputationOptions 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
+
+-- | Enable or disable collection of reputation metrics for emails that you
+-- send using this configuration set in the current Amazon Web Services
+-- Region.
+--
+-- /See:/ 'newReputationOptions' smart constructor.
+data ReputationOptions = ReputationOptions'
+  { -- | The date and time (in Unix time) when the reputation metrics were last
+    -- given a fresh start. When your account is given a fresh start, your
+    -- reputation metrics are calculated starting from the date of the fresh
+    -- start.
+    lastFreshStart :: Prelude.Maybe Data.POSIX,
+    -- | If @true@, tracking of reputation metrics is enabled for the
+    -- configuration set. If @false@, tracking of reputation metrics is
+    -- disabled for the configuration set.
+    reputationMetricsEnabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReputationOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lastFreshStart', 'reputationOptions_lastFreshStart' - The date and time (in Unix time) when the reputation metrics were last
+-- given a fresh start. When your account is given a fresh start, your
+-- reputation metrics are calculated starting from the date of the fresh
+-- start.
+--
+-- 'reputationMetricsEnabled', 'reputationOptions_reputationMetricsEnabled' - If @true@, tracking of reputation metrics is enabled for the
+-- configuration set. If @false@, tracking of reputation metrics is
+-- disabled for the configuration set.
+newReputationOptions ::
+  ReputationOptions
+newReputationOptions =
+  ReputationOptions'
+    { lastFreshStart =
+        Prelude.Nothing,
+      reputationMetricsEnabled = Prelude.Nothing
+    }
+
+-- | The date and time (in Unix time) when the reputation metrics were last
+-- given a fresh start. When your account is given a fresh start, your
+-- reputation metrics are calculated starting from the date of the fresh
+-- start.
+reputationOptions_lastFreshStart :: Lens.Lens' ReputationOptions (Prelude.Maybe Prelude.UTCTime)
+reputationOptions_lastFreshStart = Lens.lens (\ReputationOptions' {lastFreshStart} -> lastFreshStart) (\s@ReputationOptions' {} a -> s {lastFreshStart = a} :: ReputationOptions) Prelude.. Lens.mapping Data._Time
+
+-- | If @true@, tracking of reputation metrics is enabled for the
+-- configuration set. If @false@, tracking of reputation metrics is
+-- disabled for the configuration set.
+reputationOptions_reputationMetricsEnabled :: Lens.Lens' ReputationOptions (Prelude.Maybe Prelude.Bool)
+reputationOptions_reputationMetricsEnabled = Lens.lens (\ReputationOptions' {reputationMetricsEnabled} -> reputationMetricsEnabled) (\s@ReputationOptions' {} a -> s {reputationMetricsEnabled = a} :: ReputationOptions)
+
+instance Data.FromJSON ReputationOptions where
+  parseJSON =
+    Data.withObject
+      "ReputationOptions"
+      ( \x ->
+          ReputationOptions'
+            Prelude.<$> (x Data..:? "LastFreshStart")
+            Prelude.<*> (x Data..:? "ReputationMetricsEnabled")
+      )
+
+instance Prelude.Hashable ReputationOptions where
+  hashWithSalt _salt ReputationOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` lastFreshStart
+      `Prelude.hashWithSalt` reputationMetricsEnabled
+
+instance Prelude.NFData ReputationOptions where
+  rnf ReputationOptions' {..} =
+    Prelude.rnf lastFreshStart
+      `Prelude.seq` Prelude.rnf reputationMetricsEnabled
+
+instance Data.ToJSON ReputationOptions where
+  toJSON ReputationOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("LastFreshStart" Data..=)
+              Prelude.<$> lastFreshStart,
+            ("ReputationMetricsEnabled" Data..=)
+              Prelude.<$> reputationMetricsEnabled
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/ReviewDetails.hs b/gen/Amazonka/SESV2/Types/ReviewDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/ReviewDetails.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.SESV2.Types.ReviewDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.ReviewDetails 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
+import Amazonka.SESV2.Types.ReviewStatus
+
+-- | An object that contains information about your account details review.
+--
+-- /See:/ 'newReviewDetails' smart constructor.
+data ReviewDetails = ReviewDetails'
+  { -- | The associated support center case ID (if any).
+    caseId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the latest review of your account. The status can be one
+    -- of the following:
+    --
+    -- -   @PENDING@ – We have received your appeal and are in the process of
+    --     reviewing it.
+    --
+    -- -   @GRANTED@ – Your appeal has been reviewed and your production access
+    --     has been granted.
+    --
+    -- -   @DENIED@ – Your appeal has been reviewed and your production access
+    --     has been denied.
+    --
+    -- -   @FAILED@ – An internal error occurred and we didn\'t receive your
+    --     appeal. You can submit your appeal again.
+    status :: Prelude.Maybe ReviewStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReviewDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'caseId', 'reviewDetails_caseId' - The associated support center case ID (if any).
+--
+-- 'status', 'reviewDetails_status' - The status of the latest review of your account. The status can be one
+-- of the following:
+--
+-- -   @PENDING@ – We have received your appeal and are in the process of
+--     reviewing it.
+--
+-- -   @GRANTED@ – Your appeal has been reviewed and your production access
+--     has been granted.
+--
+-- -   @DENIED@ – Your appeal has been reviewed and your production access
+--     has been denied.
+--
+-- -   @FAILED@ – An internal error occurred and we didn\'t receive your
+--     appeal. You can submit your appeal again.
+newReviewDetails ::
+  ReviewDetails
+newReviewDetails =
+  ReviewDetails'
+    { caseId = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The associated support center case ID (if any).
+reviewDetails_caseId :: Lens.Lens' ReviewDetails (Prelude.Maybe Prelude.Text)
+reviewDetails_caseId = Lens.lens (\ReviewDetails' {caseId} -> caseId) (\s@ReviewDetails' {} a -> s {caseId = a} :: ReviewDetails)
+
+-- | The status of the latest review of your account. The status can be one
+-- of the following:
+--
+-- -   @PENDING@ – We have received your appeal and are in the process of
+--     reviewing it.
+--
+-- -   @GRANTED@ – Your appeal has been reviewed and your production access
+--     has been granted.
+--
+-- -   @DENIED@ – Your appeal has been reviewed and your production access
+--     has been denied.
+--
+-- -   @FAILED@ – An internal error occurred and we didn\'t receive your
+--     appeal. You can submit your appeal again.
+reviewDetails_status :: Lens.Lens' ReviewDetails (Prelude.Maybe ReviewStatus)
+reviewDetails_status = Lens.lens (\ReviewDetails' {status} -> status) (\s@ReviewDetails' {} a -> s {status = a} :: ReviewDetails)
+
+instance Data.FromJSON ReviewDetails where
+  parseJSON =
+    Data.withObject
+      "ReviewDetails"
+      ( \x ->
+          ReviewDetails'
+            Prelude.<$> (x Data..:? "CaseId")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable ReviewDetails where
+  hashWithSalt _salt ReviewDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` caseId
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ReviewDetails where
+  rnf ReviewDetails' {..} =
+    Prelude.rnf caseId `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/SESV2/Types/ReviewStatus.hs b/gen/Amazonka/SESV2/Types/ReviewStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/ReviewStatus.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.SESV2.Types.ReviewStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.ReviewStatus
+  ( ReviewStatus
+      ( ..,
+        ReviewStatus_DENIED,
+        ReviewStatus_FAILED,
+        ReviewStatus_GRANTED,
+        ReviewStatus_PENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReviewStatus = ReviewStatus'
+  { fromReviewStatus ::
+      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 ReviewStatus_DENIED :: ReviewStatus
+pattern ReviewStatus_DENIED = ReviewStatus' "DENIED"
+
+pattern ReviewStatus_FAILED :: ReviewStatus
+pattern ReviewStatus_FAILED = ReviewStatus' "FAILED"
+
+pattern ReviewStatus_GRANTED :: ReviewStatus
+pattern ReviewStatus_GRANTED = ReviewStatus' "GRANTED"
+
+pattern ReviewStatus_PENDING :: ReviewStatus
+pattern ReviewStatus_PENDING = ReviewStatus' "PENDING"
+
+{-# COMPLETE
+  ReviewStatus_DENIED,
+  ReviewStatus_FAILED,
+  ReviewStatus_GRANTED,
+  ReviewStatus_PENDING,
+  ReviewStatus'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/ScalingMode.hs b/gen/Amazonka/SESV2/Types/ScalingMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/ScalingMode.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.ScalingMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.ScalingMode
+  ( ScalingMode
+      ( ..,
+        ScalingMode_MANAGED,
+        ScalingMode_STANDARD
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ScalingMode = ScalingMode'
+  { fromScalingMode ::
+      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 ScalingMode_MANAGED :: ScalingMode
+pattern ScalingMode_MANAGED = ScalingMode' "MANAGED"
+
+pattern ScalingMode_STANDARD :: ScalingMode
+pattern ScalingMode_STANDARD = ScalingMode' "STANDARD"
+
+{-# COMPLETE
+  ScalingMode_MANAGED,
+  ScalingMode_STANDARD,
+  ScalingMode'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/SendQuota.hs b/gen/Amazonka/SESV2/Types/SendQuota.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/SendQuota.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.SESV2.Types.SendQuota
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.SendQuota where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that contains information about the per-day and per-second
+-- sending limits for your Amazon SES account in the current Amazon Web
+-- Services Region.
+--
+-- /See:/ 'newSendQuota' smart constructor.
+data SendQuota = SendQuota'
+  { -- | The maximum number of emails that you can send in the current Amazon Web
+    -- Services Region over a 24-hour period. A value of -1 signifies an
+    -- unlimited quota. (This value is also referred to as your /sending
+    -- quota/.)
+    max24HourSend :: Prelude.Maybe Prelude.Double,
+    -- | The maximum number of emails that you can send per second in the current
+    -- Amazon Web Services Region. This value is also called your /maximum
+    -- sending rate/ or your /maximum TPS (transactions per second) rate/.
+    maxSendRate :: Prelude.Maybe Prelude.Double,
+    -- | The number of emails sent from your Amazon SES account in the current
+    -- Amazon Web Services Region over the past 24 hours.
+    sentLast24Hours :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendQuota' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max24HourSend', 'sendQuota_max24HourSend' - The maximum number of emails that you can send in the current Amazon Web
+-- Services Region over a 24-hour period. A value of -1 signifies an
+-- unlimited quota. (This value is also referred to as your /sending
+-- quota/.)
+--
+-- 'maxSendRate', 'sendQuota_maxSendRate' - The maximum number of emails that you can send per second in the current
+-- Amazon Web Services Region. This value is also called your /maximum
+-- sending rate/ or your /maximum TPS (transactions per second) rate/.
+--
+-- 'sentLast24Hours', 'sendQuota_sentLast24Hours' - The number of emails sent from your Amazon SES account in the current
+-- Amazon Web Services Region over the past 24 hours.
+newSendQuota ::
+  SendQuota
+newSendQuota =
+  SendQuota'
+    { max24HourSend = Prelude.Nothing,
+      maxSendRate = Prelude.Nothing,
+      sentLast24Hours = Prelude.Nothing
+    }
+
+-- | The maximum number of emails that you can send in the current Amazon Web
+-- Services Region over a 24-hour period. A value of -1 signifies an
+-- unlimited quota. (This value is also referred to as your /sending
+-- quota/.)
+sendQuota_max24HourSend :: Lens.Lens' SendQuota (Prelude.Maybe Prelude.Double)
+sendQuota_max24HourSend = Lens.lens (\SendQuota' {max24HourSend} -> max24HourSend) (\s@SendQuota' {} a -> s {max24HourSend = a} :: SendQuota)
+
+-- | The maximum number of emails that you can send per second in the current
+-- Amazon Web Services Region. This value is also called your /maximum
+-- sending rate/ or your /maximum TPS (transactions per second) rate/.
+sendQuota_maxSendRate :: Lens.Lens' SendQuota (Prelude.Maybe Prelude.Double)
+sendQuota_maxSendRate = Lens.lens (\SendQuota' {maxSendRate} -> maxSendRate) (\s@SendQuota' {} a -> s {maxSendRate = a} :: SendQuota)
+
+-- | The number of emails sent from your Amazon SES account in the current
+-- Amazon Web Services Region over the past 24 hours.
+sendQuota_sentLast24Hours :: Lens.Lens' SendQuota (Prelude.Maybe Prelude.Double)
+sendQuota_sentLast24Hours = Lens.lens (\SendQuota' {sentLast24Hours} -> sentLast24Hours) (\s@SendQuota' {} a -> s {sentLast24Hours = a} :: SendQuota)
+
+instance Data.FromJSON SendQuota where
+  parseJSON =
+    Data.withObject
+      "SendQuota"
+      ( \x ->
+          SendQuota'
+            Prelude.<$> (x Data..:? "Max24HourSend")
+            Prelude.<*> (x Data..:? "MaxSendRate")
+            Prelude.<*> (x Data..:? "SentLast24Hours")
+      )
+
+instance Prelude.Hashable SendQuota where
+  hashWithSalt _salt SendQuota' {..} =
+    _salt
+      `Prelude.hashWithSalt` max24HourSend
+      `Prelude.hashWithSalt` maxSendRate
+      `Prelude.hashWithSalt` sentLast24Hours
+
+instance Prelude.NFData SendQuota where
+  rnf SendQuota' {..} =
+    Prelude.rnf max24HourSend
+      `Prelude.seq` Prelude.rnf maxSendRate
+      `Prelude.seq` Prelude.rnf sentLast24Hours
diff --git a/gen/Amazonka/SESV2/Types/SendingOptions.hs b/gen/Amazonka/SESV2/Types/SendingOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/SendingOptions.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.SendingOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.SendingOptions 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
+
+-- | Used to enable or disable email sending for messages that use this
+-- configuration set in the current Amazon Web Services Region.
+--
+-- /See:/ 'newSendingOptions' smart constructor.
+data SendingOptions = SendingOptions'
+  { -- | If @true@, email sending is enabled for the configuration set. If
+    -- @false@, email sending is disabled for the configuration set.
+    sendingEnabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendingOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sendingEnabled', 'sendingOptions_sendingEnabled' - If @true@, email sending is enabled for the configuration set. If
+-- @false@, email sending is disabled for the configuration set.
+newSendingOptions ::
+  SendingOptions
+newSendingOptions =
+  SendingOptions' {sendingEnabled = Prelude.Nothing}
+
+-- | If @true@, email sending is enabled for the configuration set. If
+-- @false@, email sending is disabled for the configuration set.
+sendingOptions_sendingEnabled :: Lens.Lens' SendingOptions (Prelude.Maybe Prelude.Bool)
+sendingOptions_sendingEnabled = Lens.lens (\SendingOptions' {sendingEnabled} -> sendingEnabled) (\s@SendingOptions' {} a -> s {sendingEnabled = a} :: SendingOptions)
+
+instance Data.FromJSON SendingOptions where
+  parseJSON =
+    Data.withObject
+      "SendingOptions"
+      ( \x ->
+          SendingOptions'
+            Prelude.<$> (x Data..:? "SendingEnabled")
+      )
+
+instance Prelude.Hashable SendingOptions where
+  hashWithSalt _salt SendingOptions' {..} =
+    _salt `Prelude.hashWithSalt` sendingEnabled
+
+instance Prelude.NFData SendingOptions where
+  rnf SendingOptions' {..} = Prelude.rnf sendingEnabled
+
+instance Data.ToJSON SendingOptions where
+  toJSON SendingOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SendingEnabled" Data..=)
+              Prelude.<$> sendingEnabled
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/SnsDestination.hs b/gen/Amazonka/SESV2/Types/SnsDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/SnsDestination.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.SESV2.Types.SnsDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.SnsDestination where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that defines an Amazon SNS destination for email events. You
+-- can use Amazon SNS to send notification when certain email events occur.
+--
+-- /See:/ 'newSnsDestination' smart constructor.
+data SnsDestination = SnsDestination'
+  { -- | The Amazon Resource Name (ARN) of the Amazon SNS topic to publish email
+    -- events to. For more information about Amazon SNS topics, see the
+    -- <https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html Amazon SNS Developer Guide>.
+    topicArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SnsDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'topicArn', 'snsDestination_topicArn' - The Amazon Resource Name (ARN) of the Amazon SNS topic to publish email
+-- events to. For more information about Amazon SNS topics, see the
+-- <https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html Amazon SNS Developer Guide>.
+newSnsDestination ::
+  -- | 'topicArn'
+  Prelude.Text ->
+  SnsDestination
+newSnsDestination pTopicArn_ =
+  SnsDestination' {topicArn = pTopicArn_}
+
+-- | The Amazon Resource Name (ARN) of the Amazon SNS topic to publish email
+-- events to. For more information about Amazon SNS topics, see the
+-- <https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html Amazon SNS Developer Guide>.
+snsDestination_topicArn :: Lens.Lens' SnsDestination Prelude.Text
+snsDestination_topicArn = Lens.lens (\SnsDestination' {topicArn} -> topicArn) (\s@SnsDestination' {} a -> s {topicArn = a} :: SnsDestination)
+
+instance Data.FromJSON SnsDestination where
+  parseJSON =
+    Data.withObject
+      "SnsDestination"
+      ( \x ->
+          SnsDestination' Prelude.<$> (x Data..: "TopicArn")
+      )
+
+instance Prelude.Hashable SnsDestination where
+  hashWithSalt _salt SnsDestination' {..} =
+    _salt `Prelude.hashWithSalt` topicArn
+
+instance Prelude.NFData SnsDestination where
+  rnf SnsDestination' {..} = Prelude.rnf topicArn
+
+instance Data.ToJSON SnsDestination where
+  toJSON SnsDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("TopicArn" Data..= topicArn)]
+      )
diff --git a/gen/Amazonka/SESV2/Types/SubscriptionStatus.hs b/gen/Amazonka/SESV2/Types/SubscriptionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/SubscriptionStatus.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.SubscriptionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.SubscriptionStatus
+  ( SubscriptionStatus
+      ( ..,
+        SubscriptionStatus_OPT_IN,
+        SubscriptionStatus_OPT_OUT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SubscriptionStatus = SubscriptionStatus'
+  { fromSubscriptionStatus ::
+      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 SubscriptionStatus_OPT_IN :: SubscriptionStatus
+pattern SubscriptionStatus_OPT_IN = SubscriptionStatus' "OPT_IN"
+
+pattern SubscriptionStatus_OPT_OUT :: SubscriptionStatus
+pattern SubscriptionStatus_OPT_OUT = SubscriptionStatus' "OPT_OUT"
+
+{-# COMPLETE
+  SubscriptionStatus_OPT_IN,
+  SubscriptionStatus_OPT_OUT,
+  SubscriptionStatus'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/SuppressedDestination.hs b/gen/Amazonka/SESV2/Types/SuppressedDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/SuppressedDestination.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.SESV2.Types.SuppressedDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.SuppressedDestination 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
+import Amazonka.SESV2.Types.SuppressedDestinationAttributes
+import Amazonka.SESV2.Types.SuppressionListReason
+
+-- | An object that contains information about an email address that is on
+-- the suppression list for your account.
+--
+-- /See:/ 'newSuppressedDestination' smart constructor.
+data SuppressedDestination = SuppressedDestination'
+  { -- | An optional value that can contain additional information about the
+    -- reasons that the address was added to the suppression list for your
+    -- account.
+    attributes :: Prelude.Maybe SuppressedDestinationAttributes,
+    -- | The email address that is on the suppression list for your account.
+    emailAddress :: Prelude.Text,
+    -- | The reason that the address was added to the suppression list for your
+    -- account.
+    reason :: SuppressionListReason,
+    -- | The date and time when the suppressed destination was last updated,
+    -- shown in Unix time format.
+    lastUpdateTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SuppressedDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'suppressedDestination_attributes' - An optional value that can contain additional information about the
+-- reasons that the address was added to the suppression list for your
+-- account.
+--
+-- 'emailAddress', 'suppressedDestination_emailAddress' - The email address that is on the suppression list for your account.
+--
+-- 'reason', 'suppressedDestination_reason' - The reason that the address was added to the suppression list for your
+-- account.
+--
+-- 'lastUpdateTime', 'suppressedDestination_lastUpdateTime' - The date and time when the suppressed destination was last updated,
+-- shown in Unix time format.
+newSuppressedDestination ::
+  -- | 'emailAddress'
+  Prelude.Text ->
+  -- | 'reason'
+  SuppressionListReason ->
+  -- | 'lastUpdateTime'
+  Prelude.UTCTime ->
+  SuppressedDestination
+newSuppressedDestination
+  pEmailAddress_
+  pReason_
+  pLastUpdateTime_ =
+    SuppressedDestination'
+      { attributes =
+          Prelude.Nothing,
+        emailAddress = pEmailAddress_,
+        reason = pReason_,
+        lastUpdateTime = Data._Time Lens.# pLastUpdateTime_
+      }
+
+-- | An optional value that can contain additional information about the
+-- reasons that the address was added to the suppression list for your
+-- account.
+suppressedDestination_attributes :: Lens.Lens' SuppressedDestination (Prelude.Maybe SuppressedDestinationAttributes)
+suppressedDestination_attributes = Lens.lens (\SuppressedDestination' {attributes} -> attributes) (\s@SuppressedDestination' {} a -> s {attributes = a} :: SuppressedDestination)
+
+-- | The email address that is on the suppression list for your account.
+suppressedDestination_emailAddress :: Lens.Lens' SuppressedDestination Prelude.Text
+suppressedDestination_emailAddress = Lens.lens (\SuppressedDestination' {emailAddress} -> emailAddress) (\s@SuppressedDestination' {} a -> s {emailAddress = a} :: SuppressedDestination)
+
+-- | The reason that the address was added to the suppression list for your
+-- account.
+suppressedDestination_reason :: Lens.Lens' SuppressedDestination SuppressionListReason
+suppressedDestination_reason = Lens.lens (\SuppressedDestination' {reason} -> reason) (\s@SuppressedDestination' {} a -> s {reason = a} :: SuppressedDestination)
+
+-- | The date and time when the suppressed destination was last updated,
+-- shown in Unix time format.
+suppressedDestination_lastUpdateTime :: Lens.Lens' SuppressedDestination Prelude.UTCTime
+suppressedDestination_lastUpdateTime = Lens.lens (\SuppressedDestination' {lastUpdateTime} -> lastUpdateTime) (\s@SuppressedDestination' {} a -> s {lastUpdateTime = a} :: SuppressedDestination) Prelude.. Data._Time
+
+instance Data.FromJSON SuppressedDestination where
+  parseJSON =
+    Data.withObject
+      "SuppressedDestination"
+      ( \x ->
+          SuppressedDestination'
+            Prelude.<$> (x Data..:? "Attributes")
+            Prelude.<*> (x Data..: "EmailAddress")
+            Prelude.<*> (x Data..: "Reason")
+            Prelude.<*> (x Data..: "LastUpdateTime")
+      )
+
+instance Prelude.Hashable SuppressedDestination where
+  hashWithSalt _salt SuppressedDestination' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` emailAddress
+      `Prelude.hashWithSalt` reason
+      `Prelude.hashWithSalt` lastUpdateTime
+
+instance Prelude.NFData SuppressedDestination where
+  rnf SuppressedDestination' {..} =
+    Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf emailAddress
+      `Prelude.seq` Prelude.rnf reason
+      `Prelude.seq` Prelude.rnf lastUpdateTime
diff --git a/gen/Amazonka/SESV2/Types/SuppressedDestinationAttributes.hs b/gen/Amazonka/SESV2/Types/SuppressedDestinationAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/SuppressedDestinationAttributes.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.SESV2.Types.SuppressedDestinationAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.SuppressedDestinationAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that contains additional attributes that are related an email
+-- address that is on the suppression list for your account.
+--
+-- /See:/ 'newSuppressedDestinationAttributes' smart constructor.
+data SuppressedDestinationAttributes = SuppressedDestinationAttributes'
+  { -- | A unique identifier that\'s generated when an email address is added to
+    -- the suppression list for your account.
+    feedbackId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the email message that caused the email address
+    -- to be added to the suppression list for your account.
+    messageId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SuppressedDestinationAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'feedbackId', 'suppressedDestinationAttributes_feedbackId' - A unique identifier that\'s generated when an email address is added to
+-- the suppression list for your account.
+--
+-- 'messageId', 'suppressedDestinationAttributes_messageId' - The unique identifier of the email message that caused the email address
+-- to be added to the suppression list for your account.
+newSuppressedDestinationAttributes ::
+  SuppressedDestinationAttributes
+newSuppressedDestinationAttributes =
+  SuppressedDestinationAttributes'
+    { feedbackId =
+        Prelude.Nothing,
+      messageId = Prelude.Nothing
+    }
+
+-- | A unique identifier that\'s generated when an email address is added to
+-- the suppression list for your account.
+suppressedDestinationAttributes_feedbackId :: Lens.Lens' SuppressedDestinationAttributes (Prelude.Maybe Prelude.Text)
+suppressedDestinationAttributes_feedbackId = Lens.lens (\SuppressedDestinationAttributes' {feedbackId} -> feedbackId) (\s@SuppressedDestinationAttributes' {} a -> s {feedbackId = a} :: SuppressedDestinationAttributes)
+
+-- | The unique identifier of the email message that caused the email address
+-- to be added to the suppression list for your account.
+suppressedDestinationAttributes_messageId :: Lens.Lens' SuppressedDestinationAttributes (Prelude.Maybe Prelude.Text)
+suppressedDestinationAttributes_messageId = Lens.lens (\SuppressedDestinationAttributes' {messageId} -> messageId) (\s@SuppressedDestinationAttributes' {} a -> s {messageId = a} :: SuppressedDestinationAttributes)
+
+instance
+  Data.FromJSON
+    SuppressedDestinationAttributes
+  where
+  parseJSON =
+    Data.withObject
+      "SuppressedDestinationAttributes"
+      ( \x ->
+          SuppressedDestinationAttributes'
+            Prelude.<$> (x Data..:? "FeedbackId")
+            Prelude.<*> (x Data..:? "MessageId")
+      )
+
+instance
+  Prelude.Hashable
+    SuppressedDestinationAttributes
+  where
+  hashWithSalt
+    _salt
+    SuppressedDestinationAttributes' {..} =
+      _salt
+        `Prelude.hashWithSalt` feedbackId
+        `Prelude.hashWithSalt` messageId
+
+instance
+  Prelude.NFData
+    SuppressedDestinationAttributes
+  where
+  rnf SuppressedDestinationAttributes' {..} =
+    Prelude.rnf feedbackId
+      `Prelude.seq` Prelude.rnf messageId
diff --git a/gen/Amazonka/SESV2/Types/SuppressedDestinationSummary.hs b/gen/Amazonka/SESV2/Types/SuppressedDestinationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/SuppressedDestinationSummary.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.SuppressedDestinationSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.SuppressedDestinationSummary 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
+import Amazonka.SESV2.Types.SuppressionListReason
+
+-- | A summary that describes the suppressed email address.
+--
+-- /See:/ 'newSuppressedDestinationSummary' smart constructor.
+data SuppressedDestinationSummary = SuppressedDestinationSummary'
+  { -- | The email address that\'s on the suppression list for your account.
+    emailAddress :: Prelude.Text,
+    -- | The reason that the address was added to the suppression list for your
+    -- account.
+    reason :: SuppressionListReason,
+    -- | The date and time when the suppressed destination was last updated,
+    -- shown in Unix time format.
+    lastUpdateTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SuppressedDestinationSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'emailAddress', 'suppressedDestinationSummary_emailAddress' - The email address that\'s on the suppression list for your account.
+--
+-- 'reason', 'suppressedDestinationSummary_reason' - The reason that the address was added to the suppression list for your
+-- account.
+--
+-- 'lastUpdateTime', 'suppressedDestinationSummary_lastUpdateTime' - The date and time when the suppressed destination was last updated,
+-- shown in Unix time format.
+newSuppressedDestinationSummary ::
+  -- | 'emailAddress'
+  Prelude.Text ->
+  -- | 'reason'
+  SuppressionListReason ->
+  -- | 'lastUpdateTime'
+  Prelude.UTCTime ->
+  SuppressedDestinationSummary
+newSuppressedDestinationSummary
+  pEmailAddress_
+  pReason_
+  pLastUpdateTime_ =
+    SuppressedDestinationSummary'
+      { emailAddress =
+          pEmailAddress_,
+        reason = pReason_,
+        lastUpdateTime =
+          Data._Time Lens.# pLastUpdateTime_
+      }
+
+-- | The email address that\'s on the suppression list for your account.
+suppressedDestinationSummary_emailAddress :: Lens.Lens' SuppressedDestinationSummary Prelude.Text
+suppressedDestinationSummary_emailAddress = Lens.lens (\SuppressedDestinationSummary' {emailAddress} -> emailAddress) (\s@SuppressedDestinationSummary' {} a -> s {emailAddress = a} :: SuppressedDestinationSummary)
+
+-- | The reason that the address was added to the suppression list for your
+-- account.
+suppressedDestinationSummary_reason :: Lens.Lens' SuppressedDestinationSummary SuppressionListReason
+suppressedDestinationSummary_reason = Lens.lens (\SuppressedDestinationSummary' {reason} -> reason) (\s@SuppressedDestinationSummary' {} a -> s {reason = a} :: SuppressedDestinationSummary)
+
+-- | The date and time when the suppressed destination was last updated,
+-- shown in Unix time format.
+suppressedDestinationSummary_lastUpdateTime :: Lens.Lens' SuppressedDestinationSummary Prelude.UTCTime
+suppressedDestinationSummary_lastUpdateTime = Lens.lens (\SuppressedDestinationSummary' {lastUpdateTime} -> lastUpdateTime) (\s@SuppressedDestinationSummary' {} a -> s {lastUpdateTime = a} :: SuppressedDestinationSummary) Prelude.. Data._Time
+
+instance Data.FromJSON SuppressedDestinationSummary where
+  parseJSON =
+    Data.withObject
+      "SuppressedDestinationSummary"
+      ( \x ->
+          SuppressedDestinationSummary'
+            Prelude.<$> (x Data..: "EmailAddress")
+            Prelude.<*> (x Data..: "Reason")
+            Prelude.<*> (x Data..: "LastUpdateTime")
+      )
+
+instance
+  Prelude.Hashable
+    SuppressedDestinationSummary
+  where
+  hashWithSalt _salt SuppressedDestinationSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` emailAddress
+      `Prelude.hashWithSalt` reason
+      `Prelude.hashWithSalt` lastUpdateTime
+
+instance Prelude.NFData SuppressedDestinationSummary where
+  rnf SuppressedDestinationSummary' {..} =
+    Prelude.rnf emailAddress
+      `Prelude.seq` Prelude.rnf reason
+      `Prelude.seq` Prelude.rnf lastUpdateTime
diff --git a/gen/Amazonka/SESV2/Types/SuppressionAttributes.hs b/gen/Amazonka/SESV2/Types/SuppressionAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/SuppressionAttributes.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.SuppressionAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.SuppressionAttributes 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
+import Amazonka.SESV2.Types.SuppressionListReason
+
+-- | An object that contains information about the email address suppression
+-- preferences for your account in the current Amazon Web Services Region.
+--
+-- /See:/ 'newSuppressionAttributes' smart constructor.
+data SuppressionAttributes = SuppressionAttributes'
+  { -- | A list that contains the reasons that email addresses will be
+    -- automatically added to the suppression list for your account. This list
+    -- can contain any or all of the following:
+    --
+    -- -   @COMPLAINT@ – Amazon SES adds an email address to the suppression
+    --     list for your account when a message sent to that address results in
+    --     a complaint.
+    --
+    -- -   @BOUNCE@ – Amazon SES adds an email address to the suppression list
+    --     for your account when a message sent to that address results in a
+    --     hard bounce.
+    suppressedReasons :: Prelude.Maybe [SuppressionListReason]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SuppressionAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'suppressedReasons', 'suppressionAttributes_suppressedReasons' - A list that contains the reasons that email addresses will be
+-- automatically added to the suppression list for your account. This list
+-- can contain any or all of the following:
+--
+-- -   @COMPLAINT@ – Amazon SES adds an email address to the suppression
+--     list for your account when a message sent to that address results in
+--     a complaint.
+--
+-- -   @BOUNCE@ – Amazon SES adds an email address to the suppression list
+--     for your account when a message sent to that address results in a
+--     hard bounce.
+newSuppressionAttributes ::
+  SuppressionAttributes
+newSuppressionAttributes =
+  SuppressionAttributes'
+    { suppressedReasons =
+        Prelude.Nothing
+    }
+
+-- | A list that contains the reasons that email addresses will be
+-- automatically added to the suppression list for your account. This list
+-- can contain any or all of the following:
+--
+-- -   @COMPLAINT@ – Amazon SES adds an email address to the suppression
+--     list for your account when a message sent to that address results in
+--     a complaint.
+--
+-- -   @BOUNCE@ – Amazon SES adds an email address to the suppression list
+--     for your account when a message sent to that address results in a
+--     hard bounce.
+suppressionAttributes_suppressedReasons :: Lens.Lens' SuppressionAttributes (Prelude.Maybe [SuppressionListReason])
+suppressionAttributes_suppressedReasons = Lens.lens (\SuppressionAttributes' {suppressedReasons} -> suppressedReasons) (\s@SuppressionAttributes' {} a -> s {suppressedReasons = a} :: SuppressionAttributes) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON SuppressionAttributes where
+  parseJSON =
+    Data.withObject
+      "SuppressionAttributes"
+      ( \x ->
+          SuppressionAttributes'
+            Prelude.<$> ( x
+                            Data..:? "SuppressedReasons"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable SuppressionAttributes where
+  hashWithSalt _salt SuppressionAttributes' {..} =
+    _salt `Prelude.hashWithSalt` suppressedReasons
+
+instance Prelude.NFData SuppressionAttributes where
+  rnf SuppressionAttributes' {..} =
+    Prelude.rnf suppressedReasons
diff --git a/gen/Amazonka/SESV2/Types/SuppressionListDestination.hs b/gen/Amazonka/SESV2/Types/SuppressionListDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/SuppressionListDestination.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.SESV2.Types.SuppressionListDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.SuppressionListDestination 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
+import Amazonka.SESV2.Types.SuppressionListImportAction
+
+-- | An object that contains details about the action of suppression list.
+--
+-- /See:/ 'newSuppressionListDestination' smart constructor.
+data SuppressionListDestination = SuppressionListDestination'
+  { -- | The type of action to perform on the address. The following are possible
+    -- values:
+    --
+    -- -   PUT: add the addresses to the suppression list. If the record
+    --     already exists, it will override it with the new value.
+    --
+    -- -   DELETE: remove the addresses from the suppression list.
+    suppressionListImportAction :: SuppressionListImportAction
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SuppressionListDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'suppressionListImportAction', 'suppressionListDestination_suppressionListImportAction' - The type of action to perform on the address. The following are possible
+-- values:
+--
+-- -   PUT: add the addresses to the suppression list. If the record
+--     already exists, it will override it with the new value.
+--
+-- -   DELETE: remove the addresses from the suppression list.
+newSuppressionListDestination ::
+  -- | 'suppressionListImportAction'
+  SuppressionListImportAction ->
+  SuppressionListDestination
+newSuppressionListDestination
+  pSuppressionListImportAction_ =
+    SuppressionListDestination'
+      { suppressionListImportAction =
+          pSuppressionListImportAction_
+      }
+
+-- | The type of action to perform on the address. The following are possible
+-- values:
+--
+-- -   PUT: add the addresses to the suppression list. If the record
+--     already exists, it will override it with the new value.
+--
+-- -   DELETE: remove the addresses from the suppression list.
+suppressionListDestination_suppressionListImportAction :: Lens.Lens' SuppressionListDestination SuppressionListImportAction
+suppressionListDestination_suppressionListImportAction = Lens.lens (\SuppressionListDestination' {suppressionListImportAction} -> suppressionListImportAction) (\s@SuppressionListDestination' {} a -> s {suppressionListImportAction = a} :: SuppressionListDestination)
+
+instance Data.FromJSON SuppressionListDestination where
+  parseJSON =
+    Data.withObject
+      "SuppressionListDestination"
+      ( \x ->
+          SuppressionListDestination'
+            Prelude.<$> (x Data..: "SuppressionListImportAction")
+      )
+
+instance Prelude.Hashable SuppressionListDestination where
+  hashWithSalt _salt SuppressionListDestination' {..} =
+    _salt
+      `Prelude.hashWithSalt` suppressionListImportAction
+
+instance Prelude.NFData SuppressionListDestination where
+  rnf SuppressionListDestination' {..} =
+    Prelude.rnf suppressionListImportAction
+
+instance Data.ToJSON SuppressionListDestination where
+  toJSON SuppressionListDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "SuppressionListImportAction"
+                  Data..= suppressionListImportAction
+              )
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/SuppressionListImportAction.hs b/gen/Amazonka/SESV2/Types/SuppressionListImportAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/SuppressionListImportAction.hs
@@ -0,0 +1,77 @@
+{-# 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.SESV2.Types.SuppressionListImportAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.SuppressionListImportAction
+  ( SuppressionListImportAction
+      ( ..,
+        SuppressionListImportAction_DELETE,
+        SuppressionListImportAction_PUT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The type of action to perform on the address. The following are possible
+-- values:
+--
+-- -   PUT: add the addresses to the suppression list.
+--
+-- -   DELETE: remove the address from the suppression list.
+newtype SuppressionListImportAction = SuppressionListImportAction'
+  { fromSuppressionListImportAction ::
+      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 SuppressionListImportAction_DELETE :: SuppressionListImportAction
+pattern SuppressionListImportAction_DELETE = SuppressionListImportAction' "DELETE"
+
+pattern SuppressionListImportAction_PUT :: SuppressionListImportAction
+pattern SuppressionListImportAction_PUT = SuppressionListImportAction' "PUT"
+
+{-# COMPLETE
+  SuppressionListImportAction_DELETE,
+  SuppressionListImportAction_PUT,
+  SuppressionListImportAction'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/SuppressionListReason.hs b/gen/Amazonka/SESV2/Types/SuppressionListReason.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/SuppressionListReason.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.SESV2.Types.SuppressionListReason
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.SuppressionListReason
+  ( SuppressionListReason
+      ( ..,
+        SuppressionListReason_BOUNCE,
+        SuppressionListReason_COMPLAINT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The reason that the address was added to the suppression list for your
+-- account. The value can be one of the following:
+--
+-- -   @COMPLAINT@ – Amazon SES added an email address to the suppression
+--     list for your account because a message sent to that address results
+--     in a complaint.
+--
+-- -   @BOUNCE@ – Amazon SES added an email address to the suppression list
+--     for your account because a message sent to that address results in a
+--     hard bounce.
+newtype SuppressionListReason = SuppressionListReason'
+  { fromSuppressionListReason ::
+      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 SuppressionListReason_BOUNCE :: SuppressionListReason
+pattern SuppressionListReason_BOUNCE = SuppressionListReason' "BOUNCE"
+
+pattern SuppressionListReason_COMPLAINT :: SuppressionListReason
+pattern SuppressionListReason_COMPLAINT = SuppressionListReason' "COMPLAINT"
+
+{-# COMPLETE
+  SuppressionListReason_BOUNCE,
+  SuppressionListReason_COMPLAINT,
+  SuppressionListReason'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/SuppressionOptions.hs b/gen/Amazonka/SESV2/Types/SuppressionOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/SuppressionOptions.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.SESV2.Types.SuppressionOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.SuppressionOptions 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
+import Amazonka.SESV2.Types.SuppressionListReason
+
+-- | An object that contains information about the suppression list
+-- preferences for your account.
+--
+-- /See:/ 'newSuppressionOptions' smart constructor.
+data SuppressionOptions = SuppressionOptions'
+  { -- | A list that contains the reasons that email addresses are automatically
+    -- added to the suppression list for your account. This list can contain
+    -- any or all of the following:
+    --
+    -- -   @COMPLAINT@ – Amazon SES adds an email address to the suppression
+    --     list for your account when a message sent to that address results in
+    --     a complaint.
+    --
+    -- -   @BOUNCE@ – Amazon SES adds an email address to the suppression list
+    --     for your account when a message sent to that address results in a
+    --     hard bounce.
+    suppressedReasons :: Prelude.Maybe [SuppressionListReason]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SuppressionOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'suppressedReasons', 'suppressionOptions_suppressedReasons' - A list that contains the reasons that email addresses are automatically
+-- added to the suppression list for your account. This list can contain
+-- any or all of the following:
+--
+-- -   @COMPLAINT@ – Amazon SES adds an email address to the suppression
+--     list for your account when a message sent to that address results in
+--     a complaint.
+--
+-- -   @BOUNCE@ – Amazon SES adds an email address to the suppression list
+--     for your account when a message sent to that address results in a
+--     hard bounce.
+newSuppressionOptions ::
+  SuppressionOptions
+newSuppressionOptions =
+  SuppressionOptions'
+    { suppressedReasons =
+        Prelude.Nothing
+    }
+
+-- | A list that contains the reasons that email addresses are automatically
+-- added to the suppression list for your account. This list can contain
+-- any or all of the following:
+--
+-- -   @COMPLAINT@ – Amazon SES adds an email address to the suppression
+--     list for your account when a message sent to that address results in
+--     a complaint.
+--
+-- -   @BOUNCE@ – Amazon SES adds an email address to the suppression list
+--     for your account when a message sent to that address results in a
+--     hard bounce.
+suppressionOptions_suppressedReasons :: Lens.Lens' SuppressionOptions (Prelude.Maybe [SuppressionListReason])
+suppressionOptions_suppressedReasons = Lens.lens (\SuppressionOptions' {suppressedReasons} -> suppressedReasons) (\s@SuppressionOptions' {} a -> s {suppressedReasons = a} :: SuppressionOptions) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON SuppressionOptions where
+  parseJSON =
+    Data.withObject
+      "SuppressionOptions"
+      ( \x ->
+          SuppressionOptions'
+            Prelude.<$> ( x
+                            Data..:? "SuppressedReasons"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable SuppressionOptions where
+  hashWithSalt _salt SuppressionOptions' {..} =
+    _salt `Prelude.hashWithSalt` suppressedReasons
+
+instance Prelude.NFData SuppressionOptions where
+  rnf SuppressionOptions' {..} =
+    Prelude.rnf suppressedReasons
+
+instance Data.ToJSON SuppressionOptions where
+  toJSON SuppressionOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SuppressedReasons" Data..=)
+              Prelude.<$> suppressedReasons
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/Tag.hs b/gen/Amazonka/SESV2/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/Tag.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.SESV2.Types.Tag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.Tag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that defines the tags that are associated with a resource.
+-- A /tag/ is a label that you optionally define and associate with a
+-- resource. Tags can help you categorize and manage resources in different
+-- ways, such as by purpose, owner, environment, or other criteria. A
+-- resource can have as many as 50 tags.
+--
+-- Each tag consists of a required /tag key/ and an associated /tag value/,
+-- both of which you define. A tag key is a general label that acts as a
+-- category for a more specific tag value. A tag value acts as a descriptor
+-- within a tag key. A tag key can contain as many as 128 characters. A tag
+-- value can contain as many as 256 characters. The characters can be
+-- Unicode letters, digits, white space, or one of the following symbols: _
+-- . : \/ = + -. The following additional restrictions apply to tags:
+--
+-- -   Tag keys and values are case sensitive.
+--
+-- -   For each associated resource, each tag key must be unique and it can
+--     have only one value.
+--
+-- -   The @aws:@ prefix is reserved for use by Amazon Web Services; you
+--     can’t use it in any tag keys or values that you define. In addition,
+--     you can\'t edit or remove tag keys or values that use this prefix.
+--     Tags that use this prefix don’t count against the limit of 50 tags
+--     per resource.
+--
+-- -   You can associate tags with public or shared resources, but the tags
+--     are available only for your Amazon Web Services account, not any
+--     other accounts that share the resource. In addition, the tags are
+--     available only for resources that are located in the specified
+--     Amazon Web Services Region for your Amazon Web Services account.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | One part of a key-value pair that defines a tag. The maximum length of a
+    -- tag key is 128 characters. The minimum length is 1 character.
+    key :: Prelude.Text,
+    -- | The optional part of a key-value pair that defines a tag. The maximum
+    -- length of a tag value is 256 characters. The minimum length is 0
+    -- characters. If you don\'t want a resource to have a specific tag value,
+    -- don\'t specify a value for this parameter. If you don\'t specify a
+    -- value, Amazon SES sets the value to an empty string.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'tag_key' - One part of a key-value pair that defines a tag. The maximum length of a
+-- tag key is 128 characters. The minimum length is 1 character.
+--
+-- 'value', 'tag_value' - The optional part of a key-value pair that defines a tag. The maximum
+-- length of a tag value is 256 characters. The minimum length is 0
+-- characters. If you don\'t want a resource to have a specific tag value,
+-- don\'t specify a value for this parameter. If you don\'t specify a
+-- value, Amazon SES sets the value to an empty string.
+newTag ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Tag
+newTag pKey_ pValue_ =
+  Tag' {key = pKey_, value = pValue_}
+
+-- | One part of a key-value pair that defines a tag. The maximum length of a
+-- tag key is 128 characters. The minimum length is 1 character.
+tag_key :: Lens.Lens' Tag Prelude.Text
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag)
+
+-- | The optional part of a key-value pair that defines a tag. The maximum
+-- length of a tag value is 256 characters. The minimum length is 0
+-- characters. If you don\'t want a resource to have a specific tag value,
+-- don\'t specify a value for this parameter. If you don\'t specify a
+-- value, Amazon SES sets the value to an empty string.
+tag_value :: Lens.Lens' Tag Prelude.Text
+tag_value = Lens.lens (\Tag' {value} -> value) (\s@Tag' {} a -> s {value = a} :: Tag)
+
+instance Data.FromJSON Tag where
+  parseJSON =
+    Data.withObject
+      "Tag"
+      ( \x ->
+          Tag'
+            Prelude.<$> (x Data..: "Key")
+            Prelude.<*> (x Data..: "Value")
+      )
+
+instance Prelude.Hashable Tag where
+  hashWithSalt _salt Tag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Tag where
+  rnf Tag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Tag where
+  toJSON Tag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Key" Data..= key),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/Template.hs b/gen/Amazonka/SESV2/Types/Template.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/Template.hs
@@ -0,0 +1,114 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.Template
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.Template where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that defines the email template to use for an email message,
+-- and the values to use for any message variables in that template. An
+-- /email template/ is a type of message template that contains content
+-- that you want to define, save, and reuse in email messages that you
+-- send.
+--
+-- /See:/ 'newTemplate' smart constructor.
+data Template = Template'
+  { -- | The Amazon Resource Name (ARN) of the template.
+    templateArn :: Prelude.Maybe Prelude.Text,
+    -- | An object that defines the values to use for message variables in the
+    -- template. This object is a set of key-value pairs. Each key defines a
+    -- message variable in the template. The corresponding value defines the
+    -- value to use for that variable.
+    templateData :: Prelude.Maybe Prelude.Text,
+    -- | The name of the template. You will refer to this name when you send
+    -- email using the @SendTemplatedEmail@ or @SendBulkTemplatedEmail@
+    -- operations.
+    templateName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Template' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'templateArn', 'template_templateArn' - The Amazon Resource Name (ARN) of the template.
+--
+-- 'templateData', 'template_templateData' - An object that defines the values to use for message variables in the
+-- template. This object is a set of key-value pairs. Each key defines a
+-- message variable in the template. The corresponding value defines the
+-- value to use for that variable.
+--
+-- 'templateName', 'template_templateName' - The name of the template. You will refer to this name when you send
+-- email using the @SendTemplatedEmail@ or @SendBulkTemplatedEmail@
+-- operations.
+newTemplate ::
+  Template
+newTemplate =
+  Template'
+    { templateArn = Prelude.Nothing,
+      templateData = Prelude.Nothing,
+      templateName = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the template.
+template_templateArn :: Lens.Lens' Template (Prelude.Maybe Prelude.Text)
+template_templateArn = Lens.lens (\Template' {templateArn} -> templateArn) (\s@Template' {} a -> s {templateArn = a} :: Template)
+
+-- | An object that defines the values to use for message variables in the
+-- template. This object is a set of key-value pairs. Each key defines a
+-- message variable in the template. The corresponding value defines the
+-- value to use for that variable.
+template_templateData :: Lens.Lens' Template (Prelude.Maybe Prelude.Text)
+template_templateData = Lens.lens (\Template' {templateData} -> templateData) (\s@Template' {} a -> s {templateData = a} :: Template)
+
+-- | The name of the template. You will refer to this name when you send
+-- email using the @SendTemplatedEmail@ or @SendBulkTemplatedEmail@
+-- operations.
+template_templateName :: Lens.Lens' Template (Prelude.Maybe Prelude.Text)
+template_templateName = Lens.lens (\Template' {templateName} -> templateName) (\s@Template' {} a -> s {templateName = a} :: Template)
+
+instance Prelude.Hashable Template where
+  hashWithSalt _salt Template' {..} =
+    _salt
+      `Prelude.hashWithSalt` templateArn
+      `Prelude.hashWithSalt` templateData
+      `Prelude.hashWithSalt` templateName
+
+instance Prelude.NFData Template where
+  rnf Template' {..} =
+    Prelude.rnf templateArn
+      `Prelude.seq` Prelude.rnf templateData
+      `Prelude.seq` Prelude.rnf templateName
+
+instance Data.ToJSON Template where
+  toJSON Template' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("TemplateArn" Data..=) Prelude.<$> templateArn,
+            ("TemplateData" Data..=) Prelude.<$> templateData,
+            ("TemplateName" Data..=) Prelude.<$> templateName
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/TlsPolicy.hs b/gen/Amazonka/SESV2/Types/TlsPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/TlsPolicy.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.SESV2.Types.TlsPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.TlsPolicy
+  ( TlsPolicy
+      ( ..,
+        TlsPolicy_OPTIONAL,
+        TlsPolicy_REQUIRE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies whether messages that use the configuration set are required
+-- to use Transport Layer Security (TLS). If the value is @Require@,
+-- messages are only delivered if a TLS connection can be established. If
+-- the value is @Optional@, messages can be delivered in plain text if a
+-- TLS connection can\'t be established.
+newtype TlsPolicy = TlsPolicy'
+  { fromTlsPolicy ::
+      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 TlsPolicy_OPTIONAL :: TlsPolicy
+pattern TlsPolicy_OPTIONAL = TlsPolicy' "OPTIONAL"
+
+pattern TlsPolicy_REQUIRE :: TlsPolicy
+pattern TlsPolicy_REQUIRE = TlsPolicy' "REQUIRE"
+
+{-# COMPLETE
+  TlsPolicy_OPTIONAL,
+  TlsPolicy_REQUIRE,
+  TlsPolicy'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/Topic.hs b/gen/Amazonka/SESV2/Types/Topic.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/Topic.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.SESV2.Types.Topic
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.Topic 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
+import Amazonka.SESV2.Types.SubscriptionStatus
+
+-- | An interest group, theme, or label within a list. Lists can have
+-- multiple topics.
+--
+-- /See:/ 'newTopic' smart constructor.
+data Topic = Topic'
+  { -- | A description of what the topic is about, which the contact will see.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the topic.
+    topicName :: Prelude.Text,
+    -- | The name of the topic the contact will see.
+    displayName :: Prelude.Text,
+    -- | The default subscription status to be applied to a contact if the
+    -- contact has not noted their preference for subscribing to a topic.
+    defaultSubscriptionStatus :: SubscriptionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Topic' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'topic_description' - A description of what the topic is about, which the contact will see.
+--
+-- 'topicName', 'topic_topicName' - The name of the topic.
+--
+-- 'displayName', 'topic_displayName' - The name of the topic the contact will see.
+--
+-- 'defaultSubscriptionStatus', 'topic_defaultSubscriptionStatus' - The default subscription status to be applied to a contact if the
+-- contact has not noted their preference for subscribing to a topic.
+newTopic ::
+  -- | 'topicName'
+  Prelude.Text ->
+  -- | 'displayName'
+  Prelude.Text ->
+  -- | 'defaultSubscriptionStatus'
+  SubscriptionStatus ->
+  Topic
+newTopic
+  pTopicName_
+  pDisplayName_
+  pDefaultSubscriptionStatus_ =
+    Topic'
+      { description = Prelude.Nothing,
+        topicName = pTopicName_,
+        displayName = pDisplayName_,
+        defaultSubscriptionStatus =
+          pDefaultSubscriptionStatus_
+      }
+
+-- | A description of what the topic is about, which the contact will see.
+topic_description :: Lens.Lens' Topic (Prelude.Maybe Prelude.Text)
+topic_description = Lens.lens (\Topic' {description} -> description) (\s@Topic' {} a -> s {description = a} :: Topic)
+
+-- | The name of the topic.
+topic_topicName :: Lens.Lens' Topic Prelude.Text
+topic_topicName = Lens.lens (\Topic' {topicName} -> topicName) (\s@Topic' {} a -> s {topicName = a} :: Topic)
+
+-- | The name of the topic the contact will see.
+topic_displayName :: Lens.Lens' Topic Prelude.Text
+topic_displayName = Lens.lens (\Topic' {displayName} -> displayName) (\s@Topic' {} a -> s {displayName = a} :: Topic)
+
+-- | The default subscription status to be applied to a contact if the
+-- contact has not noted their preference for subscribing to a topic.
+topic_defaultSubscriptionStatus :: Lens.Lens' Topic SubscriptionStatus
+topic_defaultSubscriptionStatus = Lens.lens (\Topic' {defaultSubscriptionStatus} -> defaultSubscriptionStatus) (\s@Topic' {} a -> s {defaultSubscriptionStatus = a} :: Topic)
+
+instance Data.FromJSON Topic where
+  parseJSON =
+    Data.withObject
+      "Topic"
+      ( \x ->
+          Topic'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..: "TopicName")
+            Prelude.<*> (x Data..: "DisplayName")
+            Prelude.<*> (x Data..: "DefaultSubscriptionStatus")
+      )
+
+instance Prelude.Hashable Topic where
+  hashWithSalt _salt Topic' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` topicName
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` defaultSubscriptionStatus
+
+instance Prelude.NFData Topic where
+  rnf Topic' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf topicName
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf defaultSubscriptionStatus
+
+instance Data.ToJSON Topic where
+  toJSON Topic' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            Prelude.Just ("TopicName" Data..= topicName),
+            Prelude.Just ("DisplayName" Data..= displayName),
+            Prelude.Just
+              ( "DefaultSubscriptionStatus"
+                  Data..= defaultSubscriptionStatus
+              )
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/TopicFilter.hs b/gen/Amazonka/SESV2/Types/TopicFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/TopicFilter.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.SESV2.Types.TopicFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.TopicFilter 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
+
+-- | Used for filtering by a specific topic preference.
+--
+-- /See:/ 'newTopicFilter' smart constructor.
+data TopicFilter = TopicFilter'
+  { -- | The name of a topic on which you wish to apply the filter.
+    topicName :: Prelude.Maybe Prelude.Text,
+    -- | Notes that the default subscription status should be applied to a
+    -- contact because the contact has not noted their preference for
+    -- subscribing to a topic.
+    useDefaultIfPreferenceUnavailable :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TopicFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'topicName', 'topicFilter_topicName' - The name of a topic on which you wish to apply the filter.
+--
+-- 'useDefaultIfPreferenceUnavailable', 'topicFilter_useDefaultIfPreferenceUnavailable' - Notes that the default subscription status should be applied to a
+-- contact because the contact has not noted their preference for
+-- subscribing to a topic.
+newTopicFilter ::
+  TopicFilter
+newTopicFilter =
+  TopicFilter'
+    { topicName = Prelude.Nothing,
+      useDefaultIfPreferenceUnavailable = Prelude.Nothing
+    }
+
+-- | The name of a topic on which you wish to apply the filter.
+topicFilter_topicName :: Lens.Lens' TopicFilter (Prelude.Maybe Prelude.Text)
+topicFilter_topicName = Lens.lens (\TopicFilter' {topicName} -> topicName) (\s@TopicFilter' {} a -> s {topicName = a} :: TopicFilter)
+
+-- | Notes that the default subscription status should be applied to a
+-- contact because the contact has not noted their preference for
+-- subscribing to a topic.
+topicFilter_useDefaultIfPreferenceUnavailable :: Lens.Lens' TopicFilter (Prelude.Maybe Prelude.Bool)
+topicFilter_useDefaultIfPreferenceUnavailable = Lens.lens (\TopicFilter' {useDefaultIfPreferenceUnavailable} -> useDefaultIfPreferenceUnavailable) (\s@TopicFilter' {} a -> s {useDefaultIfPreferenceUnavailable = a} :: TopicFilter)
+
+instance Prelude.Hashable TopicFilter where
+  hashWithSalt _salt TopicFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` topicName
+      `Prelude.hashWithSalt` useDefaultIfPreferenceUnavailable
+
+instance Prelude.NFData TopicFilter where
+  rnf TopicFilter' {..} =
+    Prelude.rnf topicName
+      `Prelude.seq` Prelude.rnf useDefaultIfPreferenceUnavailable
+
+instance Data.ToJSON TopicFilter where
+  toJSON TopicFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("TopicName" Data..=) Prelude.<$> topicName,
+            ("UseDefaultIfPreferenceUnavailable" Data..=)
+              Prelude.<$> useDefaultIfPreferenceUnavailable
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/TopicPreference.hs b/gen/Amazonka/SESV2/Types/TopicPreference.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/TopicPreference.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.SESV2.Types.TopicPreference
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.TopicPreference 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
+import Amazonka.SESV2.Types.SubscriptionStatus
+
+-- | The contact\'s preference for being opted-in to or opted-out of a topic.
+--
+-- /See:/ 'newTopicPreference' smart constructor.
+data TopicPreference = TopicPreference'
+  { -- | The name of the topic.
+    topicName :: Prelude.Text,
+    -- | The contact\'s subscription status to a topic which is either @OPT_IN@
+    -- or @OPT_OUT@.
+    subscriptionStatus :: SubscriptionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TopicPreference' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'topicName', 'topicPreference_topicName' - The name of the topic.
+--
+-- 'subscriptionStatus', 'topicPreference_subscriptionStatus' - The contact\'s subscription status to a topic which is either @OPT_IN@
+-- or @OPT_OUT@.
+newTopicPreference ::
+  -- | 'topicName'
+  Prelude.Text ->
+  -- | 'subscriptionStatus'
+  SubscriptionStatus ->
+  TopicPreference
+newTopicPreference pTopicName_ pSubscriptionStatus_ =
+  TopicPreference'
+    { topicName = pTopicName_,
+      subscriptionStatus = pSubscriptionStatus_
+    }
+
+-- | The name of the topic.
+topicPreference_topicName :: Lens.Lens' TopicPreference Prelude.Text
+topicPreference_topicName = Lens.lens (\TopicPreference' {topicName} -> topicName) (\s@TopicPreference' {} a -> s {topicName = a} :: TopicPreference)
+
+-- | The contact\'s subscription status to a topic which is either @OPT_IN@
+-- or @OPT_OUT@.
+topicPreference_subscriptionStatus :: Lens.Lens' TopicPreference SubscriptionStatus
+topicPreference_subscriptionStatus = Lens.lens (\TopicPreference' {subscriptionStatus} -> subscriptionStatus) (\s@TopicPreference' {} a -> s {subscriptionStatus = a} :: TopicPreference)
+
+instance Data.FromJSON TopicPreference where
+  parseJSON =
+    Data.withObject
+      "TopicPreference"
+      ( \x ->
+          TopicPreference'
+            Prelude.<$> (x Data..: "TopicName")
+            Prelude.<*> (x Data..: "SubscriptionStatus")
+      )
+
+instance Prelude.Hashable TopicPreference where
+  hashWithSalt _salt TopicPreference' {..} =
+    _salt
+      `Prelude.hashWithSalt` topicName
+      `Prelude.hashWithSalt` subscriptionStatus
+
+instance Prelude.NFData TopicPreference where
+  rnf TopicPreference' {..} =
+    Prelude.rnf topicName
+      `Prelude.seq` Prelude.rnf subscriptionStatus
+
+instance Data.ToJSON TopicPreference where
+  toJSON TopicPreference' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("TopicName" Data..= topicName),
+            Prelude.Just
+              ("SubscriptionStatus" Data..= subscriptionStatus)
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/TrackingOptions.hs b/gen/Amazonka/SESV2/Types/TrackingOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/TrackingOptions.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.SESV2.Types.TrackingOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.TrackingOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that defines the tracking options for a configuration set.
+-- When you use the Amazon SES API v2 to send an email, it contains an
+-- invisible image that\'s used to track when recipients open your email.
+-- If your email contains links, those links are changed slightly in order
+-- to track when recipients click them.
+--
+-- These images and links include references to a domain operated by Amazon
+-- Web Services. You can optionally configure the Amazon SES to use a
+-- domain that you operate for these images and links.
+--
+-- /See:/ 'newTrackingOptions' smart constructor.
+data TrackingOptions = TrackingOptions'
+  { -- | The domain to use for tracking open and click events.
+    customRedirectDomain :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TrackingOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'customRedirectDomain', 'trackingOptions_customRedirectDomain' - The domain to use for tracking open and click events.
+newTrackingOptions ::
+  -- | 'customRedirectDomain'
+  Prelude.Text ->
+  TrackingOptions
+newTrackingOptions pCustomRedirectDomain_ =
+  TrackingOptions'
+    { customRedirectDomain =
+        pCustomRedirectDomain_
+    }
+
+-- | The domain to use for tracking open and click events.
+trackingOptions_customRedirectDomain :: Lens.Lens' TrackingOptions Prelude.Text
+trackingOptions_customRedirectDomain = Lens.lens (\TrackingOptions' {customRedirectDomain} -> customRedirectDomain) (\s@TrackingOptions' {} a -> s {customRedirectDomain = a} :: TrackingOptions)
+
+instance Data.FromJSON TrackingOptions where
+  parseJSON =
+    Data.withObject
+      "TrackingOptions"
+      ( \x ->
+          TrackingOptions'
+            Prelude.<$> (x Data..: "CustomRedirectDomain")
+      )
+
+instance Prelude.Hashable TrackingOptions where
+  hashWithSalt _salt TrackingOptions' {..} =
+    _salt `Prelude.hashWithSalt` customRedirectDomain
+
+instance Prelude.NFData TrackingOptions where
+  rnf TrackingOptions' {..} =
+    Prelude.rnf customRedirectDomain
+
+instance Data.ToJSON TrackingOptions where
+  toJSON TrackingOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "CustomRedirectDomain"
+                  Data..= customRedirectDomain
+              )
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/VdmAttributes.hs b/gen/Amazonka/SESV2/Types/VdmAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/VdmAttributes.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.SESV2.Types.VdmAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.VdmAttributes 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
+import Amazonka.SESV2.Types.DashboardAttributes
+import Amazonka.SESV2.Types.FeatureStatus
+import Amazonka.SESV2.Types.GuardianAttributes
+
+-- | The VDM attributes that apply to your Amazon SES account.
+--
+-- /See:/ 'newVdmAttributes' smart constructor.
+data VdmAttributes = VdmAttributes'
+  { -- | Specifies additional settings for your VDM configuration as applicable
+    -- to the Dashboard.
+    dashboardAttributes :: Prelude.Maybe DashboardAttributes,
+    -- | Specifies additional settings for your VDM configuration as applicable
+    -- to the Guardian.
+    guardianAttributes :: Prelude.Maybe GuardianAttributes,
+    -- | Specifies the status of your VDM configuration. Can be one of the
+    -- following:
+    --
+    -- -   @ENABLED@ – Amazon SES enables VDM for your account.
+    --
+    -- -   @DISABLED@ – Amazon SES disables VDM for your account.
+    vdmEnabled :: FeatureStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VdmAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dashboardAttributes', 'vdmAttributes_dashboardAttributes' - Specifies additional settings for your VDM configuration as applicable
+-- to the Dashboard.
+--
+-- 'guardianAttributes', 'vdmAttributes_guardianAttributes' - Specifies additional settings for your VDM configuration as applicable
+-- to the Guardian.
+--
+-- 'vdmEnabled', 'vdmAttributes_vdmEnabled' - Specifies the status of your VDM configuration. Can be one of the
+-- following:
+--
+-- -   @ENABLED@ – Amazon SES enables VDM for your account.
+--
+-- -   @DISABLED@ – Amazon SES disables VDM for your account.
+newVdmAttributes ::
+  -- | 'vdmEnabled'
+  FeatureStatus ->
+  VdmAttributes
+newVdmAttributes pVdmEnabled_ =
+  VdmAttributes'
+    { dashboardAttributes =
+        Prelude.Nothing,
+      guardianAttributes = Prelude.Nothing,
+      vdmEnabled = pVdmEnabled_
+    }
+
+-- | Specifies additional settings for your VDM configuration as applicable
+-- to the Dashboard.
+vdmAttributes_dashboardAttributes :: Lens.Lens' VdmAttributes (Prelude.Maybe DashboardAttributes)
+vdmAttributes_dashboardAttributes = Lens.lens (\VdmAttributes' {dashboardAttributes} -> dashboardAttributes) (\s@VdmAttributes' {} a -> s {dashboardAttributes = a} :: VdmAttributes)
+
+-- | Specifies additional settings for your VDM configuration as applicable
+-- to the Guardian.
+vdmAttributes_guardianAttributes :: Lens.Lens' VdmAttributes (Prelude.Maybe GuardianAttributes)
+vdmAttributes_guardianAttributes = Lens.lens (\VdmAttributes' {guardianAttributes} -> guardianAttributes) (\s@VdmAttributes' {} a -> s {guardianAttributes = a} :: VdmAttributes)
+
+-- | Specifies the status of your VDM configuration. Can be one of the
+-- following:
+--
+-- -   @ENABLED@ – Amazon SES enables VDM for your account.
+--
+-- -   @DISABLED@ – Amazon SES disables VDM for your account.
+vdmAttributes_vdmEnabled :: Lens.Lens' VdmAttributes FeatureStatus
+vdmAttributes_vdmEnabled = Lens.lens (\VdmAttributes' {vdmEnabled} -> vdmEnabled) (\s@VdmAttributes' {} a -> s {vdmEnabled = a} :: VdmAttributes)
+
+instance Data.FromJSON VdmAttributes where
+  parseJSON =
+    Data.withObject
+      "VdmAttributes"
+      ( \x ->
+          VdmAttributes'
+            Prelude.<$> (x Data..:? "DashboardAttributes")
+            Prelude.<*> (x Data..:? "GuardianAttributes")
+            Prelude.<*> (x Data..: "VdmEnabled")
+      )
+
+instance Prelude.Hashable VdmAttributes where
+  hashWithSalt _salt VdmAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` dashboardAttributes
+      `Prelude.hashWithSalt` guardianAttributes
+      `Prelude.hashWithSalt` vdmEnabled
+
+instance Prelude.NFData VdmAttributes where
+  rnf VdmAttributes' {..} =
+    Prelude.rnf dashboardAttributes
+      `Prelude.seq` Prelude.rnf guardianAttributes
+      `Prelude.seq` Prelude.rnf vdmEnabled
+
+instance Data.ToJSON VdmAttributes where
+  toJSON VdmAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DashboardAttributes" Data..=)
+              Prelude.<$> dashboardAttributes,
+            ("GuardianAttributes" Data..=)
+              Prelude.<$> guardianAttributes,
+            Prelude.Just ("VdmEnabled" Data..= vdmEnabled)
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/VdmOptions.hs b/gen/Amazonka/SESV2/Types/VdmOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/VdmOptions.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.SESV2.Types.VdmOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.VdmOptions 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
+import Amazonka.SESV2.Types.DashboardOptions
+import Amazonka.SESV2.Types.GuardianOptions
+
+-- | An object that defines the VDM settings that apply to emails that you
+-- send using the configuration set.
+--
+-- /See:/ 'newVdmOptions' smart constructor.
+data VdmOptions = VdmOptions'
+  { -- | Specifies additional settings for your VDM configuration as applicable
+    -- to the Dashboard.
+    dashboardOptions :: Prelude.Maybe DashboardOptions,
+    -- | Specifies additional settings for your VDM configuration as applicable
+    -- to the Guardian.
+    guardianOptions :: Prelude.Maybe GuardianOptions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VdmOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dashboardOptions', 'vdmOptions_dashboardOptions' - Specifies additional settings for your VDM configuration as applicable
+-- to the Dashboard.
+--
+-- 'guardianOptions', 'vdmOptions_guardianOptions' - Specifies additional settings for your VDM configuration as applicable
+-- to the Guardian.
+newVdmOptions ::
+  VdmOptions
+newVdmOptions =
+  VdmOptions'
+    { dashboardOptions = Prelude.Nothing,
+      guardianOptions = Prelude.Nothing
+    }
+
+-- | Specifies additional settings for your VDM configuration as applicable
+-- to the Dashboard.
+vdmOptions_dashboardOptions :: Lens.Lens' VdmOptions (Prelude.Maybe DashboardOptions)
+vdmOptions_dashboardOptions = Lens.lens (\VdmOptions' {dashboardOptions} -> dashboardOptions) (\s@VdmOptions' {} a -> s {dashboardOptions = a} :: VdmOptions)
+
+-- | Specifies additional settings for your VDM configuration as applicable
+-- to the Guardian.
+vdmOptions_guardianOptions :: Lens.Lens' VdmOptions (Prelude.Maybe GuardianOptions)
+vdmOptions_guardianOptions = Lens.lens (\VdmOptions' {guardianOptions} -> guardianOptions) (\s@VdmOptions' {} a -> s {guardianOptions = a} :: VdmOptions)
+
+instance Data.FromJSON VdmOptions where
+  parseJSON =
+    Data.withObject
+      "VdmOptions"
+      ( \x ->
+          VdmOptions'
+            Prelude.<$> (x Data..:? "DashboardOptions")
+            Prelude.<*> (x Data..:? "GuardianOptions")
+      )
+
+instance Prelude.Hashable VdmOptions where
+  hashWithSalt _salt VdmOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` dashboardOptions
+      `Prelude.hashWithSalt` guardianOptions
+
+instance Prelude.NFData VdmOptions where
+  rnf VdmOptions' {..} =
+    Prelude.rnf dashboardOptions
+      `Prelude.seq` Prelude.rnf guardianOptions
+
+instance Data.ToJSON VdmOptions where
+  toJSON VdmOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DashboardOptions" Data..=)
+              Prelude.<$> dashboardOptions,
+            ("GuardianOptions" Data..=)
+              Prelude.<$> guardianOptions
+          ]
+      )
diff --git a/gen/Amazonka/SESV2/Types/VerificationStatus.hs b/gen/Amazonka/SESV2/Types/VerificationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/VerificationStatus.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.Types.VerificationStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.VerificationStatus
+  ( VerificationStatus
+      ( ..,
+        VerificationStatus_FAILED,
+        VerificationStatus_NOT_STARTED,
+        VerificationStatus_PENDING,
+        VerificationStatus_SUCCESS,
+        VerificationStatus_TEMPORARY_FAILURE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype VerificationStatus = VerificationStatus'
+  { fromVerificationStatus ::
+      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 VerificationStatus_FAILED :: VerificationStatus
+pattern VerificationStatus_FAILED = VerificationStatus' "FAILED"
+
+pattern VerificationStatus_NOT_STARTED :: VerificationStatus
+pattern VerificationStatus_NOT_STARTED = VerificationStatus' "NOT_STARTED"
+
+pattern VerificationStatus_PENDING :: VerificationStatus
+pattern VerificationStatus_PENDING = VerificationStatus' "PENDING"
+
+pattern VerificationStatus_SUCCESS :: VerificationStatus
+pattern VerificationStatus_SUCCESS = VerificationStatus' "SUCCESS"
+
+pattern VerificationStatus_TEMPORARY_FAILURE :: VerificationStatus
+pattern VerificationStatus_TEMPORARY_FAILURE = VerificationStatus' "TEMPORARY_FAILURE"
+
+{-# COMPLETE
+  VerificationStatus_FAILED,
+  VerificationStatus_NOT_STARTED,
+  VerificationStatus_PENDING,
+  VerificationStatus_SUCCESS,
+  VerificationStatus_TEMPORARY_FAILURE,
+  VerificationStatus'
+  #-}
diff --git a/gen/Amazonka/SESV2/Types/VolumeStatistics.hs b/gen/Amazonka/SESV2/Types/VolumeStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/VolumeStatistics.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.SESV2.Types.VolumeStatistics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.VolumeStatistics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that contains information about the amount of email that was
+-- delivered to recipients.
+--
+-- /See:/ 'newVolumeStatistics' smart constructor.
+data VolumeStatistics = VolumeStatistics'
+  { -- | The total number of emails that arrived in recipients\' inboxes.
+    inboxRawCount :: Prelude.Maybe Prelude.Integer,
+    -- | An estimate of the percentage of emails sent from the current domain
+    -- that will arrive in recipients\' inboxes.
+    projectedInbox :: Prelude.Maybe Prelude.Integer,
+    -- | An estimate of the percentage of emails sent from the current domain
+    -- that will arrive in recipients\' spam or junk mail folders.
+    projectedSpam :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of emails that arrived in recipients\' spam or junk
+    -- mail folders.
+    spamRawCount :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VolumeStatistics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'inboxRawCount', 'volumeStatistics_inboxRawCount' - The total number of emails that arrived in recipients\' inboxes.
+--
+-- 'projectedInbox', 'volumeStatistics_projectedInbox' - An estimate of the percentage of emails sent from the current domain
+-- that will arrive in recipients\' inboxes.
+--
+-- 'projectedSpam', 'volumeStatistics_projectedSpam' - An estimate of the percentage of emails sent from the current domain
+-- that will arrive in recipients\' spam or junk mail folders.
+--
+-- 'spamRawCount', 'volumeStatistics_spamRawCount' - The total number of emails that arrived in recipients\' spam or junk
+-- mail folders.
+newVolumeStatistics ::
+  VolumeStatistics
+newVolumeStatistics =
+  VolumeStatistics'
+    { inboxRawCount = Prelude.Nothing,
+      projectedInbox = Prelude.Nothing,
+      projectedSpam = Prelude.Nothing,
+      spamRawCount = Prelude.Nothing
+    }
+
+-- | The total number of emails that arrived in recipients\' inboxes.
+volumeStatistics_inboxRawCount :: Lens.Lens' VolumeStatistics (Prelude.Maybe Prelude.Integer)
+volumeStatistics_inboxRawCount = Lens.lens (\VolumeStatistics' {inboxRawCount} -> inboxRawCount) (\s@VolumeStatistics' {} a -> s {inboxRawCount = a} :: VolumeStatistics)
+
+-- | An estimate of the percentage of emails sent from the current domain
+-- that will arrive in recipients\' inboxes.
+volumeStatistics_projectedInbox :: Lens.Lens' VolumeStatistics (Prelude.Maybe Prelude.Integer)
+volumeStatistics_projectedInbox = Lens.lens (\VolumeStatistics' {projectedInbox} -> projectedInbox) (\s@VolumeStatistics' {} a -> s {projectedInbox = a} :: VolumeStatistics)
+
+-- | An estimate of the percentage of emails sent from the current domain
+-- that will arrive in recipients\' spam or junk mail folders.
+volumeStatistics_projectedSpam :: Lens.Lens' VolumeStatistics (Prelude.Maybe Prelude.Integer)
+volumeStatistics_projectedSpam = Lens.lens (\VolumeStatistics' {projectedSpam} -> projectedSpam) (\s@VolumeStatistics' {} a -> s {projectedSpam = a} :: VolumeStatistics)
+
+-- | The total number of emails that arrived in recipients\' spam or junk
+-- mail folders.
+volumeStatistics_spamRawCount :: Lens.Lens' VolumeStatistics (Prelude.Maybe Prelude.Integer)
+volumeStatistics_spamRawCount = Lens.lens (\VolumeStatistics' {spamRawCount} -> spamRawCount) (\s@VolumeStatistics' {} a -> s {spamRawCount = a} :: VolumeStatistics)
+
+instance Data.FromJSON VolumeStatistics where
+  parseJSON =
+    Data.withObject
+      "VolumeStatistics"
+      ( \x ->
+          VolumeStatistics'
+            Prelude.<$> (x Data..:? "InboxRawCount")
+            Prelude.<*> (x Data..:? "ProjectedInbox")
+            Prelude.<*> (x Data..:? "ProjectedSpam")
+            Prelude.<*> (x Data..:? "SpamRawCount")
+      )
+
+instance Prelude.Hashable VolumeStatistics where
+  hashWithSalt _salt VolumeStatistics' {..} =
+    _salt
+      `Prelude.hashWithSalt` inboxRawCount
+      `Prelude.hashWithSalt` projectedInbox
+      `Prelude.hashWithSalt` projectedSpam
+      `Prelude.hashWithSalt` spamRawCount
+
+instance Prelude.NFData VolumeStatistics where
+  rnf VolumeStatistics' {..} =
+    Prelude.rnf inboxRawCount
+      `Prelude.seq` Prelude.rnf projectedInbox
+      `Prelude.seq` Prelude.rnf projectedSpam
+      `Prelude.seq` Prelude.rnf spamRawCount
diff --git a/gen/Amazonka/SESV2/Types/WarmupStatus.hs b/gen/Amazonka/SESV2/Types/WarmupStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Types/WarmupStatus.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.SESV2.Types.WarmupStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SESV2.Types.WarmupStatus
+  ( WarmupStatus
+      ( ..,
+        WarmupStatus_DONE,
+        WarmupStatus_IN_PROGRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The warmup status of a dedicated IP.
+newtype WarmupStatus = WarmupStatus'
+  { fromWarmupStatus ::
+      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 WarmupStatus_DONE :: WarmupStatus
+pattern WarmupStatus_DONE = WarmupStatus' "DONE"
+
+pattern WarmupStatus_IN_PROGRESS :: WarmupStatus
+pattern WarmupStatus_IN_PROGRESS = WarmupStatus' "IN_PROGRESS"
+
+{-# COMPLETE
+  WarmupStatus_DONE,
+  WarmupStatus_IN_PROGRESS,
+  WarmupStatus'
+  #-}
diff --git a/gen/Amazonka/SESV2/UntagResource.hs b/gen/Amazonka/SESV2/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/UntagResource.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.SESV2.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)
+--
+-- Remove one or more tags (keys and values) from a specified resource.
+module Amazonka.SESV2.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource that you want to remove
+    -- one or more tags from.
+    resourceArn :: Prelude.Text,
+    -- | The tags (tag keys) that you want to remove from the resource. When you
+    -- specify a tag key, the action removes both that key and its associated
+    -- tag value.
+    --
+    -- To remove more than one tag from the resource, append the @TagKeys@
+    -- parameter and argument for each additional tag to remove, separated by
+    -- an ampersand. For example:
+    -- @\/v2\/email\/tags?ResourceArn=ResourceArn&TagKeys=Key1&TagKeys=Key2@
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource that you want to remove
+-- one or more tags from.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The tags (tag keys) that you want to remove from the resource. When you
+-- specify a tag key, the action removes both that key and its associated
+-- tag value.
+--
+-- To remove more than one tag from the resource, append the @TagKeys@
+-- parameter and argument for each additional tag to remove, separated by
+-- an ampersand. For example:
+-- @\/v2\/email\/tags?ResourceArn=ResourceArn&TagKeys=Key1&TagKeys=Key2@
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource that you want to remove
+-- one or more tags from.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The tags (tag keys) that you want to remove from the resource. When you
+-- specify a tag key, the action removes both that key and its associated
+-- tag value.
+--
+-- To remove more than one tag from the resource, append the @TagKeys@
+-- parameter and argument for each additional tag to remove, separated by
+-- an ampersand. For example:
+-- @\/v2\/email\/tags?ResourceArn=ResourceArn&TagKeys=Key1&TagKeys=Key2@
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath = Prelude.const "/v2/email/tags"
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      [ "ResourceArn" Data.=: resourceArn,
+        "TagKeys" Data.=: Data.toQueryList "member" tagKeys
+      ]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/UpdateConfigurationSetEventDestination.hs b/gen/Amazonka/SESV2/UpdateConfigurationSetEventDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/UpdateConfigurationSetEventDestination.hs
@@ -0,0 +1,244 @@
+{-# 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.SESV2.UpdateConfigurationSetEventDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update the configuration of an event destination for a configuration
+-- set.
+--
+-- /Events/ include message sends, deliveries, opens, clicks, bounces, and
+-- complaints. /Event destinations/ are places that you can send
+-- information about these events to. For example, you can send event data
+-- to Amazon SNS to receive notifications when you receive bounces or
+-- complaints, or you can use Amazon Kinesis Data Firehose to stream data
+-- to Amazon S3 for long-term storage.
+module Amazonka.SESV2.UpdateConfigurationSetEventDestination
+  ( -- * Creating a Request
+    UpdateConfigurationSetEventDestination (..),
+    newUpdateConfigurationSetEventDestination,
+
+    -- * Request Lenses
+    updateConfigurationSetEventDestination_configurationSetName,
+    updateConfigurationSetEventDestination_eventDestinationName,
+    updateConfigurationSetEventDestination_eventDestination,
+
+    -- * Destructuring the Response
+    UpdateConfigurationSetEventDestinationResponse (..),
+    newUpdateConfigurationSetEventDestinationResponse,
+
+    -- * Response Lenses
+    updateConfigurationSetEventDestinationResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | A request to change the settings for an event destination for a
+-- configuration set.
+--
+-- /See:/ 'newUpdateConfigurationSetEventDestination' smart constructor.
+data UpdateConfigurationSetEventDestination = UpdateConfigurationSetEventDestination'
+  { -- | The name of the configuration set that contains the event destination to
+    -- modify.
+    configurationSetName :: Prelude.Text,
+    -- | The name of the event destination.
+    eventDestinationName :: Prelude.Text,
+    -- | An object that defines the event destination.
+    eventDestination :: EventDestinationDefinition
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateConfigurationSetEventDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configurationSetName', 'updateConfigurationSetEventDestination_configurationSetName' - The name of the configuration set that contains the event destination to
+-- modify.
+--
+-- 'eventDestinationName', 'updateConfigurationSetEventDestination_eventDestinationName' - The name of the event destination.
+--
+-- 'eventDestination', 'updateConfigurationSetEventDestination_eventDestination' - An object that defines the event destination.
+newUpdateConfigurationSetEventDestination ::
+  -- | 'configurationSetName'
+  Prelude.Text ->
+  -- | 'eventDestinationName'
+  Prelude.Text ->
+  -- | 'eventDestination'
+  EventDestinationDefinition ->
+  UpdateConfigurationSetEventDestination
+newUpdateConfigurationSetEventDestination
+  pConfigurationSetName_
+  pEventDestinationName_
+  pEventDestination_ =
+    UpdateConfigurationSetEventDestination'
+      { configurationSetName =
+          pConfigurationSetName_,
+        eventDestinationName =
+          pEventDestinationName_,
+        eventDestination =
+          pEventDestination_
+      }
+
+-- | The name of the configuration set that contains the event destination to
+-- modify.
+updateConfigurationSetEventDestination_configurationSetName :: Lens.Lens' UpdateConfigurationSetEventDestination Prelude.Text
+updateConfigurationSetEventDestination_configurationSetName = Lens.lens (\UpdateConfigurationSetEventDestination' {configurationSetName} -> configurationSetName) (\s@UpdateConfigurationSetEventDestination' {} a -> s {configurationSetName = a} :: UpdateConfigurationSetEventDestination)
+
+-- | The name of the event destination.
+updateConfigurationSetEventDestination_eventDestinationName :: Lens.Lens' UpdateConfigurationSetEventDestination Prelude.Text
+updateConfigurationSetEventDestination_eventDestinationName = Lens.lens (\UpdateConfigurationSetEventDestination' {eventDestinationName} -> eventDestinationName) (\s@UpdateConfigurationSetEventDestination' {} a -> s {eventDestinationName = a} :: UpdateConfigurationSetEventDestination)
+
+-- | An object that defines the event destination.
+updateConfigurationSetEventDestination_eventDestination :: Lens.Lens' UpdateConfigurationSetEventDestination EventDestinationDefinition
+updateConfigurationSetEventDestination_eventDestination = Lens.lens (\UpdateConfigurationSetEventDestination' {eventDestination} -> eventDestination) (\s@UpdateConfigurationSetEventDestination' {} a -> s {eventDestination = a} :: UpdateConfigurationSetEventDestination)
+
+instance
+  Core.AWSRequest
+    UpdateConfigurationSetEventDestination
+  where
+  type
+    AWSResponse
+      UpdateConfigurationSetEventDestination =
+      UpdateConfigurationSetEventDestinationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateConfigurationSetEventDestinationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateConfigurationSetEventDestination
+  where
+  hashWithSalt
+    _salt
+    UpdateConfigurationSetEventDestination' {..} =
+      _salt
+        `Prelude.hashWithSalt` configurationSetName
+        `Prelude.hashWithSalt` eventDestinationName
+        `Prelude.hashWithSalt` eventDestination
+
+instance
+  Prelude.NFData
+    UpdateConfigurationSetEventDestination
+  where
+  rnf UpdateConfigurationSetEventDestination' {..} =
+    Prelude.rnf configurationSetName
+      `Prelude.seq` Prelude.rnf eventDestinationName
+      `Prelude.seq` Prelude.rnf eventDestination
+
+instance
+  Data.ToHeaders
+    UpdateConfigurationSetEventDestination
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    UpdateConfigurationSetEventDestination
+  where
+  toJSON UpdateConfigurationSetEventDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("EventDestination" Data..= eventDestination)
+          ]
+      )
+
+instance
+  Data.ToPath
+    UpdateConfigurationSetEventDestination
+  where
+  toPath UpdateConfigurationSetEventDestination' {..} =
+    Prelude.mconcat
+      [ "/v2/email/configuration-sets/",
+        Data.toBS configurationSetName,
+        "/event-destinations/",
+        Data.toBS eventDestinationName
+      ]
+
+instance
+  Data.ToQuery
+    UpdateConfigurationSetEventDestination
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newUpdateConfigurationSetEventDestinationResponse' smart constructor.
+data UpdateConfigurationSetEventDestinationResponse = UpdateConfigurationSetEventDestinationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateConfigurationSetEventDestinationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateConfigurationSetEventDestinationResponse_httpStatus' - The response's http status code.
+newUpdateConfigurationSetEventDestinationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateConfigurationSetEventDestinationResponse
+newUpdateConfigurationSetEventDestinationResponse
+  pHttpStatus_ =
+    UpdateConfigurationSetEventDestinationResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+updateConfigurationSetEventDestinationResponse_httpStatus :: Lens.Lens' UpdateConfigurationSetEventDestinationResponse Prelude.Int
+updateConfigurationSetEventDestinationResponse_httpStatus = Lens.lens (\UpdateConfigurationSetEventDestinationResponse' {httpStatus} -> httpStatus) (\s@UpdateConfigurationSetEventDestinationResponse' {} a -> s {httpStatus = a} :: UpdateConfigurationSetEventDestinationResponse)
+
+instance
+  Prelude.NFData
+    UpdateConfigurationSetEventDestinationResponse
+  where
+  rnf
+    UpdateConfigurationSetEventDestinationResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/UpdateContact.hs b/gen/Amazonka/SESV2/UpdateContact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/UpdateContact.hs
@@ -0,0 +1,220 @@
+{-# 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.SESV2.UpdateContact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a contact\'s preferences for a list. It is not necessary to
+-- specify all existing topic preferences in the TopicPreferences object,
+-- just the ones that need updating.
+module Amazonka.SESV2.UpdateContact
+  ( -- * Creating a Request
+    UpdateContact (..),
+    newUpdateContact,
+
+    -- * Request Lenses
+    updateContact_attributesData,
+    updateContact_topicPreferences,
+    updateContact_unsubscribeAll,
+    updateContact_contactListName,
+    updateContact_emailAddress,
+
+    -- * Destructuring the Response
+    UpdateContactResponse (..),
+    newUpdateContactResponse,
+
+    -- * Response Lenses
+    updateContactResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | /See:/ 'newUpdateContact' smart constructor.
+data UpdateContact = UpdateContact'
+  { -- | The attribute data attached to a contact.
+    attributesData :: Prelude.Maybe Prelude.Text,
+    -- | The contact\'s preference for being opted-in to or opted-out of a topic.
+    topicPreferences :: Prelude.Maybe [TopicPreference],
+    -- | A boolean value status noting if the contact is unsubscribed from all
+    -- contact list topics.
+    unsubscribeAll :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the contact list.
+    contactListName :: Prelude.Text,
+    -- | The contact\'s email addres.
+    emailAddress :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateContact' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributesData', 'updateContact_attributesData' - The attribute data attached to a contact.
+--
+-- 'topicPreferences', 'updateContact_topicPreferences' - The contact\'s preference for being opted-in to or opted-out of a topic.
+--
+-- 'unsubscribeAll', 'updateContact_unsubscribeAll' - A boolean value status noting if the contact is unsubscribed from all
+-- contact list topics.
+--
+-- 'contactListName', 'updateContact_contactListName' - The name of the contact list.
+--
+-- 'emailAddress', 'updateContact_emailAddress' - The contact\'s email addres.
+newUpdateContact ::
+  -- | 'contactListName'
+  Prelude.Text ->
+  -- | 'emailAddress'
+  Prelude.Text ->
+  UpdateContact
+newUpdateContact pContactListName_ pEmailAddress_ =
+  UpdateContact'
+    { attributesData = Prelude.Nothing,
+      topicPreferences = Prelude.Nothing,
+      unsubscribeAll = Prelude.Nothing,
+      contactListName = pContactListName_,
+      emailAddress = pEmailAddress_
+    }
+
+-- | The attribute data attached to a contact.
+updateContact_attributesData :: Lens.Lens' UpdateContact (Prelude.Maybe Prelude.Text)
+updateContact_attributesData = Lens.lens (\UpdateContact' {attributesData} -> attributesData) (\s@UpdateContact' {} a -> s {attributesData = a} :: UpdateContact)
+
+-- | The contact\'s preference for being opted-in to or opted-out of a topic.
+updateContact_topicPreferences :: Lens.Lens' UpdateContact (Prelude.Maybe [TopicPreference])
+updateContact_topicPreferences = Lens.lens (\UpdateContact' {topicPreferences} -> topicPreferences) (\s@UpdateContact' {} a -> s {topicPreferences = a} :: UpdateContact) Prelude.. Lens.mapping Lens.coerced
+
+-- | A boolean value status noting if the contact is unsubscribed from all
+-- contact list topics.
+updateContact_unsubscribeAll :: Lens.Lens' UpdateContact (Prelude.Maybe Prelude.Bool)
+updateContact_unsubscribeAll = Lens.lens (\UpdateContact' {unsubscribeAll} -> unsubscribeAll) (\s@UpdateContact' {} a -> s {unsubscribeAll = a} :: UpdateContact)
+
+-- | The name of the contact list.
+updateContact_contactListName :: Lens.Lens' UpdateContact Prelude.Text
+updateContact_contactListName = Lens.lens (\UpdateContact' {contactListName} -> contactListName) (\s@UpdateContact' {} a -> s {contactListName = a} :: UpdateContact)
+
+-- | The contact\'s email addres.
+updateContact_emailAddress :: Lens.Lens' UpdateContact Prelude.Text
+updateContact_emailAddress = Lens.lens (\UpdateContact' {emailAddress} -> emailAddress) (\s@UpdateContact' {} a -> s {emailAddress = a} :: UpdateContact)
+
+instance Core.AWSRequest UpdateContact where
+  type
+    AWSResponse UpdateContact =
+      UpdateContactResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateContactResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateContact where
+  hashWithSalt _salt UpdateContact' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributesData
+      `Prelude.hashWithSalt` topicPreferences
+      `Prelude.hashWithSalt` unsubscribeAll
+      `Prelude.hashWithSalt` contactListName
+      `Prelude.hashWithSalt` emailAddress
+
+instance Prelude.NFData UpdateContact where
+  rnf UpdateContact' {..} =
+    Prelude.rnf attributesData
+      `Prelude.seq` Prelude.rnf topicPreferences
+      `Prelude.seq` Prelude.rnf unsubscribeAll
+      `Prelude.seq` Prelude.rnf contactListName
+      `Prelude.seq` Prelude.rnf emailAddress
+
+instance Data.ToHeaders UpdateContact where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateContact where
+  toJSON UpdateContact' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AttributesData" Data..=)
+              Prelude.<$> attributesData,
+            ("TopicPreferences" Data..=)
+              Prelude.<$> topicPreferences,
+            ("UnsubscribeAll" Data..=)
+              Prelude.<$> unsubscribeAll
+          ]
+      )
+
+instance Data.ToPath UpdateContact where
+  toPath UpdateContact' {..} =
+    Prelude.mconcat
+      [ "/v2/email/contact-lists/",
+        Data.toBS contactListName,
+        "/contacts/",
+        Data.toBS emailAddress
+      ]
+
+instance Data.ToQuery UpdateContact where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateContactResponse' smart constructor.
+data UpdateContactResponse = UpdateContactResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateContactResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateContactResponse_httpStatus' - The response's http status code.
+newUpdateContactResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateContactResponse
+newUpdateContactResponse pHttpStatus_ =
+  UpdateContactResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateContactResponse_httpStatus :: Lens.Lens' UpdateContactResponse Prelude.Int
+updateContactResponse_httpStatus = Lens.lens (\UpdateContactResponse' {httpStatus} -> httpStatus) (\s@UpdateContactResponse' {} a -> s {httpStatus = a} :: UpdateContactResponse)
+
+instance Prelude.NFData UpdateContactResponse where
+  rnf UpdateContactResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/UpdateContactList.hs b/gen/Amazonka/SESV2/UpdateContactList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/UpdateContactList.hs
@@ -0,0 +1,190 @@
+{-# 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.SESV2.UpdateContactList
+-- 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 contact list metadata. This operation does a complete
+-- replacement.
+module Amazonka.SESV2.UpdateContactList
+  ( -- * Creating a Request
+    UpdateContactList (..),
+    newUpdateContactList,
+
+    -- * Request Lenses
+    updateContactList_description,
+    updateContactList_topics,
+    updateContactList_contactListName,
+
+    -- * Destructuring the Response
+    UpdateContactListResponse (..),
+    newUpdateContactListResponse,
+
+    -- * Response Lenses
+    updateContactListResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | /See:/ 'newUpdateContactList' smart constructor.
+data UpdateContactList = UpdateContactList'
+  { -- | A description of what the contact list is about.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | An interest group, theme, or label within a list. A contact list can
+    -- have multiple topics.
+    topics :: Prelude.Maybe [Topic],
+    -- | The name of the contact list.
+    contactListName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateContactList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateContactList_description' - A description of what the contact list is about.
+--
+-- 'topics', 'updateContactList_topics' - An interest group, theme, or label within a list. A contact list can
+-- have multiple topics.
+--
+-- 'contactListName', 'updateContactList_contactListName' - The name of the contact list.
+newUpdateContactList ::
+  -- | 'contactListName'
+  Prelude.Text ->
+  UpdateContactList
+newUpdateContactList pContactListName_ =
+  UpdateContactList'
+    { description = Prelude.Nothing,
+      topics = Prelude.Nothing,
+      contactListName = pContactListName_
+    }
+
+-- | A description of what the contact list is about.
+updateContactList_description :: Lens.Lens' UpdateContactList (Prelude.Maybe Prelude.Text)
+updateContactList_description = Lens.lens (\UpdateContactList' {description} -> description) (\s@UpdateContactList' {} a -> s {description = a} :: UpdateContactList)
+
+-- | An interest group, theme, or label within a list. A contact list can
+-- have multiple topics.
+updateContactList_topics :: Lens.Lens' UpdateContactList (Prelude.Maybe [Topic])
+updateContactList_topics = Lens.lens (\UpdateContactList' {topics} -> topics) (\s@UpdateContactList' {} a -> s {topics = a} :: UpdateContactList) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the contact list.
+updateContactList_contactListName :: Lens.Lens' UpdateContactList Prelude.Text
+updateContactList_contactListName = Lens.lens (\UpdateContactList' {contactListName} -> contactListName) (\s@UpdateContactList' {} a -> s {contactListName = a} :: UpdateContactList)
+
+instance Core.AWSRequest UpdateContactList where
+  type
+    AWSResponse UpdateContactList =
+      UpdateContactListResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateContactListResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateContactList where
+  hashWithSalt _salt UpdateContactList' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` topics
+      `Prelude.hashWithSalt` contactListName
+
+instance Prelude.NFData UpdateContactList where
+  rnf UpdateContactList' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf topics
+      `Prelude.seq` Prelude.rnf contactListName
+
+instance Data.ToHeaders UpdateContactList where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateContactList where
+  toJSON UpdateContactList' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Topics" Data..=) Prelude.<$> topics
+          ]
+      )
+
+instance Data.ToPath UpdateContactList where
+  toPath UpdateContactList' {..} =
+    Prelude.mconcat
+      [ "/v2/email/contact-lists/",
+        Data.toBS contactListName
+      ]
+
+instance Data.ToQuery UpdateContactList where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateContactListResponse' smart constructor.
+data UpdateContactListResponse = UpdateContactListResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateContactListResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateContactListResponse_httpStatus' - The response's http status code.
+newUpdateContactListResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateContactListResponse
+newUpdateContactListResponse pHttpStatus_ =
+  UpdateContactListResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateContactListResponse_httpStatus :: Lens.Lens' UpdateContactListResponse Prelude.Int
+updateContactListResponse_httpStatus = Lens.lens (\UpdateContactListResponse' {httpStatus} -> httpStatus) (\s@UpdateContactListResponse' {} a -> s {httpStatus = a} :: UpdateContactListResponse)
+
+instance Prelude.NFData UpdateContactListResponse where
+  rnf UpdateContactListResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/UpdateCustomVerificationEmailTemplate.hs b/gen/Amazonka/SESV2/UpdateCustomVerificationEmailTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/UpdateCustomVerificationEmailTemplate.hs
@@ -0,0 +1,316 @@
+{-# 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.SESV2.UpdateCustomVerificationEmailTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing custom verification email template.
+--
+-- For more information about custom verification email templates, see
+-- <https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#send-email-verify-address-custom Using custom verification email templates>
+-- in the /Amazon SES Developer Guide/.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.UpdateCustomVerificationEmailTemplate
+  ( -- * Creating a Request
+    UpdateCustomVerificationEmailTemplate (..),
+    newUpdateCustomVerificationEmailTemplate,
+
+    -- * Request Lenses
+    updateCustomVerificationEmailTemplate_templateName,
+    updateCustomVerificationEmailTemplate_fromEmailAddress,
+    updateCustomVerificationEmailTemplate_templateSubject,
+    updateCustomVerificationEmailTemplate_templateContent,
+    updateCustomVerificationEmailTemplate_successRedirectionURL,
+    updateCustomVerificationEmailTemplate_failureRedirectionURL,
+
+    -- * Destructuring the Response
+    UpdateCustomVerificationEmailTemplateResponse (..),
+    newUpdateCustomVerificationEmailTemplateResponse,
+
+    -- * Response Lenses
+    updateCustomVerificationEmailTemplateResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to update an existing custom verification email
+-- template.
+--
+-- /See:/ 'newUpdateCustomVerificationEmailTemplate' smart constructor.
+data UpdateCustomVerificationEmailTemplate = UpdateCustomVerificationEmailTemplate'
+  { -- | The name of the custom verification email template that you want to
+    -- update.
+    templateName :: Prelude.Text,
+    -- | The email address that the custom verification email is sent from.
+    fromEmailAddress :: Prelude.Text,
+    -- | The subject line of the custom verification email.
+    templateSubject :: Prelude.Text,
+    -- | The content of the custom verification email. The total size of the
+    -- email must be less than 10 MB. The message body may contain HTML, with
+    -- some limitations. For more information, see
+    -- <https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#send-email-verify-address-custom-faq Custom verification email frequently asked questions>
+    -- in the /Amazon SES Developer Guide/.
+    templateContent :: Prelude.Text,
+    -- | The URL that the recipient of the verification email is sent to if his
+    -- or her address is successfully verified.
+    successRedirectionURL :: Prelude.Text,
+    -- | The URL that the recipient of the verification email is sent to if his
+    -- or her address is not successfully verified.
+    failureRedirectionURL :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCustomVerificationEmailTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'templateName', 'updateCustomVerificationEmailTemplate_templateName' - The name of the custom verification email template that you want to
+-- update.
+--
+-- 'fromEmailAddress', 'updateCustomVerificationEmailTemplate_fromEmailAddress' - The email address that the custom verification email is sent from.
+--
+-- 'templateSubject', 'updateCustomVerificationEmailTemplate_templateSubject' - The subject line of the custom verification email.
+--
+-- 'templateContent', 'updateCustomVerificationEmailTemplate_templateContent' - The content of the custom verification email. The total size of the
+-- email must be less than 10 MB. The message body may contain HTML, with
+-- some limitations. For more information, see
+-- <https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#send-email-verify-address-custom-faq Custom verification email frequently asked questions>
+-- in the /Amazon SES Developer Guide/.
+--
+-- 'successRedirectionURL', 'updateCustomVerificationEmailTemplate_successRedirectionURL' - The URL that the recipient of the verification email is sent to if his
+-- or her address is successfully verified.
+--
+-- 'failureRedirectionURL', 'updateCustomVerificationEmailTemplate_failureRedirectionURL' - The URL that the recipient of the verification email is sent to if his
+-- or her address is not successfully verified.
+newUpdateCustomVerificationEmailTemplate ::
+  -- | 'templateName'
+  Prelude.Text ->
+  -- | 'fromEmailAddress'
+  Prelude.Text ->
+  -- | 'templateSubject'
+  Prelude.Text ->
+  -- | 'templateContent'
+  Prelude.Text ->
+  -- | 'successRedirectionURL'
+  Prelude.Text ->
+  -- | 'failureRedirectionURL'
+  Prelude.Text ->
+  UpdateCustomVerificationEmailTemplate
+newUpdateCustomVerificationEmailTemplate
+  pTemplateName_
+  pFromEmailAddress_
+  pTemplateSubject_
+  pTemplateContent_
+  pSuccessRedirectionURL_
+  pFailureRedirectionURL_ =
+    UpdateCustomVerificationEmailTemplate'
+      { templateName =
+          pTemplateName_,
+        fromEmailAddress =
+          pFromEmailAddress_,
+        templateSubject = pTemplateSubject_,
+        templateContent = pTemplateContent_,
+        successRedirectionURL =
+          pSuccessRedirectionURL_,
+        failureRedirectionURL =
+          pFailureRedirectionURL_
+      }
+
+-- | The name of the custom verification email template that you want to
+-- update.
+updateCustomVerificationEmailTemplate_templateName :: Lens.Lens' UpdateCustomVerificationEmailTemplate Prelude.Text
+updateCustomVerificationEmailTemplate_templateName = Lens.lens (\UpdateCustomVerificationEmailTemplate' {templateName} -> templateName) (\s@UpdateCustomVerificationEmailTemplate' {} a -> s {templateName = a} :: UpdateCustomVerificationEmailTemplate)
+
+-- | The email address that the custom verification email is sent from.
+updateCustomVerificationEmailTemplate_fromEmailAddress :: Lens.Lens' UpdateCustomVerificationEmailTemplate Prelude.Text
+updateCustomVerificationEmailTemplate_fromEmailAddress = Lens.lens (\UpdateCustomVerificationEmailTemplate' {fromEmailAddress} -> fromEmailAddress) (\s@UpdateCustomVerificationEmailTemplate' {} a -> s {fromEmailAddress = a} :: UpdateCustomVerificationEmailTemplate)
+
+-- | The subject line of the custom verification email.
+updateCustomVerificationEmailTemplate_templateSubject :: Lens.Lens' UpdateCustomVerificationEmailTemplate Prelude.Text
+updateCustomVerificationEmailTemplate_templateSubject = Lens.lens (\UpdateCustomVerificationEmailTemplate' {templateSubject} -> templateSubject) (\s@UpdateCustomVerificationEmailTemplate' {} a -> s {templateSubject = a} :: UpdateCustomVerificationEmailTemplate)
+
+-- | The content of the custom verification email. The total size of the
+-- email must be less than 10 MB. The message body may contain HTML, with
+-- some limitations. For more information, see
+-- <https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#send-email-verify-address-custom-faq Custom verification email frequently asked questions>
+-- in the /Amazon SES Developer Guide/.
+updateCustomVerificationEmailTemplate_templateContent :: Lens.Lens' UpdateCustomVerificationEmailTemplate Prelude.Text
+updateCustomVerificationEmailTemplate_templateContent = Lens.lens (\UpdateCustomVerificationEmailTemplate' {templateContent} -> templateContent) (\s@UpdateCustomVerificationEmailTemplate' {} a -> s {templateContent = a} :: UpdateCustomVerificationEmailTemplate)
+
+-- | The URL that the recipient of the verification email is sent to if his
+-- or her address is successfully verified.
+updateCustomVerificationEmailTemplate_successRedirectionURL :: Lens.Lens' UpdateCustomVerificationEmailTemplate Prelude.Text
+updateCustomVerificationEmailTemplate_successRedirectionURL = Lens.lens (\UpdateCustomVerificationEmailTemplate' {successRedirectionURL} -> successRedirectionURL) (\s@UpdateCustomVerificationEmailTemplate' {} a -> s {successRedirectionURL = a} :: UpdateCustomVerificationEmailTemplate)
+
+-- | The URL that the recipient of the verification email is sent to if his
+-- or her address is not successfully verified.
+updateCustomVerificationEmailTemplate_failureRedirectionURL :: Lens.Lens' UpdateCustomVerificationEmailTemplate Prelude.Text
+updateCustomVerificationEmailTemplate_failureRedirectionURL = Lens.lens (\UpdateCustomVerificationEmailTemplate' {failureRedirectionURL} -> failureRedirectionURL) (\s@UpdateCustomVerificationEmailTemplate' {} a -> s {failureRedirectionURL = a} :: UpdateCustomVerificationEmailTemplate)
+
+instance
+  Core.AWSRequest
+    UpdateCustomVerificationEmailTemplate
+  where
+  type
+    AWSResponse
+      UpdateCustomVerificationEmailTemplate =
+      UpdateCustomVerificationEmailTemplateResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateCustomVerificationEmailTemplateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateCustomVerificationEmailTemplate
+  where
+  hashWithSalt
+    _salt
+    UpdateCustomVerificationEmailTemplate' {..} =
+      _salt
+        `Prelude.hashWithSalt` templateName
+        `Prelude.hashWithSalt` fromEmailAddress
+        `Prelude.hashWithSalt` templateSubject
+        `Prelude.hashWithSalt` templateContent
+        `Prelude.hashWithSalt` successRedirectionURL
+        `Prelude.hashWithSalt` failureRedirectionURL
+
+instance
+  Prelude.NFData
+    UpdateCustomVerificationEmailTemplate
+  where
+  rnf UpdateCustomVerificationEmailTemplate' {..} =
+    Prelude.rnf templateName
+      `Prelude.seq` Prelude.rnf fromEmailAddress
+      `Prelude.seq` Prelude.rnf templateSubject
+      `Prelude.seq` Prelude.rnf templateContent
+      `Prelude.seq` Prelude.rnf successRedirectionURL
+      `Prelude.seq` Prelude.rnf failureRedirectionURL
+
+instance
+  Data.ToHeaders
+    UpdateCustomVerificationEmailTemplate
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    UpdateCustomVerificationEmailTemplate
+  where
+  toJSON UpdateCustomVerificationEmailTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("FromEmailAddress" Data..= fromEmailAddress),
+            Prelude.Just
+              ("TemplateSubject" Data..= templateSubject),
+            Prelude.Just
+              ("TemplateContent" Data..= templateContent),
+            Prelude.Just
+              ( "SuccessRedirectionURL"
+                  Data..= successRedirectionURL
+              ),
+            Prelude.Just
+              ( "FailureRedirectionURL"
+                  Data..= failureRedirectionURL
+              )
+          ]
+      )
+
+instance
+  Data.ToPath
+    UpdateCustomVerificationEmailTemplate
+  where
+  toPath UpdateCustomVerificationEmailTemplate' {..} =
+    Prelude.mconcat
+      [ "/v2/email/custom-verification-email-templates/",
+        Data.toBS templateName
+      ]
+
+instance
+  Data.ToQuery
+    UpdateCustomVerificationEmailTemplate
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | If the action is successful, the service sends back an HTTP 200 response
+-- with an empty HTTP body.
+--
+-- /See:/ 'newUpdateCustomVerificationEmailTemplateResponse' smart constructor.
+data UpdateCustomVerificationEmailTemplateResponse = UpdateCustomVerificationEmailTemplateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCustomVerificationEmailTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateCustomVerificationEmailTemplateResponse_httpStatus' - The response's http status code.
+newUpdateCustomVerificationEmailTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateCustomVerificationEmailTemplateResponse
+newUpdateCustomVerificationEmailTemplateResponse
+  pHttpStatus_ =
+    UpdateCustomVerificationEmailTemplateResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+updateCustomVerificationEmailTemplateResponse_httpStatus :: Lens.Lens' UpdateCustomVerificationEmailTemplateResponse Prelude.Int
+updateCustomVerificationEmailTemplateResponse_httpStatus = Lens.lens (\UpdateCustomVerificationEmailTemplateResponse' {httpStatus} -> httpStatus) (\s@UpdateCustomVerificationEmailTemplateResponse' {} a -> s {httpStatus = a} :: UpdateCustomVerificationEmailTemplateResponse)
+
+instance
+  Prelude.NFData
+    UpdateCustomVerificationEmailTemplateResponse
+  where
+  rnf
+    UpdateCustomVerificationEmailTemplateResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/UpdateEmailIdentityPolicy.hs b/gen/Amazonka/SESV2/UpdateEmailIdentityPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/UpdateEmailIdentityPolicy.hs
@@ -0,0 +1,239 @@
+{-# 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.SESV2.UpdateEmailIdentityPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified sending authorization policy for the given
+-- identity (an email address or a domain). This API returns successfully
+-- even if a policy with the specified name does not exist.
+--
+-- This API is for the identity owner only. If you have not verified the
+-- identity, this API will return an error.
+--
+-- Sending authorization is a feature that enables an identity owner to
+-- authorize other senders to use its identities. For information about
+-- using sending authorization, see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html Amazon SES Developer Guide>.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.UpdateEmailIdentityPolicy
+  ( -- * Creating a Request
+    UpdateEmailIdentityPolicy (..),
+    newUpdateEmailIdentityPolicy,
+
+    -- * Request Lenses
+    updateEmailIdentityPolicy_emailIdentity,
+    updateEmailIdentityPolicy_policyName,
+    updateEmailIdentityPolicy_policy,
+
+    -- * Destructuring the Response
+    UpdateEmailIdentityPolicyResponse (..),
+    newUpdateEmailIdentityPolicyResponse,
+
+    -- * Response Lenses
+    updateEmailIdentityPolicyResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to update a sending authorization policy for an
+-- identity. Sending authorization is an Amazon SES feature that enables
+-- you to authorize other senders to use your identities. For information,
+-- see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-identity-owner-tasks-management.html Amazon SES Developer Guide>.
+--
+-- /See:/ 'newUpdateEmailIdentityPolicy' smart constructor.
+data UpdateEmailIdentityPolicy = UpdateEmailIdentityPolicy'
+  { -- | The email identity.
+    emailIdentity :: Prelude.Text,
+    -- | The name of the policy.
+    --
+    -- The policy name cannot exceed 64 characters and can only include
+    -- alphanumeric characters, dashes, and underscores.
+    policyName :: Prelude.Text,
+    -- | The text of the policy in JSON format. The policy cannot exceed 4 KB.
+    --
+    -- For information about the syntax of sending authorization policies, see
+    -- the
+    -- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policies.html Amazon SES Developer Guide>.
+    policy :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEmailIdentityPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'emailIdentity', 'updateEmailIdentityPolicy_emailIdentity' - The email identity.
+--
+-- 'policyName', 'updateEmailIdentityPolicy_policyName' - The name of the policy.
+--
+-- The policy name cannot exceed 64 characters and can only include
+-- alphanumeric characters, dashes, and underscores.
+--
+-- 'policy', 'updateEmailIdentityPolicy_policy' - The text of the policy in JSON format. The policy cannot exceed 4 KB.
+--
+-- For information about the syntax of sending authorization policies, see
+-- the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policies.html Amazon SES Developer Guide>.
+newUpdateEmailIdentityPolicy ::
+  -- | 'emailIdentity'
+  Prelude.Text ->
+  -- | 'policyName'
+  Prelude.Text ->
+  -- | 'policy'
+  Prelude.Text ->
+  UpdateEmailIdentityPolicy
+newUpdateEmailIdentityPolicy
+  pEmailIdentity_
+  pPolicyName_
+  pPolicy_ =
+    UpdateEmailIdentityPolicy'
+      { emailIdentity =
+          pEmailIdentity_,
+        policyName = pPolicyName_,
+        policy = pPolicy_
+      }
+
+-- | The email identity.
+updateEmailIdentityPolicy_emailIdentity :: Lens.Lens' UpdateEmailIdentityPolicy Prelude.Text
+updateEmailIdentityPolicy_emailIdentity = Lens.lens (\UpdateEmailIdentityPolicy' {emailIdentity} -> emailIdentity) (\s@UpdateEmailIdentityPolicy' {} a -> s {emailIdentity = a} :: UpdateEmailIdentityPolicy)
+
+-- | The name of the policy.
+--
+-- The policy name cannot exceed 64 characters and can only include
+-- alphanumeric characters, dashes, and underscores.
+updateEmailIdentityPolicy_policyName :: Lens.Lens' UpdateEmailIdentityPolicy Prelude.Text
+updateEmailIdentityPolicy_policyName = Lens.lens (\UpdateEmailIdentityPolicy' {policyName} -> policyName) (\s@UpdateEmailIdentityPolicy' {} a -> s {policyName = a} :: UpdateEmailIdentityPolicy)
+
+-- | The text of the policy in JSON format. The policy cannot exceed 4 KB.
+--
+-- For information about the syntax of sending authorization policies, see
+-- the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policies.html Amazon SES Developer Guide>.
+updateEmailIdentityPolicy_policy :: Lens.Lens' UpdateEmailIdentityPolicy Prelude.Text
+updateEmailIdentityPolicy_policy = Lens.lens (\UpdateEmailIdentityPolicy' {policy} -> policy) (\s@UpdateEmailIdentityPolicy' {} a -> s {policy = a} :: UpdateEmailIdentityPolicy)
+
+instance Core.AWSRequest UpdateEmailIdentityPolicy where
+  type
+    AWSResponse UpdateEmailIdentityPolicy =
+      UpdateEmailIdentityPolicyResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateEmailIdentityPolicyResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateEmailIdentityPolicy where
+  hashWithSalt _salt UpdateEmailIdentityPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` emailIdentity
+      `Prelude.hashWithSalt` policyName
+      `Prelude.hashWithSalt` policy
+
+instance Prelude.NFData UpdateEmailIdentityPolicy where
+  rnf UpdateEmailIdentityPolicy' {..} =
+    Prelude.rnf emailIdentity
+      `Prelude.seq` Prelude.rnf policyName
+      `Prelude.seq` Prelude.rnf policy
+
+instance Data.ToHeaders UpdateEmailIdentityPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateEmailIdentityPolicy where
+  toJSON UpdateEmailIdentityPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Policy" Data..= policy)]
+      )
+
+instance Data.ToPath UpdateEmailIdentityPolicy where
+  toPath UpdateEmailIdentityPolicy' {..} =
+    Prelude.mconcat
+      [ "/v2/email/identities/",
+        Data.toBS emailIdentity,
+        "/policies/",
+        Data.toBS policyName
+      ]
+
+instance Data.ToQuery UpdateEmailIdentityPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An HTTP 200 response if the request succeeds, or an error message if the
+-- request fails.
+--
+-- /See:/ 'newUpdateEmailIdentityPolicyResponse' smart constructor.
+data UpdateEmailIdentityPolicyResponse = UpdateEmailIdentityPolicyResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEmailIdentityPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateEmailIdentityPolicyResponse_httpStatus' - The response's http status code.
+newUpdateEmailIdentityPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateEmailIdentityPolicyResponse
+newUpdateEmailIdentityPolicyResponse pHttpStatus_ =
+  UpdateEmailIdentityPolicyResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateEmailIdentityPolicyResponse_httpStatus :: Lens.Lens' UpdateEmailIdentityPolicyResponse Prelude.Int
+updateEmailIdentityPolicyResponse_httpStatus = Lens.lens (\UpdateEmailIdentityPolicyResponse' {httpStatus} -> httpStatus) (\s@UpdateEmailIdentityPolicyResponse' {} a -> s {httpStatus = a} :: UpdateEmailIdentityPolicyResponse)
+
+instance
+  Prelude.NFData
+    UpdateEmailIdentityPolicyResponse
+  where
+  rnf UpdateEmailIdentityPolicyResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/UpdateEmailTemplate.hs b/gen/Amazonka/SESV2/UpdateEmailTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/UpdateEmailTemplate.hs
@@ -0,0 +1,191 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.UpdateEmailTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an email template. Email templates enable you to send
+-- personalized email to one or more destinations in a single API
+-- operation. For more information, see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-personalized-email-api.html Amazon SES Developer Guide>.
+--
+-- You can execute this operation no more than once per second.
+module Amazonka.SESV2.UpdateEmailTemplate
+  ( -- * Creating a Request
+    UpdateEmailTemplate (..),
+    newUpdateEmailTemplate,
+
+    -- * Request Lenses
+    updateEmailTemplate_templateName,
+    updateEmailTemplate_templateContent,
+
+    -- * Destructuring the Response
+    UpdateEmailTemplateResponse (..),
+    newUpdateEmailTemplateResponse,
+
+    -- * Response Lenses
+    updateEmailTemplateResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SESV2.Types
+
+-- | Represents a request to update an email template. For more information,
+-- see the
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-personalized-email-api.html Amazon SES Developer Guide>.
+--
+-- /See:/ 'newUpdateEmailTemplate' smart constructor.
+data UpdateEmailTemplate = UpdateEmailTemplate'
+  { -- | The name of the template.
+    templateName :: Prelude.Text,
+    -- | The content of the email template, composed of a subject line, an HTML
+    -- part, and a text-only part.
+    templateContent :: EmailTemplateContent
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEmailTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'templateName', 'updateEmailTemplate_templateName' - The name of the template.
+--
+-- 'templateContent', 'updateEmailTemplate_templateContent' - The content of the email template, composed of a subject line, an HTML
+-- part, and a text-only part.
+newUpdateEmailTemplate ::
+  -- | 'templateName'
+  Prelude.Text ->
+  -- | 'templateContent'
+  EmailTemplateContent ->
+  UpdateEmailTemplate
+newUpdateEmailTemplate
+  pTemplateName_
+  pTemplateContent_ =
+    UpdateEmailTemplate'
+      { templateName = pTemplateName_,
+        templateContent = pTemplateContent_
+      }
+
+-- | The name of the template.
+updateEmailTemplate_templateName :: Lens.Lens' UpdateEmailTemplate Prelude.Text
+updateEmailTemplate_templateName = Lens.lens (\UpdateEmailTemplate' {templateName} -> templateName) (\s@UpdateEmailTemplate' {} a -> s {templateName = a} :: UpdateEmailTemplate)
+
+-- | The content of the email template, composed of a subject line, an HTML
+-- part, and a text-only part.
+updateEmailTemplate_templateContent :: Lens.Lens' UpdateEmailTemplate EmailTemplateContent
+updateEmailTemplate_templateContent = Lens.lens (\UpdateEmailTemplate' {templateContent} -> templateContent) (\s@UpdateEmailTemplate' {} a -> s {templateContent = a} :: UpdateEmailTemplate)
+
+instance Core.AWSRequest UpdateEmailTemplate where
+  type
+    AWSResponse UpdateEmailTemplate =
+      UpdateEmailTemplateResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateEmailTemplateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateEmailTemplate where
+  hashWithSalt _salt UpdateEmailTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` templateName
+      `Prelude.hashWithSalt` templateContent
+
+instance Prelude.NFData UpdateEmailTemplate where
+  rnf UpdateEmailTemplate' {..} =
+    Prelude.rnf templateName
+      `Prelude.seq` Prelude.rnf templateContent
+
+instance Data.ToHeaders UpdateEmailTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateEmailTemplate where
+  toJSON UpdateEmailTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("TemplateContent" Data..= templateContent)
+          ]
+      )
+
+instance Data.ToPath UpdateEmailTemplate where
+  toPath UpdateEmailTemplate' {..} =
+    Prelude.mconcat
+      ["/v2/email/templates/", Data.toBS templateName]
+
+instance Data.ToQuery UpdateEmailTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | If the action is successful, the service sends back an HTTP 200 response
+-- with an empty HTTP body.
+--
+-- /See:/ 'newUpdateEmailTemplateResponse' smart constructor.
+data UpdateEmailTemplateResponse = UpdateEmailTemplateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEmailTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateEmailTemplateResponse_httpStatus' - The response's http status code.
+newUpdateEmailTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateEmailTemplateResponse
+newUpdateEmailTemplateResponse pHttpStatus_ =
+  UpdateEmailTemplateResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateEmailTemplateResponse_httpStatus :: Lens.Lens' UpdateEmailTemplateResponse Prelude.Int
+updateEmailTemplateResponse_httpStatus = Lens.lens (\UpdateEmailTemplateResponse' {httpStatus} -> httpStatus) (\s@UpdateEmailTemplateResponse' {} a -> s {httpStatus = a} :: UpdateEmailTemplateResponse)
+
+instance Prelude.NFData UpdateEmailTemplateResponse where
+  rnf UpdateEmailTemplateResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SESV2/Waiters.hs b/gen/Amazonka/SESV2/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SESV2/Waiters.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SESV2.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.SESV2.Waiters 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
+import Amazonka.SESV2.Lens
+import Amazonka.SESV2.Types
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.SESV2
+import Test.Amazonka.SESV2.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "SESV2"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/SESV2.hs b/test/Test/Amazonka/Gen/SESV2.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/SESV2.hs
@@ -0,0 +1,1758 @@
+{-# 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.SESV2
+-- Copyright   : (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.SESV2 where
+
+import Amazonka.SESV2
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Amazonka.SESV2.Internal
+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"
+--         [ requestBatchGetMetricData $
+--             newBatchGetMetricData
+--
+--         , requestCreateConfigurationSet $
+--             newCreateConfigurationSet
+--
+--         , requestCreateConfigurationSetEventDestination $
+--             newCreateConfigurationSetEventDestination
+--
+--         , requestCreateContact $
+--             newCreateContact
+--
+--         , requestCreateContactList $
+--             newCreateContactList
+--
+--         , requestCreateCustomVerificationEmailTemplate $
+--             newCreateCustomVerificationEmailTemplate
+--
+--         , requestCreateDedicatedIpPool $
+--             newCreateDedicatedIpPool
+--
+--         , requestCreateDeliverabilityTestReport $
+--             newCreateDeliverabilityTestReport
+--
+--         , requestCreateEmailIdentity $
+--             newCreateEmailIdentity
+--
+--         , requestCreateEmailIdentityPolicy $
+--             newCreateEmailIdentityPolicy
+--
+--         , requestCreateEmailTemplate $
+--             newCreateEmailTemplate
+--
+--         , requestCreateImportJob $
+--             newCreateImportJob
+--
+--         , requestDeleteConfigurationSet $
+--             newDeleteConfigurationSet
+--
+--         , requestDeleteConfigurationSetEventDestination $
+--             newDeleteConfigurationSetEventDestination
+--
+--         , requestDeleteContact $
+--             newDeleteContact
+--
+--         , requestDeleteContactList $
+--             newDeleteContactList
+--
+--         , requestDeleteCustomVerificationEmailTemplate $
+--             newDeleteCustomVerificationEmailTemplate
+--
+--         , requestDeleteDedicatedIpPool $
+--             newDeleteDedicatedIpPool
+--
+--         , requestDeleteEmailIdentity $
+--             newDeleteEmailIdentity
+--
+--         , requestDeleteEmailIdentityPolicy $
+--             newDeleteEmailIdentityPolicy
+--
+--         , requestDeleteEmailTemplate $
+--             newDeleteEmailTemplate
+--
+--         , requestDeleteSuppressedDestination $
+--             newDeleteSuppressedDestination
+--
+--         , requestGetAccount $
+--             newGetAccount
+--
+--         , requestGetBlacklistReports $
+--             newGetBlacklistReports
+--
+--         , requestGetConfigurationSet $
+--             newGetConfigurationSet
+--
+--         , requestGetConfigurationSetEventDestinations $
+--             newGetConfigurationSetEventDestinations
+--
+--         , requestGetContact $
+--             newGetContact
+--
+--         , requestGetContactList $
+--             newGetContactList
+--
+--         , requestGetCustomVerificationEmailTemplate $
+--             newGetCustomVerificationEmailTemplate
+--
+--         , requestGetDedicatedIp $
+--             newGetDedicatedIp
+--
+--         , requestGetDedicatedIpPool $
+--             newGetDedicatedIpPool
+--
+--         , requestGetDedicatedIps $
+--             newGetDedicatedIps
+--
+--         , requestGetDeliverabilityDashboardOptions $
+--             newGetDeliverabilityDashboardOptions
+--
+--         , requestGetDeliverabilityTestReport $
+--             newGetDeliverabilityTestReport
+--
+--         , requestGetDomainDeliverabilityCampaign $
+--             newGetDomainDeliverabilityCampaign
+--
+--         , requestGetDomainStatisticsReport $
+--             newGetDomainStatisticsReport
+--
+--         , requestGetEmailIdentity $
+--             newGetEmailIdentity
+--
+--         , requestGetEmailIdentityPolicies $
+--             newGetEmailIdentityPolicies
+--
+--         , requestGetEmailTemplate $
+--             newGetEmailTemplate
+--
+--         , requestGetImportJob $
+--             newGetImportJob
+--
+--         , requestGetSuppressedDestination $
+--             newGetSuppressedDestination
+--
+--         , requestListConfigurationSets $
+--             newListConfigurationSets
+--
+--         , requestListContactLists $
+--             newListContactLists
+--
+--         , requestListContacts $
+--             newListContacts
+--
+--         , requestListCustomVerificationEmailTemplates $
+--             newListCustomVerificationEmailTemplates
+--
+--         , requestListDedicatedIpPools $
+--             newListDedicatedIpPools
+--
+--         , requestListDeliverabilityTestReports $
+--             newListDeliverabilityTestReports
+--
+--         , requestListDomainDeliverabilityCampaigns $
+--             newListDomainDeliverabilityCampaigns
+--
+--         , requestListEmailIdentities $
+--             newListEmailIdentities
+--
+--         , requestListEmailTemplates $
+--             newListEmailTemplates
+--
+--         , requestListImportJobs $
+--             newListImportJobs
+--
+--         , requestListRecommendations $
+--             newListRecommendations
+--
+--         , requestListSuppressedDestinations $
+--             newListSuppressedDestinations
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestPutAccountDedicatedIpWarmupAttributes $
+--             newPutAccountDedicatedIpWarmupAttributes
+--
+--         , requestPutAccountDetails $
+--             newPutAccountDetails
+--
+--         , requestPutAccountSendingAttributes $
+--             newPutAccountSendingAttributes
+--
+--         , requestPutAccountSuppressionAttributes $
+--             newPutAccountSuppressionAttributes
+--
+--         , requestPutAccountVdmAttributes $
+--             newPutAccountVdmAttributes
+--
+--         , requestPutConfigurationSetDeliveryOptions $
+--             newPutConfigurationSetDeliveryOptions
+--
+--         , requestPutConfigurationSetReputationOptions $
+--             newPutConfigurationSetReputationOptions
+--
+--         , requestPutConfigurationSetSendingOptions $
+--             newPutConfigurationSetSendingOptions
+--
+--         , requestPutConfigurationSetSuppressionOptions $
+--             newPutConfigurationSetSuppressionOptions
+--
+--         , requestPutConfigurationSetTrackingOptions $
+--             newPutConfigurationSetTrackingOptions
+--
+--         , requestPutConfigurationSetVdmOptions $
+--             newPutConfigurationSetVdmOptions
+--
+--         , requestPutDedicatedIpInPool $
+--             newPutDedicatedIpInPool
+--
+--         , requestPutDedicatedIpWarmupAttributes $
+--             newPutDedicatedIpWarmupAttributes
+--
+--         , requestPutDeliverabilityDashboardOption $
+--             newPutDeliverabilityDashboardOption
+--
+--         , requestPutEmailIdentityConfigurationSetAttributes $
+--             newPutEmailIdentityConfigurationSetAttributes
+--
+--         , requestPutEmailIdentityDkimAttributes $
+--             newPutEmailIdentityDkimAttributes
+--
+--         , requestPutEmailIdentityDkimSigningAttributes $
+--             newPutEmailIdentityDkimSigningAttributes
+--
+--         , requestPutEmailIdentityFeedbackAttributes $
+--             newPutEmailIdentityFeedbackAttributes
+--
+--         , requestPutEmailIdentityMailFromAttributes $
+--             newPutEmailIdentityMailFromAttributes
+--
+--         , requestPutSuppressedDestination $
+--             newPutSuppressedDestination
+--
+--         , requestSendBulkEmail $
+--             newSendBulkEmail
+--
+--         , requestSendCustomVerificationEmail $
+--             newSendCustomVerificationEmail
+--
+--         , requestSendEmail $
+--             newSendEmail
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestTestRenderEmailTemplate $
+--             newTestRenderEmailTemplate
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateConfigurationSetEventDestination $
+--             newUpdateConfigurationSetEventDestination
+--
+--         , requestUpdateContact $
+--             newUpdateContact
+--
+--         , requestUpdateContactList $
+--             newUpdateContactList
+--
+--         , requestUpdateCustomVerificationEmailTemplate $
+--             newUpdateCustomVerificationEmailTemplate
+--
+--         , requestUpdateEmailIdentityPolicy $
+--             newUpdateEmailIdentityPolicy
+--
+--         , requestUpdateEmailTemplate $
+--             newUpdateEmailTemplate
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseBatchGetMetricData $
+--             newBatchGetMetricDataResponse
+--
+--         , responseCreateConfigurationSet $
+--             newCreateConfigurationSetResponse
+--
+--         , responseCreateConfigurationSetEventDestination $
+--             newCreateConfigurationSetEventDestinationResponse
+--
+--         , responseCreateContact $
+--             newCreateContactResponse
+--
+--         , responseCreateContactList $
+--             newCreateContactListResponse
+--
+--         , responseCreateCustomVerificationEmailTemplate $
+--             newCreateCustomVerificationEmailTemplateResponse
+--
+--         , responseCreateDedicatedIpPool $
+--             newCreateDedicatedIpPoolResponse
+--
+--         , responseCreateDeliverabilityTestReport $
+--             newCreateDeliverabilityTestReportResponse
+--
+--         , responseCreateEmailIdentity $
+--             newCreateEmailIdentityResponse
+--
+--         , responseCreateEmailIdentityPolicy $
+--             newCreateEmailIdentityPolicyResponse
+--
+--         , responseCreateEmailTemplate $
+--             newCreateEmailTemplateResponse
+--
+--         , responseCreateImportJob $
+--             newCreateImportJobResponse
+--
+--         , responseDeleteConfigurationSet $
+--             newDeleteConfigurationSetResponse
+--
+--         , responseDeleteConfigurationSetEventDestination $
+--             newDeleteConfigurationSetEventDestinationResponse
+--
+--         , responseDeleteContact $
+--             newDeleteContactResponse
+--
+--         , responseDeleteContactList $
+--             newDeleteContactListResponse
+--
+--         , responseDeleteCustomVerificationEmailTemplate $
+--             newDeleteCustomVerificationEmailTemplateResponse
+--
+--         , responseDeleteDedicatedIpPool $
+--             newDeleteDedicatedIpPoolResponse
+--
+--         , responseDeleteEmailIdentity $
+--             newDeleteEmailIdentityResponse
+--
+--         , responseDeleteEmailIdentityPolicy $
+--             newDeleteEmailIdentityPolicyResponse
+--
+--         , responseDeleteEmailTemplate $
+--             newDeleteEmailTemplateResponse
+--
+--         , responseDeleteSuppressedDestination $
+--             newDeleteSuppressedDestinationResponse
+--
+--         , responseGetAccount $
+--             newGetAccountResponse
+--
+--         , responseGetBlacklistReports $
+--             newGetBlacklistReportsResponse
+--
+--         , responseGetConfigurationSet $
+--             newGetConfigurationSetResponse
+--
+--         , responseGetConfigurationSetEventDestinations $
+--             newGetConfigurationSetEventDestinationsResponse
+--
+--         , responseGetContact $
+--             newGetContactResponse
+--
+--         , responseGetContactList $
+--             newGetContactListResponse
+--
+--         , responseGetCustomVerificationEmailTemplate $
+--             newGetCustomVerificationEmailTemplateResponse
+--
+--         , responseGetDedicatedIp $
+--             newGetDedicatedIpResponse
+--
+--         , responseGetDedicatedIpPool $
+--             newGetDedicatedIpPoolResponse
+--
+--         , responseGetDedicatedIps $
+--             newGetDedicatedIpsResponse
+--
+--         , responseGetDeliverabilityDashboardOptions $
+--             newGetDeliverabilityDashboardOptionsResponse
+--
+--         , responseGetDeliverabilityTestReport $
+--             newGetDeliverabilityTestReportResponse
+--
+--         , responseGetDomainDeliverabilityCampaign $
+--             newGetDomainDeliverabilityCampaignResponse
+--
+--         , responseGetDomainStatisticsReport $
+--             newGetDomainStatisticsReportResponse
+--
+--         , responseGetEmailIdentity $
+--             newGetEmailIdentityResponse
+--
+--         , responseGetEmailIdentityPolicies $
+--             newGetEmailIdentityPoliciesResponse
+--
+--         , responseGetEmailTemplate $
+--             newGetEmailTemplateResponse
+--
+--         , responseGetImportJob $
+--             newGetImportJobResponse
+--
+--         , responseGetSuppressedDestination $
+--             newGetSuppressedDestinationResponse
+--
+--         , responseListConfigurationSets $
+--             newListConfigurationSetsResponse
+--
+--         , responseListContactLists $
+--             newListContactListsResponse
+--
+--         , responseListContacts $
+--             newListContactsResponse
+--
+--         , responseListCustomVerificationEmailTemplates $
+--             newListCustomVerificationEmailTemplatesResponse
+--
+--         , responseListDedicatedIpPools $
+--             newListDedicatedIpPoolsResponse
+--
+--         , responseListDeliverabilityTestReports $
+--             newListDeliverabilityTestReportsResponse
+--
+--         , responseListDomainDeliverabilityCampaigns $
+--             newListDomainDeliverabilityCampaignsResponse
+--
+--         , responseListEmailIdentities $
+--             newListEmailIdentitiesResponse
+--
+--         , responseListEmailTemplates $
+--             newListEmailTemplatesResponse
+--
+--         , responseListImportJobs $
+--             newListImportJobsResponse
+--
+--         , responseListRecommendations $
+--             newListRecommendationsResponse
+--
+--         , responseListSuppressedDestinations $
+--             newListSuppressedDestinationsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responsePutAccountDedicatedIpWarmupAttributes $
+--             newPutAccountDedicatedIpWarmupAttributesResponse
+--
+--         , responsePutAccountDetails $
+--             newPutAccountDetailsResponse
+--
+--         , responsePutAccountSendingAttributes $
+--             newPutAccountSendingAttributesResponse
+--
+--         , responsePutAccountSuppressionAttributes $
+--             newPutAccountSuppressionAttributesResponse
+--
+--         , responsePutAccountVdmAttributes $
+--             newPutAccountVdmAttributesResponse
+--
+--         , responsePutConfigurationSetDeliveryOptions $
+--             newPutConfigurationSetDeliveryOptionsResponse
+--
+--         , responsePutConfigurationSetReputationOptions $
+--             newPutConfigurationSetReputationOptionsResponse
+--
+--         , responsePutConfigurationSetSendingOptions $
+--             newPutConfigurationSetSendingOptionsResponse
+--
+--         , responsePutConfigurationSetSuppressionOptions $
+--             newPutConfigurationSetSuppressionOptionsResponse
+--
+--         , responsePutConfigurationSetTrackingOptions $
+--             newPutConfigurationSetTrackingOptionsResponse
+--
+--         , responsePutConfigurationSetVdmOptions $
+--             newPutConfigurationSetVdmOptionsResponse
+--
+--         , responsePutDedicatedIpInPool $
+--             newPutDedicatedIpInPoolResponse
+--
+--         , responsePutDedicatedIpWarmupAttributes $
+--             newPutDedicatedIpWarmupAttributesResponse
+--
+--         , responsePutDeliverabilityDashboardOption $
+--             newPutDeliverabilityDashboardOptionResponse
+--
+--         , responsePutEmailIdentityConfigurationSetAttributes $
+--             newPutEmailIdentityConfigurationSetAttributesResponse
+--
+--         , responsePutEmailIdentityDkimAttributes $
+--             newPutEmailIdentityDkimAttributesResponse
+--
+--         , responsePutEmailIdentityDkimSigningAttributes $
+--             newPutEmailIdentityDkimSigningAttributesResponse
+--
+--         , responsePutEmailIdentityFeedbackAttributes $
+--             newPutEmailIdentityFeedbackAttributesResponse
+--
+--         , responsePutEmailIdentityMailFromAttributes $
+--             newPutEmailIdentityMailFromAttributesResponse
+--
+--         , responsePutSuppressedDestination $
+--             newPutSuppressedDestinationResponse
+--
+--         , responseSendBulkEmail $
+--             newSendBulkEmailResponse
+--
+--         , responseSendCustomVerificationEmail $
+--             newSendCustomVerificationEmailResponse
+--
+--         , responseSendEmail $
+--             newSendEmailResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseTestRenderEmailTemplate $
+--             newTestRenderEmailTemplateResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateConfigurationSetEventDestination $
+--             newUpdateConfigurationSetEventDestinationResponse
+--
+--         , responseUpdateContact $
+--             newUpdateContactResponse
+--
+--         , responseUpdateContactList $
+--             newUpdateContactListResponse
+--
+--         , responseUpdateCustomVerificationEmailTemplate $
+--             newUpdateCustomVerificationEmailTemplateResponse
+--
+--         , responseUpdateEmailIdentityPolicy $
+--             newUpdateEmailIdentityPolicyResponse
+--
+--         , responseUpdateEmailTemplate $
+--             newUpdateEmailTemplateResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestBatchGetMetricData :: BatchGetMetricData -> TestTree
+requestBatchGetMetricData =
+  req
+    "BatchGetMetricData"
+    "fixture/BatchGetMetricData.yaml"
+
+requestCreateConfigurationSet :: CreateConfigurationSet -> TestTree
+requestCreateConfigurationSet =
+  req
+    "CreateConfigurationSet"
+    "fixture/CreateConfigurationSet.yaml"
+
+requestCreateConfigurationSetEventDestination :: CreateConfigurationSetEventDestination -> TestTree
+requestCreateConfigurationSetEventDestination =
+  req
+    "CreateConfigurationSetEventDestination"
+    "fixture/CreateConfigurationSetEventDestination.yaml"
+
+requestCreateContact :: CreateContact -> TestTree
+requestCreateContact =
+  req
+    "CreateContact"
+    "fixture/CreateContact.yaml"
+
+requestCreateContactList :: CreateContactList -> TestTree
+requestCreateContactList =
+  req
+    "CreateContactList"
+    "fixture/CreateContactList.yaml"
+
+requestCreateCustomVerificationEmailTemplate :: CreateCustomVerificationEmailTemplate -> TestTree
+requestCreateCustomVerificationEmailTemplate =
+  req
+    "CreateCustomVerificationEmailTemplate"
+    "fixture/CreateCustomVerificationEmailTemplate.yaml"
+
+requestCreateDedicatedIpPool :: CreateDedicatedIpPool -> TestTree
+requestCreateDedicatedIpPool =
+  req
+    "CreateDedicatedIpPool"
+    "fixture/CreateDedicatedIpPool.yaml"
+
+requestCreateDeliverabilityTestReport :: CreateDeliverabilityTestReport -> TestTree
+requestCreateDeliverabilityTestReport =
+  req
+    "CreateDeliverabilityTestReport"
+    "fixture/CreateDeliverabilityTestReport.yaml"
+
+requestCreateEmailIdentity :: CreateEmailIdentity -> TestTree
+requestCreateEmailIdentity =
+  req
+    "CreateEmailIdentity"
+    "fixture/CreateEmailIdentity.yaml"
+
+requestCreateEmailIdentityPolicy :: CreateEmailIdentityPolicy -> TestTree
+requestCreateEmailIdentityPolicy =
+  req
+    "CreateEmailIdentityPolicy"
+    "fixture/CreateEmailIdentityPolicy.yaml"
+
+requestCreateEmailTemplate :: CreateEmailTemplate -> TestTree
+requestCreateEmailTemplate =
+  req
+    "CreateEmailTemplate"
+    "fixture/CreateEmailTemplate.yaml"
+
+requestCreateImportJob :: CreateImportJob -> TestTree
+requestCreateImportJob =
+  req
+    "CreateImportJob"
+    "fixture/CreateImportJob.yaml"
+
+requestDeleteConfigurationSet :: DeleteConfigurationSet -> TestTree
+requestDeleteConfigurationSet =
+  req
+    "DeleteConfigurationSet"
+    "fixture/DeleteConfigurationSet.yaml"
+
+requestDeleteConfigurationSetEventDestination :: DeleteConfigurationSetEventDestination -> TestTree
+requestDeleteConfigurationSetEventDestination =
+  req
+    "DeleteConfigurationSetEventDestination"
+    "fixture/DeleteConfigurationSetEventDestination.yaml"
+
+requestDeleteContact :: DeleteContact -> TestTree
+requestDeleteContact =
+  req
+    "DeleteContact"
+    "fixture/DeleteContact.yaml"
+
+requestDeleteContactList :: DeleteContactList -> TestTree
+requestDeleteContactList =
+  req
+    "DeleteContactList"
+    "fixture/DeleteContactList.yaml"
+
+requestDeleteCustomVerificationEmailTemplate :: DeleteCustomVerificationEmailTemplate -> TestTree
+requestDeleteCustomVerificationEmailTemplate =
+  req
+    "DeleteCustomVerificationEmailTemplate"
+    "fixture/DeleteCustomVerificationEmailTemplate.yaml"
+
+requestDeleteDedicatedIpPool :: DeleteDedicatedIpPool -> TestTree
+requestDeleteDedicatedIpPool =
+  req
+    "DeleteDedicatedIpPool"
+    "fixture/DeleteDedicatedIpPool.yaml"
+
+requestDeleteEmailIdentity :: DeleteEmailIdentity -> TestTree
+requestDeleteEmailIdentity =
+  req
+    "DeleteEmailIdentity"
+    "fixture/DeleteEmailIdentity.yaml"
+
+requestDeleteEmailIdentityPolicy :: DeleteEmailIdentityPolicy -> TestTree
+requestDeleteEmailIdentityPolicy =
+  req
+    "DeleteEmailIdentityPolicy"
+    "fixture/DeleteEmailIdentityPolicy.yaml"
+
+requestDeleteEmailTemplate :: DeleteEmailTemplate -> TestTree
+requestDeleteEmailTemplate =
+  req
+    "DeleteEmailTemplate"
+    "fixture/DeleteEmailTemplate.yaml"
+
+requestDeleteSuppressedDestination :: DeleteSuppressedDestination -> TestTree
+requestDeleteSuppressedDestination =
+  req
+    "DeleteSuppressedDestination"
+    "fixture/DeleteSuppressedDestination.yaml"
+
+requestGetAccount :: GetAccount -> TestTree
+requestGetAccount =
+  req
+    "GetAccount"
+    "fixture/GetAccount.yaml"
+
+requestGetBlacklistReports :: GetBlacklistReports -> TestTree
+requestGetBlacklistReports =
+  req
+    "GetBlacklistReports"
+    "fixture/GetBlacklistReports.yaml"
+
+requestGetConfigurationSet :: GetConfigurationSet -> TestTree
+requestGetConfigurationSet =
+  req
+    "GetConfigurationSet"
+    "fixture/GetConfigurationSet.yaml"
+
+requestGetConfigurationSetEventDestinations :: GetConfigurationSetEventDestinations -> TestTree
+requestGetConfigurationSetEventDestinations =
+  req
+    "GetConfigurationSetEventDestinations"
+    "fixture/GetConfigurationSetEventDestinations.yaml"
+
+requestGetContact :: GetContact -> TestTree
+requestGetContact =
+  req
+    "GetContact"
+    "fixture/GetContact.yaml"
+
+requestGetContactList :: GetContactList -> TestTree
+requestGetContactList =
+  req
+    "GetContactList"
+    "fixture/GetContactList.yaml"
+
+requestGetCustomVerificationEmailTemplate :: GetCustomVerificationEmailTemplate -> TestTree
+requestGetCustomVerificationEmailTemplate =
+  req
+    "GetCustomVerificationEmailTemplate"
+    "fixture/GetCustomVerificationEmailTemplate.yaml"
+
+requestGetDedicatedIp :: GetDedicatedIp -> TestTree
+requestGetDedicatedIp =
+  req
+    "GetDedicatedIp"
+    "fixture/GetDedicatedIp.yaml"
+
+requestGetDedicatedIpPool :: GetDedicatedIpPool -> TestTree
+requestGetDedicatedIpPool =
+  req
+    "GetDedicatedIpPool"
+    "fixture/GetDedicatedIpPool.yaml"
+
+requestGetDedicatedIps :: GetDedicatedIps -> TestTree
+requestGetDedicatedIps =
+  req
+    "GetDedicatedIps"
+    "fixture/GetDedicatedIps.yaml"
+
+requestGetDeliverabilityDashboardOptions :: GetDeliverabilityDashboardOptions -> TestTree
+requestGetDeliverabilityDashboardOptions =
+  req
+    "GetDeliverabilityDashboardOptions"
+    "fixture/GetDeliverabilityDashboardOptions.yaml"
+
+requestGetDeliverabilityTestReport :: GetDeliverabilityTestReport -> TestTree
+requestGetDeliverabilityTestReport =
+  req
+    "GetDeliverabilityTestReport"
+    "fixture/GetDeliverabilityTestReport.yaml"
+
+requestGetDomainDeliverabilityCampaign :: GetDomainDeliverabilityCampaign -> TestTree
+requestGetDomainDeliverabilityCampaign =
+  req
+    "GetDomainDeliverabilityCampaign"
+    "fixture/GetDomainDeliverabilityCampaign.yaml"
+
+requestGetDomainStatisticsReport :: GetDomainStatisticsReport -> TestTree
+requestGetDomainStatisticsReport =
+  req
+    "GetDomainStatisticsReport"
+    "fixture/GetDomainStatisticsReport.yaml"
+
+requestGetEmailIdentity :: GetEmailIdentity -> TestTree
+requestGetEmailIdentity =
+  req
+    "GetEmailIdentity"
+    "fixture/GetEmailIdentity.yaml"
+
+requestGetEmailIdentityPolicies :: GetEmailIdentityPolicies -> TestTree
+requestGetEmailIdentityPolicies =
+  req
+    "GetEmailIdentityPolicies"
+    "fixture/GetEmailIdentityPolicies.yaml"
+
+requestGetEmailTemplate :: GetEmailTemplate -> TestTree
+requestGetEmailTemplate =
+  req
+    "GetEmailTemplate"
+    "fixture/GetEmailTemplate.yaml"
+
+requestGetImportJob :: GetImportJob -> TestTree
+requestGetImportJob =
+  req
+    "GetImportJob"
+    "fixture/GetImportJob.yaml"
+
+requestGetSuppressedDestination :: GetSuppressedDestination -> TestTree
+requestGetSuppressedDestination =
+  req
+    "GetSuppressedDestination"
+    "fixture/GetSuppressedDestination.yaml"
+
+requestListConfigurationSets :: ListConfigurationSets -> TestTree
+requestListConfigurationSets =
+  req
+    "ListConfigurationSets"
+    "fixture/ListConfigurationSets.yaml"
+
+requestListContactLists :: ListContactLists -> TestTree
+requestListContactLists =
+  req
+    "ListContactLists"
+    "fixture/ListContactLists.yaml"
+
+requestListContacts :: ListContacts -> TestTree
+requestListContacts =
+  req
+    "ListContacts"
+    "fixture/ListContacts.yaml"
+
+requestListCustomVerificationEmailTemplates :: ListCustomVerificationEmailTemplates -> TestTree
+requestListCustomVerificationEmailTemplates =
+  req
+    "ListCustomVerificationEmailTemplates"
+    "fixture/ListCustomVerificationEmailTemplates.yaml"
+
+requestListDedicatedIpPools :: ListDedicatedIpPools -> TestTree
+requestListDedicatedIpPools =
+  req
+    "ListDedicatedIpPools"
+    "fixture/ListDedicatedIpPools.yaml"
+
+requestListDeliverabilityTestReports :: ListDeliverabilityTestReports -> TestTree
+requestListDeliverabilityTestReports =
+  req
+    "ListDeliverabilityTestReports"
+    "fixture/ListDeliverabilityTestReports.yaml"
+
+requestListDomainDeliverabilityCampaigns :: ListDomainDeliverabilityCampaigns -> TestTree
+requestListDomainDeliverabilityCampaigns =
+  req
+    "ListDomainDeliverabilityCampaigns"
+    "fixture/ListDomainDeliverabilityCampaigns.yaml"
+
+requestListEmailIdentities :: ListEmailIdentities -> TestTree
+requestListEmailIdentities =
+  req
+    "ListEmailIdentities"
+    "fixture/ListEmailIdentities.yaml"
+
+requestListEmailTemplates :: ListEmailTemplates -> TestTree
+requestListEmailTemplates =
+  req
+    "ListEmailTemplates"
+    "fixture/ListEmailTemplates.yaml"
+
+requestListImportJobs :: ListImportJobs -> TestTree
+requestListImportJobs =
+  req
+    "ListImportJobs"
+    "fixture/ListImportJobs.yaml"
+
+requestListRecommendations :: ListRecommendations -> TestTree
+requestListRecommendations =
+  req
+    "ListRecommendations"
+    "fixture/ListRecommendations.yaml"
+
+requestListSuppressedDestinations :: ListSuppressedDestinations -> TestTree
+requestListSuppressedDestinations =
+  req
+    "ListSuppressedDestinations"
+    "fixture/ListSuppressedDestinations.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestPutAccountDedicatedIpWarmupAttributes :: PutAccountDedicatedIpWarmupAttributes -> TestTree
+requestPutAccountDedicatedIpWarmupAttributes =
+  req
+    "PutAccountDedicatedIpWarmupAttributes"
+    "fixture/PutAccountDedicatedIpWarmupAttributes.yaml"
+
+requestPutAccountDetails :: PutAccountDetails -> TestTree
+requestPutAccountDetails =
+  req
+    "PutAccountDetails"
+    "fixture/PutAccountDetails.yaml"
+
+requestPutAccountSendingAttributes :: PutAccountSendingAttributes -> TestTree
+requestPutAccountSendingAttributes =
+  req
+    "PutAccountSendingAttributes"
+    "fixture/PutAccountSendingAttributes.yaml"
+
+requestPutAccountSuppressionAttributes :: PutAccountSuppressionAttributes -> TestTree
+requestPutAccountSuppressionAttributes =
+  req
+    "PutAccountSuppressionAttributes"
+    "fixture/PutAccountSuppressionAttributes.yaml"
+
+requestPutAccountVdmAttributes :: PutAccountVdmAttributes -> TestTree
+requestPutAccountVdmAttributes =
+  req
+    "PutAccountVdmAttributes"
+    "fixture/PutAccountVdmAttributes.yaml"
+
+requestPutConfigurationSetDeliveryOptions :: PutConfigurationSetDeliveryOptions -> TestTree
+requestPutConfigurationSetDeliveryOptions =
+  req
+    "PutConfigurationSetDeliveryOptions"
+    "fixture/PutConfigurationSetDeliveryOptions.yaml"
+
+requestPutConfigurationSetReputationOptions :: PutConfigurationSetReputationOptions -> TestTree
+requestPutConfigurationSetReputationOptions =
+  req
+    "PutConfigurationSetReputationOptions"
+    "fixture/PutConfigurationSetReputationOptions.yaml"
+
+requestPutConfigurationSetSendingOptions :: PutConfigurationSetSendingOptions -> TestTree
+requestPutConfigurationSetSendingOptions =
+  req
+    "PutConfigurationSetSendingOptions"
+    "fixture/PutConfigurationSetSendingOptions.yaml"
+
+requestPutConfigurationSetSuppressionOptions :: PutConfigurationSetSuppressionOptions -> TestTree
+requestPutConfigurationSetSuppressionOptions =
+  req
+    "PutConfigurationSetSuppressionOptions"
+    "fixture/PutConfigurationSetSuppressionOptions.yaml"
+
+requestPutConfigurationSetTrackingOptions :: PutConfigurationSetTrackingOptions -> TestTree
+requestPutConfigurationSetTrackingOptions =
+  req
+    "PutConfigurationSetTrackingOptions"
+    "fixture/PutConfigurationSetTrackingOptions.yaml"
+
+requestPutConfigurationSetVdmOptions :: PutConfigurationSetVdmOptions -> TestTree
+requestPutConfigurationSetVdmOptions =
+  req
+    "PutConfigurationSetVdmOptions"
+    "fixture/PutConfigurationSetVdmOptions.yaml"
+
+requestPutDedicatedIpInPool :: PutDedicatedIpInPool -> TestTree
+requestPutDedicatedIpInPool =
+  req
+    "PutDedicatedIpInPool"
+    "fixture/PutDedicatedIpInPool.yaml"
+
+requestPutDedicatedIpWarmupAttributes :: PutDedicatedIpWarmupAttributes -> TestTree
+requestPutDedicatedIpWarmupAttributes =
+  req
+    "PutDedicatedIpWarmupAttributes"
+    "fixture/PutDedicatedIpWarmupAttributes.yaml"
+
+requestPutDeliverabilityDashboardOption :: PutDeliverabilityDashboardOption -> TestTree
+requestPutDeliverabilityDashboardOption =
+  req
+    "PutDeliverabilityDashboardOption"
+    "fixture/PutDeliverabilityDashboardOption.yaml"
+
+requestPutEmailIdentityConfigurationSetAttributes :: PutEmailIdentityConfigurationSetAttributes -> TestTree
+requestPutEmailIdentityConfigurationSetAttributes =
+  req
+    "PutEmailIdentityConfigurationSetAttributes"
+    "fixture/PutEmailIdentityConfigurationSetAttributes.yaml"
+
+requestPutEmailIdentityDkimAttributes :: PutEmailIdentityDkimAttributes -> TestTree
+requestPutEmailIdentityDkimAttributes =
+  req
+    "PutEmailIdentityDkimAttributes"
+    "fixture/PutEmailIdentityDkimAttributes.yaml"
+
+requestPutEmailIdentityDkimSigningAttributes :: PutEmailIdentityDkimSigningAttributes -> TestTree
+requestPutEmailIdentityDkimSigningAttributes =
+  req
+    "PutEmailIdentityDkimSigningAttributes"
+    "fixture/PutEmailIdentityDkimSigningAttributes.yaml"
+
+requestPutEmailIdentityFeedbackAttributes :: PutEmailIdentityFeedbackAttributes -> TestTree
+requestPutEmailIdentityFeedbackAttributes =
+  req
+    "PutEmailIdentityFeedbackAttributes"
+    "fixture/PutEmailIdentityFeedbackAttributes.yaml"
+
+requestPutEmailIdentityMailFromAttributes :: PutEmailIdentityMailFromAttributes -> TestTree
+requestPutEmailIdentityMailFromAttributes =
+  req
+    "PutEmailIdentityMailFromAttributes"
+    "fixture/PutEmailIdentityMailFromAttributes.yaml"
+
+requestPutSuppressedDestination :: PutSuppressedDestination -> TestTree
+requestPutSuppressedDestination =
+  req
+    "PutSuppressedDestination"
+    "fixture/PutSuppressedDestination.yaml"
+
+requestSendBulkEmail :: SendBulkEmail -> TestTree
+requestSendBulkEmail =
+  req
+    "SendBulkEmail"
+    "fixture/SendBulkEmail.yaml"
+
+requestSendCustomVerificationEmail :: SendCustomVerificationEmail -> TestTree
+requestSendCustomVerificationEmail =
+  req
+    "SendCustomVerificationEmail"
+    "fixture/SendCustomVerificationEmail.yaml"
+
+requestSendEmail :: SendEmail -> TestTree
+requestSendEmail =
+  req
+    "SendEmail"
+    "fixture/SendEmail.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestTestRenderEmailTemplate :: TestRenderEmailTemplate -> TestTree
+requestTestRenderEmailTemplate =
+  req
+    "TestRenderEmailTemplate"
+    "fixture/TestRenderEmailTemplate.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateConfigurationSetEventDestination :: UpdateConfigurationSetEventDestination -> TestTree
+requestUpdateConfigurationSetEventDestination =
+  req
+    "UpdateConfigurationSetEventDestination"
+    "fixture/UpdateConfigurationSetEventDestination.yaml"
+
+requestUpdateContact :: UpdateContact -> TestTree
+requestUpdateContact =
+  req
+    "UpdateContact"
+    "fixture/UpdateContact.yaml"
+
+requestUpdateContactList :: UpdateContactList -> TestTree
+requestUpdateContactList =
+  req
+    "UpdateContactList"
+    "fixture/UpdateContactList.yaml"
+
+requestUpdateCustomVerificationEmailTemplate :: UpdateCustomVerificationEmailTemplate -> TestTree
+requestUpdateCustomVerificationEmailTemplate =
+  req
+    "UpdateCustomVerificationEmailTemplate"
+    "fixture/UpdateCustomVerificationEmailTemplate.yaml"
+
+requestUpdateEmailIdentityPolicy :: UpdateEmailIdentityPolicy -> TestTree
+requestUpdateEmailIdentityPolicy =
+  req
+    "UpdateEmailIdentityPolicy"
+    "fixture/UpdateEmailIdentityPolicy.yaml"
+
+requestUpdateEmailTemplate :: UpdateEmailTemplate -> TestTree
+requestUpdateEmailTemplate =
+  req
+    "UpdateEmailTemplate"
+    "fixture/UpdateEmailTemplate.yaml"
+
+-- Responses
+
+responseBatchGetMetricData :: BatchGetMetricDataResponse -> TestTree
+responseBatchGetMetricData =
+  res
+    "BatchGetMetricDataResponse"
+    "fixture/BatchGetMetricDataResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchGetMetricData)
+
+responseCreateConfigurationSet :: CreateConfigurationSetResponse -> TestTree
+responseCreateConfigurationSet =
+  res
+    "CreateConfigurationSetResponse"
+    "fixture/CreateConfigurationSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateConfigurationSet)
+
+responseCreateConfigurationSetEventDestination :: CreateConfigurationSetEventDestinationResponse -> TestTree
+responseCreateConfigurationSetEventDestination =
+  res
+    "CreateConfigurationSetEventDestinationResponse"
+    "fixture/CreateConfigurationSetEventDestinationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateConfigurationSetEventDestination)
+
+responseCreateContact :: CreateContactResponse -> TestTree
+responseCreateContact =
+  res
+    "CreateContactResponse"
+    "fixture/CreateContactResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateContact)
+
+responseCreateContactList :: CreateContactListResponse -> TestTree
+responseCreateContactList =
+  res
+    "CreateContactListResponse"
+    "fixture/CreateContactListResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateContactList)
+
+responseCreateCustomVerificationEmailTemplate :: CreateCustomVerificationEmailTemplateResponse -> TestTree
+responseCreateCustomVerificationEmailTemplate =
+  res
+    "CreateCustomVerificationEmailTemplateResponse"
+    "fixture/CreateCustomVerificationEmailTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCustomVerificationEmailTemplate)
+
+responseCreateDedicatedIpPool :: CreateDedicatedIpPoolResponse -> TestTree
+responseCreateDedicatedIpPool =
+  res
+    "CreateDedicatedIpPoolResponse"
+    "fixture/CreateDedicatedIpPoolResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDedicatedIpPool)
+
+responseCreateDeliverabilityTestReport :: CreateDeliverabilityTestReportResponse -> TestTree
+responseCreateDeliverabilityTestReport =
+  res
+    "CreateDeliverabilityTestReportResponse"
+    "fixture/CreateDeliverabilityTestReportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDeliverabilityTestReport)
+
+responseCreateEmailIdentity :: CreateEmailIdentityResponse -> TestTree
+responseCreateEmailIdentity =
+  res
+    "CreateEmailIdentityResponse"
+    "fixture/CreateEmailIdentityResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateEmailIdentity)
+
+responseCreateEmailIdentityPolicy :: CreateEmailIdentityPolicyResponse -> TestTree
+responseCreateEmailIdentityPolicy =
+  res
+    "CreateEmailIdentityPolicyResponse"
+    "fixture/CreateEmailIdentityPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateEmailIdentityPolicy)
+
+responseCreateEmailTemplate :: CreateEmailTemplateResponse -> TestTree
+responseCreateEmailTemplate =
+  res
+    "CreateEmailTemplateResponse"
+    "fixture/CreateEmailTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateEmailTemplate)
+
+responseCreateImportJob :: CreateImportJobResponse -> TestTree
+responseCreateImportJob =
+  res
+    "CreateImportJobResponse"
+    "fixture/CreateImportJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateImportJob)
+
+responseDeleteConfigurationSet :: DeleteConfigurationSetResponse -> TestTree
+responseDeleteConfigurationSet =
+  res
+    "DeleteConfigurationSetResponse"
+    "fixture/DeleteConfigurationSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteConfigurationSet)
+
+responseDeleteConfigurationSetEventDestination :: DeleteConfigurationSetEventDestinationResponse -> TestTree
+responseDeleteConfigurationSetEventDestination =
+  res
+    "DeleteConfigurationSetEventDestinationResponse"
+    "fixture/DeleteConfigurationSetEventDestinationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteConfigurationSetEventDestination)
+
+responseDeleteContact :: DeleteContactResponse -> TestTree
+responseDeleteContact =
+  res
+    "DeleteContactResponse"
+    "fixture/DeleteContactResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteContact)
+
+responseDeleteContactList :: DeleteContactListResponse -> TestTree
+responseDeleteContactList =
+  res
+    "DeleteContactListResponse"
+    "fixture/DeleteContactListResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteContactList)
+
+responseDeleteCustomVerificationEmailTemplate :: DeleteCustomVerificationEmailTemplateResponse -> TestTree
+responseDeleteCustomVerificationEmailTemplate =
+  res
+    "DeleteCustomVerificationEmailTemplateResponse"
+    "fixture/DeleteCustomVerificationEmailTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCustomVerificationEmailTemplate)
+
+responseDeleteDedicatedIpPool :: DeleteDedicatedIpPoolResponse -> TestTree
+responseDeleteDedicatedIpPool =
+  res
+    "DeleteDedicatedIpPoolResponse"
+    "fixture/DeleteDedicatedIpPoolResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDedicatedIpPool)
+
+responseDeleteEmailIdentity :: DeleteEmailIdentityResponse -> TestTree
+responseDeleteEmailIdentity =
+  res
+    "DeleteEmailIdentityResponse"
+    "fixture/DeleteEmailIdentityResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteEmailIdentity)
+
+responseDeleteEmailIdentityPolicy :: DeleteEmailIdentityPolicyResponse -> TestTree
+responseDeleteEmailIdentityPolicy =
+  res
+    "DeleteEmailIdentityPolicyResponse"
+    "fixture/DeleteEmailIdentityPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteEmailIdentityPolicy)
+
+responseDeleteEmailTemplate :: DeleteEmailTemplateResponse -> TestTree
+responseDeleteEmailTemplate =
+  res
+    "DeleteEmailTemplateResponse"
+    "fixture/DeleteEmailTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteEmailTemplate)
+
+responseDeleteSuppressedDestination :: DeleteSuppressedDestinationResponse -> TestTree
+responseDeleteSuppressedDestination =
+  res
+    "DeleteSuppressedDestinationResponse"
+    "fixture/DeleteSuppressedDestinationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSuppressedDestination)
+
+responseGetAccount :: GetAccountResponse -> TestTree
+responseGetAccount =
+  res
+    "GetAccountResponse"
+    "fixture/GetAccountResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAccount)
+
+responseGetBlacklistReports :: GetBlacklistReportsResponse -> TestTree
+responseGetBlacklistReports =
+  res
+    "GetBlacklistReportsResponse"
+    "fixture/GetBlacklistReportsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetBlacklistReports)
+
+responseGetConfigurationSet :: GetConfigurationSetResponse -> TestTree
+responseGetConfigurationSet =
+  res
+    "GetConfigurationSetResponse"
+    "fixture/GetConfigurationSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetConfigurationSet)
+
+responseGetConfigurationSetEventDestinations :: GetConfigurationSetEventDestinationsResponse -> TestTree
+responseGetConfigurationSetEventDestinations =
+  res
+    "GetConfigurationSetEventDestinationsResponse"
+    "fixture/GetConfigurationSetEventDestinationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetConfigurationSetEventDestinations)
+
+responseGetContact :: GetContactResponse -> TestTree
+responseGetContact =
+  res
+    "GetContactResponse"
+    "fixture/GetContactResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetContact)
+
+responseGetContactList :: GetContactListResponse -> TestTree
+responseGetContactList =
+  res
+    "GetContactListResponse"
+    "fixture/GetContactListResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetContactList)
+
+responseGetCustomVerificationEmailTemplate :: GetCustomVerificationEmailTemplateResponse -> TestTree
+responseGetCustomVerificationEmailTemplate =
+  res
+    "GetCustomVerificationEmailTemplateResponse"
+    "fixture/GetCustomVerificationEmailTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetCustomVerificationEmailTemplate)
+
+responseGetDedicatedIp :: GetDedicatedIpResponse -> TestTree
+responseGetDedicatedIp =
+  res
+    "GetDedicatedIpResponse"
+    "fixture/GetDedicatedIpResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDedicatedIp)
+
+responseGetDedicatedIpPool :: GetDedicatedIpPoolResponse -> TestTree
+responseGetDedicatedIpPool =
+  res
+    "GetDedicatedIpPoolResponse"
+    "fixture/GetDedicatedIpPoolResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDedicatedIpPool)
+
+responseGetDedicatedIps :: GetDedicatedIpsResponse -> TestTree
+responseGetDedicatedIps =
+  res
+    "GetDedicatedIpsResponse"
+    "fixture/GetDedicatedIpsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDedicatedIps)
+
+responseGetDeliverabilityDashboardOptions :: GetDeliverabilityDashboardOptionsResponse -> TestTree
+responseGetDeliverabilityDashboardOptions =
+  res
+    "GetDeliverabilityDashboardOptionsResponse"
+    "fixture/GetDeliverabilityDashboardOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDeliverabilityDashboardOptions)
+
+responseGetDeliverabilityTestReport :: GetDeliverabilityTestReportResponse -> TestTree
+responseGetDeliverabilityTestReport =
+  res
+    "GetDeliverabilityTestReportResponse"
+    "fixture/GetDeliverabilityTestReportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDeliverabilityTestReport)
+
+responseGetDomainDeliverabilityCampaign :: GetDomainDeliverabilityCampaignResponse -> TestTree
+responseGetDomainDeliverabilityCampaign =
+  res
+    "GetDomainDeliverabilityCampaignResponse"
+    "fixture/GetDomainDeliverabilityCampaignResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDomainDeliverabilityCampaign)
+
+responseGetDomainStatisticsReport :: GetDomainStatisticsReportResponse -> TestTree
+responseGetDomainStatisticsReport =
+  res
+    "GetDomainStatisticsReportResponse"
+    "fixture/GetDomainStatisticsReportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDomainStatisticsReport)
+
+responseGetEmailIdentity :: GetEmailIdentityResponse -> TestTree
+responseGetEmailIdentity =
+  res
+    "GetEmailIdentityResponse"
+    "fixture/GetEmailIdentityResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetEmailIdentity)
+
+responseGetEmailIdentityPolicies :: GetEmailIdentityPoliciesResponse -> TestTree
+responseGetEmailIdentityPolicies =
+  res
+    "GetEmailIdentityPoliciesResponse"
+    "fixture/GetEmailIdentityPoliciesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetEmailIdentityPolicies)
+
+responseGetEmailTemplate :: GetEmailTemplateResponse -> TestTree
+responseGetEmailTemplate =
+  res
+    "GetEmailTemplateResponse"
+    "fixture/GetEmailTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetEmailTemplate)
+
+responseGetImportJob :: GetImportJobResponse -> TestTree
+responseGetImportJob =
+  res
+    "GetImportJobResponse"
+    "fixture/GetImportJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetImportJob)
+
+responseGetSuppressedDestination :: GetSuppressedDestinationResponse -> TestTree
+responseGetSuppressedDestination =
+  res
+    "GetSuppressedDestinationResponse"
+    "fixture/GetSuppressedDestinationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSuppressedDestination)
+
+responseListConfigurationSets :: ListConfigurationSetsResponse -> TestTree
+responseListConfigurationSets =
+  res
+    "ListConfigurationSetsResponse"
+    "fixture/ListConfigurationSetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListConfigurationSets)
+
+responseListContactLists :: ListContactListsResponse -> TestTree
+responseListContactLists =
+  res
+    "ListContactListsResponse"
+    "fixture/ListContactListsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListContactLists)
+
+responseListContacts :: ListContactsResponse -> TestTree
+responseListContacts =
+  res
+    "ListContactsResponse"
+    "fixture/ListContactsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListContacts)
+
+responseListCustomVerificationEmailTemplates :: ListCustomVerificationEmailTemplatesResponse -> TestTree
+responseListCustomVerificationEmailTemplates =
+  res
+    "ListCustomVerificationEmailTemplatesResponse"
+    "fixture/ListCustomVerificationEmailTemplatesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListCustomVerificationEmailTemplates)
+
+responseListDedicatedIpPools :: ListDedicatedIpPoolsResponse -> TestTree
+responseListDedicatedIpPools =
+  res
+    "ListDedicatedIpPoolsResponse"
+    "fixture/ListDedicatedIpPoolsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDedicatedIpPools)
+
+responseListDeliverabilityTestReports :: ListDeliverabilityTestReportsResponse -> TestTree
+responseListDeliverabilityTestReports =
+  res
+    "ListDeliverabilityTestReportsResponse"
+    "fixture/ListDeliverabilityTestReportsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDeliverabilityTestReports)
+
+responseListDomainDeliverabilityCampaigns :: ListDomainDeliverabilityCampaignsResponse -> TestTree
+responseListDomainDeliverabilityCampaigns =
+  res
+    "ListDomainDeliverabilityCampaignsResponse"
+    "fixture/ListDomainDeliverabilityCampaignsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDomainDeliverabilityCampaigns)
+
+responseListEmailIdentities :: ListEmailIdentitiesResponse -> TestTree
+responseListEmailIdentities =
+  res
+    "ListEmailIdentitiesResponse"
+    "fixture/ListEmailIdentitiesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEmailIdentities)
+
+responseListEmailTemplates :: ListEmailTemplatesResponse -> TestTree
+responseListEmailTemplates =
+  res
+    "ListEmailTemplatesResponse"
+    "fixture/ListEmailTemplatesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEmailTemplates)
+
+responseListImportJobs :: ListImportJobsResponse -> TestTree
+responseListImportJobs =
+  res
+    "ListImportJobsResponse"
+    "fixture/ListImportJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListImportJobs)
+
+responseListRecommendations :: ListRecommendationsResponse -> TestTree
+responseListRecommendations =
+  res
+    "ListRecommendationsResponse"
+    "fixture/ListRecommendationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListRecommendations)
+
+responseListSuppressedDestinations :: ListSuppressedDestinationsResponse -> TestTree
+responseListSuppressedDestinations =
+  res
+    "ListSuppressedDestinationsResponse"
+    "fixture/ListSuppressedDestinationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSuppressedDestinations)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responsePutAccountDedicatedIpWarmupAttributes :: PutAccountDedicatedIpWarmupAttributesResponse -> TestTree
+responsePutAccountDedicatedIpWarmupAttributes =
+  res
+    "PutAccountDedicatedIpWarmupAttributesResponse"
+    "fixture/PutAccountDedicatedIpWarmupAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutAccountDedicatedIpWarmupAttributes)
+
+responsePutAccountDetails :: PutAccountDetailsResponse -> TestTree
+responsePutAccountDetails =
+  res
+    "PutAccountDetailsResponse"
+    "fixture/PutAccountDetailsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutAccountDetails)
+
+responsePutAccountSendingAttributes :: PutAccountSendingAttributesResponse -> TestTree
+responsePutAccountSendingAttributes =
+  res
+    "PutAccountSendingAttributesResponse"
+    "fixture/PutAccountSendingAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutAccountSendingAttributes)
+
+responsePutAccountSuppressionAttributes :: PutAccountSuppressionAttributesResponse -> TestTree
+responsePutAccountSuppressionAttributes =
+  res
+    "PutAccountSuppressionAttributesResponse"
+    "fixture/PutAccountSuppressionAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutAccountSuppressionAttributes)
+
+responsePutAccountVdmAttributes :: PutAccountVdmAttributesResponse -> TestTree
+responsePutAccountVdmAttributes =
+  res
+    "PutAccountVdmAttributesResponse"
+    "fixture/PutAccountVdmAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutAccountVdmAttributes)
+
+responsePutConfigurationSetDeliveryOptions :: PutConfigurationSetDeliveryOptionsResponse -> TestTree
+responsePutConfigurationSetDeliveryOptions =
+  res
+    "PutConfigurationSetDeliveryOptionsResponse"
+    "fixture/PutConfigurationSetDeliveryOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutConfigurationSetDeliveryOptions)
+
+responsePutConfigurationSetReputationOptions :: PutConfigurationSetReputationOptionsResponse -> TestTree
+responsePutConfigurationSetReputationOptions =
+  res
+    "PutConfigurationSetReputationOptionsResponse"
+    "fixture/PutConfigurationSetReputationOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutConfigurationSetReputationOptions)
+
+responsePutConfigurationSetSendingOptions :: PutConfigurationSetSendingOptionsResponse -> TestTree
+responsePutConfigurationSetSendingOptions =
+  res
+    "PutConfigurationSetSendingOptionsResponse"
+    "fixture/PutConfigurationSetSendingOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutConfigurationSetSendingOptions)
+
+responsePutConfigurationSetSuppressionOptions :: PutConfigurationSetSuppressionOptionsResponse -> TestTree
+responsePutConfigurationSetSuppressionOptions =
+  res
+    "PutConfigurationSetSuppressionOptionsResponse"
+    "fixture/PutConfigurationSetSuppressionOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutConfigurationSetSuppressionOptions)
+
+responsePutConfigurationSetTrackingOptions :: PutConfigurationSetTrackingOptionsResponse -> TestTree
+responsePutConfigurationSetTrackingOptions =
+  res
+    "PutConfigurationSetTrackingOptionsResponse"
+    "fixture/PutConfigurationSetTrackingOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutConfigurationSetTrackingOptions)
+
+responsePutConfigurationSetVdmOptions :: PutConfigurationSetVdmOptionsResponse -> TestTree
+responsePutConfigurationSetVdmOptions =
+  res
+    "PutConfigurationSetVdmOptionsResponse"
+    "fixture/PutConfigurationSetVdmOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutConfigurationSetVdmOptions)
+
+responsePutDedicatedIpInPool :: PutDedicatedIpInPoolResponse -> TestTree
+responsePutDedicatedIpInPool =
+  res
+    "PutDedicatedIpInPoolResponse"
+    "fixture/PutDedicatedIpInPoolResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutDedicatedIpInPool)
+
+responsePutDedicatedIpWarmupAttributes :: PutDedicatedIpWarmupAttributesResponse -> TestTree
+responsePutDedicatedIpWarmupAttributes =
+  res
+    "PutDedicatedIpWarmupAttributesResponse"
+    "fixture/PutDedicatedIpWarmupAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutDedicatedIpWarmupAttributes)
+
+responsePutDeliverabilityDashboardOption :: PutDeliverabilityDashboardOptionResponse -> TestTree
+responsePutDeliverabilityDashboardOption =
+  res
+    "PutDeliverabilityDashboardOptionResponse"
+    "fixture/PutDeliverabilityDashboardOptionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutDeliverabilityDashboardOption)
+
+responsePutEmailIdentityConfigurationSetAttributes :: PutEmailIdentityConfigurationSetAttributesResponse -> TestTree
+responsePutEmailIdentityConfigurationSetAttributes =
+  res
+    "PutEmailIdentityConfigurationSetAttributesResponse"
+    "fixture/PutEmailIdentityConfigurationSetAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutEmailIdentityConfigurationSetAttributes)
+
+responsePutEmailIdentityDkimAttributes :: PutEmailIdentityDkimAttributesResponse -> TestTree
+responsePutEmailIdentityDkimAttributes =
+  res
+    "PutEmailIdentityDkimAttributesResponse"
+    "fixture/PutEmailIdentityDkimAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutEmailIdentityDkimAttributes)
+
+responsePutEmailIdentityDkimSigningAttributes :: PutEmailIdentityDkimSigningAttributesResponse -> TestTree
+responsePutEmailIdentityDkimSigningAttributes =
+  res
+    "PutEmailIdentityDkimSigningAttributesResponse"
+    "fixture/PutEmailIdentityDkimSigningAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutEmailIdentityDkimSigningAttributes)
+
+responsePutEmailIdentityFeedbackAttributes :: PutEmailIdentityFeedbackAttributesResponse -> TestTree
+responsePutEmailIdentityFeedbackAttributes =
+  res
+    "PutEmailIdentityFeedbackAttributesResponse"
+    "fixture/PutEmailIdentityFeedbackAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutEmailIdentityFeedbackAttributes)
+
+responsePutEmailIdentityMailFromAttributes :: PutEmailIdentityMailFromAttributesResponse -> TestTree
+responsePutEmailIdentityMailFromAttributes =
+  res
+    "PutEmailIdentityMailFromAttributesResponse"
+    "fixture/PutEmailIdentityMailFromAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutEmailIdentityMailFromAttributes)
+
+responsePutSuppressedDestination :: PutSuppressedDestinationResponse -> TestTree
+responsePutSuppressedDestination =
+  res
+    "PutSuppressedDestinationResponse"
+    "fixture/PutSuppressedDestinationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutSuppressedDestination)
+
+responseSendBulkEmail :: SendBulkEmailResponse -> TestTree
+responseSendBulkEmail =
+  res
+    "SendBulkEmailResponse"
+    "fixture/SendBulkEmailResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SendBulkEmail)
+
+responseSendCustomVerificationEmail :: SendCustomVerificationEmailResponse -> TestTree
+responseSendCustomVerificationEmail =
+  res
+    "SendCustomVerificationEmailResponse"
+    "fixture/SendCustomVerificationEmailResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SendCustomVerificationEmail)
+
+responseSendEmail :: SendEmailResponse -> TestTree
+responseSendEmail =
+  res
+    "SendEmailResponse"
+    "fixture/SendEmailResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SendEmail)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseTestRenderEmailTemplate :: TestRenderEmailTemplateResponse -> TestTree
+responseTestRenderEmailTemplate =
+  res
+    "TestRenderEmailTemplateResponse"
+    "fixture/TestRenderEmailTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TestRenderEmailTemplate)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
+
+responseUpdateConfigurationSetEventDestination :: UpdateConfigurationSetEventDestinationResponse -> TestTree
+responseUpdateConfigurationSetEventDestination =
+  res
+    "UpdateConfigurationSetEventDestinationResponse"
+    "fixture/UpdateConfigurationSetEventDestinationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateConfigurationSetEventDestination)
+
+responseUpdateContact :: UpdateContactResponse -> TestTree
+responseUpdateContact =
+  res
+    "UpdateContactResponse"
+    "fixture/UpdateContactResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateContact)
+
+responseUpdateContactList :: UpdateContactListResponse -> TestTree
+responseUpdateContactList =
+  res
+    "UpdateContactListResponse"
+    "fixture/UpdateContactListResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateContactList)
+
+responseUpdateCustomVerificationEmailTemplate :: UpdateCustomVerificationEmailTemplateResponse -> TestTree
+responseUpdateCustomVerificationEmailTemplate =
+  res
+    "UpdateCustomVerificationEmailTemplateResponse"
+    "fixture/UpdateCustomVerificationEmailTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateCustomVerificationEmailTemplate)
+
+responseUpdateEmailIdentityPolicy :: UpdateEmailIdentityPolicyResponse -> TestTree
+responseUpdateEmailIdentityPolicy =
+  res
+    "UpdateEmailIdentityPolicyResponse"
+    "fixture/UpdateEmailIdentityPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateEmailIdentityPolicy)
+
+responseUpdateEmailTemplate :: UpdateEmailTemplateResponse -> TestTree
+responseUpdateEmailTemplate =
+  res
+    "UpdateEmailTemplateResponse"
+    "fixture/UpdateEmailTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateEmailTemplate)
diff --git a/test/Test/Amazonka/SESV2.hs b/test/Test/Amazonka/SESV2.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/SESV2.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.SESV2
+-- Copyright   : (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.SESV2
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/SESV2/Internal.hs b/test/Test/Amazonka/SESV2/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/SESV2/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.SESV2.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.SESV2.Internal where
