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 Pinpoint Email Service SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2018-07-26@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-pinpoint-email)
+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.PinpointEmail](http://hackage.haskell.org/package/amazonka-pinpoint-email/docs/Amazonka-PinpointEmail.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-pinpoint-email` 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-pinpoint-email.cabal b/amazonka-pinpoint-email.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-pinpoint-email.cabal
@@ -0,0 +1,171 @@
+cabal-version:      2.2
+name:               amazonka-pinpoint-email
+version:            2.0
+synopsis:           Amazon Pinpoint 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 @2018-07-26@ 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.PinpointEmail.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.PinpointEmail" 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-pinpoint-email
+
+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.PinpointEmail
+    Amazonka.PinpointEmail.CreateConfigurationSet
+    Amazonka.PinpointEmail.CreateConfigurationSetEventDestination
+    Amazonka.PinpointEmail.CreateDedicatedIpPool
+    Amazonka.PinpointEmail.CreateDeliverabilityTestReport
+    Amazonka.PinpointEmail.CreateEmailIdentity
+    Amazonka.PinpointEmail.DeleteConfigurationSet
+    Amazonka.PinpointEmail.DeleteConfigurationSetEventDestination
+    Amazonka.PinpointEmail.DeleteDedicatedIpPool
+    Amazonka.PinpointEmail.DeleteEmailIdentity
+    Amazonka.PinpointEmail.GetAccount
+    Amazonka.PinpointEmail.GetBlacklistReports
+    Amazonka.PinpointEmail.GetConfigurationSet
+    Amazonka.PinpointEmail.GetConfigurationSetEventDestinations
+    Amazonka.PinpointEmail.GetDedicatedIp
+    Amazonka.PinpointEmail.GetDedicatedIps
+    Amazonka.PinpointEmail.GetDeliverabilityDashboardOptions
+    Amazonka.PinpointEmail.GetDeliverabilityTestReport
+    Amazonka.PinpointEmail.GetDomainDeliverabilityCampaign
+    Amazonka.PinpointEmail.GetDomainStatisticsReport
+    Amazonka.PinpointEmail.GetEmailIdentity
+    Amazonka.PinpointEmail.Lens
+    Amazonka.PinpointEmail.ListConfigurationSets
+    Amazonka.PinpointEmail.ListDedicatedIpPools
+    Amazonka.PinpointEmail.ListDeliverabilityTestReports
+    Amazonka.PinpointEmail.ListDomainDeliverabilityCampaigns
+    Amazonka.PinpointEmail.ListEmailIdentities
+    Amazonka.PinpointEmail.ListTagsForResource
+    Amazonka.PinpointEmail.PutAccountDedicatedIpWarmupAttributes
+    Amazonka.PinpointEmail.PutAccountSendingAttributes
+    Amazonka.PinpointEmail.PutConfigurationSetDeliveryOptions
+    Amazonka.PinpointEmail.PutConfigurationSetReputationOptions
+    Amazonka.PinpointEmail.PutConfigurationSetSendingOptions
+    Amazonka.PinpointEmail.PutConfigurationSetTrackingOptions
+    Amazonka.PinpointEmail.PutDedicatedIpInPool
+    Amazonka.PinpointEmail.PutDedicatedIpWarmupAttributes
+    Amazonka.PinpointEmail.PutDeliverabilityDashboardOption
+    Amazonka.PinpointEmail.PutEmailIdentityDkimAttributes
+    Amazonka.PinpointEmail.PutEmailIdentityFeedbackAttributes
+    Amazonka.PinpointEmail.PutEmailIdentityMailFromAttributes
+    Amazonka.PinpointEmail.SendEmail
+    Amazonka.PinpointEmail.TagResource
+    Amazonka.PinpointEmail.Types
+    Amazonka.PinpointEmail.Types.BehaviorOnMxFailure
+    Amazonka.PinpointEmail.Types.BlacklistEntry
+    Amazonka.PinpointEmail.Types.Body
+    Amazonka.PinpointEmail.Types.CloudWatchDestination
+    Amazonka.PinpointEmail.Types.CloudWatchDimensionConfiguration
+    Amazonka.PinpointEmail.Types.Content
+    Amazonka.PinpointEmail.Types.DailyVolume
+    Amazonka.PinpointEmail.Types.DedicatedIp
+    Amazonka.PinpointEmail.Types.DeliverabilityDashboardAccountStatus
+    Amazonka.PinpointEmail.Types.DeliverabilityTestReport
+    Amazonka.PinpointEmail.Types.DeliverabilityTestStatus
+    Amazonka.PinpointEmail.Types.DeliveryOptions
+    Amazonka.PinpointEmail.Types.Destination
+    Amazonka.PinpointEmail.Types.DimensionValueSource
+    Amazonka.PinpointEmail.Types.DkimAttributes
+    Amazonka.PinpointEmail.Types.DkimStatus
+    Amazonka.PinpointEmail.Types.DomainDeliverabilityCampaign
+    Amazonka.PinpointEmail.Types.DomainDeliverabilityTrackingOption
+    Amazonka.PinpointEmail.Types.DomainIspPlacement
+    Amazonka.PinpointEmail.Types.EmailContent
+    Amazonka.PinpointEmail.Types.EventDestination
+    Amazonka.PinpointEmail.Types.EventDestinationDefinition
+    Amazonka.PinpointEmail.Types.EventType
+    Amazonka.PinpointEmail.Types.IdentityInfo
+    Amazonka.PinpointEmail.Types.IdentityType
+    Amazonka.PinpointEmail.Types.InboxPlacementTrackingOption
+    Amazonka.PinpointEmail.Types.IspPlacement
+    Amazonka.PinpointEmail.Types.KinesisFirehoseDestination
+    Amazonka.PinpointEmail.Types.MailFromAttributes
+    Amazonka.PinpointEmail.Types.MailFromDomainStatus
+    Amazonka.PinpointEmail.Types.Message
+    Amazonka.PinpointEmail.Types.MessageTag
+    Amazonka.PinpointEmail.Types.OverallVolume
+    Amazonka.PinpointEmail.Types.PinpointDestination
+    Amazonka.PinpointEmail.Types.PlacementStatistics
+    Amazonka.PinpointEmail.Types.RawMessage
+    Amazonka.PinpointEmail.Types.ReputationOptions
+    Amazonka.PinpointEmail.Types.SendingOptions
+    Amazonka.PinpointEmail.Types.SendQuota
+    Amazonka.PinpointEmail.Types.SnsDestination
+    Amazonka.PinpointEmail.Types.Tag
+    Amazonka.PinpointEmail.Types.Template
+    Amazonka.PinpointEmail.Types.TlsPolicy
+    Amazonka.PinpointEmail.Types.TrackingOptions
+    Amazonka.PinpointEmail.Types.VolumeStatistics
+    Amazonka.PinpointEmail.Types.WarmupStatus
+    Amazonka.PinpointEmail.UntagResource
+    Amazonka.PinpointEmail.UpdateConfigurationSetEventDestination
+    Amazonka.PinpointEmail.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-pinpoint-email-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.PinpointEmail
+    Test.Amazonka.PinpointEmail
+    Test.Amazonka.PinpointEmail.Internal
+
+  build-depends:
+    , amazonka-core            >=2.0 && <2.1
+    , amazonka-pinpoint-email
+    , amazonka-test            >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
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/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/CreateEmailIdentityResponse.proto b/fixture/CreateEmailIdentityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEmailIdentityResponse.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/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/DeleteEmailIdentityResponse.proto b/fixture/DeleteEmailIdentityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEmailIdentityResponse.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/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/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/GetEmailIdentityResponse.proto b/fixture/GetEmailIdentityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetEmailIdentityResponse.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/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/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/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/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/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/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/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/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/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/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/gen/Amazonka/PinpointEmail.hs b/gen/Amazonka/PinpointEmail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail.hs
@@ -0,0 +1,598 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.PinpointEmail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2018-07-26@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon Pinpoint Email Service
+--
+-- Welcome to the /Amazon Pinpoint Email API Reference/. This guide
+-- provides information about the Amazon Pinpoint Email API (version 1.0),
+-- including supported operations, data types, parameters, and schemas.
+--
+-- <https://aws.amazon.com/pinpoint Amazon Pinpoint> is an AWS service that
+-- you can use to engage with your customers across multiple messaging
+-- channels. You can use Amazon Pinpoint to send email, SMS text messages,
+-- voice messages, and push notifications. The Amazon Pinpoint Email API
+-- provides programmatic access to options that are unique to the email
+-- channel and supplement the options provided by the Amazon Pinpoint API.
+--
+-- If you\'re new to Amazon Pinpoint, you might find it helpful to also
+-- review the
+-- <https://docs.aws.amazon.com/pinpoint/latest/developerguide/welcome.html Amazon Pinpoint Developer Guide>.
+-- The /Amazon Pinpoint Developer Guide/ provides tutorials, code samples,
+-- and procedures that demonstrate how to use Amazon Pinpoint features
+-- programmatically and how to integrate Amazon Pinpoint functionality into
+-- mobile apps and other types of applications. The guide also provides
+-- information about key topics such as Amazon Pinpoint integration with
+-- other AWS services and the limits that apply to using the service.
+--
+-- The Amazon Pinpoint Email API is available in several AWS Regions and it
+-- provides an endpoint for each of these Regions. For a list of all the
+-- Regions and endpoints where the API is currently available, see
+-- <https://docs.aws.amazon.com/general/latest/gr/rande.html#pinpoint_region AWS Service Endpoints>
+-- in the /Amazon Web Services General Reference/. To learn more about AWS
+-- Regions, see
+-- <https://docs.aws.amazon.com/general/latest/gr/rande-manage.html Managing AWS Regions>
+-- in the /Amazon Web Services General Reference/.
+--
+-- In each Region, AWS maintains multiple Availability Zones. These
+-- Availability Zones are physically isolated from each other, but are
+-- united by private, low-latency, high-throughput, and highly redundant
+-- network connections. These Availability Zones enable us to provide very
+-- high levels of availability and redundancy, while also minimizing
+-- latency. To learn more about the number of Availability Zones that are
+-- available in each Region, see
+-- <http://aws.amazon.com/about-aws/global-infrastructure/ AWS Global Infrastructure>.
+module Amazonka.PinpointEmail
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccountSuspendedException
+    _AccountSuspendedException,
+
+    -- ** AlreadyExistsException
+    _AlreadyExistsException,
+
+    -- ** BadRequestException
+    _BadRequestException,
+
+    -- ** ConcurrentModificationException
+    _ConcurrentModificationException,
+
+    -- ** LimitExceededException
+    _LimitExceededException,
+
+    -- ** MailFromDomainNotVerifiedException
+    _MailFromDomainNotVerifiedException,
+
+    -- ** MessageRejected
+    _MessageRejected,
+
+    -- ** NotFoundException
+    _NotFoundException,
+
+    -- ** SendingPausedException
+    _SendingPausedException,
+
+    -- ** TooManyRequestsException
+    _TooManyRequestsException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateConfigurationSet
+    CreateConfigurationSet (CreateConfigurationSet'),
+    newCreateConfigurationSet,
+    CreateConfigurationSetResponse (CreateConfigurationSetResponse'),
+    newCreateConfigurationSetResponse,
+
+    -- ** CreateConfigurationSetEventDestination
+    CreateConfigurationSetEventDestination (CreateConfigurationSetEventDestination'),
+    newCreateConfigurationSetEventDestination,
+    CreateConfigurationSetEventDestinationResponse (CreateConfigurationSetEventDestinationResponse'),
+    newCreateConfigurationSetEventDestinationResponse,
+
+    -- ** CreateDedicatedIpPool
+    CreateDedicatedIpPool (CreateDedicatedIpPool'),
+    newCreateDedicatedIpPool,
+    CreateDedicatedIpPoolResponse (CreateDedicatedIpPoolResponse'),
+    newCreateDedicatedIpPoolResponse,
+
+    -- ** CreateDeliverabilityTestReport
+    CreateDeliverabilityTestReport (CreateDeliverabilityTestReport'),
+    newCreateDeliverabilityTestReport,
+    CreateDeliverabilityTestReportResponse (CreateDeliverabilityTestReportResponse'),
+    newCreateDeliverabilityTestReportResponse,
+
+    -- ** CreateEmailIdentity
+    CreateEmailIdentity (CreateEmailIdentity'),
+    newCreateEmailIdentity,
+    CreateEmailIdentityResponse (CreateEmailIdentityResponse'),
+    newCreateEmailIdentityResponse,
+
+    -- ** DeleteConfigurationSet
+    DeleteConfigurationSet (DeleteConfigurationSet'),
+    newDeleteConfigurationSet,
+    DeleteConfigurationSetResponse (DeleteConfigurationSetResponse'),
+    newDeleteConfigurationSetResponse,
+
+    -- ** DeleteConfigurationSetEventDestination
+    DeleteConfigurationSetEventDestination (DeleteConfigurationSetEventDestination'),
+    newDeleteConfigurationSetEventDestination,
+    DeleteConfigurationSetEventDestinationResponse (DeleteConfigurationSetEventDestinationResponse'),
+    newDeleteConfigurationSetEventDestinationResponse,
+
+    -- ** DeleteDedicatedIpPool
+    DeleteDedicatedIpPool (DeleteDedicatedIpPool'),
+    newDeleteDedicatedIpPool,
+    DeleteDedicatedIpPoolResponse (DeleteDedicatedIpPoolResponse'),
+    newDeleteDedicatedIpPoolResponse,
+
+    -- ** DeleteEmailIdentity
+    DeleteEmailIdentity (DeleteEmailIdentity'),
+    newDeleteEmailIdentity,
+    DeleteEmailIdentityResponse (DeleteEmailIdentityResponse'),
+    newDeleteEmailIdentityResponse,
+
+    -- ** 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,
+
+    -- ** GetDedicatedIp
+    GetDedicatedIp (GetDedicatedIp'),
+    newGetDedicatedIp,
+    GetDedicatedIpResponse (GetDedicatedIpResponse'),
+    newGetDedicatedIpResponse,
+
+    -- ** GetDedicatedIps (Paginated)
+    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,
+
+    -- ** ListConfigurationSets (Paginated)
+    ListConfigurationSets (ListConfigurationSets'),
+    newListConfigurationSets,
+    ListConfigurationSetsResponse (ListConfigurationSetsResponse'),
+    newListConfigurationSetsResponse,
+
+    -- ** ListDedicatedIpPools (Paginated)
+    ListDedicatedIpPools (ListDedicatedIpPools'),
+    newListDedicatedIpPools,
+    ListDedicatedIpPoolsResponse (ListDedicatedIpPoolsResponse'),
+    newListDedicatedIpPoolsResponse,
+
+    -- ** ListDeliverabilityTestReports (Paginated)
+    ListDeliverabilityTestReports (ListDeliverabilityTestReports'),
+    newListDeliverabilityTestReports,
+    ListDeliverabilityTestReportsResponse (ListDeliverabilityTestReportsResponse'),
+    newListDeliverabilityTestReportsResponse,
+
+    -- ** ListDomainDeliverabilityCampaigns
+    ListDomainDeliverabilityCampaigns (ListDomainDeliverabilityCampaigns'),
+    newListDomainDeliverabilityCampaigns,
+    ListDomainDeliverabilityCampaignsResponse (ListDomainDeliverabilityCampaignsResponse'),
+    newListDomainDeliverabilityCampaignsResponse,
+
+    -- ** ListEmailIdentities (Paginated)
+    ListEmailIdentities (ListEmailIdentities'),
+    newListEmailIdentities,
+    ListEmailIdentitiesResponse (ListEmailIdentitiesResponse'),
+    newListEmailIdentitiesResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** PutAccountDedicatedIpWarmupAttributes
+    PutAccountDedicatedIpWarmupAttributes (PutAccountDedicatedIpWarmupAttributes'),
+    newPutAccountDedicatedIpWarmupAttributes,
+    PutAccountDedicatedIpWarmupAttributesResponse (PutAccountDedicatedIpWarmupAttributesResponse'),
+    newPutAccountDedicatedIpWarmupAttributesResponse,
+
+    -- ** PutAccountSendingAttributes
+    PutAccountSendingAttributes (PutAccountSendingAttributes'),
+    newPutAccountSendingAttributes,
+    PutAccountSendingAttributesResponse (PutAccountSendingAttributesResponse'),
+    newPutAccountSendingAttributesResponse,
+
+    -- ** PutConfigurationSetDeliveryOptions
+    PutConfigurationSetDeliveryOptions (PutConfigurationSetDeliveryOptions'),
+    newPutConfigurationSetDeliveryOptions,
+    PutConfigurationSetDeliveryOptionsResponse (PutConfigurationSetDeliveryOptionsResponse'),
+    newPutConfigurationSetDeliveryOptionsResponse,
+
+    -- ** PutConfigurationSetReputationOptions
+    PutConfigurationSetReputationOptions (PutConfigurationSetReputationOptions'),
+    newPutConfigurationSetReputationOptions,
+    PutConfigurationSetReputationOptionsResponse (PutConfigurationSetReputationOptionsResponse'),
+    newPutConfigurationSetReputationOptionsResponse,
+
+    -- ** PutConfigurationSetSendingOptions
+    PutConfigurationSetSendingOptions (PutConfigurationSetSendingOptions'),
+    newPutConfigurationSetSendingOptions,
+    PutConfigurationSetSendingOptionsResponse (PutConfigurationSetSendingOptionsResponse'),
+    newPutConfigurationSetSendingOptionsResponse,
+
+    -- ** PutConfigurationSetTrackingOptions
+    PutConfigurationSetTrackingOptions (PutConfigurationSetTrackingOptions'),
+    newPutConfigurationSetTrackingOptions,
+    PutConfigurationSetTrackingOptionsResponse (PutConfigurationSetTrackingOptionsResponse'),
+    newPutConfigurationSetTrackingOptionsResponse,
+
+    -- ** PutDedicatedIpInPool
+    PutDedicatedIpInPool (PutDedicatedIpInPool'),
+    newPutDedicatedIpInPool,
+    PutDedicatedIpInPoolResponse (PutDedicatedIpInPoolResponse'),
+    newPutDedicatedIpInPoolResponse,
+
+    -- ** PutDedicatedIpWarmupAttributes
+    PutDedicatedIpWarmupAttributes (PutDedicatedIpWarmupAttributes'),
+    newPutDedicatedIpWarmupAttributes,
+    PutDedicatedIpWarmupAttributesResponse (PutDedicatedIpWarmupAttributesResponse'),
+    newPutDedicatedIpWarmupAttributesResponse,
+
+    -- ** PutDeliverabilityDashboardOption
+    PutDeliverabilityDashboardOption (PutDeliverabilityDashboardOption'),
+    newPutDeliverabilityDashboardOption,
+    PutDeliverabilityDashboardOptionResponse (PutDeliverabilityDashboardOptionResponse'),
+    newPutDeliverabilityDashboardOptionResponse,
+
+    -- ** PutEmailIdentityDkimAttributes
+    PutEmailIdentityDkimAttributes (PutEmailIdentityDkimAttributes'),
+    newPutEmailIdentityDkimAttributes,
+    PutEmailIdentityDkimAttributesResponse (PutEmailIdentityDkimAttributesResponse'),
+    newPutEmailIdentityDkimAttributesResponse,
+
+    -- ** PutEmailIdentityFeedbackAttributes
+    PutEmailIdentityFeedbackAttributes (PutEmailIdentityFeedbackAttributes'),
+    newPutEmailIdentityFeedbackAttributes,
+    PutEmailIdentityFeedbackAttributesResponse (PutEmailIdentityFeedbackAttributesResponse'),
+    newPutEmailIdentityFeedbackAttributesResponse,
+
+    -- ** PutEmailIdentityMailFromAttributes
+    PutEmailIdentityMailFromAttributes (PutEmailIdentityMailFromAttributes'),
+    newPutEmailIdentityMailFromAttributes,
+    PutEmailIdentityMailFromAttributesResponse (PutEmailIdentityMailFromAttributesResponse'),
+    newPutEmailIdentityMailFromAttributesResponse,
+
+    -- ** SendEmail
+    SendEmail (SendEmail'),
+    newSendEmail,
+    SendEmailResponse (SendEmailResponse'),
+    newSendEmailResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateConfigurationSetEventDestination
+    UpdateConfigurationSetEventDestination (UpdateConfigurationSetEventDestination'),
+    newUpdateConfigurationSetEventDestination,
+    UpdateConfigurationSetEventDestinationResponse (UpdateConfigurationSetEventDestinationResponse'),
+    newUpdateConfigurationSetEventDestinationResponse,
+
+    -- * Types
+
+    -- ** BehaviorOnMxFailure
+    BehaviorOnMxFailure (..),
+
+    -- ** DeliverabilityDashboardAccountStatus
+    DeliverabilityDashboardAccountStatus (..),
+
+    -- ** DeliverabilityTestStatus
+    DeliverabilityTestStatus (..),
+
+    -- ** DimensionValueSource
+    DimensionValueSource (..),
+
+    -- ** DkimStatus
+    DkimStatus (..),
+
+    -- ** EventType
+    EventType (..),
+
+    -- ** IdentityType
+    IdentityType (..),
+
+    -- ** MailFromDomainStatus
+    MailFromDomainStatus (..),
+
+    -- ** TlsPolicy
+    TlsPolicy (..),
+
+    -- ** WarmupStatus
+    WarmupStatus (..),
+
+    -- ** BlacklistEntry
+    BlacklistEntry (BlacklistEntry'),
+    newBlacklistEntry,
+
+    -- ** Body
+    Body (Body'),
+    newBody,
+
+    -- ** CloudWatchDestination
+    CloudWatchDestination (CloudWatchDestination'),
+    newCloudWatchDestination,
+
+    -- ** CloudWatchDimensionConfiguration
+    CloudWatchDimensionConfiguration (CloudWatchDimensionConfiguration'),
+    newCloudWatchDimensionConfiguration,
+
+    -- ** Content
+    Content (Content'),
+    newContent,
+
+    -- ** DailyVolume
+    DailyVolume (DailyVolume'),
+    newDailyVolume,
+
+    -- ** DedicatedIp
+    DedicatedIp (DedicatedIp'),
+    newDedicatedIp,
+
+    -- ** DeliverabilityTestReport
+    DeliverabilityTestReport (DeliverabilityTestReport'),
+    newDeliverabilityTestReport,
+
+    -- ** DeliveryOptions
+    DeliveryOptions (DeliveryOptions'),
+    newDeliveryOptions,
+
+    -- ** Destination
+    Destination (Destination'),
+    newDestination,
+
+    -- ** DkimAttributes
+    DkimAttributes (DkimAttributes'),
+    newDkimAttributes,
+
+    -- ** DomainDeliverabilityCampaign
+    DomainDeliverabilityCampaign (DomainDeliverabilityCampaign'),
+    newDomainDeliverabilityCampaign,
+
+    -- ** DomainDeliverabilityTrackingOption
+    DomainDeliverabilityTrackingOption (DomainDeliverabilityTrackingOption'),
+    newDomainDeliverabilityTrackingOption,
+
+    -- ** DomainIspPlacement
+    DomainIspPlacement (DomainIspPlacement'),
+    newDomainIspPlacement,
+
+    -- ** EmailContent
+    EmailContent (EmailContent'),
+    newEmailContent,
+
+    -- ** EventDestination
+    EventDestination (EventDestination'),
+    newEventDestination,
+
+    -- ** EventDestinationDefinition
+    EventDestinationDefinition (EventDestinationDefinition'),
+    newEventDestinationDefinition,
+
+    -- ** IdentityInfo
+    IdentityInfo (IdentityInfo'),
+    newIdentityInfo,
+
+    -- ** InboxPlacementTrackingOption
+    InboxPlacementTrackingOption (InboxPlacementTrackingOption'),
+    newInboxPlacementTrackingOption,
+
+    -- ** IspPlacement
+    IspPlacement (IspPlacement'),
+    newIspPlacement,
+
+    -- ** KinesisFirehoseDestination
+    KinesisFirehoseDestination (KinesisFirehoseDestination'),
+    newKinesisFirehoseDestination,
+
+    -- ** MailFromAttributes
+    MailFromAttributes (MailFromAttributes'),
+    newMailFromAttributes,
+
+    -- ** Message
+    Message (Message'),
+    newMessage,
+
+    -- ** MessageTag
+    MessageTag (MessageTag'),
+    newMessageTag,
+
+    -- ** OverallVolume
+    OverallVolume (OverallVolume'),
+    newOverallVolume,
+
+    -- ** PinpointDestination
+    PinpointDestination (PinpointDestination'),
+    newPinpointDestination,
+
+    -- ** PlacementStatistics
+    PlacementStatistics (PlacementStatistics'),
+    newPlacementStatistics,
+
+    -- ** RawMessage
+    RawMessage (RawMessage'),
+    newRawMessage,
+
+    -- ** ReputationOptions
+    ReputationOptions (ReputationOptions'),
+    newReputationOptions,
+
+    -- ** SendQuota
+    SendQuota (SendQuota'),
+    newSendQuota,
+
+    -- ** SendingOptions
+    SendingOptions (SendingOptions'),
+    newSendingOptions,
+
+    -- ** SnsDestination
+    SnsDestination (SnsDestination'),
+    newSnsDestination,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** Template
+    Template (Template'),
+    newTemplate,
+
+    -- ** TrackingOptions
+    TrackingOptions (TrackingOptions'),
+    newTrackingOptions,
+
+    -- ** VolumeStatistics
+    VolumeStatistics (VolumeStatistics'),
+    newVolumeStatistics,
+  )
+where
+
+import Amazonka.PinpointEmail.CreateConfigurationSet
+import Amazonka.PinpointEmail.CreateConfigurationSetEventDestination
+import Amazonka.PinpointEmail.CreateDedicatedIpPool
+import Amazonka.PinpointEmail.CreateDeliverabilityTestReport
+import Amazonka.PinpointEmail.CreateEmailIdentity
+import Amazonka.PinpointEmail.DeleteConfigurationSet
+import Amazonka.PinpointEmail.DeleteConfigurationSetEventDestination
+import Amazonka.PinpointEmail.DeleteDedicatedIpPool
+import Amazonka.PinpointEmail.DeleteEmailIdentity
+import Amazonka.PinpointEmail.GetAccount
+import Amazonka.PinpointEmail.GetBlacklistReports
+import Amazonka.PinpointEmail.GetConfigurationSet
+import Amazonka.PinpointEmail.GetConfigurationSetEventDestinations
+import Amazonka.PinpointEmail.GetDedicatedIp
+import Amazonka.PinpointEmail.GetDedicatedIps
+import Amazonka.PinpointEmail.GetDeliverabilityDashboardOptions
+import Amazonka.PinpointEmail.GetDeliverabilityTestReport
+import Amazonka.PinpointEmail.GetDomainDeliverabilityCampaign
+import Amazonka.PinpointEmail.GetDomainStatisticsReport
+import Amazonka.PinpointEmail.GetEmailIdentity
+import Amazonka.PinpointEmail.Lens
+import Amazonka.PinpointEmail.ListConfigurationSets
+import Amazonka.PinpointEmail.ListDedicatedIpPools
+import Amazonka.PinpointEmail.ListDeliverabilityTestReports
+import Amazonka.PinpointEmail.ListDomainDeliverabilityCampaigns
+import Amazonka.PinpointEmail.ListEmailIdentities
+import Amazonka.PinpointEmail.ListTagsForResource
+import Amazonka.PinpointEmail.PutAccountDedicatedIpWarmupAttributes
+import Amazonka.PinpointEmail.PutAccountSendingAttributes
+import Amazonka.PinpointEmail.PutConfigurationSetDeliveryOptions
+import Amazonka.PinpointEmail.PutConfigurationSetReputationOptions
+import Amazonka.PinpointEmail.PutConfigurationSetSendingOptions
+import Amazonka.PinpointEmail.PutConfigurationSetTrackingOptions
+import Amazonka.PinpointEmail.PutDedicatedIpInPool
+import Amazonka.PinpointEmail.PutDedicatedIpWarmupAttributes
+import Amazonka.PinpointEmail.PutDeliverabilityDashboardOption
+import Amazonka.PinpointEmail.PutEmailIdentityDkimAttributes
+import Amazonka.PinpointEmail.PutEmailIdentityFeedbackAttributes
+import Amazonka.PinpointEmail.PutEmailIdentityMailFromAttributes
+import Amazonka.PinpointEmail.SendEmail
+import Amazonka.PinpointEmail.TagResource
+import Amazonka.PinpointEmail.Types
+import Amazonka.PinpointEmail.UntagResource
+import Amazonka.PinpointEmail.UpdateConfigurationSetEventDestination
+import Amazonka.PinpointEmail.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 'PinpointEmail'.
+
+-- $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/PinpointEmail/CreateConfigurationSet.hs b/gen/Amazonka/PinpointEmail/CreateConfigurationSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/CreateConfigurationSet.hs
@@ -0,0 +1,261 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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 you send using Amazon Pinpoint. 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.PinpointEmail.CreateConfigurationSet
+  ( -- * Creating a Request
+    CreateConfigurationSet (..),
+    newCreateConfigurationSet,
+
+    -- * Request Lenses
+    createConfigurationSet_deliveryOptions,
+    createConfigurationSet_reputationOptions,
+    createConfigurationSet_sendingOptions,
+    createConfigurationSet_tags,
+    createConfigurationSet_trackingOptions,
+    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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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 Pinpoint 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 Pinpoint can send email
+    -- that you send using the configuration set.
+    sendingOptions :: Prelude.Maybe SendingOptions,
+    -- | An array of objects that define the tags (keys and values) that you want
+    -- 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,
+    -- | The name of the configuration set.
+    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 Pinpoint 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 Pinpoint can send email
+-- that you send using the configuration set.
+--
+-- 'tags', 'createConfigurationSet_tags' - An array of objects that define the tags (keys and values) that you want
+-- 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.
+--
+-- 'configurationSetName', 'createConfigurationSet_configurationSetName' - The name of the configuration set.
+newCreateConfigurationSet ::
+  -- | 'configurationSetName'
+  Prelude.Text ->
+  CreateConfigurationSet
+newCreateConfigurationSet pConfigurationSetName_ =
+  CreateConfigurationSet'
+    { deliveryOptions =
+        Prelude.Nothing,
+      reputationOptions = Prelude.Nothing,
+      sendingOptions = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      trackingOptions = 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 Pinpoint 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 Pinpoint 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)
+
+-- | An array of objects that define the tags (keys and values) that you want
+-- 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)
+
+-- | The name of the configuration set.
+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` tags
+      `Prelude.hashWithSalt` trackingOptions
+      `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 tags
+      `Prelude.seq` Prelude.rnf trackingOptions
+      `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,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("TrackingOptions" Data..=)
+              Prelude.<$> trackingOptions,
+            Prelude.Just
+              ( "ConfigurationSetName"
+                  Data..= configurationSetName
+              )
+          ]
+      )
+
+instance Data.ToPath CreateConfigurationSet where
+  toPath = Prelude.const "/v1/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/PinpointEmail/CreateConfigurationSetEventDestination.hs b/gen/Amazonka/PinpointEmail/CreateConfigurationSetEventDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/CreateConfigurationSetEventDestination.hs
@@ -0,0 +1,249 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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. In Amazon Pinpoint, /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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to add an event destination to a configuration set.
+--
+-- /See:/ 'newCreateConfigurationSetEventDestination' smart constructor.
+data CreateConfigurationSetEventDestination = CreateConfigurationSetEventDestination'
+  { -- | The name of the configuration set that you want to add an event
+    -- destination to.
+    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 that you want to add an event
+-- destination to.
+--
+-- '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 that you want to add an event
+-- destination to.
+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
+      [ "/v1/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/PinpointEmail/CreateDedicatedIpPool.hs b/gen/Amazonka/PinpointEmail/CreateDedicatedIpPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/CreateDedicatedIpPool.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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
+-- Pinpoint account. You can associate a pool with a configuration set.
+-- When you send an email that uses that configuration set, Amazon Pinpoint
+-- sends it using only the IP addresses in the associated pool.
+module Amazonka.PinpointEmail.CreateDedicatedIpPool
+  ( -- * Creating a Request
+    CreateDedicatedIpPool (..),
+    newCreateDedicatedIpPool,
+
+    -- * Request Lenses
+    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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to create a new dedicated IP pool.
+--
+-- /See:/ 'newCreateDedicatedIpPool' smart constructor.
+data CreateDedicatedIpPool = CreateDedicatedIpPool'
+  { -- | 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:
+--
+-- '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'
+    { tags = Prelude.Nothing,
+      poolName = pPoolName_
+    }
+
+-- | 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` tags
+      `Prelude.hashWithSalt` poolName
+
+instance Prelude.NFData CreateDedicatedIpPool where
+  rnf CreateDedicatedIpPool' {..} =
+    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
+          [ ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("PoolName" Data..= poolName)
+          ]
+      )
+
+instance Data.ToPath CreateDedicatedIpPool where
+  toPath = Prelude.const "/v1/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/PinpointEmail/CreateDeliverabilityTestReport.hs b/gen/Amazonka/PinpointEmail/CreateDeliverabilityTestReport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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 Pinpoint 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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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. Amazon
+-- Pinpoint 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.
+--
+-- /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
+      "/v1/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/PinpointEmail/CreateEmailIdentity.hs b/gen/Amazonka/PinpointEmail/CreateEmailIdentity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/CreateEmailIdentity.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.PinpointEmail.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)
+--
+-- Verifies an email identity for use with Amazon Pinpoint. In Amazon
+-- Pinpoint, an identity is an email address or domain that you use when
+-- you send email. Before you can use an identity to send email with Amazon
+-- Pinpoint, you first have to verify it. By verifying an address, you
+-- demonstrate that you\'re the owner of the address, and that you\'ve
+-- given Amazon Pinpoint permission to send email from the address.
+--
+-- When you verify an email address, Amazon Pinpoint 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, 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 Pinpoint detects these records in the DNS configuration for your
+-- domain. It usually takes around 72 hours to complete the domain
+-- verification process.
+module Amazonka.PinpointEmail.CreateEmailIdentity
+  ( -- * Creating a Request
+    CreateEmailIdentity (..),
+    newCreateEmailIdentity,
+
+    -- * Request Lenses
+    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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to begin the verification process for an email identity (an
+-- email address or domain).
+--
+-- /See:/ 'newCreateEmailIdentity' smart constructor.
+data CreateEmailIdentity = CreateEmailIdentity'
+  { -- | An array of objects that define the tags (keys and values) that you want
+    -- to associate with the email identity.
+    tags :: Prelude.Maybe [Tag],
+    -- | The email address or domain that you want to verify.
+    emailIdentity :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, 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:
+--
+-- 'tags', 'createEmailIdentity_tags' - An array of objects that define the tags (keys and values) that you want
+-- to associate with the email identity.
+--
+-- 'emailIdentity', 'createEmailIdentity_emailIdentity' - The email address or domain that you want to verify.
+newCreateEmailIdentity ::
+  -- | 'emailIdentity'
+  Prelude.Text ->
+  CreateEmailIdentity
+newCreateEmailIdentity pEmailIdentity_ =
+  CreateEmailIdentity'
+    { tags = Prelude.Nothing,
+      emailIdentity = pEmailIdentity_
+    }
+
+-- | An array of objects that define the tags (keys and values) that you want
+-- 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 that you want 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` tags
+      `Prelude.hashWithSalt` emailIdentity
+
+instance Prelude.NFData CreateEmailIdentity where
+  rnf CreateEmailIdentity' {..} =
+    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
+          [ ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("EmailIdentity" Data..= emailIdentity)
+          ]
+      )
+
+instance Data.ToPath CreateEmailIdentity where
+  toPath = Prelude.const "/v1/email/identities"
+
+instance Data.ToQuery CreateEmailIdentity where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | If the email identity is a domain, this object contains tokens that you
+-- can use to create a set of CNAME records. To sucessfully verify your
+-- domain, you have to add these records to the DNS configuration for your
+-- 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. This object includes the tokens that you use to create the
+    -- CNAME records that are required to complete the DKIM verification
+    -- process.
+    dkimAttributes :: Prelude.Maybe DkimAttributes,
+    -- | The email identity type.
+    identityType :: Prelude.Maybe IdentityType,
+    -- | Specifies whether or not the identity is verified. In Amazon Pinpoint,
+    -- 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. This object includes the tokens that you use to create the
+-- CNAME records that are required to complete the DKIM verification
+-- process.
+--
+-- 'identityType', 'createEmailIdentityResponse_identityType' - The email identity type.
+--
+-- 'verifiedForSendingStatus', 'createEmailIdentityResponse_verifiedForSendingStatus' - Specifies whether or not the identity is verified. In Amazon Pinpoint,
+-- 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. This object includes the tokens that you use to create the
+-- CNAME records that are required to complete the DKIM verification
+-- process.
+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.
+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. In Amazon Pinpoint,
+-- 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/PinpointEmail/DeleteConfigurationSet.hs b/gen/Amazonka/PinpointEmail/DeleteConfigurationSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.
+--
+-- In Amazon Pinpoint, /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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to delete a configuration set.
+--
+-- /See:/ 'newDeleteConfigurationSet' smart constructor.
+data DeleteConfigurationSet = DeleteConfigurationSet'
+  { -- | The name of the configuration set that you want to delete.
+    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 that you want to delete.
+newDeleteConfigurationSet ::
+  -- | 'configurationSetName'
+  Prelude.Text ->
+  DeleteConfigurationSet
+newDeleteConfigurationSet pConfigurationSetName_ =
+  DeleteConfigurationSet'
+    { configurationSetName =
+        pConfigurationSetName_
+    }
+
+-- | The name of the configuration set that you want to delete.
+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
+      [ "/v1/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/PinpointEmail/DeleteConfigurationSetEventDestination.hs b/gen/Amazonka/PinpointEmail/DeleteConfigurationSetEventDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.
+--
+-- In Amazon Pinpoint, /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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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
+    -- that you want to delete.
+    configurationSetName :: Prelude.Text,
+    -- | The name of the event destination that you want 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
+-- that you want to delete.
+--
+-- 'eventDestinationName', 'deleteConfigurationSetEventDestination_eventDestinationName' - The name of the event destination that you want 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
+-- that you want 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 that you want 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
+      [ "/v1/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/PinpointEmail/DeleteDedicatedIpPool.hs b/gen/Amazonka/PinpointEmail/DeleteDedicatedIpPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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
+      ["/v1/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/PinpointEmail/DeleteEmailIdentity.hs b/gen/Amazonka/PinpointEmail/DeleteEmailIdentity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/DeleteEmailIdentity.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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 that you previously verified for use with
+-- Amazon Pinpoint. An identity can be either an email address or a domain
+-- name.
+module Amazonka.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to delete an existing email identity. When you delete an
+-- identity, you lose the ability to use Amazon Pinpoint 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) that you want to
+    -- delete from your Amazon Pinpoint account.
+    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) that you want to
+-- delete from your Amazon Pinpoint account.
+newDeleteEmailIdentity ::
+  -- | 'emailIdentity'
+  Prelude.Text ->
+  DeleteEmailIdentity
+newDeleteEmailIdentity pEmailIdentity_ =
+  DeleteEmailIdentity'
+    { emailIdentity =
+        pEmailIdentity_
+    }
+
+-- | The identity (that is, the email address or domain) that you want to
+-- delete from your Amazon Pinpoint account.
+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
+      ["/v1/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/PinpointEmail/GetAccount.hs b/gen/Amazonka/PinpointEmail/GetAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/GetAccount.hs
@@ -0,0 +1,281 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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 Pinpoint account in the current AWS Region.
+module Amazonka.PinpointEmail.GetAccount
+  ( -- * Creating a Request
+    GetAccount (..),
+    newGetAccount,
+
+    -- * Destructuring the Response
+    GetAccountResponse (..),
+    newGetAccountResponse,
+
+    -- * Response Lenses
+    getAccountResponse_dedicatedIpAutoWarmupEnabled,
+    getAccountResponse_enforcementStatus,
+    getAccountResponse_productionAccessEnabled,
+    getAccountResponse_sendQuota,
+    getAccountResponse_sendingEnabled,
+    getAccountResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to obtain information about the email-sending capabilities of
+-- your Amazon Pinpoint 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..?> "EnforcementStatus")
+            Prelude.<*> (x Data..?> "ProductionAccessEnabled")
+            Prelude.<*> (x Data..?> "SendQuota")
+            Prelude.<*> (x Data..?> "SendingEnabled")
+            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 "/v1/email/account"
+
+instance Data.ToQuery GetAccount where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | A list of details about the email-sending capabilities of your Amazon
+-- Pinpoint account in the current AWS 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,
+    -- | The reputation status of your Amazon Pinpoint 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 some issues with your Amazon
+    --     Pinpoint 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 AWS 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 Pinpoint account in the current AWS
+    -- Region.
+    sendQuota :: Prelude.Maybe SendQuota,
+    -- | Indicates whether or not email sending is enabled for your Amazon
+    -- Pinpoint account in the current AWS Region.
+    sendingEnabled :: 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 '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.
+--
+-- 'enforcementStatus', 'getAccountResponse_enforcementStatus' - The reputation status of your Amazon Pinpoint 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 some issues with your Amazon
+--     Pinpoint 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 AWS 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 Pinpoint account in the current AWS
+-- Region.
+--
+-- 'sendingEnabled', 'getAccountResponse_sendingEnabled' - Indicates whether or not email sending is enabled for your Amazon
+-- Pinpoint account in the current AWS Region.
+--
+-- 'httpStatus', 'getAccountResponse_httpStatus' - The response's http status code.
+newGetAccountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAccountResponse
+newGetAccountResponse pHttpStatus_ =
+  GetAccountResponse'
+    { dedicatedIpAutoWarmupEnabled =
+        Prelude.Nothing,
+      enforcementStatus = Prelude.Nothing,
+      productionAccessEnabled = Prelude.Nothing,
+      sendQuota = Prelude.Nothing,
+      sendingEnabled = 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)
+
+-- | The reputation status of your Amazon Pinpoint 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 some issues with your Amazon
+--     Pinpoint 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 AWS 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 Pinpoint account in the current AWS
+-- 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
+-- Pinpoint account in the current AWS Region.
+getAccountResponse_sendingEnabled :: Lens.Lens' GetAccountResponse (Prelude.Maybe Prelude.Bool)
+getAccountResponse_sendingEnabled = Lens.lens (\GetAccountResponse' {sendingEnabled} -> sendingEnabled) (\s@GetAccountResponse' {} a -> s {sendingEnabled = 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 enforcementStatus
+      `Prelude.seq` Prelude.rnf productionAccessEnabled
+      `Prelude.seq` Prelude.rnf sendQuota
+      `Prelude.seq` Prelude.rnf sendingEnabled
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/PinpointEmail/GetBlacklistReports.hs b/gen/Amazonka/PinpointEmail/GetBlacklistReports.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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 Pinpoint or Amazon SES.
+    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 Pinpoint or Amazon SES.
+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 Pinpoint or Amazon SES.
+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
+      "/v1/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/PinpointEmail/GetConfigurationSet.hs b/gen/Amazonka/PinpointEmail/GetConfigurationSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/GetConfigurationSet.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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.
+--
+-- In Amazon Pinpoint, /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.PinpointEmail.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_tags,
+    getConfigurationSetResponse_trackingOptions,
+    getConfigurationSetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to obtain information about a configuration set.
+--
+-- /See:/ 'newGetConfigurationSet' smart constructor.
+data GetConfigurationSet = GetConfigurationSet'
+  { -- | The name of the configuration set that you want to obtain more
+    -- information about.
+    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 that you want to obtain more
+-- information about.
+newGetConfigurationSet ::
+  -- | 'configurationSetName'
+  Prelude.Text ->
+  GetConfigurationSet
+newGetConfigurationSet pConfigurationSetName_ =
+  GetConfigurationSet'
+    { configurationSetName =
+        pConfigurationSetName_
+    }
+
+-- | The name of the configuration set that you want to obtain more
+-- information about.
+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..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "TrackingOptions")
+            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
+      [ "/v1/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 Pinpoint 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 Pinpoint can send email
+    -- that you send using the configuration set.
+    sendingOptions :: Prelude.Maybe SendingOptions,
+    -- | 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,
+    -- | 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 Pinpoint 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 Pinpoint can send email
+-- that you send using the configuration set.
+--
+-- '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.
+--
+-- '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,
+      tags = Prelude.Nothing,
+      trackingOptions = 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 Pinpoint 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 Pinpoint 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 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)
+
+-- | 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 tags
+      `Prelude.seq` Prelude.rnf trackingOptions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/PinpointEmail/GetConfigurationSetEventDestinations.hs b/gen/Amazonka/PinpointEmail/GetConfigurationSetEventDestinations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.
+--
+-- In Amazon Pinpoint, /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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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
+      [ "/v1/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/PinpointEmail/GetDedicatedIp.hs b/gen/Amazonka/PinpointEmail/GetDedicatedIp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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 Pinpoint 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 Pinpoint 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 Pinpoint 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
+      ["/v1/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/PinpointEmail/GetDedicatedIps.hs b/gen/Amazonka/PinpointEmail/GetDedicatedIps.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/GetDedicatedIps.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.PinpointEmail.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
+-- Pinpoint account.
+--
+-- This operation returns paginated results.
+module Amazonka.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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.AWSPager GetDedicatedIps where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getDedicatedIpsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getDedicatedIpsResponse_dedicatedIps
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getDedicatedIps_nextToken
+          Lens..~ rs
+          Lens.^? getDedicatedIpsResponse_nextToken
+          Prelude.. Lens._Just
+
+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 "/v1/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 Pinpoint account.
+--
+-- /See:/ 'newGetDedicatedIpsResponse' smart constructor.
+data GetDedicatedIpsResponse = GetDedicatedIpsResponse'
+  { -- | A list of dedicated IP addresses that are reserved for use by your
+    -- Amazon Pinpoint 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 reserved for use by your
+-- Amazon Pinpoint 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 reserved for use by your
+-- Amazon Pinpoint 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/PinpointEmail/GetDeliverabilityDashboardOptions.hs b/gen/Amazonka/PinpointEmail/GetDeliverabilityDashboardOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/GetDeliverabilityDashboardOptions.hs
@@ -0,0 +1,289 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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 Amazon Pinpoint 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 using Amazon
+-- Pinpoint. 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 Pinpoint. For more information about the features and cost
+-- of a Deliverability dashboard subscription, see
+-- <http://aws.amazon.com/pinpoint/pricing/ Amazon Pinpoint Pricing>.
+module Amazonka.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Retrieve information about the status of the Deliverability dashboard
+-- for your Amazon Pinpoint 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 using Amazon
+-- Pinpoint. 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 Pinpoint. 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 "/v1/email/deliverability-dashboard"
+
+instance
+  Data.ToQuery
+    GetDeliverabilityDashboardOptions
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | An object that shows the status of the Deliverability dashboard for your
+-- Amazon Pinpoint account.
+--
+-- /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, in Unix time format, 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 for your
+    -- Amazon Pinpoint account. 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, in Unix time format, 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 for your
+-- Amazon Pinpoint account. 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, in Unix time format, 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 for your
+-- Amazon Pinpoint account. 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/PinpointEmail/GetDeliverabilityTestReport.hs b/gen/Amazonka/PinpointEmail/GetDeliverabilityTestReport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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
+      [ "/v1/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/PinpointEmail/GetDomainDeliverabilityCampaign.hs b/gen/Amazonka/PinpointEmail/GetDomainDeliverabilityCampaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/GetDomainDeliverabilityCampaign.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.PinpointEmail.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
+-- (@PutDeliverabilityDashboardOption@ operation).
+module Amazonka.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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. Amazon Pinpoint automatically
+    -- generates and assigns this identifier to a campaign. This value is not
+    -- the same as the campaign identifier that Amazon Pinpoint assigns to
+    -- campaigns that you create and manage by using the Amazon Pinpoint API or
+    -- the Amazon Pinpoint console.
+    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. Amazon Pinpoint automatically
+-- generates and assigns this identifier to a campaign. This value is not
+-- the same as the campaign identifier that Amazon Pinpoint assigns to
+-- campaigns that you create and manage by using the Amazon Pinpoint API or
+-- the Amazon Pinpoint console.
+newGetDomainDeliverabilityCampaign ::
+  -- | 'campaignId'
+  Prelude.Text ->
+  GetDomainDeliverabilityCampaign
+newGetDomainDeliverabilityCampaign pCampaignId_ =
+  GetDomainDeliverabilityCampaign'
+    { campaignId =
+        pCampaignId_
+    }
+
+-- | The unique identifier for the campaign. Amazon Pinpoint automatically
+-- generates and assigns this identifier to a campaign. This value is not
+-- the same as the campaign identifier that Amazon Pinpoint assigns to
+-- campaigns that you create and manage by using the Amazon Pinpoint API or
+-- the Amazon Pinpoint console.
+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
+      [ "/v1/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 (@PutDeliverabilityDashboardOption@ operation).
+--
+-- /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/PinpointEmail/GetDomainStatisticsReport.hs b/gen/Amazonka/PinpointEmail/GetDomainStatisticsReport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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
+      [ "/v1/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/PinpointEmail/GetEmailIdentity.hs b/gen/Amazonka/PinpointEmail/GetEmailIdentity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/GetEmailIdentity.hs
@@ -0,0 +1,288 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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 associated with your
+-- Amazon Pinpoint account, including the identity\'s verification status,
+-- its DKIM authentication status, and its custom Mail-From settings.
+module Amazonka.PinpointEmail.GetEmailIdentity
+  ( -- * Creating a Request
+    GetEmailIdentity (..),
+    newGetEmailIdentity,
+
+    -- * Request Lenses
+    getEmailIdentity_emailIdentity,
+
+    -- * Destructuring the Response
+    GetEmailIdentityResponse (..),
+    newGetEmailIdentityResponse,
+
+    -- * Response Lenses
+    getEmailIdentityResponse_dkimAttributes,
+    getEmailIdentityResponse_feedbackForwardingStatus,
+    getEmailIdentityResponse_identityType,
+    getEmailIdentityResponse_mailFromAttributes,
+    getEmailIdentityResponse_tags,
+    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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to return details about an email identity.
+--
+-- /See:/ 'newGetEmailIdentity' smart constructor.
+data GetEmailIdentity = GetEmailIdentity'
+  { -- | The email identity that you want to retrieve details for.
+    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 that you want to retrieve details for.
+newGetEmailIdentity ::
+  -- | 'emailIdentity'
+  Prelude.Text ->
+  GetEmailIdentity
+newGetEmailIdentity pEmailIdentity_ =
+  GetEmailIdentity' {emailIdentity = pEmailIdentity_}
+
+-- | The email identity that you want to retrieve details for.
+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..?> "DkimAttributes")
+            Prelude.<*> (x Data..?> "FeedbackForwardingStatus")
+            Prelude.<*> (x Data..?> "IdentityType")
+            Prelude.<*> (x Data..?> "MailFromAttributes")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            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
+      ["/v1/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'
+  { -- | An object that contains information about the DKIM attributes for the
+    -- identity. This object includes the tokens that you use to create the
+    -- CNAME records that are required to complete the DKIM verification
+    -- process.
+    dkimAttributes :: Prelude.Maybe DkimAttributes,
+    -- | The feedback forwarding configuration for the identity.
+    --
+    -- If the value is @true@, Amazon Pinpoint sends you email notifications
+    -- when bounce or complaint events occur. Amazon Pinpoint sends this
+    -- notification to the address that you specified in the Return-Path header
+    -- of the original email.
+    --
+    -- When you set this value to @false@, Amazon Pinpoint sends notifications
+    -- through other mechanisms, such as by notifying an Amazon SNS topic or
+    -- another event destination. 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, Amazon Pinpoint sends an
+    -- email notification when these events occur (even if this setting is
+    -- disabled).
+    feedbackForwardingStatus :: Prelude.Maybe Prelude.Bool,
+    -- | The email identity type.
+    identityType :: Prelude.Maybe IdentityType,
+    -- | An object that contains information about the Mail-From attributes for
+    -- the email identity.
+    mailFromAttributes :: Prelude.Maybe MailFromAttributes,
+    -- | An array of objects that define the tags (keys and values) that are
+    -- associated with the email identity.
+    tags :: Prelude.Maybe [Tag],
+    -- | Specifies whether or not the identity is verified. In Amazon Pinpoint,
+    -- 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:
+--
+-- 'dkimAttributes', 'getEmailIdentityResponse_dkimAttributes' - An object that contains information about the DKIM attributes for the
+-- identity. This object includes the tokens that you use to create the
+-- CNAME records that are required to complete the DKIM verification
+-- process.
+--
+-- 'feedbackForwardingStatus', 'getEmailIdentityResponse_feedbackForwardingStatus' - The feedback forwarding configuration for the identity.
+--
+-- If the value is @true@, Amazon Pinpoint sends you email notifications
+-- when bounce or complaint events occur. Amazon Pinpoint sends this
+-- notification to the address that you specified in the Return-Path header
+-- of the original email.
+--
+-- When you set this value to @false@, Amazon Pinpoint sends notifications
+-- through other mechanisms, such as by notifying an Amazon SNS topic or
+-- another event destination. 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, Amazon Pinpoint sends an
+-- email notification when these events occur (even if this setting is
+-- disabled).
+--
+-- 'identityType', 'getEmailIdentityResponse_identityType' - The email identity type.
+--
+-- 'mailFromAttributes', 'getEmailIdentityResponse_mailFromAttributes' - An object that contains information about the Mail-From attributes for
+-- the email identity.
+--
+-- 'tags', 'getEmailIdentityResponse_tags' - An array of objects that define the tags (keys and values) that are
+-- associated with the email identity.
+--
+-- 'verifiedForSendingStatus', 'getEmailIdentityResponse_verifiedForSendingStatus' - Specifies whether or not the identity is verified. In Amazon Pinpoint,
+-- 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'
+    { dkimAttributes =
+        Prelude.Nothing,
+      feedbackForwardingStatus = Prelude.Nothing,
+      identityType = Prelude.Nothing,
+      mailFromAttributes = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      verifiedForSendingStatus = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An object that contains information about the DKIM attributes for the
+-- identity. This object includes the tokens that you use to create the
+-- CNAME records that are required to complete the DKIM verification
+-- process.
+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@, Amazon Pinpoint sends you email notifications
+-- when bounce or complaint events occur. Amazon Pinpoint sends this
+-- notification to the address that you specified in the Return-Path header
+-- of the original email.
+--
+-- When you set this value to @false@, Amazon Pinpoint sends notifications
+-- through other mechanisms, such as by notifying an Amazon SNS topic or
+-- another event destination. 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, Amazon Pinpoint sends 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.
+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)
+
+-- | 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
+
+-- | Specifies whether or not the identity is verified. In Amazon Pinpoint,
+-- 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 dkimAttributes
+      `Prelude.seq` Prelude.rnf feedbackForwardingStatus
+      `Prelude.seq` Prelude.rnf identityType
+      `Prelude.seq` Prelude.rnf mailFromAttributes
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf verifiedForSendingStatus
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/PinpointEmail/Lens.hs b/gen/Amazonka/PinpointEmail/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Lens.hs
@@ -0,0 +1,547 @@
+{-# 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.PinpointEmail.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.PinpointEmail.Lens
+  ( -- * Operations
+
+    -- ** CreateConfigurationSet
+    createConfigurationSet_deliveryOptions,
+    createConfigurationSet_reputationOptions,
+    createConfigurationSet_sendingOptions,
+    createConfigurationSet_tags,
+    createConfigurationSet_trackingOptions,
+    createConfigurationSet_configurationSetName,
+    createConfigurationSetResponse_httpStatus,
+
+    -- ** CreateConfigurationSetEventDestination
+    createConfigurationSetEventDestination_configurationSetName,
+    createConfigurationSetEventDestination_eventDestinationName,
+    createConfigurationSetEventDestination_eventDestination,
+    createConfigurationSetEventDestinationResponse_httpStatus,
+
+    -- ** CreateDedicatedIpPool
+    createDedicatedIpPool_tags,
+    createDedicatedIpPool_poolName,
+    createDedicatedIpPoolResponse_httpStatus,
+
+    -- ** CreateDeliverabilityTestReport
+    createDeliverabilityTestReport_reportName,
+    createDeliverabilityTestReport_tags,
+    createDeliverabilityTestReport_fromEmailAddress,
+    createDeliverabilityTestReport_content,
+    createDeliverabilityTestReportResponse_httpStatus,
+    createDeliverabilityTestReportResponse_reportId,
+    createDeliverabilityTestReportResponse_deliverabilityTestStatus,
+
+    -- ** CreateEmailIdentity
+    createEmailIdentity_tags,
+    createEmailIdentity_emailIdentity,
+    createEmailIdentityResponse_dkimAttributes,
+    createEmailIdentityResponse_identityType,
+    createEmailIdentityResponse_verifiedForSendingStatus,
+    createEmailIdentityResponse_httpStatus,
+
+    -- ** DeleteConfigurationSet
+    deleteConfigurationSet_configurationSetName,
+    deleteConfigurationSetResponse_httpStatus,
+
+    -- ** DeleteConfigurationSetEventDestination
+    deleteConfigurationSetEventDestination_configurationSetName,
+    deleteConfigurationSetEventDestination_eventDestinationName,
+    deleteConfigurationSetEventDestinationResponse_httpStatus,
+
+    -- ** DeleteDedicatedIpPool
+    deleteDedicatedIpPool_poolName,
+    deleteDedicatedIpPoolResponse_httpStatus,
+
+    -- ** DeleteEmailIdentity
+    deleteEmailIdentity_emailIdentity,
+    deleteEmailIdentityResponse_httpStatus,
+
+    -- ** GetAccount
+    getAccountResponse_dedicatedIpAutoWarmupEnabled,
+    getAccountResponse_enforcementStatus,
+    getAccountResponse_productionAccessEnabled,
+    getAccountResponse_sendQuota,
+    getAccountResponse_sendingEnabled,
+    getAccountResponse_httpStatus,
+
+    -- ** GetBlacklistReports
+    getBlacklistReports_blacklistItemNames,
+    getBlacklistReportsResponse_httpStatus,
+    getBlacklistReportsResponse_blacklistReport,
+
+    -- ** GetConfigurationSet
+    getConfigurationSet_configurationSetName,
+    getConfigurationSetResponse_configurationSetName,
+    getConfigurationSetResponse_deliveryOptions,
+    getConfigurationSetResponse_reputationOptions,
+    getConfigurationSetResponse_sendingOptions,
+    getConfigurationSetResponse_tags,
+    getConfigurationSetResponse_trackingOptions,
+    getConfigurationSetResponse_httpStatus,
+
+    -- ** GetConfigurationSetEventDestinations
+    getConfigurationSetEventDestinations_configurationSetName,
+    getConfigurationSetEventDestinationsResponse_eventDestinations,
+    getConfigurationSetEventDestinationsResponse_httpStatus,
+
+    -- ** GetDedicatedIp
+    getDedicatedIp_ip,
+    getDedicatedIpResponse_dedicatedIp,
+    getDedicatedIpResponse_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_dkimAttributes,
+    getEmailIdentityResponse_feedbackForwardingStatus,
+    getEmailIdentityResponse_identityType,
+    getEmailIdentityResponse_mailFromAttributes,
+    getEmailIdentityResponse_tags,
+    getEmailIdentityResponse_verifiedForSendingStatus,
+    getEmailIdentityResponse_httpStatus,
+
+    -- ** ListConfigurationSets
+    listConfigurationSets_nextToken,
+    listConfigurationSets_pageSize,
+    listConfigurationSetsResponse_configurationSets,
+    listConfigurationSetsResponse_nextToken,
+    listConfigurationSetsResponse_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,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_httpStatus,
+    listTagsForResourceResponse_tags,
+
+    -- ** PutAccountDedicatedIpWarmupAttributes
+    putAccountDedicatedIpWarmupAttributes_autoWarmupEnabled,
+    putAccountDedicatedIpWarmupAttributesResponse_httpStatus,
+
+    -- ** PutAccountSendingAttributes
+    putAccountSendingAttributes_sendingEnabled,
+    putAccountSendingAttributesResponse_httpStatus,
+
+    -- ** PutConfigurationSetDeliveryOptions
+    putConfigurationSetDeliveryOptions_sendingPoolName,
+    putConfigurationSetDeliveryOptions_tlsPolicy,
+    putConfigurationSetDeliveryOptions_configurationSetName,
+    putConfigurationSetDeliveryOptionsResponse_httpStatus,
+
+    -- ** PutConfigurationSetReputationOptions
+    putConfigurationSetReputationOptions_reputationMetricsEnabled,
+    putConfigurationSetReputationOptions_configurationSetName,
+    putConfigurationSetReputationOptionsResponse_httpStatus,
+
+    -- ** PutConfigurationSetSendingOptions
+    putConfigurationSetSendingOptions_sendingEnabled,
+    putConfigurationSetSendingOptions_configurationSetName,
+    putConfigurationSetSendingOptionsResponse_httpStatus,
+
+    -- ** PutConfigurationSetTrackingOptions
+    putConfigurationSetTrackingOptions_customRedirectDomain,
+    putConfigurationSetTrackingOptions_configurationSetName,
+    putConfigurationSetTrackingOptionsResponse_httpStatus,
+
+    -- ** PutDedicatedIpInPool
+    putDedicatedIpInPool_ip,
+    putDedicatedIpInPool_destinationPoolName,
+    putDedicatedIpInPoolResponse_httpStatus,
+
+    -- ** PutDedicatedIpWarmupAttributes
+    putDedicatedIpWarmupAttributes_ip,
+    putDedicatedIpWarmupAttributes_warmupPercentage,
+    putDedicatedIpWarmupAttributesResponse_httpStatus,
+
+    -- ** PutDeliverabilityDashboardOption
+    putDeliverabilityDashboardOption_subscribedDomains,
+    putDeliverabilityDashboardOption_dashboardEnabled,
+    putDeliverabilityDashboardOptionResponse_httpStatus,
+
+    -- ** PutEmailIdentityDkimAttributes
+    putEmailIdentityDkimAttributes_signingEnabled,
+    putEmailIdentityDkimAttributes_emailIdentity,
+    putEmailIdentityDkimAttributesResponse_httpStatus,
+
+    -- ** PutEmailIdentityFeedbackAttributes
+    putEmailIdentityFeedbackAttributes_emailForwardingEnabled,
+    putEmailIdentityFeedbackAttributes_emailIdentity,
+    putEmailIdentityFeedbackAttributesResponse_httpStatus,
+
+    -- ** PutEmailIdentityMailFromAttributes
+    putEmailIdentityMailFromAttributes_behaviorOnMxFailure,
+    putEmailIdentityMailFromAttributes_mailFromDomain,
+    putEmailIdentityMailFromAttributes_emailIdentity,
+    putEmailIdentityMailFromAttributesResponse_httpStatus,
+
+    -- ** SendEmail
+    sendEmail_configurationSetName,
+    sendEmail_emailTags,
+    sendEmail_feedbackForwardingEmailAddress,
+    sendEmail_fromEmailAddress,
+    sendEmail_replyToAddresses,
+    sendEmail_destination,
+    sendEmail_content,
+    sendEmailResponse_messageId,
+    sendEmailResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateConfigurationSetEventDestination
+    updateConfigurationSetEventDestination_configurationSetName,
+    updateConfigurationSetEventDestination_eventDestinationName,
+    updateConfigurationSetEventDestination_eventDestination,
+    updateConfigurationSetEventDestinationResponse_httpStatus,
+
+    -- * Types
+
+    -- ** BlacklistEntry
+    blacklistEntry_description,
+    blacklistEntry_listingTime,
+    blacklistEntry_rblName,
+
+    -- ** Body
+    body_html,
+    body_text,
+
+    -- ** CloudWatchDestination
+    cloudWatchDestination_dimensionConfigurations,
+
+    -- ** CloudWatchDimensionConfiguration
+    cloudWatchDimensionConfiguration_dimensionName,
+    cloudWatchDimensionConfiguration_dimensionValueSource,
+    cloudWatchDimensionConfiguration_defaultDimensionValue,
+
+    -- ** Content
+    content_charset,
+    content_data,
+
+    -- ** DailyVolume
+    dailyVolume_domainIspPlacements,
+    dailyVolume_startDate,
+    dailyVolume_volumeStatistics,
+
+    -- ** DedicatedIp
+    dedicatedIp_poolName,
+    dedicatedIp_ip,
+    dedicatedIp_warmupStatus,
+    dedicatedIp_warmupPercentage,
+
+    -- ** 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_signingEnabled,
+    dkimAttributes_status,
+    dkimAttributes_tokens,
+
+    -- ** 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,
+
+    -- ** 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,
+
+    -- ** IdentityInfo
+    identityInfo_identityName,
+    identityInfo_identityType,
+    identityInfo_sendingEnabled,
+
+    -- ** InboxPlacementTrackingOption
+    inboxPlacementTrackingOption_global,
+    inboxPlacementTrackingOption_trackedIsps,
+
+    -- ** IspPlacement
+    ispPlacement_ispName,
+    ispPlacement_placementStatistics,
+
+    -- ** KinesisFirehoseDestination
+    kinesisFirehoseDestination_iamRoleArn,
+    kinesisFirehoseDestination_deliveryStreamArn,
+
+    -- ** MailFromAttributes
+    mailFromAttributes_mailFromDomain,
+    mailFromAttributes_mailFromDomainStatus,
+    mailFromAttributes_behaviorOnMxFailure,
+
+    -- ** Message
+    message_subject,
+    message_body,
+
+    -- ** MessageTag
+    messageTag_name,
+    messageTag_value,
+
+    -- ** OverallVolume
+    overallVolume_domainIspPlacements,
+    overallVolume_readRatePercent,
+    overallVolume_volumeStatistics,
+
+    -- ** PinpointDestination
+    pinpointDestination_applicationArn,
+
+    -- ** PlacementStatistics
+    placementStatistics_dkimPercentage,
+    placementStatistics_inboxPercentage,
+    placementStatistics_missingPercentage,
+    placementStatistics_spamPercentage,
+    placementStatistics_spfPercentage,
+
+    -- ** RawMessage
+    rawMessage_data,
+
+    -- ** ReputationOptions
+    reputationOptions_lastFreshStart,
+    reputationOptions_reputationMetricsEnabled,
+
+    -- ** SendQuota
+    sendQuota_max24HourSend,
+    sendQuota_maxSendRate,
+    sendQuota_sentLast24Hours,
+
+    -- ** SendingOptions
+    sendingOptions_sendingEnabled,
+
+    -- ** SnsDestination
+    snsDestination_topicArn,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+
+    -- ** Template
+    template_templateArn,
+    template_templateData,
+
+    -- ** TrackingOptions
+    trackingOptions_customRedirectDomain,
+
+    -- ** VolumeStatistics
+    volumeStatistics_inboxRawCount,
+    volumeStatistics_projectedInbox,
+    volumeStatistics_projectedSpam,
+    volumeStatistics_spamRawCount,
+  )
+where
+
+import Amazonka.PinpointEmail.CreateConfigurationSet
+import Amazonka.PinpointEmail.CreateConfigurationSetEventDestination
+import Amazonka.PinpointEmail.CreateDedicatedIpPool
+import Amazonka.PinpointEmail.CreateDeliverabilityTestReport
+import Amazonka.PinpointEmail.CreateEmailIdentity
+import Amazonka.PinpointEmail.DeleteConfigurationSet
+import Amazonka.PinpointEmail.DeleteConfigurationSetEventDestination
+import Amazonka.PinpointEmail.DeleteDedicatedIpPool
+import Amazonka.PinpointEmail.DeleteEmailIdentity
+import Amazonka.PinpointEmail.GetAccount
+import Amazonka.PinpointEmail.GetBlacklistReports
+import Amazonka.PinpointEmail.GetConfigurationSet
+import Amazonka.PinpointEmail.GetConfigurationSetEventDestinations
+import Amazonka.PinpointEmail.GetDedicatedIp
+import Amazonka.PinpointEmail.GetDedicatedIps
+import Amazonka.PinpointEmail.GetDeliverabilityDashboardOptions
+import Amazonka.PinpointEmail.GetDeliverabilityTestReport
+import Amazonka.PinpointEmail.GetDomainDeliverabilityCampaign
+import Amazonka.PinpointEmail.GetDomainStatisticsReport
+import Amazonka.PinpointEmail.GetEmailIdentity
+import Amazonka.PinpointEmail.ListConfigurationSets
+import Amazonka.PinpointEmail.ListDedicatedIpPools
+import Amazonka.PinpointEmail.ListDeliverabilityTestReports
+import Amazonka.PinpointEmail.ListDomainDeliverabilityCampaigns
+import Amazonka.PinpointEmail.ListEmailIdentities
+import Amazonka.PinpointEmail.ListTagsForResource
+import Amazonka.PinpointEmail.PutAccountDedicatedIpWarmupAttributes
+import Amazonka.PinpointEmail.PutAccountSendingAttributes
+import Amazonka.PinpointEmail.PutConfigurationSetDeliveryOptions
+import Amazonka.PinpointEmail.PutConfigurationSetReputationOptions
+import Amazonka.PinpointEmail.PutConfigurationSetSendingOptions
+import Amazonka.PinpointEmail.PutConfigurationSetTrackingOptions
+import Amazonka.PinpointEmail.PutDedicatedIpInPool
+import Amazonka.PinpointEmail.PutDedicatedIpWarmupAttributes
+import Amazonka.PinpointEmail.PutDeliverabilityDashboardOption
+import Amazonka.PinpointEmail.PutEmailIdentityDkimAttributes
+import Amazonka.PinpointEmail.PutEmailIdentityFeedbackAttributes
+import Amazonka.PinpointEmail.PutEmailIdentityMailFromAttributes
+import Amazonka.PinpointEmail.SendEmail
+import Amazonka.PinpointEmail.TagResource
+import Amazonka.PinpointEmail.Types.BlacklistEntry
+import Amazonka.PinpointEmail.Types.Body
+import Amazonka.PinpointEmail.Types.CloudWatchDestination
+import Amazonka.PinpointEmail.Types.CloudWatchDimensionConfiguration
+import Amazonka.PinpointEmail.Types.Content
+import Amazonka.PinpointEmail.Types.DailyVolume
+import Amazonka.PinpointEmail.Types.DedicatedIp
+import Amazonka.PinpointEmail.Types.DeliverabilityTestReport
+import Amazonka.PinpointEmail.Types.DeliveryOptions
+import Amazonka.PinpointEmail.Types.Destination
+import Amazonka.PinpointEmail.Types.DkimAttributes
+import Amazonka.PinpointEmail.Types.DomainDeliverabilityCampaign
+import Amazonka.PinpointEmail.Types.DomainDeliverabilityTrackingOption
+import Amazonka.PinpointEmail.Types.DomainIspPlacement
+import Amazonka.PinpointEmail.Types.EmailContent
+import Amazonka.PinpointEmail.Types.EventDestination
+import Amazonka.PinpointEmail.Types.EventDestinationDefinition
+import Amazonka.PinpointEmail.Types.IdentityInfo
+import Amazonka.PinpointEmail.Types.InboxPlacementTrackingOption
+import Amazonka.PinpointEmail.Types.IspPlacement
+import Amazonka.PinpointEmail.Types.KinesisFirehoseDestination
+import Amazonka.PinpointEmail.Types.MailFromAttributes
+import Amazonka.PinpointEmail.Types.Message
+import Amazonka.PinpointEmail.Types.MessageTag
+import Amazonka.PinpointEmail.Types.OverallVolume
+import Amazonka.PinpointEmail.Types.PinpointDestination
+import Amazonka.PinpointEmail.Types.PlacementStatistics
+import Amazonka.PinpointEmail.Types.RawMessage
+import Amazonka.PinpointEmail.Types.ReputationOptions
+import Amazonka.PinpointEmail.Types.SendQuota
+import Amazonka.PinpointEmail.Types.SendingOptions
+import Amazonka.PinpointEmail.Types.SnsDestination
+import Amazonka.PinpointEmail.Types.Tag
+import Amazonka.PinpointEmail.Types.Template
+import Amazonka.PinpointEmail.Types.TrackingOptions
+import Amazonka.PinpointEmail.Types.VolumeStatistics
+import Amazonka.PinpointEmail.UntagResource
+import Amazonka.PinpointEmail.UpdateConfigurationSetEventDestination
diff --git a/gen/Amazonka/PinpointEmail/ListConfigurationSets.hs b/gen/Amazonka/PinpointEmail/ListConfigurationSets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/ListConfigurationSets.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.PinpointEmail.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 Amazon Pinpoint
+-- account in the current region.
+--
+-- In Amazon Pinpoint, /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.
+--
+-- This operation returns paginated results.
+module Amazonka.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to obtain a list of configuration sets for your Amazon
+-- Pinpoint account in the current AWS 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.AWSPager ListConfigurationSets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listConfigurationSetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listConfigurationSetsResponse_configurationSets
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listConfigurationSets_nextToken
+          Lens..~ rs
+          Lens.^? listConfigurationSetsResponse_nextToken
+          Prelude.. Lens._Just
+
+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 "/v1/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 Pinpoint account in the
+-- current AWS Region.
+--
+-- /See:/ 'newListConfigurationSetsResponse' smart constructor.
+data ListConfigurationSetsResponse = ListConfigurationSetsResponse'
+  { -- | An array that contains all of the configuration sets in your Amazon
+    -- Pinpoint account in the current AWS 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
+-- Pinpoint account in the current AWS 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
+-- Pinpoint account in the current AWS 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/PinpointEmail/ListDedicatedIpPools.hs b/gen/Amazonka/PinpointEmail/ListDedicatedIpPools.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/ListDedicatedIpPools.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.PinpointEmail.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 Pinpoint
+-- account in the current AWS Region.
+--
+-- This operation returns paginated results.
+module Amazonka.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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.AWSPager ListDedicatedIpPools where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDedicatedIpPoolsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listDedicatedIpPoolsResponse_dedicatedIpPools
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDedicatedIpPools_nextToken
+          Lens..~ rs
+          Lens.^? listDedicatedIpPoolsResponse_nextToken
+          Prelude.. Lens._Just
+
+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 "/v1/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 Pinpoint account.
+    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 Pinpoint account.
+--
+-- '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 Pinpoint account.
+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/PinpointEmail/ListDeliverabilityTestReports.hs b/gen/Amazonka/PinpointEmail/ListDeliverabilityTestReports.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/ListDeliverabilityTestReports.hs
@@ -0,0 +1,271 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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.
+--
+-- This operation returns paginated results.
+module Amazonka.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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.AWSPager ListDeliverabilityTestReports where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDeliverabilityTestReportsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listDeliverabilityTestReportsResponse_deliverabilityTestReports
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDeliverabilityTestReports_nextToken
+          Lens..~ rs
+          Lens.^? listDeliverabilityTestReportsResponse_nextToken
+          Prelude.. Lens._Just
+
+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
+      "/v1/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/PinpointEmail/ListDomainDeliverabilityCampaigns.hs b/gen/Amazonka/PinpointEmail/ListDomainDeliverabilityCampaigns.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/ListDomainDeliverabilityCampaigns.hs
@@ -0,0 +1,319 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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
+-- (@PutDeliverabilityDashboardOption@ operation) for the domain.
+module Amazonka.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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
+-- (@PutDeliverabilityDashboardOption@ operation) for the domain.
+--
+-- /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, in Unix time format, that you want to obtain
+    -- deliverability data for.
+    startDate :: Data.POSIX,
+    -- | The last day, in Unix time format, 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, in Unix time format, that you want to obtain
+-- deliverability data for.
+--
+-- 'endDate', 'listDomainDeliverabilityCampaigns_endDate' - The last day, in Unix time format, 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, in Unix time format, 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, in Unix time format, 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
+      [ "/v1/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 (@PutDeliverabilityDashboardOption@ operation)
+-- 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/PinpointEmail/ListEmailIdentities.hs b/gen/Amazonka/PinpointEmail/ListEmailIdentities.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/ListEmailIdentities.hs
@@ -0,0 +1,256 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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 Pinpoint 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 paginated results.
+module Amazonka.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to list all of the email identities associated with your
+-- Amazon Pinpoint 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.AWSPager ListEmailIdentities where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listEmailIdentitiesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listEmailIdentitiesResponse_emailIdentities
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listEmailIdentities_nextToken
+          Lens..~ rs
+          Lens.^? listEmailIdentitiesResponse_nextToken
+          Prelude.. Lens._Just
+
+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 "/v1/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 for use
+-- with Amazon Pinpoint, regardless of whether or not those identities were
+-- successfully verified.
+--
+-- /See:/ 'newListEmailIdentitiesResponse' smart constructor.
+data ListEmailIdentitiesResponse = ListEmailIdentitiesResponse'
+  { -- | An array that includes all of the identities associated with your Amazon
+    -- Pinpoint 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 identities associated with your Amazon
+-- Pinpoint 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 identities associated with your Amazon
+-- Pinpoint 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/PinpointEmail/ListTagsForResource.hs b/gen/Amazonka/PinpointEmail/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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 in Amazon Pinpoint. 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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) of the resource 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 "/v1/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/PinpointEmail/PutAccountDedicatedIpWarmupAttributes.hs b/gen/Amazonka/PinpointEmail/PutAccountDedicatedIpWarmupAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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 Pinpoint account in the
+    -- current AWS 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 Pinpoint account in the
+-- current AWS 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 Pinpoint account in the
+-- current AWS 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
+      "/v1/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/PinpointEmail/PutAccountSendingAttributes.hs b/gen/Amazonka/PinpointEmail/PutAccountSendingAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/PutAccountSendingAttributes.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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 AWS 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 AWS 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 AWS 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 "/v1/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/PinpointEmail/PutConfigurationSetDeliveryOptions.hs b/gen/Amazonka/PinpointEmail/PutConfigurationSetDeliveryOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/PutConfigurationSetDeliveryOptions.hs
@@ -0,0 +1,243 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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 that you want 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 that you want 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 that you want 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 that you want 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 that you want 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 that you want 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
+      [ "/v1/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/PinpointEmail/PutConfigurationSetReputationOptions.hs b/gen/Amazonka/PinpointEmail/PutConfigurationSetReputationOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/PutConfigurationSetReputationOptions.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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 AWS Region.
+module Amazonka.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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 that you want to enable or disable
+    -- reputation metric tracking for.
+    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 that you want to enable or disable
+-- reputation metric tracking for.
+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 that you want to enable or disable
+-- reputation metric tracking for.
+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
+      [ "/v1/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/PinpointEmail/PutConfigurationSetSendingOptions.hs b/gen/Amazonka/PinpointEmail/PutConfigurationSetSendingOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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 AWS Region.
+module Amazonka.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to enable or disable the ability of Amazon Pinpoint 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 that you want 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 that you want 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 that you want 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
+      [ "/v1/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/PinpointEmail/PutConfigurationSetTrackingOptions.hs b/gen/Amazonka/PinpointEmail/PutConfigurationSetTrackingOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/PutConfigurationSetTrackingOptions.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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 using Amazon Pinpoint.
+module Amazonka.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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 that you want to use to track open and click events.
+    customRedirectDomain :: Prelude.Maybe Prelude.Text,
+    -- | The name of the configuration set that you want to add a custom tracking
+    -- domain to.
+    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 that you want to use to track open and click events.
+--
+-- 'configurationSetName', 'putConfigurationSetTrackingOptions_configurationSetName' - The name of the configuration set that you want to add a custom tracking
+-- domain to.
+newPutConfigurationSetTrackingOptions ::
+  -- | 'configurationSetName'
+  Prelude.Text ->
+  PutConfigurationSetTrackingOptions
+newPutConfigurationSetTrackingOptions
+  pConfigurationSetName_ =
+    PutConfigurationSetTrackingOptions'
+      { customRedirectDomain =
+          Prelude.Nothing,
+        configurationSetName =
+          pConfigurationSetName_
+      }
+
+-- | The domain that you want 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 that you want to add a custom tracking
+-- domain to.
+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
+      [ "/v1/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/PinpointEmail/PutDedicatedIpInPool.hs b/gen/Amazonka/PinpointEmail/PutDedicatedIpInPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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 Pinpoint account.
+--
+-- The dedicated IP pool you specify must already exist. You can create a
+-- new pool by using the @CreateDedicatedIpPool@ operation.
+module Amazonka.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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 Pinpoint 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 Pinpoint 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 Pinpoint 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
+      ["/v1/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/PinpointEmail/PutDedicatedIpWarmupAttributes.hs b/gen/Amazonka/PinpointEmail/PutDedicatedIpWarmupAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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
+      ["/v1/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/PinpointEmail/PutDeliverabilityDashboardOption.hs b/gen/Amazonka/PinpointEmail/PutDeliverabilityDashboardOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/PutDeliverabilityDashboardOption.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.PinpointEmail.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 for your Amazon Pinpoint
+-- account. 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 Pinpoint. 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 Pinpoint. For more information about the features and cost
+-- of a Deliverability dashboard subscription, see
+-- <http://aws.amazon.com/pinpoint/pricing/ Amazon Pinpoint Pricing>.
+module Amazonka.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Enable or disable the Deliverability dashboard for your Amazon Pinpoint
+-- account. 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 Pinpoint. 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 Pinpoint. 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 for your Amazon
+    -- Pinpoint account. 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 for your Amazon
+-- Pinpoint account. 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 for your Amazon
+-- Pinpoint account. 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 "/v1/email/deliverability-dashboard"
+
+instance
+  Data.ToQuery
+    PutDeliverabilityDashboardOption
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | A response that indicates whether the Deliverability dashboard is
+-- enabled for your Amazon Pinpoint account.
+--
+-- /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/PinpointEmail/PutEmailIdentityDkimAttributes.hs b/gen/Amazonka/PinpointEmail/PutEmailIdentityDkimAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/PutEmailIdentityDkimAttributes.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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 Amazon Pinpoint
+    -- sends from the identity are DKIM-signed. When you set this value to
+    -- @false@, then the messages that Amazon Pinpoint sends from the identity
+    -- aren\'t DKIM-signed.
+    signingEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The email identity that you want to change the DKIM settings for.
+    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 Amazon Pinpoint
+-- sends from the identity are DKIM-signed. When you set this value to
+-- @false@, then the messages that Amazon Pinpoint sends from the identity
+-- aren\'t DKIM-signed.
+--
+-- 'emailIdentity', 'putEmailIdentityDkimAttributes_emailIdentity' - The email identity that you want to change the DKIM settings for.
+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 Amazon Pinpoint
+-- sends from the identity are DKIM-signed. When you set this value to
+-- @false@, then the messages that Amazon Pinpoint sends from the identity
+-- aren\'t DKIM-signed.
+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 that you want to change the DKIM settings for.
+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
+      [ "/v1/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/PinpointEmail/PutEmailIdentityFeedbackAttributes.hs b/gen/Amazonka/PinpointEmail/PutEmailIdentityFeedbackAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/PutEmailIdentityFeedbackAttributes.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.PinpointEmail.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.
+--
+-- When you enable feedback forwarding, Amazon Pinpoint sends you email
+-- notifications when bounce or complaint events occur. Amazon Pinpoint
+-- sends this notification to the address that you specified in the
+-- Return-Path header of the original email.
+--
+-- When you disable feedback forwarding, Amazon Pinpoint sends
+-- notifications through other mechanisms, such as by notifying an Amazon
+-- SNS topic. 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, Amazon Pinpoint sends an email
+-- notification when these events occur (even if this setting is disabled).
+module Amazonka.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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@, Amazon Pinpoint sends you email notifications
+    -- when bounce or complaint events occur. Amazon Pinpoint sends this
+    -- notification to the address that you specified in the Return-Path header
+    -- of the original email.
+    --
+    -- When you set this value to @false@, Amazon Pinpoint sends notifications
+    -- through other mechanisms, such as by notifying an Amazon SNS topic or
+    -- another event destination. 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, Amazon Pinpoint sends an
+    -- email notification when these events occur (even if this setting is
+    -- disabled).
+    emailForwardingEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The email identity that you want to configure bounce and complaint
+    -- feedback forwarding for.
+    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@, Amazon Pinpoint sends you email notifications
+-- when bounce or complaint events occur. Amazon Pinpoint sends this
+-- notification to the address that you specified in the Return-Path header
+-- of the original email.
+--
+-- When you set this value to @false@, Amazon Pinpoint sends notifications
+-- through other mechanisms, such as by notifying an Amazon SNS topic or
+-- another event destination. 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, Amazon Pinpoint sends an
+-- email notification when these events occur (even if this setting is
+-- disabled).
+--
+-- 'emailIdentity', 'putEmailIdentityFeedbackAttributes_emailIdentity' - The email identity that you want to configure bounce and complaint
+-- feedback forwarding for.
+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@, Amazon Pinpoint sends you email notifications
+-- when bounce or complaint events occur. Amazon Pinpoint sends this
+-- notification to the address that you specified in the Return-Path header
+-- of the original email.
+--
+-- When you set this value to @false@, Amazon Pinpoint sends notifications
+-- through other mechanisms, such as by notifying an Amazon SNS topic or
+-- another event destination. 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, Amazon Pinpoint sends 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 that you want to configure bounce and complaint
+-- feedback forwarding for.
+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
+      [ "/v1/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/PinpointEmail/PutEmailIdentityMailFromAttributes.hs b/gen/Amazonka/PinpointEmail/PutEmailIdentityMailFromAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/PutEmailIdentityMailFromAttributes.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.PinpointEmail.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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to configure the custom MAIL FROM domain for a verified
+-- identity.
+--
+-- /See:/ 'newPutEmailIdentityMailFromAttributes' smart constructor.
+data PutEmailIdentityMailFromAttributes = PutEmailIdentityMailFromAttributes'
+  { -- | The action that you want Amazon Pinpoint to take if it can\'t read the
+    -- required MX record when you send an email. When you set this value to
+    -- @UseDefaultValue@, Amazon Pinpoint uses /amazonses.com/ as the MAIL FROM
+    -- domain. When you set this value to @RejectMessage@, Amazon Pinpoint
+    -- 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 that you want to set up the custom MAIL FROM
+    -- domain for.
+    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 that you want Amazon Pinpoint to take if it can\'t read the
+-- required MX record when you send an email. When you set this value to
+-- @UseDefaultValue@, Amazon Pinpoint uses /amazonses.com/ as the MAIL FROM
+-- domain. When you set this value to @RejectMessage@, Amazon Pinpoint
+-- 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 that you want to set up the custom MAIL FROM
+-- domain for.
+newPutEmailIdentityMailFromAttributes ::
+  -- | 'emailIdentity'
+  Prelude.Text ->
+  PutEmailIdentityMailFromAttributes
+newPutEmailIdentityMailFromAttributes pEmailIdentity_ =
+  PutEmailIdentityMailFromAttributes'
+    { behaviorOnMxFailure =
+        Prelude.Nothing,
+      mailFromDomain = Prelude.Nothing,
+      emailIdentity = pEmailIdentity_
+    }
+
+-- | The action that you want Amazon Pinpoint to take if it can\'t read the
+-- required MX record when you send an email. When you set this value to
+-- @UseDefaultValue@, Amazon Pinpoint uses /amazonses.com/ as the MAIL FROM
+-- domain. When you set this value to @RejectMessage@, Amazon Pinpoint
+-- 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 that you want to set up the custom MAIL FROM
+-- domain for.
+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
+      [ "/v1/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/PinpointEmail/SendEmail.hs b/gen/Amazonka/PinpointEmail/SendEmail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/SendEmail.hs
@@ -0,0 +1,308 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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 Pinpoint Email API to
+-- send two 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 Pinpoint 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.
+module Amazonka.PinpointEmail.SendEmail
+  ( -- * Creating a Request
+    SendEmail (..),
+    newSendEmail,
+
+    -- * Request Lenses
+    sendEmail_configurationSetName,
+    sendEmail_emailTags,
+    sendEmail_feedbackForwardingEmailAddress,
+    sendEmail_fromEmailAddress,
+    sendEmail_replyToAddresses,
+    sendEmail_destination,
+    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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to send an email message.
+--
+-- /See:/ 'newSendEmail' smart constructor.
+data SendEmail = SendEmail'
+  { -- | The name of the configuration set that you want 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.
+    emailTags :: Prelude.Maybe [MessageTag],
+    -- | The address that Amazon Pinpoint should send bounce and complaint
+    -- notifications to.
+    feedbackForwardingEmailAddress :: Prelude.Maybe Prelude.Text,
+    -- | The email address that you want to use as the \"From\" address for the
+    -- email. The address that you specify has to be verified.
+    fromEmailAddress :: 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 recipients of the email message.
+    destination :: Destination,
+    -- | An object that contains the body of the message. You can send either a
+    -- Simple message or a Raw 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 that you want to use when sending the
+-- email.
+--
+-- '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 Amazon Pinpoint should send bounce and complaint
+-- notifications to.
+--
+-- 'fromEmailAddress', 'sendEmail_fromEmailAddress' - The email address that you want to use as the \"From\" address for the
+-- email. The address that you specify has to be verified.
+--
+-- '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.
+--
+-- 'destination', 'sendEmail_destination' - An object that contains the recipients of the email message.
+--
+-- 'content', 'sendEmail_content' - An object that contains the body of the message. You can send either a
+-- Simple message or a Raw message.
+newSendEmail ::
+  -- | 'destination'
+  Destination ->
+  -- | 'content'
+  EmailContent ->
+  SendEmail
+newSendEmail pDestination_ pContent_ =
+  SendEmail'
+    { configurationSetName = Prelude.Nothing,
+      emailTags = Prelude.Nothing,
+      feedbackForwardingEmailAddress = Prelude.Nothing,
+      fromEmailAddress = Prelude.Nothing,
+      replyToAddresses = Prelude.Nothing,
+      destination = pDestination_,
+      content = pContent_
+    }
+
+-- | The name of the configuration set that you want 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)
+
+-- | 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 Amazon Pinpoint should send bounce and complaint
+-- notifications to.
+sendEmail_feedbackForwardingEmailAddress :: Lens.Lens' SendEmail (Prelude.Maybe Prelude.Text)
+sendEmail_feedbackForwardingEmailAddress = Lens.lens (\SendEmail' {feedbackForwardingEmailAddress} -> feedbackForwardingEmailAddress) (\s@SendEmail' {} a -> s {feedbackForwardingEmailAddress = a} :: SendEmail)
+
+-- | The email address that you want 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)
+
+-- | 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 recipients of the email message.
+sendEmail_destination :: Lens.Lens' SendEmail Destination
+sendEmail_destination = Lens.lens (\SendEmail' {destination} -> destination) (\s@SendEmail' {} a -> s {destination = a} :: SendEmail)
+
+-- | An object that contains the body of the message. You can send either a
+-- Simple message or a Raw 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` emailTags
+      `Prelude.hashWithSalt` feedbackForwardingEmailAddress
+      `Prelude.hashWithSalt` fromEmailAddress
+      `Prelude.hashWithSalt` replyToAddresses
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` content
+
+instance Prelude.NFData SendEmail where
+  rnf SendEmail' {..} =
+    Prelude.rnf configurationSetName
+      `Prelude.seq` Prelude.rnf emailTags
+      `Prelude.seq` Prelude.rnf feedbackForwardingEmailAddress
+      `Prelude.seq` Prelude.rnf fromEmailAddress
+      `Prelude.seq` Prelude.rnf replyToAddresses
+      `Prelude.seq` Prelude.rnf destination
+      `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,
+            ("EmailTags" Data..=) Prelude.<$> emailTags,
+            ("FeedbackForwardingEmailAddress" Data..=)
+              Prelude.<$> feedbackForwardingEmailAddress,
+            ("FromEmailAddress" Data..=)
+              Prelude.<$> fromEmailAddress,
+            ("ReplyToAddresses" Data..=)
+              Prelude.<$> replyToAddresses,
+            Prelude.Just ("Destination" Data..= destination),
+            Prelude.Just ("Content" Data..= content)
+          ]
+      )
+
+instance Data.ToPath SendEmail where
+  toPath = Prelude.const "/v1/email/outbound-emails"
+
+instance Data.ToQuery SendEmail where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | A unique message ID that you receive when Amazon Pinpoint accepts an
+-- email for sending.
+--
+-- /See:/ 'newSendEmailResponse' smart constructor.
+data SendEmailResponse = SendEmailResponse'
+  { -- | A unique identifier for the message that is generated when Amazon
+    -- Pinpoint accepts the message.
+    --
+    -- It is possible for Amazon Pinpoint to accept a message without sending
+    -- it. This can happen when the message you\'re trying to send has an
+    -- attachment doesn\'t pass a virus check, 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 Amazon
+-- Pinpoint accepts the message.
+--
+-- It is possible for Amazon Pinpoint to accept a message without sending
+-- it. This can happen when the message you\'re trying to send has an
+-- attachment doesn\'t pass a virus check, 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 Amazon
+-- Pinpoint accepts the message.
+--
+-- It is possible for Amazon Pinpoint to accept a message without sending
+-- it. This can happen when the message you\'re trying to send has an
+-- attachment doesn\'t pass a virus check, 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/PinpointEmail/TagResource.hs b/gen/Amazonka/PinpointEmail/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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 in Amazon Pinpoint. 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.PinpointEmail.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource 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 "/v1/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/PinpointEmail/Types.hs b/gen/Amazonka/PinpointEmail/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types.hs
@@ -0,0 +1,521 @@
+{-# 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.PinpointEmail.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.PinpointEmail.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccountSuspendedException,
+    _AlreadyExistsException,
+    _BadRequestException,
+    _ConcurrentModificationException,
+    _LimitExceededException,
+    _MailFromDomainNotVerifiedException,
+    _MessageRejected,
+    _NotFoundException,
+    _SendingPausedException,
+    _TooManyRequestsException,
+
+    -- * BehaviorOnMxFailure
+    BehaviorOnMxFailure (..),
+
+    -- * DeliverabilityDashboardAccountStatus
+    DeliverabilityDashboardAccountStatus (..),
+
+    -- * DeliverabilityTestStatus
+    DeliverabilityTestStatus (..),
+
+    -- * DimensionValueSource
+    DimensionValueSource (..),
+
+    -- * DkimStatus
+    DkimStatus (..),
+
+    -- * EventType
+    EventType (..),
+
+    -- * IdentityType
+    IdentityType (..),
+
+    -- * MailFromDomainStatus
+    MailFromDomainStatus (..),
+
+    -- * TlsPolicy
+    TlsPolicy (..),
+
+    -- * WarmupStatus
+    WarmupStatus (..),
+
+    -- * BlacklistEntry
+    BlacklistEntry (..),
+    newBlacklistEntry,
+    blacklistEntry_description,
+    blacklistEntry_listingTime,
+    blacklistEntry_rblName,
+
+    -- * Body
+    Body (..),
+    newBody,
+    body_html,
+    body_text,
+
+    -- * CloudWatchDestination
+    CloudWatchDestination (..),
+    newCloudWatchDestination,
+    cloudWatchDestination_dimensionConfigurations,
+
+    -- * CloudWatchDimensionConfiguration
+    CloudWatchDimensionConfiguration (..),
+    newCloudWatchDimensionConfiguration,
+    cloudWatchDimensionConfiguration_dimensionName,
+    cloudWatchDimensionConfiguration_dimensionValueSource,
+    cloudWatchDimensionConfiguration_defaultDimensionValue,
+
+    -- * Content
+    Content (..),
+    newContent,
+    content_charset,
+    content_data,
+
+    -- * DailyVolume
+    DailyVolume (..),
+    newDailyVolume,
+    dailyVolume_domainIspPlacements,
+    dailyVolume_startDate,
+    dailyVolume_volumeStatistics,
+
+    -- * DedicatedIp
+    DedicatedIp (..),
+    newDedicatedIp,
+    dedicatedIp_poolName,
+    dedicatedIp_ip,
+    dedicatedIp_warmupStatus,
+    dedicatedIp_warmupPercentage,
+
+    -- * 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_signingEnabled,
+    dkimAttributes_status,
+    dkimAttributes_tokens,
+
+    -- * 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,
+
+    -- * 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,
+
+    -- * IdentityInfo
+    IdentityInfo (..),
+    newIdentityInfo,
+    identityInfo_identityName,
+    identityInfo_identityType,
+    identityInfo_sendingEnabled,
+
+    -- * InboxPlacementTrackingOption
+    InboxPlacementTrackingOption (..),
+    newInboxPlacementTrackingOption,
+    inboxPlacementTrackingOption_global,
+    inboxPlacementTrackingOption_trackedIsps,
+
+    -- * IspPlacement
+    IspPlacement (..),
+    newIspPlacement,
+    ispPlacement_ispName,
+    ispPlacement_placementStatistics,
+
+    -- * KinesisFirehoseDestination
+    KinesisFirehoseDestination (..),
+    newKinesisFirehoseDestination,
+    kinesisFirehoseDestination_iamRoleArn,
+    kinesisFirehoseDestination_deliveryStreamArn,
+
+    -- * MailFromAttributes
+    MailFromAttributes (..),
+    newMailFromAttributes,
+    mailFromAttributes_mailFromDomain,
+    mailFromAttributes_mailFromDomainStatus,
+    mailFromAttributes_behaviorOnMxFailure,
+
+    -- * Message
+    Message (..),
+    newMessage,
+    message_subject,
+    message_body,
+
+    -- * MessageTag
+    MessageTag (..),
+    newMessageTag,
+    messageTag_name,
+    messageTag_value,
+
+    -- * 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,
+
+    -- * ReputationOptions
+    ReputationOptions (..),
+    newReputationOptions,
+    reputationOptions_lastFreshStart,
+    reputationOptions_reputationMetricsEnabled,
+
+    -- * SendQuota
+    SendQuota (..),
+    newSendQuota,
+    sendQuota_max24HourSend,
+    sendQuota_maxSendRate,
+    sendQuota_sentLast24Hours,
+
+    -- * SendingOptions
+    SendingOptions (..),
+    newSendingOptions,
+    sendingOptions_sendingEnabled,
+
+    -- * SnsDestination
+    SnsDestination (..),
+    newSnsDestination,
+    snsDestination_topicArn,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+
+    -- * Template
+    Template (..),
+    newTemplate,
+    template_templateArn,
+    template_templateData,
+
+    -- * TrackingOptions
+    TrackingOptions (..),
+    newTrackingOptions,
+    trackingOptions_customRedirectDomain,
+
+    -- * 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 Amazonka.PinpointEmail.Types.BehaviorOnMxFailure
+import Amazonka.PinpointEmail.Types.BlacklistEntry
+import Amazonka.PinpointEmail.Types.Body
+import Amazonka.PinpointEmail.Types.CloudWatchDestination
+import Amazonka.PinpointEmail.Types.CloudWatchDimensionConfiguration
+import Amazonka.PinpointEmail.Types.Content
+import Amazonka.PinpointEmail.Types.DailyVolume
+import Amazonka.PinpointEmail.Types.DedicatedIp
+import Amazonka.PinpointEmail.Types.DeliverabilityDashboardAccountStatus
+import Amazonka.PinpointEmail.Types.DeliverabilityTestReport
+import Amazonka.PinpointEmail.Types.DeliverabilityTestStatus
+import Amazonka.PinpointEmail.Types.DeliveryOptions
+import Amazonka.PinpointEmail.Types.Destination
+import Amazonka.PinpointEmail.Types.DimensionValueSource
+import Amazonka.PinpointEmail.Types.DkimAttributes
+import Amazonka.PinpointEmail.Types.DkimStatus
+import Amazonka.PinpointEmail.Types.DomainDeliverabilityCampaign
+import Amazonka.PinpointEmail.Types.DomainDeliverabilityTrackingOption
+import Amazonka.PinpointEmail.Types.DomainIspPlacement
+import Amazonka.PinpointEmail.Types.EmailContent
+import Amazonka.PinpointEmail.Types.EventDestination
+import Amazonka.PinpointEmail.Types.EventDestinationDefinition
+import Amazonka.PinpointEmail.Types.EventType
+import Amazonka.PinpointEmail.Types.IdentityInfo
+import Amazonka.PinpointEmail.Types.IdentityType
+import Amazonka.PinpointEmail.Types.InboxPlacementTrackingOption
+import Amazonka.PinpointEmail.Types.IspPlacement
+import Amazonka.PinpointEmail.Types.KinesisFirehoseDestination
+import Amazonka.PinpointEmail.Types.MailFromAttributes
+import Amazonka.PinpointEmail.Types.MailFromDomainStatus
+import Amazonka.PinpointEmail.Types.Message
+import Amazonka.PinpointEmail.Types.MessageTag
+import Amazonka.PinpointEmail.Types.OverallVolume
+import Amazonka.PinpointEmail.Types.PinpointDestination
+import Amazonka.PinpointEmail.Types.PlacementStatistics
+import Amazonka.PinpointEmail.Types.RawMessage
+import Amazonka.PinpointEmail.Types.ReputationOptions
+import Amazonka.PinpointEmail.Types.SendQuota
+import Amazonka.PinpointEmail.Types.SendingOptions
+import Amazonka.PinpointEmail.Types.SnsDestination
+import Amazonka.PinpointEmail.Types.Tag
+import Amazonka.PinpointEmail.Types.Template
+import Amazonka.PinpointEmail.Types.TlsPolicy
+import Amazonka.PinpointEmail.Types.TrackingOptions
+import Amazonka.PinpointEmail.Types.VolumeStatistics
+import Amazonka.PinpointEmail.Types.WarmupStatus
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2018-07-26@ of the Amazon Pinpoint Email Service SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "PinpointEmail",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "email",
+      Core.signingName = "ses",
+      Core.version = "2018-07-26",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "PinpointEmail",
+      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
+
+-- | 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/PinpointEmail/Types/BehaviorOnMxFailure.hs b/gen/Amazonka/PinpointEmail/Types/BehaviorOnMxFailure.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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 that you want Amazon Pinpoint to take if it can\'t read the
+-- required MX record for a custom MAIL FROM domain. When you set this
+-- value to @UseDefaultValue@, Amazon Pinpoint uses /amazonses.com/ as the
+-- MAIL FROM domain. When you set this value to @RejectMessage@, Amazon
+-- Pinpoint 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/PinpointEmail/Types/BlacklistEntry.hs b/gen/Amazonka/PinpointEmail/Types/BlacklistEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/BlacklistEntry.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.PinpointEmail.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.PinpointEmail.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, shown in Unix time
+    -- format.
+    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, shown in Unix time
+-- format.
+--
+-- '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, shown in Unix time
+-- format.
+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/PinpointEmail/Types/Body.hs b/gen/Amazonka/PinpointEmail/Types/Body.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.Types.Body where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types.Content
+import qualified Amazonka.Prelude as Prelude
+
+-- | 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/PinpointEmail/Types/CloudWatchDestination.hs b/gen/Amazonka/PinpointEmail/Types/CloudWatchDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.Types.CloudWatchDestination where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types.CloudWatchDimensionConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | 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/PinpointEmail/Types/CloudWatchDimensionConfiguration.hs b/gen/Amazonka/PinpointEmail/Types/CloudWatchDimensionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/CloudWatchDimensionConfiguration.hs
@@ -0,0 +1,195 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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.PinpointEmail.Types.CloudWatchDimensionConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types.DimensionValueSource
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that defines the dimension configuration to use when you send
+-- Amazon Pinpoint 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 Amazon Pinpoint finds the value of a dimension to
+    -- publish to Amazon CloudWatch. If you want Amazon Pinpoint to use the
+    -- message tags that you specify using an X-SES-MESSAGE-TAGS header or a
+    -- parameter to the SendEmail\/SendRawEmail API, choose @messageTag@. If
+    -- you want Amazon Pinpoint to use your own email headers, choose
+    -- @emailHeader@. If you want Amazon Pinpoint 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:
+    --
+    -- -   It can only contain ASCII letters (a-z, A-Z), numbers (0-9),
+    --     underscores (_), or dashes (-).
+    --
+    -- -   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 Amazon Pinpoint finds the value of a dimension to
+-- publish to Amazon CloudWatch. If you want Amazon Pinpoint to use the
+-- message tags that you specify using an X-SES-MESSAGE-TAGS header or a
+-- parameter to the SendEmail\/SendRawEmail API, choose @messageTag@. If
+-- you want Amazon Pinpoint to use your own email headers, choose
+-- @emailHeader@. If you want Amazon Pinpoint 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:
+--
+-- -   It can only contain ASCII letters (a-z, A-Z), numbers (0-9),
+--     underscores (_), or dashes (-).
+--
+-- -   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 Amazon Pinpoint finds the value of a dimension to
+-- publish to Amazon CloudWatch. If you want Amazon Pinpoint to use the
+-- message tags that you specify using an X-SES-MESSAGE-TAGS header or a
+-- parameter to the SendEmail\/SendRawEmail API, choose @messageTag@. If
+-- you want Amazon Pinpoint to use your own email headers, choose
+-- @emailHeader@. If you want Amazon Pinpoint 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:
+--
+-- -   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_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/PinpointEmail/Types/Content.hs b/gen/Amazonka/PinpointEmail/Types/Content.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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 Pinpoint 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 Pinpoint 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 Pinpoint 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/PinpointEmail/Types/DailyVolume.hs b/gen/Amazonka/PinpointEmail/Types/DailyVolume.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.Types.DailyVolume where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types.DomainIspPlacement
+import Amazonka.PinpointEmail.Types.VolumeStatistics
+import qualified Amazonka.Prelude as Prelude
+
+-- | 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/PinpointEmail/Types/DedicatedIp.hs b/gen/Amazonka/PinpointEmail/Types/DedicatedIp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/DedicatedIp.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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.PinpointEmail.Types.DedicatedIp where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types.WarmupStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about a dedicated IP address that is associated
+-- with your Amazon Pinpoint account.
+--
+-- /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 IP address that is reserved for use by your Amazon Pinpoint account.
+    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 IP address that is reserved for use by your Amazon Pinpoint account.
+--
+-- '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 IP address that is reserved for use by your Amazon Pinpoint account.
+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/PinpointEmail/Types/DeliverabilityDashboardAccountStatus.hs b/gen/Amazonka/PinpointEmail/Types/DeliverabilityDashboardAccountStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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/PinpointEmail/Types/DeliverabilityTestReport.hs b/gen/Amazonka/PinpointEmail/Types/DeliverabilityTestReport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/DeliverabilityTestReport.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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.PinpointEmail.Types.DeliverabilityTestReport where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types.DeliverabilityTestStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | 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,
+    -- in Unix time format.
+    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,
+-- in Unix time format.
+--
+-- '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,
+-- in Unix time format.
+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/PinpointEmail/Types/DeliverabilityTestStatus.hs b/gen/Amazonka/PinpointEmail/Types/DeliverabilityTestStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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/PinpointEmail/Types/DeliveryOptions.hs b/gen/Amazonka/PinpointEmail/Types/DeliveryOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.Types.DeliveryOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types.TlsPolicy
+import qualified Amazonka.Prelude as Prelude
+
+-- | 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 that you want 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 that you want 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 that you want 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/PinpointEmail/Types/Destination.hs b/gen/Amazonka/PinpointEmail/Types/Destination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/Destination.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.PinpointEmail.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.PinpointEmail.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.
+--
+-- /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/PinpointEmail/Types/DimensionValueSource.hs b/gen/Amazonka/PinpointEmail/Types/DimensionValueSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/DimensionValueSource.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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.PinpointEmail.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 Amazon Pinpoint finds the value of a dimension to
+-- publish to Amazon CloudWatch. If you want Amazon Pinpoint to use the
+-- message tags that you specify using an X-SES-MESSAGE-TAGS header or a
+-- parameter to the SendEmail\/SendRawEmail API, choose @messageTag@. If
+-- you want Amazon Pinpoint to use your own email headers, choose
+-- @emailHeader@. If you want Amazon Pinpoint 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/PinpointEmail/Types/DkimAttributes.hs b/gen/Amazonka/PinpointEmail/Types/DkimAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/DkimAttributes.hs
@@ -0,0 +1,182 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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.PinpointEmail.Types.DkimAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types.DkimStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that contains information about the DKIM configuration for an
+-- email identity.
+--
+-- /See:/ 'newDkimAttributes' smart constructor.
+data DkimAttributes = DkimAttributes'
+  { -- | If the value is @true@, then the messages that Amazon Pinpoint sends
+    -- from the identity are DKIM-signed. If the value is @false@, then the
+    -- messages that Amazon Pinpoint sends from the identity aren\'t
+    -- DKIM-signed.
+    signingEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | Describes whether or not Amazon Pinpoint has successfully located the
+    -- DKIM records in the DNS records for the domain. The status can be one of
+    -- the following:
+    --
+    -- -   @PENDING@ – Amazon Pinpoint hasn\'t yet located the DKIM records in
+    --     the DNS configuration for the domain, but will continue to attempt
+    --     to locate them.
+    --
+    -- -   @SUCCESS@ – Amazon Pinpoint located the DKIM records in the DNS
+    --     configuration for the domain and determined that they\'re correct.
+    --     Amazon Pinpoint can now send DKIM-signed email from the identity.
+    --
+    -- -   @FAILED@ – Amazon Pinpoint was unable to locate the DKIM records in
+    --     the DNS settings for the domain, and won\'t continue to search for
+    --     them.
+    --
+    -- -   @TEMPORARY_FAILURE@ – A temporary issue occurred, which prevented
+    --     Amazon Pinpoint from determining the DKIM status for the domain.
+    --
+    -- -   @NOT_STARTED@ – Amazon Pinpoint hasn\'t yet started searching for
+    --     the DKIM records in the DKIM records for the domain.
+    status :: Prelude.Maybe DkimStatus,
+    -- | 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
+    -- Pinpoint detects these records in the DNS configuration for your domain,
+    -- the DKIM authentication process is complete. Amazon Pinpoint usually
+    -- detects these records within about 72 hours of adding them to the DNS
+    -- configuration for your domain.
+    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:
+--
+-- 'signingEnabled', 'dkimAttributes_signingEnabled' - If the value is @true@, then the messages that Amazon Pinpoint sends
+-- from the identity are DKIM-signed. If the value is @false@, then the
+-- messages that Amazon Pinpoint sends from the identity aren\'t
+-- DKIM-signed.
+--
+-- 'status', 'dkimAttributes_status' - Describes whether or not Amazon Pinpoint has successfully located the
+-- DKIM records in the DNS records for the domain. The status can be one of
+-- the following:
+--
+-- -   @PENDING@ – Amazon Pinpoint hasn\'t yet located the DKIM records in
+--     the DNS configuration for the domain, but will continue to attempt
+--     to locate them.
+--
+-- -   @SUCCESS@ – Amazon Pinpoint located the DKIM records in the DNS
+--     configuration for the domain and determined that they\'re correct.
+--     Amazon Pinpoint can now send DKIM-signed email from the identity.
+--
+-- -   @FAILED@ – Amazon Pinpoint was unable to locate the DKIM records in
+--     the DNS settings for the domain, and won\'t continue to search for
+--     them.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue occurred, which prevented
+--     Amazon Pinpoint from determining the DKIM status for the domain.
+--
+-- -   @NOT_STARTED@ – Amazon Pinpoint hasn\'t yet started searching for
+--     the DKIM records in the DKIM records for the domain.
+--
+-- 'tokens', 'dkimAttributes_tokens' - 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
+-- Pinpoint detects these records in the DNS configuration for your domain,
+-- the DKIM authentication process is complete. Amazon Pinpoint usually
+-- detects these records within about 72 hours of adding them to the DNS
+-- configuration for your domain.
+newDkimAttributes ::
+  DkimAttributes
+newDkimAttributes =
+  DkimAttributes'
+    { signingEnabled = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tokens = Prelude.Nothing
+    }
+
+-- | If the value is @true@, then the messages that Amazon Pinpoint sends
+-- from the identity are DKIM-signed. If the value is @false@, then the
+-- messages that Amazon Pinpoint sends 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 Pinpoint has successfully located the
+-- DKIM records in the DNS records for the domain. The status can be one of
+-- the following:
+--
+-- -   @PENDING@ – Amazon Pinpoint hasn\'t yet located the DKIM records in
+--     the DNS configuration for the domain, but will continue to attempt
+--     to locate them.
+--
+-- -   @SUCCESS@ – Amazon Pinpoint located the DKIM records in the DNS
+--     configuration for the domain and determined that they\'re correct.
+--     Amazon Pinpoint can now send DKIM-signed email from the identity.
+--
+-- -   @FAILED@ – Amazon Pinpoint was unable to locate the DKIM records in
+--     the DNS settings for the domain, and won\'t continue to search for
+--     them.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue occurred, which prevented
+--     Amazon Pinpoint from determining the DKIM status for the domain.
+--
+-- -   @NOT_STARTED@ – Amazon Pinpoint hasn\'t yet started searching for
+--     the DKIM records in the DKIM records 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)
+
+-- | 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
+-- Pinpoint detects these records in the DNS configuration for your domain,
+-- the DKIM authentication process is complete. Amazon Pinpoint usually
+-- detects these records within about 72 hours of adding them to the DNS
+-- configuration for your domain.
+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..:? "SigningEnabled")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "Tokens" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable DkimAttributes where
+  hashWithSalt _salt DkimAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` signingEnabled
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tokens
+
+instance Prelude.NFData DkimAttributes where
+  rnf DkimAttributes' {..} =
+    Prelude.rnf signingEnabled
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tokens
diff --git a/gen/Amazonka/PinpointEmail/Types/DkimStatus.hs b/gen/Amazonka/PinpointEmail/Types/DkimStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/DkimStatus.hs
@@ -0,0 +1,105 @@
+{-# 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.PinpointEmail.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.PinpointEmail.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 DKIM verification process was initiated, and Amazon
+--     Pinpoint is still waiting for the required CNAME records to appear
+--     in the DNS configuration for the domain.
+--
+-- -   @SUCCESS@ – The DKIM authentication process completed successfully.
+--
+-- -   @FAILED@ – The DKIM authentication process failed. This can happen
+--     when Amazon Pinpoint fails to find the required CNAME records in the
+--     DNS configuration of the domain.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue is preventing Amazon
+--     Pinpoint 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/PinpointEmail/Types/DomainDeliverabilityCampaign.hs b/gen/Amazonka/PinpointEmail/Types/DomainDeliverabilityCampaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/DomainDeliverabilityCampaign.hs
@@ -0,0 +1,289 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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.PinpointEmail.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. Amazon Pinpoint automatically
+    -- generates and assigns this identifier to a campaign. This value is not
+    -- the same as the campaign identifier that Amazon Pinpoint assigns to
+    -- campaigns that you create and manage by using the Amazon Pinpoint API or
+    -- the Amazon Pinpoint console.
+    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, in Unix time format, 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, in Unix time format, 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. Amazon Pinpoint automatically
+-- generates and assigns this identifier to a campaign. This value is not
+-- the same as the campaign identifier that Amazon Pinpoint assigns to
+-- campaigns that you create and manage by using the Amazon Pinpoint API or
+-- the Amazon Pinpoint console.
+--
+-- '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, in Unix time format, 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, in Unix time format, 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. Amazon Pinpoint automatically
+-- generates and assigns this identifier to a campaign. This value is not
+-- the same as the campaign identifier that Amazon Pinpoint assigns to
+-- campaigns that you create and manage by using the Amazon Pinpoint API or
+-- the Amazon Pinpoint console.
+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, in Unix time format, 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, in Unix time format, 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/PinpointEmail/Types/DomainDeliverabilityTrackingOption.hs b/gen/Amazonka/PinpointEmail/Types/DomainDeliverabilityTrackingOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.Types.DomainDeliverabilityTrackingOption where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types.InboxPlacementTrackingOption
+import qualified Amazonka.Prelude as Prelude
+
+-- | 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 AWS 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, in Unix time format, 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 AWS 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, in Unix time format, 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 AWS 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, in Unix time format, 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/PinpointEmail/Types/DomainIspPlacement.hs b/gen/Amazonka/PinpointEmail/Types/DomainIspPlacement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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/PinpointEmail/Types/EmailContent.hs b/gen/Amazonka/PinpointEmail/Types/EmailContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.Types.EmailContent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types.Message
+import Amazonka.PinpointEmail.Types.RawMessage
+import Amazonka.PinpointEmail.Types.Template
+import qualified Amazonka.Prelude as Prelude
+
+-- | 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
+    --     Amazon Pinpoint 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
+--     Amazon Pinpoint 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
+--     Amazon Pinpoint 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/PinpointEmail/Types/EventDestination.hs b/gen/Amazonka/PinpointEmail/Types/EventDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/EventDestination.hs
@@ -0,0 +1,205 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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.PinpointEmail.Types.EventDestination where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types.CloudWatchDestination
+import Amazonka.PinpointEmail.Types.EventType
+import Amazonka.PinpointEmail.Types.KinesisFirehoseDestination
+import Amazonka.PinpointEmail.Types.PinpointDestination
+import Amazonka.PinpointEmail.Types.SnsDestination
+import qualified Amazonka.Prelude as Prelude
+
+-- | In Amazon Pinpoint, /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.
+--
+-- /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 a Amazon Pinpoint destination for email events.
+    -- You can use Amazon Pinpoint events to create attributes in Amazon
+    -- Pinpoint projects. You can use these attributes to create segments for
+    -- your campaigns.
+    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 Pinpoint 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 a Amazon Pinpoint destination for email events.
+-- You can use Amazon Pinpoint events to create attributes in Amazon
+-- Pinpoint projects. You can use these attributes to create segments for
+-- your campaigns.
+--
+-- '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 Pinpoint 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 a Amazon Pinpoint destination for email events.
+-- You can use Amazon Pinpoint events to create attributes in Amazon
+-- Pinpoint projects. You can use these attributes to create segments for
+-- your campaigns.
+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 Pinpoint 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/PinpointEmail/Types/EventDestinationDefinition.hs b/gen/Amazonka/PinpointEmail/Types/EventDestinationDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/EventDestinationDefinition.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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.PinpointEmail.Types.EventDestinationDefinition where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types.CloudWatchDestination
+import Amazonka.PinpointEmail.Types.EventType
+import Amazonka.PinpointEmail.Types.KinesisFirehoseDestination
+import Amazonka.PinpointEmail.Types.PinpointDestination
+import Amazonka.PinpointEmail.Types.SnsDestination
+import qualified Amazonka.Prelude as Prelude
+
+-- | 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 Amazon Pinpoint should send to the
+    -- destinations in this @EventDestinationDefinition@.
+    matchingEventTypes :: Prelude.Maybe [EventType],
+    -- | An object that defines a Amazon Pinpoint destination for email events.
+    -- You can use Amazon Pinpoint events to create attributes in Amazon
+    -- Pinpoint projects. You can use these attributes to create segments for
+    -- your campaigns.
+    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 Amazon Pinpoint should send to the
+-- destinations in this @EventDestinationDefinition@.
+--
+-- 'pinpointDestination', 'eventDestinationDefinition_pinpointDestination' - An object that defines a Amazon Pinpoint destination for email events.
+-- You can use Amazon Pinpoint events to create attributes in Amazon
+-- Pinpoint projects. You can use these attributes to create segments for
+-- your campaigns.
+--
+-- '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 Amazon Pinpoint 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 a Amazon Pinpoint destination for email events.
+-- You can use Amazon Pinpoint events to create attributes in Amazon
+-- Pinpoint projects. You can use these attributes to create segments for
+-- your campaigns.
+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/PinpointEmail/Types/EventType.hs b/gen/Amazonka/PinpointEmail/Types/EventType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/EventType.hs
@@ -0,0 +1,103 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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.PinpointEmail.Types.EventType
+  ( EventType
+      ( ..,
+        EventType_BOUNCE,
+        EventType_CLICK,
+        EventType_COMPLAINT,
+        EventType_DELIVERY,
+        EventType_OPEN,
+        EventType_REJECT,
+        EventType_RENDERING_FAILURE,
+        EventType_SEND
+      ),
+  )
+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_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"
+
+{-# COMPLETE
+  EventType_BOUNCE,
+  EventType_CLICK,
+  EventType_COMPLAINT,
+  EventType_DELIVERY,
+  EventType_OPEN,
+  EventType_REJECT,
+  EventType_RENDERING_FAILURE,
+  EventType_SEND,
+  EventType'
+  #-}
diff --git a/gen/Amazonka/PinpointEmail/Types/IdentityInfo.hs b/gen/Amazonka/PinpointEmail/Types/IdentityInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/IdentityInfo.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.PinpointEmail.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.PinpointEmail.Types.IdentityInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types.IdentityType
+import qualified Amazonka.Prelude as Prelude
+
+-- | 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. The identity type can be one of the following:
+    --
+    -- -   @EMAIL_ADDRESS@ – The identity is an email address.
+    --
+    -- -   @DOMAIN@ – The identity is a domain.
+    --
+    -- -   @MANAGED_DOMAIN@ – The identity is a domain that is managed by AWS.
+    identityType :: Prelude.Maybe IdentityType,
+    -- | Indicates whether or not you can send email from the identity.
+    --
+    -- In Amazon Pinpoint, 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
+    -- Pinpoint to send email from that identity.
+    sendingEnabled :: Prelude.Maybe Prelude.Bool
+  }
+  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. The identity type can be one of the following:
+--
+-- -   @EMAIL_ADDRESS@ – The identity is an email address.
+--
+-- -   @DOMAIN@ – The identity is a domain.
+--
+-- -   @MANAGED_DOMAIN@ – The identity is a domain that is managed by AWS.
+--
+-- 'sendingEnabled', 'identityInfo_sendingEnabled' - Indicates whether or not you can send email from the identity.
+--
+-- In Amazon Pinpoint, 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
+-- Pinpoint to send email from that identity.
+newIdentityInfo ::
+  IdentityInfo
+newIdentityInfo =
+  IdentityInfo'
+    { identityName = Prelude.Nothing,
+      identityType = Prelude.Nothing,
+      sendingEnabled = 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. The identity type can be one of the following:
+--
+-- -   @EMAIL_ADDRESS@ – The identity is an email address.
+--
+-- -   @DOMAIN@ – The identity is a domain.
+--
+-- -   @MANAGED_DOMAIN@ – The identity is a domain that is managed by AWS.
+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.
+--
+-- In Amazon Pinpoint, 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
+-- Pinpoint 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)
+
+instance Data.FromJSON IdentityInfo where
+  parseJSON =
+    Data.withObject
+      "IdentityInfo"
+      ( \x ->
+          IdentityInfo'
+            Prelude.<$> (x Data..:? "IdentityName")
+            Prelude.<*> (x Data..:? "IdentityType")
+            Prelude.<*> (x Data..:? "SendingEnabled")
+      )
+
+instance Prelude.Hashable IdentityInfo where
+  hashWithSalt _salt IdentityInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` identityName
+      `Prelude.hashWithSalt` identityType
+      `Prelude.hashWithSalt` sendingEnabled
+
+instance Prelude.NFData IdentityInfo where
+  rnf IdentityInfo' {..} =
+    Prelude.rnf identityName
+      `Prelude.seq` Prelude.rnf identityType
+      `Prelude.seq` Prelude.rnf sendingEnabled
diff --git a/gen/Amazonka/PinpointEmail/Types/IdentityType.hs b/gen/Amazonka/PinpointEmail/Types/IdentityType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/IdentityType.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.PinpointEmail.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.PinpointEmail.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
+
+-- | The email identity type. The identity type can be one of the following:
+--
+-- -   @EMAIL_ADDRESS@ – The identity is an email address.
+--
+-- -   @DOMAIN@ – The identity is a domain.
+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/PinpointEmail/Types/InboxPlacementTrackingOption.hs b/gen/Amazonka/PinpointEmail/Types/InboxPlacementTrackingOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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 AWS account.
+-- This data is available only if you enabled the Deliverability dashboard
+-- for the domain (@PutDeliverabilityDashboardOption@ operation).
+--
+-- /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/PinpointEmail/Types/IspPlacement.hs b/gen/Amazonka/PinpointEmail/Types/IspPlacement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.Types.IspPlacement where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types.PlacementStatistics
+import qualified Amazonka.Prelude as Prelude
+
+-- | 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/PinpointEmail/Types/KinesisFirehoseDestination.hs b/gen/Amazonka/PinpointEmail/Types/KinesisFirehoseDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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 Amazon Pinpoint uses
+    -- when sending 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 Amazon Pinpoint 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 Amazon Pinpoint uses
+-- when sending 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 Amazon Pinpoint 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 Amazon Pinpoint uses
+-- when sending 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 Amazon Pinpoint 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/PinpointEmail/Types/MailFromAttributes.hs b/gen/Amazonka/PinpointEmail/Types/MailFromAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.Types.MailFromAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types.BehaviorOnMxFailure
+import Amazonka.PinpointEmail.Types.MailFromDomainStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | 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 Pinpoint hasn\'t started searching for the MX
+    --     record yet.
+    --
+    -- -   @SUCCESS@ – Amazon Pinpoint detected the required MX record for the
+    --     MAIL FROM domain.
+    --
+    -- -   @FAILED@ – Amazon Pinpoint can\'t find the required MX record, or
+    --     the record no longer exists.
+    --
+    -- -   @TEMPORARY_FAILURE@ – A temporary issue occurred, which prevented
+    --     Amazon Pinpoint from determining the status of the MAIL FROM domain.
+    mailFromDomainStatus :: MailFromDomainStatus,
+    -- | The action that Amazon Pinpoint to takes if it can\'t read the required
+    -- MX record for a custom MAIL FROM domain. When you set this value to
+    -- @UseDefaultValue@, Amazon Pinpoint uses /amazonses.com/ as the MAIL FROM
+    -- domain. When you set this value to @RejectMessage@, Amazon Pinpoint
+    -- 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 Pinpoint hasn\'t started searching for the MX
+--     record yet.
+--
+-- -   @SUCCESS@ – Amazon Pinpoint detected the required MX record for the
+--     MAIL FROM domain.
+--
+-- -   @FAILED@ – Amazon Pinpoint can\'t find the required MX record, or
+--     the record no longer exists.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue occurred, which prevented
+--     Amazon Pinpoint from determining the status of the MAIL FROM domain.
+--
+-- 'behaviorOnMxFailure', 'mailFromAttributes_behaviorOnMxFailure' - The action that Amazon Pinpoint to takes if it can\'t read the required
+-- MX record for a custom MAIL FROM domain. When you set this value to
+-- @UseDefaultValue@, Amazon Pinpoint uses /amazonses.com/ as the MAIL FROM
+-- domain. When you set this value to @RejectMessage@, Amazon Pinpoint
+-- 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 Pinpoint hasn\'t started searching for the MX
+--     record yet.
+--
+-- -   @SUCCESS@ – Amazon Pinpoint detected the required MX record for the
+--     MAIL FROM domain.
+--
+-- -   @FAILED@ – Amazon Pinpoint can\'t find the required MX record, or
+--     the record no longer exists.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue occurred, which prevented
+--     Amazon Pinpoint 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 that Amazon Pinpoint to takes if it can\'t read the required
+-- MX record for a custom MAIL FROM domain. When you set this value to
+-- @UseDefaultValue@, Amazon Pinpoint uses /amazonses.com/ as the MAIL FROM
+-- domain. When you set this value to @RejectMessage@, Amazon Pinpoint
+-- 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/PinpointEmail/Types/MailFromDomainStatus.hs b/gen/Amazonka/PinpointEmail/Types/MailFromDomainStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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 Pinpoint hasn\'t started searching for the MX
+--     record yet.
+--
+-- -   @SUCCESS@ – Amazon Pinpoint detected the required MX record for the
+--     MAIL FROM domain.
+--
+-- -   @FAILED@ – Amazon Pinpoint can\'t find the required MX record, or
+--     the record no longer exists.
+--
+-- -   @TEMPORARY_FAILURE@ – A temporary issue occurred, which prevented
+--     Amazon Pinpoint 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/PinpointEmail/Types/Message.hs b/gen/Amazonka/PinpointEmail/Types/Message.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.Types.Message where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types.Body
+import Amazonka.PinpointEmail.Types.Content
+import qualified Amazonka.Prelude as Prelude
+
+-- | 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/PinpointEmail/Types/MessageTag.hs b/gen/Amazonka/PinpointEmail/Types/MessageTag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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/PinpointEmail/Types/OverallVolume.hs b/gen/Amazonka/PinpointEmail/Types/OverallVolume.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.Types.OverallVolume where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types.DomainIspPlacement
+import Amazonka.PinpointEmail.Types.VolumeStatistics
+import qualified Amazonka.Prelude as Prelude
+
+-- | 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/PinpointEmail/Types/PinpointDestination.hs b/gen/Amazonka/PinpointEmail/Types/PinpointDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/PinpointDestination.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.PinpointEmail.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.PinpointEmail.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 a Amazon Pinpoint destination for email events.
+-- You can use Amazon Pinpoint events to create attributes in Amazon
+-- Pinpoint projects. You can use these attributes to create segments for
+-- your campaigns.
+--
+-- /See:/ 'newPinpointDestination' smart constructor.
+data PinpointDestination = PinpointDestination'
+  { -- | The Amazon Resource Name (ARN) of the Amazon Pinpoint project that you
+    -- want 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 that you
+-- want to send email events to.
+newPinpointDestination ::
+  PinpointDestination
+newPinpointDestination =
+  PinpointDestination'
+    { applicationArn =
+        Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the Amazon Pinpoint project that you
+-- want 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/PinpointEmail/Types/PlacementStatistics.hs b/gen/Amazonka/PinpointEmail/Types/PlacementStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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/PinpointEmail/Types/RawMessage.hs b/gen/Amazonka/PinpointEmail/Types/RawMessage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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
+
+-- | The raw 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 Amazon Pinpoint 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 Amazon Pinpoint 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 Amazon Pinpoint 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/PinpointEmail/Types/ReputationOptions.hs b/gen/Amazonka/PinpointEmail/Types/ReputationOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/ReputationOptions.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.PinpointEmail.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.PinpointEmail.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 AWS 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/PinpointEmail/Types/SendQuota.hs b/gen/Amazonka/PinpointEmail/Types/SendQuota.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/SendQuota.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.PinpointEmail.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.PinpointEmail.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 Pinpoint account in the current AWS
+-- Region.
+--
+-- /See:/ 'newSendQuota' smart constructor.
+data SendQuota = SendQuota'
+  { -- | The maximum number of emails that you can send in the current AWS Region
+    -- over a 24-hour period. This value is also called your /sending quota/.
+    max24HourSend :: Prelude.Maybe Prelude.Double,
+    -- | The maximum number of emails that you can send per second in the current
+    -- AWS 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 Pinpoint account in the
+    -- current AWS 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 AWS Region
+-- over a 24-hour period. This value is also called your /sending quota/.
+--
+-- 'maxSendRate', 'sendQuota_maxSendRate' - The maximum number of emails that you can send per second in the current
+-- AWS 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 Pinpoint account in the
+-- current AWS 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 AWS Region
+-- over a 24-hour period. This value is also called 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
+-- AWS 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 Pinpoint account in the
+-- current AWS 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/PinpointEmail/Types/SendingOptions.hs b/gen/Amazonka/PinpointEmail/Types/SendingOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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 AWS 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/PinpointEmail/Types/SnsDestination.hs b/gen/Amazonka/PinpointEmail/Types/SnsDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/SnsDestination.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.PinpointEmail.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.PinpointEmail.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 that you want 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 that you want 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 that you want 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/PinpointEmail/Types/Tag.hs b/gen/Amazonka/PinpointEmail/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/Tag.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.PinpointEmail.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.PinpointEmail.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 in Amazon Pinpoint. 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 AWS; 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 AWS account, not any other accounts that
+--     share the resource. In addition, the tags are available only for
+--     resources that are located in the specified AWS Region for your AWS
+--     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. Amazon Pinpoint will set 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. Amazon Pinpoint will set 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. Amazon Pinpoint will set 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/PinpointEmail/Types/Template.hs b/gen/Amazonka/PinpointEmail/Types/Template.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/Types/Template.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.PinpointEmail.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.PinpointEmail.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
+
+-- | /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
+  }
+  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.
+newTemplate ::
+  Template
+newTemplate =
+  Template'
+    { templateArn = Prelude.Nothing,
+      templateData = 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)
+
+instance Prelude.Hashable Template where
+  hashWithSalt _salt Template' {..} =
+    _salt
+      `Prelude.hashWithSalt` templateArn
+      `Prelude.hashWithSalt` templateData
+
+instance Prelude.NFData Template where
+  rnf Template' {..} =
+    Prelude.rnf templateArn
+      `Prelude.seq` Prelude.rnf templateData
+
+instance Data.ToJSON Template where
+  toJSON Template' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("TemplateArn" Data..=) Prelude.<$> templateArn,
+            ("TemplateData" Data..=) Prelude.<$> templateData
+          ]
+      )
diff --git a/gen/Amazonka/PinpointEmail/Types/TlsPolicy.hs b/gen/Amazonka/PinpointEmail/Types/TlsPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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/PinpointEmail/Types/TrackingOptions.hs b/gen/Amazonka/PinpointEmail/Types/TrackingOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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 Amazon Pinpoint 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 AWS.
+-- You can optionally configure Amazon Pinpoint to use a domain that you
+-- operate for these images and links.
+--
+-- /See:/ 'newTrackingOptions' smart constructor.
+data TrackingOptions = TrackingOptions'
+  { -- | The domain that you want 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 that you want to use for tracking open and click events.
+newTrackingOptions ::
+  -- | 'customRedirectDomain'
+  Prelude.Text ->
+  TrackingOptions
+newTrackingOptions pCustomRedirectDomain_ =
+  TrackingOptions'
+    { customRedirectDomain =
+        pCustomRedirectDomain_
+    }
+
+-- | The domain that you want 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/PinpointEmail/Types/VolumeStatistics.hs b/gen/Amazonka/PinpointEmail/Types/VolumeStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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/PinpointEmail/Types/WarmupStatus.hs b/gen/Amazonka/PinpointEmail/Types/WarmupStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.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/PinpointEmail/UntagResource.hs b/gen/Amazonka/PinpointEmail/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The 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:
+    -- @\/v1\/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:
+-- @\/v1\/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:
+-- @\/v1\/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 "/v1/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/PinpointEmail/UpdateConfigurationSetEventDestination.hs b/gen/Amazonka/PinpointEmail/UpdateConfigurationSetEventDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.
+--
+-- In Amazon Pinpoint, /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.PinpointEmail.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 Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | 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
+    -- that you want to modify.
+    configurationSetName :: Prelude.Text,
+    -- | The name of the event destination that you want to modify.
+    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
+-- that you want to modify.
+--
+-- 'eventDestinationName', 'updateConfigurationSetEventDestination_eventDestinationName' - The name of the event destination that you want to modify.
+--
+-- '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
+-- that you want 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 that you want to modify.
+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
+      [ "/v1/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/PinpointEmail/Waiters.hs b/gen/Amazonka/PinpointEmail/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/PinpointEmail/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.PinpointEmail.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.PinpointEmail.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.PinpointEmail.Lens
+import Amazonka.PinpointEmail.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Main (main) where
+
+import Test.Amazonka.PinpointEmail
+import Test.Amazonka.PinpointEmail.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "PinpointEmail"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/PinpointEmail.hs b/test/Test/Amazonka/Gen/PinpointEmail.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/PinpointEmail.hs
@@ -0,0 +1,878 @@
+{-# 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.PinpointEmail
+-- Copyright   : (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.PinpointEmail where
+
+import Amazonka.PinpointEmail
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.PinpointEmail.Internal
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestCreateConfigurationSet $
+--             newCreateConfigurationSet
+--
+--         , requestCreateConfigurationSetEventDestination $
+--             newCreateConfigurationSetEventDestination
+--
+--         , requestCreateDedicatedIpPool $
+--             newCreateDedicatedIpPool
+--
+--         , requestCreateDeliverabilityTestReport $
+--             newCreateDeliverabilityTestReport
+--
+--         , requestCreateEmailIdentity $
+--             newCreateEmailIdentity
+--
+--         , requestDeleteConfigurationSet $
+--             newDeleteConfigurationSet
+--
+--         , requestDeleteConfigurationSetEventDestination $
+--             newDeleteConfigurationSetEventDestination
+--
+--         , requestDeleteDedicatedIpPool $
+--             newDeleteDedicatedIpPool
+--
+--         , requestDeleteEmailIdentity $
+--             newDeleteEmailIdentity
+--
+--         , requestGetAccount $
+--             newGetAccount
+--
+--         , requestGetBlacklistReports $
+--             newGetBlacklistReports
+--
+--         , requestGetConfigurationSet $
+--             newGetConfigurationSet
+--
+--         , requestGetConfigurationSetEventDestinations $
+--             newGetConfigurationSetEventDestinations
+--
+--         , requestGetDedicatedIp $
+--             newGetDedicatedIp
+--
+--         , requestGetDedicatedIps $
+--             newGetDedicatedIps
+--
+--         , requestGetDeliverabilityDashboardOptions $
+--             newGetDeliverabilityDashboardOptions
+--
+--         , requestGetDeliverabilityTestReport $
+--             newGetDeliverabilityTestReport
+--
+--         , requestGetDomainDeliverabilityCampaign $
+--             newGetDomainDeliverabilityCampaign
+--
+--         , requestGetDomainStatisticsReport $
+--             newGetDomainStatisticsReport
+--
+--         , requestGetEmailIdentity $
+--             newGetEmailIdentity
+--
+--         , requestListConfigurationSets $
+--             newListConfigurationSets
+--
+--         , requestListDedicatedIpPools $
+--             newListDedicatedIpPools
+--
+--         , requestListDeliverabilityTestReports $
+--             newListDeliverabilityTestReports
+--
+--         , requestListDomainDeliverabilityCampaigns $
+--             newListDomainDeliverabilityCampaigns
+--
+--         , requestListEmailIdentities $
+--             newListEmailIdentities
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestPutAccountDedicatedIpWarmupAttributes $
+--             newPutAccountDedicatedIpWarmupAttributes
+--
+--         , requestPutAccountSendingAttributes $
+--             newPutAccountSendingAttributes
+--
+--         , requestPutConfigurationSetDeliveryOptions $
+--             newPutConfigurationSetDeliveryOptions
+--
+--         , requestPutConfigurationSetReputationOptions $
+--             newPutConfigurationSetReputationOptions
+--
+--         , requestPutConfigurationSetSendingOptions $
+--             newPutConfigurationSetSendingOptions
+--
+--         , requestPutConfigurationSetTrackingOptions $
+--             newPutConfigurationSetTrackingOptions
+--
+--         , requestPutDedicatedIpInPool $
+--             newPutDedicatedIpInPool
+--
+--         , requestPutDedicatedIpWarmupAttributes $
+--             newPutDedicatedIpWarmupAttributes
+--
+--         , requestPutDeliverabilityDashboardOption $
+--             newPutDeliverabilityDashboardOption
+--
+--         , requestPutEmailIdentityDkimAttributes $
+--             newPutEmailIdentityDkimAttributes
+--
+--         , requestPutEmailIdentityFeedbackAttributes $
+--             newPutEmailIdentityFeedbackAttributes
+--
+--         , requestPutEmailIdentityMailFromAttributes $
+--             newPutEmailIdentityMailFromAttributes
+--
+--         , requestSendEmail $
+--             newSendEmail
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateConfigurationSetEventDestination $
+--             newUpdateConfigurationSetEventDestination
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateConfigurationSet $
+--             newCreateConfigurationSetResponse
+--
+--         , responseCreateConfigurationSetEventDestination $
+--             newCreateConfigurationSetEventDestinationResponse
+--
+--         , responseCreateDedicatedIpPool $
+--             newCreateDedicatedIpPoolResponse
+--
+--         , responseCreateDeliverabilityTestReport $
+--             newCreateDeliverabilityTestReportResponse
+--
+--         , responseCreateEmailIdentity $
+--             newCreateEmailIdentityResponse
+--
+--         , responseDeleteConfigurationSet $
+--             newDeleteConfigurationSetResponse
+--
+--         , responseDeleteConfigurationSetEventDestination $
+--             newDeleteConfigurationSetEventDestinationResponse
+--
+--         , responseDeleteDedicatedIpPool $
+--             newDeleteDedicatedIpPoolResponse
+--
+--         , responseDeleteEmailIdentity $
+--             newDeleteEmailIdentityResponse
+--
+--         , responseGetAccount $
+--             newGetAccountResponse
+--
+--         , responseGetBlacklistReports $
+--             newGetBlacklistReportsResponse
+--
+--         , responseGetConfigurationSet $
+--             newGetConfigurationSetResponse
+--
+--         , responseGetConfigurationSetEventDestinations $
+--             newGetConfigurationSetEventDestinationsResponse
+--
+--         , responseGetDedicatedIp $
+--             newGetDedicatedIpResponse
+--
+--         , responseGetDedicatedIps $
+--             newGetDedicatedIpsResponse
+--
+--         , responseGetDeliverabilityDashboardOptions $
+--             newGetDeliverabilityDashboardOptionsResponse
+--
+--         , responseGetDeliverabilityTestReport $
+--             newGetDeliverabilityTestReportResponse
+--
+--         , responseGetDomainDeliverabilityCampaign $
+--             newGetDomainDeliverabilityCampaignResponse
+--
+--         , responseGetDomainStatisticsReport $
+--             newGetDomainStatisticsReportResponse
+--
+--         , responseGetEmailIdentity $
+--             newGetEmailIdentityResponse
+--
+--         , responseListConfigurationSets $
+--             newListConfigurationSetsResponse
+--
+--         , responseListDedicatedIpPools $
+--             newListDedicatedIpPoolsResponse
+--
+--         , responseListDeliverabilityTestReports $
+--             newListDeliverabilityTestReportsResponse
+--
+--         , responseListDomainDeliverabilityCampaigns $
+--             newListDomainDeliverabilityCampaignsResponse
+--
+--         , responseListEmailIdentities $
+--             newListEmailIdentitiesResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responsePutAccountDedicatedIpWarmupAttributes $
+--             newPutAccountDedicatedIpWarmupAttributesResponse
+--
+--         , responsePutAccountSendingAttributes $
+--             newPutAccountSendingAttributesResponse
+--
+--         , responsePutConfigurationSetDeliveryOptions $
+--             newPutConfigurationSetDeliveryOptionsResponse
+--
+--         , responsePutConfigurationSetReputationOptions $
+--             newPutConfigurationSetReputationOptionsResponse
+--
+--         , responsePutConfigurationSetSendingOptions $
+--             newPutConfigurationSetSendingOptionsResponse
+--
+--         , responsePutConfigurationSetTrackingOptions $
+--             newPutConfigurationSetTrackingOptionsResponse
+--
+--         , responsePutDedicatedIpInPool $
+--             newPutDedicatedIpInPoolResponse
+--
+--         , responsePutDedicatedIpWarmupAttributes $
+--             newPutDedicatedIpWarmupAttributesResponse
+--
+--         , responsePutDeliverabilityDashboardOption $
+--             newPutDeliverabilityDashboardOptionResponse
+--
+--         , responsePutEmailIdentityDkimAttributes $
+--             newPutEmailIdentityDkimAttributesResponse
+--
+--         , responsePutEmailIdentityFeedbackAttributes $
+--             newPutEmailIdentityFeedbackAttributesResponse
+--
+--         , responsePutEmailIdentityMailFromAttributes $
+--             newPutEmailIdentityMailFromAttributesResponse
+--
+--         , responseSendEmail $
+--             newSendEmailResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateConfigurationSetEventDestination $
+--             newUpdateConfigurationSetEventDestinationResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateConfigurationSet :: CreateConfigurationSet -> TestTree
+requestCreateConfigurationSet =
+  req
+    "CreateConfigurationSet"
+    "fixture/CreateConfigurationSet.yaml"
+
+requestCreateConfigurationSetEventDestination :: CreateConfigurationSetEventDestination -> TestTree
+requestCreateConfigurationSetEventDestination =
+  req
+    "CreateConfigurationSetEventDestination"
+    "fixture/CreateConfigurationSetEventDestination.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"
+
+requestDeleteConfigurationSet :: DeleteConfigurationSet -> TestTree
+requestDeleteConfigurationSet =
+  req
+    "DeleteConfigurationSet"
+    "fixture/DeleteConfigurationSet.yaml"
+
+requestDeleteConfigurationSetEventDestination :: DeleteConfigurationSetEventDestination -> TestTree
+requestDeleteConfigurationSetEventDestination =
+  req
+    "DeleteConfigurationSetEventDestination"
+    "fixture/DeleteConfigurationSetEventDestination.yaml"
+
+requestDeleteDedicatedIpPool :: DeleteDedicatedIpPool -> TestTree
+requestDeleteDedicatedIpPool =
+  req
+    "DeleteDedicatedIpPool"
+    "fixture/DeleteDedicatedIpPool.yaml"
+
+requestDeleteEmailIdentity :: DeleteEmailIdentity -> TestTree
+requestDeleteEmailIdentity =
+  req
+    "DeleteEmailIdentity"
+    "fixture/DeleteEmailIdentity.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"
+
+requestGetDedicatedIp :: GetDedicatedIp -> TestTree
+requestGetDedicatedIp =
+  req
+    "GetDedicatedIp"
+    "fixture/GetDedicatedIp.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"
+
+requestListConfigurationSets :: ListConfigurationSets -> TestTree
+requestListConfigurationSets =
+  req
+    "ListConfigurationSets"
+    "fixture/ListConfigurationSets.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"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestPutAccountDedicatedIpWarmupAttributes :: PutAccountDedicatedIpWarmupAttributes -> TestTree
+requestPutAccountDedicatedIpWarmupAttributes =
+  req
+    "PutAccountDedicatedIpWarmupAttributes"
+    "fixture/PutAccountDedicatedIpWarmupAttributes.yaml"
+
+requestPutAccountSendingAttributes :: PutAccountSendingAttributes -> TestTree
+requestPutAccountSendingAttributes =
+  req
+    "PutAccountSendingAttributes"
+    "fixture/PutAccountSendingAttributes.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"
+
+requestPutConfigurationSetTrackingOptions :: PutConfigurationSetTrackingOptions -> TestTree
+requestPutConfigurationSetTrackingOptions =
+  req
+    "PutConfigurationSetTrackingOptions"
+    "fixture/PutConfigurationSetTrackingOptions.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"
+
+requestPutEmailIdentityDkimAttributes :: PutEmailIdentityDkimAttributes -> TestTree
+requestPutEmailIdentityDkimAttributes =
+  req
+    "PutEmailIdentityDkimAttributes"
+    "fixture/PutEmailIdentityDkimAttributes.yaml"
+
+requestPutEmailIdentityFeedbackAttributes :: PutEmailIdentityFeedbackAttributes -> TestTree
+requestPutEmailIdentityFeedbackAttributes =
+  req
+    "PutEmailIdentityFeedbackAttributes"
+    "fixture/PutEmailIdentityFeedbackAttributes.yaml"
+
+requestPutEmailIdentityMailFromAttributes :: PutEmailIdentityMailFromAttributes -> TestTree
+requestPutEmailIdentityMailFromAttributes =
+  req
+    "PutEmailIdentityMailFromAttributes"
+    "fixture/PutEmailIdentityMailFromAttributes.yaml"
+
+requestSendEmail :: SendEmail -> TestTree
+requestSendEmail =
+  req
+    "SendEmail"
+    "fixture/SendEmail.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateConfigurationSetEventDestination :: UpdateConfigurationSetEventDestination -> TestTree
+requestUpdateConfigurationSetEventDestination =
+  req
+    "UpdateConfigurationSetEventDestination"
+    "fixture/UpdateConfigurationSetEventDestination.yaml"
+
+-- Responses
+
+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)
+
+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)
+
+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)
+
+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)
+
+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)
+
+responseGetDedicatedIp :: GetDedicatedIpResponse -> TestTree
+responseGetDedicatedIp =
+  res
+    "GetDedicatedIpResponse"
+    "fixture/GetDedicatedIpResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDedicatedIp)
+
+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)
+
+responseListConfigurationSets :: ListConfigurationSetsResponse -> TestTree
+responseListConfigurationSets =
+  res
+    "ListConfigurationSetsResponse"
+    "fixture/ListConfigurationSetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListConfigurationSets)
+
+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)
+
+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)
+
+responsePutAccountSendingAttributes :: PutAccountSendingAttributesResponse -> TestTree
+responsePutAccountSendingAttributes =
+  res
+    "PutAccountSendingAttributesResponse"
+    "fixture/PutAccountSendingAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutAccountSendingAttributes)
+
+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)
+
+responsePutConfigurationSetTrackingOptions :: PutConfigurationSetTrackingOptionsResponse -> TestTree
+responsePutConfigurationSetTrackingOptions =
+  res
+    "PutConfigurationSetTrackingOptionsResponse"
+    "fixture/PutConfigurationSetTrackingOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutConfigurationSetTrackingOptions)
+
+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)
+
+responsePutEmailIdentityDkimAttributes :: PutEmailIdentityDkimAttributesResponse -> TestTree
+responsePutEmailIdentityDkimAttributes =
+  res
+    "PutEmailIdentityDkimAttributesResponse"
+    "fixture/PutEmailIdentityDkimAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutEmailIdentityDkimAttributes)
+
+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)
+
+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)
+
+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)
diff --git a/test/Test/Amazonka/PinpointEmail.hs b/test/Test/Amazonka/PinpointEmail.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/PinpointEmail.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.PinpointEmail
+-- Copyright   : (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.PinpointEmail
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/PinpointEmail/Internal.hs b/test/Test/Amazonka/PinpointEmail/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/PinpointEmail/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.PinpointEmail.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.PinpointEmail.Internal where
