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 Connect Customer Profiles SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2020-08-15@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-customer-profiles)
+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.CustomerProfiles](http://hackage.haskell.org/package/amazonka-customer-profiles/docs/Amazonka-CustomerProfiles.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-customer-profiles` 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-customer-profiles.cabal b/amazonka-customer-profiles.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-customer-profiles.cabal
@@ -0,0 +1,193 @@
+cabal-version:      2.2
+name:               amazonka-customer-profiles
+version:            2.0
+synopsis:           Amazon Connect Customer Profiles SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2020-08-15@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.CustomerProfiles.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.CustomerProfiles" 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-customer-profiles
+
+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.CustomerProfiles
+    Amazonka.CustomerProfiles.AddProfileKey
+    Amazonka.CustomerProfiles.CreateDomain
+    Amazonka.CustomerProfiles.CreateIntegrationWorkflow
+    Amazonka.CustomerProfiles.CreateProfile
+    Amazonka.CustomerProfiles.DeleteDomain
+    Amazonka.CustomerProfiles.DeleteIntegration
+    Amazonka.CustomerProfiles.DeleteProfile
+    Amazonka.CustomerProfiles.DeleteProfileKey
+    Amazonka.CustomerProfiles.DeleteProfileObject
+    Amazonka.CustomerProfiles.DeleteProfileObjectType
+    Amazonka.CustomerProfiles.DeleteWorkflow
+    Amazonka.CustomerProfiles.GetAutoMergingPreview
+    Amazonka.CustomerProfiles.GetDomain
+    Amazonka.CustomerProfiles.GetIdentityResolutionJob
+    Amazonka.CustomerProfiles.GetIntegration
+    Amazonka.CustomerProfiles.GetMatches
+    Amazonka.CustomerProfiles.GetProfileObjectType
+    Amazonka.CustomerProfiles.GetProfileObjectTypeTemplate
+    Amazonka.CustomerProfiles.GetWorkflow
+    Amazonka.CustomerProfiles.GetWorkflowSteps
+    Amazonka.CustomerProfiles.Lens
+    Amazonka.CustomerProfiles.ListAccountIntegrations
+    Amazonka.CustomerProfiles.ListDomains
+    Amazonka.CustomerProfiles.ListIdentityResolutionJobs
+    Amazonka.CustomerProfiles.ListIntegrations
+    Amazonka.CustomerProfiles.ListProfileObjects
+    Amazonka.CustomerProfiles.ListProfileObjectTypes
+    Amazonka.CustomerProfiles.ListProfileObjectTypeTemplates
+    Amazonka.CustomerProfiles.ListTagsForResource
+    Amazonka.CustomerProfiles.ListWorkflows
+    Amazonka.CustomerProfiles.MergeProfiles
+    Amazonka.CustomerProfiles.PutIntegration
+    Amazonka.CustomerProfiles.PutProfileObject
+    Amazonka.CustomerProfiles.PutProfileObjectType
+    Amazonka.CustomerProfiles.SearchProfiles
+    Amazonka.CustomerProfiles.TagResource
+    Amazonka.CustomerProfiles.Types
+    Amazonka.CustomerProfiles.Types.AdditionalSearchKey
+    Amazonka.CustomerProfiles.Types.Address
+    Amazonka.CustomerProfiles.Types.AppflowIntegration
+    Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowAttributes
+    Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowMetrics
+    Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowStep
+    Amazonka.CustomerProfiles.Types.AutoMerging
+    Amazonka.CustomerProfiles.Types.Batch
+    Amazonka.CustomerProfiles.Types.ConflictResolution
+    Amazonka.CustomerProfiles.Types.ConflictResolvingModel
+    Amazonka.CustomerProfiles.Types.ConnectorOperator
+    Amazonka.CustomerProfiles.Types.Consolidation
+    Amazonka.CustomerProfiles.Types.DataPullMode
+    Amazonka.CustomerProfiles.Types.DomainStats
+    Amazonka.CustomerProfiles.Types.ExportingConfig
+    Amazonka.CustomerProfiles.Types.ExportingLocation
+    Amazonka.CustomerProfiles.Types.FieldContentType
+    Amazonka.CustomerProfiles.Types.FieldSourceProfileIds
+    Amazonka.CustomerProfiles.Types.FlowDefinition
+    Amazonka.CustomerProfiles.Types.FoundByKeyValue
+    Amazonka.CustomerProfiles.Types.Gender
+    Amazonka.CustomerProfiles.Types.IdentityResolutionJob
+    Amazonka.CustomerProfiles.Types.IdentityResolutionJobStatus
+    Amazonka.CustomerProfiles.Types.IncrementalPullConfig
+    Amazonka.CustomerProfiles.Types.IntegrationConfig
+    Amazonka.CustomerProfiles.Types.JobSchedule
+    Amazonka.CustomerProfiles.Types.JobScheduleDayOfTheWeek
+    Amazonka.CustomerProfiles.Types.JobStats
+    Amazonka.CustomerProfiles.Types.ListDomainItem
+    Amazonka.CustomerProfiles.Types.ListIntegrationItem
+    Amazonka.CustomerProfiles.Types.ListProfileObjectsItem
+    Amazonka.CustomerProfiles.Types.ListProfileObjectTypeItem
+    Amazonka.CustomerProfiles.Types.ListProfileObjectTypeTemplateItem
+    Amazonka.CustomerProfiles.Types.ListWorkflowsItem
+    Amazonka.CustomerProfiles.Types.LogicalOperator
+    Amazonka.CustomerProfiles.Types.MarketoConnectorOperator
+    Amazonka.CustomerProfiles.Types.MarketoSourceProperties
+    Amazonka.CustomerProfiles.Types.MatchingRequest
+    Amazonka.CustomerProfiles.Types.MatchingResponse
+    Amazonka.CustomerProfiles.Types.MatchItem
+    Amazonka.CustomerProfiles.Types.ObjectFilter
+    Amazonka.CustomerProfiles.Types.ObjectTypeField
+    Amazonka.CustomerProfiles.Types.ObjectTypeKey
+    Amazonka.CustomerProfiles.Types.OperatorPropertiesKeys
+    Amazonka.CustomerProfiles.Types.PartyType
+    Amazonka.CustomerProfiles.Types.Profile
+    Amazonka.CustomerProfiles.Types.S3ConnectorOperator
+    Amazonka.CustomerProfiles.Types.S3ExportingConfig
+    Amazonka.CustomerProfiles.Types.S3ExportingLocation
+    Amazonka.CustomerProfiles.Types.S3SourceProperties
+    Amazonka.CustomerProfiles.Types.SalesforceConnectorOperator
+    Amazonka.CustomerProfiles.Types.SalesforceSourceProperties
+    Amazonka.CustomerProfiles.Types.ScheduledTriggerProperties
+    Amazonka.CustomerProfiles.Types.ServiceNowConnectorOperator
+    Amazonka.CustomerProfiles.Types.ServiceNowSourceProperties
+    Amazonka.CustomerProfiles.Types.SourceConnectorProperties
+    Amazonka.CustomerProfiles.Types.SourceConnectorType
+    Amazonka.CustomerProfiles.Types.SourceFlowConfig
+    Amazonka.CustomerProfiles.Types.StandardIdentifier
+    Amazonka.CustomerProfiles.Types.Status
+    Amazonka.CustomerProfiles.Types.Task
+    Amazonka.CustomerProfiles.Types.TaskType
+    Amazonka.CustomerProfiles.Types.TriggerConfig
+    Amazonka.CustomerProfiles.Types.TriggerProperties
+    Amazonka.CustomerProfiles.Types.TriggerType
+    Amazonka.CustomerProfiles.Types.UpdateAddress
+    Amazonka.CustomerProfiles.Types.WorkflowAttributes
+    Amazonka.CustomerProfiles.Types.WorkflowMetrics
+    Amazonka.CustomerProfiles.Types.WorkflowStepItem
+    Amazonka.CustomerProfiles.Types.WorkflowType
+    Amazonka.CustomerProfiles.Types.ZendeskConnectorOperator
+    Amazonka.CustomerProfiles.Types.ZendeskSourceProperties
+    Amazonka.CustomerProfiles.UntagResource
+    Amazonka.CustomerProfiles.UpdateDomain
+    Amazonka.CustomerProfiles.UpdateProfile
+    Amazonka.CustomerProfiles.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-customer-profiles-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.CustomerProfiles
+    Test.Amazonka.CustomerProfiles.Internal
+    Test.Amazonka.Gen.CustomerProfiles
+
+  build-depends:
+    , amazonka-core               >=2.0 && <2.1
+    , amazonka-customer-profiles
+    , amazonka-test               >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AddProfileKey.yaml b/fixture/AddProfileKey.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AddProfileKey.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AddProfileKeyResponse.proto b/fixture/AddProfileKeyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AddProfileKeyResponse.proto
diff --git a/fixture/CreateDomain.yaml b/fixture/CreateDomain.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateDomainResponse.proto b/fixture/CreateDomainResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDomainResponse.proto
diff --git a/fixture/CreateIntegrationWorkflow.yaml b/fixture/CreateIntegrationWorkflow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIntegrationWorkflow.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateIntegrationWorkflowResponse.proto b/fixture/CreateIntegrationWorkflowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIntegrationWorkflowResponse.proto
diff --git a/fixture/CreateProfile.yaml b/fixture/CreateProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateProfileResponse.proto b/fixture/CreateProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateProfileResponse.proto
diff --git a/fixture/DeleteDomain.yaml b/fixture/DeleteDomain.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDomainResponse.proto b/fixture/DeleteDomainResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDomainResponse.proto
diff --git a/fixture/DeleteIntegration.yaml b/fixture/DeleteIntegration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIntegration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteIntegrationResponse.proto b/fixture/DeleteIntegrationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIntegrationResponse.proto
diff --git a/fixture/DeleteProfile.yaml b/fixture/DeleteProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteProfileKey.yaml b/fixture/DeleteProfileKey.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteProfileKey.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteProfileKeyResponse.proto b/fixture/DeleteProfileKeyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteProfileKeyResponse.proto
diff --git a/fixture/DeleteProfileObject.yaml b/fixture/DeleteProfileObject.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteProfileObject.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteProfileObjectResponse.proto b/fixture/DeleteProfileObjectResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteProfileObjectResponse.proto
diff --git a/fixture/DeleteProfileObjectType.yaml b/fixture/DeleteProfileObjectType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteProfileObjectType.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteProfileObjectTypeResponse.proto b/fixture/DeleteProfileObjectTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteProfileObjectTypeResponse.proto
diff --git a/fixture/DeleteProfileResponse.proto b/fixture/DeleteProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteProfileResponse.proto
diff --git a/fixture/DeleteWorkflow.yaml b/fixture/DeleteWorkflow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorkflow.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteWorkflowResponse.proto b/fixture/DeleteWorkflowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorkflowResponse.proto
diff --git a/fixture/GetAutoMergingPreview.yaml b/fixture/GetAutoMergingPreview.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAutoMergingPreview.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetAutoMergingPreviewResponse.proto b/fixture/GetAutoMergingPreviewResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAutoMergingPreviewResponse.proto
diff --git a/fixture/GetDomain.yaml b/fixture/GetDomain.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDomainResponse.proto b/fixture/GetDomainResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDomainResponse.proto
diff --git a/fixture/GetIdentityResolutionJob.yaml b/fixture/GetIdentityResolutionJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetIdentityResolutionJob.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetIdentityResolutionJobResponse.proto b/fixture/GetIdentityResolutionJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetIdentityResolutionJobResponse.proto
diff --git a/fixture/GetIntegration.yaml b/fixture/GetIntegration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntegration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetIntegrationResponse.proto b/fixture/GetIntegrationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntegrationResponse.proto
diff --git a/fixture/GetMatches.yaml b/fixture/GetMatches.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetMatches.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetMatchesResponse.proto b/fixture/GetMatchesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetMatchesResponse.proto
diff --git a/fixture/GetProfileObjectType.yaml b/fixture/GetProfileObjectType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetProfileObjectType.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetProfileObjectTypeResponse.proto b/fixture/GetProfileObjectTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetProfileObjectTypeResponse.proto
diff --git a/fixture/GetProfileObjectTypeTemplate.yaml b/fixture/GetProfileObjectTypeTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetProfileObjectTypeTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetProfileObjectTypeTemplateResponse.proto b/fixture/GetProfileObjectTypeTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetProfileObjectTypeTemplateResponse.proto
diff --git a/fixture/GetWorkflow.yaml b/fixture/GetWorkflow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetWorkflow.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetWorkflowResponse.proto b/fixture/GetWorkflowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetWorkflowResponse.proto
diff --git a/fixture/GetWorkflowSteps.yaml b/fixture/GetWorkflowSteps.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetWorkflowSteps.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetWorkflowStepsResponse.proto b/fixture/GetWorkflowStepsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetWorkflowStepsResponse.proto
diff --git a/fixture/ListAccountIntegrations.yaml b/fixture/ListAccountIntegrations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAccountIntegrations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListAccountIntegrationsResponse.proto b/fixture/ListAccountIntegrationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAccountIntegrationsResponse.proto
diff --git a/fixture/ListDomains.yaml b/fixture/ListDomains.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDomains.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListDomainsResponse.proto b/fixture/ListDomainsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDomainsResponse.proto
diff --git a/fixture/ListIdentityResolutionJobs.yaml b/fixture/ListIdentityResolutionJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListIdentityResolutionJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListIdentityResolutionJobsResponse.proto b/fixture/ListIdentityResolutionJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListIdentityResolutionJobsResponse.proto
diff --git a/fixture/ListIntegrations.yaml b/fixture/ListIntegrations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListIntegrations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListIntegrationsResponse.proto b/fixture/ListIntegrationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListIntegrationsResponse.proto
diff --git a/fixture/ListProfileObjectTypeTemplates.yaml b/fixture/ListProfileObjectTypeTemplates.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListProfileObjectTypeTemplates.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListProfileObjectTypeTemplatesResponse.proto b/fixture/ListProfileObjectTypeTemplatesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListProfileObjectTypeTemplatesResponse.proto
diff --git a/fixture/ListProfileObjectTypes.yaml b/fixture/ListProfileObjectTypes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListProfileObjectTypes.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListProfileObjectTypesResponse.proto b/fixture/ListProfileObjectTypesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListProfileObjectTypesResponse.proto
diff --git a/fixture/ListProfileObjects.yaml b/fixture/ListProfileObjects.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListProfileObjects.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListProfileObjectsResponse.proto b/fixture/ListProfileObjectsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListProfileObjectsResponse.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/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  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/ListWorkflows.yaml b/fixture/ListWorkflows.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorkflows.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListWorkflowsResponse.proto b/fixture/ListWorkflowsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorkflowsResponse.proto
diff --git a/fixture/MergeProfiles.yaml b/fixture/MergeProfiles.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/MergeProfiles.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/MergeProfilesResponse.proto b/fixture/MergeProfilesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/MergeProfilesResponse.proto
diff --git a/fixture/PutIntegration.yaml b/fixture/PutIntegration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutIntegration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutIntegrationResponse.proto b/fixture/PutIntegrationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutIntegrationResponse.proto
diff --git a/fixture/PutProfileObject.yaml b/fixture/PutProfileObject.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutProfileObject.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutProfileObjectResponse.proto b/fixture/PutProfileObjectResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutProfileObjectResponse.proto
diff --git a/fixture/PutProfileObjectType.yaml b/fixture/PutProfileObjectType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutProfileObjectType.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutProfileObjectTypeResponse.proto b/fixture/PutProfileObjectTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutProfileObjectTypeResponse.proto
diff --git a/fixture/SearchProfiles.yaml b/fixture/SearchProfiles.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SearchProfiles.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/SearchProfilesResponse.proto b/fixture/SearchProfilesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SearchProfilesResponse.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/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  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/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  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/UpdateDomain.yaml b/fixture/UpdateDomain.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateDomainResponse.proto b/fixture/UpdateDomainResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDomainResponse.proto
diff --git a/fixture/UpdateProfile.yaml b/fixture/UpdateProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/profile/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  profile.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateProfileResponse.proto b/fixture/UpdateProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateProfileResponse.proto
diff --git a/gen/Amazonka/CustomerProfiles.hs b/gen/Amazonka/CustomerProfiles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles.hs
@@ -0,0 +1,619 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.CustomerProfiles
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2020-08-15@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon Connect Customer Profiles
+--
+-- Amazon Connect Customer Profiles is a unified customer profile for your
+-- contact center that has pre-built connectors powered by AppFlow that
+-- make it easy to combine customer information from third party
+-- applications, such as Salesforce (CRM), ServiceNow (ITSM), and your
+-- enterprise resource planning (ERP), with contact history from your
+-- Amazon Connect contact center. If you\'re new to Amazon Connect, you
+-- might find it helpful to review the
+-- <https://docs.aws.amazon.com/connect/latest/adminguide/ Amazon Connect Administrator Guide>.
+module Amazonka.CustomerProfiles
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** BadRequestException
+    _BadRequestException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** AddProfileKey
+    AddProfileKey (AddProfileKey'),
+    newAddProfileKey,
+    AddProfileKeyResponse (AddProfileKeyResponse'),
+    newAddProfileKeyResponse,
+
+    -- ** CreateDomain
+    CreateDomain (CreateDomain'),
+    newCreateDomain,
+    CreateDomainResponse (CreateDomainResponse'),
+    newCreateDomainResponse,
+
+    -- ** CreateIntegrationWorkflow
+    CreateIntegrationWorkflow (CreateIntegrationWorkflow'),
+    newCreateIntegrationWorkflow,
+    CreateIntegrationWorkflowResponse (CreateIntegrationWorkflowResponse'),
+    newCreateIntegrationWorkflowResponse,
+
+    -- ** CreateProfile
+    CreateProfile (CreateProfile'),
+    newCreateProfile,
+    CreateProfileResponse (CreateProfileResponse'),
+    newCreateProfileResponse,
+
+    -- ** DeleteDomain
+    DeleteDomain (DeleteDomain'),
+    newDeleteDomain,
+    DeleteDomainResponse (DeleteDomainResponse'),
+    newDeleteDomainResponse,
+
+    -- ** DeleteIntegration
+    DeleteIntegration (DeleteIntegration'),
+    newDeleteIntegration,
+    DeleteIntegrationResponse (DeleteIntegrationResponse'),
+    newDeleteIntegrationResponse,
+
+    -- ** DeleteProfile
+    DeleteProfile (DeleteProfile'),
+    newDeleteProfile,
+    DeleteProfileResponse (DeleteProfileResponse'),
+    newDeleteProfileResponse,
+
+    -- ** DeleteProfileKey
+    DeleteProfileKey (DeleteProfileKey'),
+    newDeleteProfileKey,
+    DeleteProfileKeyResponse (DeleteProfileKeyResponse'),
+    newDeleteProfileKeyResponse,
+
+    -- ** DeleteProfileObject
+    DeleteProfileObject (DeleteProfileObject'),
+    newDeleteProfileObject,
+    DeleteProfileObjectResponse (DeleteProfileObjectResponse'),
+    newDeleteProfileObjectResponse,
+
+    -- ** DeleteProfileObjectType
+    DeleteProfileObjectType (DeleteProfileObjectType'),
+    newDeleteProfileObjectType,
+    DeleteProfileObjectTypeResponse (DeleteProfileObjectTypeResponse'),
+    newDeleteProfileObjectTypeResponse,
+
+    -- ** DeleteWorkflow
+    DeleteWorkflow (DeleteWorkflow'),
+    newDeleteWorkflow,
+    DeleteWorkflowResponse (DeleteWorkflowResponse'),
+    newDeleteWorkflowResponse,
+
+    -- ** GetAutoMergingPreview
+    GetAutoMergingPreview (GetAutoMergingPreview'),
+    newGetAutoMergingPreview,
+    GetAutoMergingPreviewResponse (GetAutoMergingPreviewResponse'),
+    newGetAutoMergingPreviewResponse,
+
+    -- ** GetDomain
+    GetDomain (GetDomain'),
+    newGetDomain,
+    GetDomainResponse (GetDomainResponse'),
+    newGetDomainResponse,
+
+    -- ** GetIdentityResolutionJob
+    GetIdentityResolutionJob (GetIdentityResolutionJob'),
+    newGetIdentityResolutionJob,
+    GetIdentityResolutionJobResponse (GetIdentityResolutionJobResponse'),
+    newGetIdentityResolutionJobResponse,
+
+    -- ** GetIntegration
+    GetIntegration (GetIntegration'),
+    newGetIntegration,
+    GetIntegrationResponse (GetIntegrationResponse'),
+    newGetIntegrationResponse,
+
+    -- ** GetMatches
+    GetMatches (GetMatches'),
+    newGetMatches,
+    GetMatchesResponse (GetMatchesResponse'),
+    newGetMatchesResponse,
+
+    -- ** GetProfileObjectType
+    GetProfileObjectType (GetProfileObjectType'),
+    newGetProfileObjectType,
+    GetProfileObjectTypeResponse (GetProfileObjectTypeResponse'),
+    newGetProfileObjectTypeResponse,
+
+    -- ** GetProfileObjectTypeTemplate
+    GetProfileObjectTypeTemplate (GetProfileObjectTypeTemplate'),
+    newGetProfileObjectTypeTemplate,
+    GetProfileObjectTypeTemplateResponse (GetProfileObjectTypeTemplateResponse'),
+    newGetProfileObjectTypeTemplateResponse,
+
+    -- ** GetWorkflow
+    GetWorkflow (GetWorkflow'),
+    newGetWorkflow,
+    GetWorkflowResponse (GetWorkflowResponse'),
+    newGetWorkflowResponse,
+
+    -- ** GetWorkflowSteps
+    GetWorkflowSteps (GetWorkflowSteps'),
+    newGetWorkflowSteps,
+    GetWorkflowStepsResponse (GetWorkflowStepsResponse'),
+    newGetWorkflowStepsResponse,
+
+    -- ** ListAccountIntegrations
+    ListAccountIntegrations (ListAccountIntegrations'),
+    newListAccountIntegrations,
+    ListAccountIntegrationsResponse (ListAccountIntegrationsResponse'),
+    newListAccountIntegrationsResponse,
+
+    -- ** ListDomains
+    ListDomains (ListDomains'),
+    newListDomains,
+    ListDomainsResponse (ListDomainsResponse'),
+    newListDomainsResponse,
+
+    -- ** ListIdentityResolutionJobs
+    ListIdentityResolutionJobs (ListIdentityResolutionJobs'),
+    newListIdentityResolutionJobs,
+    ListIdentityResolutionJobsResponse (ListIdentityResolutionJobsResponse'),
+    newListIdentityResolutionJobsResponse,
+
+    -- ** ListIntegrations
+    ListIntegrations (ListIntegrations'),
+    newListIntegrations,
+    ListIntegrationsResponse (ListIntegrationsResponse'),
+    newListIntegrationsResponse,
+
+    -- ** ListProfileObjectTypeTemplates
+    ListProfileObjectTypeTemplates (ListProfileObjectTypeTemplates'),
+    newListProfileObjectTypeTemplates,
+    ListProfileObjectTypeTemplatesResponse (ListProfileObjectTypeTemplatesResponse'),
+    newListProfileObjectTypeTemplatesResponse,
+
+    -- ** ListProfileObjectTypes
+    ListProfileObjectTypes (ListProfileObjectTypes'),
+    newListProfileObjectTypes,
+    ListProfileObjectTypesResponse (ListProfileObjectTypesResponse'),
+    newListProfileObjectTypesResponse,
+
+    -- ** ListProfileObjects
+    ListProfileObjects (ListProfileObjects'),
+    newListProfileObjects,
+    ListProfileObjectsResponse (ListProfileObjectsResponse'),
+    newListProfileObjectsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ListWorkflows
+    ListWorkflows (ListWorkflows'),
+    newListWorkflows,
+    ListWorkflowsResponse (ListWorkflowsResponse'),
+    newListWorkflowsResponse,
+
+    -- ** MergeProfiles
+    MergeProfiles (MergeProfiles'),
+    newMergeProfiles,
+    MergeProfilesResponse (MergeProfilesResponse'),
+    newMergeProfilesResponse,
+
+    -- ** PutIntegration
+    PutIntegration (PutIntegration'),
+    newPutIntegration,
+    PutIntegrationResponse (PutIntegrationResponse'),
+    newPutIntegrationResponse,
+
+    -- ** PutProfileObject
+    PutProfileObject (PutProfileObject'),
+    newPutProfileObject,
+    PutProfileObjectResponse (PutProfileObjectResponse'),
+    newPutProfileObjectResponse,
+
+    -- ** PutProfileObjectType
+    PutProfileObjectType (PutProfileObjectType'),
+    newPutProfileObjectType,
+    PutProfileObjectTypeResponse (PutProfileObjectTypeResponse'),
+    newPutProfileObjectTypeResponse,
+
+    -- ** SearchProfiles
+    SearchProfiles (SearchProfiles'),
+    newSearchProfiles,
+    SearchProfilesResponse (SearchProfilesResponse'),
+    newSearchProfilesResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateDomain
+    UpdateDomain (UpdateDomain'),
+    newUpdateDomain,
+    UpdateDomainResponse (UpdateDomainResponse'),
+    newUpdateDomainResponse,
+
+    -- ** UpdateProfile
+    UpdateProfile (UpdateProfile'),
+    newUpdateProfile,
+    UpdateProfileResponse (UpdateProfileResponse'),
+    newUpdateProfileResponse,
+
+    -- * Types
+
+    -- ** ConflictResolvingModel
+    ConflictResolvingModel (..),
+
+    -- ** DataPullMode
+    DataPullMode (..),
+
+    -- ** FieldContentType
+    FieldContentType (..),
+
+    -- ** Gender
+    Gender (..),
+
+    -- ** IdentityResolutionJobStatus
+    IdentityResolutionJobStatus (..),
+
+    -- ** JobScheduleDayOfTheWeek
+    JobScheduleDayOfTheWeek (..),
+
+    -- ** LogicalOperator
+    LogicalOperator (..),
+
+    -- ** MarketoConnectorOperator
+    MarketoConnectorOperator (..),
+
+    -- ** OperatorPropertiesKeys
+    OperatorPropertiesKeys (..),
+
+    -- ** PartyType
+    PartyType (..),
+
+    -- ** S3ConnectorOperator
+    S3ConnectorOperator (..),
+
+    -- ** SalesforceConnectorOperator
+    SalesforceConnectorOperator (..),
+
+    -- ** ServiceNowConnectorOperator
+    ServiceNowConnectorOperator (..),
+
+    -- ** SourceConnectorType
+    SourceConnectorType (..),
+
+    -- ** StandardIdentifier
+    StandardIdentifier (..),
+
+    -- ** Status
+    Status (..),
+
+    -- ** TaskType
+    TaskType (..),
+
+    -- ** TriggerType
+    TriggerType (..),
+
+    -- ** WorkflowType
+    WorkflowType (..),
+
+    -- ** ZendeskConnectorOperator
+    ZendeskConnectorOperator (..),
+
+    -- ** AdditionalSearchKey
+    AdditionalSearchKey (AdditionalSearchKey'),
+    newAdditionalSearchKey,
+
+    -- ** Address
+    Address (Address'),
+    newAddress,
+
+    -- ** AppflowIntegration
+    AppflowIntegration (AppflowIntegration'),
+    newAppflowIntegration,
+
+    -- ** AppflowIntegrationWorkflowAttributes
+    AppflowIntegrationWorkflowAttributes (AppflowIntegrationWorkflowAttributes'),
+    newAppflowIntegrationWorkflowAttributes,
+
+    -- ** AppflowIntegrationWorkflowMetrics
+    AppflowIntegrationWorkflowMetrics (AppflowIntegrationWorkflowMetrics'),
+    newAppflowIntegrationWorkflowMetrics,
+
+    -- ** AppflowIntegrationWorkflowStep
+    AppflowIntegrationWorkflowStep (AppflowIntegrationWorkflowStep'),
+    newAppflowIntegrationWorkflowStep,
+
+    -- ** AutoMerging
+    AutoMerging (AutoMerging'),
+    newAutoMerging,
+
+    -- ** Batch
+    Batch (Batch'),
+    newBatch,
+
+    -- ** ConflictResolution
+    ConflictResolution (ConflictResolution'),
+    newConflictResolution,
+
+    -- ** ConnectorOperator
+    ConnectorOperator (ConnectorOperator'),
+    newConnectorOperator,
+
+    -- ** Consolidation
+    Consolidation (Consolidation'),
+    newConsolidation,
+
+    -- ** DomainStats
+    DomainStats (DomainStats'),
+    newDomainStats,
+
+    -- ** ExportingConfig
+    ExportingConfig (ExportingConfig'),
+    newExportingConfig,
+
+    -- ** ExportingLocation
+    ExportingLocation (ExportingLocation'),
+    newExportingLocation,
+
+    -- ** FieldSourceProfileIds
+    FieldSourceProfileIds (FieldSourceProfileIds'),
+    newFieldSourceProfileIds,
+
+    -- ** FlowDefinition
+    FlowDefinition (FlowDefinition'),
+    newFlowDefinition,
+
+    -- ** FoundByKeyValue
+    FoundByKeyValue (FoundByKeyValue'),
+    newFoundByKeyValue,
+
+    -- ** IdentityResolutionJob
+    IdentityResolutionJob (IdentityResolutionJob'),
+    newIdentityResolutionJob,
+
+    -- ** IncrementalPullConfig
+    IncrementalPullConfig (IncrementalPullConfig'),
+    newIncrementalPullConfig,
+
+    -- ** IntegrationConfig
+    IntegrationConfig (IntegrationConfig'),
+    newIntegrationConfig,
+
+    -- ** JobSchedule
+    JobSchedule (JobSchedule'),
+    newJobSchedule,
+
+    -- ** JobStats
+    JobStats (JobStats'),
+    newJobStats,
+
+    -- ** ListDomainItem
+    ListDomainItem (ListDomainItem'),
+    newListDomainItem,
+
+    -- ** ListIntegrationItem
+    ListIntegrationItem (ListIntegrationItem'),
+    newListIntegrationItem,
+
+    -- ** ListProfileObjectTypeItem
+    ListProfileObjectTypeItem (ListProfileObjectTypeItem'),
+    newListProfileObjectTypeItem,
+
+    -- ** ListProfileObjectTypeTemplateItem
+    ListProfileObjectTypeTemplateItem (ListProfileObjectTypeTemplateItem'),
+    newListProfileObjectTypeTemplateItem,
+
+    -- ** ListProfileObjectsItem
+    ListProfileObjectsItem (ListProfileObjectsItem'),
+    newListProfileObjectsItem,
+
+    -- ** ListWorkflowsItem
+    ListWorkflowsItem (ListWorkflowsItem'),
+    newListWorkflowsItem,
+
+    -- ** MarketoSourceProperties
+    MarketoSourceProperties (MarketoSourceProperties'),
+    newMarketoSourceProperties,
+
+    -- ** MatchItem
+    MatchItem (MatchItem'),
+    newMatchItem,
+
+    -- ** MatchingRequest
+    MatchingRequest (MatchingRequest'),
+    newMatchingRequest,
+
+    -- ** MatchingResponse
+    MatchingResponse (MatchingResponse'),
+    newMatchingResponse,
+
+    -- ** ObjectFilter
+    ObjectFilter (ObjectFilter'),
+    newObjectFilter,
+
+    -- ** ObjectTypeField
+    ObjectTypeField (ObjectTypeField'),
+    newObjectTypeField,
+
+    -- ** ObjectTypeKey
+    ObjectTypeKey (ObjectTypeKey'),
+    newObjectTypeKey,
+
+    -- ** Profile
+    Profile (Profile'),
+    newProfile,
+
+    -- ** S3ExportingConfig
+    S3ExportingConfig (S3ExportingConfig'),
+    newS3ExportingConfig,
+
+    -- ** S3ExportingLocation
+    S3ExportingLocation (S3ExportingLocation'),
+    newS3ExportingLocation,
+
+    -- ** S3SourceProperties
+    S3SourceProperties (S3SourceProperties'),
+    newS3SourceProperties,
+
+    -- ** SalesforceSourceProperties
+    SalesforceSourceProperties (SalesforceSourceProperties'),
+    newSalesforceSourceProperties,
+
+    -- ** ScheduledTriggerProperties
+    ScheduledTriggerProperties (ScheduledTriggerProperties'),
+    newScheduledTriggerProperties,
+
+    -- ** ServiceNowSourceProperties
+    ServiceNowSourceProperties (ServiceNowSourceProperties'),
+    newServiceNowSourceProperties,
+
+    -- ** SourceConnectorProperties
+    SourceConnectorProperties (SourceConnectorProperties'),
+    newSourceConnectorProperties,
+
+    -- ** SourceFlowConfig
+    SourceFlowConfig (SourceFlowConfig'),
+    newSourceFlowConfig,
+
+    -- ** Task
+    Task (Task'),
+    newTask,
+
+    -- ** TriggerConfig
+    TriggerConfig (TriggerConfig'),
+    newTriggerConfig,
+
+    -- ** TriggerProperties
+    TriggerProperties (TriggerProperties'),
+    newTriggerProperties,
+
+    -- ** UpdateAddress
+    UpdateAddress (UpdateAddress'),
+    newUpdateAddress,
+
+    -- ** WorkflowAttributes
+    WorkflowAttributes (WorkflowAttributes'),
+    newWorkflowAttributes,
+
+    -- ** WorkflowMetrics
+    WorkflowMetrics (WorkflowMetrics'),
+    newWorkflowMetrics,
+
+    -- ** WorkflowStepItem
+    WorkflowStepItem (WorkflowStepItem'),
+    newWorkflowStepItem,
+
+    -- ** ZendeskSourceProperties
+    ZendeskSourceProperties (ZendeskSourceProperties'),
+    newZendeskSourceProperties,
+  )
+where
+
+import Amazonka.CustomerProfiles.AddProfileKey
+import Amazonka.CustomerProfiles.CreateDomain
+import Amazonka.CustomerProfiles.CreateIntegrationWorkflow
+import Amazonka.CustomerProfiles.CreateProfile
+import Amazonka.CustomerProfiles.DeleteDomain
+import Amazonka.CustomerProfiles.DeleteIntegration
+import Amazonka.CustomerProfiles.DeleteProfile
+import Amazonka.CustomerProfiles.DeleteProfileKey
+import Amazonka.CustomerProfiles.DeleteProfileObject
+import Amazonka.CustomerProfiles.DeleteProfileObjectType
+import Amazonka.CustomerProfiles.DeleteWorkflow
+import Amazonka.CustomerProfiles.GetAutoMergingPreview
+import Amazonka.CustomerProfiles.GetDomain
+import Amazonka.CustomerProfiles.GetIdentityResolutionJob
+import Amazonka.CustomerProfiles.GetIntegration
+import Amazonka.CustomerProfiles.GetMatches
+import Amazonka.CustomerProfiles.GetProfileObjectType
+import Amazonka.CustomerProfiles.GetProfileObjectTypeTemplate
+import Amazonka.CustomerProfiles.GetWorkflow
+import Amazonka.CustomerProfiles.GetWorkflowSteps
+import Amazonka.CustomerProfiles.Lens
+import Amazonka.CustomerProfiles.ListAccountIntegrations
+import Amazonka.CustomerProfiles.ListDomains
+import Amazonka.CustomerProfiles.ListIdentityResolutionJobs
+import Amazonka.CustomerProfiles.ListIntegrations
+import Amazonka.CustomerProfiles.ListProfileObjectTypeTemplates
+import Amazonka.CustomerProfiles.ListProfileObjectTypes
+import Amazonka.CustomerProfiles.ListProfileObjects
+import Amazonka.CustomerProfiles.ListTagsForResource
+import Amazonka.CustomerProfiles.ListWorkflows
+import Amazonka.CustomerProfiles.MergeProfiles
+import Amazonka.CustomerProfiles.PutIntegration
+import Amazonka.CustomerProfiles.PutProfileObject
+import Amazonka.CustomerProfiles.PutProfileObjectType
+import Amazonka.CustomerProfiles.SearchProfiles
+import Amazonka.CustomerProfiles.TagResource
+import Amazonka.CustomerProfiles.Types
+import Amazonka.CustomerProfiles.UntagResource
+import Amazonka.CustomerProfiles.UpdateDomain
+import Amazonka.CustomerProfiles.UpdateProfile
+import Amazonka.CustomerProfiles.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 'CustomerProfiles'.
+
+-- $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/CustomerProfiles/AddProfileKey.hs b/gen/Amazonka/CustomerProfiles/AddProfileKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/AddProfileKey.hs
@@ -0,0 +1,247 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.AddProfileKey
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates a new key value with a specific profile, such as a Contact
+-- Record ContactId.
+--
+-- A profile object can have a single unique key and any number of
+-- additional keys that can be used to identify the profile that it belongs
+-- to.
+module Amazonka.CustomerProfiles.AddProfileKey
+  ( -- * Creating a Request
+    AddProfileKey (..),
+    newAddProfileKey,
+
+    -- * Request Lenses
+    addProfileKey_profileId,
+    addProfileKey_keyName,
+    addProfileKey_values,
+    addProfileKey_domainName,
+
+    -- * Destructuring the Response
+    AddProfileKeyResponse (..),
+    newAddProfileKeyResponse,
+
+    -- * Response Lenses
+    addProfileKeyResponse_keyName,
+    addProfileKeyResponse_values,
+    addProfileKeyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAddProfileKey' smart constructor.
+data AddProfileKey = AddProfileKey'
+  { -- | The unique identifier of a customer profile.
+    profileId :: Prelude.Text,
+    -- | A searchable identifier of a customer profile. The predefined keys you
+    -- can use include: _account, _profileId, _assetId, _caseId, _orderId,
+    -- _fullName, _phone, _email, _ctrContactId, _marketoLeadId,
+    -- _salesforceAccountId, _salesforceContactId, _salesforceAssetId,
+    -- _zendeskUserId, _zendeskExternalId, _zendeskTicketId,
+    -- _serviceNowSystemId, _serviceNowIncidentId, _segmentUserId,
+    -- _shopifyCustomerId, _shopifyOrderId.
+    keyName :: Prelude.Text,
+    -- | A list of key values.
+    values :: [Prelude.Text],
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddProfileKey' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'profileId', 'addProfileKey_profileId' - The unique identifier of a customer profile.
+--
+-- 'keyName', 'addProfileKey_keyName' - A searchable identifier of a customer profile. The predefined keys you
+-- can use include: _account, _profileId, _assetId, _caseId, _orderId,
+-- _fullName, _phone, _email, _ctrContactId, _marketoLeadId,
+-- _salesforceAccountId, _salesforceContactId, _salesforceAssetId,
+-- _zendeskUserId, _zendeskExternalId, _zendeskTicketId,
+-- _serviceNowSystemId, _serviceNowIncidentId, _segmentUserId,
+-- _shopifyCustomerId, _shopifyOrderId.
+--
+-- 'values', 'addProfileKey_values' - A list of key values.
+--
+-- 'domainName', 'addProfileKey_domainName' - The unique name of the domain.
+newAddProfileKey ::
+  -- | 'profileId'
+  Prelude.Text ->
+  -- | 'keyName'
+  Prelude.Text ->
+  -- | 'domainName'
+  Prelude.Text ->
+  AddProfileKey
+newAddProfileKey pProfileId_ pKeyName_ pDomainName_ =
+  AddProfileKey'
+    { profileId = pProfileId_,
+      keyName = pKeyName_,
+      values = Prelude.mempty,
+      domainName = pDomainName_
+    }
+
+-- | The unique identifier of a customer profile.
+addProfileKey_profileId :: Lens.Lens' AddProfileKey Prelude.Text
+addProfileKey_profileId = Lens.lens (\AddProfileKey' {profileId} -> profileId) (\s@AddProfileKey' {} a -> s {profileId = a} :: AddProfileKey)
+
+-- | A searchable identifier of a customer profile. The predefined keys you
+-- can use include: _account, _profileId, _assetId, _caseId, _orderId,
+-- _fullName, _phone, _email, _ctrContactId, _marketoLeadId,
+-- _salesforceAccountId, _salesforceContactId, _salesforceAssetId,
+-- _zendeskUserId, _zendeskExternalId, _zendeskTicketId,
+-- _serviceNowSystemId, _serviceNowIncidentId, _segmentUserId,
+-- _shopifyCustomerId, _shopifyOrderId.
+addProfileKey_keyName :: Lens.Lens' AddProfileKey Prelude.Text
+addProfileKey_keyName = Lens.lens (\AddProfileKey' {keyName} -> keyName) (\s@AddProfileKey' {} a -> s {keyName = a} :: AddProfileKey)
+
+-- | A list of key values.
+addProfileKey_values :: Lens.Lens' AddProfileKey [Prelude.Text]
+addProfileKey_values = Lens.lens (\AddProfileKey' {values} -> values) (\s@AddProfileKey' {} a -> s {values = a} :: AddProfileKey) Prelude.. Lens.coerced
+
+-- | The unique name of the domain.
+addProfileKey_domainName :: Lens.Lens' AddProfileKey Prelude.Text
+addProfileKey_domainName = Lens.lens (\AddProfileKey' {domainName} -> domainName) (\s@AddProfileKey' {} a -> s {domainName = a} :: AddProfileKey)
+
+instance Core.AWSRequest AddProfileKey where
+  type
+    AWSResponse AddProfileKey =
+      AddProfileKeyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AddProfileKeyResponse'
+            Prelude.<$> (x Data..?> "KeyName")
+            Prelude.<*> (x Data..?> "Values" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AddProfileKey where
+  hashWithSalt _salt AddProfileKey' {..} =
+    _salt
+      `Prelude.hashWithSalt` profileId
+      `Prelude.hashWithSalt` keyName
+      `Prelude.hashWithSalt` values
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData AddProfileKey where
+  rnf AddProfileKey' {..} =
+    Prelude.rnf profileId
+      `Prelude.seq` Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf values
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders AddProfileKey where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AddProfileKey where
+  toJSON AddProfileKey' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ProfileId" Data..= profileId),
+            Prelude.Just ("KeyName" Data..= keyName),
+            Prelude.Just ("Values" Data..= values)
+          ]
+      )
+
+instance Data.ToPath AddProfileKey where
+  toPath AddProfileKey' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainName, "/profiles/keys"]
+
+instance Data.ToQuery AddProfileKey where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAddProfileKeyResponse' smart constructor.
+data AddProfileKeyResponse = AddProfileKeyResponse'
+  { -- | A searchable identifier of a customer profile.
+    keyName :: Prelude.Maybe Prelude.Text,
+    -- | A list of key values.
+    values :: 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 'AddProfileKeyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'keyName', 'addProfileKeyResponse_keyName' - A searchable identifier of a customer profile.
+--
+-- 'values', 'addProfileKeyResponse_values' - A list of key values.
+--
+-- 'httpStatus', 'addProfileKeyResponse_httpStatus' - The response's http status code.
+newAddProfileKeyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AddProfileKeyResponse
+newAddProfileKeyResponse pHttpStatus_ =
+  AddProfileKeyResponse'
+    { keyName = Prelude.Nothing,
+      values = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A searchable identifier of a customer profile.
+addProfileKeyResponse_keyName :: Lens.Lens' AddProfileKeyResponse (Prelude.Maybe Prelude.Text)
+addProfileKeyResponse_keyName = Lens.lens (\AddProfileKeyResponse' {keyName} -> keyName) (\s@AddProfileKeyResponse' {} a -> s {keyName = a} :: AddProfileKeyResponse)
+
+-- | A list of key values.
+addProfileKeyResponse_values :: Lens.Lens' AddProfileKeyResponse (Prelude.Maybe [Prelude.Text])
+addProfileKeyResponse_values = Lens.lens (\AddProfileKeyResponse' {values} -> values) (\s@AddProfileKeyResponse' {} a -> s {values = a} :: AddProfileKeyResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+addProfileKeyResponse_httpStatus :: Lens.Lens' AddProfileKeyResponse Prelude.Int
+addProfileKeyResponse_httpStatus = Lens.lens (\AddProfileKeyResponse' {httpStatus} -> httpStatus) (\s@AddProfileKeyResponse' {} a -> s {httpStatus = a} :: AddProfileKeyResponse)
+
+instance Prelude.NFData AddProfileKeyResponse where
+  rnf AddProfileKeyResponse' {..} =
+    Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf values
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/CreateDomain.hs b/gen/Amazonka/CustomerProfiles/CreateDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/CreateDomain.hs
@@ -0,0 +1,439 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.CreateDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a domain, which is a container for all customer data, such as
+-- customer profile attributes, object types, profile keys, and encryption
+-- keys. You can create multiple domains, and each domain can have multiple
+-- third-party integrations.
+--
+-- Each Amazon Connect instance can be associated with only one domain.
+-- Multiple Amazon Connect instances can be associated with one domain.
+--
+-- Use this API or
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_UpdateDomain.html UpdateDomain>
+-- to enable
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html identity resolution>:
+-- set @Matching@ to true.
+--
+-- To prevent cross-service impersonation when you call this API, see
+-- <https://docs.aws.amazon.com/connect/latest/adminguide/cross-service-confused-deputy-prevention.html Cross-service confused deputy prevention>
+-- for sample policies that you should apply.
+module Amazonka.CustomerProfiles.CreateDomain
+  ( -- * Creating a Request
+    CreateDomain (..),
+    newCreateDomain,
+
+    -- * Request Lenses
+    createDomain_deadLetterQueueUrl,
+    createDomain_defaultEncryptionKey,
+    createDomain_matching,
+    createDomain_tags,
+    createDomain_domainName,
+    createDomain_defaultExpirationDays,
+
+    -- * Destructuring the Response
+    CreateDomainResponse (..),
+    newCreateDomainResponse,
+
+    -- * Response Lenses
+    createDomainResponse_deadLetterQueueUrl,
+    createDomainResponse_defaultEncryptionKey,
+    createDomainResponse_matching,
+    createDomainResponse_tags,
+    createDomainResponse_httpStatus,
+    createDomainResponse_domainName,
+    createDomainResponse_defaultExpirationDays,
+    createDomainResponse_createdAt,
+    createDomainResponse_lastUpdatedAt,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDomain' smart constructor.
+data CreateDomain = CreateDomain'
+  { -- | The URL of the SQS dead letter queue, which is used for reporting errors
+    -- associated with ingesting data from third party applications. You must
+    -- set up a policy on the DeadLetterQueue for the SendMessage operation to
+    -- enable Amazon Connect Customer Profiles to send messages to the
+    -- DeadLetterQueue.
+    deadLetterQueueUrl :: Prelude.Maybe Prelude.Text,
+    -- | The default encryption key, which is an AWS managed key, is used when no
+    -- specific type of encryption key is specified. It is used to encrypt all
+    -- data before it is placed in permanent or semi-permanent storage.
+    defaultEncryptionKey :: Prelude.Maybe Prelude.Text,
+    -- | The process of matching duplicate profiles. If @Matching@ = @true@,
+    -- Amazon Connect Customer Profiles starts a weekly batch process called
+    -- Identity Resolution Job. If you do not specify a date and time for
+    -- Identity Resolution Job to run, by default it runs every Saturday at
+    -- 12AM UTC to detect duplicate profiles in your domains.
+    --
+    -- After the Identity Resolution Job completes, use the
+    -- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html GetMatches>
+    -- API to return and review the results. Or, if you have configured
+    -- @ExportingConfig@ in the @MatchingRequest@, you can download the results
+    -- from S3.
+    matching :: Prelude.Maybe MatchingRequest,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The default number of days until the data within the domain expires.
+    defaultExpirationDays :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deadLetterQueueUrl', 'createDomain_deadLetterQueueUrl' - The URL of the SQS dead letter queue, which is used for reporting errors
+-- associated with ingesting data from third party applications. You must
+-- set up a policy on the DeadLetterQueue for the SendMessage operation to
+-- enable Amazon Connect Customer Profiles to send messages to the
+-- DeadLetterQueue.
+--
+-- 'defaultEncryptionKey', 'createDomain_defaultEncryptionKey' - The default encryption key, which is an AWS managed key, is used when no
+-- specific type of encryption key is specified. It is used to encrypt all
+-- data before it is placed in permanent or semi-permanent storage.
+--
+-- 'matching', 'createDomain_matching' - The process of matching duplicate profiles. If @Matching@ = @true@,
+-- Amazon Connect Customer Profiles starts a weekly batch process called
+-- Identity Resolution Job. If you do not specify a date and time for
+-- Identity Resolution Job to run, by default it runs every Saturday at
+-- 12AM UTC to detect duplicate profiles in your domains.
+--
+-- After the Identity Resolution Job completes, use the
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html GetMatches>
+-- API to return and review the results. Or, if you have configured
+-- @ExportingConfig@ in the @MatchingRequest@, you can download the results
+-- from S3.
+--
+-- 'tags', 'createDomain_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'domainName', 'createDomain_domainName' - The unique name of the domain.
+--
+-- 'defaultExpirationDays', 'createDomain_defaultExpirationDays' - The default number of days until the data within the domain expires.
+newCreateDomain ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'defaultExpirationDays'
+  Prelude.Natural ->
+  CreateDomain
+newCreateDomain pDomainName_ pDefaultExpirationDays_ =
+  CreateDomain'
+    { deadLetterQueueUrl = Prelude.Nothing,
+      defaultEncryptionKey = Prelude.Nothing,
+      matching = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      domainName = pDomainName_,
+      defaultExpirationDays = pDefaultExpirationDays_
+    }
+
+-- | The URL of the SQS dead letter queue, which is used for reporting errors
+-- associated with ingesting data from third party applications. You must
+-- set up a policy on the DeadLetterQueue for the SendMessage operation to
+-- enable Amazon Connect Customer Profiles to send messages to the
+-- DeadLetterQueue.
+createDomain_deadLetterQueueUrl :: Lens.Lens' CreateDomain (Prelude.Maybe Prelude.Text)
+createDomain_deadLetterQueueUrl = Lens.lens (\CreateDomain' {deadLetterQueueUrl} -> deadLetterQueueUrl) (\s@CreateDomain' {} a -> s {deadLetterQueueUrl = a} :: CreateDomain)
+
+-- | The default encryption key, which is an AWS managed key, is used when no
+-- specific type of encryption key is specified. It is used to encrypt all
+-- data before it is placed in permanent or semi-permanent storage.
+createDomain_defaultEncryptionKey :: Lens.Lens' CreateDomain (Prelude.Maybe Prelude.Text)
+createDomain_defaultEncryptionKey = Lens.lens (\CreateDomain' {defaultEncryptionKey} -> defaultEncryptionKey) (\s@CreateDomain' {} a -> s {defaultEncryptionKey = a} :: CreateDomain)
+
+-- | The process of matching duplicate profiles. If @Matching@ = @true@,
+-- Amazon Connect Customer Profiles starts a weekly batch process called
+-- Identity Resolution Job. If you do not specify a date and time for
+-- Identity Resolution Job to run, by default it runs every Saturday at
+-- 12AM UTC to detect duplicate profiles in your domains.
+--
+-- After the Identity Resolution Job completes, use the
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html GetMatches>
+-- API to return and review the results. Or, if you have configured
+-- @ExportingConfig@ in the @MatchingRequest@, you can download the results
+-- from S3.
+createDomain_matching :: Lens.Lens' CreateDomain (Prelude.Maybe MatchingRequest)
+createDomain_matching = Lens.lens (\CreateDomain' {matching} -> matching) (\s@CreateDomain' {} a -> s {matching = a} :: CreateDomain)
+
+-- | The tags used to organize, track, or control access for this resource.
+createDomain_tags :: Lens.Lens' CreateDomain (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createDomain_tags = Lens.lens (\CreateDomain' {tags} -> tags) (\s@CreateDomain' {} a -> s {tags = a} :: CreateDomain) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique name of the domain.
+createDomain_domainName :: Lens.Lens' CreateDomain Prelude.Text
+createDomain_domainName = Lens.lens (\CreateDomain' {domainName} -> domainName) (\s@CreateDomain' {} a -> s {domainName = a} :: CreateDomain)
+
+-- | The default number of days until the data within the domain expires.
+createDomain_defaultExpirationDays :: Lens.Lens' CreateDomain Prelude.Natural
+createDomain_defaultExpirationDays = Lens.lens (\CreateDomain' {defaultExpirationDays} -> defaultExpirationDays) (\s@CreateDomain' {} a -> s {defaultExpirationDays = a} :: CreateDomain)
+
+instance Core.AWSRequest CreateDomain where
+  type AWSResponse CreateDomain = CreateDomainResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDomainResponse'
+            Prelude.<$> (x Data..?> "DeadLetterQueueUrl")
+            Prelude.<*> (x Data..?> "DefaultEncryptionKey")
+            Prelude.<*> (x Data..?> "Matching")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "DomainName")
+            Prelude.<*> (x Data..:> "DefaultExpirationDays")
+            Prelude.<*> (x Data..:> "CreatedAt")
+            Prelude.<*> (x Data..:> "LastUpdatedAt")
+      )
+
+instance Prelude.Hashable CreateDomain where
+  hashWithSalt _salt CreateDomain' {..} =
+    _salt
+      `Prelude.hashWithSalt` deadLetterQueueUrl
+      `Prelude.hashWithSalt` defaultEncryptionKey
+      `Prelude.hashWithSalt` matching
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` defaultExpirationDays
+
+instance Prelude.NFData CreateDomain where
+  rnf CreateDomain' {..} =
+    Prelude.rnf deadLetterQueueUrl
+      `Prelude.seq` Prelude.rnf defaultEncryptionKey
+      `Prelude.seq` Prelude.rnf matching
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf defaultExpirationDays
+
+instance Data.ToHeaders CreateDomain where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDomain where
+  toJSON CreateDomain' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DeadLetterQueueUrl" Data..=)
+              Prelude.<$> deadLetterQueueUrl,
+            ("DefaultEncryptionKey" Data..=)
+              Prelude.<$> defaultEncryptionKey,
+            ("Matching" Data..=) Prelude.<$> matching,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ( "DefaultExpirationDays"
+                  Data..= defaultExpirationDays
+              )
+          ]
+      )
+
+instance Data.ToPath CreateDomain where
+  toPath CreateDomain' {..} =
+    Prelude.mconcat ["/domains/", Data.toBS domainName]
+
+instance Data.ToQuery CreateDomain where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDomainResponse' smart constructor.
+data CreateDomainResponse = CreateDomainResponse'
+  { -- | The URL of the SQS dead letter queue, which is used for reporting errors
+    -- associated with ingesting data from third party applications.
+    deadLetterQueueUrl :: Prelude.Maybe Prelude.Text,
+    -- | The default encryption key, which is an AWS managed key, is used when no
+    -- specific type of encryption key is specified. It is used to encrypt all
+    -- data before it is placed in permanent or semi-permanent storage.
+    defaultEncryptionKey :: Prelude.Maybe Prelude.Text,
+    -- | The process of matching duplicate profiles. If @Matching@ = @true@,
+    -- Amazon Connect Customer Profiles starts a weekly batch process called
+    -- Identity Resolution Job. If you do not specify a date and time for
+    -- Identity Resolution Job to run, by default it runs every Saturday at
+    -- 12AM UTC to detect duplicate profiles in your domains.
+    --
+    -- After the Identity Resolution Job completes, use the
+    -- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html GetMatches>
+    -- API to return and review the results. Or, if you have configured
+    -- @ExportingConfig@ in the @MatchingRequest@, you can download the results
+    -- from S3.
+    matching :: Prelude.Maybe MatchingResponse,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The default number of days until the data within the domain expires.
+    defaultExpirationDays :: Prelude.Natural,
+    -- | The timestamp of when the domain was created.
+    createdAt :: Data.POSIX,
+    -- | The timestamp of when the domain was most recently edited.
+    lastUpdatedAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deadLetterQueueUrl', 'createDomainResponse_deadLetterQueueUrl' - The URL of the SQS dead letter queue, which is used for reporting errors
+-- associated with ingesting data from third party applications.
+--
+-- 'defaultEncryptionKey', 'createDomainResponse_defaultEncryptionKey' - The default encryption key, which is an AWS managed key, is used when no
+-- specific type of encryption key is specified. It is used to encrypt all
+-- data before it is placed in permanent or semi-permanent storage.
+--
+-- 'matching', 'createDomainResponse_matching' - The process of matching duplicate profiles. If @Matching@ = @true@,
+-- Amazon Connect Customer Profiles starts a weekly batch process called
+-- Identity Resolution Job. If you do not specify a date and time for
+-- Identity Resolution Job to run, by default it runs every Saturday at
+-- 12AM UTC to detect duplicate profiles in your domains.
+--
+-- After the Identity Resolution Job completes, use the
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html GetMatches>
+-- API to return and review the results. Or, if you have configured
+-- @ExportingConfig@ in the @MatchingRequest@, you can download the results
+-- from S3.
+--
+-- 'tags', 'createDomainResponse_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'httpStatus', 'createDomainResponse_httpStatus' - The response's http status code.
+--
+-- 'domainName', 'createDomainResponse_domainName' - The unique name of the domain.
+--
+-- 'defaultExpirationDays', 'createDomainResponse_defaultExpirationDays' - The default number of days until the data within the domain expires.
+--
+-- 'createdAt', 'createDomainResponse_createdAt' - The timestamp of when the domain was created.
+--
+-- 'lastUpdatedAt', 'createDomainResponse_lastUpdatedAt' - The timestamp of when the domain was most recently edited.
+newCreateDomainResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'defaultExpirationDays'
+  Prelude.Natural ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'lastUpdatedAt'
+  Prelude.UTCTime ->
+  CreateDomainResponse
+newCreateDomainResponse
+  pHttpStatus_
+  pDomainName_
+  pDefaultExpirationDays_
+  pCreatedAt_
+  pLastUpdatedAt_ =
+    CreateDomainResponse'
+      { deadLetterQueueUrl =
+          Prelude.Nothing,
+        defaultEncryptionKey = Prelude.Nothing,
+        matching = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        domainName = pDomainName_,
+        defaultExpirationDays = pDefaultExpirationDays_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        lastUpdatedAt = Data._Time Lens.# pLastUpdatedAt_
+      }
+
+-- | The URL of the SQS dead letter queue, which is used for reporting errors
+-- associated with ingesting data from third party applications.
+createDomainResponse_deadLetterQueueUrl :: Lens.Lens' CreateDomainResponse (Prelude.Maybe Prelude.Text)
+createDomainResponse_deadLetterQueueUrl = Lens.lens (\CreateDomainResponse' {deadLetterQueueUrl} -> deadLetterQueueUrl) (\s@CreateDomainResponse' {} a -> s {deadLetterQueueUrl = a} :: CreateDomainResponse)
+
+-- | The default encryption key, which is an AWS managed key, is used when no
+-- specific type of encryption key is specified. It is used to encrypt all
+-- data before it is placed in permanent or semi-permanent storage.
+createDomainResponse_defaultEncryptionKey :: Lens.Lens' CreateDomainResponse (Prelude.Maybe Prelude.Text)
+createDomainResponse_defaultEncryptionKey = Lens.lens (\CreateDomainResponse' {defaultEncryptionKey} -> defaultEncryptionKey) (\s@CreateDomainResponse' {} a -> s {defaultEncryptionKey = a} :: CreateDomainResponse)
+
+-- | The process of matching duplicate profiles. If @Matching@ = @true@,
+-- Amazon Connect Customer Profiles starts a weekly batch process called
+-- Identity Resolution Job. If you do not specify a date and time for
+-- Identity Resolution Job to run, by default it runs every Saturday at
+-- 12AM UTC to detect duplicate profiles in your domains.
+--
+-- After the Identity Resolution Job completes, use the
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html GetMatches>
+-- API to return and review the results. Or, if you have configured
+-- @ExportingConfig@ in the @MatchingRequest@, you can download the results
+-- from S3.
+createDomainResponse_matching :: Lens.Lens' CreateDomainResponse (Prelude.Maybe MatchingResponse)
+createDomainResponse_matching = Lens.lens (\CreateDomainResponse' {matching} -> matching) (\s@CreateDomainResponse' {} a -> s {matching = a} :: CreateDomainResponse)
+
+-- | The tags used to organize, track, or control access for this resource.
+createDomainResponse_tags :: Lens.Lens' CreateDomainResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createDomainResponse_tags = Lens.lens (\CreateDomainResponse' {tags} -> tags) (\s@CreateDomainResponse' {} a -> s {tags = a} :: CreateDomainResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createDomainResponse_httpStatus :: Lens.Lens' CreateDomainResponse Prelude.Int
+createDomainResponse_httpStatus = Lens.lens (\CreateDomainResponse' {httpStatus} -> httpStatus) (\s@CreateDomainResponse' {} a -> s {httpStatus = a} :: CreateDomainResponse)
+
+-- | The unique name of the domain.
+createDomainResponse_domainName :: Lens.Lens' CreateDomainResponse Prelude.Text
+createDomainResponse_domainName = Lens.lens (\CreateDomainResponse' {domainName} -> domainName) (\s@CreateDomainResponse' {} a -> s {domainName = a} :: CreateDomainResponse)
+
+-- | The default number of days until the data within the domain expires.
+createDomainResponse_defaultExpirationDays :: Lens.Lens' CreateDomainResponse Prelude.Natural
+createDomainResponse_defaultExpirationDays = Lens.lens (\CreateDomainResponse' {defaultExpirationDays} -> defaultExpirationDays) (\s@CreateDomainResponse' {} a -> s {defaultExpirationDays = a} :: CreateDomainResponse)
+
+-- | The timestamp of when the domain was created.
+createDomainResponse_createdAt :: Lens.Lens' CreateDomainResponse Prelude.UTCTime
+createDomainResponse_createdAt = Lens.lens (\CreateDomainResponse' {createdAt} -> createdAt) (\s@CreateDomainResponse' {} a -> s {createdAt = a} :: CreateDomainResponse) Prelude.. Data._Time
+
+-- | The timestamp of when the domain was most recently edited.
+createDomainResponse_lastUpdatedAt :: Lens.Lens' CreateDomainResponse Prelude.UTCTime
+createDomainResponse_lastUpdatedAt = Lens.lens (\CreateDomainResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@CreateDomainResponse' {} a -> s {lastUpdatedAt = a} :: CreateDomainResponse) Prelude.. Data._Time
+
+instance Prelude.NFData CreateDomainResponse where
+  rnf CreateDomainResponse' {..} =
+    Prelude.rnf deadLetterQueueUrl
+      `Prelude.seq` Prelude.rnf defaultEncryptionKey
+      `Prelude.seq` Prelude.rnf matching
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf defaultExpirationDays
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
diff --git a/gen/Amazonka/CustomerProfiles/CreateIntegrationWorkflow.hs b/gen/Amazonka/CustomerProfiles/CreateIntegrationWorkflow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/CreateIntegrationWorkflow.hs
@@ -0,0 +1,284 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.CreateIntegrationWorkflow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an integration workflow. An integration workflow is an async
+-- process which ingests historic data and sets up an integration for
+-- ongoing updates. The supported Amazon AppFlow sources are Salesforce,
+-- ServiceNow, and Marketo.
+module Amazonka.CustomerProfiles.CreateIntegrationWorkflow
+  ( -- * Creating a Request
+    CreateIntegrationWorkflow (..),
+    newCreateIntegrationWorkflow,
+
+    -- * Request Lenses
+    createIntegrationWorkflow_tags,
+    createIntegrationWorkflow_domainName,
+    createIntegrationWorkflow_workflowType,
+    createIntegrationWorkflow_integrationConfig,
+    createIntegrationWorkflow_objectTypeName,
+    createIntegrationWorkflow_roleArn,
+
+    -- * Destructuring the Response
+    CreateIntegrationWorkflowResponse (..),
+    newCreateIntegrationWorkflowResponse,
+
+    -- * Response Lenses
+    createIntegrationWorkflowResponse_httpStatus,
+    createIntegrationWorkflowResponse_workflowId,
+    createIntegrationWorkflowResponse_message,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateIntegrationWorkflow' smart constructor.
+data CreateIntegrationWorkflow = CreateIntegrationWorkflow'
+  { -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The type of workflow. The only supported value is APPFLOW_INTEGRATION.
+    workflowType :: WorkflowType,
+    -- | Configuration data for integration workflow.
+    integrationConfig :: IntegrationConfig,
+    -- | The name of the profile object type.
+    objectTypeName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the IAM role. Customer Profiles
+    -- assumes this role to create resources on your behalf as part of workflow
+    -- execution.
+    roleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateIntegrationWorkflow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createIntegrationWorkflow_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'domainName', 'createIntegrationWorkflow_domainName' - The unique name of the domain.
+--
+-- 'workflowType', 'createIntegrationWorkflow_workflowType' - The type of workflow. The only supported value is APPFLOW_INTEGRATION.
+--
+-- 'integrationConfig', 'createIntegrationWorkflow_integrationConfig' - Configuration data for integration workflow.
+--
+-- 'objectTypeName', 'createIntegrationWorkflow_objectTypeName' - The name of the profile object type.
+--
+-- 'roleArn', 'createIntegrationWorkflow_roleArn' - The Amazon Resource Name (ARN) of the IAM role. Customer Profiles
+-- assumes this role to create resources on your behalf as part of workflow
+-- execution.
+newCreateIntegrationWorkflow ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'workflowType'
+  WorkflowType ->
+  -- | 'integrationConfig'
+  IntegrationConfig ->
+  -- | 'objectTypeName'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  CreateIntegrationWorkflow
+newCreateIntegrationWorkflow
+  pDomainName_
+  pWorkflowType_
+  pIntegrationConfig_
+  pObjectTypeName_
+  pRoleArn_ =
+    CreateIntegrationWorkflow'
+      { tags = Prelude.Nothing,
+        domainName = pDomainName_,
+        workflowType = pWorkflowType_,
+        integrationConfig = pIntegrationConfig_,
+        objectTypeName = pObjectTypeName_,
+        roleArn = pRoleArn_
+      }
+
+-- | The tags used to organize, track, or control access for this resource.
+createIntegrationWorkflow_tags :: Lens.Lens' CreateIntegrationWorkflow (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createIntegrationWorkflow_tags = Lens.lens (\CreateIntegrationWorkflow' {tags} -> tags) (\s@CreateIntegrationWorkflow' {} a -> s {tags = a} :: CreateIntegrationWorkflow) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique name of the domain.
+createIntegrationWorkflow_domainName :: Lens.Lens' CreateIntegrationWorkflow Prelude.Text
+createIntegrationWorkflow_domainName = Lens.lens (\CreateIntegrationWorkflow' {domainName} -> domainName) (\s@CreateIntegrationWorkflow' {} a -> s {domainName = a} :: CreateIntegrationWorkflow)
+
+-- | The type of workflow. The only supported value is APPFLOW_INTEGRATION.
+createIntegrationWorkflow_workflowType :: Lens.Lens' CreateIntegrationWorkflow WorkflowType
+createIntegrationWorkflow_workflowType = Lens.lens (\CreateIntegrationWorkflow' {workflowType} -> workflowType) (\s@CreateIntegrationWorkflow' {} a -> s {workflowType = a} :: CreateIntegrationWorkflow)
+
+-- | Configuration data for integration workflow.
+createIntegrationWorkflow_integrationConfig :: Lens.Lens' CreateIntegrationWorkflow IntegrationConfig
+createIntegrationWorkflow_integrationConfig = Lens.lens (\CreateIntegrationWorkflow' {integrationConfig} -> integrationConfig) (\s@CreateIntegrationWorkflow' {} a -> s {integrationConfig = a} :: CreateIntegrationWorkflow)
+
+-- | The name of the profile object type.
+createIntegrationWorkflow_objectTypeName :: Lens.Lens' CreateIntegrationWorkflow Prelude.Text
+createIntegrationWorkflow_objectTypeName = Lens.lens (\CreateIntegrationWorkflow' {objectTypeName} -> objectTypeName) (\s@CreateIntegrationWorkflow' {} a -> s {objectTypeName = a} :: CreateIntegrationWorkflow)
+
+-- | The Amazon Resource Name (ARN) of the IAM role. Customer Profiles
+-- assumes this role to create resources on your behalf as part of workflow
+-- execution.
+createIntegrationWorkflow_roleArn :: Lens.Lens' CreateIntegrationWorkflow Prelude.Text
+createIntegrationWorkflow_roleArn = Lens.lens (\CreateIntegrationWorkflow' {roleArn} -> roleArn) (\s@CreateIntegrationWorkflow' {} a -> s {roleArn = a} :: CreateIntegrationWorkflow)
+
+instance Core.AWSRequest CreateIntegrationWorkflow where
+  type
+    AWSResponse CreateIntegrationWorkflow =
+      CreateIntegrationWorkflowResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateIntegrationWorkflowResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "WorkflowId")
+            Prelude.<*> (x Data..:> "Message")
+      )
+
+instance Prelude.Hashable CreateIntegrationWorkflow where
+  hashWithSalt _salt CreateIntegrationWorkflow' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` workflowType
+      `Prelude.hashWithSalt` integrationConfig
+      `Prelude.hashWithSalt` objectTypeName
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData CreateIntegrationWorkflow where
+  rnf CreateIntegrationWorkflow' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf workflowType
+      `Prelude.seq` Prelude.rnf integrationConfig
+      `Prelude.seq` Prelude.rnf objectTypeName
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance Data.ToHeaders CreateIntegrationWorkflow where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateIntegrationWorkflow where
+  toJSON CreateIntegrationWorkflow' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("WorkflowType" Data..= workflowType),
+            Prelude.Just
+              ("IntegrationConfig" Data..= integrationConfig),
+            Prelude.Just
+              ("ObjectTypeName" Data..= objectTypeName),
+            Prelude.Just ("RoleArn" Data..= roleArn)
+          ]
+      )
+
+instance Data.ToPath CreateIntegrationWorkflow where
+  toPath CreateIntegrationWorkflow' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/workflows/integrations"
+      ]
+
+instance Data.ToQuery CreateIntegrationWorkflow where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateIntegrationWorkflowResponse' smart constructor.
+data CreateIntegrationWorkflowResponse = CreateIntegrationWorkflowResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Unique identifier for the workflow.
+    workflowId :: Prelude.Text,
+    -- | A message indicating create request was received.
+    message :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateIntegrationWorkflowResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createIntegrationWorkflowResponse_httpStatus' - The response's http status code.
+--
+-- 'workflowId', 'createIntegrationWorkflowResponse_workflowId' - Unique identifier for the workflow.
+--
+-- 'message', 'createIntegrationWorkflowResponse_message' - A message indicating create request was received.
+newCreateIntegrationWorkflowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'workflowId'
+  Prelude.Text ->
+  -- | 'message'
+  Prelude.Text ->
+  CreateIntegrationWorkflowResponse
+newCreateIntegrationWorkflowResponse
+  pHttpStatus_
+  pWorkflowId_
+  pMessage_ =
+    CreateIntegrationWorkflowResponse'
+      { httpStatus =
+          pHttpStatus_,
+        workflowId = pWorkflowId_,
+        message = pMessage_
+      }
+
+-- | The response's http status code.
+createIntegrationWorkflowResponse_httpStatus :: Lens.Lens' CreateIntegrationWorkflowResponse Prelude.Int
+createIntegrationWorkflowResponse_httpStatus = Lens.lens (\CreateIntegrationWorkflowResponse' {httpStatus} -> httpStatus) (\s@CreateIntegrationWorkflowResponse' {} a -> s {httpStatus = a} :: CreateIntegrationWorkflowResponse)
+
+-- | Unique identifier for the workflow.
+createIntegrationWorkflowResponse_workflowId :: Lens.Lens' CreateIntegrationWorkflowResponse Prelude.Text
+createIntegrationWorkflowResponse_workflowId = Lens.lens (\CreateIntegrationWorkflowResponse' {workflowId} -> workflowId) (\s@CreateIntegrationWorkflowResponse' {} a -> s {workflowId = a} :: CreateIntegrationWorkflowResponse)
+
+-- | A message indicating create request was received.
+createIntegrationWorkflowResponse_message :: Lens.Lens' CreateIntegrationWorkflowResponse Prelude.Text
+createIntegrationWorkflowResponse_message = Lens.lens (\CreateIntegrationWorkflowResponse' {message} -> message) (\s@CreateIntegrationWorkflowResponse' {} a -> s {message = a} :: CreateIntegrationWorkflowResponse)
+
+instance
+  Prelude.NFData
+    CreateIntegrationWorkflowResponse
+  where
+  rnf CreateIntegrationWorkflowResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/CustomerProfiles/CreateProfile.hs b/gen/Amazonka/CustomerProfiles/CreateProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/CreateProfile.hs
@@ -0,0 +1,494 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.CreateProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a standard profile.
+--
+-- A standard profile represents the following attributes for a customer
+-- profile in a domain.
+module Amazonka.CustomerProfiles.CreateProfile
+  ( -- * Creating a Request
+    CreateProfile (..),
+    newCreateProfile,
+
+    -- * Request Lenses
+    createProfile_accountNumber,
+    createProfile_additionalInformation,
+    createProfile_address,
+    createProfile_attributes,
+    createProfile_billingAddress,
+    createProfile_birthDate,
+    createProfile_businessEmailAddress,
+    createProfile_businessName,
+    createProfile_businessPhoneNumber,
+    createProfile_emailAddress,
+    createProfile_firstName,
+    createProfile_gender,
+    createProfile_genderString,
+    createProfile_homePhoneNumber,
+    createProfile_lastName,
+    createProfile_mailingAddress,
+    createProfile_middleName,
+    createProfile_mobilePhoneNumber,
+    createProfile_partyType,
+    createProfile_partyTypeString,
+    createProfile_personalEmailAddress,
+    createProfile_phoneNumber,
+    createProfile_shippingAddress,
+    createProfile_domainName,
+
+    -- * Destructuring the Response
+    CreateProfileResponse (..),
+    newCreateProfileResponse,
+
+    -- * Response Lenses
+    createProfileResponse_httpStatus,
+    createProfileResponse_profileId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateProfile' smart constructor.
+data CreateProfile = CreateProfile'
+  { -- | A unique account number that you have given to the customer.
+    accountNumber :: Prelude.Maybe Prelude.Text,
+    -- | Any additional information relevant to the customer’s profile.
+    additionalInformation :: Prelude.Maybe Prelude.Text,
+    -- | A generic address associated with the customer that is not mailing,
+    -- shipping, or billing.
+    address :: Prelude.Maybe Address,
+    -- | A key value pair of attributes of a customer profile.
+    attributes :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The customer’s billing address.
+    billingAddress :: Prelude.Maybe Address,
+    -- | The customer’s birth date.
+    birthDate :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s business email address.
+    businessEmailAddress :: Prelude.Maybe Prelude.Text,
+    -- | The name of the customer’s business.
+    businessName :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s business phone number.
+    businessPhoneNumber :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s email address, which has not been specified as a personal
+    -- or business address.
+    emailAddress :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s first name.
+    firstName :: Prelude.Maybe Prelude.Text,
+    -- | The gender with which the customer identifies.
+    gender :: Prelude.Maybe Gender,
+    -- | An alternative to @Gender@ which accepts any string as input.
+    genderString :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s home phone number.
+    homePhoneNumber :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s last name.
+    lastName :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s mailing address.
+    mailingAddress :: Prelude.Maybe Address,
+    -- | The customer’s middle name.
+    middleName :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s mobile phone number.
+    mobilePhoneNumber :: Prelude.Maybe Prelude.Text,
+    -- | The type of profile used to describe the customer.
+    partyType :: Prelude.Maybe PartyType,
+    -- | An alternative to @PartyType@ which accepts any string as input.
+    partyTypeString :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s personal email address.
+    personalEmailAddress :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s phone number, which has not been specified as a mobile,
+    -- home, or business number.
+    phoneNumber :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s shipping address.
+    shippingAddress :: Prelude.Maybe Address,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountNumber', 'createProfile_accountNumber' - A unique account number that you have given to the customer.
+--
+-- 'additionalInformation', 'createProfile_additionalInformation' - Any additional information relevant to the customer’s profile.
+--
+-- 'address', 'createProfile_address' - A generic address associated with the customer that is not mailing,
+-- shipping, or billing.
+--
+-- 'attributes', 'createProfile_attributes' - A key value pair of attributes of a customer profile.
+--
+-- 'billingAddress', 'createProfile_billingAddress' - The customer’s billing address.
+--
+-- 'birthDate', 'createProfile_birthDate' - The customer’s birth date.
+--
+-- 'businessEmailAddress', 'createProfile_businessEmailAddress' - The customer’s business email address.
+--
+-- 'businessName', 'createProfile_businessName' - The name of the customer’s business.
+--
+-- 'businessPhoneNumber', 'createProfile_businessPhoneNumber' - The customer’s business phone number.
+--
+-- 'emailAddress', 'createProfile_emailAddress' - The customer’s email address, which has not been specified as a personal
+-- or business address.
+--
+-- 'firstName', 'createProfile_firstName' - The customer’s first name.
+--
+-- 'gender', 'createProfile_gender' - The gender with which the customer identifies.
+--
+-- 'genderString', 'createProfile_genderString' - An alternative to @Gender@ which accepts any string as input.
+--
+-- 'homePhoneNumber', 'createProfile_homePhoneNumber' - The customer’s home phone number.
+--
+-- 'lastName', 'createProfile_lastName' - The customer’s last name.
+--
+-- 'mailingAddress', 'createProfile_mailingAddress' - The customer’s mailing address.
+--
+-- 'middleName', 'createProfile_middleName' - The customer’s middle name.
+--
+-- 'mobilePhoneNumber', 'createProfile_mobilePhoneNumber' - The customer’s mobile phone number.
+--
+-- 'partyType', 'createProfile_partyType' - The type of profile used to describe the customer.
+--
+-- 'partyTypeString', 'createProfile_partyTypeString' - An alternative to @PartyType@ which accepts any string as input.
+--
+-- 'personalEmailAddress', 'createProfile_personalEmailAddress' - The customer’s personal email address.
+--
+-- 'phoneNumber', 'createProfile_phoneNumber' - The customer’s phone number, which has not been specified as a mobile,
+-- home, or business number.
+--
+-- 'shippingAddress', 'createProfile_shippingAddress' - The customer’s shipping address.
+--
+-- 'domainName', 'createProfile_domainName' - The unique name of the domain.
+newCreateProfile ::
+  -- | 'domainName'
+  Prelude.Text ->
+  CreateProfile
+newCreateProfile pDomainName_ =
+  CreateProfile'
+    { accountNumber = Prelude.Nothing,
+      additionalInformation = Prelude.Nothing,
+      address = Prelude.Nothing,
+      attributes = Prelude.Nothing,
+      billingAddress = Prelude.Nothing,
+      birthDate = Prelude.Nothing,
+      businessEmailAddress = Prelude.Nothing,
+      businessName = Prelude.Nothing,
+      businessPhoneNumber = Prelude.Nothing,
+      emailAddress = Prelude.Nothing,
+      firstName = Prelude.Nothing,
+      gender = Prelude.Nothing,
+      genderString = Prelude.Nothing,
+      homePhoneNumber = Prelude.Nothing,
+      lastName = Prelude.Nothing,
+      mailingAddress = Prelude.Nothing,
+      middleName = Prelude.Nothing,
+      mobilePhoneNumber = Prelude.Nothing,
+      partyType = Prelude.Nothing,
+      partyTypeString = Prelude.Nothing,
+      personalEmailAddress = Prelude.Nothing,
+      phoneNumber = Prelude.Nothing,
+      shippingAddress = Prelude.Nothing,
+      domainName = pDomainName_
+    }
+
+-- | A unique account number that you have given to the customer.
+createProfile_accountNumber :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_accountNumber = Lens.lens (\CreateProfile' {accountNumber} -> accountNumber) (\s@CreateProfile' {} a -> s {accountNumber = a} :: CreateProfile)
+
+-- | Any additional information relevant to the customer’s profile.
+createProfile_additionalInformation :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_additionalInformation = Lens.lens (\CreateProfile' {additionalInformation} -> additionalInformation) (\s@CreateProfile' {} a -> s {additionalInformation = a} :: CreateProfile)
+
+-- | A generic address associated with the customer that is not mailing,
+-- shipping, or billing.
+createProfile_address :: Lens.Lens' CreateProfile (Prelude.Maybe Address)
+createProfile_address = Lens.lens (\CreateProfile' {address} -> address) (\s@CreateProfile' {} a -> s {address = a} :: CreateProfile)
+
+-- | A key value pair of attributes of a customer profile.
+createProfile_attributes :: Lens.Lens' CreateProfile (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createProfile_attributes = Lens.lens (\CreateProfile' {attributes} -> attributes) (\s@CreateProfile' {} a -> s {attributes = a} :: CreateProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The customer’s billing address.
+createProfile_billingAddress :: Lens.Lens' CreateProfile (Prelude.Maybe Address)
+createProfile_billingAddress = Lens.lens (\CreateProfile' {billingAddress} -> billingAddress) (\s@CreateProfile' {} a -> s {billingAddress = a} :: CreateProfile)
+
+-- | The customer’s birth date.
+createProfile_birthDate :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_birthDate = Lens.lens (\CreateProfile' {birthDate} -> birthDate) (\s@CreateProfile' {} a -> s {birthDate = a} :: CreateProfile)
+
+-- | The customer’s business email address.
+createProfile_businessEmailAddress :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_businessEmailAddress = Lens.lens (\CreateProfile' {businessEmailAddress} -> businessEmailAddress) (\s@CreateProfile' {} a -> s {businessEmailAddress = a} :: CreateProfile)
+
+-- | The name of the customer’s business.
+createProfile_businessName :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_businessName = Lens.lens (\CreateProfile' {businessName} -> businessName) (\s@CreateProfile' {} a -> s {businessName = a} :: CreateProfile)
+
+-- | The customer’s business phone number.
+createProfile_businessPhoneNumber :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_businessPhoneNumber = Lens.lens (\CreateProfile' {businessPhoneNumber} -> businessPhoneNumber) (\s@CreateProfile' {} a -> s {businessPhoneNumber = a} :: CreateProfile)
+
+-- | The customer’s email address, which has not been specified as a personal
+-- or business address.
+createProfile_emailAddress :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_emailAddress = Lens.lens (\CreateProfile' {emailAddress} -> emailAddress) (\s@CreateProfile' {} a -> s {emailAddress = a} :: CreateProfile)
+
+-- | The customer’s first name.
+createProfile_firstName :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_firstName = Lens.lens (\CreateProfile' {firstName} -> firstName) (\s@CreateProfile' {} a -> s {firstName = a} :: CreateProfile)
+
+-- | The gender with which the customer identifies.
+createProfile_gender :: Lens.Lens' CreateProfile (Prelude.Maybe Gender)
+createProfile_gender = Lens.lens (\CreateProfile' {gender} -> gender) (\s@CreateProfile' {} a -> s {gender = a} :: CreateProfile)
+
+-- | An alternative to @Gender@ which accepts any string as input.
+createProfile_genderString :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_genderString = Lens.lens (\CreateProfile' {genderString} -> genderString) (\s@CreateProfile' {} a -> s {genderString = a} :: CreateProfile)
+
+-- | The customer’s home phone number.
+createProfile_homePhoneNumber :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_homePhoneNumber = Lens.lens (\CreateProfile' {homePhoneNumber} -> homePhoneNumber) (\s@CreateProfile' {} a -> s {homePhoneNumber = a} :: CreateProfile)
+
+-- | The customer’s last name.
+createProfile_lastName :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_lastName = Lens.lens (\CreateProfile' {lastName} -> lastName) (\s@CreateProfile' {} a -> s {lastName = a} :: CreateProfile)
+
+-- | The customer’s mailing address.
+createProfile_mailingAddress :: Lens.Lens' CreateProfile (Prelude.Maybe Address)
+createProfile_mailingAddress = Lens.lens (\CreateProfile' {mailingAddress} -> mailingAddress) (\s@CreateProfile' {} a -> s {mailingAddress = a} :: CreateProfile)
+
+-- | The customer’s middle name.
+createProfile_middleName :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_middleName = Lens.lens (\CreateProfile' {middleName} -> middleName) (\s@CreateProfile' {} a -> s {middleName = a} :: CreateProfile)
+
+-- | The customer’s mobile phone number.
+createProfile_mobilePhoneNumber :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_mobilePhoneNumber = Lens.lens (\CreateProfile' {mobilePhoneNumber} -> mobilePhoneNumber) (\s@CreateProfile' {} a -> s {mobilePhoneNumber = a} :: CreateProfile)
+
+-- | The type of profile used to describe the customer.
+createProfile_partyType :: Lens.Lens' CreateProfile (Prelude.Maybe PartyType)
+createProfile_partyType = Lens.lens (\CreateProfile' {partyType} -> partyType) (\s@CreateProfile' {} a -> s {partyType = a} :: CreateProfile)
+
+-- | An alternative to @PartyType@ which accepts any string as input.
+createProfile_partyTypeString :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_partyTypeString = Lens.lens (\CreateProfile' {partyTypeString} -> partyTypeString) (\s@CreateProfile' {} a -> s {partyTypeString = a} :: CreateProfile)
+
+-- | The customer’s personal email address.
+createProfile_personalEmailAddress :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_personalEmailAddress = Lens.lens (\CreateProfile' {personalEmailAddress} -> personalEmailAddress) (\s@CreateProfile' {} a -> s {personalEmailAddress = a} :: CreateProfile)
+
+-- | The customer’s phone number, which has not been specified as a mobile,
+-- home, or business number.
+createProfile_phoneNumber :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_phoneNumber = Lens.lens (\CreateProfile' {phoneNumber} -> phoneNumber) (\s@CreateProfile' {} a -> s {phoneNumber = a} :: CreateProfile)
+
+-- | The customer’s shipping address.
+createProfile_shippingAddress :: Lens.Lens' CreateProfile (Prelude.Maybe Address)
+createProfile_shippingAddress = Lens.lens (\CreateProfile' {shippingAddress} -> shippingAddress) (\s@CreateProfile' {} a -> s {shippingAddress = a} :: CreateProfile)
+
+-- | The unique name of the domain.
+createProfile_domainName :: Lens.Lens' CreateProfile Prelude.Text
+createProfile_domainName = Lens.lens (\CreateProfile' {domainName} -> domainName) (\s@CreateProfile' {} a -> s {domainName = a} :: CreateProfile)
+
+instance Core.AWSRequest CreateProfile where
+  type
+    AWSResponse CreateProfile =
+      CreateProfileResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateProfileResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "ProfileId")
+      )
+
+instance Prelude.Hashable CreateProfile where
+  hashWithSalt _salt CreateProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountNumber
+      `Prelude.hashWithSalt` additionalInformation
+      `Prelude.hashWithSalt` address
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` billingAddress
+      `Prelude.hashWithSalt` birthDate
+      `Prelude.hashWithSalt` businessEmailAddress
+      `Prelude.hashWithSalt` businessName
+      `Prelude.hashWithSalt` businessPhoneNumber
+      `Prelude.hashWithSalt` emailAddress
+      `Prelude.hashWithSalt` firstName
+      `Prelude.hashWithSalt` gender
+      `Prelude.hashWithSalt` genderString
+      `Prelude.hashWithSalt` homePhoneNumber
+      `Prelude.hashWithSalt` lastName
+      `Prelude.hashWithSalt` mailingAddress
+      `Prelude.hashWithSalt` middleName
+      `Prelude.hashWithSalt` mobilePhoneNumber
+      `Prelude.hashWithSalt` partyType
+      `Prelude.hashWithSalt` partyTypeString
+      `Prelude.hashWithSalt` personalEmailAddress
+      `Prelude.hashWithSalt` phoneNumber
+      `Prelude.hashWithSalt` shippingAddress
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData CreateProfile where
+  rnf CreateProfile' {..} =
+    Prelude.rnf accountNumber
+      `Prelude.seq` Prelude.rnf additionalInformation
+      `Prelude.seq` Prelude.rnf address
+      `Prelude.seq` Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf billingAddress
+      `Prelude.seq` Prelude.rnf birthDate
+      `Prelude.seq` Prelude.rnf businessEmailAddress
+      `Prelude.seq` Prelude.rnf businessName
+      `Prelude.seq` Prelude.rnf businessPhoneNumber
+      `Prelude.seq` Prelude.rnf emailAddress
+      `Prelude.seq` Prelude.rnf firstName
+      `Prelude.seq` Prelude.rnf gender
+      `Prelude.seq` Prelude.rnf genderString
+      `Prelude.seq` Prelude.rnf homePhoneNumber
+      `Prelude.seq` Prelude.rnf lastName
+      `Prelude.seq` Prelude.rnf mailingAddress
+      `Prelude.seq` Prelude.rnf middleName
+      `Prelude.seq` Prelude.rnf mobilePhoneNumber
+      `Prelude.seq` Prelude.rnf partyType
+      `Prelude.seq` Prelude.rnf partyTypeString
+      `Prelude.seq` Prelude.rnf
+        personalEmailAddress
+      `Prelude.seq` Prelude.rnf phoneNumber
+      `Prelude.seq` Prelude.rnf
+        shippingAddress
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders CreateProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateProfile where
+  toJSON CreateProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccountNumber" Data..=) Prelude.<$> accountNumber,
+            ("AdditionalInformation" Data..=)
+              Prelude.<$> additionalInformation,
+            ("Address" Data..=) Prelude.<$> address,
+            ("Attributes" Data..=) Prelude.<$> attributes,
+            ("BillingAddress" Data..=)
+              Prelude.<$> billingAddress,
+            ("BirthDate" Data..=) Prelude.<$> birthDate,
+            ("BusinessEmailAddress" Data..=)
+              Prelude.<$> businessEmailAddress,
+            ("BusinessName" Data..=) Prelude.<$> businessName,
+            ("BusinessPhoneNumber" Data..=)
+              Prelude.<$> businessPhoneNumber,
+            ("EmailAddress" Data..=) Prelude.<$> emailAddress,
+            ("FirstName" Data..=) Prelude.<$> firstName,
+            ("Gender" Data..=) Prelude.<$> gender,
+            ("GenderString" Data..=) Prelude.<$> genderString,
+            ("HomePhoneNumber" Data..=)
+              Prelude.<$> homePhoneNumber,
+            ("LastName" Data..=) Prelude.<$> lastName,
+            ("MailingAddress" Data..=)
+              Prelude.<$> mailingAddress,
+            ("MiddleName" Data..=) Prelude.<$> middleName,
+            ("MobilePhoneNumber" Data..=)
+              Prelude.<$> mobilePhoneNumber,
+            ("PartyType" Data..=) Prelude.<$> partyType,
+            ("PartyTypeString" Data..=)
+              Prelude.<$> partyTypeString,
+            ("PersonalEmailAddress" Data..=)
+              Prelude.<$> personalEmailAddress,
+            ("PhoneNumber" Data..=) Prelude.<$> phoneNumber,
+            ("ShippingAddress" Data..=)
+              Prelude.<$> shippingAddress
+          ]
+      )
+
+instance Data.ToPath CreateProfile where
+  toPath CreateProfile' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainName, "/profiles"]
+
+instance Data.ToQuery CreateProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateProfileResponse' smart constructor.
+data CreateProfileResponse = CreateProfileResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The unique identifier of a customer profile.
+    profileId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createProfileResponse_httpStatus' - The response's http status code.
+--
+-- 'profileId', 'createProfileResponse_profileId' - The unique identifier of a customer profile.
+newCreateProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'profileId'
+  Prelude.Text ->
+  CreateProfileResponse
+newCreateProfileResponse pHttpStatus_ pProfileId_ =
+  CreateProfileResponse'
+    { httpStatus = pHttpStatus_,
+      profileId = pProfileId_
+    }
+
+-- | The response's http status code.
+createProfileResponse_httpStatus :: Lens.Lens' CreateProfileResponse Prelude.Int
+createProfileResponse_httpStatus = Lens.lens (\CreateProfileResponse' {httpStatus} -> httpStatus) (\s@CreateProfileResponse' {} a -> s {httpStatus = a} :: CreateProfileResponse)
+
+-- | The unique identifier of a customer profile.
+createProfileResponse_profileId :: Lens.Lens' CreateProfileResponse Prelude.Text
+createProfileResponse_profileId = Lens.lens (\CreateProfileResponse' {profileId} -> profileId) (\s@CreateProfileResponse' {} a -> s {profileId = a} :: CreateProfileResponse)
+
+instance Prelude.NFData CreateProfileResponse where
+  rnf CreateProfileResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf profileId
diff --git a/gen/Amazonka/CustomerProfiles/DeleteDomain.hs b/gen/Amazonka/CustomerProfiles/DeleteDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/DeleteDomain.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.DeleteDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a specific domain and all of its customer data, such as customer
+-- profile attributes and their related objects.
+module Amazonka.CustomerProfiles.DeleteDomain
+  ( -- * Creating a Request
+    DeleteDomain (..),
+    newDeleteDomain,
+
+    -- * Request Lenses
+    deleteDomain_domainName,
+
+    -- * Destructuring the Response
+    DeleteDomainResponse (..),
+    newDeleteDomainResponse,
+
+    -- * Response Lenses
+    deleteDomainResponse_httpStatus,
+    deleteDomainResponse_message,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDomain' smart constructor.
+data DeleteDomain = DeleteDomain'
+  { -- | The unique name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'deleteDomain_domainName' - The unique name of the domain.
+newDeleteDomain ::
+  -- | 'domainName'
+  Prelude.Text ->
+  DeleteDomain
+newDeleteDomain pDomainName_ =
+  DeleteDomain' {domainName = pDomainName_}
+
+-- | The unique name of the domain.
+deleteDomain_domainName :: Lens.Lens' DeleteDomain Prelude.Text
+deleteDomain_domainName = Lens.lens (\DeleteDomain' {domainName} -> domainName) (\s@DeleteDomain' {} a -> s {domainName = a} :: DeleteDomain)
+
+instance Core.AWSRequest DeleteDomain where
+  type AWSResponse DeleteDomain = DeleteDomainResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteDomainResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Message")
+      )
+
+instance Prelude.Hashable DeleteDomain where
+  hashWithSalt _salt DeleteDomain' {..} =
+    _salt `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData DeleteDomain where
+  rnf DeleteDomain' {..} = Prelude.rnf domainName
+
+instance Data.ToHeaders DeleteDomain where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteDomain where
+  toPath DeleteDomain' {..} =
+    Prelude.mconcat ["/domains/", Data.toBS domainName]
+
+instance Data.ToQuery DeleteDomain where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDomainResponse' smart constructor.
+data DeleteDomainResponse = DeleteDomainResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A message that indicates the delete request is done.
+    message :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteDomainResponse_httpStatus' - The response's http status code.
+--
+-- 'message', 'deleteDomainResponse_message' - A message that indicates the delete request is done.
+newDeleteDomainResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'message'
+  Prelude.Text ->
+  DeleteDomainResponse
+newDeleteDomainResponse pHttpStatus_ pMessage_ =
+  DeleteDomainResponse'
+    { httpStatus = pHttpStatus_,
+      message = pMessage_
+    }
+
+-- | The response's http status code.
+deleteDomainResponse_httpStatus :: Lens.Lens' DeleteDomainResponse Prelude.Int
+deleteDomainResponse_httpStatus = Lens.lens (\DeleteDomainResponse' {httpStatus} -> httpStatus) (\s@DeleteDomainResponse' {} a -> s {httpStatus = a} :: DeleteDomainResponse)
+
+-- | A message that indicates the delete request is done.
+deleteDomainResponse_message :: Lens.Lens' DeleteDomainResponse Prelude.Text
+deleteDomainResponse_message = Lens.lens (\DeleteDomainResponse' {message} -> message) (\s@DeleteDomainResponse' {} a -> s {message = a} :: DeleteDomainResponse)
+
+instance Prelude.NFData DeleteDomainResponse where
+  rnf DeleteDomainResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/CustomerProfiles/DeleteIntegration.hs b/gen/Amazonka/CustomerProfiles/DeleteIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/DeleteIntegration.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.DeleteIntegration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes an integration from a specific domain.
+module Amazonka.CustomerProfiles.DeleteIntegration
+  ( -- * Creating a Request
+    DeleteIntegration (..),
+    newDeleteIntegration,
+
+    -- * Request Lenses
+    deleteIntegration_domainName,
+    deleteIntegration_uri,
+
+    -- * Destructuring the Response
+    DeleteIntegrationResponse (..),
+    newDeleteIntegrationResponse,
+
+    -- * Response Lenses
+    deleteIntegrationResponse_httpStatus,
+    deleteIntegrationResponse_message,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteIntegration' smart constructor.
+data DeleteIntegration = DeleteIntegration'
+  { -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The URI of the S3 bucket or any other type of data source.
+    uri :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'deleteIntegration_domainName' - The unique name of the domain.
+--
+-- 'uri', 'deleteIntegration_uri' - The URI of the S3 bucket or any other type of data source.
+newDeleteIntegration ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'uri'
+  Prelude.Text ->
+  DeleteIntegration
+newDeleteIntegration pDomainName_ pUri_ =
+  DeleteIntegration'
+    { domainName = pDomainName_,
+      uri = pUri_
+    }
+
+-- | The unique name of the domain.
+deleteIntegration_domainName :: Lens.Lens' DeleteIntegration Prelude.Text
+deleteIntegration_domainName = Lens.lens (\DeleteIntegration' {domainName} -> domainName) (\s@DeleteIntegration' {} a -> s {domainName = a} :: DeleteIntegration)
+
+-- | The URI of the S3 bucket or any other type of data source.
+deleteIntegration_uri :: Lens.Lens' DeleteIntegration Prelude.Text
+deleteIntegration_uri = Lens.lens (\DeleteIntegration' {uri} -> uri) (\s@DeleteIntegration' {} a -> s {uri = a} :: DeleteIntegration)
+
+instance Core.AWSRequest DeleteIntegration where
+  type
+    AWSResponse DeleteIntegration =
+      DeleteIntegrationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteIntegrationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Message")
+      )
+
+instance Prelude.Hashable DeleteIntegration where
+  hashWithSalt _salt DeleteIntegration' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` uri
+
+instance Prelude.NFData DeleteIntegration where
+  rnf DeleteIntegration' {..} =
+    Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf uri
+
+instance Data.ToHeaders DeleteIntegration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteIntegration where
+  toJSON DeleteIntegration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Uri" Data..= uri)]
+      )
+
+instance Data.ToPath DeleteIntegration where
+  toPath DeleteIntegration' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/integrations/delete"
+      ]
+
+instance Data.ToQuery DeleteIntegration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteIntegrationResponse' smart constructor.
+data DeleteIntegrationResponse = DeleteIntegrationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A message that indicates the delete request is done.
+    message :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIntegrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteIntegrationResponse_httpStatus' - The response's http status code.
+--
+-- 'message', 'deleteIntegrationResponse_message' - A message that indicates the delete request is done.
+newDeleteIntegrationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'message'
+  Prelude.Text ->
+  DeleteIntegrationResponse
+newDeleteIntegrationResponse pHttpStatus_ pMessage_ =
+  DeleteIntegrationResponse'
+    { httpStatus =
+        pHttpStatus_,
+      message = pMessage_
+    }
+
+-- | The response's http status code.
+deleteIntegrationResponse_httpStatus :: Lens.Lens' DeleteIntegrationResponse Prelude.Int
+deleteIntegrationResponse_httpStatus = Lens.lens (\DeleteIntegrationResponse' {httpStatus} -> httpStatus) (\s@DeleteIntegrationResponse' {} a -> s {httpStatus = a} :: DeleteIntegrationResponse)
+
+-- | A message that indicates the delete request is done.
+deleteIntegrationResponse_message :: Lens.Lens' DeleteIntegrationResponse Prelude.Text
+deleteIntegrationResponse_message = Lens.lens (\DeleteIntegrationResponse' {message} -> message) (\s@DeleteIntegrationResponse' {} a -> s {message = a} :: DeleteIntegrationResponse)
+
+instance Prelude.NFData DeleteIntegrationResponse where
+  rnf DeleteIntegrationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/CustomerProfiles/DeleteProfile.hs b/gen/Amazonka/CustomerProfiles/DeleteProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/DeleteProfile.hs
@@ -0,0 +1,187 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.DeleteProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the standard customer profile and all data pertaining to the
+-- profile.
+module Amazonka.CustomerProfiles.DeleteProfile
+  ( -- * Creating a Request
+    DeleteProfile (..),
+    newDeleteProfile,
+
+    -- * Request Lenses
+    deleteProfile_profileId,
+    deleteProfile_domainName,
+
+    -- * Destructuring the Response
+    DeleteProfileResponse (..),
+    newDeleteProfileResponse,
+
+    -- * Response Lenses
+    deleteProfileResponse_message,
+    deleteProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteProfile' smart constructor.
+data DeleteProfile = DeleteProfile'
+  { -- | The unique identifier of a customer profile.
+    profileId :: Prelude.Text,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'profileId', 'deleteProfile_profileId' - The unique identifier of a customer profile.
+--
+-- 'domainName', 'deleteProfile_domainName' - The unique name of the domain.
+newDeleteProfile ::
+  -- | 'profileId'
+  Prelude.Text ->
+  -- | 'domainName'
+  Prelude.Text ->
+  DeleteProfile
+newDeleteProfile pProfileId_ pDomainName_ =
+  DeleteProfile'
+    { profileId = pProfileId_,
+      domainName = pDomainName_
+    }
+
+-- | The unique identifier of a customer profile.
+deleteProfile_profileId :: Lens.Lens' DeleteProfile Prelude.Text
+deleteProfile_profileId = Lens.lens (\DeleteProfile' {profileId} -> profileId) (\s@DeleteProfile' {} a -> s {profileId = a} :: DeleteProfile)
+
+-- | The unique name of the domain.
+deleteProfile_domainName :: Lens.Lens' DeleteProfile Prelude.Text
+deleteProfile_domainName = Lens.lens (\DeleteProfile' {domainName} -> domainName) (\s@DeleteProfile' {} a -> s {domainName = a} :: DeleteProfile)
+
+instance Core.AWSRequest DeleteProfile where
+  type
+    AWSResponse DeleteProfile =
+      DeleteProfileResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteProfileResponse'
+            Prelude.<$> (x Data..?> "Message")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteProfile where
+  hashWithSalt _salt DeleteProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` profileId
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData DeleteProfile where
+  rnf DeleteProfile' {..} =
+    Prelude.rnf profileId
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders DeleteProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteProfile where
+  toJSON DeleteProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ProfileId" Data..= profileId)]
+      )
+
+instance Data.ToPath DeleteProfile where
+  toPath DeleteProfile' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/profiles/delete"
+      ]
+
+instance Data.ToQuery DeleteProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteProfileResponse' smart constructor.
+data DeleteProfileResponse = DeleteProfileResponse'
+  { -- | A message that indicates the delete request is done.
+    message :: 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 'DeleteProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteProfileResponse_message' - A message that indicates the delete request is done.
+--
+-- 'httpStatus', 'deleteProfileResponse_httpStatus' - The response's http status code.
+newDeleteProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteProfileResponse
+newDeleteProfileResponse pHttpStatus_ =
+  DeleteProfileResponse'
+    { message = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A message that indicates the delete request is done.
+deleteProfileResponse_message :: Lens.Lens' DeleteProfileResponse (Prelude.Maybe Prelude.Text)
+deleteProfileResponse_message = Lens.lens (\DeleteProfileResponse' {message} -> message) (\s@DeleteProfileResponse' {} a -> s {message = a} :: DeleteProfileResponse)
+
+-- | The response's http status code.
+deleteProfileResponse_httpStatus :: Lens.Lens' DeleteProfileResponse Prelude.Int
+deleteProfileResponse_httpStatus = Lens.lens (\DeleteProfileResponse' {httpStatus} -> httpStatus) (\s@DeleteProfileResponse' {} a -> s {httpStatus = a} :: DeleteProfileResponse)
+
+instance Prelude.NFData DeleteProfileResponse where
+  rnf DeleteProfileResponse' {..} =
+    Prelude.rnf message
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/DeleteProfileKey.hs b/gen/Amazonka/CustomerProfiles/DeleteProfileKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/DeleteProfileKey.hs
@@ -0,0 +1,219 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.DeleteProfileKey
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a searchable key from a customer profile.
+module Amazonka.CustomerProfiles.DeleteProfileKey
+  ( -- * Creating a Request
+    DeleteProfileKey (..),
+    newDeleteProfileKey,
+
+    -- * Request Lenses
+    deleteProfileKey_profileId,
+    deleteProfileKey_keyName,
+    deleteProfileKey_values,
+    deleteProfileKey_domainName,
+
+    -- * Destructuring the Response
+    DeleteProfileKeyResponse (..),
+    newDeleteProfileKeyResponse,
+
+    -- * Response Lenses
+    deleteProfileKeyResponse_message,
+    deleteProfileKeyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteProfileKey' smart constructor.
+data DeleteProfileKey = DeleteProfileKey'
+  { -- | The unique identifier of a customer profile.
+    profileId :: Prelude.Text,
+    -- | A searchable identifier of a customer profile.
+    keyName :: Prelude.Text,
+    -- | A list of key values.
+    values :: [Prelude.Text],
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteProfileKey' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'profileId', 'deleteProfileKey_profileId' - The unique identifier of a customer profile.
+--
+-- 'keyName', 'deleteProfileKey_keyName' - A searchable identifier of a customer profile.
+--
+-- 'values', 'deleteProfileKey_values' - A list of key values.
+--
+-- 'domainName', 'deleteProfileKey_domainName' - The unique name of the domain.
+newDeleteProfileKey ::
+  -- | 'profileId'
+  Prelude.Text ->
+  -- | 'keyName'
+  Prelude.Text ->
+  -- | 'domainName'
+  Prelude.Text ->
+  DeleteProfileKey
+newDeleteProfileKey
+  pProfileId_
+  pKeyName_
+  pDomainName_ =
+    DeleteProfileKey'
+      { profileId = pProfileId_,
+        keyName = pKeyName_,
+        values = Prelude.mempty,
+        domainName = pDomainName_
+      }
+
+-- | The unique identifier of a customer profile.
+deleteProfileKey_profileId :: Lens.Lens' DeleteProfileKey Prelude.Text
+deleteProfileKey_profileId = Lens.lens (\DeleteProfileKey' {profileId} -> profileId) (\s@DeleteProfileKey' {} a -> s {profileId = a} :: DeleteProfileKey)
+
+-- | A searchable identifier of a customer profile.
+deleteProfileKey_keyName :: Lens.Lens' DeleteProfileKey Prelude.Text
+deleteProfileKey_keyName = Lens.lens (\DeleteProfileKey' {keyName} -> keyName) (\s@DeleteProfileKey' {} a -> s {keyName = a} :: DeleteProfileKey)
+
+-- | A list of key values.
+deleteProfileKey_values :: Lens.Lens' DeleteProfileKey [Prelude.Text]
+deleteProfileKey_values = Lens.lens (\DeleteProfileKey' {values} -> values) (\s@DeleteProfileKey' {} a -> s {values = a} :: DeleteProfileKey) Prelude.. Lens.coerced
+
+-- | The unique name of the domain.
+deleteProfileKey_domainName :: Lens.Lens' DeleteProfileKey Prelude.Text
+deleteProfileKey_domainName = Lens.lens (\DeleteProfileKey' {domainName} -> domainName) (\s@DeleteProfileKey' {} a -> s {domainName = a} :: DeleteProfileKey)
+
+instance Core.AWSRequest DeleteProfileKey where
+  type
+    AWSResponse DeleteProfileKey =
+      DeleteProfileKeyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteProfileKeyResponse'
+            Prelude.<$> (x Data..?> "Message")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteProfileKey where
+  hashWithSalt _salt DeleteProfileKey' {..} =
+    _salt
+      `Prelude.hashWithSalt` profileId
+      `Prelude.hashWithSalt` keyName
+      `Prelude.hashWithSalt` values
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData DeleteProfileKey where
+  rnf DeleteProfileKey' {..} =
+    Prelude.rnf profileId
+      `Prelude.seq` Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf values
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders DeleteProfileKey where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteProfileKey where
+  toJSON DeleteProfileKey' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ProfileId" Data..= profileId),
+            Prelude.Just ("KeyName" Data..= keyName),
+            Prelude.Just ("Values" Data..= values)
+          ]
+      )
+
+instance Data.ToPath DeleteProfileKey where
+  toPath DeleteProfileKey' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/profiles/keys/delete"
+      ]
+
+instance Data.ToQuery DeleteProfileKey where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteProfileKeyResponse' smart constructor.
+data DeleteProfileKeyResponse = DeleteProfileKeyResponse'
+  { -- | A message that indicates the delete request is done.
+    message :: 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 'DeleteProfileKeyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteProfileKeyResponse_message' - A message that indicates the delete request is done.
+--
+-- 'httpStatus', 'deleteProfileKeyResponse_httpStatus' - The response's http status code.
+newDeleteProfileKeyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteProfileKeyResponse
+newDeleteProfileKeyResponse pHttpStatus_ =
+  DeleteProfileKeyResponse'
+    { message =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A message that indicates the delete request is done.
+deleteProfileKeyResponse_message :: Lens.Lens' DeleteProfileKeyResponse (Prelude.Maybe Prelude.Text)
+deleteProfileKeyResponse_message = Lens.lens (\DeleteProfileKeyResponse' {message} -> message) (\s@DeleteProfileKeyResponse' {} a -> s {message = a} :: DeleteProfileKeyResponse)
+
+-- | The response's http status code.
+deleteProfileKeyResponse_httpStatus :: Lens.Lens' DeleteProfileKeyResponse Prelude.Int
+deleteProfileKeyResponse_httpStatus = Lens.lens (\DeleteProfileKeyResponse' {httpStatus} -> httpStatus) (\s@DeleteProfileKeyResponse' {} a -> s {httpStatus = a} :: DeleteProfileKeyResponse)
+
+instance Prelude.NFData DeleteProfileKeyResponse where
+  rnf DeleteProfileKeyResponse' {..} =
+    Prelude.rnf message
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/DeleteProfileObject.hs b/gen/Amazonka/CustomerProfiles/DeleteProfileObject.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/DeleteProfileObject.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.CustomerProfiles.DeleteProfileObject
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes an object associated with a profile of a given
+-- ProfileObjectType.
+module Amazonka.CustomerProfiles.DeleteProfileObject
+  ( -- * Creating a Request
+    DeleteProfileObject (..),
+    newDeleteProfileObject,
+
+    -- * Request Lenses
+    deleteProfileObject_profileId,
+    deleteProfileObject_profileObjectUniqueKey,
+    deleteProfileObject_objectTypeName,
+    deleteProfileObject_domainName,
+
+    -- * Destructuring the Response
+    DeleteProfileObjectResponse (..),
+    newDeleteProfileObjectResponse,
+
+    -- * Response Lenses
+    deleteProfileObjectResponse_message,
+    deleteProfileObjectResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteProfileObject' smart constructor.
+data DeleteProfileObject = DeleteProfileObject'
+  { -- | The unique identifier of a customer profile.
+    profileId :: Prelude.Text,
+    -- | The unique identifier of the profile object generated by the service.
+    profileObjectUniqueKey :: Prelude.Text,
+    -- | The name of the profile object type.
+    objectTypeName :: Prelude.Text,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteProfileObject' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'profileId', 'deleteProfileObject_profileId' - The unique identifier of a customer profile.
+--
+-- 'profileObjectUniqueKey', 'deleteProfileObject_profileObjectUniqueKey' - The unique identifier of the profile object generated by the service.
+--
+-- 'objectTypeName', 'deleteProfileObject_objectTypeName' - The name of the profile object type.
+--
+-- 'domainName', 'deleteProfileObject_domainName' - The unique name of the domain.
+newDeleteProfileObject ::
+  -- | 'profileId'
+  Prelude.Text ->
+  -- | 'profileObjectUniqueKey'
+  Prelude.Text ->
+  -- | 'objectTypeName'
+  Prelude.Text ->
+  -- | 'domainName'
+  Prelude.Text ->
+  DeleteProfileObject
+newDeleteProfileObject
+  pProfileId_
+  pProfileObjectUniqueKey_
+  pObjectTypeName_
+  pDomainName_ =
+    DeleteProfileObject'
+      { profileId = pProfileId_,
+        profileObjectUniqueKey = pProfileObjectUniqueKey_,
+        objectTypeName = pObjectTypeName_,
+        domainName = pDomainName_
+      }
+
+-- | The unique identifier of a customer profile.
+deleteProfileObject_profileId :: Lens.Lens' DeleteProfileObject Prelude.Text
+deleteProfileObject_profileId = Lens.lens (\DeleteProfileObject' {profileId} -> profileId) (\s@DeleteProfileObject' {} a -> s {profileId = a} :: DeleteProfileObject)
+
+-- | The unique identifier of the profile object generated by the service.
+deleteProfileObject_profileObjectUniqueKey :: Lens.Lens' DeleteProfileObject Prelude.Text
+deleteProfileObject_profileObjectUniqueKey = Lens.lens (\DeleteProfileObject' {profileObjectUniqueKey} -> profileObjectUniqueKey) (\s@DeleteProfileObject' {} a -> s {profileObjectUniqueKey = a} :: DeleteProfileObject)
+
+-- | The name of the profile object type.
+deleteProfileObject_objectTypeName :: Lens.Lens' DeleteProfileObject Prelude.Text
+deleteProfileObject_objectTypeName = Lens.lens (\DeleteProfileObject' {objectTypeName} -> objectTypeName) (\s@DeleteProfileObject' {} a -> s {objectTypeName = a} :: DeleteProfileObject)
+
+-- | The unique name of the domain.
+deleteProfileObject_domainName :: Lens.Lens' DeleteProfileObject Prelude.Text
+deleteProfileObject_domainName = Lens.lens (\DeleteProfileObject' {domainName} -> domainName) (\s@DeleteProfileObject' {} a -> s {domainName = a} :: DeleteProfileObject)
+
+instance Core.AWSRequest DeleteProfileObject where
+  type
+    AWSResponse DeleteProfileObject =
+      DeleteProfileObjectResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteProfileObjectResponse'
+            Prelude.<$> (x Data..?> "Message")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteProfileObject where
+  hashWithSalt _salt DeleteProfileObject' {..} =
+    _salt
+      `Prelude.hashWithSalt` profileId
+      `Prelude.hashWithSalt` profileObjectUniqueKey
+      `Prelude.hashWithSalt` objectTypeName
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData DeleteProfileObject where
+  rnf DeleteProfileObject' {..} =
+    Prelude.rnf profileId
+      `Prelude.seq` Prelude.rnf profileObjectUniqueKey
+      `Prelude.seq` Prelude.rnf objectTypeName
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders DeleteProfileObject where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteProfileObject where
+  toJSON DeleteProfileObject' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ProfileId" Data..= profileId),
+            Prelude.Just
+              ( "ProfileObjectUniqueKey"
+                  Data..= profileObjectUniqueKey
+              ),
+            Prelude.Just
+              ("ObjectTypeName" Data..= objectTypeName)
+          ]
+      )
+
+instance Data.ToPath DeleteProfileObject where
+  toPath DeleteProfileObject' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/profiles/objects/delete"
+      ]
+
+instance Data.ToQuery DeleteProfileObject where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteProfileObjectResponse' smart constructor.
+data DeleteProfileObjectResponse = DeleteProfileObjectResponse'
+  { -- | A message that indicates the delete request is done.
+    message :: 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 'DeleteProfileObjectResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteProfileObjectResponse_message' - A message that indicates the delete request is done.
+--
+-- 'httpStatus', 'deleteProfileObjectResponse_httpStatus' - The response's http status code.
+newDeleteProfileObjectResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteProfileObjectResponse
+newDeleteProfileObjectResponse pHttpStatus_ =
+  DeleteProfileObjectResponse'
+    { message =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A message that indicates the delete request is done.
+deleteProfileObjectResponse_message :: Lens.Lens' DeleteProfileObjectResponse (Prelude.Maybe Prelude.Text)
+deleteProfileObjectResponse_message = Lens.lens (\DeleteProfileObjectResponse' {message} -> message) (\s@DeleteProfileObjectResponse' {} a -> s {message = a} :: DeleteProfileObjectResponse)
+
+-- | The response's http status code.
+deleteProfileObjectResponse_httpStatus :: Lens.Lens' DeleteProfileObjectResponse Prelude.Int
+deleteProfileObjectResponse_httpStatus = Lens.lens (\DeleteProfileObjectResponse' {httpStatus} -> httpStatus) (\s@DeleteProfileObjectResponse' {} a -> s {httpStatus = a} :: DeleteProfileObjectResponse)
+
+instance Prelude.NFData DeleteProfileObjectResponse where
+  rnf DeleteProfileObjectResponse' {..} =
+    Prelude.rnf message
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/DeleteProfileObjectType.hs b/gen/Amazonka/CustomerProfiles/DeleteProfileObjectType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/DeleteProfileObjectType.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.CustomerProfiles.DeleteProfileObjectType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a ProfileObjectType from a specific domain as well as removes
+-- all the ProfileObjects of that type. It also disables integrations from
+-- this specific ProfileObjectType. In addition, it scrubs all of the
+-- fields of the standard profile that were populated from this
+-- ProfileObjectType.
+module Amazonka.CustomerProfiles.DeleteProfileObjectType
+  ( -- * Creating a Request
+    DeleteProfileObjectType (..),
+    newDeleteProfileObjectType,
+
+    -- * Request Lenses
+    deleteProfileObjectType_domainName,
+    deleteProfileObjectType_objectTypeName,
+
+    -- * Destructuring the Response
+    DeleteProfileObjectTypeResponse (..),
+    newDeleteProfileObjectTypeResponse,
+
+    -- * Response Lenses
+    deleteProfileObjectTypeResponse_httpStatus,
+    deleteProfileObjectTypeResponse_message,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteProfileObjectType' smart constructor.
+data DeleteProfileObjectType = DeleteProfileObjectType'
+  { -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The name of the profile object type.
+    objectTypeName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteProfileObjectType' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'deleteProfileObjectType_domainName' - The unique name of the domain.
+--
+-- 'objectTypeName', 'deleteProfileObjectType_objectTypeName' - The name of the profile object type.
+newDeleteProfileObjectType ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'objectTypeName'
+  Prelude.Text ->
+  DeleteProfileObjectType
+newDeleteProfileObjectType
+  pDomainName_
+  pObjectTypeName_ =
+    DeleteProfileObjectType'
+      { domainName = pDomainName_,
+        objectTypeName = pObjectTypeName_
+      }
+
+-- | The unique name of the domain.
+deleteProfileObjectType_domainName :: Lens.Lens' DeleteProfileObjectType Prelude.Text
+deleteProfileObjectType_domainName = Lens.lens (\DeleteProfileObjectType' {domainName} -> domainName) (\s@DeleteProfileObjectType' {} a -> s {domainName = a} :: DeleteProfileObjectType)
+
+-- | The name of the profile object type.
+deleteProfileObjectType_objectTypeName :: Lens.Lens' DeleteProfileObjectType Prelude.Text
+deleteProfileObjectType_objectTypeName = Lens.lens (\DeleteProfileObjectType' {objectTypeName} -> objectTypeName) (\s@DeleteProfileObjectType' {} a -> s {objectTypeName = a} :: DeleteProfileObjectType)
+
+instance Core.AWSRequest DeleteProfileObjectType where
+  type
+    AWSResponse DeleteProfileObjectType =
+      DeleteProfileObjectTypeResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteProfileObjectTypeResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Message")
+      )
+
+instance Prelude.Hashable DeleteProfileObjectType where
+  hashWithSalt _salt DeleteProfileObjectType' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` objectTypeName
+
+instance Prelude.NFData DeleteProfileObjectType where
+  rnf DeleteProfileObjectType' {..} =
+    Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf objectTypeName
+
+instance Data.ToHeaders DeleteProfileObjectType where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteProfileObjectType where
+  toPath DeleteProfileObjectType' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/object-types/",
+        Data.toBS objectTypeName
+      ]
+
+instance Data.ToQuery DeleteProfileObjectType where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteProfileObjectTypeResponse' smart constructor.
+data DeleteProfileObjectTypeResponse = DeleteProfileObjectTypeResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A message that indicates the delete request is done.
+    message :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteProfileObjectTypeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteProfileObjectTypeResponse_httpStatus' - The response's http status code.
+--
+-- 'message', 'deleteProfileObjectTypeResponse_message' - A message that indicates the delete request is done.
+newDeleteProfileObjectTypeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'message'
+  Prelude.Text ->
+  DeleteProfileObjectTypeResponse
+newDeleteProfileObjectTypeResponse
+  pHttpStatus_
+  pMessage_ =
+    DeleteProfileObjectTypeResponse'
+      { httpStatus =
+          pHttpStatus_,
+        message = pMessage_
+      }
+
+-- | The response's http status code.
+deleteProfileObjectTypeResponse_httpStatus :: Lens.Lens' DeleteProfileObjectTypeResponse Prelude.Int
+deleteProfileObjectTypeResponse_httpStatus = Lens.lens (\DeleteProfileObjectTypeResponse' {httpStatus} -> httpStatus) (\s@DeleteProfileObjectTypeResponse' {} a -> s {httpStatus = a} :: DeleteProfileObjectTypeResponse)
+
+-- | A message that indicates the delete request is done.
+deleteProfileObjectTypeResponse_message :: Lens.Lens' DeleteProfileObjectTypeResponse Prelude.Text
+deleteProfileObjectTypeResponse_message = Lens.lens (\DeleteProfileObjectTypeResponse' {message} -> message) (\s@DeleteProfileObjectTypeResponse' {} a -> s {message = a} :: DeleteProfileObjectTypeResponse)
+
+instance
+  Prelude.NFData
+    DeleteProfileObjectTypeResponse
+  where
+  rnf DeleteProfileObjectTypeResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/CustomerProfiles/DeleteWorkflow.hs b/gen/Amazonka/CustomerProfiles/DeleteWorkflow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/DeleteWorkflow.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.CustomerProfiles.DeleteWorkflow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified workflow and all its corresponding resources. This
+-- is an async process.
+module Amazonka.CustomerProfiles.DeleteWorkflow
+  ( -- * Creating a Request
+    DeleteWorkflow (..),
+    newDeleteWorkflow,
+
+    -- * Request Lenses
+    deleteWorkflow_domainName,
+    deleteWorkflow_workflowId,
+
+    -- * Destructuring the Response
+    DeleteWorkflowResponse (..),
+    newDeleteWorkflowResponse,
+
+    -- * Response Lenses
+    deleteWorkflowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteWorkflow' smart constructor.
+data DeleteWorkflow = DeleteWorkflow'
+  { -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | Unique identifier for the workflow.
+    workflowId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorkflow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'deleteWorkflow_domainName' - The unique name of the domain.
+--
+-- 'workflowId', 'deleteWorkflow_workflowId' - Unique identifier for the workflow.
+newDeleteWorkflow ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'workflowId'
+  Prelude.Text ->
+  DeleteWorkflow
+newDeleteWorkflow pDomainName_ pWorkflowId_ =
+  DeleteWorkflow'
+    { domainName = pDomainName_,
+      workflowId = pWorkflowId_
+    }
+
+-- | The unique name of the domain.
+deleteWorkflow_domainName :: Lens.Lens' DeleteWorkflow Prelude.Text
+deleteWorkflow_domainName = Lens.lens (\DeleteWorkflow' {domainName} -> domainName) (\s@DeleteWorkflow' {} a -> s {domainName = a} :: DeleteWorkflow)
+
+-- | Unique identifier for the workflow.
+deleteWorkflow_workflowId :: Lens.Lens' DeleteWorkflow Prelude.Text
+deleteWorkflow_workflowId = Lens.lens (\DeleteWorkflow' {workflowId} -> workflowId) (\s@DeleteWorkflow' {} a -> s {workflowId = a} :: DeleteWorkflow)
+
+instance Core.AWSRequest DeleteWorkflow where
+  type
+    AWSResponse DeleteWorkflow =
+      DeleteWorkflowResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteWorkflowResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteWorkflow where
+  hashWithSalt _salt DeleteWorkflow' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` workflowId
+
+instance Prelude.NFData DeleteWorkflow where
+  rnf DeleteWorkflow' {..} =
+    Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf workflowId
+
+instance Data.ToHeaders DeleteWorkflow where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteWorkflow where
+  toPath DeleteWorkflow' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/workflows/",
+        Data.toBS workflowId
+      ]
+
+instance Data.ToQuery DeleteWorkflow where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteWorkflowResponse' smart constructor.
+data DeleteWorkflowResponse = DeleteWorkflowResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorkflowResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteWorkflowResponse_httpStatus' - The response's http status code.
+newDeleteWorkflowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteWorkflowResponse
+newDeleteWorkflowResponse pHttpStatus_ =
+  DeleteWorkflowResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteWorkflowResponse_httpStatus :: Lens.Lens' DeleteWorkflowResponse Prelude.Int
+deleteWorkflowResponse_httpStatus = Lens.lens (\DeleteWorkflowResponse' {httpStatus} -> httpStatus) (\s@DeleteWorkflowResponse' {} a -> s {httpStatus = a} :: DeleteWorkflowResponse)
+
+instance Prelude.NFData DeleteWorkflowResponse where
+  rnf DeleteWorkflowResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/GetAutoMergingPreview.hs b/gen/Amazonka/CustomerProfiles/GetAutoMergingPreview.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/GetAutoMergingPreview.hs
@@ -0,0 +1,290 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.GetAutoMergingPreview
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Tests the auto-merging settings of your Identity Resolution Job without
+-- merging your data. It randomly selects a sample of matching groups from
+-- the existing matching results, and applies the automerging settings that
+-- you provided. You can then view the number of profiles in the sample,
+-- the number of matches, and the number of profiles identified to be
+-- merged. This enables you to evaluate the accuracy of the attributes in
+-- your matching list.
+--
+-- You can\'t view which profiles are matched and would be merged.
+--
+-- We strongly recommend you use this API to do a dry run of the
+-- automerging process before running the Identity Resolution Job. Include
+-- __at least__ two matching attributes. If your matching list includes too
+-- few attributes (such as only @FirstName@ or only @LastName@), there may
+-- be a large number of matches. This increases the chances of erroneous
+-- merges.
+module Amazonka.CustomerProfiles.GetAutoMergingPreview
+  ( -- * Creating a Request
+    GetAutoMergingPreview (..),
+    newGetAutoMergingPreview,
+
+    -- * Request Lenses
+    getAutoMergingPreview_minAllowedConfidenceScoreForMerging,
+    getAutoMergingPreview_domainName,
+    getAutoMergingPreview_consolidation,
+    getAutoMergingPreview_conflictResolution,
+
+    -- * Destructuring the Response
+    GetAutoMergingPreviewResponse (..),
+    newGetAutoMergingPreviewResponse,
+
+    -- * Response Lenses
+    getAutoMergingPreviewResponse_numberOfMatchesInSample,
+    getAutoMergingPreviewResponse_numberOfProfilesInSample,
+    getAutoMergingPreviewResponse_numberOfProfilesWillBeMerged,
+    getAutoMergingPreviewResponse_httpStatus,
+    getAutoMergingPreviewResponse_domainName,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetAutoMergingPreview' smart constructor.
+data GetAutoMergingPreview = GetAutoMergingPreview'
+  { -- | Minimum confidence score required for profiles within a matching group
+    -- to be merged during the auto-merge process.
+    minAllowedConfidenceScoreForMerging :: Prelude.Maybe Prelude.Double,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | A list of matching attributes that represent matching criteria.
+    consolidation :: Consolidation,
+    -- | How the auto-merging process should resolve conflicts between different
+    -- profiles.
+    conflictResolution :: ConflictResolution
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAutoMergingPreview' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'minAllowedConfidenceScoreForMerging', 'getAutoMergingPreview_minAllowedConfidenceScoreForMerging' - Minimum confidence score required for profiles within a matching group
+-- to be merged during the auto-merge process.
+--
+-- 'domainName', 'getAutoMergingPreview_domainName' - The unique name of the domain.
+--
+-- 'consolidation', 'getAutoMergingPreview_consolidation' - A list of matching attributes that represent matching criteria.
+--
+-- 'conflictResolution', 'getAutoMergingPreview_conflictResolution' - How the auto-merging process should resolve conflicts between different
+-- profiles.
+newGetAutoMergingPreview ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'consolidation'
+  Consolidation ->
+  -- | 'conflictResolution'
+  ConflictResolution ->
+  GetAutoMergingPreview
+newGetAutoMergingPreview
+  pDomainName_
+  pConsolidation_
+  pConflictResolution_ =
+    GetAutoMergingPreview'
+      { minAllowedConfidenceScoreForMerging =
+          Prelude.Nothing,
+        domainName = pDomainName_,
+        consolidation = pConsolidation_,
+        conflictResolution = pConflictResolution_
+      }
+
+-- | Minimum confidence score required for profiles within a matching group
+-- to be merged during the auto-merge process.
+getAutoMergingPreview_minAllowedConfidenceScoreForMerging :: Lens.Lens' GetAutoMergingPreview (Prelude.Maybe Prelude.Double)
+getAutoMergingPreview_minAllowedConfidenceScoreForMerging = Lens.lens (\GetAutoMergingPreview' {minAllowedConfidenceScoreForMerging} -> minAllowedConfidenceScoreForMerging) (\s@GetAutoMergingPreview' {} a -> s {minAllowedConfidenceScoreForMerging = a} :: GetAutoMergingPreview)
+
+-- | The unique name of the domain.
+getAutoMergingPreview_domainName :: Lens.Lens' GetAutoMergingPreview Prelude.Text
+getAutoMergingPreview_domainName = Lens.lens (\GetAutoMergingPreview' {domainName} -> domainName) (\s@GetAutoMergingPreview' {} a -> s {domainName = a} :: GetAutoMergingPreview)
+
+-- | A list of matching attributes that represent matching criteria.
+getAutoMergingPreview_consolidation :: Lens.Lens' GetAutoMergingPreview Consolidation
+getAutoMergingPreview_consolidation = Lens.lens (\GetAutoMergingPreview' {consolidation} -> consolidation) (\s@GetAutoMergingPreview' {} a -> s {consolidation = a} :: GetAutoMergingPreview)
+
+-- | How the auto-merging process should resolve conflicts between different
+-- profiles.
+getAutoMergingPreview_conflictResolution :: Lens.Lens' GetAutoMergingPreview ConflictResolution
+getAutoMergingPreview_conflictResolution = Lens.lens (\GetAutoMergingPreview' {conflictResolution} -> conflictResolution) (\s@GetAutoMergingPreview' {} a -> s {conflictResolution = a} :: GetAutoMergingPreview)
+
+instance Core.AWSRequest GetAutoMergingPreview where
+  type
+    AWSResponse GetAutoMergingPreview =
+      GetAutoMergingPreviewResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAutoMergingPreviewResponse'
+            Prelude.<$> (x Data..?> "NumberOfMatchesInSample")
+            Prelude.<*> (x Data..?> "NumberOfProfilesInSample")
+            Prelude.<*> (x Data..?> "NumberOfProfilesWillBeMerged")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "DomainName")
+      )
+
+instance Prelude.Hashable GetAutoMergingPreview where
+  hashWithSalt _salt GetAutoMergingPreview' {..} =
+    _salt
+      `Prelude.hashWithSalt` minAllowedConfidenceScoreForMerging
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` consolidation
+      `Prelude.hashWithSalt` conflictResolution
+
+instance Prelude.NFData GetAutoMergingPreview where
+  rnf GetAutoMergingPreview' {..} =
+    Prelude.rnf minAllowedConfidenceScoreForMerging
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf consolidation
+      `Prelude.seq` Prelude.rnf conflictResolution
+
+instance Data.ToHeaders GetAutoMergingPreview where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetAutoMergingPreview where
+  toJSON GetAutoMergingPreview' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MinAllowedConfidenceScoreForMerging" Data..=)
+              Prelude.<$> minAllowedConfidenceScoreForMerging,
+            Prelude.Just ("Consolidation" Data..= consolidation),
+            Prelude.Just
+              ("ConflictResolution" Data..= conflictResolution)
+          ]
+      )
+
+instance Data.ToPath GetAutoMergingPreview where
+  toPath GetAutoMergingPreview' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/identity-resolution-jobs/auto-merging-preview"
+      ]
+
+instance Data.ToQuery GetAutoMergingPreview where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAutoMergingPreviewResponse' smart constructor.
+data GetAutoMergingPreviewResponse = GetAutoMergingPreviewResponse'
+  { -- | The number of match groups in the domain that have been reviewed in this
+    -- preview dry run.
+    numberOfMatchesInSample :: Prelude.Maybe Prelude.Integer,
+    -- | The number of profiles found in this preview dry run.
+    numberOfProfilesInSample :: Prelude.Maybe Prelude.Integer,
+    -- | The number of profiles that would be merged if this wasn\'t a preview
+    -- dry run.
+    numberOfProfilesWillBeMerged :: Prelude.Maybe Prelude.Integer,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAutoMergingPreviewResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'numberOfMatchesInSample', 'getAutoMergingPreviewResponse_numberOfMatchesInSample' - The number of match groups in the domain that have been reviewed in this
+-- preview dry run.
+--
+-- 'numberOfProfilesInSample', 'getAutoMergingPreviewResponse_numberOfProfilesInSample' - The number of profiles found in this preview dry run.
+--
+-- 'numberOfProfilesWillBeMerged', 'getAutoMergingPreviewResponse_numberOfProfilesWillBeMerged' - The number of profiles that would be merged if this wasn\'t a preview
+-- dry run.
+--
+-- 'httpStatus', 'getAutoMergingPreviewResponse_httpStatus' - The response's http status code.
+--
+-- 'domainName', 'getAutoMergingPreviewResponse_domainName' - The unique name of the domain.
+newGetAutoMergingPreviewResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'domainName'
+  Prelude.Text ->
+  GetAutoMergingPreviewResponse
+newGetAutoMergingPreviewResponse
+  pHttpStatus_
+  pDomainName_ =
+    GetAutoMergingPreviewResponse'
+      { numberOfMatchesInSample =
+          Prelude.Nothing,
+        numberOfProfilesInSample = Prelude.Nothing,
+        numberOfProfilesWillBeMerged =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        domainName = pDomainName_
+      }
+
+-- | The number of match groups in the domain that have been reviewed in this
+-- preview dry run.
+getAutoMergingPreviewResponse_numberOfMatchesInSample :: Lens.Lens' GetAutoMergingPreviewResponse (Prelude.Maybe Prelude.Integer)
+getAutoMergingPreviewResponse_numberOfMatchesInSample = Lens.lens (\GetAutoMergingPreviewResponse' {numberOfMatchesInSample} -> numberOfMatchesInSample) (\s@GetAutoMergingPreviewResponse' {} a -> s {numberOfMatchesInSample = a} :: GetAutoMergingPreviewResponse)
+
+-- | The number of profiles found in this preview dry run.
+getAutoMergingPreviewResponse_numberOfProfilesInSample :: Lens.Lens' GetAutoMergingPreviewResponse (Prelude.Maybe Prelude.Integer)
+getAutoMergingPreviewResponse_numberOfProfilesInSample = Lens.lens (\GetAutoMergingPreviewResponse' {numberOfProfilesInSample} -> numberOfProfilesInSample) (\s@GetAutoMergingPreviewResponse' {} a -> s {numberOfProfilesInSample = a} :: GetAutoMergingPreviewResponse)
+
+-- | The number of profiles that would be merged if this wasn\'t a preview
+-- dry run.
+getAutoMergingPreviewResponse_numberOfProfilesWillBeMerged :: Lens.Lens' GetAutoMergingPreviewResponse (Prelude.Maybe Prelude.Integer)
+getAutoMergingPreviewResponse_numberOfProfilesWillBeMerged = Lens.lens (\GetAutoMergingPreviewResponse' {numberOfProfilesWillBeMerged} -> numberOfProfilesWillBeMerged) (\s@GetAutoMergingPreviewResponse' {} a -> s {numberOfProfilesWillBeMerged = a} :: GetAutoMergingPreviewResponse)
+
+-- | The response's http status code.
+getAutoMergingPreviewResponse_httpStatus :: Lens.Lens' GetAutoMergingPreviewResponse Prelude.Int
+getAutoMergingPreviewResponse_httpStatus = Lens.lens (\GetAutoMergingPreviewResponse' {httpStatus} -> httpStatus) (\s@GetAutoMergingPreviewResponse' {} a -> s {httpStatus = a} :: GetAutoMergingPreviewResponse)
+
+-- | The unique name of the domain.
+getAutoMergingPreviewResponse_domainName :: Lens.Lens' GetAutoMergingPreviewResponse Prelude.Text
+getAutoMergingPreviewResponse_domainName = Lens.lens (\GetAutoMergingPreviewResponse' {domainName} -> domainName) (\s@GetAutoMergingPreviewResponse' {} a -> s {domainName = a} :: GetAutoMergingPreviewResponse)
+
+instance Prelude.NFData GetAutoMergingPreviewResponse where
+  rnf GetAutoMergingPreviewResponse' {..} =
+    Prelude.rnf numberOfMatchesInSample
+      `Prelude.seq` Prelude.rnf numberOfProfilesInSample
+      `Prelude.seq` Prelude.rnf numberOfProfilesWillBeMerged
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf domainName
diff --git a/gen/Amazonka/CustomerProfiles/GetDomain.hs b/gen/Amazonka/CustomerProfiles/GetDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/GetDomain.hs
@@ -0,0 +1,301 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.GetDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns information about a specific domain.
+module Amazonka.CustomerProfiles.GetDomain
+  ( -- * Creating a Request
+    GetDomain (..),
+    newGetDomain,
+
+    -- * Request Lenses
+    getDomain_domainName,
+
+    -- * Destructuring the Response
+    GetDomainResponse (..),
+    newGetDomainResponse,
+
+    -- * Response Lenses
+    getDomainResponse_deadLetterQueueUrl,
+    getDomainResponse_defaultEncryptionKey,
+    getDomainResponse_defaultExpirationDays,
+    getDomainResponse_matching,
+    getDomainResponse_stats,
+    getDomainResponse_tags,
+    getDomainResponse_httpStatus,
+    getDomainResponse_domainName,
+    getDomainResponse_createdAt,
+    getDomainResponse_lastUpdatedAt,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDomain' smart constructor.
+data GetDomain = GetDomain'
+  { -- | The unique name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'getDomain_domainName' - The unique name of the domain.
+newGetDomain ::
+  -- | 'domainName'
+  Prelude.Text ->
+  GetDomain
+newGetDomain pDomainName_ =
+  GetDomain' {domainName = pDomainName_}
+
+-- | The unique name of the domain.
+getDomain_domainName :: Lens.Lens' GetDomain Prelude.Text
+getDomain_domainName = Lens.lens (\GetDomain' {domainName} -> domainName) (\s@GetDomain' {} a -> s {domainName = a} :: GetDomain)
+
+instance Core.AWSRequest GetDomain where
+  type AWSResponse GetDomain = GetDomainResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDomainResponse'
+            Prelude.<$> (x Data..?> "DeadLetterQueueUrl")
+            Prelude.<*> (x Data..?> "DefaultEncryptionKey")
+            Prelude.<*> (x Data..?> "DefaultExpirationDays")
+            Prelude.<*> (x Data..?> "Matching")
+            Prelude.<*> (x Data..?> "Stats")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "DomainName")
+            Prelude.<*> (x Data..:> "CreatedAt")
+            Prelude.<*> (x Data..:> "LastUpdatedAt")
+      )
+
+instance Prelude.Hashable GetDomain where
+  hashWithSalt _salt GetDomain' {..} =
+    _salt `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData GetDomain where
+  rnf GetDomain' {..} = Prelude.rnf domainName
+
+instance Data.ToHeaders GetDomain where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDomain where
+  toPath GetDomain' {..} =
+    Prelude.mconcat ["/domains/", Data.toBS domainName]
+
+instance Data.ToQuery GetDomain where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDomainResponse' smart constructor.
+data GetDomainResponse = GetDomainResponse'
+  { -- | The URL of the SQS dead letter queue, which is used for reporting errors
+    -- associated with ingesting data from third party applications.
+    deadLetterQueueUrl :: Prelude.Maybe Prelude.Text,
+    -- | The default encryption key, which is an AWS managed key, is used when no
+    -- specific type of encryption key is specified. It is used to encrypt all
+    -- data before it is placed in permanent or semi-permanent storage.
+    defaultEncryptionKey :: Prelude.Maybe Prelude.Text,
+    -- | The default number of days until the data within the domain expires.
+    defaultExpirationDays :: Prelude.Maybe Prelude.Natural,
+    -- | The process of matching duplicate profiles. If @Matching@ = @true@,
+    -- Amazon Connect Customer Profiles starts a weekly batch process called
+    -- Identity Resolution Job. If you do not specify a date and time for
+    -- Identity Resolution Job to run, by default it runs every Saturday at
+    -- 12AM UTC to detect duplicate profiles in your domains.
+    --
+    -- After the Identity Resolution Job completes, use the
+    -- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html GetMatches>
+    -- API to return and review the results. Or, if you have configured
+    -- @ExportingConfig@ in the @MatchingRequest@, you can download the results
+    -- from S3.
+    matching :: Prelude.Maybe MatchingResponse,
+    -- | Usage-specific statistics about the domain.
+    stats :: Prelude.Maybe DomainStats,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The timestamp of when the domain was created.
+    createdAt :: Data.POSIX,
+    -- | The timestamp of when the domain was most recently edited.
+    lastUpdatedAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deadLetterQueueUrl', 'getDomainResponse_deadLetterQueueUrl' - The URL of the SQS dead letter queue, which is used for reporting errors
+-- associated with ingesting data from third party applications.
+--
+-- 'defaultEncryptionKey', 'getDomainResponse_defaultEncryptionKey' - The default encryption key, which is an AWS managed key, is used when no
+-- specific type of encryption key is specified. It is used to encrypt all
+-- data before it is placed in permanent or semi-permanent storage.
+--
+-- 'defaultExpirationDays', 'getDomainResponse_defaultExpirationDays' - The default number of days until the data within the domain expires.
+--
+-- 'matching', 'getDomainResponse_matching' - The process of matching duplicate profiles. If @Matching@ = @true@,
+-- Amazon Connect Customer Profiles starts a weekly batch process called
+-- Identity Resolution Job. If you do not specify a date and time for
+-- Identity Resolution Job to run, by default it runs every Saturday at
+-- 12AM UTC to detect duplicate profiles in your domains.
+--
+-- After the Identity Resolution Job completes, use the
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html GetMatches>
+-- API to return and review the results. Or, if you have configured
+-- @ExportingConfig@ in the @MatchingRequest@, you can download the results
+-- from S3.
+--
+-- 'stats', 'getDomainResponse_stats' - Usage-specific statistics about the domain.
+--
+-- 'tags', 'getDomainResponse_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'httpStatus', 'getDomainResponse_httpStatus' - The response's http status code.
+--
+-- 'domainName', 'getDomainResponse_domainName' - The unique name of the domain.
+--
+-- 'createdAt', 'getDomainResponse_createdAt' - The timestamp of when the domain was created.
+--
+-- 'lastUpdatedAt', 'getDomainResponse_lastUpdatedAt' - The timestamp of when the domain was most recently edited.
+newGetDomainResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'lastUpdatedAt'
+  Prelude.UTCTime ->
+  GetDomainResponse
+newGetDomainResponse
+  pHttpStatus_
+  pDomainName_
+  pCreatedAt_
+  pLastUpdatedAt_ =
+    GetDomainResponse'
+      { deadLetterQueueUrl =
+          Prelude.Nothing,
+        defaultEncryptionKey = Prelude.Nothing,
+        defaultExpirationDays = Prelude.Nothing,
+        matching = Prelude.Nothing,
+        stats = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        domainName = pDomainName_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        lastUpdatedAt = Data._Time Lens.# pLastUpdatedAt_
+      }
+
+-- | The URL of the SQS dead letter queue, which is used for reporting errors
+-- associated with ingesting data from third party applications.
+getDomainResponse_deadLetterQueueUrl :: Lens.Lens' GetDomainResponse (Prelude.Maybe Prelude.Text)
+getDomainResponse_deadLetterQueueUrl = Lens.lens (\GetDomainResponse' {deadLetterQueueUrl} -> deadLetterQueueUrl) (\s@GetDomainResponse' {} a -> s {deadLetterQueueUrl = a} :: GetDomainResponse)
+
+-- | The default encryption key, which is an AWS managed key, is used when no
+-- specific type of encryption key is specified. It is used to encrypt all
+-- data before it is placed in permanent or semi-permanent storage.
+getDomainResponse_defaultEncryptionKey :: Lens.Lens' GetDomainResponse (Prelude.Maybe Prelude.Text)
+getDomainResponse_defaultEncryptionKey = Lens.lens (\GetDomainResponse' {defaultEncryptionKey} -> defaultEncryptionKey) (\s@GetDomainResponse' {} a -> s {defaultEncryptionKey = a} :: GetDomainResponse)
+
+-- | The default number of days until the data within the domain expires.
+getDomainResponse_defaultExpirationDays :: Lens.Lens' GetDomainResponse (Prelude.Maybe Prelude.Natural)
+getDomainResponse_defaultExpirationDays = Lens.lens (\GetDomainResponse' {defaultExpirationDays} -> defaultExpirationDays) (\s@GetDomainResponse' {} a -> s {defaultExpirationDays = a} :: GetDomainResponse)
+
+-- | The process of matching duplicate profiles. If @Matching@ = @true@,
+-- Amazon Connect Customer Profiles starts a weekly batch process called
+-- Identity Resolution Job. If you do not specify a date and time for
+-- Identity Resolution Job to run, by default it runs every Saturday at
+-- 12AM UTC to detect duplicate profiles in your domains.
+--
+-- After the Identity Resolution Job completes, use the
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html GetMatches>
+-- API to return and review the results. Or, if you have configured
+-- @ExportingConfig@ in the @MatchingRequest@, you can download the results
+-- from S3.
+getDomainResponse_matching :: Lens.Lens' GetDomainResponse (Prelude.Maybe MatchingResponse)
+getDomainResponse_matching = Lens.lens (\GetDomainResponse' {matching} -> matching) (\s@GetDomainResponse' {} a -> s {matching = a} :: GetDomainResponse)
+
+-- | Usage-specific statistics about the domain.
+getDomainResponse_stats :: Lens.Lens' GetDomainResponse (Prelude.Maybe DomainStats)
+getDomainResponse_stats = Lens.lens (\GetDomainResponse' {stats} -> stats) (\s@GetDomainResponse' {} a -> s {stats = a} :: GetDomainResponse)
+
+-- | The tags used to organize, track, or control access for this resource.
+getDomainResponse_tags :: Lens.Lens' GetDomainResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getDomainResponse_tags = Lens.lens (\GetDomainResponse' {tags} -> tags) (\s@GetDomainResponse' {} a -> s {tags = a} :: GetDomainResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getDomainResponse_httpStatus :: Lens.Lens' GetDomainResponse Prelude.Int
+getDomainResponse_httpStatus = Lens.lens (\GetDomainResponse' {httpStatus} -> httpStatus) (\s@GetDomainResponse' {} a -> s {httpStatus = a} :: GetDomainResponse)
+
+-- | The unique name of the domain.
+getDomainResponse_domainName :: Lens.Lens' GetDomainResponse Prelude.Text
+getDomainResponse_domainName = Lens.lens (\GetDomainResponse' {domainName} -> domainName) (\s@GetDomainResponse' {} a -> s {domainName = a} :: GetDomainResponse)
+
+-- | The timestamp of when the domain was created.
+getDomainResponse_createdAt :: Lens.Lens' GetDomainResponse Prelude.UTCTime
+getDomainResponse_createdAt = Lens.lens (\GetDomainResponse' {createdAt} -> createdAt) (\s@GetDomainResponse' {} a -> s {createdAt = a} :: GetDomainResponse) Prelude.. Data._Time
+
+-- | The timestamp of when the domain was most recently edited.
+getDomainResponse_lastUpdatedAt :: Lens.Lens' GetDomainResponse Prelude.UTCTime
+getDomainResponse_lastUpdatedAt = Lens.lens (\GetDomainResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@GetDomainResponse' {} a -> s {lastUpdatedAt = a} :: GetDomainResponse) Prelude.. Data._Time
+
+instance Prelude.NFData GetDomainResponse where
+  rnf GetDomainResponse' {..} =
+    Prelude.rnf deadLetterQueueUrl
+      `Prelude.seq` Prelude.rnf defaultEncryptionKey
+      `Prelude.seq` Prelude.rnf defaultExpirationDays
+      `Prelude.seq` Prelude.rnf matching
+      `Prelude.seq` Prelude.rnf stats
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
diff --git a/gen/Amazonka/CustomerProfiles/GetIdentityResolutionJob.hs b/gen/Amazonka/CustomerProfiles/GetIdentityResolutionJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/GetIdentityResolutionJob.hs
@@ -0,0 +1,385 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.GetIdentityResolutionJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns information about an Identity Resolution Job in a specific
+-- domain.
+--
+-- Identity Resolution Jobs are set up using the Amazon Connect admin
+-- console. For more information, see
+-- <https://docs.aws.amazon.com/connect/latest/adminguide/use-identity-resolution.html Use Identity Resolution to consolidate similar profiles>.
+module Amazonka.CustomerProfiles.GetIdentityResolutionJob
+  ( -- * Creating a Request
+    GetIdentityResolutionJob (..),
+    newGetIdentityResolutionJob,
+
+    -- * Request Lenses
+    getIdentityResolutionJob_domainName,
+    getIdentityResolutionJob_jobId,
+
+    -- * Destructuring the Response
+    GetIdentityResolutionJobResponse (..),
+    newGetIdentityResolutionJobResponse,
+
+    -- * Response Lenses
+    getIdentityResolutionJobResponse_autoMerging,
+    getIdentityResolutionJobResponse_domainName,
+    getIdentityResolutionJobResponse_exportingLocation,
+    getIdentityResolutionJobResponse_jobEndTime,
+    getIdentityResolutionJobResponse_jobExpirationTime,
+    getIdentityResolutionJobResponse_jobId,
+    getIdentityResolutionJobResponse_jobStartTime,
+    getIdentityResolutionJobResponse_jobStats,
+    getIdentityResolutionJobResponse_lastUpdatedAt,
+    getIdentityResolutionJobResponse_message,
+    getIdentityResolutionJobResponse_status,
+    getIdentityResolutionJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetIdentityResolutionJob' smart constructor.
+data GetIdentityResolutionJob = GetIdentityResolutionJob'
+  { -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The unique identifier of the Identity Resolution Job.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIdentityResolutionJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'getIdentityResolutionJob_domainName' - The unique name of the domain.
+--
+-- 'jobId', 'getIdentityResolutionJob_jobId' - The unique identifier of the Identity Resolution Job.
+newGetIdentityResolutionJob ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'jobId'
+  Prelude.Text ->
+  GetIdentityResolutionJob
+newGetIdentityResolutionJob pDomainName_ pJobId_ =
+  GetIdentityResolutionJob'
+    { domainName =
+        pDomainName_,
+      jobId = pJobId_
+    }
+
+-- | The unique name of the domain.
+getIdentityResolutionJob_domainName :: Lens.Lens' GetIdentityResolutionJob Prelude.Text
+getIdentityResolutionJob_domainName = Lens.lens (\GetIdentityResolutionJob' {domainName} -> domainName) (\s@GetIdentityResolutionJob' {} a -> s {domainName = a} :: GetIdentityResolutionJob)
+
+-- | The unique identifier of the Identity Resolution Job.
+getIdentityResolutionJob_jobId :: Lens.Lens' GetIdentityResolutionJob Prelude.Text
+getIdentityResolutionJob_jobId = Lens.lens (\GetIdentityResolutionJob' {jobId} -> jobId) (\s@GetIdentityResolutionJob' {} a -> s {jobId = a} :: GetIdentityResolutionJob)
+
+instance Core.AWSRequest GetIdentityResolutionJob where
+  type
+    AWSResponse GetIdentityResolutionJob =
+      GetIdentityResolutionJobResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetIdentityResolutionJobResponse'
+            Prelude.<$> (x Data..?> "AutoMerging")
+            Prelude.<*> (x Data..?> "DomainName")
+            Prelude.<*> (x Data..?> "ExportingLocation")
+            Prelude.<*> (x Data..?> "JobEndTime")
+            Prelude.<*> (x Data..?> "JobExpirationTime")
+            Prelude.<*> (x Data..?> "JobId")
+            Prelude.<*> (x Data..?> "JobStartTime")
+            Prelude.<*> (x Data..?> "JobStats")
+            Prelude.<*> (x Data..?> "LastUpdatedAt")
+            Prelude.<*> (x Data..?> "Message")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetIdentityResolutionJob where
+  hashWithSalt _salt GetIdentityResolutionJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData GetIdentityResolutionJob where
+  rnf GetIdentityResolutionJob' {..} =
+    Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf jobId
+
+instance Data.ToHeaders GetIdentityResolutionJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetIdentityResolutionJob where
+  toPath GetIdentityResolutionJob' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/identity-resolution-jobs/",
+        Data.toBS jobId
+      ]
+
+instance Data.ToQuery GetIdentityResolutionJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetIdentityResolutionJobResponse' smart constructor.
+data GetIdentityResolutionJobResponse = GetIdentityResolutionJobResponse'
+  { -- | Configuration settings for how to perform the auto-merging of profiles.
+    autoMerging :: Prelude.Maybe AutoMerging,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Maybe Prelude.Text,
+    -- | The S3 location where the Identity Resolution Job writes result files.
+    exportingLocation :: Prelude.Maybe ExportingLocation,
+    -- | The timestamp of when the Identity Resolution Job was completed.
+    jobEndTime :: Prelude.Maybe Data.POSIX,
+    -- | The timestamp of when the Identity Resolution Job will expire.
+    jobExpirationTime :: Prelude.Maybe Data.POSIX,
+    -- | The unique identifier of the Identity Resolution Job.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of when the Identity Resolution Job was started or will be
+    -- started.
+    jobStartTime :: Prelude.Maybe Data.POSIX,
+    -- | Statistics about the Identity Resolution Job.
+    jobStats :: Prelude.Maybe JobStats,
+    -- | The timestamp of when the Identity Resolution Job was most recently
+    -- edited.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The error messages that are generated when the Identity Resolution Job
+    -- runs.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The status of the Identity Resolution Job.
+    --
+    -- -   @PENDING@: The Identity Resolution Job is scheduled but has not
+    --     started yet. If you turn off the Identity Resolution feature in your
+    --     domain, jobs in the @PENDING@ state are deleted.
+    --
+    -- -   @PREPROCESSING@: The Identity Resolution Job is loading your data.
+    --
+    -- -   @FIND_MATCHING@: The Identity Resolution Job is using the machine
+    --     learning model to identify profiles that belong to the same matching
+    --     group.
+    --
+    -- -   @MERGING@: The Identity Resolution Job is merging duplicate
+    --     profiles.
+    --
+    -- -   @COMPLETED@: The Identity Resolution Job completed successfully.
+    --
+    -- -   @PARTIAL_SUCCESS@: There\'s a system error and not all of the data
+    --     is merged. The Identity Resolution Job writes a message indicating
+    --     the source of the problem.
+    --
+    -- -   @FAILED@: The Identity Resolution Job did not merge any data. It
+    --     writes a message indicating the source of the problem.
+    status :: Prelude.Maybe IdentityResolutionJobStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIdentityResolutionJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoMerging', 'getIdentityResolutionJobResponse_autoMerging' - Configuration settings for how to perform the auto-merging of profiles.
+--
+-- 'domainName', 'getIdentityResolutionJobResponse_domainName' - The unique name of the domain.
+--
+-- 'exportingLocation', 'getIdentityResolutionJobResponse_exportingLocation' - The S3 location where the Identity Resolution Job writes result files.
+--
+-- 'jobEndTime', 'getIdentityResolutionJobResponse_jobEndTime' - The timestamp of when the Identity Resolution Job was completed.
+--
+-- 'jobExpirationTime', 'getIdentityResolutionJobResponse_jobExpirationTime' - The timestamp of when the Identity Resolution Job will expire.
+--
+-- 'jobId', 'getIdentityResolutionJobResponse_jobId' - The unique identifier of the Identity Resolution Job.
+--
+-- 'jobStartTime', 'getIdentityResolutionJobResponse_jobStartTime' - The timestamp of when the Identity Resolution Job was started or will be
+-- started.
+--
+-- 'jobStats', 'getIdentityResolutionJobResponse_jobStats' - Statistics about the Identity Resolution Job.
+--
+-- 'lastUpdatedAt', 'getIdentityResolutionJobResponse_lastUpdatedAt' - The timestamp of when the Identity Resolution Job was most recently
+-- edited.
+--
+-- 'message', 'getIdentityResolutionJobResponse_message' - The error messages that are generated when the Identity Resolution Job
+-- runs.
+--
+-- 'status', 'getIdentityResolutionJobResponse_status' - The status of the Identity Resolution Job.
+--
+-- -   @PENDING@: The Identity Resolution Job is scheduled but has not
+--     started yet. If you turn off the Identity Resolution feature in your
+--     domain, jobs in the @PENDING@ state are deleted.
+--
+-- -   @PREPROCESSING@: The Identity Resolution Job is loading your data.
+--
+-- -   @FIND_MATCHING@: The Identity Resolution Job is using the machine
+--     learning model to identify profiles that belong to the same matching
+--     group.
+--
+-- -   @MERGING@: The Identity Resolution Job is merging duplicate
+--     profiles.
+--
+-- -   @COMPLETED@: The Identity Resolution Job completed successfully.
+--
+-- -   @PARTIAL_SUCCESS@: There\'s a system error and not all of the data
+--     is merged. The Identity Resolution Job writes a message indicating
+--     the source of the problem.
+--
+-- -   @FAILED@: The Identity Resolution Job did not merge any data. It
+--     writes a message indicating the source of the problem.
+--
+-- 'httpStatus', 'getIdentityResolutionJobResponse_httpStatus' - The response's http status code.
+newGetIdentityResolutionJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetIdentityResolutionJobResponse
+newGetIdentityResolutionJobResponse pHttpStatus_ =
+  GetIdentityResolutionJobResponse'
+    { autoMerging =
+        Prelude.Nothing,
+      domainName = Prelude.Nothing,
+      exportingLocation = Prelude.Nothing,
+      jobEndTime = Prelude.Nothing,
+      jobExpirationTime = Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      jobStartTime = Prelude.Nothing,
+      jobStats = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      message = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Configuration settings for how to perform the auto-merging of profiles.
+getIdentityResolutionJobResponse_autoMerging :: Lens.Lens' GetIdentityResolutionJobResponse (Prelude.Maybe AutoMerging)
+getIdentityResolutionJobResponse_autoMerging = Lens.lens (\GetIdentityResolutionJobResponse' {autoMerging} -> autoMerging) (\s@GetIdentityResolutionJobResponse' {} a -> s {autoMerging = a} :: GetIdentityResolutionJobResponse)
+
+-- | The unique name of the domain.
+getIdentityResolutionJobResponse_domainName :: Lens.Lens' GetIdentityResolutionJobResponse (Prelude.Maybe Prelude.Text)
+getIdentityResolutionJobResponse_domainName = Lens.lens (\GetIdentityResolutionJobResponse' {domainName} -> domainName) (\s@GetIdentityResolutionJobResponse' {} a -> s {domainName = a} :: GetIdentityResolutionJobResponse)
+
+-- | The S3 location where the Identity Resolution Job writes result files.
+getIdentityResolutionJobResponse_exportingLocation :: Lens.Lens' GetIdentityResolutionJobResponse (Prelude.Maybe ExportingLocation)
+getIdentityResolutionJobResponse_exportingLocation = Lens.lens (\GetIdentityResolutionJobResponse' {exportingLocation} -> exportingLocation) (\s@GetIdentityResolutionJobResponse' {} a -> s {exportingLocation = a} :: GetIdentityResolutionJobResponse)
+
+-- | The timestamp of when the Identity Resolution Job was completed.
+getIdentityResolutionJobResponse_jobEndTime :: Lens.Lens' GetIdentityResolutionJobResponse (Prelude.Maybe Prelude.UTCTime)
+getIdentityResolutionJobResponse_jobEndTime = Lens.lens (\GetIdentityResolutionJobResponse' {jobEndTime} -> jobEndTime) (\s@GetIdentityResolutionJobResponse' {} a -> s {jobEndTime = a} :: GetIdentityResolutionJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The timestamp of when the Identity Resolution Job will expire.
+getIdentityResolutionJobResponse_jobExpirationTime :: Lens.Lens' GetIdentityResolutionJobResponse (Prelude.Maybe Prelude.UTCTime)
+getIdentityResolutionJobResponse_jobExpirationTime = Lens.lens (\GetIdentityResolutionJobResponse' {jobExpirationTime} -> jobExpirationTime) (\s@GetIdentityResolutionJobResponse' {} a -> s {jobExpirationTime = a} :: GetIdentityResolutionJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier of the Identity Resolution Job.
+getIdentityResolutionJobResponse_jobId :: Lens.Lens' GetIdentityResolutionJobResponse (Prelude.Maybe Prelude.Text)
+getIdentityResolutionJobResponse_jobId = Lens.lens (\GetIdentityResolutionJobResponse' {jobId} -> jobId) (\s@GetIdentityResolutionJobResponse' {} a -> s {jobId = a} :: GetIdentityResolutionJobResponse)
+
+-- | The timestamp of when the Identity Resolution Job was started or will be
+-- started.
+getIdentityResolutionJobResponse_jobStartTime :: Lens.Lens' GetIdentityResolutionJobResponse (Prelude.Maybe Prelude.UTCTime)
+getIdentityResolutionJobResponse_jobStartTime = Lens.lens (\GetIdentityResolutionJobResponse' {jobStartTime} -> jobStartTime) (\s@GetIdentityResolutionJobResponse' {} a -> s {jobStartTime = a} :: GetIdentityResolutionJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Statistics about the Identity Resolution Job.
+getIdentityResolutionJobResponse_jobStats :: Lens.Lens' GetIdentityResolutionJobResponse (Prelude.Maybe JobStats)
+getIdentityResolutionJobResponse_jobStats = Lens.lens (\GetIdentityResolutionJobResponse' {jobStats} -> jobStats) (\s@GetIdentityResolutionJobResponse' {} a -> s {jobStats = a} :: GetIdentityResolutionJobResponse)
+
+-- | The timestamp of when the Identity Resolution Job was most recently
+-- edited.
+getIdentityResolutionJobResponse_lastUpdatedAt :: Lens.Lens' GetIdentityResolutionJobResponse (Prelude.Maybe Prelude.UTCTime)
+getIdentityResolutionJobResponse_lastUpdatedAt = Lens.lens (\GetIdentityResolutionJobResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@GetIdentityResolutionJobResponse' {} a -> s {lastUpdatedAt = a} :: GetIdentityResolutionJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The error messages that are generated when the Identity Resolution Job
+-- runs.
+getIdentityResolutionJobResponse_message :: Lens.Lens' GetIdentityResolutionJobResponse (Prelude.Maybe Prelude.Text)
+getIdentityResolutionJobResponse_message = Lens.lens (\GetIdentityResolutionJobResponse' {message} -> message) (\s@GetIdentityResolutionJobResponse' {} a -> s {message = a} :: GetIdentityResolutionJobResponse)
+
+-- | The status of the Identity Resolution Job.
+--
+-- -   @PENDING@: The Identity Resolution Job is scheduled but has not
+--     started yet. If you turn off the Identity Resolution feature in your
+--     domain, jobs in the @PENDING@ state are deleted.
+--
+-- -   @PREPROCESSING@: The Identity Resolution Job is loading your data.
+--
+-- -   @FIND_MATCHING@: The Identity Resolution Job is using the machine
+--     learning model to identify profiles that belong to the same matching
+--     group.
+--
+-- -   @MERGING@: The Identity Resolution Job is merging duplicate
+--     profiles.
+--
+-- -   @COMPLETED@: The Identity Resolution Job completed successfully.
+--
+-- -   @PARTIAL_SUCCESS@: There\'s a system error and not all of the data
+--     is merged. The Identity Resolution Job writes a message indicating
+--     the source of the problem.
+--
+-- -   @FAILED@: The Identity Resolution Job did not merge any data. It
+--     writes a message indicating the source of the problem.
+getIdentityResolutionJobResponse_status :: Lens.Lens' GetIdentityResolutionJobResponse (Prelude.Maybe IdentityResolutionJobStatus)
+getIdentityResolutionJobResponse_status = Lens.lens (\GetIdentityResolutionJobResponse' {status} -> status) (\s@GetIdentityResolutionJobResponse' {} a -> s {status = a} :: GetIdentityResolutionJobResponse)
+
+-- | The response's http status code.
+getIdentityResolutionJobResponse_httpStatus :: Lens.Lens' GetIdentityResolutionJobResponse Prelude.Int
+getIdentityResolutionJobResponse_httpStatus = Lens.lens (\GetIdentityResolutionJobResponse' {httpStatus} -> httpStatus) (\s@GetIdentityResolutionJobResponse' {} a -> s {httpStatus = a} :: GetIdentityResolutionJobResponse)
+
+instance
+  Prelude.NFData
+    GetIdentityResolutionJobResponse
+  where
+  rnf GetIdentityResolutionJobResponse' {..} =
+    Prelude.rnf autoMerging
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf exportingLocation
+      `Prelude.seq` Prelude.rnf jobEndTime
+      `Prelude.seq` Prelude.rnf jobExpirationTime
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf jobStartTime
+      `Prelude.seq` Prelude.rnf jobStats
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/GetIntegration.hs b/gen/Amazonka/CustomerProfiles/GetIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/GetIntegration.hs
@@ -0,0 +1,320 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.GetIntegration
+-- 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 an integration for a domain.
+module Amazonka.CustomerProfiles.GetIntegration
+  ( -- * Creating a Request
+    GetIntegration (..),
+    newGetIntegration,
+
+    -- * Request Lenses
+    getIntegration_domainName,
+    getIntegration_uri,
+
+    -- * Destructuring the Response
+    GetIntegrationResponse (..),
+    newGetIntegrationResponse,
+
+    -- * Response Lenses
+    getIntegrationResponse_isUnstructured,
+    getIntegrationResponse_objectTypeName,
+    getIntegrationResponse_objectTypeNames,
+    getIntegrationResponse_tags,
+    getIntegrationResponse_workflowId,
+    getIntegrationResponse_httpStatus,
+    getIntegrationResponse_domainName,
+    getIntegrationResponse_uri,
+    getIntegrationResponse_createdAt,
+    getIntegrationResponse_lastUpdatedAt,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetIntegration' smart constructor.
+data GetIntegration = GetIntegration'
+  { -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The URI of the S3 bucket or any other type of data source.
+    uri :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'getIntegration_domainName' - The unique name of the domain.
+--
+-- 'uri', 'getIntegration_uri' - The URI of the S3 bucket or any other type of data source.
+newGetIntegration ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'uri'
+  Prelude.Text ->
+  GetIntegration
+newGetIntegration pDomainName_ pUri_ =
+  GetIntegration'
+    { domainName = pDomainName_,
+      uri = pUri_
+    }
+
+-- | The unique name of the domain.
+getIntegration_domainName :: Lens.Lens' GetIntegration Prelude.Text
+getIntegration_domainName = Lens.lens (\GetIntegration' {domainName} -> domainName) (\s@GetIntegration' {} a -> s {domainName = a} :: GetIntegration)
+
+-- | The URI of the S3 bucket or any other type of data source.
+getIntegration_uri :: Lens.Lens' GetIntegration Prelude.Text
+getIntegration_uri = Lens.lens (\GetIntegration' {uri} -> uri) (\s@GetIntegration' {} a -> s {uri = a} :: GetIntegration)
+
+instance Core.AWSRequest GetIntegration where
+  type
+    AWSResponse GetIntegration =
+      GetIntegrationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetIntegrationResponse'
+            Prelude.<$> (x Data..?> "IsUnstructured")
+            Prelude.<*> (x Data..?> "ObjectTypeName")
+            Prelude.<*> ( x
+                            Data..?> "ObjectTypeNames"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "WorkflowId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "DomainName")
+            Prelude.<*> (x Data..:> "Uri")
+            Prelude.<*> (x Data..:> "CreatedAt")
+            Prelude.<*> (x Data..:> "LastUpdatedAt")
+      )
+
+instance Prelude.Hashable GetIntegration where
+  hashWithSalt _salt GetIntegration' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` uri
+
+instance Prelude.NFData GetIntegration where
+  rnf GetIntegration' {..} =
+    Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf uri
+
+instance Data.ToHeaders GetIntegration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetIntegration where
+  toJSON GetIntegration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Uri" Data..= uri)]
+      )
+
+instance Data.ToPath GetIntegration where
+  toPath GetIntegration' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainName, "/integrations"]
+
+instance Data.ToQuery GetIntegration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetIntegrationResponse' smart constructor.
+data GetIntegrationResponse = GetIntegrationResponse'
+  { -- | Boolean to indicate if the Flow associated with the Integration is
+    -- created via Appflow console or with ObjectTypeName equals _unstructured
+    -- via API\/CLI in flowDefinition
+    isUnstructured :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the profile object type.
+    objectTypeName :: Prelude.Maybe Prelude.Text,
+    -- | A map in which each key is an event type from an external application
+    -- such as Segment or Shopify, and each value is an @ObjectTypeName@
+    -- (template) used to ingest the event. It supports the following event
+    -- types: @SegmentIdentify@, @ShopifyCreateCustomers@,
+    -- @ShopifyUpdateCustomers@, @ShopifyCreateDraftOrders@,
+    -- @ShopifyUpdateDraftOrders@, @ShopifyCreateOrders@, and
+    -- @ShopifyUpdatedOrders@.
+    objectTypeNames :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Unique identifier for the workflow.
+    workflowId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The URI of the S3 bucket or any other type of data source.
+    uri :: Prelude.Text,
+    -- | The timestamp of when the domain was created.
+    createdAt :: Data.POSIX,
+    -- | The timestamp of when the domain was most recently edited.
+    lastUpdatedAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIntegrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'isUnstructured', 'getIntegrationResponse_isUnstructured' - Boolean to indicate if the Flow associated with the Integration is
+-- created via Appflow console or with ObjectTypeName equals _unstructured
+-- via API\/CLI in flowDefinition
+--
+-- 'objectTypeName', 'getIntegrationResponse_objectTypeName' - The name of the profile object type.
+--
+-- 'objectTypeNames', 'getIntegrationResponse_objectTypeNames' - A map in which each key is an event type from an external application
+-- such as Segment or Shopify, and each value is an @ObjectTypeName@
+-- (template) used to ingest the event. It supports the following event
+-- types: @SegmentIdentify@, @ShopifyCreateCustomers@,
+-- @ShopifyUpdateCustomers@, @ShopifyCreateDraftOrders@,
+-- @ShopifyUpdateDraftOrders@, @ShopifyCreateOrders@, and
+-- @ShopifyUpdatedOrders@.
+--
+-- 'tags', 'getIntegrationResponse_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'workflowId', 'getIntegrationResponse_workflowId' - Unique identifier for the workflow.
+--
+-- 'httpStatus', 'getIntegrationResponse_httpStatus' - The response's http status code.
+--
+-- 'domainName', 'getIntegrationResponse_domainName' - The unique name of the domain.
+--
+-- 'uri', 'getIntegrationResponse_uri' - The URI of the S3 bucket or any other type of data source.
+--
+-- 'createdAt', 'getIntegrationResponse_createdAt' - The timestamp of when the domain was created.
+--
+-- 'lastUpdatedAt', 'getIntegrationResponse_lastUpdatedAt' - The timestamp of when the domain was most recently edited.
+newGetIntegrationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'uri'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'lastUpdatedAt'
+  Prelude.UTCTime ->
+  GetIntegrationResponse
+newGetIntegrationResponse
+  pHttpStatus_
+  pDomainName_
+  pUri_
+  pCreatedAt_
+  pLastUpdatedAt_ =
+    GetIntegrationResponse'
+      { isUnstructured =
+          Prelude.Nothing,
+        objectTypeName = Prelude.Nothing,
+        objectTypeNames = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        workflowId = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        domainName = pDomainName_,
+        uri = pUri_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        lastUpdatedAt = Data._Time Lens.# pLastUpdatedAt_
+      }
+
+-- | Boolean to indicate if the Flow associated with the Integration is
+-- created via Appflow console or with ObjectTypeName equals _unstructured
+-- via API\/CLI in flowDefinition
+getIntegrationResponse_isUnstructured :: Lens.Lens' GetIntegrationResponse (Prelude.Maybe Prelude.Bool)
+getIntegrationResponse_isUnstructured = Lens.lens (\GetIntegrationResponse' {isUnstructured} -> isUnstructured) (\s@GetIntegrationResponse' {} a -> s {isUnstructured = a} :: GetIntegrationResponse)
+
+-- | The name of the profile object type.
+getIntegrationResponse_objectTypeName :: Lens.Lens' GetIntegrationResponse (Prelude.Maybe Prelude.Text)
+getIntegrationResponse_objectTypeName = Lens.lens (\GetIntegrationResponse' {objectTypeName} -> objectTypeName) (\s@GetIntegrationResponse' {} a -> s {objectTypeName = a} :: GetIntegrationResponse)
+
+-- | A map in which each key is an event type from an external application
+-- such as Segment or Shopify, and each value is an @ObjectTypeName@
+-- (template) used to ingest the event. It supports the following event
+-- types: @SegmentIdentify@, @ShopifyCreateCustomers@,
+-- @ShopifyUpdateCustomers@, @ShopifyCreateDraftOrders@,
+-- @ShopifyUpdateDraftOrders@, @ShopifyCreateOrders@, and
+-- @ShopifyUpdatedOrders@.
+getIntegrationResponse_objectTypeNames :: Lens.Lens' GetIntegrationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getIntegrationResponse_objectTypeNames = Lens.lens (\GetIntegrationResponse' {objectTypeNames} -> objectTypeNames) (\s@GetIntegrationResponse' {} a -> s {objectTypeNames = a} :: GetIntegrationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags used to organize, track, or control access for this resource.
+getIntegrationResponse_tags :: Lens.Lens' GetIntegrationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getIntegrationResponse_tags = Lens.lens (\GetIntegrationResponse' {tags} -> tags) (\s@GetIntegrationResponse' {} a -> s {tags = a} :: GetIntegrationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Unique identifier for the workflow.
+getIntegrationResponse_workflowId :: Lens.Lens' GetIntegrationResponse (Prelude.Maybe Prelude.Text)
+getIntegrationResponse_workflowId = Lens.lens (\GetIntegrationResponse' {workflowId} -> workflowId) (\s@GetIntegrationResponse' {} a -> s {workflowId = a} :: GetIntegrationResponse)
+
+-- | The response's http status code.
+getIntegrationResponse_httpStatus :: Lens.Lens' GetIntegrationResponse Prelude.Int
+getIntegrationResponse_httpStatus = Lens.lens (\GetIntegrationResponse' {httpStatus} -> httpStatus) (\s@GetIntegrationResponse' {} a -> s {httpStatus = a} :: GetIntegrationResponse)
+
+-- | The unique name of the domain.
+getIntegrationResponse_domainName :: Lens.Lens' GetIntegrationResponse Prelude.Text
+getIntegrationResponse_domainName = Lens.lens (\GetIntegrationResponse' {domainName} -> domainName) (\s@GetIntegrationResponse' {} a -> s {domainName = a} :: GetIntegrationResponse)
+
+-- | The URI of the S3 bucket or any other type of data source.
+getIntegrationResponse_uri :: Lens.Lens' GetIntegrationResponse Prelude.Text
+getIntegrationResponse_uri = Lens.lens (\GetIntegrationResponse' {uri} -> uri) (\s@GetIntegrationResponse' {} a -> s {uri = a} :: GetIntegrationResponse)
+
+-- | The timestamp of when the domain was created.
+getIntegrationResponse_createdAt :: Lens.Lens' GetIntegrationResponse Prelude.UTCTime
+getIntegrationResponse_createdAt = Lens.lens (\GetIntegrationResponse' {createdAt} -> createdAt) (\s@GetIntegrationResponse' {} a -> s {createdAt = a} :: GetIntegrationResponse) Prelude.. Data._Time
+
+-- | The timestamp of when the domain was most recently edited.
+getIntegrationResponse_lastUpdatedAt :: Lens.Lens' GetIntegrationResponse Prelude.UTCTime
+getIntegrationResponse_lastUpdatedAt = Lens.lens (\GetIntegrationResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@GetIntegrationResponse' {} a -> s {lastUpdatedAt = a} :: GetIntegrationResponse) Prelude.. Data._Time
+
+instance Prelude.NFData GetIntegrationResponse where
+  rnf GetIntegrationResponse' {..} =
+    Prelude.rnf isUnstructured
+      `Prelude.seq` Prelude.rnf objectTypeName
+      `Prelude.seq` Prelude.rnf objectTypeNames
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf uri
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
diff --git a/gen/Amazonka/CustomerProfiles/GetMatches.hs b/gen/Amazonka/CustomerProfiles/GetMatches.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/GetMatches.hs
@@ -0,0 +1,279 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.GetMatches
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Before calling this API, use
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_CreateDomain.html CreateDomain>
+-- or
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_UpdateDomain.html UpdateDomain>
+-- to enable identity resolution: set @Matching@ to true.
+--
+-- GetMatches returns potentially matching profiles, based on the results
+-- of the latest run of a machine learning process.
+--
+-- The process of matching duplicate profiles. If @Matching@ = @true@,
+-- Amazon Connect Customer Profiles starts a weekly batch process called
+-- Identity Resolution Job. If you do not specify a date and time for
+-- Identity Resolution Job to run, by default it runs every Saturday at
+-- 12AM UTC to detect duplicate profiles in your domains.
+--
+-- After the Identity Resolution Job completes, use the
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html GetMatches>
+-- API to return and review the results. Or, if you have configured
+-- @ExportingConfig@ in the @MatchingRequest@, you can download the results
+-- from S3.
+--
+-- Amazon Connect uses the following profile attributes to identify
+-- matches:
+--
+-- -   PhoneNumber
+--
+-- -   HomePhoneNumber
+--
+-- -   BusinessPhoneNumber
+--
+-- -   MobilePhoneNumber
+--
+-- -   EmailAddress
+--
+-- -   PersonalEmailAddress
+--
+-- -   BusinessEmailAddress
+--
+-- -   FullName
+--
+-- For example, two or more profiles—with spelling mistakes such as __John
+-- Doe__ and __Jhn Doe__, or different casing email addresses such as
+-- __JOHN_DOE\@ANYCOMPANY.COM__ and __johndoe\@anycompany.com__, or
+-- different phone number formats such as __555-010-0000__ and
+-- __+1-555-010-0000__—can be detected as belonging to the same customer
+-- __John Doe__ and merged into a unified profile.
+module Amazonka.CustomerProfiles.GetMatches
+  ( -- * Creating a Request
+    GetMatches (..),
+    newGetMatches,
+
+    -- * Request Lenses
+    getMatches_maxResults,
+    getMatches_nextToken,
+    getMatches_domainName,
+
+    -- * Destructuring the Response
+    GetMatchesResponse (..),
+    newGetMatchesResponse,
+
+    -- * Response Lenses
+    getMatchesResponse_matchGenerationDate,
+    getMatchesResponse_matches,
+    getMatchesResponse_nextToken,
+    getMatchesResponse_potentialMatches,
+    getMatchesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetMatches' smart constructor.
+data GetMatches = GetMatches'
+  { -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMatches' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'getMatches_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'getMatches_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+--
+-- 'domainName', 'getMatches_domainName' - The unique name of the domain.
+newGetMatches ::
+  -- | 'domainName'
+  Prelude.Text ->
+  GetMatches
+newGetMatches pDomainName_ =
+  GetMatches'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      domainName = pDomainName_
+    }
+
+-- | The maximum number of results to return per page.
+getMatches_maxResults :: Lens.Lens' GetMatches (Prelude.Maybe Prelude.Natural)
+getMatches_maxResults = Lens.lens (\GetMatches' {maxResults} -> maxResults) (\s@GetMatches' {} a -> s {maxResults = a} :: GetMatches)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+getMatches_nextToken :: Lens.Lens' GetMatches (Prelude.Maybe Prelude.Text)
+getMatches_nextToken = Lens.lens (\GetMatches' {nextToken} -> nextToken) (\s@GetMatches' {} a -> s {nextToken = a} :: GetMatches)
+
+-- | The unique name of the domain.
+getMatches_domainName :: Lens.Lens' GetMatches Prelude.Text
+getMatches_domainName = Lens.lens (\GetMatches' {domainName} -> domainName) (\s@GetMatches' {} a -> s {domainName = a} :: GetMatches)
+
+instance Core.AWSRequest GetMatches where
+  type AWSResponse GetMatches = GetMatchesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetMatchesResponse'
+            Prelude.<$> (x Data..?> "MatchGenerationDate")
+            Prelude.<*> (x Data..?> "Matches" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "PotentialMatches")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetMatches where
+  hashWithSalt _salt GetMatches' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData GetMatches where
+  rnf GetMatches' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders GetMatches where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetMatches where
+  toPath GetMatches' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainName, "/matches"]
+
+instance Data.ToQuery GetMatches where
+  toQuery GetMatches' {..} =
+    Prelude.mconcat
+      [ "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetMatchesResponse' smart constructor.
+data GetMatchesResponse = GetMatchesResponse'
+  { -- | The timestamp this version of Match Result generated.
+    matchGenerationDate :: Prelude.Maybe Data.POSIX,
+    -- | The list of matched profiles for this instance.
+    matches :: Prelude.Maybe [MatchItem],
+    -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The number of potential matches found.
+    potentialMatches :: Prelude.Maybe Prelude.Natural,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMatchesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'matchGenerationDate', 'getMatchesResponse_matchGenerationDate' - The timestamp this version of Match Result generated.
+--
+-- 'matches', 'getMatchesResponse_matches' - The list of matched profiles for this instance.
+--
+-- 'nextToken', 'getMatchesResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'potentialMatches', 'getMatchesResponse_potentialMatches' - The number of potential matches found.
+--
+-- 'httpStatus', 'getMatchesResponse_httpStatus' - The response's http status code.
+newGetMatchesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetMatchesResponse
+newGetMatchesResponse pHttpStatus_ =
+  GetMatchesResponse'
+    { matchGenerationDate =
+        Prelude.Nothing,
+      matches = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      potentialMatches = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The timestamp this version of Match Result generated.
+getMatchesResponse_matchGenerationDate :: Lens.Lens' GetMatchesResponse (Prelude.Maybe Prelude.UTCTime)
+getMatchesResponse_matchGenerationDate = Lens.lens (\GetMatchesResponse' {matchGenerationDate} -> matchGenerationDate) (\s@GetMatchesResponse' {} a -> s {matchGenerationDate = a} :: GetMatchesResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The list of matched profiles for this instance.
+getMatchesResponse_matches :: Lens.Lens' GetMatchesResponse (Prelude.Maybe [MatchItem])
+getMatchesResponse_matches = Lens.lens (\GetMatchesResponse' {matches} -> matches) (\s@GetMatchesResponse' {} a -> s {matches = a} :: GetMatchesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+getMatchesResponse_nextToken :: Lens.Lens' GetMatchesResponse (Prelude.Maybe Prelude.Text)
+getMatchesResponse_nextToken = Lens.lens (\GetMatchesResponse' {nextToken} -> nextToken) (\s@GetMatchesResponse' {} a -> s {nextToken = a} :: GetMatchesResponse)
+
+-- | The number of potential matches found.
+getMatchesResponse_potentialMatches :: Lens.Lens' GetMatchesResponse (Prelude.Maybe Prelude.Natural)
+getMatchesResponse_potentialMatches = Lens.lens (\GetMatchesResponse' {potentialMatches} -> potentialMatches) (\s@GetMatchesResponse' {} a -> s {potentialMatches = a} :: GetMatchesResponse)
+
+-- | The response's http status code.
+getMatchesResponse_httpStatus :: Lens.Lens' GetMatchesResponse Prelude.Int
+getMatchesResponse_httpStatus = Lens.lens (\GetMatchesResponse' {httpStatus} -> httpStatus) (\s@GetMatchesResponse' {} a -> s {httpStatus = a} :: GetMatchesResponse)
+
+instance Prelude.NFData GetMatchesResponse where
+  rnf GetMatchesResponse' {..} =
+    Prelude.rnf matchGenerationDate
+      `Prelude.seq` Prelude.rnf matches
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf potentialMatches
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/GetProfileObjectType.hs b/gen/Amazonka/CustomerProfiles/GetProfileObjectType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/GetProfileObjectType.hs
@@ -0,0 +1,342 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.GetProfileObjectType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the object types for a specific domain.
+module Amazonka.CustomerProfiles.GetProfileObjectType
+  ( -- * Creating a Request
+    GetProfileObjectType (..),
+    newGetProfileObjectType,
+
+    -- * Request Lenses
+    getProfileObjectType_domainName,
+    getProfileObjectType_objectTypeName,
+
+    -- * Destructuring the Response
+    GetProfileObjectTypeResponse (..),
+    newGetProfileObjectTypeResponse,
+
+    -- * Response Lenses
+    getProfileObjectTypeResponse_allowProfileCreation,
+    getProfileObjectTypeResponse_createdAt,
+    getProfileObjectTypeResponse_encryptionKey,
+    getProfileObjectTypeResponse_expirationDays,
+    getProfileObjectTypeResponse_fields,
+    getProfileObjectTypeResponse_keys,
+    getProfileObjectTypeResponse_lastUpdatedAt,
+    getProfileObjectTypeResponse_sourceLastUpdatedTimestampFormat,
+    getProfileObjectTypeResponse_tags,
+    getProfileObjectTypeResponse_templateId,
+    getProfileObjectTypeResponse_httpStatus,
+    getProfileObjectTypeResponse_objectTypeName,
+    getProfileObjectTypeResponse_description,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetProfileObjectType' smart constructor.
+data GetProfileObjectType = GetProfileObjectType'
+  { -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The name of the profile object type.
+    objectTypeName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetProfileObjectType' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'getProfileObjectType_domainName' - The unique name of the domain.
+--
+-- 'objectTypeName', 'getProfileObjectType_objectTypeName' - The name of the profile object type.
+newGetProfileObjectType ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'objectTypeName'
+  Prelude.Text ->
+  GetProfileObjectType
+newGetProfileObjectType pDomainName_ pObjectTypeName_ =
+  GetProfileObjectType'
+    { domainName = pDomainName_,
+      objectTypeName = pObjectTypeName_
+    }
+
+-- | The unique name of the domain.
+getProfileObjectType_domainName :: Lens.Lens' GetProfileObjectType Prelude.Text
+getProfileObjectType_domainName = Lens.lens (\GetProfileObjectType' {domainName} -> domainName) (\s@GetProfileObjectType' {} a -> s {domainName = a} :: GetProfileObjectType)
+
+-- | The name of the profile object type.
+getProfileObjectType_objectTypeName :: Lens.Lens' GetProfileObjectType Prelude.Text
+getProfileObjectType_objectTypeName = Lens.lens (\GetProfileObjectType' {objectTypeName} -> objectTypeName) (\s@GetProfileObjectType' {} a -> s {objectTypeName = a} :: GetProfileObjectType)
+
+instance Core.AWSRequest GetProfileObjectType where
+  type
+    AWSResponse GetProfileObjectType =
+      GetProfileObjectTypeResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetProfileObjectTypeResponse'
+            Prelude.<$> (x Data..?> "AllowProfileCreation")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "EncryptionKey")
+            Prelude.<*> (x Data..?> "ExpirationDays")
+            Prelude.<*> (x Data..?> "Fields" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Keys" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "LastUpdatedAt")
+            Prelude.<*> (x Data..?> "SourceLastUpdatedTimestampFormat")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "TemplateId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "ObjectTypeName")
+            Prelude.<*> (x Data..:> "Description")
+      )
+
+instance Prelude.Hashable GetProfileObjectType where
+  hashWithSalt _salt GetProfileObjectType' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` objectTypeName
+
+instance Prelude.NFData GetProfileObjectType where
+  rnf GetProfileObjectType' {..} =
+    Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf objectTypeName
+
+instance Data.ToHeaders GetProfileObjectType where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetProfileObjectType where
+  toPath GetProfileObjectType' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/object-types/",
+        Data.toBS objectTypeName
+      ]
+
+instance Data.ToQuery GetProfileObjectType where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetProfileObjectTypeResponse' smart constructor.
+data GetProfileObjectTypeResponse = GetProfileObjectTypeResponse'
+  { -- | Indicates whether a profile should be created when data is received if
+    -- one doesn’t exist for an object of this type. The default is @FALSE@. If
+    -- the AllowProfileCreation flag is set to @FALSE@, then the service tries
+    -- to fetch a standard profile and associate this object with the profile.
+    -- If it is set to @TRUE@, and if no match is found, then the service
+    -- creates a new standard profile.
+    allowProfileCreation :: Prelude.Maybe Prelude.Bool,
+    -- | The timestamp of when the domain was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The customer-provided key to encrypt the profile object that will be
+    -- created in this profile object type.
+    encryptionKey :: Prelude.Maybe Prelude.Text,
+    -- | The number of days until the data in the object expires.
+    expirationDays :: Prelude.Maybe Prelude.Natural,
+    -- | A map of the name and ObjectType field.
+    fields :: Prelude.Maybe (Prelude.HashMap Prelude.Text ObjectTypeField),
+    -- | A list of unique keys that can be used to map data to the profile.
+    keys :: Prelude.Maybe (Prelude.HashMap Prelude.Text [ObjectTypeKey]),
+    -- | The timestamp of when the domain was most recently edited.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The format of your @sourceLastUpdatedTimestamp@ that was previously set
+    -- up.
+    sourceLastUpdatedTimestampFormat :: Prelude.Maybe Prelude.Text,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A unique identifier for the object template.
+    templateId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the profile object type.
+    objectTypeName :: Prelude.Text,
+    -- | The description of the profile object type.
+    description :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetProfileObjectTypeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowProfileCreation', 'getProfileObjectTypeResponse_allowProfileCreation' - Indicates whether a profile should be created when data is received if
+-- one doesn’t exist for an object of this type. The default is @FALSE@. If
+-- the AllowProfileCreation flag is set to @FALSE@, then the service tries
+-- to fetch a standard profile and associate this object with the profile.
+-- If it is set to @TRUE@, and if no match is found, then the service
+-- creates a new standard profile.
+--
+-- 'createdAt', 'getProfileObjectTypeResponse_createdAt' - The timestamp of when the domain was created.
+--
+-- 'encryptionKey', 'getProfileObjectTypeResponse_encryptionKey' - The customer-provided key to encrypt the profile object that will be
+-- created in this profile object type.
+--
+-- 'expirationDays', 'getProfileObjectTypeResponse_expirationDays' - The number of days until the data in the object expires.
+--
+-- 'fields', 'getProfileObjectTypeResponse_fields' - A map of the name and ObjectType field.
+--
+-- 'keys', 'getProfileObjectTypeResponse_keys' - A list of unique keys that can be used to map data to the profile.
+--
+-- 'lastUpdatedAt', 'getProfileObjectTypeResponse_lastUpdatedAt' - The timestamp of when the domain was most recently edited.
+--
+-- 'sourceLastUpdatedTimestampFormat', 'getProfileObjectTypeResponse_sourceLastUpdatedTimestampFormat' - The format of your @sourceLastUpdatedTimestamp@ that was previously set
+-- up.
+--
+-- 'tags', 'getProfileObjectTypeResponse_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'templateId', 'getProfileObjectTypeResponse_templateId' - A unique identifier for the object template.
+--
+-- 'httpStatus', 'getProfileObjectTypeResponse_httpStatus' - The response's http status code.
+--
+-- 'objectTypeName', 'getProfileObjectTypeResponse_objectTypeName' - The name of the profile object type.
+--
+-- 'description', 'getProfileObjectTypeResponse_description' - The description of the profile object type.
+newGetProfileObjectTypeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'objectTypeName'
+  Prelude.Text ->
+  -- | 'description'
+  Prelude.Text ->
+  GetProfileObjectTypeResponse
+newGetProfileObjectTypeResponse
+  pHttpStatus_
+  pObjectTypeName_
+  pDescription_ =
+    GetProfileObjectTypeResponse'
+      { allowProfileCreation =
+          Prelude.Nothing,
+        createdAt = Prelude.Nothing,
+        encryptionKey = Prelude.Nothing,
+        expirationDays = Prelude.Nothing,
+        fields = Prelude.Nothing,
+        keys = Prelude.Nothing,
+        lastUpdatedAt = Prelude.Nothing,
+        sourceLastUpdatedTimestampFormat =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        templateId = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        objectTypeName = pObjectTypeName_,
+        description = pDescription_
+      }
+
+-- | Indicates whether a profile should be created when data is received if
+-- one doesn’t exist for an object of this type. The default is @FALSE@. If
+-- the AllowProfileCreation flag is set to @FALSE@, then the service tries
+-- to fetch a standard profile and associate this object with the profile.
+-- If it is set to @TRUE@, and if no match is found, then the service
+-- creates a new standard profile.
+getProfileObjectTypeResponse_allowProfileCreation :: Lens.Lens' GetProfileObjectTypeResponse (Prelude.Maybe Prelude.Bool)
+getProfileObjectTypeResponse_allowProfileCreation = Lens.lens (\GetProfileObjectTypeResponse' {allowProfileCreation} -> allowProfileCreation) (\s@GetProfileObjectTypeResponse' {} a -> s {allowProfileCreation = a} :: GetProfileObjectTypeResponse)
+
+-- | The timestamp of when the domain was created.
+getProfileObjectTypeResponse_createdAt :: Lens.Lens' GetProfileObjectTypeResponse (Prelude.Maybe Prelude.UTCTime)
+getProfileObjectTypeResponse_createdAt = Lens.lens (\GetProfileObjectTypeResponse' {createdAt} -> createdAt) (\s@GetProfileObjectTypeResponse' {} a -> s {createdAt = a} :: GetProfileObjectTypeResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The customer-provided key to encrypt the profile object that will be
+-- created in this profile object type.
+getProfileObjectTypeResponse_encryptionKey :: Lens.Lens' GetProfileObjectTypeResponse (Prelude.Maybe Prelude.Text)
+getProfileObjectTypeResponse_encryptionKey = Lens.lens (\GetProfileObjectTypeResponse' {encryptionKey} -> encryptionKey) (\s@GetProfileObjectTypeResponse' {} a -> s {encryptionKey = a} :: GetProfileObjectTypeResponse)
+
+-- | The number of days until the data in the object expires.
+getProfileObjectTypeResponse_expirationDays :: Lens.Lens' GetProfileObjectTypeResponse (Prelude.Maybe Prelude.Natural)
+getProfileObjectTypeResponse_expirationDays = Lens.lens (\GetProfileObjectTypeResponse' {expirationDays} -> expirationDays) (\s@GetProfileObjectTypeResponse' {} a -> s {expirationDays = a} :: GetProfileObjectTypeResponse)
+
+-- | A map of the name and ObjectType field.
+getProfileObjectTypeResponse_fields :: Lens.Lens' GetProfileObjectTypeResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text ObjectTypeField))
+getProfileObjectTypeResponse_fields = Lens.lens (\GetProfileObjectTypeResponse' {fields} -> fields) (\s@GetProfileObjectTypeResponse' {} a -> s {fields = a} :: GetProfileObjectTypeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of unique keys that can be used to map data to the profile.
+getProfileObjectTypeResponse_keys :: Lens.Lens' GetProfileObjectTypeResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text [ObjectTypeKey]))
+getProfileObjectTypeResponse_keys = Lens.lens (\GetProfileObjectTypeResponse' {keys} -> keys) (\s@GetProfileObjectTypeResponse' {} a -> s {keys = a} :: GetProfileObjectTypeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The timestamp of when the domain was most recently edited.
+getProfileObjectTypeResponse_lastUpdatedAt :: Lens.Lens' GetProfileObjectTypeResponse (Prelude.Maybe Prelude.UTCTime)
+getProfileObjectTypeResponse_lastUpdatedAt = Lens.lens (\GetProfileObjectTypeResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@GetProfileObjectTypeResponse' {} a -> s {lastUpdatedAt = a} :: GetProfileObjectTypeResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The format of your @sourceLastUpdatedTimestamp@ that was previously set
+-- up.
+getProfileObjectTypeResponse_sourceLastUpdatedTimestampFormat :: Lens.Lens' GetProfileObjectTypeResponse (Prelude.Maybe Prelude.Text)
+getProfileObjectTypeResponse_sourceLastUpdatedTimestampFormat = Lens.lens (\GetProfileObjectTypeResponse' {sourceLastUpdatedTimestampFormat} -> sourceLastUpdatedTimestampFormat) (\s@GetProfileObjectTypeResponse' {} a -> s {sourceLastUpdatedTimestampFormat = a} :: GetProfileObjectTypeResponse)
+
+-- | The tags used to organize, track, or control access for this resource.
+getProfileObjectTypeResponse_tags :: Lens.Lens' GetProfileObjectTypeResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getProfileObjectTypeResponse_tags = Lens.lens (\GetProfileObjectTypeResponse' {tags} -> tags) (\s@GetProfileObjectTypeResponse' {} a -> s {tags = a} :: GetProfileObjectTypeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A unique identifier for the object template.
+getProfileObjectTypeResponse_templateId :: Lens.Lens' GetProfileObjectTypeResponse (Prelude.Maybe Prelude.Text)
+getProfileObjectTypeResponse_templateId = Lens.lens (\GetProfileObjectTypeResponse' {templateId} -> templateId) (\s@GetProfileObjectTypeResponse' {} a -> s {templateId = a} :: GetProfileObjectTypeResponse)
+
+-- | The response's http status code.
+getProfileObjectTypeResponse_httpStatus :: Lens.Lens' GetProfileObjectTypeResponse Prelude.Int
+getProfileObjectTypeResponse_httpStatus = Lens.lens (\GetProfileObjectTypeResponse' {httpStatus} -> httpStatus) (\s@GetProfileObjectTypeResponse' {} a -> s {httpStatus = a} :: GetProfileObjectTypeResponse)
+
+-- | The name of the profile object type.
+getProfileObjectTypeResponse_objectTypeName :: Lens.Lens' GetProfileObjectTypeResponse Prelude.Text
+getProfileObjectTypeResponse_objectTypeName = Lens.lens (\GetProfileObjectTypeResponse' {objectTypeName} -> objectTypeName) (\s@GetProfileObjectTypeResponse' {} a -> s {objectTypeName = a} :: GetProfileObjectTypeResponse)
+
+-- | The description of the profile object type.
+getProfileObjectTypeResponse_description :: Lens.Lens' GetProfileObjectTypeResponse Prelude.Text
+getProfileObjectTypeResponse_description = Lens.lens (\GetProfileObjectTypeResponse' {description} -> description) (\s@GetProfileObjectTypeResponse' {} a -> s {description = a} :: GetProfileObjectTypeResponse)
+
+instance Prelude.NFData GetProfileObjectTypeResponse where
+  rnf GetProfileObjectTypeResponse' {..} =
+    Prelude.rnf allowProfileCreation
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf encryptionKey
+      `Prelude.seq` Prelude.rnf expirationDays
+      `Prelude.seq` Prelude.rnf fields
+      `Prelude.seq` Prelude.rnf keys
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf sourceLastUpdatedTimestampFormat
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf templateId
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf objectTypeName
+      `Prelude.seq` Prelude.rnf description
diff --git a/gen/Amazonka/CustomerProfiles/GetProfileObjectTypeTemplate.hs b/gen/Amazonka/CustomerProfiles/GetProfileObjectTypeTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/GetProfileObjectTypeTemplate.hs
@@ -0,0 +1,266 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.GetProfileObjectTypeTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the template information for a specific object type.
+--
+-- A template is a predefined ProfileObjectType, such as
+-- “Salesforce-Account” or “Salesforce-Contact.” When a user sends a
+-- ProfileObject, using the PutProfileObject API, with an ObjectTypeName
+-- that matches one of the TemplateIds, it uses the mappings from the
+-- template.
+module Amazonka.CustomerProfiles.GetProfileObjectTypeTemplate
+  ( -- * Creating a Request
+    GetProfileObjectTypeTemplate (..),
+    newGetProfileObjectTypeTemplate,
+
+    -- * Request Lenses
+    getProfileObjectTypeTemplate_templateId,
+
+    -- * Destructuring the Response
+    GetProfileObjectTypeTemplateResponse (..),
+    newGetProfileObjectTypeTemplateResponse,
+
+    -- * Response Lenses
+    getProfileObjectTypeTemplateResponse_allowProfileCreation,
+    getProfileObjectTypeTemplateResponse_fields,
+    getProfileObjectTypeTemplateResponse_keys,
+    getProfileObjectTypeTemplateResponse_sourceLastUpdatedTimestampFormat,
+    getProfileObjectTypeTemplateResponse_sourceName,
+    getProfileObjectTypeTemplateResponse_sourceObject,
+    getProfileObjectTypeTemplateResponse_templateId,
+    getProfileObjectTypeTemplateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetProfileObjectTypeTemplate' smart constructor.
+data GetProfileObjectTypeTemplate = GetProfileObjectTypeTemplate'
+  { -- | A unique identifier for the object template.
+    templateId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetProfileObjectTypeTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'templateId', 'getProfileObjectTypeTemplate_templateId' - A unique identifier for the object template.
+newGetProfileObjectTypeTemplate ::
+  -- | 'templateId'
+  Prelude.Text ->
+  GetProfileObjectTypeTemplate
+newGetProfileObjectTypeTemplate pTemplateId_ =
+  GetProfileObjectTypeTemplate'
+    { templateId =
+        pTemplateId_
+    }
+
+-- | A unique identifier for the object template.
+getProfileObjectTypeTemplate_templateId :: Lens.Lens' GetProfileObjectTypeTemplate Prelude.Text
+getProfileObjectTypeTemplate_templateId = Lens.lens (\GetProfileObjectTypeTemplate' {templateId} -> templateId) (\s@GetProfileObjectTypeTemplate' {} a -> s {templateId = a} :: GetProfileObjectTypeTemplate)
+
+instance Core.AWSRequest GetProfileObjectTypeTemplate where
+  type
+    AWSResponse GetProfileObjectTypeTemplate =
+      GetProfileObjectTypeTemplateResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetProfileObjectTypeTemplateResponse'
+            Prelude.<$> (x Data..?> "AllowProfileCreation")
+            Prelude.<*> (x Data..?> "Fields" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Keys" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "SourceLastUpdatedTimestampFormat")
+            Prelude.<*> (x Data..?> "SourceName")
+            Prelude.<*> (x Data..?> "SourceObject")
+            Prelude.<*> (x Data..?> "TemplateId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetProfileObjectTypeTemplate
+  where
+  hashWithSalt _salt GetProfileObjectTypeTemplate' {..} =
+    _salt `Prelude.hashWithSalt` templateId
+
+instance Prelude.NFData GetProfileObjectTypeTemplate where
+  rnf GetProfileObjectTypeTemplate' {..} =
+    Prelude.rnf templateId
+
+instance Data.ToHeaders GetProfileObjectTypeTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetProfileObjectTypeTemplate where
+  toPath GetProfileObjectTypeTemplate' {..} =
+    Prelude.mconcat
+      ["/templates/", Data.toBS templateId]
+
+instance Data.ToQuery GetProfileObjectTypeTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetProfileObjectTypeTemplateResponse' smart constructor.
+data GetProfileObjectTypeTemplateResponse = GetProfileObjectTypeTemplateResponse'
+  { -- | Indicates whether a profile should be created when data is received if
+    -- one doesn’t exist for an object of this type. The default is @FALSE@. If
+    -- the AllowProfileCreation flag is set to @FALSE@, then the service tries
+    -- to fetch a standard profile and associate this object with the profile.
+    -- If it is set to @TRUE@, and if no match is found, then the service
+    -- creates a new standard profile.
+    allowProfileCreation :: Prelude.Maybe Prelude.Bool,
+    -- | A map of the name and ObjectType field.
+    fields :: Prelude.Maybe (Prelude.HashMap Prelude.Text ObjectTypeField),
+    -- | A list of unique keys that can be used to map data to the profile.
+    keys :: Prelude.Maybe (Prelude.HashMap Prelude.Text [ObjectTypeKey]),
+    -- | The format of your @sourceLastUpdatedTimestamp@ that was previously set
+    -- up.
+    sourceLastUpdatedTimestampFormat :: Prelude.Maybe Prelude.Text,
+    -- | The name of the source of the object template.
+    sourceName :: Prelude.Maybe Prelude.Text,
+    -- | The source of the object template.
+    sourceObject :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the object template.
+    templateId :: 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 'GetProfileObjectTypeTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowProfileCreation', 'getProfileObjectTypeTemplateResponse_allowProfileCreation' - Indicates whether a profile should be created when data is received if
+-- one doesn’t exist for an object of this type. The default is @FALSE@. If
+-- the AllowProfileCreation flag is set to @FALSE@, then the service tries
+-- to fetch a standard profile and associate this object with the profile.
+-- If it is set to @TRUE@, and if no match is found, then the service
+-- creates a new standard profile.
+--
+-- 'fields', 'getProfileObjectTypeTemplateResponse_fields' - A map of the name and ObjectType field.
+--
+-- 'keys', 'getProfileObjectTypeTemplateResponse_keys' - A list of unique keys that can be used to map data to the profile.
+--
+-- 'sourceLastUpdatedTimestampFormat', 'getProfileObjectTypeTemplateResponse_sourceLastUpdatedTimestampFormat' - The format of your @sourceLastUpdatedTimestamp@ that was previously set
+-- up.
+--
+-- 'sourceName', 'getProfileObjectTypeTemplateResponse_sourceName' - The name of the source of the object template.
+--
+-- 'sourceObject', 'getProfileObjectTypeTemplateResponse_sourceObject' - The source of the object template.
+--
+-- 'templateId', 'getProfileObjectTypeTemplateResponse_templateId' - A unique identifier for the object template.
+--
+-- 'httpStatus', 'getProfileObjectTypeTemplateResponse_httpStatus' - The response's http status code.
+newGetProfileObjectTypeTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetProfileObjectTypeTemplateResponse
+newGetProfileObjectTypeTemplateResponse pHttpStatus_ =
+  GetProfileObjectTypeTemplateResponse'
+    { allowProfileCreation =
+        Prelude.Nothing,
+      fields = Prelude.Nothing,
+      keys = Prelude.Nothing,
+      sourceLastUpdatedTimestampFormat =
+        Prelude.Nothing,
+      sourceName = Prelude.Nothing,
+      sourceObject = Prelude.Nothing,
+      templateId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Indicates whether a profile should be created when data is received if
+-- one doesn’t exist for an object of this type. The default is @FALSE@. If
+-- the AllowProfileCreation flag is set to @FALSE@, then the service tries
+-- to fetch a standard profile and associate this object with the profile.
+-- If it is set to @TRUE@, and if no match is found, then the service
+-- creates a new standard profile.
+getProfileObjectTypeTemplateResponse_allowProfileCreation :: Lens.Lens' GetProfileObjectTypeTemplateResponse (Prelude.Maybe Prelude.Bool)
+getProfileObjectTypeTemplateResponse_allowProfileCreation = Lens.lens (\GetProfileObjectTypeTemplateResponse' {allowProfileCreation} -> allowProfileCreation) (\s@GetProfileObjectTypeTemplateResponse' {} a -> s {allowProfileCreation = a} :: GetProfileObjectTypeTemplateResponse)
+
+-- | A map of the name and ObjectType field.
+getProfileObjectTypeTemplateResponse_fields :: Lens.Lens' GetProfileObjectTypeTemplateResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text ObjectTypeField))
+getProfileObjectTypeTemplateResponse_fields = Lens.lens (\GetProfileObjectTypeTemplateResponse' {fields} -> fields) (\s@GetProfileObjectTypeTemplateResponse' {} a -> s {fields = a} :: GetProfileObjectTypeTemplateResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of unique keys that can be used to map data to the profile.
+getProfileObjectTypeTemplateResponse_keys :: Lens.Lens' GetProfileObjectTypeTemplateResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text [ObjectTypeKey]))
+getProfileObjectTypeTemplateResponse_keys = Lens.lens (\GetProfileObjectTypeTemplateResponse' {keys} -> keys) (\s@GetProfileObjectTypeTemplateResponse' {} a -> s {keys = a} :: GetProfileObjectTypeTemplateResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The format of your @sourceLastUpdatedTimestamp@ that was previously set
+-- up.
+getProfileObjectTypeTemplateResponse_sourceLastUpdatedTimestampFormat :: Lens.Lens' GetProfileObjectTypeTemplateResponse (Prelude.Maybe Prelude.Text)
+getProfileObjectTypeTemplateResponse_sourceLastUpdatedTimestampFormat = Lens.lens (\GetProfileObjectTypeTemplateResponse' {sourceLastUpdatedTimestampFormat} -> sourceLastUpdatedTimestampFormat) (\s@GetProfileObjectTypeTemplateResponse' {} a -> s {sourceLastUpdatedTimestampFormat = a} :: GetProfileObjectTypeTemplateResponse)
+
+-- | The name of the source of the object template.
+getProfileObjectTypeTemplateResponse_sourceName :: Lens.Lens' GetProfileObjectTypeTemplateResponse (Prelude.Maybe Prelude.Text)
+getProfileObjectTypeTemplateResponse_sourceName = Lens.lens (\GetProfileObjectTypeTemplateResponse' {sourceName} -> sourceName) (\s@GetProfileObjectTypeTemplateResponse' {} a -> s {sourceName = a} :: GetProfileObjectTypeTemplateResponse)
+
+-- | The source of the object template.
+getProfileObjectTypeTemplateResponse_sourceObject :: Lens.Lens' GetProfileObjectTypeTemplateResponse (Prelude.Maybe Prelude.Text)
+getProfileObjectTypeTemplateResponse_sourceObject = Lens.lens (\GetProfileObjectTypeTemplateResponse' {sourceObject} -> sourceObject) (\s@GetProfileObjectTypeTemplateResponse' {} a -> s {sourceObject = a} :: GetProfileObjectTypeTemplateResponse)
+
+-- | A unique identifier for the object template.
+getProfileObjectTypeTemplateResponse_templateId :: Lens.Lens' GetProfileObjectTypeTemplateResponse (Prelude.Maybe Prelude.Text)
+getProfileObjectTypeTemplateResponse_templateId = Lens.lens (\GetProfileObjectTypeTemplateResponse' {templateId} -> templateId) (\s@GetProfileObjectTypeTemplateResponse' {} a -> s {templateId = a} :: GetProfileObjectTypeTemplateResponse)
+
+-- | The response's http status code.
+getProfileObjectTypeTemplateResponse_httpStatus :: Lens.Lens' GetProfileObjectTypeTemplateResponse Prelude.Int
+getProfileObjectTypeTemplateResponse_httpStatus = Lens.lens (\GetProfileObjectTypeTemplateResponse' {httpStatus} -> httpStatus) (\s@GetProfileObjectTypeTemplateResponse' {} a -> s {httpStatus = a} :: GetProfileObjectTypeTemplateResponse)
+
+instance
+  Prelude.NFData
+    GetProfileObjectTypeTemplateResponse
+  where
+  rnf GetProfileObjectTypeTemplateResponse' {..} =
+    Prelude.rnf allowProfileCreation
+      `Prelude.seq` Prelude.rnf fields
+      `Prelude.seq` Prelude.rnf keys
+      `Prelude.seq` Prelude.rnf sourceLastUpdatedTimestampFormat
+      `Prelude.seq` Prelude.rnf sourceName
+      `Prelude.seq` Prelude.rnf sourceObject
+      `Prelude.seq` Prelude.rnf templateId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/GetWorkflow.hs b/gen/Amazonka/CustomerProfiles/GetWorkflow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/GetWorkflow.hs
@@ -0,0 +1,262 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.GetWorkflow
+-- 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 details of specified workflow.
+module Amazonka.CustomerProfiles.GetWorkflow
+  ( -- * Creating a Request
+    GetWorkflow (..),
+    newGetWorkflow,
+
+    -- * Request Lenses
+    getWorkflow_domainName,
+    getWorkflow_workflowId,
+
+    -- * Destructuring the Response
+    GetWorkflowResponse (..),
+    newGetWorkflowResponse,
+
+    -- * Response Lenses
+    getWorkflowResponse_attributes,
+    getWorkflowResponse_errorDescription,
+    getWorkflowResponse_lastUpdatedAt,
+    getWorkflowResponse_metrics,
+    getWorkflowResponse_startDate,
+    getWorkflowResponse_status,
+    getWorkflowResponse_workflowId,
+    getWorkflowResponse_workflowType,
+    getWorkflowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetWorkflow' smart constructor.
+data GetWorkflow = GetWorkflow'
+  { -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | Unique identifier for the workflow.
+    workflowId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWorkflow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'getWorkflow_domainName' - The unique name of the domain.
+--
+-- 'workflowId', 'getWorkflow_workflowId' - Unique identifier for the workflow.
+newGetWorkflow ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'workflowId'
+  Prelude.Text ->
+  GetWorkflow
+newGetWorkflow pDomainName_ pWorkflowId_ =
+  GetWorkflow'
+    { domainName = pDomainName_,
+      workflowId = pWorkflowId_
+    }
+
+-- | The unique name of the domain.
+getWorkflow_domainName :: Lens.Lens' GetWorkflow Prelude.Text
+getWorkflow_domainName = Lens.lens (\GetWorkflow' {domainName} -> domainName) (\s@GetWorkflow' {} a -> s {domainName = a} :: GetWorkflow)
+
+-- | Unique identifier for the workflow.
+getWorkflow_workflowId :: Lens.Lens' GetWorkflow Prelude.Text
+getWorkflow_workflowId = Lens.lens (\GetWorkflow' {workflowId} -> workflowId) (\s@GetWorkflow' {} a -> s {workflowId = a} :: GetWorkflow)
+
+instance Core.AWSRequest GetWorkflow where
+  type AWSResponse GetWorkflow = GetWorkflowResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetWorkflowResponse'
+            Prelude.<$> (x Data..?> "Attributes")
+            Prelude.<*> (x Data..?> "ErrorDescription")
+            Prelude.<*> (x Data..?> "LastUpdatedAt")
+            Prelude.<*> (x Data..?> "Metrics")
+            Prelude.<*> (x Data..?> "StartDate")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "WorkflowId")
+            Prelude.<*> (x Data..?> "WorkflowType")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetWorkflow where
+  hashWithSalt _salt GetWorkflow' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` workflowId
+
+instance Prelude.NFData GetWorkflow where
+  rnf GetWorkflow' {..} =
+    Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf workflowId
+
+instance Data.ToHeaders GetWorkflow where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetWorkflow where
+  toPath GetWorkflow' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/workflows/",
+        Data.toBS workflowId
+      ]
+
+instance Data.ToQuery GetWorkflow where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetWorkflowResponse' smart constructor.
+data GetWorkflowResponse = GetWorkflowResponse'
+  { -- | Attributes provided for workflow execution.
+    attributes :: Prelude.Maybe WorkflowAttributes,
+    -- | Workflow error messages during execution (if any).
+    errorDescription :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp that represents when workflow execution last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | Workflow specific execution metrics.
+    metrics :: Prelude.Maybe WorkflowMetrics,
+    -- | The timestamp that represents when workflow execution started.
+    startDate :: Prelude.Maybe Data.POSIX,
+    -- | Status of workflow execution.
+    status :: Prelude.Maybe Status,
+    -- | Unique identifier for the workflow.
+    workflowId :: Prelude.Maybe Prelude.Text,
+    -- | The type of workflow. The only supported value is APPFLOW_INTEGRATION.
+    workflowType :: Prelude.Maybe WorkflowType,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWorkflowResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributes', 'getWorkflowResponse_attributes' - Attributes provided for workflow execution.
+--
+-- 'errorDescription', 'getWorkflowResponse_errorDescription' - Workflow error messages during execution (if any).
+--
+-- 'lastUpdatedAt', 'getWorkflowResponse_lastUpdatedAt' - The timestamp that represents when workflow execution last updated.
+--
+-- 'metrics', 'getWorkflowResponse_metrics' - Workflow specific execution metrics.
+--
+-- 'startDate', 'getWorkflowResponse_startDate' - The timestamp that represents when workflow execution started.
+--
+-- 'status', 'getWorkflowResponse_status' - Status of workflow execution.
+--
+-- 'workflowId', 'getWorkflowResponse_workflowId' - Unique identifier for the workflow.
+--
+-- 'workflowType', 'getWorkflowResponse_workflowType' - The type of workflow. The only supported value is APPFLOW_INTEGRATION.
+--
+-- 'httpStatus', 'getWorkflowResponse_httpStatus' - The response's http status code.
+newGetWorkflowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetWorkflowResponse
+newGetWorkflowResponse pHttpStatus_ =
+  GetWorkflowResponse'
+    { attributes = Prelude.Nothing,
+      errorDescription = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      metrics = Prelude.Nothing,
+      startDate = Prelude.Nothing,
+      status = Prelude.Nothing,
+      workflowId = Prelude.Nothing,
+      workflowType = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Attributes provided for workflow execution.
+getWorkflowResponse_attributes :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe WorkflowAttributes)
+getWorkflowResponse_attributes = Lens.lens (\GetWorkflowResponse' {attributes} -> attributes) (\s@GetWorkflowResponse' {} a -> s {attributes = a} :: GetWorkflowResponse)
+
+-- | Workflow error messages during execution (if any).
+getWorkflowResponse_errorDescription :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.Text)
+getWorkflowResponse_errorDescription = Lens.lens (\GetWorkflowResponse' {errorDescription} -> errorDescription) (\s@GetWorkflowResponse' {} a -> s {errorDescription = a} :: GetWorkflowResponse)
+
+-- | The timestamp that represents when workflow execution last updated.
+getWorkflowResponse_lastUpdatedAt :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.UTCTime)
+getWorkflowResponse_lastUpdatedAt = Lens.lens (\GetWorkflowResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@GetWorkflowResponse' {} a -> s {lastUpdatedAt = a} :: GetWorkflowResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Workflow specific execution metrics.
+getWorkflowResponse_metrics :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe WorkflowMetrics)
+getWorkflowResponse_metrics = Lens.lens (\GetWorkflowResponse' {metrics} -> metrics) (\s@GetWorkflowResponse' {} a -> s {metrics = a} :: GetWorkflowResponse)
+
+-- | The timestamp that represents when workflow execution started.
+getWorkflowResponse_startDate :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.UTCTime)
+getWorkflowResponse_startDate = Lens.lens (\GetWorkflowResponse' {startDate} -> startDate) (\s@GetWorkflowResponse' {} a -> s {startDate = a} :: GetWorkflowResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Status of workflow execution.
+getWorkflowResponse_status :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Status)
+getWorkflowResponse_status = Lens.lens (\GetWorkflowResponse' {status} -> status) (\s@GetWorkflowResponse' {} a -> s {status = a} :: GetWorkflowResponse)
+
+-- | Unique identifier for the workflow.
+getWorkflowResponse_workflowId :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.Text)
+getWorkflowResponse_workflowId = Lens.lens (\GetWorkflowResponse' {workflowId} -> workflowId) (\s@GetWorkflowResponse' {} a -> s {workflowId = a} :: GetWorkflowResponse)
+
+-- | The type of workflow. The only supported value is APPFLOW_INTEGRATION.
+getWorkflowResponse_workflowType :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe WorkflowType)
+getWorkflowResponse_workflowType = Lens.lens (\GetWorkflowResponse' {workflowType} -> workflowType) (\s@GetWorkflowResponse' {} a -> s {workflowType = a} :: GetWorkflowResponse)
+
+-- | The response's http status code.
+getWorkflowResponse_httpStatus :: Lens.Lens' GetWorkflowResponse Prelude.Int
+getWorkflowResponse_httpStatus = Lens.lens (\GetWorkflowResponse' {httpStatus} -> httpStatus) (\s@GetWorkflowResponse' {} a -> s {httpStatus = a} :: GetWorkflowResponse)
+
+instance Prelude.NFData GetWorkflowResponse where
+  rnf GetWorkflowResponse' {..} =
+    Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf errorDescription
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf metrics
+      `Prelude.seq` Prelude.rnf startDate
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf workflowType
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/GetWorkflowSteps.hs b/gen/Amazonka/CustomerProfiles/GetWorkflowSteps.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/GetWorkflowSteps.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.CustomerProfiles.GetWorkflowSteps
+-- 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 granular list of steps in workflow.
+module Amazonka.CustomerProfiles.GetWorkflowSteps
+  ( -- * Creating a Request
+    GetWorkflowSteps (..),
+    newGetWorkflowSteps,
+
+    -- * Request Lenses
+    getWorkflowSteps_maxResults,
+    getWorkflowSteps_nextToken,
+    getWorkflowSteps_domainName,
+    getWorkflowSteps_workflowId,
+
+    -- * Destructuring the Response
+    GetWorkflowStepsResponse (..),
+    newGetWorkflowStepsResponse,
+
+    -- * Response Lenses
+    getWorkflowStepsResponse_items,
+    getWorkflowStepsResponse_nextToken,
+    getWorkflowStepsResponse_workflowId,
+    getWorkflowStepsResponse_workflowType,
+    getWorkflowStepsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetWorkflowSteps' smart constructor.
+data GetWorkflowSteps = GetWorkflowSteps'
+  { -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | Unique identifier for the workflow.
+    workflowId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWorkflowSteps' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'getWorkflowSteps_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'getWorkflowSteps_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+--
+-- 'domainName', 'getWorkflowSteps_domainName' - The unique name of the domain.
+--
+-- 'workflowId', 'getWorkflowSteps_workflowId' - Unique identifier for the workflow.
+newGetWorkflowSteps ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'workflowId'
+  Prelude.Text ->
+  GetWorkflowSteps
+newGetWorkflowSteps pDomainName_ pWorkflowId_ =
+  GetWorkflowSteps'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      domainName = pDomainName_,
+      workflowId = pWorkflowId_
+    }
+
+-- | The maximum number of results to return per page.
+getWorkflowSteps_maxResults :: Lens.Lens' GetWorkflowSteps (Prelude.Maybe Prelude.Natural)
+getWorkflowSteps_maxResults = Lens.lens (\GetWorkflowSteps' {maxResults} -> maxResults) (\s@GetWorkflowSteps' {} a -> s {maxResults = a} :: GetWorkflowSteps)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+getWorkflowSteps_nextToken :: Lens.Lens' GetWorkflowSteps (Prelude.Maybe Prelude.Text)
+getWorkflowSteps_nextToken = Lens.lens (\GetWorkflowSteps' {nextToken} -> nextToken) (\s@GetWorkflowSteps' {} a -> s {nextToken = a} :: GetWorkflowSteps)
+
+-- | The unique name of the domain.
+getWorkflowSteps_domainName :: Lens.Lens' GetWorkflowSteps Prelude.Text
+getWorkflowSteps_domainName = Lens.lens (\GetWorkflowSteps' {domainName} -> domainName) (\s@GetWorkflowSteps' {} a -> s {domainName = a} :: GetWorkflowSteps)
+
+-- | Unique identifier for the workflow.
+getWorkflowSteps_workflowId :: Lens.Lens' GetWorkflowSteps Prelude.Text
+getWorkflowSteps_workflowId = Lens.lens (\GetWorkflowSteps' {workflowId} -> workflowId) (\s@GetWorkflowSteps' {} a -> s {workflowId = a} :: GetWorkflowSteps)
+
+instance Core.AWSRequest GetWorkflowSteps where
+  type
+    AWSResponse GetWorkflowSteps =
+      GetWorkflowStepsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetWorkflowStepsResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "WorkflowId")
+            Prelude.<*> (x Data..?> "WorkflowType")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetWorkflowSteps where
+  hashWithSalt _salt GetWorkflowSteps' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` workflowId
+
+instance Prelude.NFData GetWorkflowSteps where
+  rnf GetWorkflowSteps' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf workflowId
+
+instance Data.ToHeaders GetWorkflowSteps where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetWorkflowSteps where
+  toPath GetWorkflowSteps' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/workflows/",
+        Data.toBS workflowId,
+        "/steps"
+      ]
+
+instance Data.ToQuery GetWorkflowSteps where
+  toQuery GetWorkflowSteps' {..} =
+    Prelude.mconcat
+      [ "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetWorkflowStepsResponse' smart constructor.
+data GetWorkflowStepsResponse = GetWorkflowStepsResponse'
+  { -- | List containing workflow step details.
+    items :: Prelude.Maybe [WorkflowStepItem],
+    -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Unique identifier for the workflow.
+    workflowId :: Prelude.Maybe Prelude.Text,
+    -- | The type of workflow. The only supported value is APPFLOW_INTEGRATION.
+    workflowType :: Prelude.Maybe WorkflowType,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWorkflowStepsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'getWorkflowStepsResponse_items' - List containing workflow step details.
+--
+-- 'nextToken', 'getWorkflowStepsResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'workflowId', 'getWorkflowStepsResponse_workflowId' - Unique identifier for the workflow.
+--
+-- 'workflowType', 'getWorkflowStepsResponse_workflowType' - The type of workflow. The only supported value is APPFLOW_INTEGRATION.
+--
+-- 'httpStatus', 'getWorkflowStepsResponse_httpStatus' - The response's http status code.
+newGetWorkflowStepsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetWorkflowStepsResponse
+newGetWorkflowStepsResponse pHttpStatus_ =
+  GetWorkflowStepsResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      workflowId = Prelude.Nothing,
+      workflowType = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | List containing workflow step details.
+getWorkflowStepsResponse_items :: Lens.Lens' GetWorkflowStepsResponse (Prelude.Maybe [WorkflowStepItem])
+getWorkflowStepsResponse_items = Lens.lens (\GetWorkflowStepsResponse' {items} -> items) (\s@GetWorkflowStepsResponse' {} a -> s {items = a} :: GetWorkflowStepsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+getWorkflowStepsResponse_nextToken :: Lens.Lens' GetWorkflowStepsResponse (Prelude.Maybe Prelude.Text)
+getWorkflowStepsResponse_nextToken = Lens.lens (\GetWorkflowStepsResponse' {nextToken} -> nextToken) (\s@GetWorkflowStepsResponse' {} a -> s {nextToken = a} :: GetWorkflowStepsResponse)
+
+-- | Unique identifier for the workflow.
+getWorkflowStepsResponse_workflowId :: Lens.Lens' GetWorkflowStepsResponse (Prelude.Maybe Prelude.Text)
+getWorkflowStepsResponse_workflowId = Lens.lens (\GetWorkflowStepsResponse' {workflowId} -> workflowId) (\s@GetWorkflowStepsResponse' {} a -> s {workflowId = a} :: GetWorkflowStepsResponse)
+
+-- | The type of workflow. The only supported value is APPFLOW_INTEGRATION.
+getWorkflowStepsResponse_workflowType :: Lens.Lens' GetWorkflowStepsResponse (Prelude.Maybe WorkflowType)
+getWorkflowStepsResponse_workflowType = Lens.lens (\GetWorkflowStepsResponse' {workflowType} -> workflowType) (\s@GetWorkflowStepsResponse' {} a -> s {workflowType = a} :: GetWorkflowStepsResponse)
+
+-- | The response's http status code.
+getWorkflowStepsResponse_httpStatus :: Lens.Lens' GetWorkflowStepsResponse Prelude.Int
+getWorkflowStepsResponse_httpStatus = Lens.lens (\GetWorkflowStepsResponse' {httpStatus} -> httpStatus) (\s@GetWorkflowStepsResponse' {} a -> s {httpStatus = a} :: GetWorkflowStepsResponse)
+
+instance Prelude.NFData GetWorkflowStepsResponse where
+  rnf GetWorkflowStepsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf workflowType
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/Lens.hs b/gen/Amazonka/CustomerProfiles/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Lens.hs
@@ -0,0 +1,854 @@
+{-# 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.CustomerProfiles.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.CustomerProfiles.Lens
+  ( -- * Operations
+
+    -- ** AddProfileKey
+    addProfileKey_profileId,
+    addProfileKey_keyName,
+    addProfileKey_values,
+    addProfileKey_domainName,
+    addProfileKeyResponse_keyName,
+    addProfileKeyResponse_values,
+    addProfileKeyResponse_httpStatus,
+
+    -- ** CreateDomain
+    createDomain_deadLetterQueueUrl,
+    createDomain_defaultEncryptionKey,
+    createDomain_matching,
+    createDomain_tags,
+    createDomain_domainName,
+    createDomain_defaultExpirationDays,
+    createDomainResponse_deadLetterQueueUrl,
+    createDomainResponse_defaultEncryptionKey,
+    createDomainResponse_matching,
+    createDomainResponse_tags,
+    createDomainResponse_httpStatus,
+    createDomainResponse_domainName,
+    createDomainResponse_defaultExpirationDays,
+    createDomainResponse_createdAt,
+    createDomainResponse_lastUpdatedAt,
+
+    -- ** CreateIntegrationWorkflow
+    createIntegrationWorkflow_tags,
+    createIntegrationWorkflow_domainName,
+    createIntegrationWorkflow_workflowType,
+    createIntegrationWorkflow_integrationConfig,
+    createIntegrationWorkflow_objectTypeName,
+    createIntegrationWorkflow_roleArn,
+    createIntegrationWorkflowResponse_httpStatus,
+    createIntegrationWorkflowResponse_workflowId,
+    createIntegrationWorkflowResponse_message,
+
+    -- ** CreateProfile
+    createProfile_accountNumber,
+    createProfile_additionalInformation,
+    createProfile_address,
+    createProfile_attributes,
+    createProfile_billingAddress,
+    createProfile_birthDate,
+    createProfile_businessEmailAddress,
+    createProfile_businessName,
+    createProfile_businessPhoneNumber,
+    createProfile_emailAddress,
+    createProfile_firstName,
+    createProfile_gender,
+    createProfile_genderString,
+    createProfile_homePhoneNumber,
+    createProfile_lastName,
+    createProfile_mailingAddress,
+    createProfile_middleName,
+    createProfile_mobilePhoneNumber,
+    createProfile_partyType,
+    createProfile_partyTypeString,
+    createProfile_personalEmailAddress,
+    createProfile_phoneNumber,
+    createProfile_shippingAddress,
+    createProfile_domainName,
+    createProfileResponse_httpStatus,
+    createProfileResponse_profileId,
+
+    -- ** DeleteDomain
+    deleteDomain_domainName,
+    deleteDomainResponse_httpStatus,
+    deleteDomainResponse_message,
+
+    -- ** DeleteIntegration
+    deleteIntegration_domainName,
+    deleteIntegration_uri,
+    deleteIntegrationResponse_httpStatus,
+    deleteIntegrationResponse_message,
+
+    -- ** DeleteProfile
+    deleteProfile_profileId,
+    deleteProfile_domainName,
+    deleteProfileResponse_message,
+    deleteProfileResponse_httpStatus,
+
+    -- ** DeleteProfileKey
+    deleteProfileKey_profileId,
+    deleteProfileKey_keyName,
+    deleteProfileKey_values,
+    deleteProfileKey_domainName,
+    deleteProfileKeyResponse_message,
+    deleteProfileKeyResponse_httpStatus,
+
+    -- ** DeleteProfileObject
+    deleteProfileObject_profileId,
+    deleteProfileObject_profileObjectUniqueKey,
+    deleteProfileObject_objectTypeName,
+    deleteProfileObject_domainName,
+    deleteProfileObjectResponse_message,
+    deleteProfileObjectResponse_httpStatus,
+
+    -- ** DeleteProfileObjectType
+    deleteProfileObjectType_domainName,
+    deleteProfileObjectType_objectTypeName,
+    deleteProfileObjectTypeResponse_httpStatus,
+    deleteProfileObjectTypeResponse_message,
+
+    -- ** DeleteWorkflow
+    deleteWorkflow_domainName,
+    deleteWorkflow_workflowId,
+    deleteWorkflowResponse_httpStatus,
+
+    -- ** GetAutoMergingPreview
+    getAutoMergingPreview_minAllowedConfidenceScoreForMerging,
+    getAutoMergingPreview_domainName,
+    getAutoMergingPreview_consolidation,
+    getAutoMergingPreview_conflictResolution,
+    getAutoMergingPreviewResponse_numberOfMatchesInSample,
+    getAutoMergingPreviewResponse_numberOfProfilesInSample,
+    getAutoMergingPreviewResponse_numberOfProfilesWillBeMerged,
+    getAutoMergingPreviewResponse_httpStatus,
+    getAutoMergingPreviewResponse_domainName,
+
+    -- ** GetDomain
+    getDomain_domainName,
+    getDomainResponse_deadLetterQueueUrl,
+    getDomainResponse_defaultEncryptionKey,
+    getDomainResponse_defaultExpirationDays,
+    getDomainResponse_matching,
+    getDomainResponse_stats,
+    getDomainResponse_tags,
+    getDomainResponse_httpStatus,
+    getDomainResponse_domainName,
+    getDomainResponse_createdAt,
+    getDomainResponse_lastUpdatedAt,
+
+    -- ** GetIdentityResolutionJob
+    getIdentityResolutionJob_domainName,
+    getIdentityResolutionJob_jobId,
+    getIdentityResolutionJobResponse_autoMerging,
+    getIdentityResolutionJobResponse_domainName,
+    getIdentityResolutionJobResponse_exportingLocation,
+    getIdentityResolutionJobResponse_jobEndTime,
+    getIdentityResolutionJobResponse_jobExpirationTime,
+    getIdentityResolutionJobResponse_jobId,
+    getIdentityResolutionJobResponse_jobStartTime,
+    getIdentityResolutionJobResponse_jobStats,
+    getIdentityResolutionJobResponse_lastUpdatedAt,
+    getIdentityResolutionJobResponse_message,
+    getIdentityResolutionJobResponse_status,
+    getIdentityResolutionJobResponse_httpStatus,
+
+    -- ** GetIntegration
+    getIntegration_domainName,
+    getIntegration_uri,
+    getIntegrationResponse_isUnstructured,
+    getIntegrationResponse_objectTypeName,
+    getIntegrationResponse_objectTypeNames,
+    getIntegrationResponse_tags,
+    getIntegrationResponse_workflowId,
+    getIntegrationResponse_httpStatus,
+    getIntegrationResponse_domainName,
+    getIntegrationResponse_uri,
+    getIntegrationResponse_createdAt,
+    getIntegrationResponse_lastUpdatedAt,
+
+    -- ** GetMatches
+    getMatches_maxResults,
+    getMatches_nextToken,
+    getMatches_domainName,
+    getMatchesResponse_matchGenerationDate,
+    getMatchesResponse_matches,
+    getMatchesResponse_nextToken,
+    getMatchesResponse_potentialMatches,
+    getMatchesResponse_httpStatus,
+
+    -- ** GetProfileObjectType
+    getProfileObjectType_domainName,
+    getProfileObjectType_objectTypeName,
+    getProfileObjectTypeResponse_allowProfileCreation,
+    getProfileObjectTypeResponse_createdAt,
+    getProfileObjectTypeResponse_encryptionKey,
+    getProfileObjectTypeResponse_expirationDays,
+    getProfileObjectTypeResponse_fields,
+    getProfileObjectTypeResponse_keys,
+    getProfileObjectTypeResponse_lastUpdatedAt,
+    getProfileObjectTypeResponse_sourceLastUpdatedTimestampFormat,
+    getProfileObjectTypeResponse_tags,
+    getProfileObjectTypeResponse_templateId,
+    getProfileObjectTypeResponse_httpStatus,
+    getProfileObjectTypeResponse_objectTypeName,
+    getProfileObjectTypeResponse_description,
+
+    -- ** GetProfileObjectTypeTemplate
+    getProfileObjectTypeTemplate_templateId,
+    getProfileObjectTypeTemplateResponse_allowProfileCreation,
+    getProfileObjectTypeTemplateResponse_fields,
+    getProfileObjectTypeTemplateResponse_keys,
+    getProfileObjectTypeTemplateResponse_sourceLastUpdatedTimestampFormat,
+    getProfileObjectTypeTemplateResponse_sourceName,
+    getProfileObjectTypeTemplateResponse_sourceObject,
+    getProfileObjectTypeTemplateResponse_templateId,
+    getProfileObjectTypeTemplateResponse_httpStatus,
+
+    -- ** GetWorkflow
+    getWorkflow_domainName,
+    getWorkflow_workflowId,
+    getWorkflowResponse_attributes,
+    getWorkflowResponse_errorDescription,
+    getWorkflowResponse_lastUpdatedAt,
+    getWorkflowResponse_metrics,
+    getWorkflowResponse_startDate,
+    getWorkflowResponse_status,
+    getWorkflowResponse_workflowId,
+    getWorkflowResponse_workflowType,
+    getWorkflowResponse_httpStatus,
+
+    -- ** GetWorkflowSteps
+    getWorkflowSteps_maxResults,
+    getWorkflowSteps_nextToken,
+    getWorkflowSteps_domainName,
+    getWorkflowSteps_workflowId,
+    getWorkflowStepsResponse_items,
+    getWorkflowStepsResponse_nextToken,
+    getWorkflowStepsResponse_workflowId,
+    getWorkflowStepsResponse_workflowType,
+    getWorkflowStepsResponse_httpStatus,
+
+    -- ** ListAccountIntegrations
+    listAccountIntegrations_includeHidden,
+    listAccountIntegrations_maxResults,
+    listAccountIntegrations_nextToken,
+    listAccountIntegrations_uri,
+    listAccountIntegrationsResponse_items,
+    listAccountIntegrationsResponse_nextToken,
+    listAccountIntegrationsResponse_httpStatus,
+
+    -- ** ListDomains
+    listDomains_maxResults,
+    listDomains_nextToken,
+    listDomainsResponse_items,
+    listDomainsResponse_nextToken,
+    listDomainsResponse_httpStatus,
+
+    -- ** ListIdentityResolutionJobs
+    listIdentityResolutionJobs_maxResults,
+    listIdentityResolutionJobs_nextToken,
+    listIdentityResolutionJobs_domainName,
+    listIdentityResolutionJobsResponse_identityResolutionJobsList,
+    listIdentityResolutionJobsResponse_nextToken,
+    listIdentityResolutionJobsResponse_httpStatus,
+
+    -- ** ListIntegrations
+    listIntegrations_includeHidden,
+    listIntegrations_maxResults,
+    listIntegrations_nextToken,
+    listIntegrations_domainName,
+    listIntegrationsResponse_items,
+    listIntegrationsResponse_nextToken,
+    listIntegrationsResponse_httpStatus,
+
+    -- ** ListProfileObjectTypeTemplates
+    listProfileObjectTypeTemplates_maxResults,
+    listProfileObjectTypeTemplates_nextToken,
+    listProfileObjectTypeTemplatesResponse_items,
+    listProfileObjectTypeTemplatesResponse_nextToken,
+    listProfileObjectTypeTemplatesResponse_httpStatus,
+
+    -- ** ListProfileObjectTypes
+    listProfileObjectTypes_maxResults,
+    listProfileObjectTypes_nextToken,
+    listProfileObjectTypes_domainName,
+    listProfileObjectTypesResponse_items,
+    listProfileObjectTypesResponse_nextToken,
+    listProfileObjectTypesResponse_httpStatus,
+
+    -- ** ListProfileObjects
+    listProfileObjects_maxResults,
+    listProfileObjects_nextToken,
+    listProfileObjects_objectFilter,
+    listProfileObjects_domainName,
+    listProfileObjects_objectTypeName,
+    listProfileObjects_profileId,
+    listProfileObjectsResponse_items,
+    listProfileObjectsResponse_nextToken,
+    listProfileObjectsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ListWorkflows
+    listWorkflows_maxResults,
+    listWorkflows_nextToken,
+    listWorkflows_queryEndDate,
+    listWorkflows_queryStartDate,
+    listWorkflows_status,
+    listWorkflows_workflowType,
+    listWorkflows_domainName,
+    listWorkflowsResponse_items,
+    listWorkflowsResponse_nextToken,
+    listWorkflowsResponse_httpStatus,
+
+    -- ** MergeProfiles
+    mergeProfiles_fieldSourceProfileIds,
+    mergeProfiles_domainName,
+    mergeProfiles_mainProfileId,
+    mergeProfiles_profileIdsToBeMerged,
+    mergeProfilesResponse_message,
+    mergeProfilesResponse_httpStatus,
+
+    -- ** PutIntegration
+    putIntegration_flowDefinition,
+    putIntegration_objectTypeName,
+    putIntegration_objectTypeNames,
+    putIntegration_tags,
+    putIntegration_uri,
+    putIntegration_domainName,
+    putIntegrationResponse_isUnstructured,
+    putIntegrationResponse_objectTypeName,
+    putIntegrationResponse_objectTypeNames,
+    putIntegrationResponse_tags,
+    putIntegrationResponse_workflowId,
+    putIntegrationResponse_httpStatus,
+    putIntegrationResponse_domainName,
+    putIntegrationResponse_uri,
+    putIntegrationResponse_createdAt,
+    putIntegrationResponse_lastUpdatedAt,
+
+    -- ** PutProfileObject
+    putProfileObject_objectTypeName,
+    putProfileObject_object,
+    putProfileObject_domainName,
+    putProfileObjectResponse_profileObjectUniqueKey,
+    putProfileObjectResponse_httpStatus,
+
+    -- ** PutProfileObjectType
+    putProfileObjectType_allowProfileCreation,
+    putProfileObjectType_encryptionKey,
+    putProfileObjectType_expirationDays,
+    putProfileObjectType_fields,
+    putProfileObjectType_keys,
+    putProfileObjectType_sourceLastUpdatedTimestampFormat,
+    putProfileObjectType_tags,
+    putProfileObjectType_templateId,
+    putProfileObjectType_domainName,
+    putProfileObjectType_objectTypeName,
+    putProfileObjectType_description,
+    putProfileObjectTypeResponse_allowProfileCreation,
+    putProfileObjectTypeResponse_createdAt,
+    putProfileObjectTypeResponse_encryptionKey,
+    putProfileObjectTypeResponse_expirationDays,
+    putProfileObjectTypeResponse_fields,
+    putProfileObjectTypeResponse_keys,
+    putProfileObjectTypeResponse_lastUpdatedAt,
+    putProfileObjectTypeResponse_sourceLastUpdatedTimestampFormat,
+    putProfileObjectTypeResponse_tags,
+    putProfileObjectTypeResponse_templateId,
+    putProfileObjectTypeResponse_httpStatus,
+    putProfileObjectTypeResponse_objectTypeName,
+    putProfileObjectTypeResponse_description,
+
+    -- ** SearchProfiles
+    searchProfiles_additionalSearchKeys,
+    searchProfiles_logicalOperator,
+    searchProfiles_maxResults,
+    searchProfiles_nextToken,
+    searchProfiles_domainName,
+    searchProfiles_keyName,
+    searchProfiles_values,
+    searchProfilesResponse_items,
+    searchProfilesResponse_nextToken,
+    searchProfilesResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateDomain
+    updateDomain_deadLetterQueueUrl,
+    updateDomain_defaultEncryptionKey,
+    updateDomain_defaultExpirationDays,
+    updateDomain_matching,
+    updateDomain_tags,
+    updateDomain_domainName,
+    updateDomainResponse_deadLetterQueueUrl,
+    updateDomainResponse_defaultEncryptionKey,
+    updateDomainResponse_defaultExpirationDays,
+    updateDomainResponse_matching,
+    updateDomainResponse_tags,
+    updateDomainResponse_httpStatus,
+    updateDomainResponse_domainName,
+    updateDomainResponse_createdAt,
+    updateDomainResponse_lastUpdatedAt,
+
+    -- ** UpdateProfile
+    updateProfile_accountNumber,
+    updateProfile_additionalInformation,
+    updateProfile_address,
+    updateProfile_attributes,
+    updateProfile_billingAddress,
+    updateProfile_birthDate,
+    updateProfile_businessEmailAddress,
+    updateProfile_businessName,
+    updateProfile_businessPhoneNumber,
+    updateProfile_emailAddress,
+    updateProfile_firstName,
+    updateProfile_gender,
+    updateProfile_genderString,
+    updateProfile_homePhoneNumber,
+    updateProfile_lastName,
+    updateProfile_mailingAddress,
+    updateProfile_middleName,
+    updateProfile_mobilePhoneNumber,
+    updateProfile_partyType,
+    updateProfile_partyTypeString,
+    updateProfile_personalEmailAddress,
+    updateProfile_phoneNumber,
+    updateProfile_shippingAddress,
+    updateProfile_domainName,
+    updateProfile_profileId,
+    updateProfileResponse_httpStatus,
+    updateProfileResponse_profileId,
+
+    -- * Types
+
+    -- ** AdditionalSearchKey
+    additionalSearchKey_keyName,
+    additionalSearchKey_values,
+
+    -- ** Address
+    address_address1,
+    address_address2,
+    address_address3,
+    address_address4,
+    address_city,
+    address_country,
+    address_county,
+    address_postalCode,
+    address_province,
+    address_state,
+
+    -- ** AppflowIntegration
+    appflowIntegration_batches,
+    appflowIntegration_flowDefinition,
+
+    -- ** AppflowIntegrationWorkflowAttributes
+    appflowIntegrationWorkflowAttributes_roleArn,
+    appflowIntegrationWorkflowAttributes_sourceConnectorType,
+    appflowIntegrationWorkflowAttributes_connectorProfileName,
+
+    -- ** AppflowIntegrationWorkflowMetrics
+    appflowIntegrationWorkflowMetrics_recordsProcessed,
+    appflowIntegrationWorkflowMetrics_stepsCompleted,
+    appflowIntegrationWorkflowMetrics_totalSteps,
+
+    -- ** AppflowIntegrationWorkflowStep
+    appflowIntegrationWorkflowStep_flowName,
+    appflowIntegrationWorkflowStep_status,
+    appflowIntegrationWorkflowStep_executionMessage,
+    appflowIntegrationWorkflowStep_recordsProcessed,
+    appflowIntegrationWorkflowStep_batchRecordsStartTime,
+    appflowIntegrationWorkflowStep_batchRecordsEndTime,
+    appflowIntegrationWorkflowStep_createdAt,
+    appflowIntegrationWorkflowStep_lastUpdatedAt,
+
+    -- ** AutoMerging
+    autoMerging_conflictResolution,
+    autoMerging_consolidation,
+    autoMerging_minAllowedConfidenceScoreForMerging,
+    autoMerging_enabled,
+
+    -- ** Batch
+    batch_startTime,
+    batch_endTime,
+
+    -- ** ConflictResolution
+    conflictResolution_sourceName,
+    conflictResolution_conflictResolvingModel,
+
+    -- ** ConnectorOperator
+    connectorOperator_marketo,
+    connectorOperator_s3,
+    connectorOperator_salesforce,
+    connectorOperator_serviceNow,
+    connectorOperator_zendesk,
+
+    -- ** Consolidation
+    consolidation_matchingAttributesList,
+
+    -- ** DomainStats
+    domainStats_meteringProfileCount,
+    domainStats_objectCount,
+    domainStats_profileCount,
+    domainStats_totalSize,
+
+    -- ** ExportingConfig
+    exportingConfig_s3Exporting,
+
+    -- ** ExportingLocation
+    exportingLocation_s3Exporting,
+
+    -- ** FieldSourceProfileIds
+    fieldSourceProfileIds_accountNumber,
+    fieldSourceProfileIds_additionalInformation,
+    fieldSourceProfileIds_address,
+    fieldSourceProfileIds_attributes,
+    fieldSourceProfileIds_billingAddress,
+    fieldSourceProfileIds_birthDate,
+    fieldSourceProfileIds_businessEmailAddress,
+    fieldSourceProfileIds_businessName,
+    fieldSourceProfileIds_businessPhoneNumber,
+    fieldSourceProfileIds_emailAddress,
+    fieldSourceProfileIds_firstName,
+    fieldSourceProfileIds_gender,
+    fieldSourceProfileIds_homePhoneNumber,
+    fieldSourceProfileIds_lastName,
+    fieldSourceProfileIds_mailingAddress,
+    fieldSourceProfileIds_middleName,
+    fieldSourceProfileIds_mobilePhoneNumber,
+    fieldSourceProfileIds_partyType,
+    fieldSourceProfileIds_personalEmailAddress,
+    fieldSourceProfileIds_phoneNumber,
+    fieldSourceProfileIds_shippingAddress,
+
+    -- ** FlowDefinition
+    flowDefinition_description,
+    flowDefinition_flowName,
+    flowDefinition_kmsArn,
+    flowDefinition_sourceFlowConfig,
+    flowDefinition_tasks,
+    flowDefinition_triggerConfig,
+
+    -- ** FoundByKeyValue
+    foundByKeyValue_keyName,
+    foundByKeyValue_values,
+
+    -- ** IdentityResolutionJob
+    identityResolutionJob_domainName,
+    identityResolutionJob_exportingLocation,
+    identityResolutionJob_jobEndTime,
+    identityResolutionJob_jobId,
+    identityResolutionJob_jobStartTime,
+    identityResolutionJob_jobStats,
+    identityResolutionJob_message,
+    identityResolutionJob_status,
+
+    -- ** IncrementalPullConfig
+    incrementalPullConfig_datetimeTypeFieldName,
+
+    -- ** IntegrationConfig
+    integrationConfig_appflowIntegration,
+
+    -- ** JobSchedule
+    jobSchedule_dayOfTheWeek,
+    jobSchedule_time,
+
+    -- ** JobStats
+    jobStats_numberOfMatchesFound,
+    jobStats_numberOfMergesDone,
+    jobStats_numberOfProfilesReviewed,
+
+    -- ** ListDomainItem
+    listDomainItem_tags,
+    listDomainItem_domainName,
+    listDomainItem_createdAt,
+    listDomainItem_lastUpdatedAt,
+
+    -- ** ListIntegrationItem
+    listIntegrationItem_isUnstructured,
+    listIntegrationItem_objectTypeName,
+    listIntegrationItem_objectTypeNames,
+    listIntegrationItem_tags,
+    listIntegrationItem_workflowId,
+    listIntegrationItem_domainName,
+    listIntegrationItem_uri,
+    listIntegrationItem_createdAt,
+    listIntegrationItem_lastUpdatedAt,
+
+    -- ** ListProfileObjectTypeItem
+    listProfileObjectTypeItem_createdAt,
+    listProfileObjectTypeItem_lastUpdatedAt,
+    listProfileObjectTypeItem_tags,
+    listProfileObjectTypeItem_objectTypeName,
+    listProfileObjectTypeItem_description,
+
+    -- ** ListProfileObjectTypeTemplateItem
+    listProfileObjectTypeTemplateItem_sourceName,
+    listProfileObjectTypeTemplateItem_sourceObject,
+    listProfileObjectTypeTemplateItem_templateId,
+
+    -- ** ListProfileObjectsItem
+    listProfileObjectsItem_object,
+    listProfileObjectsItem_objectTypeName,
+    listProfileObjectsItem_profileObjectUniqueKey,
+
+    -- ** ListWorkflowsItem
+    listWorkflowsItem_workflowType,
+    listWorkflowsItem_workflowId,
+    listWorkflowsItem_status,
+    listWorkflowsItem_statusDescription,
+    listWorkflowsItem_createdAt,
+    listWorkflowsItem_lastUpdatedAt,
+
+    -- ** MarketoSourceProperties
+    marketoSourceProperties_object,
+
+    -- ** MatchItem
+    matchItem_confidenceScore,
+    matchItem_matchId,
+    matchItem_profileIds,
+
+    -- ** MatchingRequest
+    matchingRequest_autoMerging,
+    matchingRequest_exportingConfig,
+    matchingRequest_jobSchedule,
+    matchingRequest_enabled,
+
+    -- ** MatchingResponse
+    matchingResponse_autoMerging,
+    matchingResponse_enabled,
+    matchingResponse_exportingConfig,
+    matchingResponse_jobSchedule,
+
+    -- ** ObjectFilter
+    objectFilter_keyName,
+    objectFilter_values,
+
+    -- ** ObjectTypeField
+    objectTypeField_contentType,
+    objectTypeField_source,
+    objectTypeField_target,
+
+    -- ** ObjectTypeKey
+    objectTypeKey_fieldNames,
+    objectTypeKey_standardIdentifiers,
+
+    -- ** Profile
+    profile_accountNumber,
+    profile_additionalInformation,
+    profile_address,
+    profile_attributes,
+    profile_billingAddress,
+    profile_birthDate,
+    profile_businessEmailAddress,
+    profile_businessName,
+    profile_businessPhoneNumber,
+    profile_emailAddress,
+    profile_firstName,
+    profile_foundByItems,
+    profile_gender,
+    profile_homePhoneNumber,
+    profile_lastName,
+    profile_mailingAddress,
+    profile_middleName,
+    profile_mobilePhoneNumber,
+    profile_partyType,
+    profile_personalEmailAddress,
+    profile_phoneNumber,
+    profile_profileId,
+    profile_shippingAddress,
+
+    -- ** S3ExportingConfig
+    s3ExportingConfig_s3KeyName,
+    s3ExportingConfig_s3BucketName,
+
+    -- ** S3ExportingLocation
+    s3ExportingLocation_s3BucketName,
+    s3ExportingLocation_s3KeyName,
+
+    -- ** S3SourceProperties
+    s3SourceProperties_bucketPrefix,
+    s3SourceProperties_bucketName,
+
+    -- ** SalesforceSourceProperties
+    salesforceSourceProperties_enableDynamicFieldUpdate,
+    salesforceSourceProperties_includeDeletedRecords,
+    salesforceSourceProperties_object,
+
+    -- ** ScheduledTriggerProperties
+    scheduledTriggerProperties_dataPullMode,
+    scheduledTriggerProperties_firstExecutionFrom,
+    scheduledTriggerProperties_scheduleEndTime,
+    scheduledTriggerProperties_scheduleOffset,
+    scheduledTriggerProperties_scheduleStartTime,
+    scheduledTriggerProperties_timezone,
+    scheduledTriggerProperties_scheduleExpression,
+
+    -- ** ServiceNowSourceProperties
+    serviceNowSourceProperties_object,
+
+    -- ** SourceConnectorProperties
+    sourceConnectorProperties_marketo,
+    sourceConnectorProperties_s3,
+    sourceConnectorProperties_salesforce,
+    sourceConnectorProperties_serviceNow,
+    sourceConnectorProperties_zendesk,
+
+    -- ** SourceFlowConfig
+    sourceFlowConfig_connectorProfileName,
+    sourceFlowConfig_incrementalPullConfig,
+    sourceFlowConfig_connectorType,
+    sourceFlowConfig_sourceConnectorProperties,
+
+    -- ** Task
+    task_connectorOperator,
+    task_destinationField,
+    task_taskProperties,
+    task_sourceFields,
+    task_taskType,
+
+    -- ** TriggerConfig
+    triggerConfig_triggerProperties,
+    triggerConfig_triggerType,
+
+    -- ** TriggerProperties
+    triggerProperties_scheduled,
+
+    -- ** UpdateAddress
+    updateAddress_address1,
+    updateAddress_address2,
+    updateAddress_address3,
+    updateAddress_address4,
+    updateAddress_city,
+    updateAddress_country,
+    updateAddress_county,
+    updateAddress_postalCode,
+    updateAddress_province,
+    updateAddress_state,
+
+    -- ** WorkflowAttributes
+    workflowAttributes_appflowIntegration,
+
+    -- ** WorkflowMetrics
+    workflowMetrics_appflowIntegration,
+
+    -- ** WorkflowStepItem
+    workflowStepItem_appflowIntegration,
+
+    -- ** ZendeskSourceProperties
+    zendeskSourceProperties_object,
+  )
+where
+
+import Amazonka.CustomerProfiles.AddProfileKey
+import Amazonka.CustomerProfiles.CreateDomain
+import Amazonka.CustomerProfiles.CreateIntegrationWorkflow
+import Amazonka.CustomerProfiles.CreateProfile
+import Amazonka.CustomerProfiles.DeleteDomain
+import Amazonka.CustomerProfiles.DeleteIntegration
+import Amazonka.CustomerProfiles.DeleteProfile
+import Amazonka.CustomerProfiles.DeleteProfileKey
+import Amazonka.CustomerProfiles.DeleteProfileObject
+import Amazonka.CustomerProfiles.DeleteProfileObjectType
+import Amazonka.CustomerProfiles.DeleteWorkflow
+import Amazonka.CustomerProfiles.GetAutoMergingPreview
+import Amazonka.CustomerProfiles.GetDomain
+import Amazonka.CustomerProfiles.GetIdentityResolutionJob
+import Amazonka.CustomerProfiles.GetIntegration
+import Amazonka.CustomerProfiles.GetMatches
+import Amazonka.CustomerProfiles.GetProfileObjectType
+import Amazonka.CustomerProfiles.GetProfileObjectTypeTemplate
+import Amazonka.CustomerProfiles.GetWorkflow
+import Amazonka.CustomerProfiles.GetWorkflowSteps
+import Amazonka.CustomerProfiles.ListAccountIntegrations
+import Amazonka.CustomerProfiles.ListDomains
+import Amazonka.CustomerProfiles.ListIdentityResolutionJobs
+import Amazonka.CustomerProfiles.ListIntegrations
+import Amazonka.CustomerProfiles.ListProfileObjectTypeTemplates
+import Amazonka.CustomerProfiles.ListProfileObjectTypes
+import Amazonka.CustomerProfiles.ListProfileObjects
+import Amazonka.CustomerProfiles.ListTagsForResource
+import Amazonka.CustomerProfiles.ListWorkflows
+import Amazonka.CustomerProfiles.MergeProfiles
+import Amazonka.CustomerProfiles.PutIntegration
+import Amazonka.CustomerProfiles.PutProfileObject
+import Amazonka.CustomerProfiles.PutProfileObjectType
+import Amazonka.CustomerProfiles.SearchProfiles
+import Amazonka.CustomerProfiles.TagResource
+import Amazonka.CustomerProfiles.Types.AdditionalSearchKey
+import Amazonka.CustomerProfiles.Types.Address
+import Amazonka.CustomerProfiles.Types.AppflowIntegration
+import Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowAttributes
+import Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowMetrics
+import Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowStep
+import Amazonka.CustomerProfiles.Types.AutoMerging
+import Amazonka.CustomerProfiles.Types.Batch
+import Amazonka.CustomerProfiles.Types.ConflictResolution
+import Amazonka.CustomerProfiles.Types.ConnectorOperator
+import Amazonka.CustomerProfiles.Types.Consolidation
+import Amazonka.CustomerProfiles.Types.DomainStats
+import Amazonka.CustomerProfiles.Types.ExportingConfig
+import Amazonka.CustomerProfiles.Types.ExportingLocation
+import Amazonka.CustomerProfiles.Types.FieldSourceProfileIds
+import Amazonka.CustomerProfiles.Types.FlowDefinition
+import Amazonka.CustomerProfiles.Types.FoundByKeyValue
+import Amazonka.CustomerProfiles.Types.IdentityResolutionJob
+import Amazonka.CustomerProfiles.Types.IncrementalPullConfig
+import Amazonka.CustomerProfiles.Types.IntegrationConfig
+import Amazonka.CustomerProfiles.Types.JobSchedule
+import Amazonka.CustomerProfiles.Types.JobStats
+import Amazonka.CustomerProfiles.Types.ListDomainItem
+import Amazonka.CustomerProfiles.Types.ListIntegrationItem
+import Amazonka.CustomerProfiles.Types.ListProfileObjectTypeItem
+import Amazonka.CustomerProfiles.Types.ListProfileObjectTypeTemplateItem
+import Amazonka.CustomerProfiles.Types.ListProfileObjectsItem
+import Amazonka.CustomerProfiles.Types.ListWorkflowsItem
+import Amazonka.CustomerProfiles.Types.MarketoSourceProperties
+import Amazonka.CustomerProfiles.Types.MatchItem
+import Amazonka.CustomerProfiles.Types.MatchingRequest
+import Amazonka.CustomerProfiles.Types.MatchingResponse
+import Amazonka.CustomerProfiles.Types.ObjectFilter
+import Amazonka.CustomerProfiles.Types.ObjectTypeField
+import Amazonka.CustomerProfiles.Types.ObjectTypeKey
+import Amazonka.CustomerProfiles.Types.Profile
+import Amazonka.CustomerProfiles.Types.S3ExportingConfig
+import Amazonka.CustomerProfiles.Types.S3ExportingLocation
+import Amazonka.CustomerProfiles.Types.S3SourceProperties
+import Amazonka.CustomerProfiles.Types.SalesforceSourceProperties
+import Amazonka.CustomerProfiles.Types.ScheduledTriggerProperties
+import Amazonka.CustomerProfiles.Types.ServiceNowSourceProperties
+import Amazonka.CustomerProfiles.Types.SourceConnectorProperties
+import Amazonka.CustomerProfiles.Types.SourceFlowConfig
+import Amazonka.CustomerProfiles.Types.Task
+import Amazonka.CustomerProfiles.Types.TriggerConfig
+import Amazonka.CustomerProfiles.Types.TriggerProperties
+import Amazonka.CustomerProfiles.Types.UpdateAddress
+import Amazonka.CustomerProfiles.Types.WorkflowAttributes
+import Amazonka.CustomerProfiles.Types.WorkflowMetrics
+import Amazonka.CustomerProfiles.Types.WorkflowStepItem
+import Amazonka.CustomerProfiles.Types.ZendeskSourceProperties
+import Amazonka.CustomerProfiles.UntagResource
+import Amazonka.CustomerProfiles.UpdateDomain
+import Amazonka.CustomerProfiles.UpdateProfile
diff --git a/gen/Amazonka/CustomerProfiles/ListAccountIntegrations.hs b/gen/Amazonka/CustomerProfiles/ListAccountIntegrations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/ListAccountIntegrations.hs
@@ -0,0 +1,229 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.ListAccountIntegrations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all of the integrations associated to a specific URI in the AWS
+-- account.
+module Amazonka.CustomerProfiles.ListAccountIntegrations
+  ( -- * Creating a Request
+    ListAccountIntegrations (..),
+    newListAccountIntegrations,
+
+    -- * Request Lenses
+    listAccountIntegrations_includeHidden,
+    listAccountIntegrations_maxResults,
+    listAccountIntegrations_nextToken,
+    listAccountIntegrations_uri,
+
+    -- * Destructuring the Response
+    ListAccountIntegrationsResponse (..),
+    newListAccountIntegrationsResponse,
+
+    -- * Response Lenses
+    listAccountIntegrationsResponse_items,
+    listAccountIntegrationsResponse_nextToken,
+    listAccountIntegrationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAccountIntegrations' smart constructor.
+data ListAccountIntegrations = ListAccountIntegrations'
+  { -- | Boolean to indicate if hidden integration should be returned. Defaults
+    -- to @False@.
+    includeHidden :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of objects returned per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token from the previous ListAccountIntegrations API call.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The URI of the S3 bucket or any other type of data source.
+    uri :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAccountIntegrations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'includeHidden', 'listAccountIntegrations_includeHidden' - Boolean to indicate if hidden integration should be returned. Defaults
+-- to @False@.
+--
+-- 'maxResults', 'listAccountIntegrations_maxResults' - The maximum number of objects returned per page.
+--
+-- 'nextToken', 'listAccountIntegrations_nextToken' - The pagination token from the previous ListAccountIntegrations API call.
+--
+-- 'uri', 'listAccountIntegrations_uri' - The URI of the S3 bucket or any other type of data source.
+newListAccountIntegrations ::
+  -- | 'uri'
+  Prelude.Text ->
+  ListAccountIntegrations
+newListAccountIntegrations pUri_ =
+  ListAccountIntegrations'
+    { includeHidden =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      uri = pUri_
+    }
+
+-- | Boolean to indicate if hidden integration should be returned. Defaults
+-- to @False@.
+listAccountIntegrations_includeHidden :: Lens.Lens' ListAccountIntegrations (Prelude.Maybe Prelude.Bool)
+listAccountIntegrations_includeHidden = Lens.lens (\ListAccountIntegrations' {includeHidden} -> includeHidden) (\s@ListAccountIntegrations' {} a -> s {includeHidden = a} :: ListAccountIntegrations)
+
+-- | The maximum number of objects returned per page.
+listAccountIntegrations_maxResults :: Lens.Lens' ListAccountIntegrations (Prelude.Maybe Prelude.Natural)
+listAccountIntegrations_maxResults = Lens.lens (\ListAccountIntegrations' {maxResults} -> maxResults) (\s@ListAccountIntegrations' {} a -> s {maxResults = a} :: ListAccountIntegrations)
+
+-- | The pagination token from the previous ListAccountIntegrations API call.
+listAccountIntegrations_nextToken :: Lens.Lens' ListAccountIntegrations (Prelude.Maybe Prelude.Text)
+listAccountIntegrations_nextToken = Lens.lens (\ListAccountIntegrations' {nextToken} -> nextToken) (\s@ListAccountIntegrations' {} a -> s {nextToken = a} :: ListAccountIntegrations)
+
+-- | The URI of the S3 bucket or any other type of data source.
+listAccountIntegrations_uri :: Lens.Lens' ListAccountIntegrations Prelude.Text
+listAccountIntegrations_uri = Lens.lens (\ListAccountIntegrations' {uri} -> uri) (\s@ListAccountIntegrations' {} a -> s {uri = a} :: ListAccountIntegrations)
+
+instance Core.AWSRequest ListAccountIntegrations where
+  type
+    AWSResponse ListAccountIntegrations =
+      ListAccountIntegrationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAccountIntegrationsResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAccountIntegrations where
+  hashWithSalt _salt ListAccountIntegrations' {..} =
+    _salt
+      `Prelude.hashWithSalt` includeHidden
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` uri
+
+instance Prelude.NFData ListAccountIntegrations where
+  rnf ListAccountIntegrations' {..} =
+    Prelude.rnf includeHidden
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf uri
+
+instance Data.ToHeaders ListAccountIntegrations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAccountIntegrations where
+  toJSON ListAccountIntegrations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Uri" Data..= uri)]
+      )
+
+instance Data.ToPath ListAccountIntegrations where
+  toPath = Prelude.const "/integrations"
+
+instance Data.ToQuery ListAccountIntegrations where
+  toQuery ListAccountIntegrations' {..} =
+    Prelude.mconcat
+      [ "include-hidden" Data.=: includeHidden,
+        "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListAccountIntegrationsResponse' smart constructor.
+data ListAccountIntegrationsResponse = ListAccountIntegrationsResponse'
+  { -- | The list of ListAccountIntegration instances.
+    items :: Prelude.Maybe [ListIntegrationItem],
+    -- | The pagination token from the previous ListAccountIntegrations API call.
+    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 'ListAccountIntegrationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listAccountIntegrationsResponse_items' - The list of ListAccountIntegration instances.
+--
+-- 'nextToken', 'listAccountIntegrationsResponse_nextToken' - The pagination token from the previous ListAccountIntegrations API call.
+--
+-- 'httpStatus', 'listAccountIntegrationsResponse_httpStatus' - The response's http status code.
+newListAccountIntegrationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAccountIntegrationsResponse
+newListAccountIntegrationsResponse pHttpStatus_ =
+  ListAccountIntegrationsResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of ListAccountIntegration instances.
+listAccountIntegrationsResponse_items :: Lens.Lens' ListAccountIntegrationsResponse (Prelude.Maybe [ListIntegrationItem])
+listAccountIntegrationsResponse_items = Lens.lens (\ListAccountIntegrationsResponse' {items} -> items) (\s@ListAccountIntegrationsResponse' {} a -> s {items = a} :: ListAccountIntegrationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token from the previous ListAccountIntegrations API call.
+listAccountIntegrationsResponse_nextToken :: Lens.Lens' ListAccountIntegrationsResponse (Prelude.Maybe Prelude.Text)
+listAccountIntegrationsResponse_nextToken = Lens.lens (\ListAccountIntegrationsResponse' {nextToken} -> nextToken) (\s@ListAccountIntegrationsResponse' {} a -> s {nextToken = a} :: ListAccountIntegrationsResponse)
+
+-- | The response's http status code.
+listAccountIntegrationsResponse_httpStatus :: Lens.Lens' ListAccountIntegrationsResponse Prelude.Int
+listAccountIntegrationsResponse_httpStatus = Lens.lens (\ListAccountIntegrationsResponse' {httpStatus} -> httpStatus) (\s@ListAccountIntegrationsResponse' {} a -> s {httpStatus = a} :: ListAccountIntegrationsResponse)
+
+instance
+  Prelude.NFData
+    ListAccountIntegrationsResponse
+  where
+  rnf ListAccountIntegrationsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/ListDomains.hs b/gen/Amazonka/CustomerProfiles/ListDomains.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/ListDomains.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.CustomerProfiles.ListDomains
+-- 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 the domains for an AWS account that have been
+-- created.
+module Amazonka.CustomerProfiles.ListDomains
+  ( -- * Creating a Request
+    ListDomains (..),
+    newListDomains,
+
+    -- * Request Lenses
+    listDomains_maxResults,
+    listDomains_nextToken,
+
+    -- * Destructuring the Response
+    ListDomainsResponse (..),
+    newListDomainsResponse,
+
+    -- * Response Lenses
+    listDomainsResponse_items,
+    listDomainsResponse_nextToken,
+    listDomainsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDomains' smart constructor.
+data ListDomains = ListDomains'
+  { -- | The maximum number of objects returned per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token from the previous ListDomain API call.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDomains' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listDomains_maxResults' - The maximum number of objects returned per page.
+--
+-- 'nextToken', 'listDomains_nextToken' - The pagination token from the previous ListDomain API call.
+newListDomains ::
+  ListDomains
+newListDomains =
+  ListDomains'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of objects returned per page.
+listDomains_maxResults :: Lens.Lens' ListDomains (Prelude.Maybe Prelude.Natural)
+listDomains_maxResults = Lens.lens (\ListDomains' {maxResults} -> maxResults) (\s@ListDomains' {} a -> s {maxResults = a} :: ListDomains)
+
+-- | The pagination token from the previous ListDomain API call.
+listDomains_nextToken :: Lens.Lens' ListDomains (Prelude.Maybe Prelude.Text)
+listDomains_nextToken = Lens.lens (\ListDomains' {nextToken} -> nextToken) (\s@ListDomains' {} a -> s {nextToken = a} :: ListDomains)
+
+instance Core.AWSRequest ListDomains where
+  type AWSResponse ListDomains = ListDomainsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDomainsResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDomains where
+  hashWithSalt _salt ListDomains' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListDomains where
+  rnf ListDomains' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListDomains where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListDomains where
+  toPath = Prelude.const "/domains"
+
+instance Data.ToQuery ListDomains where
+  toQuery ListDomains' {..} =
+    Prelude.mconcat
+      [ "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListDomainsResponse' smart constructor.
+data ListDomainsResponse = ListDomainsResponse'
+  { -- | The list of ListDomains instances.
+    items :: Prelude.Maybe [ListDomainItem],
+    -- | The pagination token from the previous ListDomains API call.
+    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 'ListDomainsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listDomainsResponse_items' - The list of ListDomains instances.
+--
+-- 'nextToken', 'listDomainsResponse_nextToken' - The pagination token from the previous ListDomains API call.
+--
+-- 'httpStatus', 'listDomainsResponse_httpStatus' - The response's http status code.
+newListDomainsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDomainsResponse
+newListDomainsResponse pHttpStatus_ =
+  ListDomainsResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of ListDomains instances.
+listDomainsResponse_items :: Lens.Lens' ListDomainsResponse (Prelude.Maybe [ListDomainItem])
+listDomainsResponse_items = Lens.lens (\ListDomainsResponse' {items} -> items) (\s@ListDomainsResponse' {} a -> s {items = a} :: ListDomainsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token from the previous ListDomains API call.
+listDomainsResponse_nextToken :: Lens.Lens' ListDomainsResponse (Prelude.Maybe Prelude.Text)
+listDomainsResponse_nextToken = Lens.lens (\ListDomainsResponse' {nextToken} -> nextToken) (\s@ListDomainsResponse' {} a -> s {nextToken = a} :: ListDomainsResponse)
+
+-- | The response's http status code.
+listDomainsResponse_httpStatus :: Lens.Lens' ListDomainsResponse Prelude.Int
+listDomainsResponse_httpStatus = Lens.lens (\ListDomainsResponse' {httpStatus} -> httpStatus) (\s@ListDomainsResponse' {} a -> s {httpStatus = a} :: ListDomainsResponse)
+
+instance Prelude.NFData ListDomainsResponse where
+  rnf ListDomainsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/ListIdentityResolutionJobs.hs b/gen/Amazonka/CustomerProfiles/ListIdentityResolutionJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/ListIdentityResolutionJobs.hs
@@ -0,0 +1,223 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.ListIdentityResolutionJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all of the Identity Resolution Jobs in your domain. The response
+-- sorts the list by @JobStartTime@.
+module Amazonka.CustomerProfiles.ListIdentityResolutionJobs
+  ( -- * Creating a Request
+    ListIdentityResolutionJobs (..),
+    newListIdentityResolutionJobs,
+
+    -- * Request Lenses
+    listIdentityResolutionJobs_maxResults,
+    listIdentityResolutionJobs_nextToken,
+    listIdentityResolutionJobs_domainName,
+
+    -- * Destructuring the Response
+    ListIdentityResolutionJobsResponse (..),
+    newListIdentityResolutionJobsResponse,
+
+    -- * Response Lenses
+    listIdentityResolutionJobsResponse_identityResolutionJobsList,
+    listIdentityResolutionJobsResponse_nextToken,
+    listIdentityResolutionJobsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListIdentityResolutionJobs' smart constructor.
+data ListIdentityResolutionJobs = ListIdentityResolutionJobs'
+  { -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListIdentityResolutionJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listIdentityResolutionJobs_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listIdentityResolutionJobs_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+--
+-- 'domainName', 'listIdentityResolutionJobs_domainName' - The unique name of the domain.
+newListIdentityResolutionJobs ::
+  -- | 'domainName'
+  Prelude.Text ->
+  ListIdentityResolutionJobs
+newListIdentityResolutionJobs pDomainName_ =
+  ListIdentityResolutionJobs'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      domainName = pDomainName_
+    }
+
+-- | The maximum number of results to return per page.
+listIdentityResolutionJobs_maxResults :: Lens.Lens' ListIdentityResolutionJobs (Prelude.Maybe Prelude.Natural)
+listIdentityResolutionJobs_maxResults = Lens.lens (\ListIdentityResolutionJobs' {maxResults} -> maxResults) (\s@ListIdentityResolutionJobs' {} a -> s {maxResults = a} :: ListIdentityResolutionJobs)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+listIdentityResolutionJobs_nextToken :: Lens.Lens' ListIdentityResolutionJobs (Prelude.Maybe Prelude.Text)
+listIdentityResolutionJobs_nextToken = Lens.lens (\ListIdentityResolutionJobs' {nextToken} -> nextToken) (\s@ListIdentityResolutionJobs' {} a -> s {nextToken = a} :: ListIdentityResolutionJobs)
+
+-- | The unique name of the domain.
+listIdentityResolutionJobs_domainName :: Lens.Lens' ListIdentityResolutionJobs Prelude.Text
+listIdentityResolutionJobs_domainName = Lens.lens (\ListIdentityResolutionJobs' {domainName} -> domainName) (\s@ListIdentityResolutionJobs' {} a -> s {domainName = a} :: ListIdentityResolutionJobs)
+
+instance Core.AWSRequest ListIdentityResolutionJobs where
+  type
+    AWSResponse ListIdentityResolutionJobs =
+      ListIdentityResolutionJobsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListIdentityResolutionJobsResponse'
+            Prelude.<$> ( x
+                            Data..?> "IdentityResolutionJobsList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListIdentityResolutionJobs where
+  hashWithSalt _salt ListIdentityResolutionJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData ListIdentityResolutionJobs where
+  rnf ListIdentityResolutionJobs' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders ListIdentityResolutionJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListIdentityResolutionJobs where
+  toPath ListIdentityResolutionJobs' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/identity-resolution-jobs"
+      ]
+
+instance Data.ToQuery ListIdentityResolutionJobs where
+  toQuery ListIdentityResolutionJobs' {..} =
+    Prelude.mconcat
+      [ "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListIdentityResolutionJobsResponse' smart constructor.
+data ListIdentityResolutionJobsResponse = ListIdentityResolutionJobsResponse'
+  { -- | A list of Identity Resolution Jobs.
+    identityResolutionJobsList :: Prelude.Maybe [IdentityResolutionJob],
+    -- | If there are additional results, this is the token for the next set of
+    -- results.
+    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 'ListIdentityResolutionJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'identityResolutionJobsList', 'listIdentityResolutionJobsResponse_identityResolutionJobsList' - A list of Identity Resolution Jobs.
+--
+-- 'nextToken', 'listIdentityResolutionJobsResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'httpStatus', 'listIdentityResolutionJobsResponse_httpStatus' - The response's http status code.
+newListIdentityResolutionJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListIdentityResolutionJobsResponse
+newListIdentityResolutionJobsResponse pHttpStatus_ =
+  ListIdentityResolutionJobsResponse'
+    { identityResolutionJobsList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of Identity Resolution Jobs.
+listIdentityResolutionJobsResponse_identityResolutionJobsList :: Lens.Lens' ListIdentityResolutionJobsResponse (Prelude.Maybe [IdentityResolutionJob])
+listIdentityResolutionJobsResponse_identityResolutionJobsList = Lens.lens (\ListIdentityResolutionJobsResponse' {identityResolutionJobsList} -> identityResolutionJobsList) (\s@ListIdentityResolutionJobsResponse' {} a -> s {identityResolutionJobsList = a} :: ListIdentityResolutionJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+listIdentityResolutionJobsResponse_nextToken :: Lens.Lens' ListIdentityResolutionJobsResponse (Prelude.Maybe Prelude.Text)
+listIdentityResolutionJobsResponse_nextToken = Lens.lens (\ListIdentityResolutionJobsResponse' {nextToken} -> nextToken) (\s@ListIdentityResolutionJobsResponse' {} a -> s {nextToken = a} :: ListIdentityResolutionJobsResponse)
+
+-- | The response's http status code.
+listIdentityResolutionJobsResponse_httpStatus :: Lens.Lens' ListIdentityResolutionJobsResponse Prelude.Int
+listIdentityResolutionJobsResponse_httpStatus = Lens.lens (\ListIdentityResolutionJobsResponse' {httpStatus} -> httpStatus) (\s@ListIdentityResolutionJobsResponse' {} a -> s {httpStatus = a} :: ListIdentityResolutionJobsResponse)
+
+instance
+  Prelude.NFData
+    ListIdentityResolutionJobsResponse
+  where
+  rnf ListIdentityResolutionJobsResponse' {..} =
+    Prelude.rnf identityResolutionJobsList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/ListIntegrations.hs b/gen/Amazonka/CustomerProfiles/ListIntegrations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/ListIntegrations.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.CustomerProfiles.ListIntegrations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all of the integrations in your domain.
+module Amazonka.CustomerProfiles.ListIntegrations
+  ( -- * Creating a Request
+    ListIntegrations (..),
+    newListIntegrations,
+
+    -- * Request Lenses
+    listIntegrations_includeHidden,
+    listIntegrations_maxResults,
+    listIntegrations_nextToken,
+    listIntegrations_domainName,
+
+    -- * Destructuring the Response
+    ListIntegrationsResponse (..),
+    newListIntegrationsResponse,
+
+    -- * Response Lenses
+    listIntegrationsResponse_items,
+    listIntegrationsResponse_nextToken,
+    listIntegrationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListIntegrations' smart constructor.
+data ListIntegrations = ListIntegrations'
+  { -- | Boolean to indicate if hidden integration should be returned. Defaults
+    -- to @False@.
+    includeHidden :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of objects returned per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token from the previous ListIntegrations API call.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListIntegrations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'includeHidden', 'listIntegrations_includeHidden' - Boolean to indicate if hidden integration should be returned. Defaults
+-- to @False@.
+--
+-- 'maxResults', 'listIntegrations_maxResults' - The maximum number of objects returned per page.
+--
+-- 'nextToken', 'listIntegrations_nextToken' - The pagination token from the previous ListIntegrations API call.
+--
+-- 'domainName', 'listIntegrations_domainName' - The unique name of the domain.
+newListIntegrations ::
+  -- | 'domainName'
+  Prelude.Text ->
+  ListIntegrations
+newListIntegrations pDomainName_ =
+  ListIntegrations'
+    { includeHidden = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      domainName = pDomainName_
+    }
+
+-- | Boolean to indicate if hidden integration should be returned. Defaults
+-- to @False@.
+listIntegrations_includeHidden :: Lens.Lens' ListIntegrations (Prelude.Maybe Prelude.Bool)
+listIntegrations_includeHidden = Lens.lens (\ListIntegrations' {includeHidden} -> includeHidden) (\s@ListIntegrations' {} a -> s {includeHidden = a} :: ListIntegrations)
+
+-- | The maximum number of objects returned per page.
+listIntegrations_maxResults :: Lens.Lens' ListIntegrations (Prelude.Maybe Prelude.Natural)
+listIntegrations_maxResults = Lens.lens (\ListIntegrations' {maxResults} -> maxResults) (\s@ListIntegrations' {} a -> s {maxResults = a} :: ListIntegrations)
+
+-- | The pagination token from the previous ListIntegrations API call.
+listIntegrations_nextToken :: Lens.Lens' ListIntegrations (Prelude.Maybe Prelude.Text)
+listIntegrations_nextToken = Lens.lens (\ListIntegrations' {nextToken} -> nextToken) (\s@ListIntegrations' {} a -> s {nextToken = a} :: ListIntegrations)
+
+-- | The unique name of the domain.
+listIntegrations_domainName :: Lens.Lens' ListIntegrations Prelude.Text
+listIntegrations_domainName = Lens.lens (\ListIntegrations' {domainName} -> domainName) (\s@ListIntegrations' {} a -> s {domainName = a} :: ListIntegrations)
+
+instance Core.AWSRequest ListIntegrations where
+  type
+    AWSResponse ListIntegrations =
+      ListIntegrationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListIntegrationsResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListIntegrations where
+  hashWithSalt _salt ListIntegrations' {..} =
+    _salt
+      `Prelude.hashWithSalt` includeHidden
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData ListIntegrations where
+  rnf ListIntegrations' {..} =
+    Prelude.rnf includeHidden
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders ListIntegrations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListIntegrations where
+  toPath ListIntegrations' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainName, "/integrations"]
+
+instance Data.ToQuery ListIntegrations where
+  toQuery ListIntegrations' {..} =
+    Prelude.mconcat
+      [ "include-hidden" Data.=: includeHidden,
+        "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListIntegrationsResponse' smart constructor.
+data ListIntegrationsResponse = ListIntegrationsResponse'
+  { -- | The list of ListIntegrations instances.
+    items :: Prelude.Maybe [ListIntegrationItem],
+    -- | The pagination token from the previous ListIntegrations API call.
+    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 'ListIntegrationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listIntegrationsResponse_items' - The list of ListIntegrations instances.
+--
+-- 'nextToken', 'listIntegrationsResponse_nextToken' - The pagination token from the previous ListIntegrations API call.
+--
+-- 'httpStatus', 'listIntegrationsResponse_httpStatus' - The response's http status code.
+newListIntegrationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListIntegrationsResponse
+newListIntegrationsResponse pHttpStatus_ =
+  ListIntegrationsResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of ListIntegrations instances.
+listIntegrationsResponse_items :: Lens.Lens' ListIntegrationsResponse (Prelude.Maybe [ListIntegrationItem])
+listIntegrationsResponse_items = Lens.lens (\ListIntegrationsResponse' {items} -> items) (\s@ListIntegrationsResponse' {} a -> s {items = a} :: ListIntegrationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token from the previous ListIntegrations API call.
+listIntegrationsResponse_nextToken :: Lens.Lens' ListIntegrationsResponse (Prelude.Maybe Prelude.Text)
+listIntegrationsResponse_nextToken = Lens.lens (\ListIntegrationsResponse' {nextToken} -> nextToken) (\s@ListIntegrationsResponse' {} a -> s {nextToken = a} :: ListIntegrationsResponse)
+
+-- | The response's http status code.
+listIntegrationsResponse_httpStatus :: Lens.Lens' ListIntegrationsResponse Prelude.Int
+listIntegrationsResponse_httpStatus = Lens.lens (\ListIntegrationsResponse' {httpStatus} -> httpStatus) (\s@ListIntegrationsResponse' {} a -> s {httpStatus = a} :: ListIntegrationsResponse)
+
+instance Prelude.NFData ListIntegrationsResponse where
+  rnf ListIntegrationsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/ListProfileObjectTypeTemplates.hs b/gen/Amazonka/CustomerProfiles/ListProfileObjectTypeTemplates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/ListProfileObjectTypeTemplates.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.ListProfileObjectTypeTemplates
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all of the template information for object types.
+module Amazonka.CustomerProfiles.ListProfileObjectTypeTemplates
+  ( -- * Creating a Request
+    ListProfileObjectTypeTemplates (..),
+    newListProfileObjectTypeTemplates,
+
+    -- * Request Lenses
+    listProfileObjectTypeTemplates_maxResults,
+    listProfileObjectTypeTemplates_nextToken,
+
+    -- * Destructuring the Response
+    ListProfileObjectTypeTemplatesResponse (..),
+    newListProfileObjectTypeTemplatesResponse,
+
+    -- * Response Lenses
+    listProfileObjectTypeTemplatesResponse_items,
+    listProfileObjectTypeTemplatesResponse_nextToken,
+    listProfileObjectTypeTemplatesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListProfileObjectTypeTemplates' smart constructor.
+data ListProfileObjectTypeTemplates = ListProfileObjectTypeTemplates'
+  { -- | The maximum number of objects returned per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token from the previous ListObjectTypeTemplates API call.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListProfileObjectTypeTemplates' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listProfileObjectTypeTemplates_maxResults' - The maximum number of objects returned per page.
+--
+-- 'nextToken', 'listProfileObjectTypeTemplates_nextToken' - The pagination token from the previous ListObjectTypeTemplates API call.
+newListProfileObjectTypeTemplates ::
+  ListProfileObjectTypeTemplates
+newListProfileObjectTypeTemplates =
+  ListProfileObjectTypeTemplates'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of objects returned per page.
+listProfileObjectTypeTemplates_maxResults :: Lens.Lens' ListProfileObjectTypeTemplates (Prelude.Maybe Prelude.Natural)
+listProfileObjectTypeTemplates_maxResults = Lens.lens (\ListProfileObjectTypeTemplates' {maxResults} -> maxResults) (\s@ListProfileObjectTypeTemplates' {} a -> s {maxResults = a} :: ListProfileObjectTypeTemplates)
+
+-- | The pagination token from the previous ListObjectTypeTemplates API call.
+listProfileObjectTypeTemplates_nextToken :: Lens.Lens' ListProfileObjectTypeTemplates (Prelude.Maybe Prelude.Text)
+listProfileObjectTypeTemplates_nextToken = Lens.lens (\ListProfileObjectTypeTemplates' {nextToken} -> nextToken) (\s@ListProfileObjectTypeTemplates' {} a -> s {nextToken = a} :: ListProfileObjectTypeTemplates)
+
+instance
+  Core.AWSRequest
+    ListProfileObjectTypeTemplates
+  where
+  type
+    AWSResponse ListProfileObjectTypeTemplates =
+      ListProfileObjectTypeTemplatesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListProfileObjectTypeTemplatesResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListProfileObjectTypeTemplates
+  where
+  hashWithSalt
+    _salt
+    ListProfileObjectTypeTemplates' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    ListProfileObjectTypeTemplates
+  where
+  rnf ListProfileObjectTypeTemplates' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    ListProfileObjectTypeTemplates
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListProfileObjectTypeTemplates where
+  toPath = Prelude.const "/templates"
+
+instance Data.ToQuery ListProfileObjectTypeTemplates where
+  toQuery ListProfileObjectTypeTemplates' {..} =
+    Prelude.mconcat
+      [ "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListProfileObjectTypeTemplatesResponse' smart constructor.
+data ListProfileObjectTypeTemplatesResponse = ListProfileObjectTypeTemplatesResponse'
+  { -- | The list of ListProfileObjectType template instances.
+    items :: Prelude.Maybe [ListProfileObjectTypeTemplateItem],
+    -- | The pagination token from the previous ListObjectTypeTemplates API call.
+    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 'ListProfileObjectTypeTemplatesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listProfileObjectTypeTemplatesResponse_items' - The list of ListProfileObjectType template instances.
+--
+-- 'nextToken', 'listProfileObjectTypeTemplatesResponse_nextToken' - The pagination token from the previous ListObjectTypeTemplates API call.
+--
+-- 'httpStatus', 'listProfileObjectTypeTemplatesResponse_httpStatus' - The response's http status code.
+newListProfileObjectTypeTemplatesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListProfileObjectTypeTemplatesResponse
+newListProfileObjectTypeTemplatesResponse
+  pHttpStatus_ =
+    ListProfileObjectTypeTemplatesResponse'
+      { items =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The list of ListProfileObjectType template instances.
+listProfileObjectTypeTemplatesResponse_items :: Lens.Lens' ListProfileObjectTypeTemplatesResponse (Prelude.Maybe [ListProfileObjectTypeTemplateItem])
+listProfileObjectTypeTemplatesResponse_items = Lens.lens (\ListProfileObjectTypeTemplatesResponse' {items} -> items) (\s@ListProfileObjectTypeTemplatesResponse' {} a -> s {items = a} :: ListProfileObjectTypeTemplatesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token from the previous ListObjectTypeTemplates API call.
+listProfileObjectTypeTemplatesResponse_nextToken :: Lens.Lens' ListProfileObjectTypeTemplatesResponse (Prelude.Maybe Prelude.Text)
+listProfileObjectTypeTemplatesResponse_nextToken = Lens.lens (\ListProfileObjectTypeTemplatesResponse' {nextToken} -> nextToken) (\s@ListProfileObjectTypeTemplatesResponse' {} a -> s {nextToken = a} :: ListProfileObjectTypeTemplatesResponse)
+
+-- | The response's http status code.
+listProfileObjectTypeTemplatesResponse_httpStatus :: Lens.Lens' ListProfileObjectTypeTemplatesResponse Prelude.Int
+listProfileObjectTypeTemplatesResponse_httpStatus = Lens.lens (\ListProfileObjectTypeTemplatesResponse' {httpStatus} -> httpStatus) (\s@ListProfileObjectTypeTemplatesResponse' {} a -> s {httpStatus = a} :: ListProfileObjectTypeTemplatesResponse)
+
+instance
+  Prelude.NFData
+    ListProfileObjectTypeTemplatesResponse
+  where
+  rnf ListProfileObjectTypeTemplatesResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/ListProfileObjectTypes.hs b/gen/Amazonka/CustomerProfiles/ListProfileObjectTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/ListProfileObjectTypes.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.ListProfileObjectTypes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all of the templates available within the service.
+module Amazonka.CustomerProfiles.ListProfileObjectTypes
+  ( -- * Creating a Request
+    ListProfileObjectTypes (..),
+    newListProfileObjectTypes,
+
+    -- * Request Lenses
+    listProfileObjectTypes_maxResults,
+    listProfileObjectTypes_nextToken,
+    listProfileObjectTypes_domainName,
+
+    -- * Destructuring the Response
+    ListProfileObjectTypesResponse (..),
+    newListProfileObjectTypesResponse,
+
+    -- * Response Lenses
+    listProfileObjectTypesResponse_items,
+    listProfileObjectTypesResponse_nextToken,
+    listProfileObjectTypesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListProfileObjectTypes' smart constructor.
+data ListProfileObjectTypes = ListProfileObjectTypes'
+  { -- | The maximum number of objects returned per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Identifies the next page of results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListProfileObjectTypes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listProfileObjectTypes_maxResults' - The maximum number of objects returned per page.
+--
+-- 'nextToken', 'listProfileObjectTypes_nextToken' - Identifies the next page of results to return.
+--
+-- 'domainName', 'listProfileObjectTypes_domainName' - The unique name of the domain.
+newListProfileObjectTypes ::
+  -- | 'domainName'
+  Prelude.Text ->
+  ListProfileObjectTypes
+newListProfileObjectTypes pDomainName_ =
+  ListProfileObjectTypes'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      domainName = pDomainName_
+    }
+
+-- | The maximum number of objects returned per page.
+listProfileObjectTypes_maxResults :: Lens.Lens' ListProfileObjectTypes (Prelude.Maybe Prelude.Natural)
+listProfileObjectTypes_maxResults = Lens.lens (\ListProfileObjectTypes' {maxResults} -> maxResults) (\s@ListProfileObjectTypes' {} a -> s {maxResults = a} :: ListProfileObjectTypes)
+
+-- | Identifies the next page of results to return.
+listProfileObjectTypes_nextToken :: Lens.Lens' ListProfileObjectTypes (Prelude.Maybe Prelude.Text)
+listProfileObjectTypes_nextToken = Lens.lens (\ListProfileObjectTypes' {nextToken} -> nextToken) (\s@ListProfileObjectTypes' {} a -> s {nextToken = a} :: ListProfileObjectTypes)
+
+-- | The unique name of the domain.
+listProfileObjectTypes_domainName :: Lens.Lens' ListProfileObjectTypes Prelude.Text
+listProfileObjectTypes_domainName = Lens.lens (\ListProfileObjectTypes' {domainName} -> domainName) (\s@ListProfileObjectTypes' {} a -> s {domainName = a} :: ListProfileObjectTypes)
+
+instance Core.AWSRequest ListProfileObjectTypes where
+  type
+    AWSResponse ListProfileObjectTypes =
+      ListProfileObjectTypesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListProfileObjectTypesResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListProfileObjectTypes where
+  hashWithSalt _salt ListProfileObjectTypes' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData ListProfileObjectTypes where
+  rnf ListProfileObjectTypes' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders ListProfileObjectTypes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListProfileObjectTypes where
+  toPath ListProfileObjectTypes' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainName, "/object-types"]
+
+instance Data.ToQuery ListProfileObjectTypes where
+  toQuery ListProfileObjectTypes' {..} =
+    Prelude.mconcat
+      [ "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListProfileObjectTypesResponse' smart constructor.
+data ListProfileObjectTypesResponse = ListProfileObjectTypesResponse'
+  { -- | The list of ListProfileObjectTypes instances.
+    items :: Prelude.Maybe [ListProfileObjectTypeItem],
+    -- | Identifies the next page of results to return.
+    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 'ListProfileObjectTypesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listProfileObjectTypesResponse_items' - The list of ListProfileObjectTypes instances.
+--
+-- 'nextToken', 'listProfileObjectTypesResponse_nextToken' - Identifies the next page of results to return.
+--
+-- 'httpStatus', 'listProfileObjectTypesResponse_httpStatus' - The response's http status code.
+newListProfileObjectTypesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListProfileObjectTypesResponse
+newListProfileObjectTypesResponse pHttpStatus_ =
+  ListProfileObjectTypesResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of ListProfileObjectTypes instances.
+listProfileObjectTypesResponse_items :: Lens.Lens' ListProfileObjectTypesResponse (Prelude.Maybe [ListProfileObjectTypeItem])
+listProfileObjectTypesResponse_items = Lens.lens (\ListProfileObjectTypesResponse' {items} -> items) (\s@ListProfileObjectTypesResponse' {} a -> s {items = a} :: ListProfileObjectTypesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Identifies the next page of results to return.
+listProfileObjectTypesResponse_nextToken :: Lens.Lens' ListProfileObjectTypesResponse (Prelude.Maybe Prelude.Text)
+listProfileObjectTypesResponse_nextToken = Lens.lens (\ListProfileObjectTypesResponse' {nextToken} -> nextToken) (\s@ListProfileObjectTypesResponse' {} a -> s {nextToken = a} :: ListProfileObjectTypesResponse)
+
+-- | The response's http status code.
+listProfileObjectTypesResponse_httpStatus :: Lens.Lens' ListProfileObjectTypesResponse Prelude.Int
+listProfileObjectTypesResponse_httpStatus = Lens.lens (\ListProfileObjectTypesResponse' {httpStatus} -> httpStatus) (\s@ListProfileObjectTypesResponse' {} a -> s {httpStatus = a} :: ListProfileObjectTypesResponse)
+
+instance
+  Prelude.NFData
+    ListProfileObjectTypesResponse
+  where
+  rnf ListProfileObjectTypesResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/ListProfileObjects.hs b/gen/Amazonka/CustomerProfiles/ListProfileObjects.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/ListProfileObjects.hs
@@ -0,0 +1,267 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.ListProfileObjects
+-- 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 objects associated with a profile of a given
+-- ProfileObjectType.
+module Amazonka.CustomerProfiles.ListProfileObjects
+  ( -- * Creating a Request
+    ListProfileObjects (..),
+    newListProfileObjects,
+
+    -- * Request Lenses
+    listProfileObjects_maxResults,
+    listProfileObjects_nextToken,
+    listProfileObjects_objectFilter,
+    listProfileObjects_domainName,
+    listProfileObjects_objectTypeName,
+    listProfileObjects_profileId,
+
+    -- * Destructuring the Response
+    ListProfileObjectsResponse (..),
+    newListProfileObjectsResponse,
+
+    -- * Response Lenses
+    listProfileObjectsResponse_items,
+    listProfileObjectsResponse_nextToken,
+    listProfileObjectsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListProfileObjects' smart constructor.
+data ListProfileObjects = ListProfileObjects'
+  { -- | The maximum number of objects returned per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token from the previous call to ListProfileObjects.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Applies a filter to the response to include profile objects with the
+    -- specified index values. This filter is only supported for ObjectTypeName
+    -- _asset, _case and _order.
+    objectFilter :: Prelude.Maybe ObjectFilter,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The name of the profile object type.
+    objectTypeName :: Prelude.Text,
+    -- | The unique identifier of a customer profile.
+    profileId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListProfileObjects' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listProfileObjects_maxResults' - The maximum number of objects returned per page.
+--
+-- 'nextToken', 'listProfileObjects_nextToken' - The pagination token from the previous call to ListProfileObjects.
+--
+-- 'objectFilter', 'listProfileObjects_objectFilter' - Applies a filter to the response to include profile objects with the
+-- specified index values. This filter is only supported for ObjectTypeName
+-- _asset, _case and _order.
+--
+-- 'domainName', 'listProfileObjects_domainName' - The unique name of the domain.
+--
+-- 'objectTypeName', 'listProfileObjects_objectTypeName' - The name of the profile object type.
+--
+-- 'profileId', 'listProfileObjects_profileId' - The unique identifier of a customer profile.
+newListProfileObjects ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'objectTypeName'
+  Prelude.Text ->
+  -- | 'profileId'
+  Prelude.Text ->
+  ListProfileObjects
+newListProfileObjects
+  pDomainName_
+  pObjectTypeName_
+  pProfileId_ =
+    ListProfileObjects'
+      { maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        objectFilter = Prelude.Nothing,
+        domainName = pDomainName_,
+        objectTypeName = pObjectTypeName_,
+        profileId = pProfileId_
+      }
+
+-- | The maximum number of objects returned per page.
+listProfileObjects_maxResults :: Lens.Lens' ListProfileObjects (Prelude.Maybe Prelude.Natural)
+listProfileObjects_maxResults = Lens.lens (\ListProfileObjects' {maxResults} -> maxResults) (\s@ListProfileObjects' {} a -> s {maxResults = a} :: ListProfileObjects)
+
+-- | The pagination token from the previous call to ListProfileObjects.
+listProfileObjects_nextToken :: Lens.Lens' ListProfileObjects (Prelude.Maybe Prelude.Text)
+listProfileObjects_nextToken = Lens.lens (\ListProfileObjects' {nextToken} -> nextToken) (\s@ListProfileObjects' {} a -> s {nextToken = a} :: ListProfileObjects)
+
+-- | Applies a filter to the response to include profile objects with the
+-- specified index values. This filter is only supported for ObjectTypeName
+-- _asset, _case and _order.
+listProfileObjects_objectFilter :: Lens.Lens' ListProfileObjects (Prelude.Maybe ObjectFilter)
+listProfileObjects_objectFilter = Lens.lens (\ListProfileObjects' {objectFilter} -> objectFilter) (\s@ListProfileObjects' {} a -> s {objectFilter = a} :: ListProfileObjects)
+
+-- | The unique name of the domain.
+listProfileObjects_domainName :: Lens.Lens' ListProfileObjects Prelude.Text
+listProfileObjects_domainName = Lens.lens (\ListProfileObjects' {domainName} -> domainName) (\s@ListProfileObjects' {} a -> s {domainName = a} :: ListProfileObjects)
+
+-- | The name of the profile object type.
+listProfileObjects_objectTypeName :: Lens.Lens' ListProfileObjects Prelude.Text
+listProfileObjects_objectTypeName = Lens.lens (\ListProfileObjects' {objectTypeName} -> objectTypeName) (\s@ListProfileObjects' {} a -> s {objectTypeName = a} :: ListProfileObjects)
+
+-- | The unique identifier of a customer profile.
+listProfileObjects_profileId :: Lens.Lens' ListProfileObjects Prelude.Text
+listProfileObjects_profileId = Lens.lens (\ListProfileObjects' {profileId} -> profileId) (\s@ListProfileObjects' {} a -> s {profileId = a} :: ListProfileObjects)
+
+instance Core.AWSRequest ListProfileObjects where
+  type
+    AWSResponse ListProfileObjects =
+      ListProfileObjectsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListProfileObjectsResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListProfileObjects where
+  hashWithSalt _salt ListProfileObjects' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` objectFilter
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` objectTypeName
+      `Prelude.hashWithSalt` profileId
+
+instance Prelude.NFData ListProfileObjects where
+  rnf ListProfileObjects' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf objectFilter
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf objectTypeName
+      `Prelude.seq` Prelude.rnf profileId
+
+instance Data.ToHeaders ListProfileObjects where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListProfileObjects where
+  toJSON ListProfileObjects' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ObjectFilter" Data..=) Prelude.<$> objectFilter,
+            Prelude.Just
+              ("ObjectTypeName" Data..= objectTypeName),
+            Prelude.Just ("ProfileId" Data..= profileId)
+          ]
+      )
+
+instance Data.ToPath ListProfileObjects where
+  toPath ListProfileObjects' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/profiles/objects"
+      ]
+
+instance Data.ToQuery ListProfileObjects where
+  toQuery ListProfileObjects' {..} =
+    Prelude.mconcat
+      [ "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListProfileObjectsResponse' smart constructor.
+data ListProfileObjectsResponse = ListProfileObjectsResponse'
+  { -- | The list of ListProfileObject instances.
+    items :: Prelude.Maybe [ListProfileObjectsItem],
+    -- | The pagination token from the previous call to ListProfileObjects.
+    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 'ListProfileObjectsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listProfileObjectsResponse_items' - The list of ListProfileObject instances.
+--
+-- 'nextToken', 'listProfileObjectsResponse_nextToken' - The pagination token from the previous call to ListProfileObjects.
+--
+-- 'httpStatus', 'listProfileObjectsResponse_httpStatus' - The response's http status code.
+newListProfileObjectsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListProfileObjectsResponse
+newListProfileObjectsResponse pHttpStatus_ =
+  ListProfileObjectsResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of ListProfileObject instances.
+listProfileObjectsResponse_items :: Lens.Lens' ListProfileObjectsResponse (Prelude.Maybe [ListProfileObjectsItem])
+listProfileObjectsResponse_items = Lens.lens (\ListProfileObjectsResponse' {items} -> items) (\s@ListProfileObjectsResponse' {} a -> s {items = a} :: ListProfileObjectsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token from the previous call to ListProfileObjects.
+listProfileObjectsResponse_nextToken :: Lens.Lens' ListProfileObjectsResponse (Prelude.Maybe Prelude.Text)
+listProfileObjectsResponse_nextToken = Lens.lens (\ListProfileObjectsResponse' {nextToken} -> nextToken) (\s@ListProfileObjectsResponse' {} a -> s {nextToken = a} :: ListProfileObjectsResponse)
+
+-- | The response's http status code.
+listProfileObjectsResponse_httpStatus :: Lens.Lens' ListProfileObjectsResponse Prelude.Int
+listProfileObjectsResponse_httpStatus = Lens.lens (\ListProfileObjectsResponse' {httpStatus} -> httpStatus) (\s@ListProfileObjectsResponse' {} a -> s {httpStatus = a} :: ListProfileObjectsResponse)
+
+instance Prelude.NFData ListProfileObjectsResponse where
+  rnf ListProfileObjectsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/ListTagsForResource.hs b/gen/Amazonka/CustomerProfiles/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/ListTagsForResource.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.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)
+--
+-- Displays the tags associated with an Amazon Connect Customer Profiles
+-- resource. In Connect Customer Profiles, domains, profile object types,
+-- and integrations can be tagged.
+module Amazonka.CustomerProfiles.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+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 ARN of the resource for which you want to view tags.
+    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 ARN of the resource for which you want to view tags.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The ARN of the resource for which you want to view tags.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tags used to organize, track, or control access for this resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/ListWorkflows.hs b/gen/Amazonka/CustomerProfiles/ListWorkflows.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/ListWorkflows.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.CustomerProfiles.ListWorkflows
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Query to list all workflows.
+module Amazonka.CustomerProfiles.ListWorkflows
+  ( -- * Creating a Request
+    ListWorkflows (..),
+    newListWorkflows,
+
+    -- * Request Lenses
+    listWorkflows_maxResults,
+    listWorkflows_nextToken,
+    listWorkflows_queryEndDate,
+    listWorkflows_queryStartDate,
+    listWorkflows_status,
+    listWorkflows_workflowType,
+    listWorkflows_domainName,
+
+    -- * Destructuring the Response
+    ListWorkflowsResponse (..),
+    newListWorkflowsResponse,
+
+    -- * Response Lenses
+    listWorkflowsResponse_items,
+    listWorkflowsResponse_nextToken,
+    listWorkflowsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListWorkflows' smart constructor.
+data ListWorkflows = ListWorkflows'
+  { -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Retrieve workflows ended after timestamp.
+    queryEndDate :: Prelude.Maybe Data.POSIX,
+    -- | Retrieve workflows started after timestamp.
+    queryStartDate :: Prelude.Maybe Data.POSIX,
+    -- | Status of workflow execution.
+    status :: Prelude.Maybe Status,
+    -- | The type of workflow. The only supported value is APPFLOW_INTEGRATION.
+    workflowType :: Prelude.Maybe WorkflowType,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorkflows' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listWorkflows_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listWorkflows_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+--
+-- 'queryEndDate', 'listWorkflows_queryEndDate' - Retrieve workflows ended after timestamp.
+--
+-- 'queryStartDate', 'listWorkflows_queryStartDate' - Retrieve workflows started after timestamp.
+--
+-- 'status', 'listWorkflows_status' - Status of workflow execution.
+--
+-- 'workflowType', 'listWorkflows_workflowType' - The type of workflow. The only supported value is APPFLOW_INTEGRATION.
+--
+-- 'domainName', 'listWorkflows_domainName' - The unique name of the domain.
+newListWorkflows ::
+  -- | 'domainName'
+  Prelude.Text ->
+  ListWorkflows
+newListWorkflows pDomainName_ =
+  ListWorkflows'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      queryEndDate = Prelude.Nothing,
+      queryStartDate = Prelude.Nothing,
+      status = Prelude.Nothing,
+      workflowType = Prelude.Nothing,
+      domainName = pDomainName_
+    }
+
+-- | The maximum number of results to return per page.
+listWorkflows_maxResults :: Lens.Lens' ListWorkflows (Prelude.Maybe Prelude.Natural)
+listWorkflows_maxResults = Lens.lens (\ListWorkflows' {maxResults} -> maxResults) (\s@ListWorkflows' {} a -> s {maxResults = a} :: ListWorkflows)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+listWorkflows_nextToken :: Lens.Lens' ListWorkflows (Prelude.Maybe Prelude.Text)
+listWorkflows_nextToken = Lens.lens (\ListWorkflows' {nextToken} -> nextToken) (\s@ListWorkflows' {} a -> s {nextToken = a} :: ListWorkflows)
+
+-- | Retrieve workflows ended after timestamp.
+listWorkflows_queryEndDate :: Lens.Lens' ListWorkflows (Prelude.Maybe Prelude.UTCTime)
+listWorkflows_queryEndDate = Lens.lens (\ListWorkflows' {queryEndDate} -> queryEndDate) (\s@ListWorkflows' {} a -> s {queryEndDate = a} :: ListWorkflows) Prelude.. Lens.mapping Data._Time
+
+-- | Retrieve workflows started after timestamp.
+listWorkflows_queryStartDate :: Lens.Lens' ListWorkflows (Prelude.Maybe Prelude.UTCTime)
+listWorkflows_queryStartDate = Lens.lens (\ListWorkflows' {queryStartDate} -> queryStartDate) (\s@ListWorkflows' {} a -> s {queryStartDate = a} :: ListWorkflows) Prelude.. Lens.mapping Data._Time
+
+-- | Status of workflow execution.
+listWorkflows_status :: Lens.Lens' ListWorkflows (Prelude.Maybe Status)
+listWorkflows_status = Lens.lens (\ListWorkflows' {status} -> status) (\s@ListWorkflows' {} a -> s {status = a} :: ListWorkflows)
+
+-- | The type of workflow. The only supported value is APPFLOW_INTEGRATION.
+listWorkflows_workflowType :: Lens.Lens' ListWorkflows (Prelude.Maybe WorkflowType)
+listWorkflows_workflowType = Lens.lens (\ListWorkflows' {workflowType} -> workflowType) (\s@ListWorkflows' {} a -> s {workflowType = a} :: ListWorkflows)
+
+-- | The unique name of the domain.
+listWorkflows_domainName :: Lens.Lens' ListWorkflows Prelude.Text
+listWorkflows_domainName = Lens.lens (\ListWorkflows' {domainName} -> domainName) (\s@ListWorkflows' {} a -> s {domainName = a} :: ListWorkflows)
+
+instance Core.AWSRequest ListWorkflows where
+  type
+    AWSResponse ListWorkflows =
+      ListWorkflowsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWorkflowsResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListWorkflows where
+  hashWithSalt _salt ListWorkflows' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` queryEndDate
+      `Prelude.hashWithSalt` queryStartDate
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` workflowType
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData ListWorkflows where
+  rnf ListWorkflows' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf queryEndDate
+      `Prelude.seq` Prelude.rnf queryStartDate
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf workflowType
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders ListWorkflows where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListWorkflows where
+  toJSON ListWorkflows' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("QueryEndDate" Data..=) Prelude.<$> queryEndDate,
+            ("QueryStartDate" Data..=)
+              Prelude.<$> queryStartDate,
+            ("Status" Data..=) Prelude.<$> status,
+            ("WorkflowType" Data..=) Prelude.<$> workflowType
+          ]
+      )
+
+instance Data.ToPath ListWorkflows where
+  toPath ListWorkflows' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainName, "/workflows"]
+
+instance Data.ToQuery ListWorkflows where
+  toQuery ListWorkflows' {..} =
+    Prelude.mconcat
+      [ "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListWorkflowsResponse' smart constructor.
+data ListWorkflowsResponse = ListWorkflowsResponse'
+  { -- | List containing workflow details.
+    items :: Prelude.Maybe [ListWorkflowsItem],
+    -- | If there are additional results, this is the token for the next set of
+    -- results.
+    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 'ListWorkflowsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listWorkflowsResponse_items' - List containing workflow details.
+--
+-- 'nextToken', 'listWorkflowsResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'httpStatus', 'listWorkflowsResponse_httpStatus' - The response's http status code.
+newListWorkflowsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWorkflowsResponse
+newListWorkflowsResponse pHttpStatus_ =
+  ListWorkflowsResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | List containing workflow details.
+listWorkflowsResponse_items :: Lens.Lens' ListWorkflowsResponse (Prelude.Maybe [ListWorkflowsItem])
+listWorkflowsResponse_items = Lens.lens (\ListWorkflowsResponse' {items} -> items) (\s@ListWorkflowsResponse' {} a -> s {items = a} :: ListWorkflowsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+listWorkflowsResponse_nextToken :: Lens.Lens' ListWorkflowsResponse (Prelude.Maybe Prelude.Text)
+listWorkflowsResponse_nextToken = Lens.lens (\ListWorkflowsResponse' {nextToken} -> nextToken) (\s@ListWorkflowsResponse' {} a -> s {nextToken = a} :: ListWorkflowsResponse)
+
+-- | The response's http status code.
+listWorkflowsResponse_httpStatus :: Lens.Lens' ListWorkflowsResponse Prelude.Int
+listWorkflowsResponse_httpStatus = Lens.lens (\ListWorkflowsResponse' {httpStatus} -> httpStatus) (\s@ListWorkflowsResponse' {} a -> s {httpStatus = a} :: ListWorkflowsResponse)
+
+instance Prelude.NFData ListWorkflowsResponse where
+  rnf ListWorkflowsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/MergeProfiles.hs b/gen/Amazonka/CustomerProfiles/MergeProfiles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/MergeProfiles.hs
@@ -0,0 +1,263 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.MergeProfiles
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Runs an AWS Lambda job that does the following:
+--
+-- 1.  All the profileKeys in the @ProfileToBeMerged@ will be moved to the
+--     main profile.
+--
+-- 2.  All the objects in the @ProfileToBeMerged@ will be moved to the main
+--     profile.
+--
+-- 3.  All the @ProfileToBeMerged@ will be deleted at the end.
+--
+-- 4.  All the profileKeys in the @ProfileIdsToBeMerged@ will be moved to
+--     the main profile.
+--
+-- 5.  Standard fields are merged as follows:
+--
+--     1.  Fields are always \"union\"-ed if there are no conflicts in
+--         standard fields or attributeKeys.
+--
+--     2.  When there are conflicting fields:
+--
+--         1.  If no @SourceProfileIds@ entry is specified, the main
+--             Profile value is always taken.
+--
+--         2.  If a @SourceProfileIds@ entry is specified, the specified
+--             profileId is always taken, even if it is a NULL value.
+--
+-- You can use MergeProfiles together with
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html GetMatches>,
+-- which returns potentially matching profiles, or use it with the results
+-- of another matching system. After profiles have been merged, they cannot
+-- be separated (unmerged).
+module Amazonka.CustomerProfiles.MergeProfiles
+  ( -- * Creating a Request
+    MergeProfiles (..),
+    newMergeProfiles,
+
+    -- * Request Lenses
+    mergeProfiles_fieldSourceProfileIds,
+    mergeProfiles_domainName,
+    mergeProfiles_mainProfileId,
+    mergeProfiles_profileIdsToBeMerged,
+
+    -- * Destructuring the Response
+    MergeProfilesResponse (..),
+    newMergeProfilesResponse,
+
+    -- * Response Lenses
+    mergeProfilesResponse_message,
+    mergeProfilesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newMergeProfiles' smart constructor.
+data MergeProfiles = MergeProfiles'
+  { -- | The identifiers of the fields in the profile that has the information
+    -- you want to apply to the merge. For example, say you want to merge
+    -- EmailAddress from Profile1 into MainProfile. This would be the
+    -- identifier of the EmailAddress field in Profile1.
+    fieldSourceProfileIds :: Prelude.Maybe FieldSourceProfileIds,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The identifier of the profile to be taken.
+    mainProfileId :: Prelude.Text,
+    -- | The identifier of the profile to be merged into MainProfileId.
+    profileIdsToBeMerged :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MergeProfiles' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fieldSourceProfileIds', 'mergeProfiles_fieldSourceProfileIds' - The identifiers of the fields in the profile that has the information
+-- you want to apply to the merge. For example, say you want to merge
+-- EmailAddress from Profile1 into MainProfile. This would be the
+-- identifier of the EmailAddress field in Profile1.
+--
+-- 'domainName', 'mergeProfiles_domainName' - The unique name of the domain.
+--
+-- 'mainProfileId', 'mergeProfiles_mainProfileId' - The identifier of the profile to be taken.
+--
+-- 'profileIdsToBeMerged', 'mergeProfiles_profileIdsToBeMerged' - The identifier of the profile to be merged into MainProfileId.
+newMergeProfiles ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'mainProfileId'
+  Prelude.Text ->
+  -- | 'profileIdsToBeMerged'
+  Prelude.NonEmpty Prelude.Text ->
+  MergeProfiles
+newMergeProfiles
+  pDomainName_
+  pMainProfileId_
+  pProfileIdsToBeMerged_ =
+    MergeProfiles'
+      { fieldSourceProfileIds =
+          Prelude.Nothing,
+        domainName = pDomainName_,
+        mainProfileId = pMainProfileId_,
+        profileIdsToBeMerged =
+          Lens.coerced Lens.# pProfileIdsToBeMerged_
+      }
+
+-- | The identifiers of the fields in the profile that has the information
+-- you want to apply to the merge. For example, say you want to merge
+-- EmailAddress from Profile1 into MainProfile. This would be the
+-- identifier of the EmailAddress field in Profile1.
+mergeProfiles_fieldSourceProfileIds :: Lens.Lens' MergeProfiles (Prelude.Maybe FieldSourceProfileIds)
+mergeProfiles_fieldSourceProfileIds = Lens.lens (\MergeProfiles' {fieldSourceProfileIds} -> fieldSourceProfileIds) (\s@MergeProfiles' {} a -> s {fieldSourceProfileIds = a} :: MergeProfiles)
+
+-- | The unique name of the domain.
+mergeProfiles_domainName :: Lens.Lens' MergeProfiles Prelude.Text
+mergeProfiles_domainName = Lens.lens (\MergeProfiles' {domainName} -> domainName) (\s@MergeProfiles' {} a -> s {domainName = a} :: MergeProfiles)
+
+-- | The identifier of the profile to be taken.
+mergeProfiles_mainProfileId :: Lens.Lens' MergeProfiles Prelude.Text
+mergeProfiles_mainProfileId = Lens.lens (\MergeProfiles' {mainProfileId} -> mainProfileId) (\s@MergeProfiles' {} a -> s {mainProfileId = a} :: MergeProfiles)
+
+-- | The identifier of the profile to be merged into MainProfileId.
+mergeProfiles_profileIdsToBeMerged :: Lens.Lens' MergeProfiles (Prelude.NonEmpty Prelude.Text)
+mergeProfiles_profileIdsToBeMerged = Lens.lens (\MergeProfiles' {profileIdsToBeMerged} -> profileIdsToBeMerged) (\s@MergeProfiles' {} a -> s {profileIdsToBeMerged = a} :: MergeProfiles) Prelude.. Lens.coerced
+
+instance Core.AWSRequest MergeProfiles where
+  type
+    AWSResponse MergeProfiles =
+      MergeProfilesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          MergeProfilesResponse'
+            Prelude.<$> (x Data..?> "Message")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable MergeProfiles where
+  hashWithSalt _salt MergeProfiles' {..} =
+    _salt
+      `Prelude.hashWithSalt` fieldSourceProfileIds
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` mainProfileId
+      `Prelude.hashWithSalt` profileIdsToBeMerged
+
+instance Prelude.NFData MergeProfiles where
+  rnf MergeProfiles' {..} =
+    Prelude.rnf fieldSourceProfileIds
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf mainProfileId
+      `Prelude.seq` Prelude.rnf profileIdsToBeMerged
+
+instance Data.ToHeaders MergeProfiles where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON MergeProfiles where
+  toJSON MergeProfiles' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FieldSourceProfileIds" Data..=)
+              Prelude.<$> fieldSourceProfileIds,
+            Prelude.Just ("MainProfileId" Data..= mainProfileId),
+            Prelude.Just
+              ( "ProfileIdsToBeMerged"
+                  Data..= profileIdsToBeMerged
+              )
+          ]
+      )
+
+instance Data.ToPath MergeProfiles where
+  toPath MergeProfiles' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/profiles/objects/merge"
+      ]
+
+instance Data.ToQuery MergeProfiles where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newMergeProfilesResponse' smart constructor.
+data MergeProfilesResponse = MergeProfilesResponse'
+  { -- | A message that indicates the merge request is complete.
+    message :: 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 'MergeProfilesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'mergeProfilesResponse_message' - A message that indicates the merge request is complete.
+--
+-- 'httpStatus', 'mergeProfilesResponse_httpStatus' - The response's http status code.
+newMergeProfilesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  MergeProfilesResponse
+newMergeProfilesResponse pHttpStatus_ =
+  MergeProfilesResponse'
+    { message = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A message that indicates the merge request is complete.
+mergeProfilesResponse_message :: Lens.Lens' MergeProfilesResponse (Prelude.Maybe Prelude.Text)
+mergeProfilesResponse_message = Lens.lens (\MergeProfilesResponse' {message} -> message) (\s@MergeProfilesResponse' {} a -> s {message = a} :: MergeProfilesResponse)
+
+-- | The response's http status code.
+mergeProfilesResponse_httpStatus :: Lens.Lens' MergeProfilesResponse Prelude.Int
+mergeProfilesResponse_httpStatus = Lens.lens (\MergeProfilesResponse' {httpStatus} -> httpStatus) (\s@MergeProfilesResponse' {} a -> s {httpStatus = a} :: MergeProfilesResponse)
+
+instance Prelude.NFData MergeProfilesResponse where
+  rnf MergeProfilesResponse' {..} =
+    Prelude.rnf message
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/PutIntegration.hs b/gen/Amazonka/CustomerProfiles/PutIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/PutIntegration.hs
@@ -0,0 +1,403 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.PutIntegration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds an integration between the service and a third-party service, which
+-- includes Amazon AppFlow and Amazon Connect.
+--
+-- An integration can belong to only one domain.
+--
+-- To add or remove tags on an existing Integration, see
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_TagResource.html TagResource>
+-- \/
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_UntagResource.html UntagResource>.
+module Amazonka.CustomerProfiles.PutIntegration
+  ( -- * Creating a Request
+    PutIntegration (..),
+    newPutIntegration,
+
+    -- * Request Lenses
+    putIntegration_flowDefinition,
+    putIntegration_objectTypeName,
+    putIntegration_objectTypeNames,
+    putIntegration_tags,
+    putIntegration_uri,
+    putIntegration_domainName,
+
+    -- * Destructuring the Response
+    PutIntegrationResponse (..),
+    newPutIntegrationResponse,
+
+    -- * Response Lenses
+    putIntegrationResponse_isUnstructured,
+    putIntegrationResponse_objectTypeName,
+    putIntegrationResponse_objectTypeNames,
+    putIntegrationResponse_tags,
+    putIntegrationResponse_workflowId,
+    putIntegrationResponse_httpStatus,
+    putIntegrationResponse_domainName,
+    putIntegrationResponse_uri,
+    putIntegrationResponse_createdAt,
+    putIntegrationResponse_lastUpdatedAt,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutIntegration' smart constructor.
+data PutIntegration = PutIntegration'
+  { -- | The configuration that controls how Customer Profiles retrieves data
+    -- from the source.
+    flowDefinition :: Prelude.Maybe FlowDefinition,
+    -- | The name of the profile object type.
+    objectTypeName :: Prelude.Maybe Prelude.Text,
+    -- | A map in which each key is an event type from an external application
+    -- such as Segment or Shopify, and each value is an @ObjectTypeName@
+    -- (template) used to ingest the event. It supports the following event
+    -- types: @SegmentIdentify@, @ShopifyCreateCustomers@,
+    -- @ShopifyUpdateCustomers@, @ShopifyCreateDraftOrders@,
+    -- @ShopifyUpdateDraftOrders@, @ShopifyCreateOrders@, and
+    -- @ShopifyUpdatedOrders@.
+    objectTypeNames :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The URI of the S3 bucket or any other type of data source.
+    uri :: Prelude.Maybe Prelude.Text,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'flowDefinition', 'putIntegration_flowDefinition' - The configuration that controls how Customer Profiles retrieves data
+-- from the source.
+--
+-- 'objectTypeName', 'putIntegration_objectTypeName' - The name of the profile object type.
+--
+-- 'objectTypeNames', 'putIntegration_objectTypeNames' - A map in which each key is an event type from an external application
+-- such as Segment or Shopify, and each value is an @ObjectTypeName@
+-- (template) used to ingest the event. It supports the following event
+-- types: @SegmentIdentify@, @ShopifyCreateCustomers@,
+-- @ShopifyUpdateCustomers@, @ShopifyCreateDraftOrders@,
+-- @ShopifyUpdateDraftOrders@, @ShopifyCreateOrders@, and
+-- @ShopifyUpdatedOrders@.
+--
+-- 'tags', 'putIntegration_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'uri', 'putIntegration_uri' - The URI of the S3 bucket or any other type of data source.
+--
+-- 'domainName', 'putIntegration_domainName' - The unique name of the domain.
+newPutIntegration ::
+  -- | 'domainName'
+  Prelude.Text ->
+  PutIntegration
+newPutIntegration pDomainName_ =
+  PutIntegration'
+    { flowDefinition = Prelude.Nothing,
+      objectTypeName = Prelude.Nothing,
+      objectTypeNames = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      uri = Prelude.Nothing,
+      domainName = pDomainName_
+    }
+
+-- | The configuration that controls how Customer Profiles retrieves data
+-- from the source.
+putIntegration_flowDefinition :: Lens.Lens' PutIntegration (Prelude.Maybe FlowDefinition)
+putIntegration_flowDefinition = Lens.lens (\PutIntegration' {flowDefinition} -> flowDefinition) (\s@PutIntegration' {} a -> s {flowDefinition = a} :: PutIntegration)
+
+-- | The name of the profile object type.
+putIntegration_objectTypeName :: Lens.Lens' PutIntegration (Prelude.Maybe Prelude.Text)
+putIntegration_objectTypeName = Lens.lens (\PutIntegration' {objectTypeName} -> objectTypeName) (\s@PutIntegration' {} a -> s {objectTypeName = a} :: PutIntegration)
+
+-- | A map in which each key is an event type from an external application
+-- such as Segment or Shopify, and each value is an @ObjectTypeName@
+-- (template) used to ingest the event. It supports the following event
+-- types: @SegmentIdentify@, @ShopifyCreateCustomers@,
+-- @ShopifyUpdateCustomers@, @ShopifyCreateDraftOrders@,
+-- @ShopifyUpdateDraftOrders@, @ShopifyCreateOrders@, and
+-- @ShopifyUpdatedOrders@.
+putIntegration_objectTypeNames :: Lens.Lens' PutIntegration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+putIntegration_objectTypeNames = Lens.lens (\PutIntegration' {objectTypeNames} -> objectTypeNames) (\s@PutIntegration' {} a -> s {objectTypeNames = a} :: PutIntegration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags used to organize, track, or control access for this resource.
+putIntegration_tags :: Lens.Lens' PutIntegration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+putIntegration_tags = Lens.lens (\PutIntegration' {tags} -> tags) (\s@PutIntegration' {} a -> s {tags = a} :: PutIntegration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The URI of the S3 bucket or any other type of data source.
+putIntegration_uri :: Lens.Lens' PutIntegration (Prelude.Maybe Prelude.Text)
+putIntegration_uri = Lens.lens (\PutIntegration' {uri} -> uri) (\s@PutIntegration' {} a -> s {uri = a} :: PutIntegration)
+
+-- | The unique name of the domain.
+putIntegration_domainName :: Lens.Lens' PutIntegration Prelude.Text
+putIntegration_domainName = Lens.lens (\PutIntegration' {domainName} -> domainName) (\s@PutIntegration' {} a -> s {domainName = a} :: PutIntegration)
+
+instance Core.AWSRequest PutIntegration where
+  type
+    AWSResponse PutIntegration =
+      PutIntegrationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutIntegrationResponse'
+            Prelude.<$> (x Data..?> "IsUnstructured")
+            Prelude.<*> (x Data..?> "ObjectTypeName")
+            Prelude.<*> ( x
+                            Data..?> "ObjectTypeNames"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "WorkflowId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "DomainName")
+            Prelude.<*> (x Data..:> "Uri")
+            Prelude.<*> (x Data..:> "CreatedAt")
+            Prelude.<*> (x Data..:> "LastUpdatedAt")
+      )
+
+instance Prelude.Hashable PutIntegration where
+  hashWithSalt _salt PutIntegration' {..} =
+    _salt
+      `Prelude.hashWithSalt` flowDefinition
+      `Prelude.hashWithSalt` objectTypeName
+      `Prelude.hashWithSalt` objectTypeNames
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` uri
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData PutIntegration where
+  rnf PutIntegration' {..} =
+    Prelude.rnf flowDefinition
+      `Prelude.seq` Prelude.rnf objectTypeName
+      `Prelude.seq` Prelude.rnf objectTypeNames
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf uri
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders PutIntegration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutIntegration where
+  toJSON PutIntegration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FlowDefinition" Data..=)
+              Prelude.<$> flowDefinition,
+            ("ObjectTypeName" Data..=)
+              Prelude.<$> objectTypeName,
+            ("ObjectTypeNames" Data..=)
+              Prelude.<$> objectTypeNames,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("Uri" Data..=) Prelude.<$> uri
+          ]
+      )
+
+instance Data.ToPath PutIntegration where
+  toPath PutIntegration' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainName, "/integrations"]
+
+instance Data.ToQuery PutIntegration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutIntegrationResponse' smart constructor.
+data PutIntegrationResponse = PutIntegrationResponse'
+  { -- | Boolean to indicate if the Flow associated with the Integration is
+    -- created via Appflow console or with ObjectTypeName equals _unstructured
+    -- via API\/CLI in flowDefinition
+    isUnstructured :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the profile object type.
+    objectTypeName :: Prelude.Maybe Prelude.Text,
+    -- | A map in which each key is an event type from an external application
+    -- such as Segment or Shopify, and each value is an @ObjectTypeName@
+    -- (template) used to ingest the event. It supports the following event
+    -- types: @SegmentIdentify@, @ShopifyCreateCustomers@,
+    -- @ShopifyUpdateCustomers@, @ShopifyCreateDraftOrders@,
+    -- @ShopifyUpdateDraftOrders@, @ShopifyCreateOrders@, and
+    -- @ShopifyUpdatedOrders@.
+    objectTypeNames :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Unique identifier for the workflow.
+    workflowId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The URI of the S3 bucket or any other type of data source.
+    uri :: Prelude.Text,
+    -- | The timestamp of when the domain was created.
+    createdAt :: Data.POSIX,
+    -- | The timestamp of when the domain was most recently edited.
+    lastUpdatedAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutIntegrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'isUnstructured', 'putIntegrationResponse_isUnstructured' - Boolean to indicate if the Flow associated with the Integration is
+-- created via Appflow console or with ObjectTypeName equals _unstructured
+-- via API\/CLI in flowDefinition
+--
+-- 'objectTypeName', 'putIntegrationResponse_objectTypeName' - The name of the profile object type.
+--
+-- 'objectTypeNames', 'putIntegrationResponse_objectTypeNames' - A map in which each key is an event type from an external application
+-- such as Segment or Shopify, and each value is an @ObjectTypeName@
+-- (template) used to ingest the event. It supports the following event
+-- types: @SegmentIdentify@, @ShopifyCreateCustomers@,
+-- @ShopifyUpdateCustomers@, @ShopifyCreateDraftOrders@,
+-- @ShopifyUpdateDraftOrders@, @ShopifyCreateOrders@, and
+-- @ShopifyUpdatedOrders@.
+--
+-- 'tags', 'putIntegrationResponse_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'workflowId', 'putIntegrationResponse_workflowId' - Unique identifier for the workflow.
+--
+-- 'httpStatus', 'putIntegrationResponse_httpStatus' - The response's http status code.
+--
+-- 'domainName', 'putIntegrationResponse_domainName' - The unique name of the domain.
+--
+-- 'uri', 'putIntegrationResponse_uri' - The URI of the S3 bucket or any other type of data source.
+--
+-- 'createdAt', 'putIntegrationResponse_createdAt' - The timestamp of when the domain was created.
+--
+-- 'lastUpdatedAt', 'putIntegrationResponse_lastUpdatedAt' - The timestamp of when the domain was most recently edited.
+newPutIntegrationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'uri'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'lastUpdatedAt'
+  Prelude.UTCTime ->
+  PutIntegrationResponse
+newPutIntegrationResponse
+  pHttpStatus_
+  pDomainName_
+  pUri_
+  pCreatedAt_
+  pLastUpdatedAt_ =
+    PutIntegrationResponse'
+      { isUnstructured =
+          Prelude.Nothing,
+        objectTypeName = Prelude.Nothing,
+        objectTypeNames = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        workflowId = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        domainName = pDomainName_,
+        uri = pUri_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        lastUpdatedAt = Data._Time Lens.# pLastUpdatedAt_
+      }
+
+-- | Boolean to indicate if the Flow associated with the Integration is
+-- created via Appflow console or with ObjectTypeName equals _unstructured
+-- via API\/CLI in flowDefinition
+putIntegrationResponse_isUnstructured :: Lens.Lens' PutIntegrationResponse (Prelude.Maybe Prelude.Bool)
+putIntegrationResponse_isUnstructured = Lens.lens (\PutIntegrationResponse' {isUnstructured} -> isUnstructured) (\s@PutIntegrationResponse' {} a -> s {isUnstructured = a} :: PutIntegrationResponse)
+
+-- | The name of the profile object type.
+putIntegrationResponse_objectTypeName :: Lens.Lens' PutIntegrationResponse (Prelude.Maybe Prelude.Text)
+putIntegrationResponse_objectTypeName = Lens.lens (\PutIntegrationResponse' {objectTypeName} -> objectTypeName) (\s@PutIntegrationResponse' {} a -> s {objectTypeName = a} :: PutIntegrationResponse)
+
+-- | A map in which each key is an event type from an external application
+-- such as Segment or Shopify, and each value is an @ObjectTypeName@
+-- (template) used to ingest the event. It supports the following event
+-- types: @SegmentIdentify@, @ShopifyCreateCustomers@,
+-- @ShopifyUpdateCustomers@, @ShopifyCreateDraftOrders@,
+-- @ShopifyUpdateDraftOrders@, @ShopifyCreateOrders@, and
+-- @ShopifyUpdatedOrders@.
+putIntegrationResponse_objectTypeNames :: Lens.Lens' PutIntegrationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+putIntegrationResponse_objectTypeNames = Lens.lens (\PutIntegrationResponse' {objectTypeNames} -> objectTypeNames) (\s@PutIntegrationResponse' {} a -> s {objectTypeNames = a} :: PutIntegrationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags used to organize, track, or control access for this resource.
+putIntegrationResponse_tags :: Lens.Lens' PutIntegrationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+putIntegrationResponse_tags = Lens.lens (\PutIntegrationResponse' {tags} -> tags) (\s@PutIntegrationResponse' {} a -> s {tags = a} :: PutIntegrationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Unique identifier for the workflow.
+putIntegrationResponse_workflowId :: Lens.Lens' PutIntegrationResponse (Prelude.Maybe Prelude.Text)
+putIntegrationResponse_workflowId = Lens.lens (\PutIntegrationResponse' {workflowId} -> workflowId) (\s@PutIntegrationResponse' {} a -> s {workflowId = a} :: PutIntegrationResponse)
+
+-- | The response's http status code.
+putIntegrationResponse_httpStatus :: Lens.Lens' PutIntegrationResponse Prelude.Int
+putIntegrationResponse_httpStatus = Lens.lens (\PutIntegrationResponse' {httpStatus} -> httpStatus) (\s@PutIntegrationResponse' {} a -> s {httpStatus = a} :: PutIntegrationResponse)
+
+-- | The unique name of the domain.
+putIntegrationResponse_domainName :: Lens.Lens' PutIntegrationResponse Prelude.Text
+putIntegrationResponse_domainName = Lens.lens (\PutIntegrationResponse' {domainName} -> domainName) (\s@PutIntegrationResponse' {} a -> s {domainName = a} :: PutIntegrationResponse)
+
+-- | The URI of the S3 bucket or any other type of data source.
+putIntegrationResponse_uri :: Lens.Lens' PutIntegrationResponse Prelude.Text
+putIntegrationResponse_uri = Lens.lens (\PutIntegrationResponse' {uri} -> uri) (\s@PutIntegrationResponse' {} a -> s {uri = a} :: PutIntegrationResponse)
+
+-- | The timestamp of when the domain was created.
+putIntegrationResponse_createdAt :: Lens.Lens' PutIntegrationResponse Prelude.UTCTime
+putIntegrationResponse_createdAt = Lens.lens (\PutIntegrationResponse' {createdAt} -> createdAt) (\s@PutIntegrationResponse' {} a -> s {createdAt = a} :: PutIntegrationResponse) Prelude.. Data._Time
+
+-- | The timestamp of when the domain was most recently edited.
+putIntegrationResponse_lastUpdatedAt :: Lens.Lens' PutIntegrationResponse Prelude.UTCTime
+putIntegrationResponse_lastUpdatedAt = Lens.lens (\PutIntegrationResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@PutIntegrationResponse' {} a -> s {lastUpdatedAt = a} :: PutIntegrationResponse) Prelude.. Data._Time
+
+instance Prelude.NFData PutIntegrationResponse where
+  rnf PutIntegrationResponse' {..} =
+    Prelude.rnf isUnstructured
+      `Prelude.seq` Prelude.rnf objectTypeName
+      `Prelude.seq` Prelude.rnf objectTypeNames
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf uri
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
diff --git a/gen/Amazonka/CustomerProfiles/PutProfileObject.hs b/gen/Amazonka/CustomerProfiles/PutProfileObject.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/PutProfileObject.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.CustomerProfiles.PutProfileObject
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds additional objects to customer profiles of a given ObjectType.
+--
+-- When adding a specific profile object, like a Contact Record, an
+-- inferred profile can get created if it is not mapped to an existing
+-- profile. The resulting profile will only have a phone number populated
+-- in the standard ProfileObject. Any additional Contact Records with the
+-- same phone number will be mapped to the same inferred profile.
+--
+-- When a ProfileObject is created and if a ProfileObjectType already
+-- exists for the ProfileObject, it will provide data to a standard profile
+-- depending on the ProfileObjectType definition.
+--
+-- PutProfileObject needs an ObjectType, which can be created using
+-- PutProfileObjectType.
+module Amazonka.CustomerProfiles.PutProfileObject
+  ( -- * Creating a Request
+    PutProfileObject (..),
+    newPutProfileObject,
+
+    -- * Request Lenses
+    putProfileObject_objectTypeName,
+    putProfileObject_object,
+    putProfileObject_domainName,
+
+    -- * Destructuring the Response
+    PutProfileObjectResponse (..),
+    newPutProfileObjectResponse,
+
+    -- * Response Lenses
+    putProfileObjectResponse_profileObjectUniqueKey,
+    putProfileObjectResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutProfileObject' smart constructor.
+data PutProfileObject = PutProfileObject'
+  { -- | The name of the profile object type.
+    objectTypeName :: Prelude.Text,
+    -- | A string that is serialized from a JSON object.
+    object' :: Prelude.Text,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutProfileObject' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'objectTypeName', 'putProfileObject_objectTypeName' - The name of the profile object type.
+--
+-- 'object'', 'putProfileObject_object' - A string that is serialized from a JSON object.
+--
+-- 'domainName', 'putProfileObject_domainName' - The unique name of the domain.
+newPutProfileObject ::
+  -- | 'objectTypeName'
+  Prelude.Text ->
+  -- | 'object''
+  Prelude.Text ->
+  -- | 'domainName'
+  Prelude.Text ->
+  PutProfileObject
+newPutProfileObject
+  pObjectTypeName_
+  pObject_
+  pDomainName_ =
+    PutProfileObject'
+      { objectTypeName =
+          pObjectTypeName_,
+        object' = pObject_,
+        domainName = pDomainName_
+      }
+
+-- | The name of the profile object type.
+putProfileObject_objectTypeName :: Lens.Lens' PutProfileObject Prelude.Text
+putProfileObject_objectTypeName = Lens.lens (\PutProfileObject' {objectTypeName} -> objectTypeName) (\s@PutProfileObject' {} a -> s {objectTypeName = a} :: PutProfileObject)
+
+-- | A string that is serialized from a JSON object.
+putProfileObject_object :: Lens.Lens' PutProfileObject Prelude.Text
+putProfileObject_object = Lens.lens (\PutProfileObject' {object'} -> object') (\s@PutProfileObject' {} a -> s {object' = a} :: PutProfileObject)
+
+-- | The unique name of the domain.
+putProfileObject_domainName :: Lens.Lens' PutProfileObject Prelude.Text
+putProfileObject_domainName = Lens.lens (\PutProfileObject' {domainName} -> domainName) (\s@PutProfileObject' {} a -> s {domainName = a} :: PutProfileObject)
+
+instance Core.AWSRequest PutProfileObject where
+  type
+    AWSResponse PutProfileObject =
+      PutProfileObjectResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutProfileObjectResponse'
+            Prelude.<$> (x Data..?> "ProfileObjectUniqueKey")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutProfileObject where
+  hashWithSalt _salt PutProfileObject' {..} =
+    _salt
+      `Prelude.hashWithSalt` objectTypeName
+      `Prelude.hashWithSalt` object'
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData PutProfileObject where
+  rnf PutProfileObject' {..} =
+    Prelude.rnf objectTypeName
+      `Prelude.seq` Prelude.rnf object'
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders PutProfileObject where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutProfileObject where
+  toJSON PutProfileObject' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("ObjectTypeName" Data..= objectTypeName),
+            Prelude.Just ("Object" Data..= object')
+          ]
+      )
+
+instance Data.ToPath PutProfileObject where
+  toPath PutProfileObject' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/profiles/objects"
+      ]
+
+instance Data.ToQuery PutProfileObject where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutProfileObjectResponse' smart constructor.
+data PutProfileObjectResponse = PutProfileObjectResponse'
+  { -- | The unique identifier of the profile object generated by the service.
+    profileObjectUniqueKey :: 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 'PutProfileObjectResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'profileObjectUniqueKey', 'putProfileObjectResponse_profileObjectUniqueKey' - The unique identifier of the profile object generated by the service.
+--
+-- 'httpStatus', 'putProfileObjectResponse_httpStatus' - The response's http status code.
+newPutProfileObjectResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutProfileObjectResponse
+newPutProfileObjectResponse pHttpStatus_ =
+  PutProfileObjectResponse'
+    { profileObjectUniqueKey =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the profile object generated by the service.
+putProfileObjectResponse_profileObjectUniqueKey :: Lens.Lens' PutProfileObjectResponse (Prelude.Maybe Prelude.Text)
+putProfileObjectResponse_profileObjectUniqueKey = Lens.lens (\PutProfileObjectResponse' {profileObjectUniqueKey} -> profileObjectUniqueKey) (\s@PutProfileObjectResponse' {} a -> s {profileObjectUniqueKey = a} :: PutProfileObjectResponse)
+
+-- | The response's http status code.
+putProfileObjectResponse_httpStatus :: Lens.Lens' PutProfileObjectResponse Prelude.Int
+putProfileObjectResponse_httpStatus = Lens.lens (\PutProfileObjectResponse' {httpStatus} -> httpStatus) (\s@PutProfileObjectResponse' {} a -> s {httpStatus = a} :: PutProfileObjectResponse)
+
+instance Prelude.NFData PutProfileObjectResponse where
+  rnf PutProfileObjectResponse' {..} =
+    Prelude.rnf profileObjectUniqueKey
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/PutProfileObjectType.hs b/gen/Amazonka/CustomerProfiles/PutProfileObjectType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/PutProfileObjectType.hs
@@ -0,0 +1,529 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.PutProfileObjectType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Defines a ProfileObjectType.
+--
+-- To add or remove tags on an existing ObjectType, see
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_TagResource.html TagResource>\/<https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_UntagResource.html UntagResource>.
+module Amazonka.CustomerProfiles.PutProfileObjectType
+  ( -- * Creating a Request
+    PutProfileObjectType (..),
+    newPutProfileObjectType,
+
+    -- * Request Lenses
+    putProfileObjectType_allowProfileCreation,
+    putProfileObjectType_encryptionKey,
+    putProfileObjectType_expirationDays,
+    putProfileObjectType_fields,
+    putProfileObjectType_keys,
+    putProfileObjectType_sourceLastUpdatedTimestampFormat,
+    putProfileObjectType_tags,
+    putProfileObjectType_templateId,
+    putProfileObjectType_domainName,
+    putProfileObjectType_objectTypeName,
+    putProfileObjectType_description,
+
+    -- * Destructuring the Response
+    PutProfileObjectTypeResponse (..),
+    newPutProfileObjectTypeResponse,
+
+    -- * Response Lenses
+    putProfileObjectTypeResponse_allowProfileCreation,
+    putProfileObjectTypeResponse_createdAt,
+    putProfileObjectTypeResponse_encryptionKey,
+    putProfileObjectTypeResponse_expirationDays,
+    putProfileObjectTypeResponse_fields,
+    putProfileObjectTypeResponse_keys,
+    putProfileObjectTypeResponse_lastUpdatedAt,
+    putProfileObjectTypeResponse_sourceLastUpdatedTimestampFormat,
+    putProfileObjectTypeResponse_tags,
+    putProfileObjectTypeResponse_templateId,
+    putProfileObjectTypeResponse_httpStatus,
+    putProfileObjectTypeResponse_objectTypeName,
+    putProfileObjectTypeResponse_description,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutProfileObjectType' smart constructor.
+data PutProfileObjectType = PutProfileObjectType'
+  { -- | Indicates whether a profile should be created when data is received if
+    -- one doesn’t exist for an object of this type. The default is @FALSE@. If
+    -- the AllowProfileCreation flag is set to @FALSE@, then the service tries
+    -- to fetch a standard profile and associate this object with the profile.
+    -- If it is set to @TRUE@, and if no match is found, then the service
+    -- creates a new standard profile.
+    allowProfileCreation :: Prelude.Maybe Prelude.Bool,
+    -- | The customer-provided key to encrypt the profile object that will be
+    -- created in this profile object type.
+    encryptionKey :: Prelude.Maybe Prelude.Text,
+    -- | The number of days until the data in the object expires.
+    expirationDays :: Prelude.Maybe Prelude.Natural,
+    -- | A map of the name and ObjectType field.
+    fields :: Prelude.Maybe (Prelude.HashMap Prelude.Text ObjectTypeField),
+    -- | A list of unique keys that can be used to map data to the profile.
+    keys :: Prelude.Maybe (Prelude.HashMap Prelude.Text [ObjectTypeKey]),
+    -- | The format of your @sourceLastUpdatedTimestamp@ that was previously set
+    -- up.
+    sourceLastUpdatedTimestampFormat :: Prelude.Maybe Prelude.Text,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A unique identifier for the object template. For some attributes in the
+    -- request, the service will use the default value from the object template
+    -- when TemplateId is present. If these attributes are present in the
+    -- request, the service may return a @BadRequestException@. These
+    -- attributes include: AllowProfileCreation,
+    -- SourceLastUpdatedTimestampFormat, Fields, and Keys. For example, if
+    -- AllowProfileCreation is set to true when TemplateId is set, the service
+    -- may return a @BadRequestException@.
+    templateId :: Prelude.Maybe Prelude.Text,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The name of the profile object type.
+    objectTypeName :: Prelude.Text,
+    -- | Description of the profile object type.
+    description :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutProfileObjectType' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowProfileCreation', 'putProfileObjectType_allowProfileCreation' - Indicates whether a profile should be created when data is received if
+-- one doesn’t exist for an object of this type. The default is @FALSE@. If
+-- the AllowProfileCreation flag is set to @FALSE@, then the service tries
+-- to fetch a standard profile and associate this object with the profile.
+-- If it is set to @TRUE@, and if no match is found, then the service
+-- creates a new standard profile.
+--
+-- 'encryptionKey', 'putProfileObjectType_encryptionKey' - The customer-provided key to encrypt the profile object that will be
+-- created in this profile object type.
+--
+-- 'expirationDays', 'putProfileObjectType_expirationDays' - The number of days until the data in the object expires.
+--
+-- 'fields', 'putProfileObjectType_fields' - A map of the name and ObjectType field.
+--
+-- 'keys', 'putProfileObjectType_keys' - A list of unique keys that can be used to map data to the profile.
+--
+-- 'sourceLastUpdatedTimestampFormat', 'putProfileObjectType_sourceLastUpdatedTimestampFormat' - The format of your @sourceLastUpdatedTimestamp@ that was previously set
+-- up.
+--
+-- 'tags', 'putProfileObjectType_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'templateId', 'putProfileObjectType_templateId' - A unique identifier for the object template. For some attributes in the
+-- request, the service will use the default value from the object template
+-- when TemplateId is present. If these attributes are present in the
+-- request, the service may return a @BadRequestException@. These
+-- attributes include: AllowProfileCreation,
+-- SourceLastUpdatedTimestampFormat, Fields, and Keys. For example, if
+-- AllowProfileCreation is set to true when TemplateId is set, the service
+-- may return a @BadRequestException@.
+--
+-- 'domainName', 'putProfileObjectType_domainName' - The unique name of the domain.
+--
+-- 'objectTypeName', 'putProfileObjectType_objectTypeName' - The name of the profile object type.
+--
+-- 'description', 'putProfileObjectType_description' - Description of the profile object type.
+newPutProfileObjectType ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'objectTypeName'
+  Prelude.Text ->
+  -- | 'description'
+  Prelude.Text ->
+  PutProfileObjectType
+newPutProfileObjectType
+  pDomainName_
+  pObjectTypeName_
+  pDescription_ =
+    PutProfileObjectType'
+      { allowProfileCreation =
+          Prelude.Nothing,
+        encryptionKey = Prelude.Nothing,
+        expirationDays = Prelude.Nothing,
+        fields = Prelude.Nothing,
+        keys = Prelude.Nothing,
+        sourceLastUpdatedTimestampFormat = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        templateId = Prelude.Nothing,
+        domainName = pDomainName_,
+        objectTypeName = pObjectTypeName_,
+        description = pDescription_
+      }
+
+-- | Indicates whether a profile should be created when data is received if
+-- one doesn’t exist for an object of this type. The default is @FALSE@. If
+-- the AllowProfileCreation flag is set to @FALSE@, then the service tries
+-- to fetch a standard profile and associate this object with the profile.
+-- If it is set to @TRUE@, and if no match is found, then the service
+-- creates a new standard profile.
+putProfileObjectType_allowProfileCreation :: Lens.Lens' PutProfileObjectType (Prelude.Maybe Prelude.Bool)
+putProfileObjectType_allowProfileCreation = Lens.lens (\PutProfileObjectType' {allowProfileCreation} -> allowProfileCreation) (\s@PutProfileObjectType' {} a -> s {allowProfileCreation = a} :: PutProfileObjectType)
+
+-- | The customer-provided key to encrypt the profile object that will be
+-- created in this profile object type.
+putProfileObjectType_encryptionKey :: Lens.Lens' PutProfileObjectType (Prelude.Maybe Prelude.Text)
+putProfileObjectType_encryptionKey = Lens.lens (\PutProfileObjectType' {encryptionKey} -> encryptionKey) (\s@PutProfileObjectType' {} a -> s {encryptionKey = a} :: PutProfileObjectType)
+
+-- | The number of days until the data in the object expires.
+putProfileObjectType_expirationDays :: Lens.Lens' PutProfileObjectType (Prelude.Maybe Prelude.Natural)
+putProfileObjectType_expirationDays = Lens.lens (\PutProfileObjectType' {expirationDays} -> expirationDays) (\s@PutProfileObjectType' {} a -> s {expirationDays = a} :: PutProfileObjectType)
+
+-- | A map of the name and ObjectType field.
+putProfileObjectType_fields :: Lens.Lens' PutProfileObjectType (Prelude.Maybe (Prelude.HashMap Prelude.Text ObjectTypeField))
+putProfileObjectType_fields = Lens.lens (\PutProfileObjectType' {fields} -> fields) (\s@PutProfileObjectType' {} a -> s {fields = a} :: PutProfileObjectType) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of unique keys that can be used to map data to the profile.
+putProfileObjectType_keys :: Lens.Lens' PutProfileObjectType (Prelude.Maybe (Prelude.HashMap Prelude.Text [ObjectTypeKey]))
+putProfileObjectType_keys = Lens.lens (\PutProfileObjectType' {keys} -> keys) (\s@PutProfileObjectType' {} a -> s {keys = a} :: PutProfileObjectType) Prelude.. Lens.mapping Lens.coerced
+
+-- | The format of your @sourceLastUpdatedTimestamp@ that was previously set
+-- up.
+putProfileObjectType_sourceLastUpdatedTimestampFormat :: Lens.Lens' PutProfileObjectType (Prelude.Maybe Prelude.Text)
+putProfileObjectType_sourceLastUpdatedTimestampFormat = Lens.lens (\PutProfileObjectType' {sourceLastUpdatedTimestampFormat} -> sourceLastUpdatedTimestampFormat) (\s@PutProfileObjectType' {} a -> s {sourceLastUpdatedTimestampFormat = a} :: PutProfileObjectType)
+
+-- | The tags used to organize, track, or control access for this resource.
+putProfileObjectType_tags :: Lens.Lens' PutProfileObjectType (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+putProfileObjectType_tags = Lens.lens (\PutProfileObjectType' {tags} -> tags) (\s@PutProfileObjectType' {} a -> s {tags = a} :: PutProfileObjectType) Prelude.. Lens.mapping Lens.coerced
+
+-- | A unique identifier for the object template. For some attributes in the
+-- request, the service will use the default value from the object template
+-- when TemplateId is present. If these attributes are present in the
+-- request, the service may return a @BadRequestException@. These
+-- attributes include: AllowProfileCreation,
+-- SourceLastUpdatedTimestampFormat, Fields, and Keys. For example, if
+-- AllowProfileCreation is set to true when TemplateId is set, the service
+-- may return a @BadRequestException@.
+putProfileObjectType_templateId :: Lens.Lens' PutProfileObjectType (Prelude.Maybe Prelude.Text)
+putProfileObjectType_templateId = Lens.lens (\PutProfileObjectType' {templateId} -> templateId) (\s@PutProfileObjectType' {} a -> s {templateId = a} :: PutProfileObjectType)
+
+-- | The unique name of the domain.
+putProfileObjectType_domainName :: Lens.Lens' PutProfileObjectType Prelude.Text
+putProfileObjectType_domainName = Lens.lens (\PutProfileObjectType' {domainName} -> domainName) (\s@PutProfileObjectType' {} a -> s {domainName = a} :: PutProfileObjectType)
+
+-- | The name of the profile object type.
+putProfileObjectType_objectTypeName :: Lens.Lens' PutProfileObjectType Prelude.Text
+putProfileObjectType_objectTypeName = Lens.lens (\PutProfileObjectType' {objectTypeName} -> objectTypeName) (\s@PutProfileObjectType' {} a -> s {objectTypeName = a} :: PutProfileObjectType)
+
+-- | Description of the profile object type.
+putProfileObjectType_description :: Lens.Lens' PutProfileObjectType Prelude.Text
+putProfileObjectType_description = Lens.lens (\PutProfileObjectType' {description} -> description) (\s@PutProfileObjectType' {} a -> s {description = a} :: PutProfileObjectType)
+
+instance Core.AWSRequest PutProfileObjectType where
+  type
+    AWSResponse PutProfileObjectType =
+      PutProfileObjectTypeResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutProfileObjectTypeResponse'
+            Prelude.<$> (x Data..?> "AllowProfileCreation")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "EncryptionKey")
+            Prelude.<*> (x Data..?> "ExpirationDays")
+            Prelude.<*> (x Data..?> "Fields" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Keys" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "LastUpdatedAt")
+            Prelude.<*> (x Data..?> "SourceLastUpdatedTimestampFormat")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "TemplateId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "ObjectTypeName")
+            Prelude.<*> (x Data..:> "Description")
+      )
+
+instance Prelude.Hashable PutProfileObjectType where
+  hashWithSalt _salt PutProfileObjectType' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowProfileCreation
+      `Prelude.hashWithSalt` encryptionKey
+      `Prelude.hashWithSalt` expirationDays
+      `Prelude.hashWithSalt` fields
+      `Prelude.hashWithSalt` keys
+      `Prelude.hashWithSalt` sourceLastUpdatedTimestampFormat
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` templateId
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` objectTypeName
+      `Prelude.hashWithSalt` description
+
+instance Prelude.NFData PutProfileObjectType where
+  rnf PutProfileObjectType' {..} =
+    Prelude.rnf allowProfileCreation
+      `Prelude.seq` Prelude.rnf encryptionKey
+      `Prelude.seq` Prelude.rnf expirationDays
+      `Prelude.seq` Prelude.rnf fields
+      `Prelude.seq` Prelude.rnf keys
+      `Prelude.seq` Prelude.rnf sourceLastUpdatedTimestampFormat
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf templateId
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf objectTypeName
+      `Prelude.seq` Prelude.rnf description
+
+instance Data.ToHeaders PutProfileObjectType where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutProfileObjectType where
+  toJSON PutProfileObjectType' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AllowProfileCreation" Data..=)
+              Prelude.<$> allowProfileCreation,
+            ("EncryptionKey" Data..=) Prelude.<$> encryptionKey,
+            ("ExpirationDays" Data..=)
+              Prelude.<$> expirationDays,
+            ("Fields" Data..=) Prelude.<$> fields,
+            ("Keys" Data..=) Prelude.<$> keys,
+            ("SourceLastUpdatedTimestampFormat" Data..=)
+              Prelude.<$> sourceLastUpdatedTimestampFormat,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("TemplateId" Data..=) Prelude.<$> templateId,
+            Prelude.Just ("Description" Data..= description)
+          ]
+      )
+
+instance Data.ToPath PutProfileObjectType where
+  toPath PutProfileObjectType' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/object-types/",
+        Data.toBS objectTypeName
+      ]
+
+instance Data.ToQuery PutProfileObjectType where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutProfileObjectTypeResponse' smart constructor.
+data PutProfileObjectTypeResponse = PutProfileObjectTypeResponse'
+  { -- | Indicates whether a profile should be created when data is received if
+    -- one doesn’t exist for an object of this type. The default is @FALSE@. If
+    -- the AllowProfileCreation flag is set to @FALSE@, then the service tries
+    -- to fetch a standard profile and associate this object with the profile.
+    -- If it is set to @TRUE@, and if no match is found, then the service
+    -- creates a new standard profile.
+    allowProfileCreation :: Prelude.Maybe Prelude.Bool,
+    -- | The timestamp of when the domain was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The customer-provided key to encrypt the profile object that will be
+    -- created in this profile object type.
+    encryptionKey :: Prelude.Maybe Prelude.Text,
+    -- | The number of days until the data in the object expires.
+    expirationDays :: Prelude.Maybe Prelude.Natural,
+    -- | A map of the name and ObjectType field.
+    fields :: Prelude.Maybe (Prelude.HashMap Prelude.Text ObjectTypeField),
+    -- | A list of unique keys that can be used to map data to the profile.
+    keys :: Prelude.Maybe (Prelude.HashMap Prelude.Text [ObjectTypeKey]),
+    -- | The timestamp of when the domain was most recently edited.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The format of your @sourceLastUpdatedTimestamp@ that was previously set
+    -- up in fields that were parsed using
+    -- <https://docs.oracle.com/javase/10/docs/api/java/text/SimpleDateFormat.html SimpleDateFormat>.
+    -- If you have @sourceLastUpdatedTimestamp@ in your field, you must set up
+    -- @sourceLastUpdatedTimestampFormat@.
+    sourceLastUpdatedTimestampFormat :: Prelude.Maybe Prelude.Text,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A unique identifier for the object template.
+    templateId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the profile object type.
+    objectTypeName :: Prelude.Text,
+    -- | Description of the profile object type.
+    description :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutProfileObjectTypeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowProfileCreation', 'putProfileObjectTypeResponse_allowProfileCreation' - Indicates whether a profile should be created when data is received if
+-- one doesn’t exist for an object of this type. The default is @FALSE@. If
+-- the AllowProfileCreation flag is set to @FALSE@, then the service tries
+-- to fetch a standard profile and associate this object with the profile.
+-- If it is set to @TRUE@, and if no match is found, then the service
+-- creates a new standard profile.
+--
+-- 'createdAt', 'putProfileObjectTypeResponse_createdAt' - The timestamp of when the domain was created.
+--
+-- 'encryptionKey', 'putProfileObjectTypeResponse_encryptionKey' - The customer-provided key to encrypt the profile object that will be
+-- created in this profile object type.
+--
+-- 'expirationDays', 'putProfileObjectTypeResponse_expirationDays' - The number of days until the data in the object expires.
+--
+-- 'fields', 'putProfileObjectTypeResponse_fields' - A map of the name and ObjectType field.
+--
+-- 'keys', 'putProfileObjectTypeResponse_keys' - A list of unique keys that can be used to map data to the profile.
+--
+-- 'lastUpdatedAt', 'putProfileObjectTypeResponse_lastUpdatedAt' - The timestamp of when the domain was most recently edited.
+--
+-- 'sourceLastUpdatedTimestampFormat', 'putProfileObjectTypeResponse_sourceLastUpdatedTimestampFormat' - The format of your @sourceLastUpdatedTimestamp@ that was previously set
+-- up in fields that were parsed using
+-- <https://docs.oracle.com/javase/10/docs/api/java/text/SimpleDateFormat.html SimpleDateFormat>.
+-- If you have @sourceLastUpdatedTimestamp@ in your field, you must set up
+-- @sourceLastUpdatedTimestampFormat@.
+--
+-- 'tags', 'putProfileObjectTypeResponse_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'templateId', 'putProfileObjectTypeResponse_templateId' - A unique identifier for the object template.
+--
+-- 'httpStatus', 'putProfileObjectTypeResponse_httpStatus' - The response's http status code.
+--
+-- 'objectTypeName', 'putProfileObjectTypeResponse_objectTypeName' - The name of the profile object type.
+--
+-- 'description', 'putProfileObjectTypeResponse_description' - Description of the profile object type.
+newPutProfileObjectTypeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'objectTypeName'
+  Prelude.Text ->
+  -- | 'description'
+  Prelude.Text ->
+  PutProfileObjectTypeResponse
+newPutProfileObjectTypeResponse
+  pHttpStatus_
+  pObjectTypeName_
+  pDescription_ =
+    PutProfileObjectTypeResponse'
+      { allowProfileCreation =
+          Prelude.Nothing,
+        createdAt = Prelude.Nothing,
+        encryptionKey = Prelude.Nothing,
+        expirationDays = Prelude.Nothing,
+        fields = Prelude.Nothing,
+        keys = Prelude.Nothing,
+        lastUpdatedAt = Prelude.Nothing,
+        sourceLastUpdatedTimestampFormat =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        templateId = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        objectTypeName = pObjectTypeName_,
+        description = pDescription_
+      }
+
+-- | Indicates whether a profile should be created when data is received if
+-- one doesn’t exist for an object of this type. The default is @FALSE@. If
+-- the AllowProfileCreation flag is set to @FALSE@, then the service tries
+-- to fetch a standard profile and associate this object with the profile.
+-- If it is set to @TRUE@, and if no match is found, then the service
+-- creates a new standard profile.
+putProfileObjectTypeResponse_allowProfileCreation :: Lens.Lens' PutProfileObjectTypeResponse (Prelude.Maybe Prelude.Bool)
+putProfileObjectTypeResponse_allowProfileCreation = Lens.lens (\PutProfileObjectTypeResponse' {allowProfileCreation} -> allowProfileCreation) (\s@PutProfileObjectTypeResponse' {} a -> s {allowProfileCreation = a} :: PutProfileObjectTypeResponse)
+
+-- | The timestamp of when the domain was created.
+putProfileObjectTypeResponse_createdAt :: Lens.Lens' PutProfileObjectTypeResponse (Prelude.Maybe Prelude.UTCTime)
+putProfileObjectTypeResponse_createdAt = Lens.lens (\PutProfileObjectTypeResponse' {createdAt} -> createdAt) (\s@PutProfileObjectTypeResponse' {} a -> s {createdAt = a} :: PutProfileObjectTypeResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The customer-provided key to encrypt the profile object that will be
+-- created in this profile object type.
+putProfileObjectTypeResponse_encryptionKey :: Lens.Lens' PutProfileObjectTypeResponse (Prelude.Maybe Prelude.Text)
+putProfileObjectTypeResponse_encryptionKey = Lens.lens (\PutProfileObjectTypeResponse' {encryptionKey} -> encryptionKey) (\s@PutProfileObjectTypeResponse' {} a -> s {encryptionKey = a} :: PutProfileObjectTypeResponse)
+
+-- | The number of days until the data in the object expires.
+putProfileObjectTypeResponse_expirationDays :: Lens.Lens' PutProfileObjectTypeResponse (Prelude.Maybe Prelude.Natural)
+putProfileObjectTypeResponse_expirationDays = Lens.lens (\PutProfileObjectTypeResponse' {expirationDays} -> expirationDays) (\s@PutProfileObjectTypeResponse' {} a -> s {expirationDays = a} :: PutProfileObjectTypeResponse)
+
+-- | A map of the name and ObjectType field.
+putProfileObjectTypeResponse_fields :: Lens.Lens' PutProfileObjectTypeResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text ObjectTypeField))
+putProfileObjectTypeResponse_fields = Lens.lens (\PutProfileObjectTypeResponse' {fields} -> fields) (\s@PutProfileObjectTypeResponse' {} a -> s {fields = a} :: PutProfileObjectTypeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of unique keys that can be used to map data to the profile.
+putProfileObjectTypeResponse_keys :: Lens.Lens' PutProfileObjectTypeResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text [ObjectTypeKey]))
+putProfileObjectTypeResponse_keys = Lens.lens (\PutProfileObjectTypeResponse' {keys} -> keys) (\s@PutProfileObjectTypeResponse' {} a -> s {keys = a} :: PutProfileObjectTypeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The timestamp of when the domain was most recently edited.
+putProfileObjectTypeResponse_lastUpdatedAt :: Lens.Lens' PutProfileObjectTypeResponse (Prelude.Maybe Prelude.UTCTime)
+putProfileObjectTypeResponse_lastUpdatedAt = Lens.lens (\PutProfileObjectTypeResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@PutProfileObjectTypeResponse' {} a -> s {lastUpdatedAt = a} :: PutProfileObjectTypeResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The format of your @sourceLastUpdatedTimestamp@ that was previously set
+-- up in fields that were parsed using
+-- <https://docs.oracle.com/javase/10/docs/api/java/text/SimpleDateFormat.html SimpleDateFormat>.
+-- If you have @sourceLastUpdatedTimestamp@ in your field, you must set up
+-- @sourceLastUpdatedTimestampFormat@.
+putProfileObjectTypeResponse_sourceLastUpdatedTimestampFormat :: Lens.Lens' PutProfileObjectTypeResponse (Prelude.Maybe Prelude.Text)
+putProfileObjectTypeResponse_sourceLastUpdatedTimestampFormat = Lens.lens (\PutProfileObjectTypeResponse' {sourceLastUpdatedTimestampFormat} -> sourceLastUpdatedTimestampFormat) (\s@PutProfileObjectTypeResponse' {} a -> s {sourceLastUpdatedTimestampFormat = a} :: PutProfileObjectTypeResponse)
+
+-- | The tags used to organize, track, or control access for this resource.
+putProfileObjectTypeResponse_tags :: Lens.Lens' PutProfileObjectTypeResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+putProfileObjectTypeResponse_tags = Lens.lens (\PutProfileObjectTypeResponse' {tags} -> tags) (\s@PutProfileObjectTypeResponse' {} a -> s {tags = a} :: PutProfileObjectTypeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A unique identifier for the object template.
+putProfileObjectTypeResponse_templateId :: Lens.Lens' PutProfileObjectTypeResponse (Prelude.Maybe Prelude.Text)
+putProfileObjectTypeResponse_templateId = Lens.lens (\PutProfileObjectTypeResponse' {templateId} -> templateId) (\s@PutProfileObjectTypeResponse' {} a -> s {templateId = a} :: PutProfileObjectTypeResponse)
+
+-- | The response's http status code.
+putProfileObjectTypeResponse_httpStatus :: Lens.Lens' PutProfileObjectTypeResponse Prelude.Int
+putProfileObjectTypeResponse_httpStatus = Lens.lens (\PutProfileObjectTypeResponse' {httpStatus} -> httpStatus) (\s@PutProfileObjectTypeResponse' {} a -> s {httpStatus = a} :: PutProfileObjectTypeResponse)
+
+-- | The name of the profile object type.
+putProfileObjectTypeResponse_objectTypeName :: Lens.Lens' PutProfileObjectTypeResponse Prelude.Text
+putProfileObjectTypeResponse_objectTypeName = Lens.lens (\PutProfileObjectTypeResponse' {objectTypeName} -> objectTypeName) (\s@PutProfileObjectTypeResponse' {} a -> s {objectTypeName = a} :: PutProfileObjectTypeResponse)
+
+-- | Description of the profile object type.
+putProfileObjectTypeResponse_description :: Lens.Lens' PutProfileObjectTypeResponse Prelude.Text
+putProfileObjectTypeResponse_description = Lens.lens (\PutProfileObjectTypeResponse' {description} -> description) (\s@PutProfileObjectTypeResponse' {} a -> s {description = a} :: PutProfileObjectTypeResponse)
+
+instance Prelude.NFData PutProfileObjectTypeResponse where
+  rnf PutProfileObjectTypeResponse' {..} =
+    Prelude.rnf allowProfileCreation
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf encryptionKey
+      `Prelude.seq` Prelude.rnf expirationDays
+      `Prelude.seq` Prelude.rnf fields
+      `Prelude.seq` Prelude.rnf keys
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf sourceLastUpdatedTimestampFormat
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf templateId
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf objectTypeName
+      `Prelude.seq` Prelude.rnf description
diff --git a/gen/Amazonka/CustomerProfiles/SearchProfiles.hs b/gen/Amazonka/CustomerProfiles/SearchProfiles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/SearchProfiles.hs
@@ -0,0 +1,363 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.SearchProfiles
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Searches for profiles within a specific domain using one or more
+-- predefined search keys (e.g., _fullName, _phone, _email, _account, etc.)
+-- and\/or custom-defined search keys. A search key is a data type pair
+-- that consists of a @KeyName@ and @Values@ list.
+--
+-- This operation supports searching for profiles with a minimum of 1
+-- key-value(s) pair and up to 5 key-value(s) pairs using either @AND@ or
+-- @OR@ logic.
+module Amazonka.CustomerProfiles.SearchProfiles
+  ( -- * Creating a Request
+    SearchProfiles (..),
+    newSearchProfiles,
+
+    -- * Request Lenses
+    searchProfiles_additionalSearchKeys,
+    searchProfiles_logicalOperator,
+    searchProfiles_maxResults,
+    searchProfiles_nextToken,
+    searchProfiles_domainName,
+    searchProfiles_keyName,
+    searchProfiles_values,
+
+    -- * Destructuring the Response
+    SearchProfilesResponse (..),
+    newSearchProfilesResponse,
+
+    -- * Response Lenses
+    searchProfilesResponse_items,
+    searchProfilesResponse_nextToken,
+    searchProfilesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchProfiles' smart constructor.
+data SearchProfiles = SearchProfiles'
+  { -- | A list of @AdditionalSearchKey@ objects that are each searchable
+    -- identifiers of a profile. Each @AdditionalSearchKey@ object contains a
+    -- @KeyName@ and a list of @Values@ associated with that specific key
+    -- (i.e., a key-value(s) pair). These additional search keys will be used
+    -- in conjunction with the @LogicalOperator@ and the required @KeyName@ and
+    -- @Values@ parameters to search for profiles that satisfy the search
+    -- criteria.
+    additionalSearchKeys :: Prelude.Maybe (Prelude.NonEmpty AdditionalSearchKey),
+    -- | Relationship between all specified search keys that will be used to
+    -- search for profiles. This includes the required @KeyName@ and @Values@
+    -- parameters as well as any key-value(s) pairs specified in the
+    -- @AdditionalSearchKeys@ list.
+    --
+    -- This parameter influences which profiles will be returned in the
+    -- response in the following manner:
+    --
+    -- -   @AND@ - The response only includes profiles that match all of the
+    --     search keys.
+    --
+    -- -   @OR@ - The response includes profiles that match at least one of the
+    --     search keys.
+    --
+    -- The @OR@ relationship is the default behavior if this parameter is not
+    -- included in the request.
+    logicalOperator :: Prelude.Maybe LogicalOperator,
+    -- | The maximum number of objects returned per page.
+    --
+    -- The default is 20 if this parameter is not included in the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token from the previous SearchProfiles API call.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | A searchable identifier of a customer profile. The predefined keys you
+    -- can use to search include: _account, _profileId, _assetId, _caseId,
+    -- _orderId, _fullName, _phone, _email, _ctrContactId, _marketoLeadId,
+    -- _salesforceAccountId, _salesforceContactId, _salesforceAssetId,
+    -- _zendeskUserId, _zendeskExternalId, _zendeskTicketId,
+    -- _serviceNowSystemId, _serviceNowIncidentId, _segmentUserId,
+    -- _shopifyCustomerId, _shopifyOrderId.
+    keyName :: Prelude.Text,
+    -- | A list of key values.
+    values :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchProfiles' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'additionalSearchKeys', 'searchProfiles_additionalSearchKeys' - A list of @AdditionalSearchKey@ objects that are each searchable
+-- identifiers of a profile. Each @AdditionalSearchKey@ object contains a
+-- @KeyName@ and a list of @Values@ associated with that specific key
+-- (i.e., a key-value(s) pair). These additional search keys will be used
+-- in conjunction with the @LogicalOperator@ and the required @KeyName@ and
+-- @Values@ parameters to search for profiles that satisfy the search
+-- criteria.
+--
+-- 'logicalOperator', 'searchProfiles_logicalOperator' - Relationship between all specified search keys that will be used to
+-- search for profiles. This includes the required @KeyName@ and @Values@
+-- parameters as well as any key-value(s) pairs specified in the
+-- @AdditionalSearchKeys@ list.
+--
+-- This parameter influences which profiles will be returned in the
+-- response in the following manner:
+--
+-- -   @AND@ - The response only includes profiles that match all of the
+--     search keys.
+--
+-- -   @OR@ - The response includes profiles that match at least one of the
+--     search keys.
+--
+-- The @OR@ relationship is the default behavior if this parameter is not
+-- included in the request.
+--
+-- 'maxResults', 'searchProfiles_maxResults' - The maximum number of objects returned per page.
+--
+-- The default is 20 if this parameter is not included in the request.
+--
+-- 'nextToken', 'searchProfiles_nextToken' - The pagination token from the previous SearchProfiles API call.
+--
+-- 'domainName', 'searchProfiles_domainName' - The unique name of the domain.
+--
+-- 'keyName', 'searchProfiles_keyName' - A searchable identifier of a customer profile. The predefined keys you
+-- can use to search include: _account, _profileId, _assetId, _caseId,
+-- _orderId, _fullName, _phone, _email, _ctrContactId, _marketoLeadId,
+-- _salesforceAccountId, _salesforceContactId, _salesforceAssetId,
+-- _zendeskUserId, _zendeskExternalId, _zendeskTicketId,
+-- _serviceNowSystemId, _serviceNowIncidentId, _segmentUserId,
+-- _shopifyCustomerId, _shopifyOrderId.
+--
+-- 'values', 'searchProfiles_values' - A list of key values.
+newSearchProfiles ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'keyName'
+  Prelude.Text ->
+  SearchProfiles
+newSearchProfiles pDomainName_ pKeyName_ =
+  SearchProfiles'
+    { additionalSearchKeys =
+        Prelude.Nothing,
+      logicalOperator = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      domainName = pDomainName_,
+      keyName = pKeyName_,
+      values = Prelude.mempty
+    }
+
+-- | A list of @AdditionalSearchKey@ objects that are each searchable
+-- identifiers of a profile. Each @AdditionalSearchKey@ object contains a
+-- @KeyName@ and a list of @Values@ associated with that specific key
+-- (i.e., a key-value(s) pair). These additional search keys will be used
+-- in conjunction with the @LogicalOperator@ and the required @KeyName@ and
+-- @Values@ parameters to search for profiles that satisfy the search
+-- criteria.
+searchProfiles_additionalSearchKeys :: Lens.Lens' SearchProfiles (Prelude.Maybe (Prelude.NonEmpty AdditionalSearchKey))
+searchProfiles_additionalSearchKeys = Lens.lens (\SearchProfiles' {additionalSearchKeys} -> additionalSearchKeys) (\s@SearchProfiles' {} a -> s {additionalSearchKeys = a} :: SearchProfiles) Prelude.. Lens.mapping Lens.coerced
+
+-- | Relationship between all specified search keys that will be used to
+-- search for profiles. This includes the required @KeyName@ and @Values@
+-- parameters as well as any key-value(s) pairs specified in the
+-- @AdditionalSearchKeys@ list.
+--
+-- This parameter influences which profiles will be returned in the
+-- response in the following manner:
+--
+-- -   @AND@ - The response only includes profiles that match all of the
+--     search keys.
+--
+-- -   @OR@ - The response includes profiles that match at least one of the
+--     search keys.
+--
+-- The @OR@ relationship is the default behavior if this parameter is not
+-- included in the request.
+searchProfiles_logicalOperator :: Lens.Lens' SearchProfiles (Prelude.Maybe LogicalOperator)
+searchProfiles_logicalOperator = Lens.lens (\SearchProfiles' {logicalOperator} -> logicalOperator) (\s@SearchProfiles' {} a -> s {logicalOperator = a} :: SearchProfiles)
+
+-- | The maximum number of objects returned per page.
+--
+-- The default is 20 if this parameter is not included in the request.
+searchProfiles_maxResults :: Lens.Lens' SearchProfiles (Prelude.Maybe Prelude.Natural)
+searchProfiles_maxResults = Lens.lens (\SearchProfiles' {maxResults} -> maxResults) (\s@SearchProfiles' {} a -> s {maxResults = a} :: SearchProfiles)
+
+-- | The pagination token from the previous SearchProfiles API call.
+searchProfiles_nextToken :: Lens.Lens' SearchProfiles (Prelude.Maybe Prelude.Text)
+searchProfiles_nextToken = Lens.lens (\SearchProfiles' {nextToken} -> nextToken) (\s@SearchProfiles' {} a -> s {nextToken = a} :: SearchProfiles)
+
+-- | The unique name of the domain.
+searchProfiles_domainName :: Lens.Lens' SearchProfiles Prelude.Text
+searchProfiles_domainName = Lens.lens (\SearchProfiles' {domainName} -> domainName) (\s@SearchProfiles' {} a -> s {domainName = a} :: SearchProfiles)
+
+-- | A searchable identifier of a customer profile. The predefined keys you
+-- can use to search include: _account, _profileId, _assetId, _caseId,
+-- _orderId, _fullName, _phone, _email, _ctrContactId, _marketoLeadId,
+-- _salesforceAccountId, _salesforceContactId, _salesforceAssetId,
+-- _zendeskUserId, _zendeskExternalId, _zendeskTicketId,
+-- _serviceNowSystemId, _serviceNowIncidentId, _segmentUserId,
+-- _shopifyCustomerId, _shopifyOrderId.
+searchProfiles_keyName :: Lens.Lens' SearchProfiles Prelude.Text
+searchProfiles_keyName = Lens.lens (\SearchProfiles' {keyName} -> keyName) (\s@SearchProfiles' {} a -> s {keyName = a} :: SearchProfiles)
+
+-- | A list of key values.
+searchProfiles_values :: Lens.Lens' SearchProfiles [Prelude.Text]
+searchProfiles_values = Lens.lens (\SearchProfiles' {values} -> values) (\s@SearchProfiles' {} a -> s {values = a} :: SearchProfiles) Prelude.. Lens.coerced
+
+instance Core.AWSRequest SearchProfiles where
+  type
+    AWSResponse SearchProfiles =
+      SearchProfilesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchProfilesResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SearchProfiles where
+  hashWithSalt _salt SearchProfiles' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalSearchKeys
+      `Prelude.hashWithSalt` logicalOperator
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` keyName
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData SearchProfiles where
+  rnf SearchProfiles' {..} =
+    Prelude.rnf additionalSearchKeys
+      `Prelude.seq` Prelude.rnf logicalOperator
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf values
+
+instance Data.ToHeaders SearchProfiles where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchProfiles where
+  toJSON SearchProfiles' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AdditionalSearchKeys" Data..=)
+              Prelude.<$> additionalSearchKeys,
+            ("LogicalOperator" Data..=)
+              Prelude.<$> logicalOperator,
+            Prelude.Just ("KeyName" Data..= keyName),
+            Prelude.Just ("Values" Data..= values)
+          ]
+      )
+
+instance Data.ToPath SearchProfiles where
+  toPath SearchProfiles' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainName,
+        "/profiles/search"
+      ]
+
+instance Data.ToQuery SearchProfiles where
+  toQuery SearchProfiles' {..} =
+    Prelude.mconcat
+      [ "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newSearchProfilesResponse' smart constructor.
+data SearchProfilesResponse = SearchProfilesResponse'
+  { -- | The list of Profiles matching the search criteria.
+    items :: Prelude.Maybe [Profile],
+    -- | The pagination token from the previous SearchProfiles API call.
+    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 'SearchProfilesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'searchProfilesResponse_items' - The list of Profiles matching the search criteria.
+--
+-- 'nextToken', 'searchProfilesResponse_nextToken' - The pagination token from the previous SearchProfiles API call.
+--
+-- 'httpStatus', 'searchProfilesResponse_httpStatus' - The response's http status code.
+newSearchProfilesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchProfilesResponse
+newSearchProfilesResponse pHttpStatus_ =
+  SearchProfilesResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of Profiles matching the search criteria.
+searchProfilesResponse_items :: Lens.Lens' SearchProfilesResponse (Prelude.Maybe [Profile])
+searchProfilesResponse_items = Lens.lens (\SearchProfilesResponse' {items} -> items) (\s@SearchProfilesResponse' {} a -> s {items = a} :: SearchProfilesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token from the previous SearchProfiles API call.
+searchProfilesResponse_nextToken :: Lens.Lens' SearchProfilesResponse (Prelude.Maybe Prelude.Text)
+searchProfilesResponse_nextToken = Lens.lens (\SearchProfilesResponse' {nextToken} -> nextToken) (\s@SearchProfilesResponse' {} a -> s {nextToken = a} :: SearchProfilesResponse)
+
+-- | The response's http status code.
+searchProfilesResponse_httpStatus :: Lens.Lens' SearchProfilesResponse Prelude.Int
+searchProfilesResponse_httpStatus = Lens.lens (\SearchProfilesResponse' {httpStatus} -> httpStatus) (\s@SearchProfilesResponse' {} a -> s {httpStatus = a} :: SearchProfilesResponse)
+
+instance Prelude.NFData SearchProfilesResponse where
+  rnf SearchProfilesResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/TagResource.hs b/gen/Amazonka/CustomerProfiles/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/TagResource.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Assigns one or more tags (key-value pairs) to the specified Amazon
+-- Connect Customer Profiles resource. Tags can help you organize and
+-- categorize your resources. You can also use them to scope user
+-- permissions by granting a user permission to access or change only
+-- resources with certain tag values. In Connect Customer Profiles,
+-- domains, profile object types, and integrations can be tagged.
+--
+-- Tags don\'t have any semantic meaning to AWS and are interpreted
+-- strictly as strings of characters.
+--
+-- You can use the TagResource action with a resource that already has
+-- tags. If you specify a new tag key, this tag is appended to the list of
+-- tags associated with the resource. If you specify a tag key that is
+-- already associated with the resource, the new tag value that you specify
+-- replaces the previous value for that tag.
+--
+-- You can associate as many as 50 tags with a resource.
+module Amazonka.CustomerProfiles.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 Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+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 ARN of the resource that you\'re adding tags to.
+    resourceArn :: Prelude.Text,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The ARN of the resource that you\'re adding tags to.
+--
+-- 'tags', 'tagResource_tags' - The tags used to organize, track, or control access for this resource.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The ARN of the resource that you\'re adding tags to.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | The tags used to organize, track, or control access for this resource.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/Types.hs b/gen/Amazonka/CustomerProfiles/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types.hs
@@ -0,0 +1,694 @@
+{-# 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.CustomerProfiles.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.CustomerProfiles.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _BadRequestException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ThrottlingException,
+
+    -- * ConflictResolvingModel
+    ConflictResolvingModel (..),
+
+    -- * DataPullMode
+    DataPullMode (..),
+
+    -- * FieldContentType
+    FieldContentType (..),
+
+    -- * Gender
+    Gender (..),
+
+    -- * IdentityResolutionJobStatus
+    IdentityResolutionJobStatus (..),
+
+    -- * JobScheduleDayOfTheWeek
+    JobScheduleDayOfTheWeek (..),
+
+    -- * LogicalOperator
+    LogicalOperator (..),
+
+    -- * MarketoConnectorOperator
+    MarketoConnectorOperator (..),
+
+    -- * OperatorPropertiesKeys
+    OperatorPropertiesKeys (..),
+
+    -- * PartyType
+    PartyType (..),
+
+    -- * S3ConnectorOperator
+    S3ConnectorOperator (..),
+
+    -- * SalesforceConnectorOperator
+    SalesforceConnectorOperator (..),
+
+    -- * ServiceNowConnectorOperator
+    ServiceNowConnectorOperator (..),
+
+    -- * SourceConnectorType
+    SourceConnectorType (..),
+
+    -- * StandardIdentifier
+    StandardIdentifier (..),
+
+    -- * Status
+    Status (..),
+
+    -- * TaskType
+    TaskType (..),
+
+    -- * TriggerType
+    TriggerType (..),
+
+    -- * WorkflowType
+    WorkflowType (..),
+
+    -- * ZendeskConnectorOperator
+    ZendeskConnectorOperator (..),
+
+    -- * AdditionalSearchKey
+    AdditionalSearchKey (..),
+    newAdditionalSearchKey,
+    additionalSearchKey_keyName,
+    additionalSearchKey_values,
+
+    -- * Address
+    Address (..),
+    newAddress,
+    address_address1,
+    address_address2,
+    address_address3,
+    address_address4,
+    address_city,
+    address_country,
+    address_county,
+    address_postalCode,
+    address_province,
+    address_state,
+
+    -- * AppflowIntegration
+    AppflowIntegration (..),
+    newAppflowIntegration,
+    appflowIntegration_batches,
+    appflowIntegration_flowDefinition,
+
+    -- * AppflowIntegrationWorkflowAttributes
+    AppflowIntegrationWorkflowAttributes (..),
+    newAppflowIntegrationWorkflowAttributes,
+    appflowIntegrationWorkflowAttributes_roleArn,
+    appflowIntegrationWorkflowAttributes_sourceConnectorType,
+    appflowIntegrationWorkflowAttributes_connectorProfileName,
+
+    -- * AppflowIntegrationWorkflowMetrics
+    AppflowIntegrationWorkflowMetrics (..),
+    newAppflowIntegrationWorkflowMetrics,
+    appflowIntegrationWorkflowMetrics_recordsProcessed,
+    appflowIntegrationWorkflowMetrics_stepsCompleted,
+    appflowIntegrationWorkflowMetrics_totalSteps,
+
+    -- * AppflowIntegrationWorkflowStep
+    AppflowIntegrationWorkflowStep (..),
+    newAppflowIntegrationWorkflowStep,
+    appflowIntegrationWorkflowStep_flowName,
+    appflowIntegrationWorkflowStep_status,
+    appflowIntegrationWorkflowStep_executionMessage,
+    appflowIntegrationWorkflowStep_recordsProcessed,
+    appflowIntegrationWorkflowStep_batchRecordsStartTime,
+    appflowIntegrationWorkflowStep_batchRecordsEndTime,
+    appflowIntegrationWorkflowStep_createdAt,
+    appflowIntegrationWorkflowStep_lastUpdatedAt,
+
+    -- * AutoMerging
+    AutoMerging (..),
+    newAutoMerging,
+    autoMerging_conflictResolution,
+    autoMerging_consolidation,
+    autoMerging_minAllowedConfidenceScoreForMerging,
+    autoMerging_enabled,
+
+    -- * Batch
+    Batch (..),
+    newBatch,
+    batch_startTime,
+    batch_endTime,
+
+    -- * ConflictResolution
+    ConflictResolution (..),
+    newConflictResolution,
+    conflictResolution_sourceName,
+    conflictResolution_conflictResolvingModel,
+
+    -- * ConnectorOperator
+    ConnectorOperator (..),
+    newConnectorOperator,
+    connectorOperator_marketo,
+    connectorOperator_s3,
+    connectorOperator_salesforce,
+    connectorOperator_serviceNow,
+    connectorOperator_zendesk,
+
+    -- * Consolidation
+    Consolidation (..),
+    newConsolidation,
+    consolidation_matchingAttributesList,
+
+    -- * DomainStats
+    DomainStats (..),
+    newDomainStats,
+    domainStats_meteringProfileCount,
+    domainStats_objectCount,
+    domainStats_profileCount,
+    domainStats_totalSize,
+
+    -- * ExportingConfig
+    ExportingConfig (..),
+    newExportingConfig,
+    exportingConfig_s3Exporting,
+
+    -- * ExportingLocation
+    ExportingLocation (..),
+    newExportingLocation,
+    exportingLocation_s3Exporting,
+
+    -- * FieldSourceProfileIds
+    FieldSourceProfileIds (..),
+    newFieldSourceProfileIds,
+    fieldSourceProfileIds_accountNumber,
+    fieldSourceProfileIds_additionalInformation,
+    fieldSourceProfileIds_address,
+    fieldSourceProfileIds_attributes,
+    fieldSourceProfileIds_billingAddress,
+    fieldSourceProfileIds_birthDate,
+    fieldSourceProfileIds_businessEmailAddress,
+    fieldSourceProfileIds_businessName,
+    fieldSourceProfileIds_businessPhoneNumber,
+    fieldSourceProfileIds_emailAddress,
+    fieldSourceProfileIds_firstName,
+    fieldSourceProfileIds_gender,
+    fieldSourceProfileIds_homePhoneNumber,
+    fieldSourceProfileIds_lastName,
+    fieldSourceProfileIds_mailingAddress,
+    fieldSourceProfileIds_middleName,
+    fieldSourceProfileIds_mobilePhoneNumber,
+    fieldSourceProfileIds_partyType,
+    fieldSourceProfileIds_personalEmailAddress,
+    fieldSourceProfileIds_phoneNumber,
+    fieldSourceProfileIds_shippingAddress,
+
+    -- * FlowDefinition
+    FlowDefinition (..),
+    newFlowDefinition,
+    flowDefinition_description,
+    flowDefinition_flowName,
+    flowDefinition_kmsArn,
+    flowDefinition_sourceFlowConfig,
+    flowDefinition_tasks,
+    flowDefinition_triggerConfig,
+
+    -- * FoundByKeyValue
+    FoundByKeyValue (..),
+    newFoundByKeyValue,
+    foundByKeyValue_keyName,
+    foundByKeyValue_values,
+
+    -- * IdentityResolutionJob
+    IdentityResolutionJob (..),
+    newIdentityResolutionJob,
+    identityResolutionJob_domainName,
+    identityResolutionJob_exportingLocation,
+    identityResolutionJob_jobEndTime,
+    identityResolutionJob_jobId,
+    identityResolutionJob_jobStartTime,
+    identityResolutionJob_jobStats,
+    identityResolutionJob_message,
+    identityResolutionJob_status,
+
+    -- * IncrementalPullConfig
+    IncrementalPullConfig (..),
+    newIncrementalPullConfig,
+    incrementalPullConfig_datetimeTypeFieldName,
+
+    -- * IntegrationConfig
+    IntegrationConfig (..),
+    newIntegrationConfig,
+    integrationConfig_appflowIntegration,
+
+    -- * JobSchedule
+    JobSchedule (..),
+    newJobSchedule,
+    jobSchedule_dayOfTheWeek,
+    jobSchedule_time,
+
+    -- * JobStats
+    JobStats (..),
+    newJobStats,
+    jobStats_numberOfMatchesFound,
+    jobStats_numberOfMergesDone,
+    jobStats_numberOfProfilesReviewed,
+
+    -- * ListDomainItem
+    ListDomainItem (..),
+    newListDomainItem,
+    listDomainItem_tags,
+    listDomainItem_domainName,
+    listDomainItem_createdAt,
+    listDomainItem_lastUpdatedAt,
+
+    -- * ListIntegrationItem
+    ListIntegrationItem (..),
+    newListIntegrationItem,
+    listIntegrationItem_isUnstructured,
+    listIntegrationItem_objectTypeName,
+    listIntegrationItem_objectTypeNames,
+    listIntegrationItem_tags,
+    listIntegrationItem_workflowId,
+    listIntegrationItem_domainName,
+    listIntegrationItem_uri,
+    listIntegrationItem_createdAt,
+    listIntegrationItem_lastUpdatedAt,
+
+    -- * ListProfileObjectTypeItem
+    ListProfileObjectTypeItem (..),
+    newListProfileObjectTypeItem,
+    listProfileObjectTypeItem_createdAt,
+    listProfileObjectTypeItem_lastUpdatedAt,
+    listProfileObjectTypeItem_tags,
+    listProfileObjectTypeItem_objectTypeName,
+    listProfileObjectTypeItem_description,
+
+    -- * ListProfileObjectTypeTemplateItem
+    ListProfileObjectTypeTemplateItem (..),
+    newListProfileObjectTypeTemplateItem,
+    listProfileObjectTypeTemplateItem_sourceName,
+    listProfileObjectTypeTemplateItem_sourceObject,
+    listProfileObjectTypeTemplateItem_templateId,
+
+    -- * ListProfileObjectsItem
+    ListProfileObjectsItem (..),
+    newListProfileObjectsItem,
+    listProfileObjectsItem_object,
+    listProfileObjectsItem_objectTypeName,
+    listProfileObjectsItem_profileObjectUniqueKey,
+
+    -- * ListWorkflowsItem
+    ListWorkflowsItem (..),
+    newListWorkflowsItem,
+    listWorkflowsItem_workflowType,
+    listWorkflowsItem_workflowId,
+    listWorkflowsItem_status,
+    listWorkflowsItem_statusDescription,
+    listWorkflowsItem_createdAt,
+    listWorkflowsItem_lastUpdatedAt,
+
+    -- * MarketoSourceProperties
+    MarketoSourceProperties (..),
+    newMarketoSourceProperties,
+    marketoSourceProperties_object,
+
+    -- * MatchItem
+    MatchItem (..),
+    newMatchItem,
+    matchItem_confidenceScore,
+    matchItem_matchId,
+    matchItem_profileIds,
+
+    -- * MatchingRequest
+    MatchingRequest (..),
+    newMatchingRequest,
+    matchingRequest_autoMerging,
+    matchingRequest_exportingConfig,
+    matchingRequest_jobSchedule,
+    matchingRequest_enabled,
+
+    -- * MatchingResponse
+    MatchingResponse (..),
+    newMatchingResponse,
+    matchingResponse_autoMerging,
+    matchingResponse_enabled,
+    matchingResponse_exportingConfig,
+    matchingResponse_jobSchedule,
+
+    -- * ObjectFilter
+    ObjectFilter (..),
+    newObjectFilter,
+    objectFilter_keyName,
+    objectFilter_values,
+
+    -- * ObjectTypeField
+    ObjectTypeField (..),
+    newObjectTypeField,
+    objectTypeField_contentType,
+    objectTypeField_source,
+    objectTypeField_target,
+
+    -- * ObjectTypeKey
+    ObjectTypeKey (..),
+    newObjectTypeKey,
+    objectTypeKey_fieldNames,
+    objectTypeKey_standardIdentifiers,
+
+    -- * Profile
+    Profile (..),
+    newProfile,
+    profile_accountNumber,
+    profile_additionalInformation,
+    profile_address,
+    profile_attributes,
+    profile_billingAddress,
+    profile_birthDate,
+    profile_businessEmailAddress,
+    profile_businessName,
+    profile_businessPhoneNumber,
+    profile_emailAddress,
+    profile_firstName,
+    profile_foundByItems,
+    profile_gender,
+    profile_homePhoneNumber,
+    profile_lastName,
+    profile_mailingAddress,
+    profile_middleName,
+    profile_mobilePhoneNumber,
+    profile_partyType,
+    profile_personalEmailAddress,
+    profile_phoneNumber,
+    profile_profileId,
+    profile_shippingAddress,
+
+    -- * S3ExportingConfig
+    S3ExportingConfig (..),
+    newS3ExportingConfig,
+    s3ExportingConfig_s3KeyName,
+    s3ExportingConfig_s3BucketName,
+
+    -- * S3ExportingLocation
+    S3ExportingLocation (..),
+    newS3ExportingLocation,
+    s3ExportingLocation_s3BucketName,
+    s3ExportingLocation_s3KeyName,
+
+    -- * S3SourceProperties
+    S3SourceProperties (..),
+    newS3SourceProperties,
+    s3SourceProperties_bucketPrefix,
+    s3SourceProperties_bucketName,
+
+    -- * SalesforceSourceProperties
+    SalesforceSourceProperties (..),
+    newSalesforceSourceProperties,
+    salesforceSourceProperties_enableDynamicFieldUpdate,
+    salesforceSourceProperties_includeDeletedRecords,
+    salesforceSourceProperties_object,
+
+    -- * ScheduledTriggerProperties
+    ScheduledTriggerProperties (..),
+    newScheduledTriggerProperties,
+    scheduledTriggerProperties_dataPullMode,
+    scheduledTriggerProperties_firstExecutionFrom,
+    scheduledTriggerProperties_scheduleEndTime,
+    scheduledTriggerProperties_scheduleOffset,
+    scheduledTriggerProperties_scheduleStartTime,
+    scheduledTriggerProperties_timezone,
+    scheduledTriggerProperties_scheduleExpression,
+
+    -- * ServiceNowSourceProperties
+    ServiceNowSourceProperties (..),
+    newServiceNowSourceProperties,
+    serviceNowSourceProperties_object,
+
+    -- * SourceConnectorProperties
+    SourceConnectorProperties (..),
+    newSourceConnectorProperties,
+    sourceConnectorProperties_marketo,
+    sourceConnectorProperties_s3,
+    sourceConnectorProperties_salesforce,
+    sourceConnectorProperties_serviceNow,
+    sourceConnectorProperties_zendesk,
+
+    -- * SourceFlowConfig
+    SourceFlowConfig (..),
+    newSourceFlowConfig,
+    sourceFlowConfig_connectorProfileName,
+    sourceFlowConfig_incrementalPullConfig,
+    sourceFlowConfig_connectorType,
+    sourceFlowConfig_sourceConnectorProperties,
+
+    -- * Task
+    Task (..),
+    newTask,
+    task_connectorOperator,
+    task_destinationField,
+    task_taskProperties,
+    task_sourceFields,
+    task_taskType,
+
+    -- * TriggerConfig
+    TriggerConfig (..),
+    newTriggerConfig,
+    triggerConfig_triggerProperties,
+    triggerConfig_triggerType,
+
+    -- * TriggerProperties
+    TriggerProperties (..),
+    newTriggerProperties,
+    triggerProperties_scheduled,
+
+    -- * UpdateAddress
+    UpdateAddress (..),
+    newUpdateAddress,
+    updateAddress_address1,
+    updateAddress_address2,
+    updateAddress_address3,
+    updateAddress_address4,
+    updateAddress_city,
+    updateAddress_country,
+    updateAddress_county,
+    updateAddress_postalCode,
+    updateAddress_province,
+    updateAddress_state,
+
+    -- * WorkflowAttributes
+    WorkflowAttributes (..),
+    newWorkflowAttributes,
+    workflowAttributes_appflowIntegration,
+
+    -- * WorkflowMetrics
+    WorkflowMetrics (..),
+    newWorkflowMetrics,
+    workflowMetrics_appflowIntegration,
+
+    -- * WorkflowStepItem
+    WorkflowStepItem (..),
+    newWorkflowStepItem,
+    workflowStepItem_appflowIntegration,
+
+    -- * ZendeskSourceProperties
+    ZendeskSourceProperties (..),
+    newZendeskSourceProperties,
+    zendeskSourceProperties_object,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.AdditionalSearchKey
+import Amazonka.CustomerProfiles.Types.Address
+import Amazonka.CustomerProfiles.Types.AppflowIntegration
+import Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowAttributes
+import Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowMetrics
+import Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowStep
+import Amazonka.CustomerProfiles.Types.AutoMerging
+import Amazonka.CustomerProfiles.Types.Batch
+import Amazonka.CustomerProfiles.Types.ConflictResolution
+import Amazonka.CustomerProfiles.Types.ConflictResolvingModel
+import Amazonka.CustomerProfiles.Types.ConnectorOperator
+import Amazonka.CustomerProfiles.Types.Consolidation
+import Amazonka.CustomerProfiles.Types.DataPullMode
+import Amazonka.CustomerProfiles.Types.DomainStats
+import Amazonka.CustomerProfiles.Types.ExportingConfig
+import Amazonka.CustomerProfiles.Types.ExportingLocation
+import Amazonka.CustomerProfiles.Types.FieldContentType
+import Amazonka.CustomerProfiles.Types.FieldSourceProfileIds
+import Amazonka.CustomerProfiles.Types.FlowDefinition
+import Amazonka.CustomerProfiles.Types.FoundByKeyValue
+import Amazonka.CustomerProfiles.Types.Gender
+import Amazonka.CustomerProfiles.Types.IdentityResolutionJob
+import Amazonka.CustomerProfiles.Types.IdentityResolutionJobStatus
+import Amazonka.CustomerProfiles.Types.IncrementalPullConfig
+import Amazonka.CustomerProfiles.Types.IntegrationConfig
+import Amazonka.CustomerProfiles.Types.JobSchedule
+import Amazonka.CustomerProfiles.Types.JobScheduleDayOfTheWeek
+import Amazonka.CustomerProfiles.Types.JobStats
+import Amazonka.CustomerProfiles.Types.ListDomainItem
+import Amazonka.CustomerProfiles.Types.ListIntegrationItem
+import Amazonka.CustomerProfiles.Types.ListProfileObjectTypeItem
+import Amazonka.CustomerProfiles.Types.ListProfileObjectTypeTemplateItem
+import Amazonka.CustomerProfiles.Types.ListProfileObjectsItem
+import Amazonka.CustomerProfiles.Types.ListWorkflowsItem
+import Amazonka.CustomerProfiles.Types.LogicalOperator
+import Amazonka.CustomerProfiles.Types.MarketoConnectorOperator
+import Amazonka.CustomerProfiles.Types.MarketoSourceProperties
+import Amazonka.CustomerProfiles.Types.MatchItem
+import Amazonka.CustomerProfiles.Types.MatchingRequest
+import Amazonka.CustomerProfiles.Types.MatchingResponse
+import Amazonka.CustomerProfiles.Types.ObjectFilter
+import Amazonka.CustomerProfiles.Types.ObjectTypeField
+import Amazonka.CustomerProfiles.Types.ObjectTypeKey
+import Amazonka.CustomerProfiles.Types.OperatorPropertiesKeys
+import Amazonka.CustomerProfiles.Types.PartyType
+import Amazonka.CustomerProfiles.Types.Profile
+import Amazonka.CustomerProfiles.Types.S3ConnectorOperator
+import Amazonka.CustomerProfiles.Types.S3ExportingConfig
+import Amazonka.CustomerProfiles.Types.S3ExportingLocation
+import Amazonka.CustomerProfiles.Types.S3SourceProperties
+import Amazonka.CustomerProfiles.Types.SalesforceConnectorOperator
+import Amazonka.CustomerProfiles.Types.SalesforceSourceProperties
+import Amazonka.CustomerProfiles.Types.ScheduledTriggerProperties
+import Amazonka.CustomerProfiles.Types.ServiceNowConnectorOperator
+import Amazonka.CustomerProfiles.Types.ServiceNowSourceProperties
+import Amazonka.CustomerProfiles.Types.SourceConnectorProperties
+import Amazonka.CustomerProfiles.Types.SourceConnectorType
+import Amazonka.CustomerProfiles.Types.SourceFlowConfig
+import Amazonka.CustomerProfiles.Types.StandardIdentifier
+import Amazonka.CustomerProfiles.Types.Status
+import Amazonka.CustomerProfiles.Types.Task
+import Amazonka.CustomerProfiles.Types.TaskType
+import Amazonka.CustomerProfiles.Types.TriggerConfig
+import Amazonka.CustomerProfiles.Types.TriggerProperties
+import Amazonka.CustomerProfiles.Types.TriggerType
+import Amazonka.CustomerProfiles.Types.UpdateAddress
+import Amazonka.CustomerProfiles.Types.WorkflowAttributes
+import Amazonka.CustomerProfiles.Types.WorkflowMetrics
+import Amazonka.CustomerProfiles.Types.WorkflowStepItem
+import Amazonka.CustomerProfiles.Types.WorkflowType
+import Amazonka.CustomerProfiles.Types.ZendeskConnectorOperator
+import Amazonka.CustomerProfiles.Types.ZendeskSourceProperties
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2020-08-15@ of the Amazon Connect Customer Profiles SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "CustomerProfiles",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "profile",
+      Core.signingName = "profile",
+      Core.version = "2020-08-15",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "CustomerProfiles",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | You do not have sufficient access to perform this action.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | The input you provided is invalid.
+_BadRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_BadRequestException =
+  Core._MatchServiceError
+    defaultService
+    "BadRequestException"
+    Prelude.. Core.hasStatus 400
+
+-- | An internal service error occurred.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | The requested resource does not exist, or access was denied.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | You exceeded the maximum number of requests.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
diff --git a/gen/Amazonka/CustomerProfiles/Types/AdditionalSearchKey.hs b/gen/Amazonka/CustomerProfiles/Types/AdditionalSearchKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/AdditionalSearchKey.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.AdditionalSearchKey
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.AdditionalSearchKey where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A data type pair that consists of a @KeyName@ and @Values@ list that is
+-- used in conjunction with the
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_SearchProfiles.html#customerprofiles-SearchProfiles-request-KeyName KeyName>
+-- and
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_SearchProfiles.html#customerprofiles-SearchProfiles-request-Values Values>
+-- parameters to search for profiles using the
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_SearchProfiles.html SearchProfiles>
+-- API.
+--
+-- /See:/ 'newAdditionalSearchKey' smart constructor.
+data AdditionalSearchKey = AdditionalSearchKey'
+  { -- | A searchable identifier of a customer profile.
+    keyName :: Prelude.Text,
+    -- | A list of key values.
+    values :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AdditionalSearchKey' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'keyName', 'additionalSearchKey_keyName' - A searchable identifier of a customer profile.
+--
+-- 'values', 'additionalSearchKey_values' - A list of key values.
+newAdditionalSearchKey ::
+  -- | 'keyName'
+  Prelude.Text ->
+  AdditionalSearchKey
+newAdditionalSearchKey pKeyName_ =
+  AdditionalSearchKey'
+    { keyName = pKeyName_,
+      values = Prelude.mempty
+    }
+
+-- | A searchable identifier of a customer profile.
+additionalSearchKey_keyName :: Lens.Lens' AdditionalSearchKey Prelude.Text
+additionalSearchKey_keyName = Lens.lens (\AdditionalSearchKey' {keyName} -> keyName) (\s@AdditionalSearchKey' {} a -> s {keyName = a} :: AdditionalSearchKey)
+
+-- | A list of key values.
+additionalSearchKey_values :: Lens.Lens' AdditionalSearchKey [Prelude.Text]
+additionalSearchKey_values = Lens.lens (\AdditionalSearchKey' {values} -> values) (\s@AdditionalSearchKey' {} a -> s {values = a} :: AdditionalSearchKey) Prelude.. Lens.coerced
+
+instance Prelude.Hashable AdditionalSearchKey where
+  hashWithSalt _salt AdditionalSearchKey' {..} =
+    _salt
+      `Prelude.hashWithSalt` keyName
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData AdditionalSearchKey where
+  rnf AdditionalSearchKey' {..} =
+    Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf values
+
+instance Data.ToJSON AdditionalSearchKey where
+  toJSON AdditionalSearchKey' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("KeyName" Data..= keyName),
+            Prelude.Just ("Values" Data..= values)
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/Address.hs b/gen/Amazonka/CustomerProfiles/Types/Address.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/Address.hs
@@ -0,0 +1,198 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.Address
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.Address where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A generic address associated with the customer that is not mailing,
+-- shipping, or billing.
+--
+-- /See:/ 'newAddress' smart constructor.
+data Address = Address'
+  { -- | The first line of a customer address.
+    address1 :: Prelude.Maybe Prelude.Text,
+    -- | The second line of a customer address.
+    address2 :: Prelude.Maybe Prelude.Text,
+    -- | The third line of a customer address.
+    address3 :: Prelude.Maybe Prelude.Text,
+    -- | The fourth line of a customer address.
+    address4 :: Prelude.Maybe Prelude.Text,
+    -- | The city in which a customer lives.
+    city :: Prelude.Maybe Prelude.Text,
+    -- | The country in which a customer lives.
+    country :: Prelude.Maybe Prelude.Text,
+    -- | The county in which a customer lives.
+    county :: Prelude.Maybe Prelude.Text,
+    -- | The postal code of a customer address.
+    postalCode :: Prelude.Maybe Prelude.Text,
+    -- | The province in which a customer lives.
+    province :: Prelude.Maybe Prelude.Text,
+    -- | The state in which a customer lives.
+    state :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Address' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'address1', 'address_address1' - The first line of a customer address.
+--
+-- 'address2', 'address_address2' - The second line of a customer address.
+--
+-- 'address3', 'address_address3' - The third line of a customer address.
+--
+-- 'address4', 'address_address4' - The fourth line of a customer address.
+--
+-- 'city', 'address_city' - The city in which a customer lives.
+--
+-- 'country', 'address_country' - The country in which a customer lives.
+--
+-- 'county', 'address_county' - The county in which a customer lives.
+--
+-- 'postalCode', 'address_postalCode' - The postal code of a customer address.
+--
+-- 'province', 'address_province' - The province in which a customer lives.
+--
+-- 'state', 'address_state' - The state in which a customer lives.
+newAddress ::
+  Address
+newAddress =
+  Address'
+    { address1 = Prelude.Nothing,
+      address2 = Prelude.Nothing,
+      address3 = Prelude.Nothing,
+      address4 = Prelude.Nothing,
+      city = Prelude.Nothing,
+      country = Prelude.Nothing,
+      county = Prelude.Nothing,
+      postalCode = Prelude.Nothing,
+      province = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The first line of a customer address.
+address_address1 :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_address1 = Lens.lens (\Address' {address1} -> address1) (\s@Address' {} a -> s {address1 = a} :: Address)
+
+-- | The second line of a customer address.
+address_address2 :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_address2 = Lens.lens (\Address' {address2} -> address2) (\s@Address' {} a -> s {address2 = a} :: Address)
+
+-- | The third line of a customer address.
+address_address3 :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_address3 = Lens.lens (\Address' {address3} -> address3) (\s@Address' {} a -> s {address3 = a} :: Address)
+
+-- | The fourth line of a customer address.
+address_address4 :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_address4 = Lens.lens (\Address' {address4} -> address4) (\s@Address' {} a -> s {address4 = a} :: Address)
+
+-- | The city in which a customer lives.
+address_city :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_city = Lens.lens (\Address' {city} -> city) (\s@Address' {} a -> s {city = a} :: Address)
+
+-- | The country in which a customer lives.
+address_country :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_country = Lens.lens (\Address' {country} -> country) (\s@Address' {} a -> s {country = a} :: Address)
+
+-- | The county in which a customer lives.
+address_county :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_county = Lens.lens (\Address' {county} -> county) (\s@Address' {} a -> s {county = a} :: Address)
+
+-- | The postal code of a customer address.
+address_postalCode :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_postalCode = Lens.lens (\Address' {postalCode} -> postalCode) (\s@Address' {} a -> s {postalCode = a} :: Address)
+
+-- | The province in which a customer lives.
+address_province :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_province = Lens.lens (\Address' {province} -> province) (\s@Address' {} a -> s {province = a} :: Address)
+
+-- | The state in which a customer lives.
+address_state :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_state = Lens.lens (\Address' {state} -> state) (\s@Address' {} a -> s {state = a} :: Address)
+
+instance Data.FromJSON Address where
+  parseJSON =
+    Data.withObject
+      "Address"
+      ( \x ->
+          Address'
+            Prelude.<$> (x Data..:? "Address1")
+            Prelude.<*> (x Data..:? "Address2")
+            Prelude.<*> (x Data..:? "Address3")
+            Prelude.<*> (x Data..:? "Address4")
+            Prelude.<*> (x Data..:? "City")
+            Prelude.<*> (x Data..:? "Country")
+            Prelude.<*> (x Data..:? "County")
+            Prelude.<*> (x Data..:? "PostalCode")
+            Prelude.<*> (x Data..:? "Province")
+            Prelude.<*> (x Data..:? "State")
+      )
+
+instance Prelude.Hashable Address where
+  hashWithSalt _salt Address' {..} =
+    _salt
+      `Prelude.hashWithSalt` address1
+      `Prelude.hashWithSalt` address2
+      `Prelude.hashWithSalt` address3
+      `Prelude.hashWithSalt` address4
+      `Prelude.hashWithSalt` city
+      `Prelude.hashWithSalt` country
+      `Prelude.hashWithSalt` county
+      `Prelude.hashWithSalt` postalCode
+      `Prelude.hashWithSalt` province
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData Address where
+  rnf Address' {..} =
+    Prelude.rnf address1
+      `Prelude.seq` Prelude.rnf address2
+      `Prelude.seq` Prelude.rnf address3
+      `Prelude.seq` Prelude.rnf address4
+      `Prelude.seq` Prelude.rnf city
+      `Prelude.seq` Prelude.rnf country
+      `Prelude.seq` Prelude.rnf county
+      `Prelude.seq` Prelude.rnf postalCode
+      `Prelude.seq` Prelude.rnf province
+      `Prelude.seq` Prelude.rnf state
+
+instance Data.ToJSON Address where
+  toJSON Address' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Address1" Data..=) Prelude.<$> address1,
+            ("Address2" Data..=) Prelude.<$> address2,
+            ("Address3" Data..=) Prelude.<$> address3,
+            ("Address4" Data..=) Prelude.<$> address4,
+            ("City" Data..=) Prelude.<$> city,
+            ("Country" Data..=) Prelude.<$> country,
+            ("County" Data..=) Prelude.<$> county,
+            ("PostalCode" Data..=) Prelude.<$> postalCode,
+            ("Province" Data..=) Prelude.<$> province,
+            ("State" Data..=) Prelude.<$> state
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/AppflowIntegration.hs b/gen/Amazonka/CustomerProfiles/Types/AppflowIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/AppflowIntegration.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.CustomerProfiles.Types.AppflowIntegration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.AppflowIntegration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.Batch
+import Amazonka.CustomerProfiles.Types.FlowDefinition
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details for workflow of type @APPFLOW_INTEGRATION@.
+--
+-- /See:/ 'newAppflowIntegration' smart constructor.
+data AppflowIntegration = AppflowIntegration'
+  { -- | Batches in workflow of type @APPFLOW_INTEGRATION@.
+    batches :: Prelude.Maybe [Batch],
+    flowDefinition :: FlowDefinition
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppflowIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'batches', 'appflowIntegration_batches' - Batches in workflow of type @APPFLOW_INTEGRATION@.
+--
+-- 'flowDefinition', 'appflowIntegration_flowDefinition' - Undocumented member.
+newAppflowIntegration ::
+  -- | 'flowDefinition'
+  FlowDefinition ->
+  AppflowIntegration
+newAppflowIntegration pFlowDefinition_ =
+  AppflowIntegration'
+    { batches = Prelude.Nothing,
+      flowDefinition = pFlowDefinition_
+    }
+
+-- | Batches in workflow of type @APPFLOW_INTEGRATION@.
+appflowIntegration_batches :: Lens.Lens' AppflowIntegration (Prelude.Maybe [Batch])
+appflowIntegration_batches = Lens.lens (\AppflowIntegration' {batches} -> batches) (\s@AppflowIntegration' {} a -> s {batches = a} :: AppflowIntegration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+appflowIntegration_flowDefinition :: Lens.Lens' AppflowIntegration FlowDefinition
+appflowIntegration_flowDefinition = Lens.lens (\AppflowIntegration' {flowDefinition} -> flowDefinition) (\s@AppflowIntegration' {} a -> s {flowDefinition = a} :: AppflowIntegration)
+
+instance Prelude.Hashable AppflowIntegration where
+  hashWithSalt _salt AppflowIntegration' {..} =
+    _salt
+      `Prelude.hashWithSalt` batches
+      `Prelude.hashWithSalt` flowDefinition
+
+instance Prelude.NFData AppflowIntegration where
+  rnf AppflowIntegration' {..} =
+    Prelude.rnf batches
+      `Prelude.seq` Prelude.rnf flowDefinition
+
+instance Data.ToJSON AppflowIntegration where
+  toJSON AppflowIntegration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Batches" Data..=) Prelude.<$> batches,
+            Prelude.Just
+              ("FlowDefinition" Data..= flowDefinition)
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/AppflowIntegrationWorkflowAttributes.hs b/gen/Amazonka/CustomerProfiles/Types/AppflowIntegrationWorkflowAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/AppflowIntegrationWorkflowAttributes.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.SourceConnectorType
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Structure holding all @APPFLOW_INTEGRATION@ specific workflow
+-- attributes.
+--
+-- /See:/ 'newAppflowIntegrationWorkflowAttributes' smart constructor.
+data AppflowIntegrationWorkflowAttributes = AppflowIntegrationWorkflowAttributes'
+  { -- | The Amazon Resource Name (ARN) of the IAM role. Customer Profiles
+    -- assumes this role to create resources on your behalf as part of workflow
+    -- execution.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the source connector type, such as Salesforce, ServiceNow, and
+    -- Marketo. Indicates source of ingestion.
+    sourceConnectorType :: SourceConnectorType,
+    -- | The name of the AppFlow connector profile used for ingestion.
+    connectorProfileName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppflowIntegrationWorkflowAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roleArn', 'appflowIntegrationWorkflowAttributes_roleArn' - The Amazon Resource Name (ARN) of the IAM role. Customer Profiles
+-- assumes this role to create resources on your behalf as part of workflow
+-- execution.
+--
+-- 'sourceConnectorType', 'appflowIntegrationWorkflowAttributes_sourceConnectorType' - Specifies the source connector type, such as Salesforce, ServiceNow, and
+-- Marketo. Indicates source of ingestion.
+--
+-- 'connectorProfileName', 'appflowIntegrationWorkflowAttributes_connectorProfileName' - The name of the AppFlow connector profile used for ingestion.
+newAppflowIntegrationWorkflowAttributes ::
+  -- | 'sourceConnectorType'
+  SourceConnectorType ->
+  -- | 'connectorProfileName'
+  Prelude.Text ->
+  AppflowIntegrationWorkflowAttributes
+newAppflowIntegrationWorkflowAttributes
+  pSourceConnectorType_
+  pConnectorProfileName_ =
+    AppflowIntegrationWorkflowAttributes'
+      { roleArn =
+          Prelude.Nothing,
+        sourceConnectorType =
+          pSourceConnectorType_,
+        connectorProfileName =
+          pConnectorProfileName_
+      }
+
+-- | The Amazon Resource Name (ARN) of the IAM role. Customer Profiles
+-- assumes this role to create resources on your behalf as part of workflow
+-- execution.
+appflowIntegrationWorkflowAttributes_roleArn :: Lens.Lens' AppflowIntegrationWorkflowAttributes (Prelude.Maybe Prelude.Text)
+appflowIntegrationWorkflowAttributes_roleArn = Lens.lens (\AppflowIntegrationWorkflowAttributes' {roleArn} -> roleArn) (\s@AppflowIntegrationWorkflowAttributes' {} a -> s {roleArn = a} :: AppflowIntegrationWorkflowAttributes)
+
+-- | Specifies the source connector type, such as Salesforce, ServiceNow, and
+-- Marketo. Indicates source of ingestion.
+appflowIntegrationWorkflowAttributes_sourceConnectorType :: Lens.Lens' AppflowIntegrationWorkflowAttributes SourceConnectorType
+appflowIntegrationWorkflowAttributes_sourceConnectorType = Lens.lens (\AppflowIntegrationWorkflowAttributes' {sourceConnectorType} -> sourceConnectorType) (\s@AppflowIntegrationWorkflowAttributes' {} a -> s {sourceConnectorType = a} :: AppflowIntegrationWorkflowAttributes)
+
+-- | The name of the AppFlow connector profile used for ingestion.
+appflowIntegrationWorkflowAttributes_connectorProfileName :: Lens.Lens' AppflowIntegrationWorkflowAttributes Prelude.Text
+appflowIntegrationWorkflowAttributes_connectorProfileName = Lens.lens (\AppflowIntegrationWorkflowAttributes' {connectorProfileName} -> connectorProfileName) (\s@AppflowIntegrationWorkflowAttributes' {} a -> s {connectorProfileName = a} :: AppflowIntegrationWorkflowAttributes)
+
+instance
+  Data.FromJSON
+    AppflowIntegrationWorkflowAttributes
+  where
+  parseJSON =
+    Data.withObject
+      "AppflowIntegrationWorkflowAttributes"
+      ( \x ->
+          AppflowIntegrationWorkflowAttributes'
+            Prelude.<$> (x Data..:? "RoleArn")
+            Prelude.<*> (x Data..: "SourceConnectorType")
+            Prelude.<*> (x Data..: "ConnectorProfileName")
+      )
+
+instance
+  Prelude.Hashable
+    AppflowIntegrationWorkflowAttributes
+  where
+  hashWithSalt
+    _salt
+    AppflowIntegrationWorkflowAttributes' {..} =
+      _salt
+        `Prelude.hashWithSalt` roleArn
+        `Prelude.hashWithSalt` sourceConnectorType
+        `Prelude.hashWithSalt` connectorProfileName
+
+instance
+  Prelude.NFData
+    AppflowIntegrationWorkflowAttributes
+  where
+  rnf AppflowIntegrationWorkflowAttributes' {..} =
+    Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf sourceConnectorType
+      `Prelude.seq` Prelude.rnf connectorProfileName
diff --git a/gen/Amazonka/CustomerProfiles/Types/AppflowIntegrationWorkflowMetrics.hs b/gen/Amazonka/CustomerProfiles/Types/AppflowIntegrationWorkflowMetrics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/AppflowIntegrationWorkflowMetrics.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowMetrics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowMetrics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Workflow specific execution metrics for @APPFLOW_INTEGRATION@ workflow.
+--
+-- /See:/ 'newAppflowIntegrationWorkflowMetrics' smart constructor.
+data AppflowIntegrationWorkflowMetrics = AppflowIntegrationWorkflowMetrics'
+  { -- | Number of records processed in @APPFLOW_INTEGRATION@ workflow.
+    recordsProcessed :: Prelude.Integer,
+    -- | Total steps completed in @APPFLOW_INTEGRATION@ workflow.
+    stepsCompleted :: Prelude.Integer,
+    -- | Total steps in @APPFLOW_INTEGRATION@ workflow.
+    totalSteps :: Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppflowIntegrationWorkflowMetrics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'recordsProcessed', 'appflowIntegrationWorkflowMetrics_recordsProcessed' - Number of records processed in @APPFLOW_INTEGRATION@ workflow.
+--
+-- 'stepsCompleted', 'appflowIntegrationWorkflowMetrics_stepsCompleted' - Total steps completed in @APPFLOW_INTEGRATION@ workflow.
+--
+-- 'totalSteps', 'appflowIntegrationWorkflowMetrics_totalSteps' - Total steps in @APPFLOW_INTEGRATION@ workflow.
+newAppflowIntegrationWorkflowMetrics ::
+  -- | 'recordsProcessed'
+  Prelude.Integer ->
+  -- | 'stepsCompleted'
+  Prelude.Integer ->
+  -- | 'totalSteps'
+  Prelude.Integer ->
+  AppflowIntegrationWorkflowMetrics
+newAppflowIntegrationWorkflowMetrics
+  pRecordsProcessed_
+  pStepsCompleted_
+  pTotalSteps_ =
+    AppflowIntegrationWorkflowMetrics'
+      { recordsProcessed =
+          pRecordsProcessed_,
+        stepsCompleted = pStepsCompleted_,
+        totalSteps = pTotalSteps_
+      }
+
+-- | Number of records processed in @APPFLOW_INTEGRATION@ workflow.
+appflowIntegrationWorkflowMetrics_recordsProcessed :: Lens.Lens' AppflowIntegrationWorkflowMetrics Prelude.Integer
+appflowIntegrationWorkflowMetrics_recordsProcessed = Lens.lens (\AppflowIntegrationWorkflowMetrics' {recordsProcessed} -> recordsProcessed) (\s@AppflowIntegrationWorkflowMetrics' {} a -> s {recordsProcessed = a} :: AppflowIntegrationWorkflowMetrics)
+
+-- | Total steps completed in @APPFLOW_INTEGRATION@ workflow.
+appflowIntegrationWorkflowMetrics_stepsCompleted :: Lens.Lens' AppflowIntegrationWorkflowMetrics Prelude.Integer
+appflowIntegrationWorkflowMetrics_stepsCompleted = Lens.lens (\AppflowIntegrationWorkflowMetrics' {stepsCompleted} -> stepsCompleted) (\s@AppflowIntegrationWorkflowMetrics' {} a -> s {stepsCompleted = a} :: AppflowIntegrationWorkflowMetrics)
+
+-- | Total steps in @APPFLOW_INTEGRATION@ workflow.
+appflowIntegrationWorkflowMetrics_totalSteps :: Lens.Lens' AppflowIntegrationWorkflowMetrics Prelude.Integer
+appflowIntegrationWorkflowMetrics_totalSteps = Lens.lens (\AppflowIntegrationWorkflowMetrics' {totalSteps} -> totalSteps) (\s@AppflowIntegrationWorkflowMetrics' {} a -> s {totalSteps = a} :: AppflowIntegrationWorkflowMetrics)
+
+instance
+  Data.FromJSON
+    AppflowIntegrationWorkflowMetrics
+  where
+  parseJSON =
+    Data.withObject
+      "AppflowIntegrationWorkflowMetrics"
+      ( \x ->
+          AppflowIntegrationWorkflowMetrics'
+            Prelude.<$> (x Data..: "RecordsProcessed")
+            Prelude.<*> (x Data..: "StepsCompleted")
+            Prelude.<*> (x Data..: "TotalSteps")
+      )
+
+instance
+  Prelude.Hashable
+    AppflowIntegrationWorkflowMetrics
+  where
+  hashWithSalt
+    _salt
+    AppflowIntegrationWorkflowMetrics' {..} =
+      _salt
+        `Prelude.hashWithSalt` recordsProcessed
+        `Prelude.hashWithSalt` stepsCompleted
+        `Prelude.hashWithSalt` totalSteps
+
+instance
+  Prelude.NFData
+    AppflowIntegrationWorkflowMetrics
+  where
+  rnf AppflowIntegrationWorkflowMetrics' {..} =
+    Prelude.rnf recordsProcessed
+      `Prelude.seq` Prelude.rnf stepsCompleted
+      `Prelude.seq` Prelude.rnf totalSteps
diff --git a/gen/Amazonka/CustomerProfiles/Types/AppflowIntegrationWorkflowStep.hs b/gen/Amazonka/CustomerProfiles/Types/AppflowIntegrationWorkflowStep.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/AppflowIntegrationWorkflowStep.hs
@@ -0,0 +1,213 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowStep
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowStep where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.Status
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Workflow step details for @APPFLOW_INTEGRATION@ workflow.
+--
+-- /See:/ 'newAppflowIntegrationWorkflowStep' smart constructor.
+data AppflowIntegrationWorkflowStep = AppflowIntegrationWorkflowStep'
+  { -- | Name of the flow created during execution of workflow step.
+    -- @APPFLOW_INTEGRATION@ workflow type creates an appflow flow during
+    -- workflow step execution on the customers behalf.
+    flowName :: Prelude.Text,
+    -- | Workflow step status for @APPFLOW_INTEGRATION@ workflow.
+    status :: Status,
+    -- | Message indicating execution of workflow step for @APPFLOW_INTEGRATION@
+    -- workflow.
+    executionMessage :: Prelude.Text,
+    -- | Total number of records processed during execution of workflow step for
+    -- @APPFLOW_INTEGRATION@ workflow.
+    recordsProcessed :: Prelude.Integer,
+    -- | Start datetime of records pulled in batch during execution of workflow
+    -- step for @APPFLOW_INTEGRATION@ workflow.
+    batchRecordsStartTime :: Prelude.Text,
+    -- | End datetime of records pulled in batch during execution of workflow
+    -- step for @APPFLOW_INTEGRATION@ workflow.
+    batchRecordsEndTime :: Prelude.Text,
+    -- | Creation timestamp of workflow step for @APPFLOW_INTEGRATION@ workflow.
+    createdAt :: Data.POSIX,
+    -- | Last updated timestamp for workflow step for @APPFLOW_INTEGRATION@
+    -- workflow.
+    lastUpdatedAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppflowIntegrationWorkflowStep' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'flowName', 'appflowIntegrationWorkflowStep_flowName' - Name of the flow created during execution of workflow step.
+-- @APPFLOW_INTEGRATION@ workflow type creates an appflow flow during
+-- workflow step execution on the customers behalf.
+--
+-- 'status', 'appflowIntegrationWorkflowStep_status' - Workflow step status for @APPFLOW_INTEGRATION@ workflow.
+--
+-- 'executionMessage', 'appflowIntegrationWorkflowStep_executionMessage' - Message indicating execution of workflow step for @APPFLOW_INTEGRATION@
+-- workflow.
+--
+-- 'recordsProcessed', 'appflowIntegrationWorkflowStep_recordsProcessed' - Total number of records processed during execution of workflow step for
+-- @APPFLOW_INTEGRATION@ workflow.
+--
+-- 'batchRecordsStartTime', 'appflowIntegrationWorkflowStep_batchRecordsStartTime' - Start datetime of records pulled in batch during execution of workflow
+-- step for @APPFLOW_INTEGRATION@ workflow.
+--
+-- 'batchRecordsEndTime', 'appflowIntegrationWorkflowStep_batchRecordsEndTime' - End datetime of records pulled in batch during execution of workflow
+-- step for @APPFLOW_INTEGRATION@ workflow.
+--
+-- 'createdAt', 'appflowIntegrationWorkflowStep_createdAt' - Creation timestamp of workflow step for @APPFLOW_INTEGRATION@ workflow.
+--
+-- 'lastUpdatedAt', 'appflowIntegrationWorkflowStep_lastUpdatedAt' - Last updated timestamp for workflow step for @APPFLOW_INTEGRATION@
+-- workflow.
+newAppflowIntegrationWorkflowStep ::
+  -- | 'flowName'
+  Prelude.Text ->
+  -- | 'status'
+  Status ->
+  -- | 'executionMessage'
+  Prelude.Text ->
+  -- | 'recordsProcessed'
+  Prelude.Integer ->
+  -- | 'batchRecordsStartTime'
+  Prelude.Text ->
+  -- | 'batchRecordsEndTime'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'lastUpdatedAt'
+  Prelude.UTCTime ->
+  AppflowIntegrationWorkflowStep
+newAppflowIntegrationWorkflowStep
+  pFlowName_
+  pStatus_
+  pExecutionMessage_
+  pRecordsProcessed_
+  pBatchRecordsStartTime_
+  pBatchRecordsEndTime_
+  pCreatedAt_
+  pLastUpdatedAt_ =
+    AppflowIntegrationWorkflowStep'
+      { flowName =
+          pFlowName_,
+        status = pStatus_,
+        executionMessage = pExecutionMessage_,
+        recordsProcessed = pRecordsProcessed_,
+        batchRecordsStartTime =
+          pBatchRecordsStartTime_,
+        batchRecordsEndTime = pBatchRecordsEndTime_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        lastUpdatedAt =
+          Data._Time Lens.# pLastUpdatedAt_
+      }
+
+-- | Name of the flow created during execution of workflow step.
+-- @APPFLOW_INTEGRATION@ workflow type creates an appflow flow during
+-- workflow step execution on the customers behalf.
+appflowIntegrationWorkflowStep_flowName :: Lens.Lens' AppflowIntegrationWorkflowStep Prelude.Text
+appflowIntegrationWorkflowStep_flowName = Lens.lens (\AppflowIntegrationWorkflowStep' {flowName} -> flowName) (\s@AppflowIntegrationWorkflowStep' {} a -> s {flowName = a} :: AppflowIntegrationWorkflowStep)
+
+-- | Workflow step status for @APPFLOW_INTEGRATION@ workflow.
+appflowIntegrationWorkflowStep_status :: Lens.Lens' AppflowIntegrationWorkflowStep Status
+appflowIntegrationWorkflowStep_status = Lens.lens (\AppflowIntegrationWorkflowStep' {status} -> status) (\s@AppflowIntegrationWorkflowStep' {} a -> s {status = a} :: AppflowIntegrationWorkflowStep)
+
+-- | Message indicating execution of workflow step for @APPFLOW_INTEGRATION@
+-- workflow.
+appflowIntegrationWorkflowStep_executionMessage :: Lens.Lens' AppflowIntegrationWorkflowStep Prelude.Text
+appflowIntegrationWorkflowStep_executionMessage = Lens.lens (\AppflowIntegrationWorkflowStep' {executionMessage} -> executionMessage) (\s@AppflowIntegrationWorkflowStep' {} a -> s {executionMessage = a} :: AppflowIntegrationWorkflowStep)
+
+-- | Total number of records processed during execution of workflow step for
+-- @APPFLOW_INTEGRATION@ workflow.
+appflowIntegrationWorkflowStep_recordsProcessed :: Lens.Lens' AppflowIntegrationWorkflowStep Prelude.Integer
+appflowIntegrationWorkflowStep_recordsProcessed = Lens.lens (\AppflowIntegrationWorkflowStep' {recordsProcessed} -> recordsProcessed) (\s@AppflowIntegrationWorkflowStep' {} a -> s {recordsProcessed = a} :: AppflowIntegrationWorkflowStep)
+
+-- | Start datetime of records pulled in batch during execution of workflow
+-- step for @APPFLOW_INTEGRATION@ workflow.
+appflowIntegrationWorkflowStep_batchRecordsStartTime :: Lens.Lens' AppflowIntegrationWorkflowStep Prelude.Text
+appflowIntegrationWorkflowStep_batchRecordsStartTime = Lens.lens (\AppflowIntegrationWorkflowStep' {batchRecordsStartTime} -> batchRecordsStartTime) (\s@AppflowIntegrationWorkflowStep' {} a -> s {batchRecordsStartTime = a} :: AppflowIntegrationWorkflowStep)
+
+-- | End datetime of records pulled in batch during execution of workflow
+-- step for @APPFLOW_INTEGRATION@ workflow.
+appflowIntegrationWorkflowStep_batchRecordsEndTime :: Lens.Lens' AppflowIntegrationWorkflowStep Prelude.Text
+appflowIntegrationWorkflowStep_batchRecordsEndTime = Lens.lens (\AppflowIntegrationWorkflowStep' {batchRecordsEndTime} -> batchRecordsEndTime) (\s@AppflowIntegrationWorkflowStep' {} a -> s {batchRecordsEndTime = a} :: AppflowIntegrationWorkflowStep)
+
+-- | Creation timestamp of workflow step for @APPFLOW_INTEGRATION@ workflow.
+appflowIntegrationWorkflowStep_createdAt :: Lens.Lens' AppflowIntegrationWorkflowStep Prelude.UTCTime
+appflowIntegrationWorkflowStep_createdAt = Lens.lens (\AppflowIntegrationWorkflowStep' {createdAt} -> createdAt) (\s@AppflowIntegrationWorkflowStep' {} a -> s {createdAt = a} :: AppflowIntegrationWorkflowStep) Prelude.. Data._Time
+
+-- | Last updated timestamp for workflow step for @APPFLOW_INTEGRATION@
+-- workflow.
+appflowIntegrationWorkflowStep_lastUpdatedAt :: Lens.Lens' AppflowIntegrationWorkflowStep Prelude.UTCTime
+appflowIntegrationWorkflowStep_lastUpdatedAt = Lens.lens (\AppflowIntegrationWorkflowStep' {lastUpdatedAt} -> lastUpdatedAt) (\s@AppflowIntegrationWorkflowStep' {} a -> s {lastUpdatedAt = a} :: AppflowIntegrationWorkflowStep) Prelude.. Data._Time
+
+instance Data.FromJSON AppflowIntegrationWorkflowStep where
+  parseJSON =
+    Data.withObject
+      "AppflowIntegrationWorkflowStep"
+      ( \x ->
+          AppflowIntegrationWorkflowStep'
+            Prelude.<$> (x Data..: "FlowName")
+            Prelude.<*> (x Data..: "Status")
+            Prelude.<*> (x Data..: "ExecutionMessage")
+            Prelude.<*> (x Data..: "RecordsProcessed")
+            Prelude.<*> (x Data..: "BatchRecordsStartTime")
+            Prelude.<*> (x Data..: "BatchRecordsEndTime")
+            Prelude.<*> (x Data..: "CreatedAt")
+            Prelude.<*> (x Data..: "LastUpdatedAt")
+      )
+
+instance
+  Prelude.Hashable
+    AppflowIntegrationWorkflowStep
+  where
+  hashWithSalt
+    _salt
+    AppflowIntegrationWorkflowStep' {..} =
+      _salt
+        `Prelude.hashWithSalt` flowName
+        `Prelude.hashWithSalt` status
+        `Prelude.hashWithSalt` executionMessage
+        `Prelude.hashWithSalt` recordsProcessed
+        `Prelude.hashWithSalt` batchRecordsStartTime
+        `Prelude.hashWithSalt` batchRecordsEndTime
+        `Prelude.hashWithSalt` createdAt
+        `Prelude.hashWithSalt` lastUpdatedAt
+
+instance
+  Prelude.NFData
+    AppflowIntegrationWorkflowStep
+  where
+  rnf AppflowIntegrationWorkflowStep' {..} =
+    Prelude.rnf flowName
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf executionMessage
+      `Prelude.seq` Prelude.rnf recordsProcessed
+      `Prelude.seq` Prelude.rnf batchRecordsStartTime
+      `Prelude.seq` Prelude.rnf batchRecordsEndTime
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
diff --git a/gen/Amazonka/CustomerProfiles/Types/AutoMerging.hs b/gen/Amazonka/CustomerProfiles/Types/AutoMerging.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/AutoMerging.hs
@@ -0,0 +1,150 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.AutoMerging
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.AutoMerging where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.ConflictResolution
+import Amazonka.CustomerProfiles.Types.Consolidation
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration settings for how to perform the auto-merging of profiles.
+--
+-- /See:/ 'newAutoMerging' smart constructor.
+data AutoMerging = AutoMerging'
+  { -- | How the auto-merging process should resolve conflicts between different
+    -- profiles. For example, if Profile A and Profile B have the same
+    -- @FirstName@ and @LastName@ (and that is the matching criteria), which
+    -- @EmailAddress@ should be used?
+    conflictResolution :: Prelude.Maybe ConflictResolution,
+    -- | A list of matching attributes that represent matching criteria. If two
+    -- profiles meet at least one of the requirements in the matching
+    -- attributes list, they will be merged.
+    consolidation :: Prelude.Maybe Consolidation,
+    -- | A number between 0 and 1 that represents the minimum confidence score
+    -- required for profiles within a matching group to be merged during the
+    -- auto-merge process. A higher score means higher similarity required to
+    -- merge profiles.
+    minAllowedConfidenceScoreForMerging :: Prelude.Maybe Prelude.Double,
+    -- | The flag that enables the auto-merging of duplicate profiles.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AutoMerging' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'conflictResolution', 'autoMerging_conflictResolution' - How the auto-merging process should resolve conflicts between different
+-- profiles. For example, if Profile A and Profile B have the same
+-- @FirstName@ and @LastName@ (and that is the matching criteria), which
+-- @EmailAddress@ should be used?
+--
+-- 'consolidation', 'autoMerging_consolidation' - A list of matching attributes that represent matching criteria. If two
+-- profiles meet at least one of the requirements in the matching
+-- attributes list, they will be merged.
+--
+-- 'minAllowedConfidenceScoreForMerging', 'autoMerging_minAllowedConfidenceScoreForMerging' - A number between 0 and 1 that represents the minimum confidence score
+-- required for profiles within a matching group to be merged during the
+-- auto-merge process. A higher score means higher similarity required to
+-- merge profiles.
+--
+-- 'enabled', 'autoMerging_enabled' - The flag that enables the auto-merging of duplicate profiles.
+newAutoMerging ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  AutoMerging
+newAutoMerging pEnabled_ =
+  AutoMerging'
+    { conflictResolution = Prelude.Nothing,
+      consolidation = Prelude.Nothing,
+      minAllowedConfidenceScoreForMerging =
+        Prelude.Nothing,
+      enabled = pEnabled_
+    }
+
+-- | How the auto-merging process should resolve conflicts between different
+-- profiles. For example, if Profile A and Profile B have the same
+-- @FirstName@ and @LastName@ (and that is the matching criteria), which
+-- @EmailAddress@ should be used?
+autoMerging_conflictResolution :: Lens.Lens' AutoMerging (Prelude.Maybe ConflictResolution)
+autoMerging_conflictResolution = Lens.lens (\AutoMerging' {conflictResolution} -> conflictResolution) (\s@AutoMerging' {} a -> s {conflictResolution = a} :: AutoMerging)
+
+-- | A list of matching attributes that represent matching criteria. If two
+-- profiles meet at least one of the requirements in the matching
+-- attributes list, they will be merged.
+autoMerging_consolidation :: Lens.Lens' AutoMerging (Prelude.Maybe Consolidation)
+autoMerging_consolidation = Lens.lens (\AutoMerging' {consolidation} -> consolidation) (\s@AutoMerging' {} a -> s {consolidation = a} :: AutoMerging)
+
+-- | A number between 0 and 1 that represents the minimum confidence score
+-- required for profiles within a matching group to be merged during the
+-- auto-merge process. A higher score means higher similarity required to
+-- merge profiles.
+autoMerging_minAllowedConfidenceScoreForMerging :: Lens.Lens' AutoMerging (Prelude.Maybe Prelude.Double)
+autoMerging_minAllowedConfidenceScoreForMerging = Lens.lens (\AutoMerging' {minAllowedConfidenceScoreForMerging} -> minAllowedConfidenceScoreForMerging) (\s@AutoMerging' {} a -> s {minAllowedConfidenceScoreForMerging = a} :: AutoMerging)
+
+-- | The flag that enables the auto-merging of duplicate profiles.
+autoMerging_enabled :: Lens.Lens' AutoMerging Prelude.Bool
+autoMerging_enabled = Lens.lens (\AutoMerging' {enabled} -> enabled) (\s@AutoMerging' {} a -> s {enabled = a} :: AutoMerging)
+
+instance Data.FromJSON AutoMerging where
+  parseJSON =
+    Data.withObject
+      "AutoMerging"
+      ( \x ->
+          AutoMerging'
+            Prelude.<$> (x Data..:? "ConflictResolution")
+            Prelude.<*> (x Data..:? "Consolidation")
+            Prelude.<*> (x Data..:? "MinAllowedConfidenceScoreForMerging")
+            Prelude.<*> (x Data..: "Enabled")
+      )
+
+instance Prelude.Hashable AutoMerging where
+  hashWithSalt _salt AutoMerging' {..} =
+    _salt
+      `Prelude.hashWithSalt` conflictResolution
+      `Prelude.hashWithSalt` consolidation
+      `Prelude.hashWithSalt` minAllowedConfidenceScoreForMerging
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData AutoMerging where
+  rnf AutoMerging' {..} =
+    Prelude.rnf conflictResolution
+      `Prelude.seq` Prelude.rnf consolidation
+      `Prelude.seq` Prelude.rnf minAllowedConfidenceScoreForMerging
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToJSON AutoMerging where
+  toJSON AutoMerging' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ConflictResolution" Data..=)
+              Prelude.<$> conflictResolution,
+            ("Consolidation" Data..=) Prelude.<$> consolidation,
+            ("MinAllowedConfidenceScoreForMerging" Data..=)
+              Prelude.<$> minAllowedConfidenceScoreForMerging,
+            Prelude.Just ("Enabled" Data..= enabled)
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/Batch.hs b/gen/Amazonka/CustomerProfiles/Types/Batch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/Batch.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.CustomerProfiles.Types.Batch
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.Batch where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Batch defines the boundaries for ingestion for each step in
+-- @APPFLOW_INTEGRATION@ workflow. @APPFLOW_INTEGRATION@ workflow splits
+-- ingestion based on these boundaries.
+--
+-- /See:/ 'newBatch' smart constructor.
+data Batch = Batch'
+  { -- | Start time of batch to split ingestion.
+    startTime :: Data.POSIX,
+    -- | End time of batch to split ingestion.
+    endTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Batch' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'startTime', 'batch_startTime' - Start time of batch to split ingestion.
+--
+-- 'endTime', 'batch_endTime' - End time of batch to split ingestion.
+newBatch ::
+  -- | 'startTime'
+  Prelude.UTCTime ->
+  -- | 'endTime'
+  Prelude.UTCTime ->
+  Batch
+newBatch pStartTime_ pEndTime_ =
+  Batch'
+    { startTime = Data._Time Lens.# pStartTime_,
+      endTime = Data._Time Lens.# pEndTime_
+    }
+
+-- | Start time of batch to split ingestion.
+batch_startTime :: Lens.Lens' Batch Prelude.UTCTime
+batch_startTime = Lens.lens (\Batch' {startTime} -> startTime) (\s@Batch' {} a -> s {startTime = a} :: Batch) Prelude.. Data._Time
+
+-- | End time of batch to split ingestion.
+batch_endTime :: Lens.Lens' Batch Prelude.UTCTime
+batch_endTime = Lens.lens (\Batch' {endTime} -> endTime) (\s@Batch' {} a -> s {endTime = a} :: Batch) Prelude.. Data._Time
+
+instance Prelude.Hashable Batch where
+  hashWithSalt _salt Batch' {..} =
+    _salt
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` endTime
+
+instance Prelude.NFData Batch where
+  rnf Batch' {..} =
+    Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf endTime
+
+instance Data.ToJSON Batch where
+  toJSON Batch' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("StartTime" Data..= startTime),
+            Prelude.Just ("EndTime" Data..= endTime)
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/ConflictResolution.hs b/gen/Amazonka/CustomerProfiles/Types/ConflictResolution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ConflictResolution.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.ConflictResolution
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ConflictResolution where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.ConflictResolvingModel
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | How the auto-merging process should resolve conflicts between different
+-- profiles.
+--
+-- /See:/ 'newConflictResolution' smart constructor.
+data ConflictResolution = ConflictResolution'
+  { -- | The @ObjectType@ name that is used to resolve profile merging conflicts
+    -- when choosing @SOURCE@ as the @ConflictResolvingModel@.
+    sourceName :: Prelude.Maybe Prelude.Text,
+    -- | How the auto-merging process should resolve conflicts between different
+    -- profiles.
+    --
+    -- -   @RECENCY@: Uses the data that was most recently updated.
+    --
+    -- -   @SOURCE@: Uses the data from a specific source. For example, if a
+    --     company has been aquired or two departments have merged, data from
+    --     the specified source is used. If two duplicate profiles are from the
+    --     same source, then @RECENCY@ is used again.
+    conflictResolvingModel :: ConflictResolvingModel
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConflictResolution' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sourceName', 'conflictResolution_sourceName' - The @ObjectType@ name that is used to resolve profile merging conflicts
+-- when choosing @SOURCE@ as the @ConflictResolvingModel@.
+--
+-- 'conflictResolvingModel', 'conflictResolution_conflictResolvingModel' - How the auto-merging process should resolve conflicts between different
+-- profiles.
+--
+-- -   @RECENCY@: Uses the data that was most recently updated.
+--
+-- -   @SOURCE@: Uses the data from a specific source. For example, if a
+--     company has been aquired or two departments have merged, data from
+--     the specified source is used. If two duplicate profiles are from the
+--     same source, then @RECENCY@ is used again.
+newConflictResolution ::
+  -- | 'conflictResolvingModel'
+  ConflictResolvingModel ->
+  ConflictResolution
+newConflictResolution pConflictResolvingModel_ =
+  ConflictResolution'
+    { sourceName = Prelude.Nothing,
+      conflictResolvingModel = pConflictResolvingModel_
+    }
+
+-- | The @ObjectType@ name that is used to resolve profile merging conflicts
+-- when choosing @SOURCE@ as the @ConflictResolvingModel@.
+conflictResolution_sourceName :: Lens.Lens' ConflictResolution (Prelude.Maybe Prelude.Text)
+conflictResolution_sourceName = Lens.lens (\ConflictResolution' {sourceName} -> sourceName) (\s@ConflictResolution' {} a -> s {sourceName = a} :: ConflictResolution)
+
+-- | How the auto-merging process should resolve conflicts between different
+-- profiles.
+--
+-- -   @RECENCY@: Uses the data that was most recently updated.
+--
+-- -   @SOURCE@: Uses the data from a specific source. For example, if a
+--     company has been aquired or two departments have merged, data from
+--     the specified source is used. If two duplicate profiles are from the
+--     same source, then @RECENCY@ is used again.
+conflictResolution_conflictResolvingModel :: Lens.Lens' ConflictResolution ConflictResolvingModel
+conflictResolution_conflictResolvingModel = Lens.lens (\ConflictResolution' {conflictResolvingModel} -> conflictResolvingModel) (\s@ConflictResolution' {} a -> s {conflictResolvingModel = a} :: ConflictResolution)
+
+instance Data.FromJSON ConflictResolution where
+  parseJSON =
+    Data.withObject
+      "ConflictResolution"
+      ( \x ->
+          ConflictResolution'
+            Prelude.<$> (x Data..:? "SourceName")
+            Prelude.<*> (x Data..: "ConflictResolvingModel")
+      )
+
+instance Prelude.Hashable ConflictResolution where
+  hashWithSalt _salt ConflictResolution' {..} =
+    _salt
+      `Prelude.hashWithSalt` sourceName
+      `Prelude.hashWithSalt` conflictResolvingModel
+
+instance Prelude.NFData ConflictResolution where
+  rnf ConflictResolution' {..} =
+    Prelude.rnf sourceName
+      `Prelude.seq` Prelude.rnf conflictResolvingModel
+
+instance Data.ToJSON ConflictResolution where
+  toJSON ConflictResolution' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SourceName" Data..=) Prelude.<$> sourceName,
+            Prelude.Just
+              ( "ConflictResolvingModel"
+                  Data..= conflictResolvingModel
+              )
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/ConflictResolvingModel.hs b/gen/Amazonka/CustomerProfiles/Types/ConflictResolvingModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ConflictResolvingModel.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.ConflictResolvingModel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ConflictResolvingModel
+  ( ConflictResolvingModel
+      ( ..,
+        ConflictResolvingModel_RECENCY,
+        ConflictResolvingModel_SOURCE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConflictResolvingModel = ConflictResolvingModel'
+  { fromConflictResolvingModel ::
+      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 ConflictResolvingModel_RECENCY :: ConflictResolvingModel
+pattern ConflictResolvingModel_RECENCY = ConflictResolvingModel' "RECENCY"
+
+pattern ConflictResolvingModel_SOURCE :: ConflictResolvingModel
+pattern ConflictResolvingModel_SOURCE = ConflictResolvingModel' "SOURCE"
+
+{-# COMPLETE
+  ConflictResolvingModel_RECENCY,
+  ConflictResolvingModel_SOURCE,
+  ConflictResolvingModel'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/ConnectorOperator.hs b/gen/Amazonka/CustomerProfiles/Types/ConnectorOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ConnectorOperator.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.ConnectorOperator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ConnectorOperator where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.MarketoConnectorOperator
+import Amazonka.CustomerProfiles.Types.S3ConnectorOperator
+import Amazonka.CustomerProfiles.Types.SalesforceConnectorOperator
+import Amazonka.CustomerProfiles.Types.ServiceNowConnectorOperator
+import Amazonka.CustomerProfiles.Types.ZendeskConnectorOperator
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The operation to be performed on the provided source fields.
+--
+-- /See:/ 'newConnectorOperator' smart constructor.
+data ConnectorOperator = ConnectorOperator'
+  { -- | The operation to be performed on the provided Marketo source fields.
+    marketo :: Prelude.Maybe MarketoConnectorOperator,
+    -- | The operation to be performed on the provided Amazon S3 source fields.
+    s3 :: Prelude.Maybe S3ConnectorOperator,
+    -- | The operation to be performed on the provided Salesforce source fields.
+    salesforce :: Prelude.Maybe SalesforceConnectorOperator,
+    -- | The operation to be performed on the provided ServiceNow source fields.
+    serviceNow :: Prelude.Maybe ServiceNowConnectorOperator,
+    -- | The operation to be performed on the provided Zendesk source fields.
+    zendesk :: Prelude.Maybe ZendeskConnectorOperator
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConnectorOperator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'marketo', 'connectorOperator_marketo' - The operation to be performed on the provided Marketo source fields.
+--
+-- 's3', 'connectorOperator_s3' - The operation to be performed on the provided Amazon S3 source fields.
+--
+-- 'salesforce', 'connectorOperator_salesforce' - The operation to be performed on the provided Salesforce source fields.
+--
+-- 'serviceNow', 'connectorOperator_serviceNow' - The operation to be performed on the provided ServiceNow source fields.
+--
+-- 'zendesk', 'connectorOperator_zendesk' - The operation to be performed on the provided Zendesk source fields.
+newConnectorOperator ::
+  ConnectorOperator
+newConnectorOperator =
+  ConnectorOperator'
+    { marketo = Prelude.Nothing,
+      s3 = Prelude.Nothing,
+      salesforce = Prelude.Nothing,
+      serviceNow = Prelude.Nothing,
+      zendesk = Prelude.Nothing
+    }
+
+-- | The operation to be performed on the provided Marketo source fields.
+connectorOperator_marketo :: Lens.Lens' ConnectorOperator (Prelude.Maybe MarketoConnectorOperator)
+connectorOperator_marketo = Lens.lens (\ConnectorOperator' {marketo} -> marketo) (\s@ConnectorOperator' {} a -> s {marketo = a} :: ConnectorOperator)
+
+-- | The operation to be performed on the provided Amazon S3 source fields.
+connectorOperator_s3 :: Lens.Lens' ConnectorOperator (Prelude.Maybe S3ConnectorOperator)
+connectorOperator_s3 = Lens.lens (\ConnectorOperator' {s3} -> s3) (\s@ConnectorOperator' {} a -> s {s3 = a} :: ConnectorOperator)
+
+-- | The operation to be performed on the provided Salesforce source fields.
+connectorOperator_salesforce :: Lens.Lens' ConnectorOperator (Prelude.Maybe SalesforceConnectorOperator)
+connectorOperator_salesforce = Lens.lens (\ConnectorOperator' {salesforce} -> salesforce) (\s@ConnectorOperator' {} a -> s {salesforce = a} :: ConnectorOperator)
+
+-- | The operation to be performed on the provided ServiceNow source fields.
+connectorOperator_serviceNow :: Lens.Lens' ConnectorOperator (Prelude.Maybe ServiceNowConnectorOperator)
+connectorOperator_serviceNow = Lens.lens (\ConnectorOperator' {serviceNow} -> serviceNow) (\s@ConnectorOperator' {} a -> s {serviceNow = a} :: ConnectorOperator)
+
+-- | The operation to be performed on the provided Zendesk source fields.
+connectorOperator_zendesk :: Lens.Lens' ConnectorOperator (Prelude.Maybe ZendeskConnectorOperator)
+connectorOperator_zendesk = Lens.lens (\ConnectorOperator' {zendesk} -> zendesk) (\s@ConnectorOperator' {} a -> s {zendesk = a} :: ConnectorOperator)
+
+instance Prelude.Hashable ConnectorOperator where
+  hashWithSalt _salt ConnectorOperator' {..} =
+    _salt
+      `Prelude.hashWithSalt` marketo
+      `Prelude.hashWithSalt` s3
+      `Prelude.hashWithSalt` salesforce
+      `Prelude.hashWithSalt` serviceNow
+      `Prelude.hashWithSalt` zendesk
+
+instance Prelude.NFData ConnectorOperator where
+  rnf ConnectorOperator' {..} =
+    Prelude.rnf marketo
+      `Prelude.seq` Prelude.rnf s3
+      `Prelude.seq` Prelude.rnf salesforce
+      `Prelude.seq` Prelude.rnf serviceNow
+      `Prelude.seq` Prelude.rnf zendesk
+
+instance Data.ToJSON ConnectorOperator where
+  toJSON ConnectorOperator' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Marketo" Data..=) Prelude.<$> marketo,
+            ("S3" Data..=) Prelude.<$> s3,
+            ("Salesforce" Data..=) Prelude.<$> salesforce,
+            ("ServiceNow" Data..=) Prelude.<$> serviceNow,
+            ("Zendesk" Data..=) Prelude.<$> zendesk
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/Consolidation.hs b/gen/Amazonka/CustomerProfiles/Types/Consolidation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/Consolidation.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.Consolidation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.Consolidation where
+
+import qualified 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 matching criteria to be used during the auto-merging process.
+--
+-- /See:/ 'newConsolidation' smart constructor.
+data Consolidation = Consolidation'
+  { -- | A list of matching criteria.
+    matchingAttributesList :: Prelude.NonEmpty (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Consolidation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'matchingAttributesList', 'consolidation_matchingAttributesList' - A list of matching criteria.
+newConsolidation ::
+  -- | 'matchingAttributesList'
+  Prelude.NonEmpty (Prelude.NonEmpty Prelude.Text) ->
+  Consolidation
+newConsolidation pMatchingAttributesList_ =
+  Consolidation'
+    { matchingAttributesList =
+        Lens.coerced Lens.# pMatchingAttributesList_
+    }
+
+-- | A list of matching criteria.
+consolidation_matchingAttributesList :: Lens.Lens' Consolidation (Prelude.NonEmpty (Prelude.NonEmpty Prelude.Text))
+consolidation_matchingAttributesList = Lens.lens (\Consolidation' {matchingAttributesList} -> matchingAttributesList) (\s@Consolidation' {} a -> s {matchingAttributesList = a} :: Consolidation) Prelude.. Lens.coerced
+
+instance Data.FromJSON Consolidation where
+  parseJSON =
+    Data.withObject
+      "Consolidation"
+      ( \x ->
+          Consolidation'
+            Prelude.<$> (x Data..: "MatchingAttributesList")
+      )
+
+instance Prelude.Hashable Consolidation where
+  hashWithSalt _salt Consolidation' {..} =
+    _salt `Prelude.hashWithSalt` matchingAttributesList
+
+instance Prelude.NFData Consolidation where
+  rnf Consolidation' {..} =
+    Prelude.rnf matchingAttributesList
+
+instance Data.ToJSON Consolidation where
+  toJSON Consolidation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "MatchingAttributesList"
+                  Data..= matchingAttributesList
+              )
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/DataPullMode.hs b/gen/Amazonka/CustomerProfiles/Types/DataPullMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/DataPullMode.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.DataPullMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.DataPullMode
+  ( DataPullMode
+      ( ..,
+        DataPullMode_Complete,
+        DataPullMode_Incremental
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DataPullMode = DataPullMode'
+  { fromDataPullMode ::
+      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 DataPullMode_Complete :: DataPullMode
+pattern DataPullMode_Complete = DataPullMode' "Complete"
+
+pattern DataPullMode_Incremental :: DataPullMode
+pattern DataPullMode_Incremental = DataPullMode' "Incremental"
+
+{-# COMPLETE
+  DataPullMode_Complete,
+  DataPullMode_Incremental,
+  DataPullMode'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/DomainStats.hs b/gen/Amazonka/CustomerProfiles/Types/DomainStats.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/DomainStats.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.CustomerProfiles.Types.DomainStats
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.DomainStats where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Usage-specific statistics about the domain.
+--
+-- /See:/ 'newDomainStats' smart constructor.
+data DomainStats = DomainStats'
+  { -- | The number of profiles that you are currently paying for in the domain.
+    -- If you have more than 100 objects associated with a single profile, that
+    -- profile counts as two profiles. If you have more than 200 objects, that
+    -- profile counts as three, and so on.
+    meteringProfileCount :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of objects in domain.
+    objectCount :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of profiles currently in the domain.
+    profileCount :: Prelude.Maybe Prelude.Integer,
+    -- | The total size, in bytes, of all objects in the domain.
+    totalSize :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DomainStats' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'meteringProfileCount', 'domainStats_meteringProfileCount' - The number of profiles that you are currently paying for in the domain.
+-- If you have more than 100 objects associated with a single profile, that
+-- profile counts as two profiles. If you have more than 200 objects, that
+-- profile counts as three, and so on.
+--
+-- 'objectCount', 'domainStats_objectCount' - The total number of objects in domain.
+--
+-- 'profileCount', 'domainStats_profileCount' - The total number of profiles currently in the domain.
+--
+-- 'totalSize', 'domainStats_totalSize' - The total size, in bytes, of all objects in the domain.
+newDomainStats ::
+  DomainStats
+newDomainStats =
+  DomainStats'
+    { meteringProfileCount =
+        Prelude.Nothing,
+      objectCount = Prelude.Nothing,
+      profileCount = Prelude.Nothing,
+      totalSize = Prelude.Nothing
+    }
+
+-- | The number of profiles that you are currently paying for in the domain.
+-- If you have more than 100 objects associated with a single profile, that
+-- profile counts as two profiles. If you have more than 200 objects, that
+-- profile counts as three, and so on.
+domainStats_meteringProfileCount :: Lens.Lens' DomainStats (Prelude.Maybe Prelude.Integer)
+domainStats_meteringProfileCount = Lens.lens (\DomainStats' {meteringProfileCount} -> meteringProfileCount) (\s@DomainStats' {} a -> s {meteringProfileCount = a} :: DomainStats)
+
+-- | The total number of objects in domain.
+domainStats_objectCount :: Lens.Lens' DomainStats (Prelude.Maybe Prelude.Integer)
+domainStats_objectCount = Lens.lens (\DomainStats' {objectCount} -> objectCount) (\s@DomainStats' {} a -> s {objectCount = a} :: DomainStats)
+
+-- | The total number of profiles currently in the domain.
+domainStats_profileCount :: Lens.Lens' DomainStats (Prelude.Maybe Prelude.Integer)
+domainStats_profileCount = Lens.lens (\DomainStats' {profileCount} -> profileCount) (\s@DomainStats' {} a -> s {profileCount = a} :: DomainStats)
+
+-- | The total size, in bytes, of all objects in the domain.
+domainStats_totalSize :: Lens.Lens' DomainStats (Prelude.Maybe Prelude.Integer)
+domainStats_totalSize = Lens.lens (\DomainStats' {totalSize} -> totalSize) (\s@DomainStats' {} a -> s {totalSize = a} :: DomainStats)
+
+instance Data.FromJSON DomainStats where
+  parseJSON =
+    Data.withObject
+      "DomainStats"
+      ( \x ->
+          DomainStats'
+            Prelude.<$> (x Data..:? "MeteringProfileCount")
+            Prelude.<*> (x Data..:? "ObjectCount")
+            Prelude.<*> (x Data..:? "ProfileCount")
+            Prelude.<*> (x Data..:? "TotalSize")
+      )
+
+instance Prelude.Hashable DomainStats where
+  hashWithSalt _salt DomainStats' {..} =
+    _salt
+      `Prelude.hashWithSalt` meteringProfileCount
+      `Prelude.hashWithSalt` objectCount
+      `Prelude.hashWithSalt` profileCount
+      `Prelude.hashWithSalt` totalSize
+
+instance Prelude.NFData DomainStats where
+  rnf DomainStats' {..} =
+    Prelude.rnf meteringProfileCount
+      `Prelude.seq` Prelude.rnf objectCount
+      `Prelude.seq` Prelude.rnf profileCount
+      `Prelude.seq` Prelude.rnf totalSize
diff --git a/gen/Amazonka/CustomerProfiles/Types/ExportingConfig.hs b/gen/Amazonka/CustomerProfiles/Types/ExportingConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ExportingConfig.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.ExportingConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ExportingConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.S3ExportingConfig
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration information about the S3 bucket where Identity Resolution
+-- Jobs writes result files.
+--
+-- You need to give Customer Profiles service principal write permission to
+-- your S3 bucket. Otherwise, you\'ll get an exception in the API response.
+-- For an example policy, see
+-- <https://docs.aws.amazon.com/connect/latest/adminguide/cross-service-confused-deputy-prevention.html#customer-profiles-cross-service Amazon Connect Customer Profiles cross-service confused deputy prevention>.
+--
+-- /See:/ 'newExportingConfig' smart constructor.
+data ExportingConfig = ExportingConfig'
+  { -- | The S3 location where Identity Resolution Jobs write result files.
+    s3Exporting :: Prelude.Maybe S3ExportingConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportingConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Exporting', 'exportingConfig_s3Exporting' - The S3 location where Identity Resolution Jobs write result files.
+newExportingConfig ::
+  ExportingConfig
+newExportingConfig =
+  ExportingConfig' {s3Exporting = Prelude.Nothing}
+
+-- | The S3 location where Identity Resolution Jobs write result files.
+exportingConfig_s3Exporting :: Lens.Lens' ExportingConfig (Prelude.Maybe S3ExportingConfig)
+exportingConfig_s3Exporting = Lens.lens (\ExportingConfig' {s3Exporting} -> s3Exporting) (\s@ExportingConfig' {} a -> s {s3Exporting = a} :: ExportingConfig)
+
+instance Data.FromJSON ExportingConfig where
+  parseJSON =
+    Data.withObject
+      "ExportingConfig"
+      ( \x ->
+          ExportingConfig'
+            Prelude.<$> (x Data..:? "S3Exporting")
+      )
+
+instance Prelude.Hashable ExportingConfig where
+  hashWithSalt _salt ExportingConfig' {..} =
+    _salt `Prelude.hashWithSalt` s3Exporting
+
+instance Prelude.NFData ExportingConfig where
+  rnf ExportingConfig' {..} = Prelude.rnf s3Exporting
+
+instance Data.ToJSON ExportingConfig where
+  toJSON ExportingConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("S3Exporting" Data..=) Prelude.<$> s3Exporting]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/ExportingLocation.hs b/gen/Amazonka/CustomerProfiles/Types/ExportingLocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ExportingLocation.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.ExportingLocation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ExportingLocation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.S3ExportingLocation
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The S3 location where Identity Resolution Jobs write result files.
+--
+-- /See:/ 'newExportingLocation' smart constructor.
+data ExportingLocation = ExportingLocation'
+  { -- | Information about the S3 location where Identity Resolution Jobs write
+    -- result files.
+    s3Exporting :: Prelude.Maybe S3ExportingLocation
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportingLocation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Exporting', 'exportingLocation_s3Exporting' - Information about the S3 location where Identity Resolution Jobs write
+-- result files.
+newExportingLocation ::
+  ExportingLocation
+newExportingLocation =
+  ExportingLocation' {s3Exporting = Prelude.Nothing}
+
+-- | Information about the S3 location where Identity Resolution Jobs write
+-- result files.
+exportingLocation_s3Exporting :: Lens.Lens' ExportingLocation (Prelude.Maybe S3ExportingLocation)
+exportingLocation_s3Exporting = Lens.lens (\ExportingLocation' {s3Exporting} -> s3Exporting) (\s@ExportingLocation' {} a -> s {s3Exporting = a} :: ExportingLocation)
+
+instance Data.FromJSON ExportingLocation where
+  parseJSON =
+    Data.withObject
+      "ExportingLocation"
+      ( \x ->
+          ExportingLocation'
+            Prelude.<$> (x Data..:? "S3Exporting")
+      )
+
+instance Prelude.Hashable ExportingLocation where
+  hashWithSalt _salt ExportingLocation' {..} =
+    _salt `Prelude.hashWithSalt` s3Exporting
+
+instance Prelude.NFData ExportingLocation where
+  rnf ExportingLocation' {..} = Prelude.rnf s3Exporting
diff --git a/gen/Amazonka/CustomerProfiles/Types/FieldContentType.hs b/gen/Amazonka/CustomerProfiles/Types/FieldContentType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/FieldContentType.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.FieldContentType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.FieldContentType
+  ( FieldContentType
+      ( ..,
+        FieldContentType_EMAIL_ADDRESS,
+        FieldContentType_NAME,
+        FieldContentType_NUMBER,
+        FieldContentType_PHONE_NUMBER,
+        FieldContentType_STRING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FieldContentType = FieldContentType'
+  { fromFieldContentType ::
+      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 FieldContentType_EMAIL_ADDRESS :: FieldContentType
+pattern FieldContentType_EMAIL_ADDRESS = FieldContentType' "EMAIL_ADDRESS"
+
+pattern FieldContentType_NAME :: FieldContentType
+pattern FieldContentType_NAME = FieldContentType' "NAME"
+
+pattern FieldContentType_NUMBER :: FieldContentType
+pattern FieldContentType_NUMBER = FieldContentType' "NUMBER"
+
+pattern FieldContentType_PHONE_NUMBER :: FieldContentType
+pattern FieldContentType_PHONE_NUMBER = FieldContentType' "PHONE_NUMBER"
+
+pattern FieldContentType_STRING :: FieldContentType
+pattern FieldContentType_STRING = FieldContentType' "STRING"
+
+{-# COMPLETE
+  FieldContentType_EMAIL_ADDRESS,
+  FieldContentType_NAME,
+  FieldContentType_NUMBER,
+  FieldContentType_PHONE_NUMBER,
+  FieldContentType_STRING,
+  FieldContentType'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/FieldSourceProfileIds.hs b/gen/Amazonka/CustomerProfiles/Types/FieldSourceProfileIds.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/FieldSourceProfileIds.hs
@@ -0,0 +1,321 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.FieldSourceProfileIds
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.FieldSourceProfileIds where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A duplicate customer profile that is to be merged into a main profile.
+--
+-- /See:/ 'newFieldSourceProfileIds' smart constructor.
+data FieldSourceProfileIds = FieldSourceProfileIds'
+  { -- | A unique identifier for the account number field to be merged.
+    accountNumber :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the additional information field to be merged.
+    additionalInformation :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the party type field to be merged.
+    address :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the attributes field to be merged.
+    attributes :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A unique identifier for the billing type field to be merged.
+    billingAddress :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the birthdate field to be merged.
+    birthDate :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the party type field to be merged.
+    businessEmailAddress :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the business name field to be merged.
+    businessName :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the business phone number field to be merged.
+    businessPhoneNumber :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the email address field to be merged.
+    emailAddress :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the first name field to be merged.
+    firstName :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the gender field to be merged.
+    gender :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the home phone number field to be merged.
+    homePhoneNumber :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the last name field to be merged.
+    lastName :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the mailing address field to be merged.
+    mailingAddress :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the middle name field to be merged.
+    middleName :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the mobile phone number field to be merged.
+    mobilePhoneNumber :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the party type field to be merged.
+    partyType :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the personal email address field to be merged.
+    personalEmailAddress :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the phone number field to be merged.
+    phoneNumber :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the shipping address field to be merged.
+    shippingAddress :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FieldSourceProfileIds' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountNumber', 'fieldSourceProfileIds_accountNumber' - A unique identifier for the account number field to be merged.
+--
+-- 'additionalInformation', 'fieldSourceProfileIds_additionalInformation' - A unique identifier for the additional information field to be merged.
+--
+-- 'address', 'fieldSourceProfileIds_address' - A unique identifier for the party type field to be merged.
+--
+-- 'attributes', 'fieldSourceProfileIds_attributes' - A unique identifier for the attributes field to be merged.
+--
+-- 'billingAddress', 'fieldSourceProfileIds_billingAddress' - A unique identifier for the billing type field to be merged.
+--
+-- 'birthDate', 'fieldSourceProfileIds_birthDate' - A unique identifier for the birthdate field to be merged.
+--
+-- 'businessEmailAddress', 'fieldSourceProfileIds_businessEmailAddress' - A unique identifier for the party type field to be merged.
+--
+-- 'businessName', 'fieldSourceProfileIds_businessName' - A unique identifier for the business name field to be merged.
+--
+-- 'businessPhoneNumber', 'fieldSourceProfileIds_businessPhoneNumber' - A unique identifier for the business phone number field to be merged.
+--
+-- 'emailAddress', 'fieldSourceProfileIds_emailAddress' - A unique identifier for the email address field to be merged.
+--
+-- 'firstName', 'fieldSourceProfileIds_firstName' - A unique identifier for the first name field to be merged.
+--
+-- 'gender', 'fieldSourceProfileIds_gender' - A unique identifier for the gender field to be merged.
+--
+-- 'homePhoneNumber', 'fieldSourceProfileIds_homePhoneNumber' - A unique identifier for the home phone number field to be merged.
+--
+-- 'lastName', 'fieldSourceProfileIds_lastName' - A unique identifier for the last name field to be merged.
+--
+-- 'mailingAddress', 'fieldSourceProfileIds_mailingAddress' - A unique identifier for the mailing address field to be merged.
+--
+-- 'middleName', 'fieldSourceProfileIds_middleName' - A unique identifier for the middle name field to be merged.
+--
+-- 'mobilePhoneNumber', 'fieldSourceProfileIds_mobilePhoneNumber' - A unique identifier for the mobile phone number field to be merged.
+--
+-- 'partyType', 'fieldSourceProfileIds_partyType' - A unique identifier for the party type field to be merged.
+--
+-- 'personalEmailAddress', 'fieldSourceProfileIds_personalEmailAddress' - A unique identifier for the personal email address field to be merged.
+--
+-- 'phoneNumber', 'fieldSourceProfileIds_phoneNumber' - A unique identifier for the phone number field to be merged.
+--
+-- 'shippingAddress', 'fieldSourceProfileIds_shippingAddress' - A unique identifier for the shipping address field to be merged.
+newFieldSourceProfileIds ::
+  FieldSourceProfileIds
+newFieldSourceProfileIds =
+  FieldSourceProfileIds'
+    { accountNumber =
+        Prelude.Nothing,
+      additionalInformation = Prelude.Nothing,
+      address = Prelude.Nothing,
+      attributes = Prelude.Nothing,
+      billingAddress = Prelude.Nothing,
+      birthDate = Prelude.Nothing,
+      businessEmailAddress = Prelude.Nothing,
+      businessName = Prelude.Nothing,
+      businessPhoneNumber = Prelude.Nothing,
+      emailAddress = Prelude.Nothing,
+      firstName = Prelude.Nothing,
+      gender = Prelude.Nothing,
+      homePhoneNumber = Prelude.Nothing,
+      lastName = Prelude.Nothing,
+      mailingAddress = Prelude.Nothing,
+      middleName = Prelude.Nothing,
+      mobilePhoneNumber = Prelude.Nothing,
+      partyType = Prelude.Nothing,
+      personalEmailAddress = Prelude.Nothing,
+      phoneNumber = Prelude.Nothing,
+      shippingAddress = Prelude.Nothing
+    }
+
+-- | A unique identifier for the account number field to be merged.
+fieldSourceProfileIds_accountNumber :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_accountNumber = Lens.lens (\FieldSourceProfileIds' {accountNumber} -> accountNumber) (\s@FieldSourceProfileIds' {} a -> s {accountNumber = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the additional information field to be merged.
+fieldSourceProfileIds_additionalInformation :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_additionalInformation = Lens.lens (\FieldSourceProfileIds' {additionalInformation} -> additionalInformation) (\s@FieldSourceProfileIds' {} a -> s {additionalInformation = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the party type field to be merged.
+fieldSourceProfileIds_address :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_address = Lens.lens (\FieldSourceProfileIds' {address} -> address) (\s@FieldSourceProfileIds' {} a -> s {address = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the attributes field to be merged.
+fieldSourceProfileIds_attributes :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+fieldSourceProfileIds_attributes = Lens.lens (\FieldSourceProfileIds' {attributes} -> attributes) (\s@FieldSourceProfileIds' {} a -> s {attributes = a} :: FieldSourceProfileIds) Prelude.. Lens.mapping Lens.coerced
+
+-- | A unique identifier for the billing type field to be merged.
+fieldSourceProfileIds_billingAddress :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_billingAddress = Lens.lens (\FieldSourceProfileIds' {billingAddress} -> billingAddress) (\s@FieldSourceProfileIds' {} a -> s {billingAddress = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the birthdate field to be merged.
+fieldSourceProfileIds_birthDate :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_birthDate = Lens.lens (\FieldSourceProfileIds' {birthDate} -> birthDate) (\s@FieldSourceProfileIds' {} a -> s {birthDate = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the party type field to be merged.
+fieldSourceProfileIds_businessEmailAddress :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_businessEmailAddress = Lens.lens (\FieldSourceProfileIds' {businessEmailAddress} -> businessEmailAddress) (\s@FieldSourceProfileIds' {} a -> s {businessEmailAddress = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the business name field to be merged.
+fieldSourceProfileIds_businessName :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_businessName = Lens.lens (\FieldSourceProfileIds' {businessName} -> businessName) (\s@FieldSourceProfileIds' {} a -> s {businessName = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the business phone number field to be merged.
+fieldSourceProfileIds_businessPhoneNumber :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_businessPhoneNumber = Lens.lens (\FieldSourceProfileIds' {businessPhoneNumber} -> businessPhoneNumber) (\s@FieldSourceProfileIds' {} a -> s {businessPhoneNumber = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the email address field to be merged.
+fieldSourceProfileIds_emailAddress :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_emailAddress = Lens.lens (\FieldSourceProfileIds' {emailAddress} -> emailAddress) (\s@FieldSourceProfileIds' {} a -> s {emailAddress = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the first name field to be merged.
+fieldSourceProfileIds_firstName :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_firstName = Lens.lens (\FieldSourceProfileIds' {firstName} -> firstName) (\s@FieldSourceProfileIds' {} a -> s {firstName = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the gender field to be merged.
+fieldSourceProfileIds_gender :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_gender = Lens.lens (\FieldSourceProfileIds' {gender} -> gender) (\s@FieldSourceProfileIds' {} a -> s {gender = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the home phone number field to be merged.
+fieldSourceProfileIds_homePhoneNumber :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_homePhoneNumber = Lens.lens (\FieldSourceProfileIds' {homePhoneNumber} -> homePhoneNumber) (\s@FieldSourceProfileIds' {} a -> s {homePhoneNumber = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the last name field to be merged.
+fieldSourceProfileIds_lastName :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_lastName = Lens.lens (\FieldSourceProfileIds' {lastName} -> lastName) (\s@FieldSourceProfileIds' {} a -> s {lastName = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the mailing address field to be merged.
+fieldSourceProfileIds_mailingAddress :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_mailingAddress = Lens.lens (\FieldSourceProfileIds' {mailingAddress} -> mailingAddress) (\s@FieldSourceProfileIds' {} a -> s {mailingAddress = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the middle name field to be merged.
+fieldSourceProfileIds_middleName :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_middleName = Lens.lens (\FieldSourceProfileIds' {middleName} -> middleName) (\s@FieldSourceProfileIds' {} a -> s {middleName = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the mobile phone number field to be merged.
+fieldSourceProfileIds_mobilePhoneNumber :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_mobilePhoneNumber = Lens.lens (\FieldSourceProfileIds' {mobilePhoneNumber} -> mobilePhoneNumber) (\s@FieldSourceProfileIds' {} a -> s {mobilePhoneNumber = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the party type field to be merged.
+fieldSourceProfileIds_partyType :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_partyType = Lens.lens (\FieldSourceProfileIds' {partyType} -> partyType) (\s@FieldSourceProfileIds' {} a -> s {partyType = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the personal email address field to be merged.
+fieldSourceProfileIds_personalEmailAddress :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_personalEmailAddress = Lens.lens (\FieldSourceProfileIds' {personalEmailAddress} -> personalEmailAddress) (\s@FieldSourceProfileIds' {} a -> s {personalEmailAddress = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the phone number field to be merged.
+fieldSourceProfileIds_phoneNumber :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_phoneNumber = Lens.lens (\FieldSourceProfileIds' {phoneNumber} -> phoneNumber) (\s@FieldSourceProfileIds' {} a -> s {phoneNumber = a} :: FieldSourceProfileIds)
+
+-- | A unique identifier for the shipping address field to be merged.
+fieldSourceProfileIds_shippingAddress :: Lens.Lens' FieldSourceProfileIds (Prelude.Maybe Prelude.Text)
+fieldSourceProfileIds_shippingAddress = Lens.lens (\FieldSourceProfileIds' {shippingAddress} -> shippingAddress) (\s@FieldSourceProfileIds' {} a -> s {shippingAddress = a} :: FieldSourceProfileIds)
+
+instance Prelude.Hashable FieldSourceProfileIds where
+  hashWithSalt _salt FieldSourceProfileIds' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountNumber
+      `Prelude.hashWithSalt` additionalInformation
+      `Prelude.hashWithSalt` address
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` billingAddress
+      `Prelude.hashWithSalt` birthDate
+      `Prelude.hashWithSalt` businessEmailAddress
+      `Prelude.hashWithSalt` businessName
+      `Prelude.hashWithSalt` businessPhoneNumber
+      `Prelude.hashWithSalt` emailAddress
+      `Prelude.hashWithSalt` firstName
+      `Prelude.hashWithSalt` gender
+      `Prelude.hashWithSalt` homePhoneNumber
+      `Prelude.hashWithSalt` lastName
+      `Prelude.hashWithSalt` mailingAddress
+      `Prelude.hashWithSalt` middleName
+      `Prelude.hashWithSalt` mobilePhoneNumber
+      `Prelude.hashWithSalt` partyType
+      `Prelude.hashWithSalt` personalEmailAddress
+      `Prelude.hashWithSalt` phoneNumber
+      `Prelude.hashWithSalt` shippingAddress
+
+instance Prelude.NFData FieldSourceProfileIds where
+  rnf FieldSourceProfileIds' {..} =
+    Prelude.rnf accountNumber
+      `Prelude.seq` Prelude.rnf additionalInformation
+      `Prelude.seq` Prelude.rnf address
+      `Prelude.seq` Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf billingAddress
+      `Prelude.seq` Prelude.rnf birthDate
+      `Prelude.seq` Prelude.rnf businessEmailAddress
+      `Prelude.seq` Prelude.rnf businessName
+      `Prelude.seq` Prelude.rnf businessPhoneNumber
+      `Prelude.seq` Prelude.rnf emailAddress
+      `Prelude.seq` Prelude.rnf firstName
+      `Prelude.seq` Prelude.rnf gender
+      `Prelude.seq` Prelude.rnf homePhoneNumber
+      `Prelude.seq` Prelude.rnf lastName
+      `Prelude.seq` Prelude.rnf mailingAddress
+      `Prelude.seq` Prelude.rnf middleName
+      `Prelude.seq` Prelude.rnf mobilePhoneNumber
+      `Prelude.seq` Prelude.rnf partyType
+      `Prelude.seq` Prelude.rnf personalEmailAddress
+      `Prelude.seq` Prelude.rnf phoneNumber
+      `Prelude.seq` Prelude.rnf shippingAddress
+
+instance Data.ToJSON FieldSourceProfileIds where
+  toJSON FieldSourceProfileIds' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccountNumber" Data..=) Prelude.<$> accountNumber,
+            ("AdditionalInformation" Data..=)
+              Prelude.<$> additionalInformation,
+            ("Address" Data..=) Prelude.<$> address,
+            ("Attributes" Data..=) Prelude.<$> attributes,
+            ("BillingAddress" Data..=)
+              Prelude.<$> billingAddress,
+            ("BirthDate" Data..=) Prelude.<$> birthDate,
+            ("BusinessEmailAddress" Data..=)
+              Prelude.<$> businessEmailAddress,
+            ("BusinessName" Data..=) Prelude.<$> businessName,
+            ("BusinessPhoneNumber" Data..=)
+              Prelude.<$> businessPhoneNumber,
+            ("EmailAddress" Data..=) Prelude.<$> emailAddress,
+            ("FirstName" Data..=) Prelude.<$> firstName,
+            ("Gender" Data..=) Prelude.<$> gender,
+            ("HomePhoneNumber" Data..=)
+              Prelude.<$> homePhoneNumber,
+            ("LastName" Data..=) Prelude.<$> lastName,
+            ("MailingAddress" Data..=)
+              Prelude.<$> mailingAddress,
+            ("MiddleName" Data..=) Prelude.<$> middleName,
+            ("MobilePhoneNumber" Data..=)
+              Prelude.<$> mobilePhoneNumber,
+            ("PartyType" Data..=) Prelude.<$> partyType,
+            ("PersonalEmailAddress" Data..=)
+              Prelude.<$> personalEmailAddress,
+            ("PhoneNumber" Data..=) Prelude.<$> phoneNumber,
+            ("ShippingAddress" Data..=)
+              Prelude.<$> shippingAddress
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/FlowDefinition.hs b/gen/Amazonka/CustomerProfiles/Types/FlowDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/FlowDefinition.hs
@@ -0,0 +1,162 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.FlowDefinition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.FlowDefinition where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.SourceFlowConfig
+import Amazonka.CustomerProfiles.Types.Task
+import Amazonka.CustomerProfiles.Types.TriggerConfig
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configurations that control how Customer Profiles retrieves data
+-- from the source, Amazon AppFlow. Customer Profiles uses this information
+-- to create an AppFlow flow on behalf of customers.
+--
+-- /See:/ 'newFlowDefinition' smart constructor.
+data FlowDefinition = FlowDefinition'
+  { -- | A description of the flow you want to create.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The specified name of the flow. Use underscores (_) or hyphens (-) only.
+    -- Spaces are not allowed.
+    flowName :: Prelude.Text,
+    -- | The Amazon Resource Name of the AWS Key Management Service (KMS) key you
+    -- provide for encryption.
+    kmsArn :: Prelude.Text,
+    -- | The configuration that controls how Customer Profiles retrieves data
+    -- from the source.
+    sourceFlowConfig :: SourceFlowConfig,
+    -- | A list of tasks that Customer Profiles performs while transferring the
+    -- data in the flow run.
+    tasks :: [Task],
+    -- | The trigger settings that determine how and when the flow runs.
+    triggerConfig :: TriggerConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FlowDefinition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'flowDefinition_description' - A description of the flow you want to create.
+--
+-- 'flowName', 'flowDefinition_flowName' - The specified name of the flow. Use underscores (_) or hyphens (-) only.
+-- Spaces are not allowed.
+--
+-- 'kmsArn', 'flowDefinition_kmsArn' - The Amazon Resource Name of the AWS Key Management Service (KMS) key you
+-- provide for encryption.
+--
+-- 'sourceFlowConfig', 'flowDefinition_sourceFlowConfig' - The configuration that controls how Customer Profiles retrieves data
+-- from the source.
+--
+-- 'tasks', 'flowDefinition_tasks' - A list of tasks that Customer Profiles performs while transferring the
+-- data in the flow run.
+--
+-- 'triggerConfig', 'flowDefinition_triggerConfig' - The trigger settings that determine how and when the flow runs.
+newFlowDefinition ::
+  -- | 'flowName'
+  Prelude.Text ->
+  -- | 'kmsArn'
+  Prelude.Text ->
+  -- | 'sourceFlowConfig'
+  SourceFlowConfig ->
+  -- | 'triggerConfig'
+  TriggerConfig ->
+  FlowDefinition
+newFlowDefinition
+  pFlowName_
+  pKmsArn_
+  pSourceFlowConfig_
+  pTriggerConfig_ =
+    FlowDefinition'
+      { description = Prelude.Nothing,
+        flowName = pFlowName_,
+        kmsArn = pKmsArn_,
+        sourceFlowConfig = pSourceFlowConfig_,
+        tasks = Prelude.mempty,
+        triggerConfig = pTriggerConfig_
+      }
+
+-- | A description of the flow you want to create.
+flowDefinition_description :: Lens.Lens' FlowDefinition (Prelude.Maybe Prelude.Text)
+flowDefinition_description = Lens.lens (\FlowDefinition' {description} -> description) (\s@FlowDefinition' {} a -> s {description = a} :: FlowDefinition)
+
+-- | The specified name of the flow. Use underscores (_) or hyphens (-) only.
+-- Spaces are not allowed.
+flowDefinition_flowName :: Lens.Lens' FlowDefinition Prelude.Text
+flowDefinition_flowName = Lens.lens (\FlowDefinition' {flowName} -> flowName) (\s@FlowDefinition' {} a -> s {flowName = a} :: FlowDefinition)
+
+-- | The Amazon Resource Name of the AWS Key Management Service (KMS) key you
+-- provide for encryption.
+flowDefinition_kmsArn :: Lens.Lens' FlowDefinition Prelude.Text
+flowDefinition_kmsArn = Lens.lens (\FlowDefinition' {kmsArn} -> kmsArn) (\s@FlowDefinition' {} a -> s {kmsArn = a} :: FlowDefinition)
+
+-- | The configuration that controls how Customer Profiles retrieves data
+-- from the source.
+flowDefinition_sourceFlowConfig :: Lens.Lens' FlowDefinition SourceFlowConfig
+flowDefinition_sourceFlowConfig = Lens.lens (\FlowDefinition' {sourceFlowConfig} -> sourceFlowConfig) (\s@FlowDefinition' {} a -> s {sourceFlowConfig = a} :: FlowDefinition)
+
+-- | A list of tasks that Customer Profiles performs while transferring the
+-- data in the flow run.
+flowDefinition_tasks :: Lens.Lens' FlowDefinition [Task]
+flowDefinition_tasks = Lens.lens (\FlowDefinition' {tasks} -> tasks) (\s@FlowDefinition' {} a -> s {tasks = a} :: FlowDefinition) Prelude.. Lens.coerced
+
+-- | The trigger settings that determine how and when the flow runs.
+flowDefinition_triggerConfig :: Lens.Lens' FlowDefinition TriggerConfig
+flowDefinition_triggerConfig = Lens.lens (\FlowDefinition' {triggerConfig} -> triggerConfig) (\s@FlowDefinition' {} a -> s {triggerConfig = a} :: FlowDefinition)
+
+instance Prelude.Hashable FlowDefinition where
+  hashWithSalt _salt FlowDefinition' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` flowName
+      `Prelude.hashWithSalt` kmsArn
+      `Prelude.hashWithSalt` sourceFlowConfig
+      `Prelude.hashWithSalt` tasks
+      `Prelude.hashWithSalt` triggerConfig
+
+instance Prelude.NFData FlowDefinition where
+  rnf FlowDefinition' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf flowName
+      `Prelude.seq` Prelude.rnf kmsArn
+      `Prelude.seq` Prelude.rnf sourceFlowConfig
+      `Prelude.seq` Prelude.rnf tasks
+      `Prelude.seq` Prelude.rnf triggerConfig
+
+instance Data.ToJSON FlowDefinition where
+  toJSON FlowDefinition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            Prelude.Just ("FlowName" Data..= flowName),
+            Prelude.Just ("KmsArn" Data..= kmsArn),
+            Prelude.Just
+              ("SourceFlowConfig" Data..= sourceFlowConfig),
+            Prelude.Just ("Tasks" Data..= tasks),
+            Prelude.Just
+              ("TriggerConfig" Data..= triggerConfig)
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/FoundByKeyValue.hs b/gen/Amazonka/CustomerProfiles/Types/FoundByKeyValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/FoundByKeyValue.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.CustomerProfiles.Types.FoundByKeyValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.FoundByKeyValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A data type pair that consists of a @KeyName@ and @Values@ list that
+-- were used to find a profile returned in response to a
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_SearchProfiles.html SearchProfiles>
+-- request.
+--
+-- /See:/ 'newFoundByKeyValue' smart constructor.
+data FoundByKeyValue = FoundByKeyValue'
+  { -- | A searchable identifier of a customer profile.
+    keyName :: Prelude.Maybe Prelude.Text,
+    -- | A list of key values.
+    values :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FoundByKeyValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'keyName', 'foundByKeyValue_keyName' - A searchable identifier of a customer profile.
+--
+-- 'values', 'foundByKeyValue_values' - A list of key values.
+newFoundByKeyValue ::
+  FoundByKeyValue
+newFoundByKeyValue =
+  FoundByKeyValue'
+    { keyName = Prelude.Nothing,
+      values = Prelude.Nothing
+    }
+
+-- | A searchable identifier of a customer profile.
+foundByKeyValue_keyName :: Lens.Lens' FoundByKeyValue (Prelude.Maybe Prelude.Text)
+foundByKeyValue_keyName = Lens.lens (\FoundByKeyValue' {keyName} -> keyName) (\s@FoundByKeyValue' {} a -> s {keyName = a} :: FoundByKeyValue)
+
+-- | A list of key values.
+foundByKeyValue_values :: Lens.Lens' FoundByKeyValue (Prelude.Maybe [Prelude.Text])
+foundByKeyValue_values = Lens.lens (\FoundByKeyValue' {values} -> values) (\s@FoundByKeyValue' {} a -> s {values = a} :: FoundByKeyValue) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON FoundByKeyValue where
+  parseJSON =
+    Data.withObject
+      "FoundByKeyValue"
+      ( \x ->
+          FoundByKeyValue'
+            Prelude.<$> (x Data..:? "KeyName")
+            Prelude.<*> (x Data..:? "Values" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable FoundByKeyValue where
+  hashWithSalt _salt FoundByKeyValue' {..} =
+    _salt
+      `Prelude.hashWithSalt` keyName
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData FoundByKeyValue where
+  rnf FoundByKeyValue' {..} =
+    Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf values
diff --git a/gen/Amazonka/CustomerProfiles/Types/Gender.hs b/gen/Amazonka/CustomerProfiles/Types/Gender.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/Gender.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.Gender
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.Gender
+  ( Gender
+      ( ..,
+        Gender_FEMALE,
+        Gender_MALE,
+        Gender_UNSPECIFIED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Gender = Gender' {fromGender :: 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 Gender_FEMALE :: Gender
+pattern Gender_FEMALE = Gender' "FEMALE"
+
+pattern Gender_MALE :: Gender
+pattern Gender_MALE = Gender' "MALE"
+
+pattern Gender_UNSPECIFIED :: Gender
+pattern Gender_UNSPECIFIED = Gender' "UNSPECIFIED"
+
+{-# COMPLETE
+  Gender_FEMALE,
+  Gender_MALE,
+  Gender_UNSPECIFIED,
+  Gender'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/IdentityResolutionJob.hs b/gen/Amazonka/CustomerProfiles/Types/IdentityResolutionJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/IdentityResolutionJob.hs
@@ -0,0 +1,229 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.IdentityResolutionJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.IdentityResolutionJob where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.ExportingLocation
+import Amazonka.CustomerProfiles.Types.IdentityResolutionJobStatus
+import Amazonka.CustomerProfiles.Types.JobStats
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the Identity Resolution Job.
+--
+-- /See:/ 'newIdentityResolutionJob' smart constructor.
+data IdentityResolutionJob = IdentityResolutionJob'
+  { -- | The unique name of the domain.
+    domainName :: Prelude.Maybe Prelude.Text,
+    -- | The S3 location where the Identity Resolution Job writes result files.
+    exportingLocation :: Prelude.Maybe ExportingLocation,
+    -- | The timestamp of when the job was completed.
+    jobEndTime :: Prelude.Maybe Data.POSIX,
+    -- | The unique identifier of the Identity Resolution Job.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of when the job was started or will be started.
+    jobStartTime :: Prelude.Maybe Data.POSIX,
+    -- | Statistics about an Identity Resolution Job.
+    jobStats :: Prelude.Maybe JobStats,
+    -- | The error messages that are generated when the Identity Resolution Job
+    -- runs.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The status of the Identity Resolution Job.
+    --
+    -- -   @PENDING@: The Identity Resolution Job is scheduled but has not
+    --     started yet. If you turn off the Identity Resolution feature in your
+    --     domain, jobs in the @PENDING@ state are deleted.
+    --
+    -- -   @PREPROCESSING@: The Identity Resolution Job is loading your data.
+    --
+    -- -   @FIND_MATCHING@: The Identity Resolution Job is using the machine
+    --     learning model to identify profiles that belong to the same matching
+    --     group.
+    --
+    -- -   @MERGING@: The Identity Resolution Job is merging duplicate
+    --     profiles.
+    --
+    -- -   @COMPLETED@: The Identity Resolution Job completed successfully.
+    --
+    -- -   @PARTIAL_SUCCESS@: There\'s a system error and not all of the data
+    --     is merged. The Identity Resolution Job writes a message indicating
+    --     the source of the problem.
+    --
+    -- -   @FAILED@: The Identity Resolution Job did not merge any data. It
+    --     writes a message indicating the source of the problem.
+    status :: Prelude.Maybe IdentityResolutionJobStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IdentityResolutionJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'identityResolutionJob_domainName' - The unique name of the domain.
+--
+-- 'exportingLocation', 'identityResolutionJob_exportingLocation' - The S3 location where the Identity Resolution Job writes result files.
+--
+-- 'jobEndTime', 'identityResolutionJob_jobEndTime' - The timestamp of when the job was completed.
+--
+-- 'jobId', 'identityResolutionJob_jobId' - The unique identifier of the Identity Resolution Job.
+--
+-- 'jobStartTime', 'identityResolutionJob_jobStartTime' - The timestamp of when the job was started or will be started.
+--
+-- 'jobStats', 'identityResolutionJob_jobStats' - Statistics about an Identity Resolution Job.
+--
+-- 'message', 'identityResolutionJob_message' - The error messages that are generated when the Identity Resolution Job
+-- runs.
+--
+-- 'status', 'identityResolutionJob_status' - The status of the Identity Resolution Job.
+--
+-- -   @PENDING@: The Identity Resolution Job is scheduled but has not
+--     started yet. If you turn off the Identity Resolution feature in your
+--     domain, jobs in the @PENDING@ state are deleted.
+--
+-- -   @PREPROCESSING@: The Identity Resolution Job is loading your data.
+--
+-- -   @FIND_MATCHING@: The Identity Resolution Job is using the machine
+--     learning model to identify profiles that belong to the same matching
+--     group.
+--
+-- -   @MERGING@: The Identity Resolution Job is merging duplicate
+--     profiles.
+--
+-- -   @COMPLETED@: The Identity Resolution Job completed successfully.
+--
+-- -   @PARTIAL_SUCCESS@: There\'s a system error and not all of the data
+--     is merged. The Identity Resolution Job writes a message indicating
+--     the source of the problem.
+--
+-- -   @FAILED@: The Identity Resolution Job did not merge any data. It
+--     writes a message indicating the source of the problem.
+newIdentityResolutionJob ::
+  IdentityResolutionJob
+newIdentityResolutionJob =
+  IdentityResolutionJob'
+    { domainName =
+        Prelude.Nothing,
+      exportingLocation = Prelude.Nothing,
+      jobEndTime = Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      jobStartTime = Prelude.Nothing,
+      jobStats = Prelude.Nothing,
+      message = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The unique name of the domain.
+identityResolutionJob_domainName :: Lens.Lens' IdentityResolutionJob (Prelude.Maybe Prelude.Text)
+identityResolutionJob_domainName = Lens.lens (\IdentityResolutionJob' {domainName} -> domainName) (\s@IdentityResolutionJob' {} a -> s {domainName = a} :: IdentityResolutionJob)
+
+-- | The S3 location where the Identity Resolution Job writes result files.
+identityResolutionJob_exportingLocation :: Lens.Lens' IdentityResolutionJob (Prelude.Maybe ExportingLocation)
+identityResolutionJob_exportingLocation = Lens.lens (\IdentityResolutionJob' {exportingLocation} -> exportingLocation) (\s@IdentityResolutionJob' {} a -> s {exportingLocation = a} :: IdentityResolutionJob)
+
+-- | The timestamp of when the job was completed.
+identityResolutionJob_jobEndTime :: Lens.Lens' IdentityResolutionJob (Prelude.Maybe Prelude.UTCTime)
+identityResolutionJob_jobEndTime = Lens.lens (\IdentityResolutionJob' {jobEndTime} -> jobEndTime) (\s@IdentityResolutionJob' {} a -> s {jobEndTime = a} :: IdentityResolutionJob) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier of the Identity Resolution Job.
+identityResolutionJob_jobId :: Lens.Lens' IdentityResolutionJob (Prelude.Maybe Prelude.Text)
+identityResolutionJob_jobId = Lens.lens (\IdentityResolutionJob' {jobId} -> jobId) (\s@IdentityResolutionJob' {} a -> s {jobId = a} :: IdentityResolutionJob)
+
+-- | The timestamp of when the job was started or will be started.
+identityResolutionJob_jobStartTime :: Lens.Lens' IdentityResolutionJob (Prelude.Maybe Prelude.UTCTime)
+identityResolutionJob_jobStartTime = Lens.lens (\IdentityResolutionJob' {jobStartTime} -> jobStartTime) (\s@IdentityResolutionJob' {} a -> s {jobStartTime = a} :: IdentityResolutionJob) Prelude.. Lens.mapping Data._Time
+
+-- | Statistics about an Identity Resolution Job.
+identityResolutionJob_jobStats :: Lens.Lens' IdentityResolutionJob (Prelude.Maybe JobStats)
+identityResolutionJob_jobStats = Lens.lens (\IdentityResolutionJob' {jobStats} -> jobStats) (\s@IdentityResolutionJob' {} a -> s {jobStats = a} :: IdentityResolutionJob)
+
+-- | The error messages that are generated when the Identity Resolution Job
+-- runs.
+identityResolutionJob_message :: Lens.Lens' IdentityResolutionJob (Prelude.Maybe Prelude.Text)
+identityResolutionJob_message = Lens.lens (\IdentityResolutionJob' {message} -> message) (\s@IdentityResolutionJob' {} a -> s {message = a} :: IdentityResolutionJob)
+
+-- | The status of the Identity Resolution Job.
+--
+-- -   @PENDING@: The Identity Resolution Job is scheduled but has not
+--     started yet. If you turn off the Identity Resolution feature in your
+--     domain, jobs in the @PENDING@ state are deleted.
+--
+-- -   @PREPROCESSING@: The Identity Resolution Job is loading your data.
+--
+-- -   @FIND_MATCHING@: The Identity Resolution Job is using the machine
+--     learning model to identify profiles that belong to the same matching
+--     group.
+--
+-- -   @MERGING@: The Identity Resolution Job is merging duplicate
+--     profiles.
+--
+-- -   @COMPLETED@: The Identity Resolution Job completed successfully.
+--
+-- -   @PARTIAL_SUCCESS@: There\'s a system error and not all of the data
+--     is merged. The Identity Resolution Job writes a message indicating
+--     the source of the problem.
+--
+-- -   @FAILED@: The Identity Resolution Job did not merge any data. It
+--     writes a message indicating the source of the problem.
+identityResolutionJob_status :: Lens.Lens' IdentityResolutionJob (Prelude.Maybe IdentityResolutionJobStatus)
+identityResolutionJob_status = Lens.lens (\IdentityResolutionJob' {status} -> status) (\s@IdentityResolutionJob' {} a -> s {status = a} :: IdentityResolutionJob)
+
+instance Data.FromJSON IdentityResolutionJob where
+  parseJSON =
+    Data.withObject
+      "IdentityResolutionJob"
+      ( \x ->
+          IdentityResolutionJob'
+            Prelude.<$> (x Data..:? "DomainName")
+            Prelude.<*> (x Data..:? "ExportingLocation")
+            Prelude.<*> (x Data..:? "JobEndTime")
+            Prelude.<*> (x Data..:? "JobId")
+            Prelude.<*> (x Data..:? "JobStartTime")
+            Prelude.<*> (x Data..:? "JobStats")
+            Prelude.<*> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable IdentityResolutionJob where
+  hashWithSalt _salt IdentityResolutionJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` exportingLocation
+      `Prelude.hashWithSalt` jobEndTime
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` jobStartTime
+      `Prelude.hashWithSalt` jobStats
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData IdentityResolutionJob where
+  rnf IdentityResolutionJob' {..} =
+    Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf exportingLocation
+      `Prelude.seq` Prelude.rnf jobEndTime
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf jobStartTime
+      `Prelude.seq` Prelude.rnf jobStats
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/CustomerProfiles/Types/IdentityResolutionJobStatus.hs b/gen/Amazonka/CustomerProfiles/Types/IdentityResolutionJobStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/IdentityResolutionJobStatus.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.IdentityResolutionJobStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.IdentityResolutionJobStatus
+  ( IdentityResolutionJobStatus
+      ( ..,
+        IdentityResolutionJobStatus_COMPLETED,
+        IdentityResolutionJobStatus_FAILED,
+        IdentityResolutionJobStatus_FIND_MATCHING,
+        IdentityResolutionJobStatus_MERGING,
+        IdentityResolutionJobStatus_PARTIAL_SUCCESS,
+        IdentityResolutionJobStatus_PENDING,
+        IdentityResolutionJobStatus_PREPROCESSING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype IdentityResolutionJobStatus = IdentityResolutionJobStatus'
+  { fromIdentityResolutionJobStatus ::
+      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 IdentityResolutionJobStatus_COMPLETED :: IdentityResolutionJobStatus
+pattern IdentityResolutionJobStatus_COMPLETED = IdentityResolutionJobStatus' "COMPLETED"
+
+pattern IdentityResolutionJobStatus_FAILED :: IdentityResolutionJobStatus
+pattern IdentityResolutionJobStatus_FAILED = IdentityResolutionJobStatus' "FAILED"
+
+pattern IdentityResolutionJobStatus_FIND_MATCHING :: IdentityResolutionJobStatus
+pattern IdentityResolutionJobStatus_FIND_MATCHING = IdentityResolutionJobStatus' "FIND_MATCHING"
+
+pattern IdentityResolutionJobStatus_MERGING :: IdentityResolutionJobStatus
+pattern IdentityResolutionJobStatus_MERGING = IdentityResolutionJobStatus' "MERGING"
+
+pattern IdentityResolutionJobStatus_PARTIAL_SUCCESS :: IdentityResolutionJobStatus
+pattern IdentityResolutionJobStatus_PARTIAL_SUCCESS = IdentityResolutionJobStatus' "PARTIAL_SUCCESS"
+
+pattern IdentityResolutionJobStatus_PENDING :: IdentityResolutionJobStatus
+pattern IdentityResolutionJobStatus_PENDING = IdentityResolutionJobStatus' "PENDING"
+
+pattern IdentityResolutionJobStatus_PREPROCESSING :: IdentityResolutionJobStatus
+pattern IdentityResolutionJobStatus_PREPROCESSING = IdentityResolutionJobStatus' "PREPROCESSING"
+
+{-# COMPLETE
+  IdentityResolutionJobStatus_COMPLETED,
+  IdentityResolutionJobStatus_FAILED,
+  IdentityResolutionJobStatus_FIND_MATCHING,
+  IdentityResolutionJobStatus_MERGING,
+  IdentityResolutionJobStatus_PARTIAL_SUCCESS,
+  IdentityResolutionJobStatus_PENDING,
+  IdentityResolutionJobStatus_PREPROCESSING,
+  IdentityResolutionJobStatus'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/IncrementalPullConfig.hs b/gen/Amazonka/CustomerProfiles/Types/IncrementalPullConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/IncrementalPullConfig.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.IncrementalPullConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.IncrementalPullConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the configuration used when importing incremental records from
+-- the source.
+--
+-- /See:/ 'newIncrementalPullConfig' smart constructor.
+data IncrementalPullConfig = IncrementalPullConfig'
+  { -- | A field that specifies the date time or timestamp field as the criteria
+    -- to use when importing incremental records from the source.
+    datetimeTypeFieldName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IncrementalPullConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datetimeTypeFieldName', 'incrementalPullConfig_datetimeTypeFieldName' - A field that specifies the date time or timestamp field as the criteria
+-- to use when importing incremental records from the source.
+newIncrementalPullConfig ::
+  IncrementalPullConfig
+newIncrementalPullConfig =
+  IncrementalPullConfig'
+    { datetimeTypeFieldName =
+        Prelude.Nothing
+    }
+
+-- | A field that specifies the date time or timestamp field as the criteria
+-- to use when importing incremental records from the source.
+incrementalPullConfig_datetimeTypeFieldName :: Lens.Lens' IncrementalPullConfig (Prelude.Maybe Prelude.Text)
+incrementalPullConfig_datetimeTypeFieldName = Lens.lens (\IncrementalPullConfig' {datetimeTypeFieldName} -> datetimeTypeFieldName) (\s@IncrementalPullConfig' {} a -> s {datetimeTypeFieldName = a} :: IncrementalPullConfig)
+
+instance Prelude.Hashable IncrementalPullConfig where
+  hashWithSalt _salt IncrementalPullConfig' {..} =
+    _salt `Prelude.hashWithSalt` datetimeTypeFieldName
+
+instance Prelude.NFData IncrementalPullConfig where
+  rnf IncrementalPullConfig' {..} =
+    Prelude.rnf datetimeTypeFieldName
+
+instance Data.ToJSON IncrementalPullConfig where
+  toJSON IncrementalPullConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DatetimeTypeFieldName" Data..=)
+              Prelude.<$> datetimeTypeFieldName
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/IntegrationConfig.hs b/gen/Amazonka/CustomerProfiles/Types/IntegrationConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/IntegrationConfig.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.IntegrationConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.IntegrationConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.AppflowIntegration
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration data for integration workflow.
+--
+-- /See:/ 'newIntegrationConfig' smart constructor.
+data IntegrationConfig = IntegrationConfig'
+  { -- | Configuration data for @APPFLOW_INTEGRATION@ workflow type.
+    appflowIntegration :: Prelude.Maybe AppflowIntegration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IntegrationConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appflowIntegration', 'integrationConfig_appflowIntegration' - Configuration data for @APPFLOW_INTEGRATION@ workflow type.
+newIntegrationConfig ::
+  IntegrationConfig
+newIntegrationConfig =
+  IntegrationConfig'
+    { appflowIntegration =
+        Prelude.Nothing
+    }
+
+-- | Configuration data for @APPFLOW_INTEGRATION@ workflow type.
+integrationConfig_appflowIntegration :: Lens.Lens' IntegrationConfig (Prelude.Maybe AppflowIntegration)
+integrationConfig_appflowIntegration = Lens.lens (\IntegrationConfig' {appflowIntegration} -> appflowIntegration) (\s@IntegrationConfig' {} a -> s {appflowIntegration = a} :: IntegrationConfig)
+
+instance Prelude.Hashable IntegrationConfig where
+  hashWithSalt _salt IntegrationConfig' {..} =
+    _salt `Prelude.hashWithSalt` appflowIntegration
+
+instance Prelude.NFData IntegrationConfig where
+  rnf IntegrationConfig' {..} =
+    Prelude.rnf appflowIntegration
+
+instance Data.ToJSON IntegrationConfig where
+  toJSON IntegrationConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AppflowIntegration" Data..=)
+              Prelude.<$> appflowIntegration
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/JobSchedule.hs b/gen/Amazonka/CustomerProfiles/Types/JobSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/JobSchedule.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.JobSchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.JobSchedule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.JobScheduleDayOfTheWeek
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The day and time when do you want to start the Identity Resolution Job
+-- every week.
+--
+-- /See:/ 'newJobSchedule' smart constructor.
+data JobSchedule = JobSchedule'
+  { -- | The day when the Identity Resolution Job should run every week.
+    dayOfTheWeek :: JobScheduleDayOfTheWeek,
+    -- | The time when the Identity Resolution Job should run every week.
+    time :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobSchedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dayOfTheWeek', 'jobSchedule_dayOfTheWeek' - The day when the Identity Resolution Job should run every week.
+--
+-- 'time', 'jobSchedule_time' - The time when the Identity Resolution Job should run every week.
+newJobSchedule ::
+  -- | 'dayOfTheWeek'
+  JobScheduleDayOfTheWeek ->
+  -- | 'time'
+  Prelude.Text ->
+  JobSchedule
+newJobSchedule pDayOfTheWeek_ pTime_ =
+  JobSchedule'
+    { dayOfTheWeek = pDayOfTheWeek_,
+      time = pTime_
+    }
+
+-- | The day when the Identity Resolution Job should run every week.
+jobSchedule_dayOfTheWeek :: Lens.Lens' JobSchedule JobScheduleDayOfTheWeek
+jobSchedule_dayOfTheWeek = Lens.lens (\JobSchedule' {dayOfTheWeek} -> dayOfTheWeek) (\s@JobSchedule' {} a -> s {dayOfTheWeek = a} :: JobSchedule)
+
+-- | The time when the Identity Resolution Job should run every week.
+jobSchedule_time :: Lens.Lens' JobSchedule Prelude.Text
+jobSchedule_time = Lens.lens (\JobSchedule' {time} -> time) (\s@JobSchedule' {} a -> s {time = a} :: JobSchedule)
+
+instance Data.FromJSON JobSchedule where
+  parseJSON =
+    Data.withObject
+      "JobSchedule"
+      ( \x ->
+          JobSchedule'
+            Prelude.<$> (x Data..: "DayOfTheWeek")
+            Prelude.<*> (x Data..: "Time")
+      )
+
+instance Prelude.Hashable JobSchedule where
+  hashWithSalt _salt JobSchedule' {..} =
+    _salt
+      `Prelude.hashWithSalt` dayOfTheWeek
+      `Prelude.hashWithSalt` time
+
+instance Prelude.NFData JobSchedule where
+  rnf JobSchedule' {..} =
+    Prelude.rnf dayOfTheWeek
+      `Prelude.seq` Prelude.rnf time
+
+instance Data.ToJSON JobSchedule where
+  toJSON JobSchedule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("DayOfTheWeek" Data..= dayOfTheWeek),
+            Prelude.Just ("Time" Data..= time)
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/JobScheduleDayOfTheWeek.hs b/gen/Amazonka/CustomerProfiles/Types/JobScheduleDayOfTheWeek.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/JobScheduleDayOfTheWeek.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.JobScheduleDayOfTheWeek
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.JobScheduleDayOfTheWeek
+  ( JobScheduleDayOfTheWeek
+      ( ..,
+        JobScheduleDayOfTheWeek_FRIDAY,
+        JobScheduleDayOfTheWeek_MONDAY,
+        JobScheduleDayOfTheWeek_SATURDAY,
+        JobScheduleDayOfTheWeek_SUNDAY,
+        JobScheduleDayOfTheWeek_THURSDAY,
+        JobScheduleDayOfTheWeek_TUESDAY,
+        JobScheduleDayOfTheWeek_WEDNESDAY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype JobScheduleDayOfTheWeek = JobScheduleDayOfTheWeek'
+  { fromJobScheduleDayOfTheWeek ::
+      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 JobScheduleDayOfTheWeek_FRIDAY :: JobScheduleDayOfTheWeek
+pattern JobScheduleDayOfTheWeek_FRIDAY = JobScheduleDayOfTheWeek' "FRIDAY"
+
+pattern JobScheduleDayOfTheWeek_MONDAY :: JobScheduleDayOfTheWeek
+pattern JobScheduleDayOfTheWeek_MONDAY = JobScheduleDayOfTheWeek' "MONDAY"
+
+pattern JobScheduleDayOfTheWeek_SATURDAY :: JobScheduleDayOfTheWeek
+pattern JobScheduleDayOfTheWeek_SATURDAY = JobScheduleDayOfTheWeek' "SATURDAY"
+
+pattern JobScheduleDayOfTheWeek_SUNDAY :: JobScheduleDayOfTheWeek
+pattern JobScheduleDayOfTheWeek_SUNDAY = JobScheduleDayOfTheWeek' "SUNDAY"
+
+pattern JobScheduleDayOfTheWeek_THURSDAY :: JobScheduleDayOfTheWeek
+pattern JobScheduleDayOfTheWeek_THURSDAY = JobScheduleDayOfTheWeek' "THURSDAY"
+
+pattern JobScheduleDayOfTheWeek_TUESDAY :: JobScheduleDayOfTheWeek
+pattern JobScheduleDayOfTheWeek_TUESDAY = JobScheduleDayOfTheWeek' "TUESDAY"
+
+pattern JobScheduleDayOfTheWeek_WEDNESDAY :: JobScheduleDayOfTheWeek
+pattern JobScheduleDayOfTheWeek_WEDNESDAY = JobScheduleDayOfTheWeek' "WEDNESDAY"
+
+{-# COMPLETE
+  JobScheduleDayOfTheWeek_FRIDAY,
+  JobScheduleDayOfTheWeek_MONDAY,
+  JobScheduleDayOfTheWeek_SATURDAY,
+  JobScheduleDayOfTheWeek_SUNDAY,
+  JobScheduleDayOfTheWeek_THURSDAY,
+  JobScheduleDayOfTheWeek_TUESDAY,
+  JobScheduleDayOfTheWeek_WEDNESDAY,
+  JobScheduleDayOfTheWeek'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/JobStats.hs b/gen/Amazonka/CustomerProfiles/Types/JobStats.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/JobStats.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.JobStats
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.JobStats where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Statistics about the Identity Resolution Job.
+--
+-- /See:/ 'newJobStats' smart constructor.
+data JobStats = JobStats'
+  { -- | The number of matches found.
+    numberOfMatchesFound :: Prelude.Maybe Prelude.Integer,
+    -- | The number of merges completed.
+    numberOfMergesDone :: Prelude.Maybe Prelude.Integer,
+    -- | The number of profiles reviewed.
+    numberOfProfilesReviewed :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobStats' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'numberOfMatchesFound', 'jobStats_numberOfMatchesFound' - The number of matches found.
+--
+-- 'numberOfMergesDone', 'jobStats_numberOfMergesDone' - The number of merges completed.
+--
+-- 'numberOfProfilesReviewed', 'jobStats_numberOfProfilesReviewed' - The number of profiles reviewed.
+newJobStats ::
+  JobStats
+newJobStats =
+  JobStats'
+    { numberOfMatchesFound = Prelude.Nothing,
+      numberOfMergesDone = Prelude.Nothing,
+      numberOfProfilesReviewed = Prelude.Nothing
+    }
+
+-- | The number of matches found.
+jobStats_numberOfMatchesFound :: Lens.Lens' JobStats (Prelude.Maybe Prelude.Integer)
+jobStats_numberOfMatchesFound = Lens.lens (\JobStats' {numberOfMatchesFound} -> numberOfMatchesFound) (\s@JobStats' {} a -> s {numberOfMatchesFound = a} :: JobStats)
+
+-- | The number of merges completed.
+jobStats_numberOfMergesDone :: Lens.Lens' JobStats (Prelude.Maybe Prelude.Integer)
+jobStats_numberOfMergesDone = Lens.lens (\JobStats' {numberOfMergesDone} -> numberOfMergesDone) (\s@JobStats' {} a -> s {numberOfMergesDone = a} :: JobStats)
+
+-- | The number of profiles reviewed.
+jobStats_numberOfProfilesReviewed :: Lens.Lens' JobStats (Prelude.Maybe Prelude.Integer)
+jobStats_numberOfProfilesReviewed = Lens.lens (\JobStats' {numberOfProfilesReviewed} -> numberOfProfilesReviewed) (\s@JobStats' {} a -> s {numberOfProfilesReviewed = a} :: JobStats)
+
+instance Data.FromJSON JobStats where
+  parseJSON =
+    Data.withObject
+      "JobStats"
+      ( \x ->
+          JobStats'
+            Prelude.<$> (x Data..:? "NumberOfMatchesFound")
+            Prelude.<*> (x Data..:? "NumberOfMergesDone")
+            Prelude.<*> (x Data..:? "NumberOfProfilesReviewed")
+      )
+
+instance Prelude.Hashable JobStats where
+  hashWithSalt _salt JobStats' {..} =
+    _salt
+      `Prelude.hashWithSalt` numberOfMatchesFound
+      `Prelude.hashWithSalt` numberOfMergesDone
+      `Prelude.hashWithSalt` numberOfProfilesReviewed
+
+instance Prelude.NFData JobStats where
+  rnf JobStats' {..} =
+    Prelude.rnf numberOfMatchesFound
+      `Prelude.seq` Prelude.rnf numberOfMergesDone
+      `Prelude.seq` Prelude.rnf numberOfProfilesReviewed
diff --git a/gen/Amazonka/CustomerProfiles/Types/ListDomainItem.hs b/gen/Amazonka/CustomerProfiles/Types/ListDomainItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ListDomainItem.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.ListDomainItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ListDomainItem where
+
+import qualified 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 in a list that represents a domain.
+--
+-- /See:/ 'newListDomainItem' smart constructor.
+data ListDomainItem = ListDomainItem'
+  { -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The timestamp of when the domain was created.
+    createdAt :: Data.POSIX,
+    -- | The timestamp of when the domain was most recently edited.
+    lastUpdatedAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDomainItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDomainItem_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'domainName', 'listDomainItem_domainName' - The unique name of the domain.
+--
+-- 'createdAt', 'listDomainItem_createdAt' - The timestamp of when the domain was created.
+--
+-- 'lastUpdatedAt', 'listDomainItem_lastUpdatedAt' - The timestamp of when the domain was most recently edited.
+newListDomainItem ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'lastUpdatedAt'
+  Prelude.UTCTime ->
+  ListDomainItem
+newListDomainItem
+  pDomainName_
+  pCreatedAt_
+  pLastUpdatedAt_ =
+    ListDomainItem'
+      { tags = Prelude.Nothing,
+        domainName = pDomainName_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        lastUpdatedAt = Data._Time Lens.# pLastUpdatedAt_
+      }
+
+-- | The tags used to organize, track, or control access for this resource.
+listDomainItem_tags :: Lens.Lens' ListDomainItem (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listDomainItem_tags = Lens.lens (\ListDomainItem' {tags} -> tags) (\s@ListDomainItem' {} a -> s {tags = a} :: ListDomainItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique name of the domain.
+listDomainItem_domainName :: Lens.Lens' ListDomainItem Prelude.Text
+listDomainItem_domainName = Lens.lens (\ListDomainItem' {domainName} -> domainName) (\s@ListDomainItem' {} a -> s {domainName = a} :: ListDomainItem)
+
+-- | The timestamp of when the domain was created.
+listDomainItem_createdAt :: Lens.Lens' ListDomainItem Prelude.UTCTime
+listDomainItem_createdAt = Lens.lens (\ListDomainItem' {createdAt} -> createdAt) (\s@ListDomainItem' {} a -> s {createdAt = a} :: ListDomainItem) Prelude.. Data._Time
+
+-- | The timestamp of when the domain was most recently edited.
+listDomainItem_lastUpdatedAt :: Lens.Lens' ListDomainItem Prelude.UTCTime
+listDomainItem_lastUpdatedAt = Lens.lens (\ListDomainItem' {lastUpdatedAt} -> lastUpdatedAt) (\s@ListDomainItem' {} a -> s {lastUpdatedAt = a} :: ListDomainItem) Prelude.. Data._Time
+
+instance Data.FromJSON ListDomainItem where
+  parseJSON =
+    Data.withObject
+      "ListDomainItem"
+      ( \x ->
+          ListDomainItem'
+            Prelude.<$> (x Data..:? "Tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "DomainName")
+            Prelude.<*> (x Data..: "CreatedAt")
+            Prelude.<*> (x Data..: "LastUpdatedAt")
+      )
+
+instance Prelude.Hashable ListDomainItem where
+  hashWithSalt _salt ListDomainItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` lastUpdatedAt
+
+instance Prelude.NFData ListDomainItem where
+  rnf ListDomainItem' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
diff --git a/gen/Amazonka/CustomerProfiles/Types/ListIntegrationItem.hs b/gen/Amazonka/CustomerProfiles/Types/ListIntegrationItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ListIntegrationItem.hs
@@ -0,0 +1,208 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.ListIntegrationItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ListIntegrationItem where
+
+import qualified 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 integration in list of integrations.
+--
+-- /See:/ 'newListIntegrationItem' smart constructor.
+data ListIntegrationItem = ListIntegrationItem'
+  { -- | Boolean to indicate if the Flow associated with the Integration is
+    -- created via Appflow console or with ObjectTypeName equals _unstructured
+    -- via API\/CLI in flowDefinition
+    isUnstructured :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the profile object type.
+    objectTypeName :: Prelude.Maybe Prelude.Text,
+    -- | A map in which each key is an event type from an external application
+    -- such as Segment or Shopify, and each value is an @ObjectTypeName@
+    -- (template) used to ingest the event. It supports the following event
+    -- types: @SegmentIdentify@, @ShopifyCreateCustomers@,
+    -- @ShopifyUpdateCustomers@, @ShopifyCreateDraftOrders@,
+    -- @ShopifyUpdateDraftOrders@, @ShopifyCreateOrders@, and
+    -- @ShopifyUpdatedOrders@.
+    objectTypeNames :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Unique identifier for the workflow.
+    workflowId :: Prelude.Maybe Prelude.Text,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The URI of the S3 bucket or any other type of data source.
+    uri :: Prelude.Text,
+    -- | The timestamp of when the domain was created.
+    createdAt :: Data.POSIX,
+    -- | The timestamp of when the domain was most recently edited.
+    lastUpdatedAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListIntegrationItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'isUnstructured', 'listIntegrationItem_isUnstructured' - Boolean to indicate if the Flow associated with the Integration is
+-- created via Appflow console or with ObjectTypeName equals _unstructured
+-- via API\/CLI in flowDefinition
+--
+-- 'objectTypeName', 'listIntegrationItem_objectTypeName' - The name of the profile object type.
+--
+-- 'objectTypeNames', 'listIntegrationItem_objectTypeNames' - A map in which each key is an event type from an external application
+-- such as Segment or Shopify, and each value is an @ObjectTypeName@
+-- (template) used to ingest the event. It supports the following event
+-- types: @SegmentIdentify@, @ShopifyCreateCustomers@,
+-- @ShopifyUpdateCustomers@, @ShopifyCreateDraftOrders@,
+-- @ShopifyUpdateDraftOrders@, @ShopifyCreateOrders@, and
+-- @ShopifyUpdatedOrders@.
+--
+-- 'tags', 'listIntegrationItem_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'workflowId', 'listIntegrationItem_workflowId' - Unique identifier for the workflow.
+--
+-- 'domainName', 'listIntegrationItem_domainName' - The unique name of the domain.
+--
+-- 'uri', 'listIntegrationItem_uri' - The URI of the S3 bucket or any other type of data source.
+--
+-- 'createdAt', 'listIntegrationItem_createdAt' - The timestamp of when the domain was created.
+--
+-- 'lastUpdatedAt', 'listIntegrationItem_lastUpdatedAt' - The timestamp of when the domain was most recently edited.
+newListIntegrationItem ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'uri'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'lastUpdatedAt'
+  Prelude.UTCTime ->
+  ListIntegrationItem
+newListIntegrationItem
+  pDomainName_
+  pUri_
+  pCreatedAt_
+  pLastUpdatedAt_ =
+    ListIntegrationItem'
+      { isUnstructured =
+          Prelude.Nothing,
+        objectTypeName = Prelude.Nothing,
+        objectTypeNames = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        workflowId = Prelude.Nothing,
+        domainName = pDomainName_,
+        uri = pUri_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        lastUpdatedAt = Data._Time Lens.# pLastUpdatedAt_
+      }
+
+-- | Boolean to indicate if the Flow associated with the Integration is
+-- created via Appflow console or with ObjectTypeName equals _unstructured
+-- via API\/CLI in flowDefinition
+listIntegrationItem_isUnstructured :: Lens.Lens' ListIntegrationItem (Prelude.Maybe Prelude.Bool)
+listIntegrationItem_isUnstructured = Lens.lens (\ListIntegrationItem' {isUnstructured} -> isUnstructured) (\s@ListIntegrationItem' {} a -> s {isUnstructured = a} :: ListIntegrationItem)
+
+-- | The name of the profile object type.
+listIntegrationItem_objectTypeName :: Lens.Lens' ListIntegrationItem (Prelude.Maybe Prelude.Text)
+listIntegrationItem_objectTypeName = Lens.lens (\ListIntegrationItem' {objectTypeName} -> objectTypeName) (\s@ListIntegrationItem' {} a -> s {objectTypeName = a} :: ListIntegrationItem)
+
+-- | A map in which each key is an event type from an external application
+-- such as Segment or Shopify, and each value is an @ObjectTypeName@
+-- (template) used to ingest the event. It supports the following event
+-- types: @SegmentIdentify@, @ShopifyCreateCustomers@,
+-- @ShopifyUpdateCustomers@, @ShopifyCreateDraftOrders@,
+-- @ShopifyUpdateDraftOrders@, @ShopifyCreateOrders@, and
+-- @ShopifyUpdatedOrders@.
+listIntegrationItem_objectTypeNames :: Lens.Lens' ListIntegrationItem (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listIntegrationItem_objectTypeNames = Lens.lens (\ListIntegrationItem' {objectTypeNames} -> objectTypeNames) (\s@ListIntegrationItem' {} a -> s {objectTypeNames = a} :: ListIntegrationItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags used to organize, track, or control access for this resource.
+listIntegrationItem_tags :: Lens.Lens' ListIntegrationItem (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listIntegrationItem_tags = Lens.lens (\ListIntegrationItem' {tags} -> tags) (\s@ListIntegrationItem' {} a -> s {tags = a} :: ListIntegrationItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | Unique identifier for the workflow.
+listIntegrationItem_workflowId :: Lens.Lens' ListIntegrationItem (Prelude.Maybe Prelude.Text)
+listIntegrationItem_workflowId = Lens.lens (\ListIntegrationItem' {workflowId} -> workflowId) (\s@ListIntegrationItem' {} a -> s {workflowId = a} :: ListIntegrationItem)
+
+-- | The unique name of the domain.
+listIntegrationItem_domainName :: Lens.Lens' ListIntegrationItem Prelude.Text
+listIntegrationItem_domainName = Lens.lens (\ListIntegrationItem' {domainName} -> domainName) (\s@ListIntegrationItem' {} a -> s {domainName = a} :: ListIntegrationItem)
+
+-- | The URI of the S3 bucket or any other type of data source.
+listIntegrationItem_uri :: Lens.Lens' ListIntegrationItem Prelude.Text
+listIntegrationItem_uri = Lens.lens (\ListIntegrationItem' {uri} -> uri) (\s@ListIntegrationItem' {} a -> s {uri = a} :: ListIntegrationItem)
+
+-- | The timestamp of when the domain was created.
+listIntegrationItem_createdAt :: Lens.Lens' ListIntegrationItem Prelude.UTCTime
+listIntegrationItem_createdAt = Lens.lens (\ListIntegrationItem' {createdAt} -> createdAt) (\s@ListIntegrationItem' {} a -> s {createdAt = a} :: ListIntegrationItem) Prelude.. Data._Time
+
+-- | The timestamp of when the domain was most recently edited.
+listIntegrationItem_lastUpdatedAt :: Lens.Lens' ListIntegrationItem Prelude.UTCTime
+listIntegrationItem_lastUpdatedAt = Lens.lens (\ListIntegrationItem' {lastUpdatedAt} -> lastUpdatedAt) (\s@ListIntegrationItem' {} a -> s {lastUpdatedAt = a} :: ListIntegrationItem) Prelude.. Data._Time
+
+instance Data.FromJSON ListIntegrationItem where
+  parseJSON =
+    Data.withObject
+      "ListIntegrationItem"
+      ( \x ->
+          ListIntegrationItem'
+            Prelude.<$> (x Data..:? "IsUnstructured")
+            Prelude.<*> (x Data..:? "ObjectTypeName")
+            Prelude.<*> ( x
+                            Data..:? "ObjectTypeNames"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "WorkflowId")
+            Prelude.<*> (x Data..: "DomainName")
+            Prelude.<*> (x Data..: "Uri")
+            Prelude.<*> (x Data..: "CreatedAt")
+            Prelude.<*> (x Data..: "LastUpdatedAt")
+      )
+
+instance Prelude.Hashable ListIntegrationItem where
+  hashWithSalt _salt ListIntegrationItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` isUnstructured
+      `Prelude.hashWithSalt` objectTypeName
+      `Prelude.hashWithSalt` objectTypeNames
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` workflowId
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` uri
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` lastUpdatedAt
+
+instance Prelude.NFData ListIntegrationItem where
+  rnf ListIntegrationItem' {..} =
+    Prelude.rnf isUnstructured
+      `Prelude.seq` Prelude.rnf objectTypeName
+      `Prelude.seq` Prelude.rnf objectTypeNames
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf uri
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
diff --git a/gen/Amazonka/CustomerProfiles/Types/ListProfileObjectTypeItem.hs b/gen/Amazonka/CustomerProfiles/Types/ListProfileObjectTypeItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ListProfileObjectTypeItem.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.ListProfileObjectTypeItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ListProfileObjectTypeItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A ProfileObjectType instance.
+--
+-- /See:/ 'newListProfileObjectTypeItem' smart constructor.
+data ListProfileObjectTypeItem = ListProfileObjectTypeItem'
+  { -- | The timestamp of when the domain was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The timestamp of when the domain was most recently edited.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the profile object type.
+    objectTypeName :: Prelude.Text,
+    -- | Description of the profile object type.
+    description :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListProfileObjectTypeItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAt', 'listProfileObjectTypeItem_createdAt' - The timestamp of when the domain was created.
+--
+-- 'lastUpdatedAt', 'listProfileObjectTypeItem_lastUpdatedAt' - The timestamp of when the domain was most recently edited.
+--
+-- 'tags', 'listProfileObjectTypeItem_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'objectTypeName', 'listProfileObjectTypeItem_objectTypeName' - The name of the profile object type.
+--
+-- 'description', 'listProfileObjectTypeItem_description' - Description of the profile object type.
+newListProfileObjectTypeItem ::
+  -- | 'objectTypeName'
+  Prelude.Text ->
+  -- | 'description'
+  Prelude.Text ->
+  ListProfileObjectTypeItem
+newListProfileObjectTypeItem
+  pObjectTypeName_
+  pDescription_ =
+    ListProfileObjectTypeItem'
+      { createdAt =
+          Prelude.Nothing,
+        lastUpdatedAt = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        objectTypeName = pObjectTypeName_,
+        description = pDescription_
+      }
+
+-- | The timestamp of when the domain was created.
+listProfileObjectTypeItem_createdAt :: Lens.Lens' ListProfileObjectTypeItem (Prelude.Maybe Prelude.UTCTime)
+listProfileObjectTypeItem_createdAt = Lens.lens (\ListProfileObjectTypeItem' {createdAt} -> createdAt) (\s@ListProfileObjectTypeItem' {} a -> s {createdAt = a} :: ListProfileObjectTypeItem) Prelude.. Lens.mapping Data._Time
+
+-- | The timestamp of when the domain was most recently edited.
+listProfileObjectTypeItem_lastUpdatedAt :: Lens.Lens' ListProfileObjectTypeItem (Prelude.Maybe Prelude.UTCTime)
+listProfileObjectTypeItem_lastUpdatedAt = Lens.lens (\ListProfileObjectTypeItem' {lastUpdatedAt} -> lastUpdatedAt) (\s@ListProfileObjectTypeItem' {} a -> s {lastUpdatedAt = a} :: ListProfileObjectTypeItem) Prelude.. Lens.mapping Data._Time
+
+-- | The tags used to organize, track, or control access for this resource.
+listProfileObjectTypeItem_tags :: Lens.Lens' ListProfileObjectTypeItem (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listProfileObjectTypeItem_tags = Lens.lens (\ListProfileObjectTypeItem' {tags} -> tags) (\s@ListProfileObjectTypeItem' {} a -> s {tags = a} :: ListProfileObjectTypeItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the profile object type.
+listProfileObjectTypeItem_objectTypeName :: Lens.Lens' ListProfileObjectTypeItem Prelude.Text
+listProfileObjectTypeItem_objectTypeName = Lens.lens (\ListProfileObjectTypeItem' {objectTypeName} -> objectTypeName) (\s@ListProfileObjectTypeItem' {} a -> s {objectTypeName = a} :: ListProfileObjectTypeItem)
+
+-- | Description of the profile object type.
+listProfileObjectTypeItem_description :: Lens.Lens' ListProfileObjectTypeItem Prelude.Text
+listProfileObjectTypeItem_description = Lens.lens (\ListProfileObjectTypeItem' {description} -> description) (\s@ListProfileObjectTypeItem' {} a -> s {description = a} :: ListProfileObjectTypeItem)
+
+instance Data.FromJSON ListProfileObjectTypeItem where
+  parseJSON =
+    Data.withObject
+      "ListProfileObjectTypeItem"
+      ( \x ->
+          ListProfileObjectTypeItem'
+            Prelude.<$> (x Data..:? "CreatedAt")
+            Prelude.<*> (x Data..:? "LastUpdatedAt")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "ObjectTypeName")
+            Prelude.<*> (x Data..: "Description")
+      )
+
+instance Prelude.Hashable ListProfileObjectTypeItem where
+  hashWithSalt _salt ListProfileObjectTypeItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` lastUpdatedAt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` objectTypeName
+      `Prelude.hashWithSalt` description
+
+instance Prelude.NFData ListProfileObjectTypeItem where
+  rnf ListProfileObjectTypeItem' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf objectTypeName
+      `Prelude.seq` Prelude.rnf description
diff --git a/gen/Amazonka/CustomerProfiles/Types/ListProfileObjectTypeTemplateItem.hs b/gen/Amazonka/CustomerProfiles/Types/ListProfileObjectTypeTemplateItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ListProfileObjectTypeTemplateItem.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.CustomerProfiles.Types.ListProfileObjectTypeTemplateItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ListProfileObjectTypeTemplateItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A ProfileObjectTypeTemplate in a list of ProfileObjectTypeTemplates.
+--
+-- /See:/ 'newListProfileObjectTypeTemplateItem' smart constructor.
+data ListProfileObjectTypeTemplateItem = ListProfileObjectTypeTemplateItem'
+  { -- | The name of the source of the object template.
+    sourceName :: Prelude.Maybe Prelude.Text,
+    -- | The source of the object template.
+    sourceObject :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the object template.
+    templateId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListProfileObjectTypeTemplateItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sourceName', 'listProfileObjectTypeTemplateItem_sourceName' - The name of the source of the object template.
+--
+-- 'sourceObject', 'listProfileObjectTypeTemplateItem_sourceObject' - The source of the object template.
+--
+-- 'templateId', 'listProfileObjectTypeTemplateItem_templateId' - A unique identifier for the object template.
+newListProfileObjectTypeTemplateItem ::
+  ListProfileObjectTypeTemplateItem
+newListProfileObjectTypeTemplateItem =
+  ListProfileObjectTypeTemplateItem'
+    { sourceName =
+        Prelude.Nothing,
+      sourceObject = Prelude.Nothing,
+      templateId = Prelude.Nothing
+    }
+
+-- | The name of the source of the object template.
+listProfileObjectTypeTemplateItem_sourceName :: Lens.Lens' ListProfileObjectTypeTemplateItem (Prelude.Maybe Prelude.Text)
+listProfileObjectTypeTemplateItem_sourceName = Lens.lens (\ListProfileObjectTypeTemplateItem' {sourceName} -> sourceName) (\s@ListProfileObjectTypeTemplateItem' {} a -> s {sourceName = a} :: ListProfileObjectTypeTemplateItem)
+
+-- | The source of the object template.
+listProfileObjectTypeTemplateItem_sourceObject :: Lens.Lens' ListProfileObjectTypeTemplateItem (Prelude.Maybe Prelude.Text)
+listProfileObjectTypeTemplateItem_sourceObject = Lens.lens (\ListProfileObjectTypeTemplateItem' {sourceObject} -> sourceObject) (\s@ListProfileObjectTypeTemplateItem' {} a -> s {sourceObject = a} :: ListProfileObjectTypeTemplateItem)
+
+-- | A unique identifier for the object template.
+listProfileObjectTypeTemplateItem_templateId :: Lens.Lens' ListProfileObjectTypeTemplateItem (Prelude.Maybe Prelude.Text)
+listProfileObjectTypeTemplateItem_templateId = Lens.lens (\ListProfileObjectTypeTemplateItem' {templateId} -> templateId) (\s@ListProfileObjectTypeTemplateItem' {} a -> s {templateId = a} :: ListProfileObjectTypeTemplateItem)
+
+instance
+  Data.FromJSON
+    ListProfileObjectTypeTemplateItem
+  where
+  parseJSON =
+    Data.withObject
+      "ListProfileObjectTypeTemplateItem"
+      ( \x ->
+          ListProfileObjectTypeTemplateItem'
+            Prelude.<$> (x Data..:? "SourceName")
+            Prelude.<*> (x Data..:? "SourceObject")
+            Prelude.<*> (x Data..:? "TemplateId")
+      )
+
+instance
+  Prelude.Hashable
+    ListProfileObjectTypeTemplateItem
+  where
+  hashWithSalt
+    _salt
+    ListProfileObjectTypeTemplateItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` sourceName
+        `Prelude.hashWithSalt` sourceObject
+        `Prelude.hashWithSalt` templateId
+
+instance
+  Prelude.NFData
+    ListProfileObjectTypeTemplateItem
+  where
+  rnf ListProfileObjectTypeTemplateItem' {..} =
+    Prelude.rnf sourceName
+      `Prelude.seq` Prelude.rnf sourceObject
+      `Prelude.seq` Prelude.rnf templateId
diff --git a/gen/Amazonka/CustomerProfiles/Types/ListProfileObjectsItem.hs b/gen/Amazonka/CustomerProfiles/Types/ListProfileObjectsItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ListProfileObjectsItem.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.ListProfileObjectsItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ListProfileObjectsItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A ProfileObject in a list of ProfileObjects.
+--
+-- /See:/ 'newListProfileObjectsItem' smart constructor.
+data ListProfileObjectsItem = ListProfileObjectsItem'
+  { -- | A JSON representation of a ProfileObject that belongs to a profile.
+    object' :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the kind of object being added to a profile, such as
+    -- \"Salesforce-Account.\"
+    objectTypeName :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the ProfileObject generated by the service.
+    profileObjectUniqueKey :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListProfileObjectsItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'object'', 'listProfileObjectsItem_object' - A JSON representation of a ProfileObject that belongs to a profile.
+--
+-- 'objectTypeName', 'listProfileObjectsItem_objectTypeName' - Specifies the kind of object being added to a profile, such as
+-- \"Salesforce-Account.\"
+--
+-- 'profileObjectUniqueKey', 'listProfileObjectsItem_profileObjectUniqueKey' - The unique identifier of the ProfileObject generated by the service.
+newListProfileObjectsItem ::
+  ListProfileObjectsItem
+newListProfileObjectsItem =
+  ListProfileObjectsItem'
+    { object' = Prelude.Nothing,
+      objectTypeName = Prelude.Nothing,
+      profileObjectUniqueKey = Prelude.Nothing
+    }
+
+-- | A JSON representation of a ProfileObject that belongs to a profile.
+listProfileObjectsItem_object :: Lens.Lens' ListProfileObjectsItem (Prelude.Maybe Prelude.Text)
+listProfileObjectsItem_object = Lens.lens (\ListProfileObjectsItem' {object'} -> object') (\s@ListProfileObjectsItem' {} a -> s {object' = a} :: ListProfileObjectsItem)
+
+-- | Specifies the kind of object being added to a profile, such as
+-- \"Salesforce-Account.\"
+listProfileObjectsItem_objectTypeName :: Lens.Lens' ListProfileObjectsItem (Prelude.Maybe Prelude.Text)
+listProfileObjectsItem_objectTypeName = Lens.lens (\ListProfileObjectsItem' {objectTypeName} -> objectTypeName) (\s@ListProfileObjectsItem' {} a -> s {objectTypeName = a} :: ListProfileObjectsItem)
+
+-- | The unique identifier of the ProfileObject generated by the service.
+listProfileObjectsItem_profileObjectUniqueKey :: Lens.Lens' ListProfileObjectsItem (Prelude.Maybe Prelude.Text)
+listProfileObjectsItem_profileObjectUniqueKey = Lens.lens (\ListProfileObjectsItem' {profileObjectUniqueKey} -> profileObjectUniqueKey) (\s@ListProfileObjectsItem' {} a -> s {profileObjectUniqueKey = a} :: ListProfileObjectsItem)
+
+instance Data.FromJSON ListProfileObjectsItem where
+  parseJSON =
+    Data.withObject
+      "ListProfileObjectsItem"
+      ( \x ->
+          ListProfileObjectsItem'
+            Prelude.<$> (x Data..:? "Object")
+            Prelude.<*> (x Data..:? "ObjectTypeName")
+            Prelude.<*> (x Data..:? "ProfileObjectUniqueKey")
+      )
+
+instance Prelude.Hashable ListProfileObjectsItem where
+  hashWithSalt _salt ListProfileObjectsItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` object'
+      `Prelude.hashWithSalt` objectTypeName
+      `Prelude.hashWithSalt` profileObjectUniqueKey
+
+instance Prelude.NFData ListProfileObjectsItem where
+  rnf ListProfileObjectsItem' {..} =
+    Prelude.rnf object'
+      `Prelude.seq` Prelude.rnf objectTypeName
+      `Prelude.seq` Prelude.rnf profileObjectUniqueKey
diff --git a/gen/Amazonka/CustomerProfiles/Types/ListWorkflowsItem.hs b/gen/Amazonka/CustomerProfiles/Types/ListWorkflowsItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ListWorkflowsItem.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.ListWorkflowsItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ListWorkflowsItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.Status
+import Amazonka.CustomerProfiles.Types.WorkflowType
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A workflow in list of workflows.
+--
+-- /See:/ 'newListWorkflowsItem' smart constructor.
+data ListWorkflowsItem = ListWorkflowsItem'
+  { -- | The type of workflow. The only supported value is APPFLOW_INTEGRATION.
+    workflowType :: WorkflowType,
+    -- | Unique identifier for the workflow.
+    workflowId :: Prelude.Text,
+    -- | Status of workflow execution.
+    status :: Status,
+    -- | Description for workflow execution status.
+    statusDescription :: Prelude.Text,
+    -- | Creation timestamp for workflow.
+    createdAt :: Data.POSIX,
+    -- | Last updated timestamp for workflow.
+    lastUpdatedAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorkflowsItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'workflowType', 'listWorkflowsItem_workflowType' - The type of workflow. The only supported value is APPFLOW_INTEGRATION.
+--
+-- 'workflowId', 'listWorkflowsItem_workflowId' - Unique identifier for the workflow.
+--
+-- 'status', 'listWorkflowsItem_status' - Status of workflow execution.
+--
+-- 'statusDescription', 'listWorkflowsItem_statusDescription' - Description for workflow execution status.
+--
+-- 'createdAt', 'listWorkflowsItem_createdAt' - Creation timestamp for workflow.
+--
+-- 'lastUpdatedAt', 'listWorkflowsItem_lastUpdatedAt' - Last updated timestamp for workflow.
+newListWorkflowsItem ::
+  -- | 'workflowType'
+  WorkflowType ->
+  -- | 'workflowId'
+  Prelude.Text ->
+  -- | 'status'
+  Status ->
+  -- | 'statusDescription'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'lastUpdatedAt'
+  Prelude.UTCTime ->
+  ListWorkflowsItem
+newListWorkflowsItem
+  pWorkflowType_
+  pWorkflowId_
+  pStatus_
+  pStatusDescription_
+  pCreatedAt_
+  pLastUpdatedAt_ =
+    ListWorkflowsItem'
+      { workflowType = pWorkflowType_,
+        workflowId = pWorkflowId_,
+        status = pStatus_,
+        statusDescription = pStatusDescription_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        lastUpdatedAt = Data._Time Lens.# pLastUpdatedAt_
+      }
+
+-- | The type of workflow. The only supported value is APPFLOW_INTEGRATION.
+listWorkflowsItem_workflowType :: Lens.Lens' ListWorkflowsItem WorkflowType
+listWorkflowsItem_workflowType = Lens.lens (\ListWorkflowsItem' {workflowType} -> workflowType) (\s@ListWorkflowsItem' {} a -> s {workflowType = a} :: ListWorkflowsItem)
+
+-- | Unique identifier for the workflow.
+listWorkflowsItem_workflowId :: Lens.Lens' ListWorkflowsItem Prelude.Text
+listWorkflowsItem_workflowId = Lens.lens (\ListWorkflowsItem' {workflowId} -> workflowId) (\s@ListWorkflowsItem' {} a -> s {workflowId = a} :: ListWorkflowsItem)
+
+-- | Status of workflow execution.
+listWorkflowsItem_status :: Lens.Lens' ListWorkflowsItem Status
+listWorkflowsItem_status = Lens.lens (\ListWorkflowsItem' {status} -> status) (\s@ListWorkflowsItem' {} a -> s {status = a} :: ListWorkflowsItem)
+
+-- | Description for workflow execution status.
+listWorkflowsItem_statusDescription :: Lens.Lens' ListWorkflowsItem Prelude.Text
+listWorkflowsItem_statusDescription = Lens.lens (\ListWorkflowsItem' {statusDescription} -> statusDescription) (\s@ListWorkflowsItem' {} a -> s {statusDescription = a} :: ListWorkflowsItem)
+
+-- | Creation timestamp for workflow.
+listWorkflowsItem_createdAt :: Lens.Lens' ListWorkflowsItem Prelude.UTCTime
+listWorkflowsItem_createdAt = Lens.lens (\ListWorkflowsItem' {createdAt} -> createdAt) (\s@ListWorkflowsItem' {} a -> s {createdAt = a} :: ListWorkflowsItem) Prelude.. Data._Time
+
+-- | Last updated timestamp for workflow.
+listWorkflowsItem_lastUpdatedAt :: Lens.Lens' ListWorkflowsItem Prelude.UTCTime
+listWorkflowsItem_lastUpdatedAt = Lens.lens (\ListWorkflowsItem' {lastUpdatedAt} -> lastUpdatedAt) (\s@ListWorkflowsItem' {} a -> s {lastUpdatedAt = a} :: ListWorkflowsItem) Prelude.. Data._Time
+
+instance Data.FromJSON ListWorkflowsItem where
+  parseJSON =
+    Data.withObject
+      "ListWorkflowsItem"
+      ( \x ->
+          ListWorkflowsItem'
+            Prelude.<$> (x Data..: "WorkflowType")
+            Prelude.<*> (x Data..: "WorkflowId")
+            Prelude.<*> (x Data..: "Status")
+            Prelude.<*> (x Data..: "StatusDescription")
+            Prelude.<*> (x Data..: "CreatedAt")
+            Prelude.<*> (x Data..: "LastUpdatedAt")
+      )
+
+instance Prelude.Hashable ListWorkflowsItem where
+  hashWithSalt _salt ListWorkflowsItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` workflowType
+      `Prelude.hashWithSalt` workflowId
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` statusDescription
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` lastUpdatedAt
+
+instance Prelude.NFData ListWorkflowsItem where
+  rnf ListWorkflowsItem' {..} =
+    Prelude.rnf workflowType
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusDescription
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
diff --git a/gen/Amazonka/CustomerProfiles/Types/LogicalOperator.hs b/gen/Amazonka/CustomerProfiles/Types/LogicalOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/LogicalOperator.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.LogicalOperator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.LogicalOperator
+  ( LogicalOperator
+      ( ..,
+        LogicalOperator_AND,
+        LogicalOperator_OR
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LogicalOperator = LogicalOperator'
+  { fromLogicalOperator ::
+      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 LogicalOperator_AND :: LogicalOperator
+pattern LogicalOperator_AND = LogicalOperator' "AND"
+
+pattern LogicalOperator_OR :: LogicalOperator
+pattern LogicalOperator_OR = LogicalOperator' "OR"
+
+{-# COMPLETE
+  LogicalOperator_AND,
+  LogicalOperator_OR,
+  LogicalOperator'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/MarketoConnectorOperator.hs b/gen/Amazonka/CustomerProfiles/Types/MarketoConnectorOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/MarketoConnectorOperator.hs
@@ -0,0 +1,141 @@
+{-# 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.CustomerProfiles.Types.MarketoConnectorOperator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.MarketoConnectorOperator
+  ( MarketoConnectorOperator
+      ( ..,
+        MarketoConnectorOperator_ADDITION,
+        MarketoConnectorOperator_BETWEEN,
+        MarketoConnectorOperator_DIVISION,
+        MarketoConnectorOperator_GREATER_THAN,
+        MarketoConnectorOperator_LESS_THAN,
+        MarketoConnectorOperator_MASK_ALL,
+        MarketoConnectorOperator_MASK_FIRST_N,
+        MarketoConnectorOperator_MASK_LAST_N,
+        MarketoConnectorOperator_MULTIPLICATION,
+        MarketoConnectorOperator_NO_OP,
+        MarketoConnectorOperator_PROJECTION,
+        MarketoConnectorOperator_SUBTRACTION,
+        MarketoConnectorOperator_VALIDATE_NON_NEGATIVE,
+        MarketoConnectorOperator_VALIDATE_NON_NULL,
+        MarketoConnectorOperator_VALIDATE_NON_ZERO,
+        MarketoConnectorOperator_VALIDATE_NUMERIC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype MarketoConnectorOperator = MarketoConnectorOperator'
+  { fromMarketoConnectorOperator ::
+      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 MarketoConnectorOperator_ADDITION :: MarketoConnectorOperator
+pattern MarketoConnectorOperator_ADDITION = MarketoConnectorOperator' "ADDITION"
+
+pattern MarketoConnectorOperator_BETWEEN :: MarketoConnectorOperator
+pattern MarketoConnectorOperator_BETWEEN = MarketoConnectorOperator' "BETWEEN"
+
+pattern MarketoConnectorOperator_DIVISION :: MarketoConnectorOperator
+pattern MarketoConnectorOperator_DIVISION = MarketoConnectorOperator' "DIVISION"
+
+pattern MarketoConnectorOperator_GREATER_THAN :: MarketoConnectorOperator
+pattern MarketoConnectorOperator_GREATER_THAN = MarketoConnectorOperator' "GREATER_THAN"
+
+pattern MarketoConnectorOperator_LESS_THAN :: MarketoConnectorOperator
+pattern MarketoConnectorOperator_LESS_THAN = MarketoConnectorOperator' "LESS_THAN"
+
+pattern MarketoConnectorOperator_MASK_ALL :: MarketoConnectorOperator
+pattern MarketoConnectorOperator_MASK_ALL = MarketoConnectorOperator' "MASK_ALL"
+
+pattern MarketoConnectorOperator_MASK_FIRST_N :: MarketoConnectorOperator
+pattern MarketoConnectorOperator_MASK_FIRST_N = MarketoConnectorOperator' "MASK_FIRST_N"
+
+pattern MarketoConnectorOperator_MASK_LAST_N :: MarketoConnectorOperator
+pattern MarketoConnectorOperator_MASK_LAST_N = MarketoConnectorOperator' "MASK_LAST_N"
+
+pattern MarketoConnectorOperator_MULTIPLICATION :: MarketoConnectorOperator
+pattern MarketoConnectorOperator_MULTIPLICATION = MarketoConnectorOperator' "MULTIPLICATION"
+
+pattern MarketoConnectorOperator_NO_OP :: MarketoConnectorOperator
+pattern MarketoConnectorOperator_NO_OP = MarketoConnectorOperator' "NO_OP"
+
+pattern MarketoConnectorOperator_PROJECTION :: MarketoConnectorOperator
+pattern MarketoConnectorOperator_PROJECTION = MarketoConnectorOperator' "PROJECTION"
+
+pattern MarketoConnectorOperator_SUBTRACTION :: MarketoConnectorOperator
+pattern MarketoConnectorOperator_SUBTRACTION = MarketoConnectorOperator' "SUBTRACTION"
+
+pattern MarketoConnectorOperator_VALIDATE_NON_NEGATIVE :: MarketoConnectorOperator
+pattern MarketoConnectorOperator_VALIDATE_NON_NEGATIVE = MarketoConnectorOperator' "VALIDATE_NON_NEGATIVE"
+
+pattern MarketoConnectorOperator_VALIDATE_NON_NULL :: MarketoConnectorOperator
+pattern MarketoConnectorOperator_VALIDATE_NON_NULL = MarketoConnectorOperator' "VALIDATE_NON_NULL"
+
+pattern MarketoConnectorOperator_VALIDATE_NON_ZERO :: MarketoConnectorOperator
+pattern MarketoConnectorOperator_VALIDATE_NON_ZERO = MarketoConnectorOperator' "VALIDATE_NON_ZERO"
+
+pattern MarketoConnectorOperator_VALIDATE_NUMERIC :: MarketoConnectorOperator
+pattern MarketoConnectorOperator_VALIDATE_NUMERIC = MarketoConnectorOperator' "VALIDATE_NUMERIC"
+
+{-# COMPLETE
+  MarketoConnectorOperator_ADDITION,
+  MarketoConnectorOperator_BETWEEN,
+  MarketoConnectorOperator_DIVISION,
+  MarketoConnectorOperator_GREATER_THAN,
+  MarketoConnectorOperator_LESS_THAN,
+  MarketoConnectorOperator_MASK_ALL,
+  MarketoConnectorOperator_MASK_FIRST_N,
+  MarketoConnectorOperator_MASK_LAST_N,
+  MarketoConnectorOperator_MULTIPLICATION,
+  MarketoConnectorOperator_NO_OP,
+  MarketoConnectorOperator_PROJECTION,
+  MarketoConnectorOperator_SUBTRACTION,
+  MarketoConnectorOperator_VALIDATE_NON_NEGATIVE,
+  MarketoConnectorOperator_VALIDATE_NON_NULL,
+  MarketoConnectorOperator_VALIDATE_NON_ZERO,
+  MarketoConnectorOperator_VALIDATE_NUMERIC,
+  MarketoConnectorOperator'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/MarketoSourceProperties.hs b/gen/Amazonka/CustomerProfiles/Types/MarketoSourceProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/MarketoSourceProperties.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.MarketoSourceProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.MarketoSourceProperties where
+
+import qualified 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 properties that are applied when Marketo is being used as a source.
+--
+-- /See:/ 'newMarketoSourceProperties' smart constructor.
+data MarketoSourceProperties = MarketoSourceProperties'
+  { -- | The object specified in the Marketo flow source.
+    object' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MarketoSourceProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'object'', 'marketoSourceProperties_object' - The object specified in the Marketo flow source.
+newMarketoSourceProperties ::
+  -- | 'object''
+  Prelude.Text ->
+  MarketoSourceProperties
+newMarketoSourceProperties pObject_ =
+  MarketoSourceProperties' {object' = pObject_}
+
+-- | The object specified in the Marketo flow source.
+marketoSourceProperties_object :: Lens.Lens' MarketoSourceProperties Prelude.Text
+marketoSourceProperties_object = Lens.lens (\MarketoSourceProperties' {object'} -> object') (\s@MarketoSourceProperties' {} a -> s {object' = a} :: MarketoSourceProperties)
+
+instance Prelude.Hashable MarketoSourceProperties where
+  hashWithSalt _salt MarketoSourceProperties' {..} =
+    _salt `Prelude.hashWithSalt` object'
+
+instance Prelude.NFData MarketoSourceProperties where
+  rnf MarketoSourceProperties' {..} =
+    Prelude.rnf object'
+
+instance Data.ToJSON MarketoSourceProperties where
+  toJSON MarketoSourceProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Object" Data..= object')]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/MatchItem.hs b/gen/Amazonka/CustomerProfiles/Types/MatchItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/MatchItem.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.MatchItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.MatchItem where
+
+import qualified 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 Match group object.
+--
+-- /See:/ 'newMatchItem' smart constructor.
+data MatchItem = MatchItem'
+  { -- | A number between 0 and 1, where a higher score means higher similarity.
+    -- Examining match confidence scores lets you distinguish between groups of
+    -- similar records in which the system is highly confident (which you may
+    -- decide to merge), groups of similar records about which the system is
+    -- uncertain (which you may decide to have reviewed by a human), and groups
+    -- of similar records that the system deems to be unlikely (which you may
+    -- decide to reject). Given confidence scores vary as per the data input,
+    -- it should not be used an absolute measure of matching quality.
+    confidenceScore :: Prelude.Maybe Prelude.Double,
+    -- | The unique identifiers for this group of profiles that match.
+    matchId :: Prelude.Maybe Prelude.Text,
+    -- | A list of identifiers for profiles that match.
+    profileIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MatchItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'confidenceScore', 'matchItem_confidenceScore' - A number between 0 and 1, where a higher score means higher similarity.
+-- Examining match confidence scores lets you distinguish between groups of
+-- similar records in which the system is highly confident (which you may
+-- decide to merge), groups of similar records about which the system is
+-- uncertain (which you may decide to have reviewed by a human), and groups
+-- of similar records that the system deems to be unlikely (which you may
+-- decide to reject). Given confidence scores vary as per the data input,
+-- it should not be used an absolute measure of matching quality.
+--
+-- 'matchId', 'matchItem_matchId' - The unique identifiers for this group of profiles that match.
+--
+-- 'profileIds', 'matchItem_profileIds' - A list of identifiers for profiles that match.
+newMatchItem ::
+  MatchItem
+newMatchItem =
+  MatchItem'
+    { confidenceScore = Prelude.Nothing,
+      matchId = Prelude.Nothing,
+      profileIds = Prelude.Nothing
+    }
+
+-- | A number between 0 and 1, where a higher score means higher similarity.
+-- Examining match confidence scores lets you distinguish between groups of
+-- similar records in which the system is highly confident (which you may
+-- decide to merge), groups of similar records about which the system is
+-- uncertain (which you may decide to have reviewed by a human), and groups
+-- of similar records that the system deems to be unlikely (which you may
+-- decide to reject). Given confidence scores vary as per the data input,
+-- it should not be used an absolute measure of matching quality.
+matchItem_confidenceScore :: Lens.Lens' MatchItem (Prelude.Maybe Prelude.Double)
+matchItem_confidenceScore = Lens.lens (\MatchItem' {confidenceScore} -> confidenceScore) (\s@MatchItem' {} a -> s {confidenceScore = a} :: MatchItem)
+
+-- | The unique identifiers for this group of profiles that match.
+matchItem_matchId :: Lens.Lens' MatchItem (Prelude.Maybe Prelude.Text)
+matchItem_matchId = Lens.lens (\MatchItem' {matchId} -> matchId) (\s@MatchItem' {} a -> s {matchId = a} :: MatchItem)
+
+-- | A list of identifiers for profiles that match.
+matchItem_profileIds :: Lens.Lens' MatchItem (Prelude.Maybe [Prelude.Text])
+matchItem_profileIds = Lens.lens (\MatchItem' {profileIds} -> profileIds) (\s@MatchItem' {} a -> s {profileIds = a} :: MatchItem) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON MatchItem where
+  parseJSON =
+    Data.withObject
+      "MatchItem"
+      ( \x ->
+          MatchItem'
+            Prelude.<$> (x Data..:? "ConfidenceScore")
+            Prelude.<*> (x Data..:? "MatchId")
+            Prelude.<*> (x Data..:? "ProfileIds" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable MatchItem where
+  hashWithSalt _salt MatchItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` confidenceScore
+      `Prelude.hashWithSalt` matchId
+      `Prelude.hashWithSalt` profileIds
+
+instance Prelude.NFData MatchItem where
+  rnf MatchItem' {..} =
+    Prelude.rnf confidenceScore
+      `Prelude.seq` Prelude.rnf matchId
+      `Prelude.seq` Prelude.rnf profileIds
diff --git a/gen/Amazonka/CustomerProfiles/Types/MatchingRequest.hs b/gen/Amazonka/CustomerProfiles/Types/MatchingRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/MatchingRequest.hs
@@ -0,0 +1,119 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.MatchingRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.MatchingRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.AutoMerging
+import Amazonka.CustomerProfiles.Types.ExportingConfig
+import Amazonka.CustomerProfiles.Types.JobSchedule
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The flag that enables the matching process of duplicate profiles.
+--
+-- /See:/ 'newMatchingRequest' smart constructor.
+data MatchingRequest = MatchingRequest'
+  { -- | Configuration information about the auto-merging process.
+    autoMerging :: Prelude.Maybe AutoMerging,
+    -- | Configuration information for exporting Identity Resolution results, for
+    -- example, to an S3 bucket.
+    exportingConfig :: Prelude.Maybe ExportingConfig,
+    -- | The day and time when do you want to start the Identity Resolution Job
+    -- every week.
+    jobSchedule :: Prelude.Maybe JobSchedule,
+    -- | The flag that enables the matching process of duplicate profiles.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MatchingRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoMerging', 'matchingRequest_autoMerging' - Configuration information about the auto-merging process.
+--
+-- 'exportingConfig', 'matchingRequest_exportingConfig' - Configuration information for exporting Identity Resolution results, for
+-- example, to an S3 bucket.
+--
+-- 'jobSchedule', 'matchingRequest_jobSchedule' - The day and time when do you want to start the Identity Resolution Job
+-- every week.
+--
+-- 'enabled', 'matchingRequest_enabled' - The flag that enables the matching process of duplicate profiles.
+newMatchingRequest ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  MatchingRequest
+newMatchingRequest pEnabled_ =
+  MatchingRequest'
+    { autoMerging = Prelude.Nothing,
+      exportingConfig = Prelude.Nothing,
+      jobSchedule = Prelude.Nothing,
+      enabled = pEnabled_
+    }
+
+-- | Configuration information about the auto-merging process.
+matchingRequest_autoMerging :: Lens.Lens' MatchingRequest (Prelude.Maybe AutoMerging)
+matchingRequest_autoMerging = Lens.lens (\MatchingRequest' {autoMerging} -> autoMerging) (\s@MatchingRequest' {} a -> s {autoMerging = a} :: MatchingRequest)
+
+-- | Configuration information for exporting Identity Resolution results, for
+-- example, to an S3 bucket.
+matchingRequest_exportingConfig :: Lens.Lens' MatchingRequest (Prelude.Maybe ExportingConfig)
+matchingRequest_exportingConfig = Lens.lens (\MatchingRequest' {exportingConfig} -> exportingConfig) (\s@MatchingRequest' {} a -> s {exportingConfig = a} :: MatchingRequest)
+
+-- | The day and time when do you want to start the Identity Resolution Job
+-- every week.
+matchingRequest_jobSchedule :: Lens.Lens' MatchingRequest (Prelude.Maybe JobSchedule)
+matchingRequest_jobSchedule = Lens.lens (\MatchingRequest' {jobSchedule} -> jobSchedule) (\s@MatchingRequest' {} a -> s {jobSchedule = a} :: MatchingRequest)
+
+-- | The flag that enables the matching process of duplicate profiles.
+matchingRequest_enabled :: Lens.Lens' MatchingRequest Prelude.Bool
+matchingRequest_enabled = Lens.lens (\MatchingRequest' {enabled} -> enabled) (\s@MatchingRequest' {} a -> s {enabled = a} :: MatchingRequest)
+
+instance Prelude.Hashable MatchingRequest where
+  hashWithSalt _salt MatchingRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoMerging
+      `Prelude.hashWithSalt` exportingConfig
+      `Prelude.hashWithSalt` jobSchedule
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData MatchingRequest where
+  rnf MatchingRequest' {..} =
+    Prelude.rnf autoMerging
+      `Prelude.seq` Prelude.rnf exportingConfig
+      `Prelude.seq` Prelude.rnf jobSchedule
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToJSON MatchingRequest where
+  toJSON MatchingRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AutoMerging" Data..=) Prelude.<$> autoMerging,
+            ("ExportingConfig" Data..=)
+              Prelude.<$> exportingConfig,
+            ("JobSchedule" Data..=) Prelude.<$> jobSchedule,
+            Prelude.Just ("Enabled" Data..= enabled)
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/MatchingResponse.hs b/gen/Amazonka/CustomerProfiles/Types/MatchingResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/MatchingResponse.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.MatchingResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.MatchingResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.AutoMerging
+import Amazonka.CustomerProfiles.Types.ExportingConfig
+import Amazonka.CustomerProfiles.Types.JobSchedule
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The flag that enables the matching process of duplicate profiles.
+--
+-- /See:/ 'newMatchingResponse' smart constructor.
+data MatchingResponse = MatchingResponse'
+  { -- | Configuration information about the auto-merging process.
+    autoMerging :: Prelude.Maybe AutoMerging,
+    -- | The flag that enables the matching process of duplicate profiles.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | Configuration information for exporting Identity Resolution results, for
+    -- example, to an S3 bucket.
+    exportingConfig :: Prelude.Maybe ExportingConfig,
+    -- | The day and time when do you want to start the Identity Resolution Job
+    -- every week.
+    jobSchedule :: Prelude.Maybe JobSchedule
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MatchingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoMerging', 'matchingResponse_autoMerging' - Configuration information about the auto-merging process.
+--
+-- 'enabled', 'matchingResponse_enabled' - The flag that enables the matching process of duplicate profiles.
+--
+-- 'exportingConfig', 'matchingResponse_exportingConfig' - Configuration information for exporting Identity Resolution results, for
+-- example, to an S3 bucket.
+--
+-- 'jobSchedule', 'matchingResponse_jobSchedule' - The day and time when do you want to start the Identity Resolution Job
+-- every week.
+newMatchingResponse ::
+  MatchingResponse
+newMatchingResponse =
+  MatchingResponse'
+    { autoMerging = Prelude.Nothing,
+      enabled = Prelude.Nothing,
+      exportingConfig = Prelude.Nothing,
+      jobSchedule = Prelude.Nothing
+    }
+
+-- | Configuration information about the auto-merging process.
+matchingResponse_autoMerging :: Lens.Lens' MatchingResponse (Prelude.Maybe AutoMerging)
+matchingResponse_autoMerging = Lens.lens (\MatchingResponse' {autoMerging} -> autoMerging) (\s@MatchingResponse' {} a -> s {autoMerging = a} :: MatchingResponse)
+
+-- | The flag that enables the matching process of duplicate profiles.
+matchingResponse_enabled :: Lens.Lens' MatchingResponse (Prelude.Maybe Prelude.Bool)
+matchingResponse_enabled = Lens.lens (\MatchingResponse' {enabled} -> enabled) (\s@MatchingResponse' {} a -> s {enabled = a} :: MatchingResponse)
+
+-- | Configuration information for exporting Identity Resolution results, for
+-- example, to an S3 bucket.
+matchingResponse_exportingConfig :: Lens.Lens' MatchingResponse (Prelude.Maybe ExportingConfig)
+matchingResponse_exportingConfig = Lens.lens (\MatchingResponse' {exportingConfig} -> exportingConfig) (\s@MatchingResponse' {} a -> s {exportingConfig = a} :: MatchingResponse)
+
+-- | The day and time when do you want to start the Identity Resolution Job
+-- every week.
+matchingResponse_jobSchedule :: Lens.Lens' MatchingResponse (Prelude.Maybe JobSchedule)
+matchingResponse_jobSchedule = Lens.lens (\MatchingResponse' {jobSchedule} -> jobSchedule) (\s@MatchingResponse' {} a -> s {jobSchedule = a} :: MatchingResponse)
+
+instance Data.FromJSON MatchingResponse where
+  parseJSON =
+    Data.withObject
+      "MatchingResponse"
+      ( \x ->
+          MatchingResponse'
+            Prelude.<$> (x Data..:? "AutoMerging")
+            Prelude.<*> (x Data..:? "Enabled")
+            Prelude.<*> (x Data..:? "ExportingConfig")
+            Prelude.<*> (x Data..:? "JobSchedule")
+      )
+
+instance Prelude.Hashable MatchingResponse where
+  hashWithSalt _salt MatchingResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoMerging
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` exportingConfig
+      `Prelude.hashWithSalt` jobSchedule
+
+instance Prelude.NFData MatchingResponse where
+  rnf MatchingResponse' {..} =
+    Prelude.rnf autoMerging
+      `Prelude.seq` Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf exportingConfig
+      `Prelude.seq` Prelude.rnf jobSchedule
diff --git a/gen/Amazonka/CustomerProfiles/Types/ObjectFilter.hs b/gen/Amazonka/CustomerProfiles/Types/ObjectFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ObjectFilter.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.ObjectFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ObjectFilter where
+
+import qualified 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 filter applied to ListProfileObjects response to include profile
+-- objects with the specified index values. This filter is only supported
+-- for ObjectTypeName _asset, _case and _order.
+--
+-- /See:/ 'newObjectFilter' smart constructor.
+data ObjectFilter = ObjectFilter'
+  { -- | A searchable identifier of a standard profile object. The predefined
+    -- keys you can use to search for _asset include: _assetId, _assetName,
+    -- _serialNumber. The predefined keys you can use to search for _case
+    -- include: _caseId. The predefined keys you can use to search for _order
+    -- include: _orderId.
+    keyName :: Prelude.Text,
+    -- | A list of key values.
+    values :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ObjectFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'keyName', 'objectFilter_keyName' - A searchable identifier of a standard profile object. The predefined
+-- keys you can use to search for _asset include: _assetId, _assetName,
+-- _serialNumber. The predefined keys you can use to search for _case
+-- include: _caseId. The predefined keys you can use to search for _order
+-- include: _orderId.
+--
+-- 'values', 'objectFilter_values' - A list of key values.
+newObjectFilter ::
+  -- | 'keyName'
+  Prelude.Text ->
+  ObjectFilter
+newObjectFilter pKeyName_ =
+  ObjectFilter'
+    { keyName = pKeyName_,
+      values = Prelude.mempty
+    }
+
+-- | A searchable identifier of a standard profile object. The predefined
+-- keys you can use to search for _asset include: _assetId, _assetName,
+-- _serialNumber. The predefined keys you can use to search for _case
+-- include: _caseId. The predefined keys you can use to search for _order
+-- include: _orderId.
+objectFilter_keyName :: Lens.Lens' ObjectFilter Prelude.Text
+objectFilter_keyName = Lens.lens (\ObjectFilter' {keyName} -> keyName) (\s@ObjectFilter' {} a -> s {keyName = a} :: ObjectFilter)
+
+-- | A list of key values.
+objectFilter_values :: Lens.Lens' ObjectFilter [Prelude.Text]
+objectFilter_values = Lens.lens (\ObjectFilter' {values} -> values) (\s@ObjectFilter' {} a -> s {values = a} :: ObjectFilter) Prelude.. Lens.coerced
+
+instance Prelude.Hashable ObjectFilter where
+  hashWithSalt _salt ObjectFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` keyName
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData ObjectFilter where
+  rnf ObjectFilter' {..} =
+    Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf values
+
+instance Data.ToJSON ObjectFilter where
+  toJSON ObjectFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("KeyName" Data..= keyName),
+            Prelude.Just ("Values" Data..= values)
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/ObjectTypeField.hs b/gen/Amazonka/CustomerProfiles/Types/ObjectTypeField.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ObjectTypeField.hs
@@ -0,0 +1,119 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.ObjectTypeField
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ObjectTypeField where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.FieldContentType
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a field in a ProfileObjectType.
+--
+-- /See:/ 'newObjectTypeField' smart constructor.
+data ObjectTypeField = ObjectTypeField'
+  { -- | The content type of the field. Used for determining equality when
+    -- searching.
+    contentType :: Prelude.Maybe FieldContentType,
+    -- | A field of a ProfileObject. For example: _source.FirstName, where
+    -- “_source” is a ProfileObjectType of a Zendesk user and “FirstName” is a
+    -- field in that ObjectType.
+    source :: Prelude.Maybe Prelude.Text,
+    -- | The location of the data in the standard ProfileObject model. For
+    -- example: _profile.Address.PostalCode.
+    target :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ObjectTypeField' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentType', 'objectTypeField_contentType' - The content type of the field. Used for determining equality when
+-- searching.
+--
+-- 'source', 'objectTypeField_source' - A field of a ProfileObject. For example: _source.FirstName, where
+-- “_source” is a ProfileObjectType of a Zendesk user and “FirstName” is a
+-- field in that ObjectType.
+--
+-- 'target', 'objectTypeField_target' - The location of the data in the standard ProfileObject model. For
+-- example: _profile.Address.PostalCode.
+newObjectTypeField ::
+  ObjectTypeField
+newObjectTypeField =
+  ObjectTypeField'
+    { contentType = Prelude.Nothing,
+      source = Prelude.Nothing,
+      target = Prelude.Nothing
+    }
+
+-- | The content type of the field. Used for determining equality when
+-- searching.
+objectTypeField_contentType :: Lens.Lens' ObjectTypeField (Prelude.Maybe FieldContentType)
+objectTypeField_contentType = Lens.lens (\ObjectTypeField' {contentType} -> contentType) (\s@ObjectTypeField' {} a -> s {contentType = a} :: ObjectTypeField)
+
+-- | A field of a ProfileObject. For example: _source.FirstName, where
+-- “_source” is a ProfileObjectType of a Zendesk user and “FirstName” is a
+-- field in that ObjectType.
+objectTypeField_source :: Lens.Lens' ObjectTypeField (Prelude.Maybe Prelude.Text)
+objectTypeField_source = Lens.lens (\ObjectTypeField' {source} -> source) (\s@ObjectTypeField' {} a -> s {source = a} :: ObjectTypeField)
+
+-- | The location of the data in the standard ProfileObject model. For
+-- example: _profile.Address.PostalCode.
+objectTypeField_target :: Lens.Lens' ObjectTypeField (Prelude.Maybe Prelude.Text)
+objectTypeField_target = Lens.lens (\ObjectTypeField' {target} -> target) (\s@ObjectTypeField' {} a -> s {target = a} :: ObjectTypeField)
+
+instance Data.FromJSON ObjectTypeField where
+  parseJSON =
+    Data.withObject
+      "ObjectTypeField"
+      ( \x ->
+          ObjectTypeField'
+            Prelude.<$> (x Data..:? "ContentType")
+            Prelude.<*> (x Data..:? "Source")
+            Prelude.<*> (x Data..:? "Target")
+      )
+
+instance Prelude.Hashable ObjectTypeField where
+  hashWithSalt _salt ObjectTypeField' {..} =
+    _salt
+      `Prelude.hashWithSalt` contentType
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` target
+
+instance Prelude.NFData ObjectTypeField where
+  rnf ObjectTypeField' {..} =
+    Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf target
+
+instance Data.ToJSON ObjectTypeField where
+  toJSON ObjectTypeField' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ContentType" Data..=) Prelude.<$> contentType,
+            ("Source" Data..=) Prelude.<$> source,
+            ("Target" Data..=) Prelude.<$> target
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/ObjectTypeKey.hs b/gen/Amazonka/CustomerProfiles/Types/ObjectTypeKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ObjectTypeKey.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.ObjectTypeKey
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ObjectTypeKey where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.StandardIdentifier
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that defines the Key element of a ProfileObject. A Key is a
+-- special element that can be used to search for a customer profile.
+--
+-- /See:/ 'newObjectTypeKey' smart constructor.
+data ObjectTypeKey = ObjectTypeKey'
+  { -- | The reference for the key name of the fields map.
+    fieldNames :: Prelude.Maybe [Prelude.Text],
+    -- | The types of keys that a ProfileObject can have. Each ProfileObject can
+    -- have only 1 UNIQUE key but multiple PROFILE keys. PROFILE, ASSET, CASE,
+    -- or ORDER means that this key can be used to tie an object to a PROFILE,
+    -- ASSET, CASE, or ORDER respectively. UNIQUE means that it can be used to
+    -- uniquely identify an object. If a key a is marked as SECONDARY, it will
+    -- be used to search for profiles after all other PROFILE keys have been
+    -- searched. A LOOKUP_ONLY key is only used to match a profile but is not
+    -- persisted to be used for searching of the profile. A NEW_ONLY key is
+    -- only used if the profile does not already exist before the object is
+    -- ingested, otherwise it is only used for matching objects to profiles.
+    standardIdentifiers :: Prelude.Maybe [StandardIdentifier]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ObjectTypeKey' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fieldNames', 'objectTypeKey_fieldNames' - The reference for the key name of the fields map.
+--
+-- 'standardIdentifiers', 'objectTypeKey_standardIdentifiers' - The types of keys that a ProfileObject can have. Each ProfileObject can
+-- have only 1 UNIQUE key but multiple PROFILE keys. PROFILE, ASSET, CASE,
+-- or ORDER means that this key can be used to tie an object to a PROFILE,
+-- ASSET, CASE, or ORDER respectively. UNIQUE means that it can be used to
+-- uniquely identify an object. If a key a is marked as SECONDARY, it will
+-- be used to search for profiles after all other PROFILE keys have been
+-- searched. A LOOKUP_ONLY key is only used to match a profile but is not
+-- persisted to be used for searching of the profile. A NEW_ONLY key is
+-- only used if the profile does not already exist before the object is
+-- ingested, otherwise it is only used for matching objects to profiles.
+newObjectTypeKey ::
+  ObjectTypeKey
+newObjectTypeKey =
+  ObjectTypeKey'
+    { fieldNames = Prelude.Nothing,
+      standardIdentifiers = Prelude.Nothing
+    }
+
+-- | The reference for the key name of the fields map.
+objectTypeKey_fieldNames :: Lens.Lens' ObjectTypeKey (Prelude.Maybe [Prelude.Text])
+objectTypeKey_fieldNames = Lens.lens (\ObjectTypeKey' {fieldNames} -> fieldNames) (\s@ObjectTypeKey' {} a -> s {fieldNames = a} :: ObjectTypeKey) Prelude.. Lens.mapping Lens.coerced
+
+-- | The types of keys that a ProfileObject can have. Each ProfileObject can
+-- have only 1 UNIQUE key but multiple PROFILE keys. PROFILE, ASSET, CASE,
+-- or ORDER means that this key can be used to tie an object to a PROFILE,
+-- ASSET, CASE, or ORDER respectively. UNIQUE means that it can be used to
+-- uniquely identify an object. If a key a is marked as SECONDARY, it will
+-- be used to search for profiles after all other PROFILE keys have been
+-- searched. A LOOKUP_ONLY key is only used to match a profile but is not
+-- persisted to be used for searching of the profile. A NEW_ONLY key is
+-- only used if the profile does not already exist before the object is
+-- ingested, otherwise it is only used for matching objects to profiles.
+objectTypeKey_standardIdentifiers :: Lens.Lens' ObjectTypeKey (Prelude.Maybe [StandardIdentifier])
+objectTypeKey_standardIdentifiers = Lens.lens (\ObjectTypeKey' {standardIdentifiers} -> standardIdentifiers) (\s@ObjectTypeKey' {} a -> s {standardIdentifiers = a} :: ObjectTypeKey) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ObjectTypeKey where
+  parseJSON =
+    Data.withObject
+      "ObjectTypeKey"
+      ( \x ->
+          ObjectTypeKey'
+            Prelude.<$> (x Data..:? "FieldNames" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "StandardIdentifiers"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ObjectTypeKey where
+  hashWithSalt _salt ObjectTypeKey' {..} =
+    _salt
+      `Prelude.hashWithSalt` fieldNames
+      `Prelude.hashWithSalt` standardIdentifiers
+
+instance Prelude.NFData ObjectTypeKey where
+  rnf ObjectTypeKey' {..} =
+    Prelude.rnf fieldNames
+      `Prelude.seq` Prelude.rnf standardIdentifiers
+
+instance Data.ToJSON ObjectTypeKey where
+  toJSON ObjectTypeKey' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FieldNames" Data..=) Prelude.<$> fieldNames,
+            ("StandardIdentifiers" Data..=)
+              Prelude.<$> standardIdentifiers
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/OperatorPropertiesKeys.hs b/gen/Amazonka/CustomerProfiles/Types/OperatorPropertiesKeys.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/OperatorPropertiesKeys.hs
@@ -0,0 +1,131 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.OperatorPropertiesKeys
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.OperatorPropertiesKeys
+  ( OperatorPropertiesKeys
+      ( ..,
+        OperatorPropertiesKeys_CONCAT_FORMAT,
+        OperatorPropertiesKeys_DATA_TYPE,
+        OperatorPropertiesKeys_DESTINATION_DATA_TYPE,
+        OperatorPropertiesKeys_LOWER_BOUND,
+        OperatorPropertiesKeys_MASK_LENGTH,
+        OperatorPropertiesKeys_MASK_VALUE,
+        OperatorPropertiesKeys_MATH_OPERATION_FIELDS_ORDER,
+        OperatorPropertiesKeys_SOURCE_DATA_TYPE,
+        OperatorPropertiesKeys_SUBFIELD_CATEGORY_MAP,
+        OperatorPropertiesKeys_TRUNCATE_LENGTH,
+        OperatorPropertiesKeys_UPPER_BOUND,
+        OperatorPropertiesKeys_VALIDATION_ACTION,
+        OperatorPropertiesKeys_VALUE,
+        OperatorPropertiesKeys_VALUES
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype OperatorPropertiesKeys = OperatorPropertiesKeys'
+  { fromOperatorPropertiesKeys ::
+      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 OperatorPropertiesKeys_CONCAT_FORMAT :: OperatorPropertiesKeys
+pattern OperatorPropertiesKeys_CONCAT_FORMAT = OperatorPropertiesKeys' "CONCAT_FORMAT"
+
+pattern OperatorPropertiesKeys_DATA_TYPE :: OperatorPropertiesKeys
+pattern OperatorPropertiesKeys_DATA_TYPE = OperatorPropertiesKeys' "DATA_TYPE"
+
+pattern OperatorPropertiesKeys_DESTINATION_DATA_TYPE :: OperatorPropertiesKeys
+pattern OperatorPropertiesKeys_DESTINATION_DATA_TYPE = OperatorPropertiesKeys' "DESTINATION_DATA_TYPE"
+
+pattern OperatorPropertiesKeys_LOWER_BOUND :: OperatorPropertiesKeys
+pattern OperatorPropertiesKeys_LOWER_BOUND = OperatorPropertiesKeys' "LOWER_BOUND"
+
+pattern OperatorPropertiesKeys_MASK_LENGTH :: OperatorPropertiesKeys
+pattern OperatorPropertiesKeys_MASK_LENGTH = OperatorPropertiesKeys' "MASK_LENGTH"
+
+pattern OperatorPropertiesKeys_MASK_VALUE :: OperatorPropertiesKeys
+pattern OperatorPropertiesKeys_MASK_VALUE = OperatorPropertiesKeys' "MASK_VALUE"
+
+pattern OperatorPropertiesKeys_MATH_OPERATION_FIELDS_ORDER :: OperatorPropertiesKeys
+pattern OperatorPropertiesKeys_MATH_OPERATION_FIELDS_ORDER = OperatorPropertiesKeys' "MATH_OPERATION_FIELDS_ORDER"
+
+pattern OperatorPropertiesKeys_SOURCE_DATA_TYPE :: OperatorPropertiesKeys
+pattern OperatorPropertiesKeys_SOURCE_DATA_TYPE = OperatorPropertiesKeys' "SOURCE_DATA_TYPE"
+
+pattern OperatorPropertiesKeys_SUBFIELD_CATEGORY_MAP :: OperatorPropertiesKeys
+pattern OperatorPropertiesKeys_SUBFIELD_CATEGORY_MAP = OperatorPropertiesKeys' "SUBFIELD_CATEGORY_MAP"
+
+pattern OperatorPropertiesKeys_TRUNCATE_LENGTH :: OperatorPropertiesKeys
+pattern OperatorPropertiesKeys_TRUNCATE_LENGTH = OperatorPropertiesKeys' "TRUNCATE_LENGTH"
+
+pattern OperatorPropertiesKeys_UPPER_BOUND :: OperatorPropertiesKeys
+pattern OperatorPropertiesKeys_UPPER_BOUND = OperatorPropertiesKeys' "UPPER_BOUND"
+
+pattern OperatorPropertiesKeys_VALIDATION_ACTION :: OperatorPropertiesKeys
+pattern OperatorPropertiesKeys_VALIDATION_ACTION = OperatorPropertiesKeys' "VALIDATION_ACTION"
+
+pattern OperatorPropertiesKeys_VALUE :: OperatorPropertiesKeys
+pattern OperatorPropertiesKeys_VALUE = OperatorPropertiesKeys' "VALUE"
+
+pattern OperatorPropertiesKeys_VALUES :: OperatorPropertiesKeys
+pattern OperatorPropertiesKeys_VALUES = OperatorPropertiesKeys' "VALUES"
+
+{-# COMPLETE
+  OperatorPropertiesKeys_CONCAT_FORMAT,
+  OperatorPropertiesKeys_DATA_TYPE,
+  OperatorPropertiesKeys_DESTINATION_DATA_TYPE,
+  OperatorPropertiesKeys_LOWER_BOUND,
+  OperatorPropertiesKeys_MASK_LENGTH,
+  OperatorPropertiesKeys_MASK_VALUE,
+  OperatorPropertiesKeys_MATH_OPERATION_FIELDS_ORDER,
+  OperatorPropertiesKeys_SOURCE_DATA_TYPE,
+  OperatorPropertiesKeys_SUBFIELD_CATEGORY_MAP,
+  OperatorPropertiesKeys_TRUNCATE_LENGTH,
+  OperatorPropertiesKeys_UPPER_BOUND,
+  OperatorPropertiesKeys_VALIDATION_ACTION,
+  OperatorPropertiesKeys_VALUE,
+  OperatorPropertiesKeys_VALUES,
+  OperatorPropertiesKeys'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/PartyType.hs b/gen/Amazonka/CustomerProfiles/Types/PartyType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/PartyType.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.CustomerProfiles.Types.PartyType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.PartyType
+  ( PartyType
+      ( ..,
+        PartyType_BUSINESS,
+        PartyType_INDIVIDUAL,
+        PartyType_OTHER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PartyType = PartyType'
+  { fromPartyType ::
+      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 PartyType_BUSINESS :: PartyType
+pattern PartyType_BUSINESS = PartyType' "BUSINESS"
+
+pattern PartyType_INDIVIDUAL :: PartyType
+pattern PartyType_INDIVIDUAL = PartyType' "INDIVIDUAL"
+
+pattern PartyType_OTHER :: PartyType
+pattern PartyType_OTHER = PartyType' "OTHER"
+
+{-# COMPLETE
+  PartyType_BUSINESS,
+  PartyType_INDIVIDUAL,
+  PartyType_OTHER,
+  PartyType'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/Profile.hs b/gen/Amazonka/CustomerProfiles/Types/Profile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/Profile.hs
@@ -0,0 +1,420 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.Profile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.Profile where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.Address
+import Amazonka.CustomerProfiles.Types.FoundByKeyValue
+import Amazonka.CustomerProfiles.Types.Gender
+import Amazonka.CustomerProfiles.Types.PartyType
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The standard profile of a customer.
+--
+-- /See:/ 'newProfile' smart constructor.
+data Profile = Profile'
+  { -- | A unique account number that you have given to the customer.
+    accountNumber :: Prelude.Maybe Prelude.Text,
+    -- | Any additional information relevant to the customer’s profile.
+    additionalInformation :: Prelude.Maybe Prelude.Text,
+    -- | A generic address associated with the customer that is not mailing,
+    -- shipping, or billing.
+    address :: Prelude.Maybe Address,
+    -- | A key value pair of attributes of a customer profile.
+    attributes :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The customer’s billing address.
+    billingAddress :: Prelude.Maybe Address,
+    -- | The customer’s birth date.
+    birthDate :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s business email address.
+    businessEmailAddress :: Prelude.Maybe Prelude.Text,
+    -- | The name of the customer’s business.
+    businessName :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s home phone number.
+    businessPhoneNumber :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s email address, which has not been specified as a personal
+    -- or business address.
+    emailAddress :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s first name.
+    firstName :: Prelude.Maybe Prelude.Text,
+    -- | A list of items used to find a profile returned in a
+    -- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_SearchProfiles.html SearchProfiles>
+    -- response. An item is a key-value(s) pair that matches an attribute in
+    -- the profile.
+    --
+    -- If the optional @AdditionalSearchKeys@ parameter was included in the
+    -- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_SearchProfiles.html SearchProfiles>
+    -- request, the @FoundByItems@ list should be interpreted based on the
+    -- @LogicalOperator@ used in the request:
+    --
+    -- -   @AND@ - The profile included in the response matched all of the
+    --     search keys specified in the request. The @FoundByItems@ will
+    --     include all of the key-value(s) pairs that were specified in the
+    --     request (as this is a requirement of @AND@ search logic).
+    --
+    -- -   @OR@ - The profile included in the response matched at least one of
+    --     the search keys specified in the request. The @FoundByItems@ will
+    --     include each of the key-value(s) pairs that the profile was found
+    --     by.
+    --
+    -- The @OR@ relationship is the default behavior if the @LogicalOperator@
+    -- parameter is not included in the
+    -- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_SearchProfiles.html SearchProfiles>
+    -- request.
+    foundByItems :: Prelude.Maybe (Prelude.NonEmpty FoundByKeyValue),
+    -- | The gender with which the customer identifies.
+    gender :: Prelude.Maybe Gender,
+    -- | The customer’s home phone number.
+    homePhoneNumber :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s last name.
+    lastName :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s mailing address.
+    mailingAddress :: Prelude.Maybe Address,
+    -- | The customer’s middle name.
+    middleName :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s mobile phone number.
+    mobilePhoneNumber :: Prelude.Maybe Prelude.Text,
+    -- | The type of profile used to describe the customer.
+    partyType :: Prelude.Maybe PartyType,
+    -- | The customer’s personal email address.
+    personalEmailAddress :: Prelude.Maybe Prelude.Text,
+    -- | The customer\'s phone number, which has not been specified as a mobile,
+    -- home, or business number.
+    phoneNumber :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of a customer profile.
+    profileId :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s shipping address.
+    shippingAddress :: Prelude.Maybe Address
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Profile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountNumber', 'profile_accountNumber' - A unique account number that you have given to the customer.
+--
+-- 'additionalInformation', 'profile_additionalInformation' - Any additional information relevant to the customer’s profile.
+--
+-- 'address', 'profile_address' - A generic address associated with the customer that is not mailing,
+-- shipping, or billing.
+--
+-- 'attributes', 'profile_attributes' - A key value pair of attributes of a customer profile.
+--
+-- 'billingAddress', 'profile_billingAddress' - The customer’s billing address.
+--
+-- 'birthDate', 'profile_birthDate' - The customer’s birth date.
+--
+-- 'businessEmailAddress', 'profile_businessEmailAddress' - The customer’s business email address.
+--
+-- 'businessName', 'profile_businessName' - The name of the customer’s business.
+--
+-- 'businessPhoneNumber', 'profile_businessPhoneNumber' - The customer’s home phone number.
+--
+-- 'emailAddress', 'profile_emailAddress' - The customer’s email address, which has not been specified as a personal
+-- or business address.
+--
+-- 'firstName', 'profile_firstName' - The customer’s first name.
+--
+-- 'foundByItems', 'profile_foundByItems' - A list of items used to find a profile returned in a
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_SearchProfiles.html SearchProfiles>
+-- response. An item is a key-value(s) pair that matches an attribute in
+-- the profile.
+--
+-- If the optional @AdditionalSearchKeys@ parameter was included in the
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_SearchProfiles.html SearchProfiles>
+-- request, the @FoundByItems@ list should be interpreted based on the
+-- @LogicalOperator@ used in the request:
+--
+-- -   @AND@ - The profile included in the response matched all of the
+--     search keys specified in the request. The @FoundByItems@ will
+--     include all of the key-value(s) pairs that were specified in the
+--     request (as this is a requirement of @AND@ search logic).
+--
+-- -   @OR@ - The profile included in the response matched at least one of
+--     the search keys specified in the request. The @FoundByItems@ will
+--     include each of the key-value(s) pairs that the profile was found
+--     by.
+--
+-- The @OR@ relationship is the default behavior if the @LogicalOperator@
+-- parameter is not included in the
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_SearchProfiles.html SearchProfiles>
+-- request.
+--
+-- 'gender', 'profile_gender' - The gender with which the customer identifies.
+--
+-- 'homePhoneNumber', 'profile_homePhoneNumber' - The customer’s home phone number.
+--
+-- 'lastName', 'profile_lastName' - The customer’s last name.
+--
+-- 'mailingAddress', 'profile_mailingAddress' - The customer’s mailing address.
+--
+-- 'middleName', 'profile_middleName' - The customer’s middle name.
+--
+-- 'mobilePhoneNumber', 'profile_mobilePhoneNumber' - The customer’s mobile phone number.
+--
+-- 'partyType', 'profile_partyType' - The type of profile used to describe the customer.
+--
+-- 'personalEmailAddress', 'profile_personalEmailAddress' - The customer’s personal email address.
+--
+-- 'phoneNumber', 'profile_phoneNumber' - The customer\'s phone number, which has not been specified as a mobile,
+-- home, or business number.
+--
+-- 'profileId', 'profile_profileId' - The unique identifier of a customer profile.
+--
+-- 'shippingAddress', 'profile_shippingAddress' - The customer’s shipping address.
+newProfile ::
+  Profile
+newProfile =
+  Profile'
+    { accountNumber = Prelude.Nothing,
+      additionalInformation = Prelude.Nothing,
+      address = Prelude.Nothing,
+      attributes = Prelude.Nothing,
+      billingAddress = Prelude.Nothing,
+      birthDate = Prelude.Nothing,
+      businessEmailAddress = Prelude.Nothing,
+      businessName = Prelude.Nothing,
+      businessPhoneNumber = Prelude.Nothing,
+      emailAddress = Prelude.Nothing,
+      firstName = Prelude.Nothing,
+      foundByItems = Prelude.Nothing,
+      gender = Prelude.Nothing,
+      homePhoneNumber = Prelude.Nothing,
+      lastName = Prelude.Nothing,
+      mailingAddress = Prelude.Nothing,
+      middleName = Prelude.Nothing,
+      mobilePhoneNumber = Prelude.Nothing,
+      partyType = Prelude.Nothing,
+      personalEmailAddress = Prelude.Nothing,
+      phoneNumber = Prelude.Nothing,
+      profileId = Prelude.Nothing,
+      shippingAddress = Prelude.Nothing
+    }
+
+-- | A unique account number that you have given to the customer.
+profile_accountNumber :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_accountNumber = Lens.lens (\Profile' {accountNumber} -> accountNumber) (\s@Profile' {} a -> s {accountNumber = a} :: Profile)
+
+-- | Any additional information relevant to the customer’s profile.
+profile_additionalInformation :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_additionalInformation = Lens.lens (\Profile' {additionalInformation} -> additionalInformation) (\s@Profile' {} a -> s {additionalInformation = a} :: Profile)
+
+-- | A generic address associated with the customer that is not mailing,
+-- shipping, or billing.
+profile_address :: Lens.Lens' Profile (Prelude.Maybe Address)
+profile_address = Lens.lens (\Profile' {address} -> address) (\s@Profile' {} a -> s {address = a} :: Profile)
+
+-- | A key value pair of attributes of a customer profile.
+profile_attributes :: Lens.Lens' Profile (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+profile_attributes = Lens.lens (\Profile' {attributes} -> attributes) (\s@Profile' {} a -> s {attributes = a} :: Profile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The customer’s billing address.
+profile_billingAddress :: Lens.Lens' Profile (Prelude.Maybe Address)
+profile_billingAddress = Lens.lens (\Profile' {billingAddress} -> billingAddress) (\s@Profile' {} a -> s {billingAddress = a} :: Profile)
+
+-- | The customer’s birth date.
+profile_birthDate :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_birthDate = Lens.lens (\Profile' {birthDate} -> birthDate) (\s@Profile' {} a -> s {birthDate = a} :: Profile)
+
+-- | The customer’s business email address.
+profile_businessEmailAddress :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_businessEmailAddress = Lens.lens (\Profile' {businessEmailAddress} -> businessEmailAddress) (\s@Profile' {} a -> s {businessEmailAddress = a} :: Profile)
+
+-- | The name of the customer’s business.
+profile_businessName :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_businessName = Lens.lens (\Profile' {businessName} -> businessName) (\s@Profile' {} a -> s {businessName = a} :: Profile)
+
+-- | The customer’s home phone number.
+profile_businessPhoneNumber :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_businessPhoneNumber = Lens.lens (\Profile' {businessPhoneNumber} -> businessPhoneNumber) (\s@Profile' {} a -> s {businessPhoneNumber = a} :: Profile)
+
+-- | The customer’s email address, which has not been specified as a personal
+-- or business address.
+profile_emailAddress :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_emailAddress = Lens.lens (\Profile' {emailAddress} -> emailAddress) (\s@Profile' {} a -> s {emailAddress = a} :: Profile)
+
+-- | The customer’s first name.
+profile_firstName :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_firstName = Lens.lens (\Profile' {firstName} -> firstName) (\s@Profile' {} a -> s {firstName = a} :: Profile)
+
+-- | A list of items used to find a profile returned in a
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_SearchProfiles.html SearchProfiles>
+-- response. An item is a key-value(s) pair that matches an attribute in
+-- the profile.
+--
+-- If the optional @AdditionalSearchKeys@ parameter was included in the
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_SearchProfiles.html SearchProfiles>
+-- request, the @FoundByItems@ list should be interpreted based on the
+-- @LogicalOperator@ used in the request:
+--
+-- -   @AND@ - The profile included in the response matched all of the
+--     search keys specified in the request. The @FoundByItems@ will
+--     include all of the key-value(s) pairs that were specified in the
+--     request (as this is a requirement of @AND@ search logic).
+--
+-- -   @OR@ - The profile included in the response matched at least one of
+--     the search keys specified in the request. The @FoundByItems@ will
+--     include each of the key-value(s) pairs that the profile was found
+--     by.
+--
+-- The @OR@ relationship is the default behavior if the @LogicalOperator@
+-- parameter is not included in the
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_SearchProfiles.html SearchProfiles>
+-- request.
+profile_foundByItems :: Lens.Lens' Profile (Prelude.Maybe (Prelude.NonEmpty FoundByKeyValue))
+profile_foundByItems = Lens.lens (\Profile' {foundByItems} -> foundByItems) (\s@Profile' {} a -> s {foundByItems = a} :: Profile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The gender with which the customer identifies.
+profile_gender :: Lens.Lens' Profile (Prelude.Maybe Gender)
+profile_gender = Lens.lens (\Profile' {gender} -> gender) (\s@Profile' {} a -> s {gender = a} :: Profile)
+
+-- | The customer’s home phone number.
+profile_homePhoneNumber :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_homePhoneNumber = Lens.lens (\Profile' {homePhoneNumber} -> homePhoneNumber) (\s@Profile' {} a -> s {homePhoneNumber = a} :: Profile)
+
+-- | The customer’s last name.
+profile_lastName :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_lastName = Lens.lens (\Profile' {lastName} -> lastName) (\s@Profile' {} a -> s {lastName = a} :: Profile)
+
+-- | The customer’s mailing address.
+profile_mailingAddress :: Lens.Lens' Profile (Prelude.Maybe Address)
+profile_mailingAddress = Lens.lens (\Profile' {mailingAddress} -> mailingAddress) (\s@Profile' {} a -> s {mailingAddress = a} :: Profile)
+
+-- | The customer’s middle name.
+profile_middleName :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_middleName = Lens.lens (\Profile' {middleName} -> middleName) (\s@Profile' {} a -> s {middleName = a} :: Profile)
+
+-- | The customer’s mobile phone number.
+profile_mobilePhoneNumber :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_mobilePhoneNumber = Lens.lens (\Profile' {mobilePhoneNumber} -> mobilePhoneNumber) (\s@Profile' {} a -> s {mobilePhoneNumber = a} :: Profile)
+
+-- | The type of profile used to describe the customer.
+profile_partyType :: Lens.Lens' Profile (Prelude.Maybe PartyType)
+profile_partyType = Lens.lens (\Profile' {partyType} -> partyType) (\s@Profile' {} a -> s {partyType = a} :: Profile)
+
+-- | The customer’s personal email address.
+profile_personalEmailAddress :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_personalEmailAddress = Lens.lens (\Profile' {personalEmailAddress} -> personalEmailAddress) (\s@Profile' {} a -> s {personalEmailAddress = a} :: Profile)
+
+-- | The customer\'s phone number, which has not been specified as a mobile,
+-- home, or business number.
+profile_phoneNumber :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_phoneNumber = Lens.lens (\Profile' {phoneNumber} -> phoneNumber) (\s@Profile' {} a -> s {phoneNumber = a} :: Profile)
+
+-- | The unique identifier of a customer profile.
+profile_profileId :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_profileId = Lens.lens (\Profile' {profileId} -> profileId) (\s@Profile' {} a -> s {profileId = a} :: Profile)
+
+-- | The customer’s shipping address.
+profile_shippingAddress :: Lens.Lens' Profile (Prelude.Maybe Address)
+profile_shippingAddress = Lens.lens (\Profile' {shippingAddress} -> shippingAddress) (\s@Profile' {} a -> s {shippingAddress = a} :: Profile)
+
+instance Data.FromJSON Profile where
+  parseJSON =
+    Data.withObject
+      "Profile"
+      ( \x ->
+          Profile'
+            Prelude.<$> (x Data..:? "AccountNumber")
+            Prelude.<*> (x Data..:? "AdditionalInformation")
+            Prelude.<*> (x Data..:? "Address")
+            Prelude.<*> (x Data..:? "Attributes" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "BillingAddress")
+            Prelude.<*> (x Data..:? "BirthDate")
+            Prelude.<*> (x Data..:? "BusinessEmailAddress")
+            Prelude.<*> (x Data..:? "BusinessName")
+            Prelude.<*> (x Data..:? "BusinessPhoneNumber")
+            Prelude.<*> (x Data..:? "EmailAddress")
+            Prelude.<*> (x Data..:? "FirstName")
+            Prelude.<*> (x Data..:? "FoundByItems")
+            Prelude.<*> (x Data..:? "Gender")
+            Prelude.<*> (x Data..:? "HomePhoneNumber")
+            Prelude.<*> (x Data..:? "LastName")
+            Prelude.<*> (x Data..:? "MailingAddress")
+            Prelude.<*> (x Data..:? "MiddleName")
+            Prelude.<*> (x Data..:? "MobilePhoneNumber")
+            Prelude.<*> (x Data..:? "PartyType")
+            Prelude.<*> (x Data..:? "PersonalEmailAddress")
+            Prelude.<*> (x Data..:? "PhoneNumber")
+            Prelude.<*> (x Data..:? "ProfileId")
+            Prelude.<*> (x Data..:? "ShippingAddress")
+      )
+
+instance Prelude.Hashable Profile where
+  hashWithSalt _salt Profile' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountNumber
+      `Prelude.hashWithSalt` additionalInformation
+      `Prelude.hashWithSalt` address
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` billingAddress
+      `Prelude.hashWithSalt` birthDate
+      `Prelude.hashWithSalt` businessEmailAddress
+      `Prelude.hashWithSalt` businessName
+      `Prelude.hashWithSalt` businessPhoneNumber
+      `Prelude.hashWithSalt` emailAddress
+      `Prelude.hashWithSalt` firstName
+      `Prelude.hashWithSalt` foundByItems
+      `Prelude.hashWithSalt` gender
+      `Prelude.hashWithSalt` homePhoneNumber
+      `Prelude.hashWithSalt` lastName
+      `Prelude.hashWithSalt` mailingAddress
+      `Prelude.hashWithSalt` middleName
+      `Prelude.hashWithSalt` mobilePhoneNumber
+      `Prelude.hashWithSalt` partyType
+      `Prelude.hashWithSalt` personalEmailAddress
+      `Prelude.hashWithSalt` phoneNumber
+      `Prelude.hashWithSalt` profileId
+      `Prelude.hashWithSalt` shippingAddress
+
+instance Prelude.NFData Profile where
+  rnf Profile' {..} =
+    Prelude.rnf accountNumber
+      `Prelude.seq` Prelude.rnf additionalInformation
+      `Prelude.seq` Prelude.rnf address
+      `Prelude.seq` Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf billingAddress
+      `Prelude.seq` Prelude.rnf birthDate
+      `Prelude.seq` Prelude.rnf businessEmailAddress
+      `Prelude.seq` Prelude.rnf businessName
+      `Prelude.seq` Prelude.rnf businessPhoneNumber
+      `Prelude.seq` Prelude.rnf emailAddress
+      `Prelude.seq` Prelude.rnf firstName
+      `Prelude.seq` Prelude.rnf foundByItems
+      `Prelude.seq` Prelude.rnf gender
+      `Prelude.seq` Prelude.rnf homePhoneNumber
+      `Prelude.seq` Prelude.rnf lastName
+      `Prelude.seq` Prelude.rnf mailingAddress
+      `Prelude.seq` Prelude.rnf middleName
+      `Prelude.seq` Prelude.rnf mobilePhoneNumber
+      `Prelude.seq` Prelude.rnf partyType
+      `Prelude.seq` Prelude.rnf
+        personalEmailAddress
+      `Prelude.seq` Prelude.rnf phoneNumber
+      `Prelude.seq` Prelude.rnf profileId
+      `Prelude.seq` Prelude.rnf
+        shippingAddress
diff --git a/gen/Amazonka/CustomerProfiles/Types/S3ConnectorOperator.hs b/gen/Amazonka/CustomerProfiles/Types/S3ConnectorOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/S3ConnectorOperator.hs
@@ -0,0 +1,161 @@
+{-# 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.CustomerProfiles.Types.S3ConnectorOperator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.S3ConnectorOperator
+  ( S3ConnectorOperator
+      ( ..,
+        S3ConnectorOperator_ADDITION,
+        S3ConnectorOperator_BETWEEN,
+        S3ConnectorOperator_DIVISION,
+        S3ConnectorOperator_EQUAL_TO,
+        S3ConnectorOperator_GREATER_THAN,
+        S3ConnectorOperator_GREATER_THAN_OR_EQUAL_TO,
+        S3ConnectorOperator_LESS_THAN,
+        S3ConnectorOperator_LESS_THAN_OR_EQUAL_TO,
+        S3ConnectorOperator_MASK_ALL,
+        S3ConnectorOperator_MASK_FIRST_N,
+        S3ConnectorOperator_MASK_LAST_N,
+        S3ConnectorOperator_MULTIPLICATION,
+        S3ConnectorOperator_NOT_EQUAL_TO,
+        S3ConnectorOperator_NO_OP,
+        S3ConnectorOperator_PROJECTION,
+        S3ConnectorOperator_SUBTRACTION,
+        S3ConnectorOperator_VALIDATE_NON_NEGATIVE,
+        S3ConnectorOperator_VALIDATE_NON_NULL,
+        S3ConnectorOperator_VALIDATE_NON_ZERO,
+        S3ConnectorOperator_VALIDATE_NUMERIC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype S3ConnectorOperator = S3ConnectorOperator'
+  { fromS3ConnectorOperator ::
+      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 S3ConnectorOperator_ADDITION :: S3ConnectorOperator
+pattern S3ConnectorOperator_ADDITION = S3ConnectorOperator' "ADDITION"
+
+pattern S3ConnectorOperator_BETWEEN :: S3ConnectorOperator
+pattern S3ConnectorOperator_BETWEEN = S3ConnectorOperator' "BETWEEN"
+
+pattern S3ConnectorOperator_DIVISION :: S3ConnectorOperator
+pattern S3ConnectorOperator_DIVISION = S3ConnectorOperator' "DIVISION"
+
+pattern S3ConnectorOperator_EQUAL_TO :: S3ConnectorOperator
+pattern S3ConnectorOperator_EQUAL_TO = S3ConnectorOperator' "EQUAL_TO"
+
+pattern S3ConnectorOperator_GREATER_THAN :: S3ConnectorOperator
+pattern S3ConnectorOperator_GREATER_THAN = S3ConnectorOperator' "GREATER_THAN"
+
+pattern S3ConnectorOperator_GREATER_THAN_OR_EQUAL_TO :: S3ConnectorOperator
+pattern S3ConnectorOperator_GREATER_THAN_OR_EQUAL_TO = S3ConnectorOperator' "GREATER_THAN_OR_EQUAL_TO"
+
+pattern S3ConnectorOperator_LESS_THAN :: S3ConnectorOperator
+pattern S3ConnectorOperator_LESS_THAN = S3ConnectorOperator' "LESS_THAN"
+
+pattern S3ConnectorOperator_LESS_THAN_OR_EQUAL_TO :: S3ConnectorOperator
+pattern S3ConnectorOperator_LESS_THAN_OR_EQUAL_TO = S3ConnectorOperator' "LESS_THAN_OR_EQUAL_TO"
+
+pattern S3ConnectorOperator_MASK_ALL :: S3ConnectorOperator
+pattern S3ConnectorOperator_MASK_ALL = S3ConnectorOperator' "MASK_ALL"
+
+pattern S3ConnectorOperator_MASK_FIRST_N :: S3ConnectorOperator
+pattern S3ConnectorOperator_MASK_FIRST_N = S3ConnectorOperator' "MASK_FIRST_N"
+
+pattern S3ConnectorOperator_MASK_LAST_N :: S3ConnectorOperator
+pattern S3ConnectorOperator_MASK_LAST_N = S3ConnectorOperator' "MASK_LAST_N"
+
+pattern S3ConnectorOperator_MULTIPLICATION :: S3ConnectorOperator
+pattern S3ConnectorOperator_MULTIPLICATION = S3ConnectorOperator' "MULTIPLICATION"
+
+pattern S3ConnectorOperator_NOT_EQUAL_TO :: S3ConnectorOperator
+pattern S3ConnectorOperator_NOT_EQUAL_TO = S3ConnectorOperator' "NOT_EQUAL_TO"
+
+pattern S3ConnectorOperator_NO_OP :: S3ConnectorOperator
+pattern S3ConnectorOperator_NO_OP = S3ConnectorOperator' "NO_OP"
+
+pattern S3ConnectorOperator_PROJECTION :: S3ConnectorOperator
+pattern S3ConnectorOperator_PROJECTION = S3ConnectorOperator' "PROJECTION"
+
+pattern S3ConnectorOperator_SUBTRACTION :: S3ConnectorOperator
+pattern S3ConnectorOperator_SUBTRACTION = S3ConnectorOperator' "SUBTRACTION"
+
+pattern S3ConnectorOperator_VALIDATE_NON_NEGATIVE :: S3ConnectorOperator
+pattern S3ConnectorOperator_VALIDATE_NON_NEGATIVE = S3ConnectorOperator' "VALIDATE_NON_NEGATIVE"
+
+pattern S3ConnectorOperator_VALIDATE_NON_NULL :: S3ConnectorOperator
+pattern S3ConnectorOperator_VALIDATE_NON_NULL = S3ConnectorOperator' "VALIDATE_NON_NULL"
+
+pattern S3ConnectorOperator_VALIDATE_NON_ZERO :: S3ConnectorOperator
+pattern S3ConnectorOperator_VALIDATE_NON_ZERO = S3ConnectorOperator' "VALIDATE_NON_ZERO"
+
+pattern S3ConnectorOperator_VALIDATE_NUMERIC :: S3ConnectorOperator
+pattern S3ConnectorOperator_VALIDATE_NUMERIC = S3ConnectorOperator' "VALIDATE_NUMERIC"
+
+{-# COMPLETE
+  S3ConnectorOperator_ADDITION,
+  S3ConnectorOperator_BETWEEN,
+  S3ConnectorOperator_DIVISION,
+  S3ConnectorOperator_EQUAL_TO,
+  S3ConnectorOperator_GREATER_THAN,
+  S3ConnectorOperator_GREATER_THAN_OR_EQUAL_TO,
+  S3ConnectorOperator_LESS_THAN,
+  S3ConnectorOperator_LESS_THAN_OR_EQUAL_TO,
+  S3ConnectorOperator_MASK_ALL,
+  S3ConnectorOperator_MASK_FIRST_N,
+  S3ConnectorOperator_MASK_LAST_N,
+  S3ConnectorOperator_MULTIPLICATION,
+  S3ConnectorOperator_NOT_EQUAL_TO,
+  S3ConnectorOperator_NO_OP,
+  S3ConnectorOperator_PROJECTION,
+  S3ConnectorOperator_SUBTRACTION,
+  S3ConnectorOperator_VALIDATE_NON_NEGATIVE,
+  S3ConnectorOperator_VALIDATE_NON_NULL,
+  S3ConnectorOperator_VALIDATE_NON_ZERO,
+  S3ConnectorOperator_VALIDATE_NUMERIC,
+  S3ConnectorOperator'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/S3ExportingConfig.hs b/gen/Amazonka/CustomerProfiles/Types/S3ExportingConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/S3ExportingConfig.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.S3ExportingConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.S3ExportingConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration information about the S3 bucket where Identity Resolution
+-- Jobs write result files.
+--
+-- /See:/ 'newS3ExportingConfig' smart constructor.
+data S3ExportingConfig = S3ExportingConfig'
+  { -- | The S3 key name of the location where Identity Resolution Jobs write
+    -- result files.
+    s3KeyName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the S3 bucket where Identity Resolution Jobs write result
+    -- files.
+    s3BucketName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3ExportingConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3KeyName', 's3ExportingConfig_s3KeyName' - The S3 key name of the location where Identity Resolution Jobs write
+-- result files.
+--
+-- 's3BucketName', 's3ExportingConfig_s3BucketName' - The name of the S3 bucket where Identity Resolution Jobs write result
+-- files.
+newS3ExportingConfig ::
+  -- | 's3BucketName'
+  Prelude.Text ->
+  S3ExportingConfig
+newS3ExportingConfig pS3BucketName_ =
+  S3ExportingConfig'
+    { s3KeyName = Prelude.Nothing,
+      s3BucketName = pS3BucketName_
+    }
+
+-- | The S3 key name of the location where Identity Resolution Jobs write
+-- result files.
+s3ExportingConfig_s3KeyName :: Lens.Lens' S3ExportingConfig (Prelude.Maybe Prelude.Text)
+s3ExportingConfig_s3KeyName = Lens.lens (\S3ExportingConfig' {s3KeyName} -> s3KeyName) (\s@S3ExportingConfig' {} a -> s {s3KeyName = a} :: S3ExportingConfig)
+
+-- | The name of the S3 bucket where Identity Resolution Jobs write result
+-- files.
+s3ExportingConfig_s3BucketName :: Lens.Lens' S3ExportingConfig Prelude.Text
+s3ExportingConfig_s3BucketName = Lens.lens (\S3ExportingConfig' {s3BucketName} -> s3BucketName) (\s@S3ExportingConfig' {} a -> s {s3BucketName = a} :: S3ExportingConfig)
+
+instance Data.FromJSON S3ExportingConfig where
+  parseJSON =
+    Data.withObject
+      "S3ExportingConfig"
+      ( \x ->
+          S3ExportingConfig'
+            Prelude.<$> (x Data..:? "S3KeyName")
+            Prelude.<*> (x Data..: "S3BucketName")
+      )
+
+instance Prelude.Hashable S3ExportingConfig where
+  hashWithSalt _salt S3ExportingConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` s3KeyName
+      `Prelude.hashWithSalt` s3BucketName
+
+instance Prelude.NFData S3ExportingConfig where
+  rnf S3ExportingConfig' {..} =
+    Prelude.rnf s3KeyName
+      `Prelude.seq` Prelude.rnf s3BucketName
+
+instance Data.ToJSON S3ExportingConfig where
+  toJSON S3ExportingConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("S3KeyName" Data..=) Prelude.<$> s3KeyName,
+            Prelude.Just ("S3BucketName" Data..= s3BucketName)
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/S3ExportingLocation.hs b/gen/Amazonka/CustomerProfiles/Types/S3ExportingLocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/S3ExportingLocation.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.S3ExportingLocation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.S3ExportingLocation where
+
+import qualified 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 S3 location where Identity Resolution Jobs write result files.
+--
+-- /See:/ 'newS3ExportingLocation' smart constructor.
+data S3ExportingLocation = S3ExportingLocation'
+  { -- | The name of the S3 bucket name where Identity Resolution Jobs write
+    -- result files.
+    s3BucketName :: Prelude.Maybe Prelude.Text,
+    -- | The S3 key name of the location where Identity Resolution Jobs write
+    -- result files.
+    s3KeyName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3ExportingLocation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3BucketName', 's3ExportingLocation_s3BucketName' - The name of the S3 bucket name where Identity Resolution Jobs write
+-- result files.
+--
+-- 's3KeyName', 's3ExportingLocation_s3KeyName' - The S3 key name of the location where Identity Resolution Jobs write
+-- result files.
+newS3ExportingLocation ::
+  S3ExportingLocation
+newS3ExportingLocation =
+  S3ExportingLocation'
+    { s3BucketName =
+        Prelude.Nothing,
+      s3KeyName = Prelude.Nothing
+    }
+
+-- | The name of the S3 bucket name where Identity Resolution Jobs write
+-- result files.
+s3ExportingLocation_s3BucketName :: Lens.Lens' S3ExportingLocation (Prelude.Maybe Prelude.Text)
+s3ExportingLocation_s3BucketName = Lens.lens (\S3ExportingLocation' {s3BucketName} -> s3BucketName) (\s@S3ExportingLocation' {} a -> s {s3BucketName = a} :: S3ExportingLocation)
+
+-- | The S3 key name of the location where Identity Resolution Jobs write
+-- result files.
+s3ExportingLocation_s3KeyName :: Lens.Lens' S3ExportingLocation (Prelude.Maybe Prelude.Text)
+s3ExportingLocation_s3KeyName = Lens.lens (\S3ExportingLocation' {s3KeyName} -> s3KeyName) (\s@S3ExportingLocation' {} a -> s {s3KeyName = a} :: S3ExportingLocation)
+
+instance Data.FromJSON S3ExportingLocation where
+  parseJSON =
+    Data.withObject
+      "S3ExportingLocation"
+      ( \x ->
+          S3ExportingLocation'
+            Prelude.<$> (x Data..:? "S3BucketName")
+            Prelude.<*> (x Data..:? "S3KeyName")
+      )
+
+instance Prelude.Hashable S3ExportingLocation where
+  hashWithSalt _salt S3ExportingLocation' {..} =
+    _salt
+      `Prelude.hashWithSalt` s3BucketName
+      `Prelude.hashWithSalt` s3KeyName
+
+instance Prelude.NFData S3ExportingLocation where
+  rnf S3ExportingLocation' {..} =
+    Prelude.rnf s3BucketName
+      `Prelude.seq` Prelude.rnf s3KeyName
diff --git a/gen/Amazonka/CustomerProfiles/Types/S3SourceProperties.hs b/gen/Amazonka/CustomerProfiles/Types/S3SourceProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/S3SourceProperties.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.CustomerProfiles.Types.S3SourceProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.S3SourceProperties where
+
+import qualified 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 properties that are applied when Amazon S3 is being used as the flow
+-- source.
+--
+-- /See:/ 'newS3SourceProperties' smart constructor.
+data S3SourceProperties = S3SourceProperties'
+  { -- | The object key for the Amazon S3 bucket in which the source files are
+    -- stored.
+    bucketPrefix :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 bucket name where the source files are stored.
+    bucketName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3SourceProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucketPrefix', 's3SourceProperties_bucketPrefix' - The object key for the Amazon S3 bucket in which the source files are
+-- stored.
+--
+-- 'bucketName', 's3SourceProperties_bucketName' - The Amazon S3 bucket name where the source files are stored.
+newS3SourceProperties ::
+  -- | 'bucketName'
+  Prelude.Text ->
+  S3SourceProperties
+newS3SourceProperties pBucketName_ =
+  S3SourceProperties'
+    { bucketPrefix = Prelude.Nothing,
+      bucketName = pBucketName_
+    }
+
+-- | The object key for the Amazon S3 bucket in which the source files are
+-- stored.
+s3SourceProperties_bucketPrefix :: Lens.Lens' S3SourceProperties (Prelude.Maybe Prelude.Text)
+s3SourceProperties_bucketPrefix = Lens.lens (\S3SourceProperties' {bucketPrefix} -> bucketPrefix) (\s@S3SourceProperties' {} a -> s {bucketPrefix = a} :: S3SourceProperties)
+
+-- | The Amazon S3 bucket name where the source files are stored.
+s3SourceProperties_bucketName :: Lens.Lens' S3SourceProperties Prelude.Text
+s3SourceProperties_bucketName = Lens.lens (\S3SourceProperties' {bucketName} -> bucketName) (\s@S3SourceProperties' {} a -> s {bucketName = a} :: S3SourceProperties)
+
+instance Prelude.Hashable S3SourceProperties where
+  hashWithSalt _salt S3SourceProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucketPrefix
+      `Prelude.hashWithSalt` bucketName
+
+instance Prelude.NFData S3SourceProperties where
+  rnf S3SourceProperties' {..} =
+    Prelude.rnf bucketPrefix
+      `Prelude.seq` Prelude.rnf bucketName
+
+instance Data.ToJSON S3SourceProperties where
+  toJSON S3SourceProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BucketPrefix" Data..=) Prelude.<$> bucketPrefix,
+            Prelude.Just ("BucketName" Data..= bucketName)
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/SalesforceConnectorOperator.hs b/gen/Amazonka/CustomerProfiles/Types/SalesforceConnectorOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/SalesforceConnectorOperator.hs
@@ -0,0 +1,166 @@
+{-# 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.CustomerProfiles.Types.SalesforceConnectorOperator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.SalesforceConnectorOperator
+  ( SalesforceConnectorOperator
+      ( ..,
+        SalesforceConnectorOperator_ADDITION,
+        SalesforceConnectorOperator_BETWEEN,
+        SalesforceConnectorOperator_CONTAINS,
+        SalesforceConnectorOperator_DIVISION,
+        SalesforceConnectorOperator_EQUAL_TO,
+        SalesforceConnectorOperator_GREATER_THAN,
+        SalesforceConnectorOperator_GREATER_THAN_OR_EQUAL_TO,
+        SalesforceConnectorOperator_LESS_THAN,
+        SalesforceConnectorOperator_LESS_THAN_OR_EQUAL_TO,
+        SalesforceConnectorOperator_MASK_ALL,
+        SalesforceConnectorOperator_MASK_FIRST_N,
+        SalesforceConnectorOperator_MASK_LAST_N,
+        SalesforceConnectorOperator_MULTIPLICATION,
+        SalesforceConnectorOperator_NOT_EQUAL_TO,
+        SalesforceConnectorOperator_NO_OP,
+        SalesforceConnectorOperator_PROJECTION,
+        SalesforceConnectorOperator_SUBTRACTION,
+        SalesforceConnectorOperator_VALIDATE_NON_NEGATIVE,
+        SalesforceConnectorOperator_VALIDATE_NON_NULL,
+        SalesforceConnectorOperator_VALIDATE_NON_ZERO,
+        SalesforceConnectorOperator_VALIDATE_NUMERIC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SalesforceConnectorOperator = SalesforceConnectorOperator'
+  { fromSalesforceConnectorOperator ::
+      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 SalesforceConnectorOperator_ADDITION :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_ADDITION = SalesforceConnectorOperator' "ADDITION"
+
+pattern SalesforceConnectorOperator_BETWEEN :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_BETWEEN = SalesforceConnectorOperator' "BETWEEN"
+
+pattern SalesforceConnectorOperator_CONTAINS :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_CONTAINS = SalesforceConnectorOperator' "CONTAINS"
+
+pattern SalesforceConnectorOperator_DIVISION :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_DIVISION = SalesforceConnectorOperator' "DIVISION"
+
+pattern SalesforceConnectorOperator_EQUAL_TO :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_EQUAL_TO = SalesforceConnectorOperator' "EQUAL_TO"
+
+pattern SalesforceConnectorOperator_GREATER_THAN :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_GREATER_THAN = SalesforceConnectorOperator' "GREATER_THAN"
+
+pattern SalesforceConnectorOperator_GREATER_THAN_OR_EQUAL_TO :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_GREATER_THAN_OR_EQUAL_TO = SalesforceConnectorOperator' "GREATER_THAN_OR_EQUAL_TO"
+
+pattern SalesforceConnectorOperator_LESS_THAN :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_LESS_THAN = SalesforceConnectorOperator' "LESS_THAN"
+
+pattern SalesforceConnectorOperator_LESS_THAN_OR_EQUAL_TO :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_LESS_THAN_OR_EQUAL_TO = SalesforceConnectorOperator' "LESS_THAN_OR_EQUAL_TO"
+
+pattern SalesforceConnectorOperator_MASK_ALL :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_MASK_ALL = SalesforceConnectorOperator' "MASK_ALL"
+
+pattern SalesforceConnectorOperator_MASK_FIRST_N :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_MASK_FIRST_N = SalesforceConnectorOperator' "MASK_FIRST_N"
+
+pattern SalesforceConnectorOperator_MASK_LAST_N :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_MASK_LAST_N = SalesforceConnectorOperator' "MASK_LAST_N"
+
+pattern SalesforceConnectorOperator_MULTIPLICATION :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_MULTIPLICATION = SalesforceConnectorOperator' "MULTIPLICATION"
+
+pattern SalesforceConnectorOperator_NOT_EQUAL_TO :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_NOT_EQUAL_TO = SalesforceConnectorOperator' "NOT_EQUAL_TO"
+
+pattern SalesforceConnectorOperator_NO_OP :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_NO_OP = SalesforceConnectorOperator' "NO_OP"
+
+pattern SalesforceConnectorOperator_PROJECTION :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_PROJECTION = SalesforceConnectorOperator' "PROJECTION"
+
+pattern SalesforceConnectorOperator_SUBTRACTION :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_SUBTRACTION = SalesforceConnectorOperator' "SUBTRACTION"
+
+pattern SalesforceConnectorOperator_VALIDATE_NON_NEGATIVE :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_VALIDATE_NON_NEGATIVE = SalesforceConnectorOperator' "VALIDATE_NON_NEGATIVE"
+
+pattern SalesforceConnectorOperator_VALIDATE_NON_NULL :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_VALIDATE_NON_NULL = SalesforceConnectorOperator' "VALIDATE_NON_NULL"
+
+pattern SalesforceConnectorOperator_VALIDATE_NON_ZERO :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_VALIDATE_NON_ZERO = SalesforceConnectorOperator' "VALIDATE_NON_ZERO"
+
+pattern SalesforceConnectorOperator_VALIDATE_NUMERIC :: SalesforceConnectorOperator
+pattern SalesforceConnectorOperator_VALIDATE_NUMERIC = SalesforceConnectorOperator' "VALIDATE_NUMERIC"
+
+{-# COMPLETE
+  SalesforceConnectorOperator_ADDITION,
+  SalesforceConnectorOperator_BETWEEN,
+  SalesforceConnectorOperator_CONTAINS,
+  SalesforceConnectorOperator_DIVISION,
+  SalesforceConnectorOperator_EQUAL_TO,
+  SalesforceConnectorOperator_GREATER_THAN,
+  SalesforceConnectorOperator_GREATER_THAN_OR_EQUAL_TO,
+  SalesforceConnectorOperator_LESS_THAN,
+  SalesforceConnectorOperator_LESS_THAN_OR_EQUAL_TO,
+  SalesforceConnectorOperator_MASK_ALL,
+  SalesforceConnectorOperator_MASK_FIRST_N,
+  SalesforceConnectorOperator_MASK_LAST_N,
+  SalesforceConnectorOperator_MULTIPLICATION,
+  SalesforceConnectorOperator_NOT_EQUAL_TO,
+  SalesforceConnectorOperator_NO_OP,
+  SalesforceConnectorOperator_PROJECTION,
+  SalesforceConnectorOperator_SUBTRACTION,
+  SalesforceConnectorOperator_VALIDATE_NON_NEGATIVE,
+  SalesforceConnectorOperator_VALIDATE_NON_NULL,
+  SalesforceConnectorOperator_VALIDATE_NON_ZERO,
+  SalesforceConnectorOperator_VALIDATE_NUMERIC,
+  SalesforceConnectorOperator'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/SalesforceSourceProperties.hs b/gen/Amazonka/CustomerProfiles/Types/SalesforceSourceProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/SalesforceSourceProperties.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.CustomerProfiles.Types.SalesforceSourceProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.SalesforceSourceProperties where
+
+import qualified 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 properties that are applied when Salesforce is being used as a
+-- source.
+--
+-- /See:/ 'newSalesforceSourceProperties' smart constructor.
+data SalesforceSourceProperties = SalesforceSourceProperties'
+  { -- | The flag that enables dynamic fetching of new (recently added) fields in
+    -- the Salesforce objects while running a flow.
+    enableDynamicFieldUpdate :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether Amazon AppFlow includes deleted files in the flow run.
+    includeDeletedRecords :: Prelude.Maybe Prelude.Bool,
+    -- | The object specified in the Salesforce flow source.
+    object' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SalesforceSourceProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enableDynamicFieldUpdate', 'salesforceSourceProperties_enableDynamicFieldUpdate' - The flag that enables dynamic fetching of new (recently added) fields in
+-- the Salesforce objects while running a flow.
+--
+-- 'includeDeletedRecords', 'salesforceSourceProperties_includeDeletedRecords' - Indicates whether Amazon AppFlow includes deleted files in the flow run.
+--
+-- 'object'', 'salesforceSourceProperties_object' - The object specified in the Salesforce flow source.
+newSalesforceSourceProperties ::
+  -- | 'object''
+  Prelude.Text ->
+  SalesforceSourceProperties
+newSalesforceSourceProperties pObject_ =
+  SalesforceSourceProperties'
+    { enableDynamicFieldUpdate =
+        Prelude.Nothing,
+      includeDeletedRecords = Prelude.Nothing,
+      object' = pObject_
+    }
+
+-- | The flag that enables dynamic fetching of new (recently added) fields in
+-- the Salesforce objects while running a flow.
+salesforceSourceProperties_enableDynamicFieldUpdate :: Lens.Lens' SalesforceSourceProperties (Prelude.Maybe Prelude.Bool)
+salesforceSourceProperties_enableDynamicFieldUpdate = Lens.lens (\SalesforceSourceProperties' {enableDynamicFieldUpdate} -> enableDynamicFieldUpdate) (\s@SalesforceSourceProperties' {} a -> s {enableDynamicFieldUpdate = a} :: SalesforceSourceProperties)
+
+-- | Indicates whether Amazon AppFlow includes deleted files in the flow run.
+salesforceSourceProperties_includeDeletedRecords :: Lens.Lens' SalesforceSourceProperties (Prelude.Maybe Prelude.Bool)
+salesforceSourceProperties_includeDeletedRecords = Lens.lens (\SalesforceSourceProperties' {includeDeletedRecords} -> includeDeletedRecords) (\s@SalesforceSourceProperties' {} a -> s {includeDeletedRecords = a} :: SalesforceSourceProperties)
+
+-- | The object specified in the Salesforce flow source.
+salesforceSourceProperties_object :: Lens.Lens' SalesforceSourceProperties Prelude.Text
+salesforceSourceProperties_object = Lens.lens (\SalesforceSourceProperties' {object'} -> object') (\s@SalesforceSourceProperties' {} a -> s {object' = a} :: SalesforceSourceProperties)
+
+instance Prelude.Hashable SalesforceSourceProperties where
+  hashWithSalt _salt SalesforceSourceProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` enableDynamicFieldUpdate
+      `Prelude.hashWithSalt` includeDeletedRecords
+      `Prelude.hashWithSalt` object'
+
+instance Prelude.NFData SalesforceSourceProperties where
+  rnf SalesforceSourceProperties' {..} =
+    Prelude.rnf enableDynamicFieldUpdate
+      `Prelude.seq` Prelude.rnf includeDeletedRecords
+      `Prelude.seq` Prelude.rnf object'
+
+instance Data.ToJSON SalesforceSourceProperties where
+  toJSON SalesforceSourceProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EnableDynamicFieldUpdate" Data..=)
+              Prelude.<$> enableDynamicFieldUpdate,
+            ("IncludeDeletedRecords" Data..=)
+              Prelude.<$> includeDeletedRecords,
+            Prelude.Just ("Object" Data..= object')
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/ScheduledTriggerProperties.hs b/gen/Amazonka/CustomerProfiles/Types/ScheduledTriggerProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ScheduledTriggerProperties.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.CustomerProfiles.Types.ScheduledTriggerProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ScheduledTriggerProperties where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.DataPullMode
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the configuration details of a scheduled-trigger flow that you
+-- define. Currently, these settings only apply to the scheduled-trigger
+-- type.
+--
+-- /See:/ 'newScheduledTriggerProperties' smart constructor.
+data ScheduledTriggerProperties = ScheduledTriggerProperties'
+  { -- | Specifies whether a scheduled flow has an incremental data transfer or a
+    -- complete data transfer for each flow run.
+    dataPullMode :: Prelude.Maybe DataPullMode,
+    -- | Specifies the date range for the records to import from the connector in
+    -- the first flow run.
+    firstExecutionFrom :: Prelude.Maybe Data.POSIX,
+    -- | Specifies the scheduled end time for a scheduled-trigger flow.
+    scheduleEndTime :: Prelude.Maybe Data.POSIX,
+    -- | Specifies the optional offset that is added to the time interval for a
+    -- schedule-triggered flow.
+    scheduleOffset :: Prelude.Maybe Prelude.Natural,
+    -- | Specifies the scheduled start time for a scheduled-trigger flow.
+    scheduleStartTime :: Prelude.Maybe Data.POSIX,
+    -- | Specifies the time zone used when referring to the date and time of a
+    -- scheduled-triggered flow, such as America\/New_York.
+    timezone :: Prelude.Maybe Prelude.Text,
+    -- | The scheduling expression that determines the rate at which the schedule
+    -- will run, for example rate (5 minutes).
+    scheduleExpression :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduledTriggerProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataPullMode', 'scheduledTriggerProperties_dataPullMode' - Specifies whether a scheduled flow has an incremental data transfer or a
+-- complete data transfer for each flow run.
+--
+-- 'firstExecutionFrom', 'scheduledTriggerProperties_firstExecutionFrom' - Specifies the date range for the records to import from the connector in
+-- the first flow run.
+--
+-- 'scheduleEndTime', 'scheduledTriggerProperties_scheduleEndTime' - Specifies the scheduled end time for a scheduled-trigger flow.
+--
+-- 'scheduleOffset', 'scheduledTriggerProperties_scheduleOffset' - Specifies the optional offset that is added to the time interval for a
+-- schedule-triggered flow.
+--
+-- 'scheduleStartTime', 'scheduledTriggerProperties_scheduleStartTime' - Specifies the scheduled start time for a scheduled-trigger flow.
+--
+-- 'timezone', 'scheduledTriggerProperties_timezone' - Specifies the time zone used when referring to the date and time of a
+-- scheduled-triggered flow, such as America\/New_York.
+--
+-- 'scheduleExpression', 'scheduledTriggerProperties_scheduleExpression' - The scheduling expression that determines the rate at which the schedule
+-- will run, for example rate (5 minutes).
+newScheduledTriggerProperties ::
+  -- | 'scheduleExpression'
+  Prelude.Text ->
+  ScheduledTriggerProperties
+newScheduledTriggerProperties pScheduleExpression_ =
+  ScheduledTriggerProperties'
+    { dataPullMode =
+        Prelude.Nothing,
+      firstExecutionFrom = Prelude.Nothing,
+      scheduleEndTime = Prelude.Nothing,
+      scheduleOffset = Prelude.Nothing,
+      scheduleStartTime = Prelude.Nothing,
+      timezone = Prelude.Nothing,
+      scheduleExpression = pScheduleExpression_
+    }
+
+-- | Specifies whether a scheduled flow has an incremental data transfer or a
+-- complete data transfer for each flow run.
+scheduledTriggerProperties_dataPullMode :: Lens.Lens' ScheduledTriggerProperties (Prelude.Maybe DataPullMode)
+scheduledTriggerProperties_dataPullMode = Lens.lens (\ScheduledTriggerProperties' {dataPullMode} -> dataPullMode) (\s@ScheduledTriggerProperties' {} a -> s {dataPullMode = a} :: ScheduledTriggerProperties)
+
+-- | Specifies the date range for the records to import from the connector in
+-- the first flow run.
+scheduledTriggerProperties_firstExecutionFrom :: Lens.Lens' ScheduledTriggerProperties (Prelude.Maybe Prelude.UTCTime)
+scheduledTriggerProperties_firstExecutionFrom = Lens.lens (\ScheduledTriggerProperties' {firstExecutionFrom} -> firstExecutionFrom) (\s@ScheduledTriggerProperties' {} a -> s {firstExecutionFrom = a} :: ScheduledTriggerProperties) Prelude.. Lens.mapping Data._Time
+
+-- | Specifies the scheduled end time for a scheduled-trigger flow.
+scheduledTriggerProperties_scheduleEndTime :: Lens.Lens' ScheduledTriggerProperties (Prelude.Maybe Prelude.UTCTime)
+scheduledTriggerProperties_scheduleEndTime = Lens.lens (\ScheduledTriggerProperties' {scheduleEndTime} -> scheduleEndTime) (\s@ScheduledTriggerProperties' {} a -> s {scheduleEndTime = a} :: ScheduledTriggerProperties) Prelude.. Lens.mapping Data._Time
+
+-- | Specifies the optional offset that is added to the time interval for a
+-- schedule-triggered flow.
+scheduledTriggerProperties_scheduleOffset :: Lens.Lens' ScheduledTriggerProperties (Prelude.Maybe Prelude.Natural)
+scheduledTriggerProperties_scheduleOffset = Lens.lens (\ScheduledTriggerProperties' {scheduleOffset} -> scheduleOffset) (\s@ScheduledTriggerProperties' {} a -> s {scheduleOffset = a} :: ScheduledTriggerProperties)
+
+-- | Specifies the scheduled start time for a scheduled-trigger flow.
+scheduledTriggerProperties_scheduleStartTime :: Lens.Lens' ScheduledTriggerProperties (Prelude.Maybe Prelude.UTCTime)
+scheduledTriggerProperties_scheduleStartTime = Lens.lens (\ScheduledTriggerProperties' {scheduleStartTime} -> scheduleStartTime) (\s@ScheduledTriggerProperties' {} a -> s {scheduleStartTime = a} :: ScheduledTriggerProperties) Prelude.. Lens.mapping Data._Time
+
+-- | Specifies the time zone used when referring to the date and time of a
+-- scheduled-triggered flow, such as America\/New_York.
+scheduledTriggerProperties_timezone :: Lens.Lens' ScheduledTriggerProperties (Prelude.Maybe Prelude.Text)
+scheduledTriggerProperties_timezone = Lens.lens (\ScheduledTriggerProperties' {timezone} -> timezone) (\s@ScheduledTriggerProperties' {} a -> s {timezone = a} :: ScheduledTriggerProperties)
+
+-- | The scheduling expression that determines the rate at which the schedule
+-- will run, for example rate (5 minutes).
+scheduledTriggerProperties_scheduleExpression :: Lens.Lens' ScheduledTriggerProperties Prelude.Text
+scheduledTriggerProperties_scheduleExpression = Lens.lens (\ScheduledTriggerProperties' {scheduleExpression} -> scheduleExpression) (\s@ScheduledTriggerProperties' {} a -> s {scheduleExpression = a} :: ScheduledTriggerProperties)
+
+instance Prelude.Hashable ScheduledTriggerProperties where
+  hashWithSalt _salt ScheduledTriggerProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataPullMode
+      `Prelude.hashWithSalt` firstExecutionFrom
+      `Prelude.hashWithSalt` scheduleEndTime
+      `Prelude.hashWithSalt` scheduleOffset
+      `Prelude.hashWithSalt` scheduleStartTime
+      `Prelude.hashWithSalt` timezone
+      `Prelude.hashWithSalt` scheduleExpression
+
+instance Prelude.NFData ScheduledTriggerProperties where
+  rnf ScheduledTriggerProperties' {..} =
+    Prelude.rnf dataPullMode
+      `Prelude.seq` Prelude.rnf firstExecutionFrom
+      `Prelude.seq` Prelude.rnf scheduleEndTime
+      `Prelude.seq` Prelude.rnf scheduleOffset
+      `Prelude.seq` Prelude.rnf scheduleStartTime
+      `Prelude.seq` Prelude.rnf timezone
+      `Prelude.seq` Prelude.rnf scheduleExpression
+
+instance Data.ToJSON ScheduledTriggerProperties where
+  toJSON ScheduledTriggerProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataPullMode" Data..=) Prelude.<$> dataPullMode,
+            ("FirstExecutionFrom" Data..=)
+              Prelude.<$> firstExecutionFrom,
+            ("ScheduleEndTime" Data..=)
+              Prelude.<$> scheduleEndTime,
+            ("ScheduleOffset" Data..=)
+              Prelude.<$> scheduleOffset,
+            ("ScheduleStartTime" Data..=)
+              Prelude.<$> scheduleStartTime,
+            ("Timezone" Data..=) Prelude.<$> timezone,
+            Prelude.Just
+              ("ScheduleExpression" Data..= scheduleExpression)
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/ServiceNowConnectorOperator.hs b/gen/Amazonka/CustomerProfiles/Types/ServiceNowConnectorOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ServiceNowConnectorOperator.hs
@@ -0,0 +1,166 @@
+{-# 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.CustomerProfiles.Types.ServiceNowConnectorOperator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ServiceNowConnectorOperator
+  ( ServiceNowConnectorOperator
+      ( ..,
+        ServiceNowConnectorOperator_ADDITION,
+        ServiceNowConnectorOperator_BETWEEN,
+        ServiceNowConnectorOperator_CONTAINS,
+        ServiceNowConnectorOperator_DIVISION,
+        ServiceNowConnectorOperator_EQUAL_TO,
+        ServiceNowConnectorOperator_GREATER_THAN,
+        ServiceNowConnectorOperator_GREATER_THAN_OR_EQUAL_TO,
+        ServiceNowConnectorOperator_LESS_THAN,
+        ServiceNowConnectorOperator_LESS_THAN_OR_EQUAL_TO,
+        ServiceNowConnectorOperator_MASK_ALL,
+        ServiceNowConnectorOperator_MASK_FIRST_N,
+        ServiceNowConnectorOperator_MASK_LAST_N,
+        ServiceNowConnectorOperator_MULTIPLICATION,
+        ServiceNowConnectorOperator_NOT_EQUAL_TO,
+        ServiceNowConnectorOperator_NO_OP,
+        ServiceNowConnectorOperator_PROJECTION,
+        ServiceNowConnectorOperator_SUBTRACTION,
+        ServiceNowConnectorOperator_VALIDATE_NON_NEGATIVE,
+        ServiceNowConnectorOperator_VALIDATE_NON_NULL,
+        ServiceNowConnectorOperator_VALIDATE_NON_ZERO,
+        ServiceNowConnectorOperator_VALIDATE_NUMERIC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ServiceNowConnectorOperator = ServiceNowConnectorOperator'
+  { fromServiceNowConnectorOperator ::
+      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 ServiceNowConnectorOperator_ADDITION :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_ADDITION = ServiceNowConnectorOperator' "ADDITION"
+
+pattern ServiceNowConnectorOperator_BETWEEN :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_BETWEEN = ServiceNowConnectorOperator' "BETWEEN"
+
+pattern ServiceNowConnectorOperator_CONTAINS :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_CONTAINS = ServiceNowConnectorOperator' "CONTAINS"
+
+pattern ServiceNowConnectorOperator_DIVISION :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_DIVISION = ServiceNowConnectorOperator' "DIVISION"
+
+pattern ServiceNowConnectorOperator_EQUAL_TO :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_EQUAL_TO = ServiceNowConnectorOperator' "EQUAL_TO"
+
+pattern ServiceNowConnectorOperator_GREATER_THAN :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_GREATER_THAN = ServiceNowConnectorOperator' "GREATER_THAN"
+
+pattern ServiceNowConnectorOperator_GREATER_THAN_OR_EQUAL_TO :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_GREATER_THAN_OR_EQUAL_TO = ServiceNowConnectorOperator' "GREATER_THAN_OR_EQUAL_TO"
+
+pattern ServiceNowConnectorOperator_LESS_THAN :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_LESS_THAN = ServiceNowConnectorOperator' "LESS_THAN"
+
+pattern ServiceNowConnectorOperator_LESS_THAN_OR_EQUAL_TO :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_LESS_THAN_OR_EQUAL_TO = ServiceNowConnectorOperator' "LESS_THAN_OR_EQUAL_TO"
+
+pattern ServiceNowConnectorOperator_MASK_ALL :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_MASK_ALL = ServiceNowConnectorOperator' "MASK_ALL"
+
+pattern ServiceNowConnectorOperator_MASK_FIRST_N :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_MASK_FIRST_N = ServiceNowConnectorOperator' "MASK_FIRST_N"
+
+pattern ServiceNowConnectorOperator_MASK_LAST_N :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_MASK_LAST_N = ServiceNowConnectorOperator' "MASK_LAST_N"
+
+pattern ServiceNowConnectorOperator_MULTIPLICATION :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_MULTIPLICATION = ServiceNowConnectorOperator' "MULTIPLICATION"
+
+pattern ServiceNowConnectorOperator_NOT_EQUAL_TO :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_NOT_EQUAL_TO = ServiceNowConnectorOperator' "NOT_EQUAL_TO"
+
+pattern ServiceNowConnectorOperator_NO_OP :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_NO_OP = ServiceNowConnectorOperator' "NO_OP"
+
+pattern ServiceNowConnectorOperator_PROJECTION :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_PROJECTION = ServiceNowConnectorOperator' "PROJECTION"
+
+pattern ServiceNowConnectorOperator_SUBTRACTION :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_SUBTRACTION = ServiceNowConnectorOperator' "SUBTRACTION"
+
+pattern ServiceNowConnectorOperator_VALIDATE_NON_NEGATIVE :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_VALIDATE_NON_NEGATIVE = ServiceNowConnectorOperator' "VALIDATE_NON_NEGATIVE"
+
+pattern ServiceNowConnectorOperator_VALIDATE_NON_NULL :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_VALIDATE_NON_NULL = ServiceNowConnectorOperator' "VALIDATE_NON_NULL"
+
+pattern ServiceNowConnectorOperator_VALIDATE_NON_ZERO :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_VALIDATE_NON_ZERO = ServiceNowConnectorOperator' "VALIDATE_NON_ZERO"
+
+pattern ServiceNowConnectorOperator_VALIDATE_NUMERIC :: ServiceNowConnectorOperator
+pattern ServiceNowConnectorOperator_VALIDATE_NUMERIC = ServiceNowConnectorOperator' "VALIDATE_NUMERIC"
+
+{-# COMPLETE
+  ServiceNowConnectorOperator_ADDITION,
+  ServiceNowConnectorOperator_BETWEEN,
+  ServiceNowConnectorOperator_CONTAINS,
+  ServiceNowConnectorOperator_DIVISION,
+  ServiceNowConnectorOperator_EQUAL_TO,
+  ServiceNowConnectorOperator_GREATER_THAN,
+  ServiceNowConnectorOperator_GREATER_THAN_OR_EQUAL_TO,
+  ServiceNowConnectorOperator_LESS_THAN,
+  ServiceNowConnectorOperator_LESS_THAN_OR_EQUAL_TO,
+  ServiceNowConnectorOperator_MASK_ALL,
+  ServiceNowConnectorOperator_MASK_FIRST_N,
+  ServiceNowConnectorOperator_MASK_LAST_N,
+  ServiceNowConnectorOperator_MULTIPLICATION,
+  ServiceNowConnectorOperator_NOT_EQUAL_TO,
+  ServiceNowConnectorOperator_NO_OP,
+  ServiceNowConnectorOperator_PROJECTION,
+  ServiceNowConnectorOperator_SUBTRACTION,
+  ServiceNowConnectorOperator_VALIDATE_NON_NEGATIVE,
+  ServiceNowConnectorOperator_VALIDATE_NON_NULL,
+  ServiceNowConnectorOperator_VALIDATE_NON_ZERO,
+  ServiceNowConnectorOperator_VALIDATE_NUMERIC,
+  ServiceNowConnectorOperator'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/ServiceNowSourceProperties.hs b/gen/Amazonka/CustomerProfiles/Types/ServiceNowSourceProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ServiceNowSourceProperties.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.ServiceNowSourceProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ServiceNowSourceProperties where
+
+import qualified 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 properties that are applied when ServiceNow is being used as a
+-- source.
+--
+-- /See:/ 'newServiceNowSourceProperties' smart constructor.
+data ServiceNowSourceProperties = ServiceNowSourceProperties'
+  { -- | The object specified in the ServiceNow flow source.
+    object' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServiceNowSourceProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'object'', 'serviceNowSourceProperties_object' - The object specified in the ServiceNow flow source.
+newServiceNowSourceProperties ::
+  -- | 'object''
+  Prelude.Text ->
+  ServiceNowSourceProperties
+newServiceNowSourceProperties pObject_ =
+  ServiceNowSourceProperties' {object' = pObject_}
+
+-- | The object specified in the ServiceNow flow source.
+serviceNowSourceProperties_object :: Lens.Lens' ServiceNowSourceProperties Prelude.Text
+serviceNowSourceProperties_object = Lens.lens (\ServiceNowSourceProperties' {object'} -> object') (\s@ServiceNowSourceProperties' {} a -> s {object' = a} :: ServiceNowSourceProperties)
+
+instance Prelude.Hashable ServiceNowSourceProperties where
+  hashWithSalt _salt ServiceNowSourceProperties' {..} =
+    _salt `Prelude.hashWithSalt` object'
+
+instance Prelude.NFData ServiceNowSourceProperties where
+  rnf ServiceNowSourceProperties' {..} =
+    Prelude.rnf object'
+
+instance Data.ToJSON ServiceNowSourceProperties where
+  toJSON ServiceNowSourceProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Object" Data..= object')]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/SourceConnectorProperties.hs b/gen/Amazonka/CustomerProfiles/Types/SourceConnectorProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/SourceConnectorProperties.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.CustomerProfiles.Types.SourceConnectorProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.SourceConnectorProperties where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.MarketoSourceProperties
+import Amazonka.CustomerProfiles.Types.S3SourceProperties
+import Amazonka.CustomerProfiles.Types.SalesforceSourceProperties
+import Amazonka.CustomerProfiles.Types.ServiceNowSourceProperties
+import Amazonka.CustomerProfiles.Types.ZendeskSourceProperties
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the information that is required to query a particular Amazon
+-- AppFlow connector. Customer Profiles supports Salesforce, Zendesk,
+-- Marketo, ServiceNow and Amazon S3.
+--
+-- /See:/ 'newSourceConnectorProperties' smart constructor.
+data SourceConnectorProperties = SourceConnectorProperties'
+  { -- | The properties that are applied when Marketo is being used as a source.
+    marketo :: Prelude.Maybe MarketoSourceProperties,
+    -- | The properties that are applied when Amazon S3 is being used as the flow
+    -- source.
+    s3 :: Prelude.Maybe S3SourceProperties,
+    -- | The properties that are applied when Salesforce is being used as a
+    -- source.
+    salesforce :: Prelude.Maybe SalesforceSourceProperties,
+    -- | The properties that are applied when ServiceNow is being used as a
+    -- source.
+    serviceNow :: Prelude.Maybe ServiceNowSourceProperties,
+    -- | The properties that are applied when using Zendesk as a flow source.
+    zendesk :: Prelude.Maybe ZendeskSourceProperties
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SourceConnectorProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'marketo', 'sourceConnectorProperties_marketo' - The properties that are applied when Marketo is being used as a source.
+--
+-- 's3', 'sourceConnectorProperties_s3' - The properties that are applied when Amazon S3 is being used as the flow
+-- source.
+--
+-- 'salesforce', 'sourceConnectorProperties_salesforce' - The properties that are applied when Salesforce is being used as a
+-- source.
+--
+-- 'serviceNow', 'sourceConnectorProperties_serviceNow' - The properties that are applied when ServiceNow is being used as a
+-- source.
+--
+-- 'zendesk', 'sourceConnectorProperties_zendesk' - The properties that are applied when using Zendesk as a flow source.
+newSourceConnectorProperties ::
+  SourceConnectorProperties
+newSourceConnectorProperties =
+  SourceConnectorProperties'
+    { marketo =
+        Prelude.Nothing,
+      s3 = Prelude.Nothing,
+      salesforce = Prelude.Nothing,
+      serviceNow = Prelude.Nothing,
+      zendesk = Prelude.Nothing
+    }
+
+-- | The properties that are applied when Marketo is being used as a source.
+sourceConnectorProperties_marketo :: Lens.Lens' SourceConnectorProperties (Prelude.Maybe MarketoSourceProperties)
+sourceConnectorProperties_marketo = Lens.lens (\SourceConnectorProperties' {marketo} -> marketo) (\s@SourceConnectorProperties' {} a -> s {marketo = a} :: SourceConnectorProperties)
+
+-- | The properties that are applied when Amazon S3 is being used as the flow
+-- source.
+sourceConnectorProperties_s3 :: Lens.Lens' SourceConnectorProperties (Prelude.Maybe S3SourceProperties)
+sourceConnectorProperties_s3 = Lens.lens (\SourceConnectorProperties' {s3} -> s3) (\s@SourceConnectorProperties' {} a -> s {s3 = a} :: SourceConnectorProperties)
+
+-- | The properties that are applied when Salesforce is being used as a
+-- source.
+sourceConnectorProperties_salesforce :: Lens.Lens' SourceConnectorProperties (Prelude.Maybe SalesforceSourceProperties)
+sourceConnectorProperties_salesforce = Lens.lens (\SourceConnectorProperties' {salesforce} -> salesforce) (\s@SourceConnectorProperties' {} a -> s {salesforce = a} :: SourceConnectorProperties)
+
+-- | The properties that are applied when ServiceNow is being used as a
+-- source.
+sourceConnectorProperties_serviceNow :: Lens.Lens' SourceConnectorProperties (Prelude.Maybe ServiceNowSourceProperties)
+sourceConnectorProperties_serviceNow = Lens.lens (\SourceConnectorProperties' {serviceNow} -> serviceNow) (\s@SourceConnectorProperties' {} a -> s {serviceNow = a} :: SourceConnectorProperties)
+
+-- | The properties that are applied when using Zendesk as a flow source.
+sourceConnectorProperties_zendesk :: Lens.Lens' SourceConnectorProperties (Prelude.Maybe ZendeskSourceProperties)
+sourceConnectorProperties_zendesk = Lens.lens (\SourceConnectorProperties' {zendesk} -> zendesk) (\s@SourceConnectorProperties' {} a -> s {zendesk = a} :: SourceConnectorProperties)
+
+instance Prelude.Hashable SourceConnectorProperties where
+  hashWithSalt _salt SourceConnectorProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` marketo
+      `Prelude.hashWithSalt` s3
+      `Prelude.hashWithSalt` salesforce
+      `Prelude.hashWithSalt` serviceNow
+      `Prelude.hashWithSalt` zendesk
+
+instance Prelude.NFData SourceConnectorProperties where
+  rnf SourceConnectorProperties' {..} =
+    Prelude.rnf marketo
+      `Prelude.seq` Prelude.rnf s3
+      `Prelude.seq` Prelude.rnf salesforce
+      `Prelude.seq` Prelude.rnf serviceNow
+      `Prelude.seq` Prelude.rnf zendesk
+
+instance Data.ToJSON SourceConnectorProperties where
+  toJSON SourceConnectorProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Marketo" Data..=) Prelude.<$> marketo,
+            ("S3" Data..=) Prelude.<$> s3,
+            ("Salesforce" Data..=) Prelude.<$> salesforce,
+            ("ServiceNow" Data..=) Prelude.<$> serviceNow,
+            ("Zendesk" Data..=) Prelude.<$> zendesk
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/SourceConnectorType.hs b/gen/Amazonka/CustomerProfiles/Types/SourceConnectorType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/SourceConnectorType.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.SourceConnectorType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.SourceConnectorType
+  ( SourceConnectorType
+      ( ..,
+        SourceConnectorType_Marketo,
+        SourceConnectorType_S3,
+        SourceConnectorType_Salesforce,
+        SourceConnectorType_Servicenow,
+        SourceConnectorType_Zendesk
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SourceConnectorType = SourceConnectorType'
+  { fromSourceConnectorType ::
+      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 SourceConnectorType_Marketo :: SourceConnectorType
+pattern SourceConnectorType_Marketo = SourceConnectorType' "Marketo"
+
+pattern SourceConnectorType_S3 :: SourceConnectorType
+pattern SourceConnectorType_S3 = SourceConnectorType' "S3"
+
+pattern SourceConnectorType_Salesforce :: SourceConnectorType
+pattern SourceConnectorType_Salesforce = SourceConnectorType' "Salesforce"
+
+pattern SourceConnectorType_Servicenow :: SourceConnectorType
+pattern SourceConnectorType_Servicenow = SourceConnectorType' "Servicenow"
+
+pattern SourceConnectorType_Zendesk :: SourceConnectorType
+pattern SourceConnectorType_Zendesk = SourceConnectorType' "Zendesk"
+
+{-# COMPLETE
+  SourceConnectorType_Marketo,
+  SourceConnectorType_S3,
+  SourceConnectorType_Salesforce,
+  SourceConnectorType_Servicenow,
+  SourceConnectorType_Zendesk,
+  SourceConnectorType'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/SourceFlowConfig.hs b/gen/Amazonka/CustomerProfiles/Types/SourceFlowConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/SourceFlowConfig.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.CustomerProfiles.Types.SourceFlowConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.SourceFlowConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.IncrementalPullConfig
+import Amazonka.CustomerProfiles.Types.SourceConnectorProperties
+import Amazonka.CustomerProfiles.Types.SourceConnectorType
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about the configuration of the source connector
+-- used in the flow.
+--
+-- /See:/ 'newSourceFlowConfig' smart constructor.
+data SourceFlowConfig = SourceFlowConfig'
+  { -- | The name of the AppFlow connector profile. This name must be unique for
+    -- each connector profile in the AWS account.
+    connectorProfileName :: Prelude.Maybe Prelude.Text,
+    -- | Defines the configuration for a scheduled incremental data pull. If a
+    -- valid configuration is provided, the fields specified in the
+    -- configuration are used when querying for the incremental data pull.
+    incrementalPullConfig :: Prelude.Maybe IncrementalPullConfig,
+    -- | The type of connector, such as Salesforce, Marketo, and so on.
+    connectorType :: SourceConnectorType,
+    -- | Specifies the information that is required to query a particular source
+    -- connector.
+    sourceConnectorProperties :: SourceConnectorProperties
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SourceFlowConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectorProfileName', 'sourceFlowConfig_connectorProfileName' - The name of the AppFlow connector profile. This name must be unique for
+-- each connector profile in the AWS account.
+--
+-- 'incrementalPullConfig', 'sourceFlowConfig_incrementalPullConfig' - Defines the configuration for a scheduled incremental data pull. If a
+-- valid configuration is provided, the fields specified in the
+-- configuration are used when querying for the incremental data pull.
+--
+-- 'connectorType', 'sourceFlowConfig_connectorType' - The type of connector, such as Salesforce, Marketo, and so on.
+--
+-- 'sourceConnectorProperties', 'sourceFlowConfig_sourceConnectorProperties' - Specifies the information that is required to query a particular source
+-- connector.
+newSourceFlowConfig ::
+  -- | 'connectorType'
+  SourceConnectorType ->
+  -- | 'sourceConnectorProperties'
+  SourceConnectorProperties ->
+  SourceFlowConfig
+newSourceFlowConfig
+  pConnectorType_
+  pSourceConnectorProperties_ =
+    SourceFlowConfig'
+      { connectorProfileName =
+          Prelude.Nothing,
+        incrementalPullConfig = Prelude.Nothing,
+        connectorType = pConnectorType_,
+        sourceConnectorProperties =
+          pSourceConnectorProperties_
+      }
+
+-- | The name of the AppFlow connector profile. This name must be unique for
+-- each connector profile in the AWS account.
+sourceFlowConfig_connectorProfileName :: Lens.Lens' SourceFlowConfig (Prelude.Maybe Prelude.Text)
+sourceFlowConfig_connectorProfileName = Lens.lens (\SourceFlowConfig' {connectorProfileName} -> connectorProfileName) (\s@SourceFlowConfig' {} a -> s {connectorProfileName = a} :: SourceFlowConfig)
+
+-- | Defines the configuration for a scheduled incremental data pull. If a
+-- valid configuration is provided, the fields specified in the
+-- configuration are used when querying for the incremental data pull.
+sourceFlowConfig_incrementalPullConfig :: Lens.Lens' SourceFlowConfig (Prelude.Maybe IncrementalPullConfig)
+sourceFlowConfig_incrementalPullConfig = Lens.lens (\SourceFlowConfig' {incrementalPullConfig} -> incrementalPullConfig) (\s@SourceFlowConfig' {} a -> s {incrementalPullConfig = a} :: SourceFlowConfig)
+
+-- | The type of connector, such as Salesforce, Marketo, and so on.
+sourceFlowConfig_connectorType :: Lens.Lens' SourceFlowConfig SourceConnectorType
+sourceFlowConfig_connectorType = Lens.lens (\SourceFlowConfig' {connectorType} -> connectorType) (\s@SourceFlowConfig' {} a -> s {connectorType = a} :: SourceFlowConfig)
+
+-- | Specifies the information that is required to query a particular source
+-- connector.
+sourceFlowConfig_sourceConnectorProperties :: Lens.Lens' SourceFlowConfig SourceConnectorProperties
+sourceFlowConfig_sourceConnectorProperties = Lens.lens (\SourceFlowConfig' {sourceConnectorProperties} -> sourceConnectorProperties) (\s@SourceFlowConfig' {} a -> s {sourceConnectorProperties = a} :: SourceFlowConfig)
+
+instance Prelude.Hashable SourceFlowConfig where
+  hashWithSalt _salt SourceFlowConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectorProfileName
+      `Prelude.hashWithSalt` incrementalPullConfig
+      `Prelude.hashWithSalt` connectorType
+      `Prelude.hashWithSalt` sourceConnectorProperties
+
+instance Prelude.NFData SourceFlowConfig where
+  rnf SourceFlowConfig' {..} =
+    Prelude.rnf connectorProfileName
+      `Prelude.seq` Prelude.rnf incrementalPullConfig
+      `Prelude.seq` Prelude.rnf connectorType
+      `Prelude.seq` Prelude.rnf sourceConnectorProperties
+
+instance Data.ToJSON SourceFlowConfig where
+  toJSON SourceFlowConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ConnectorProfileName" Data..=)
+              Prelude.<$> connectorProfileName,
+            ("IncrementalPullConfig" Data..=)
+              Prelude.<$> incrementalPullConfig,
+            Prelude.Just ("ConnectorType" Data..= connectorType),
+            Prelude.Just
+              ( "SourceConnectorProperties"
+                  Data..= sourceConnectorProperties
+              )
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/StandardIdentifier.hs b/gen/Amazonka/CustomerProfiles/Types/StandardIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/StandardIdentifier.hs
@@ -0,0 +1,101 @@
+{-# 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.CustomerProfiles.Types.StandardIdentifier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.StandardIdentifier
+  ( StandardIdentifier
+      ( ..,
+        StandardIdentifier_ASSET,
+        StandardIdentifier_CASE,
+        StandardIdentifier_LOOKUP_ONLY,
+        StandardIdentifier_NEW_ONLY,
+        StandardIdentifier_ORDER,
+        StandardIdentifier_PROFILE,
+        StandardIdentifier_SECONDARY,
+        StandardIdentifier_UNIQUE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StandardIdentifier = StandardIdentifier'
+  { fromStandardIdentifier ::
+      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 StandardIdentifier_ASSET :: StandardIdentifier
+pattern StandardIdentifier_ASSET = StandardIdentifier' "ASSET"
+
+pattern StandardIdentifier_CASE :: StandardIdentifier
+pattern StandardIdentifier_CASE = StandardIdentifier' "CASE"
+
+pattern StandardIdentifier_LOOKUP_ONLY :: StandardIdentifier
+pattern StandardIdentifier_LOOKUP_ONLY = StandardIdentifier' "LOOKUP_ONLY"
+
+pattern StandardIdentifier_NEW_ONLY :: StandardIdentifier
+pattern StandardIdentifier_NEW_ONLY = StandardIdentifier' "NEW_ONLY"
+
+pattern StandardIdentifier_ORDER :: StandardIdentifier
+pattern StandardIdentifier_ORDER = StandardIdentifier' "ORDER"
+
+pattern StandardIdentifier_PROFILE :: StandardIdentifier
+pattern StandardIdentifier_PROFILE = StandardIdentifier' "PROFILE"
+
+pattern StandardIdentifier_SECONDARY :: StandardIdentifier
+pattern StandardIdentifier_SECONDARY = StandardIdentifier' "SECONDARY"
+
+pattern StandardIdentifier_UNIQUE :: StandardIdentifier
+pattern StandardIdentifier_UNIQUE = StandardIdentifier' "UNIQUE"
+
+{-# COMPLETE
+  StandardIdentifier_ASSET,
+  StandardIdentifier_CASE,
+  StandardIdentifier_LOOKUP_ONLY,
+  StandardIdentifier_NEW_ONLY,
+  StandardIdentifier_ORDER,
+  StandardIdentifier_PROFILE,
+  StandardIdentifier_SECONDARY,
+  StandardIdentifier_UNIQUE,
+  StandardIdentifier'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/Status.hs b/gen/Amazonka/CustomerProfiles/Types/Status.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/Status.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.Status
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.Status
+  ( Status
+      ( ..,
+        Status_CANCELLED,
+        Status_COMPLETE,
+        Status_FAILED,
+        Status_IN_PROGRESS,
+        Status_NOT_STARTED,
+        Status_RETRY,
+        Status_SPLIT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Status = Status' {fromStatus :: 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 Status_CANCELLED :: Status
+pattern Status_CANCELLED = Status' "CANCELLED"
+
+pattern Status_COMPLETE :: Status
+pattern Status_COMPLETE = Status' "COMPLETE"
+
+pattern Status_FAILED :: Status
+pattern Status_FAILED = Status' "FAILED"
+
+pattern Status_IN_PROGRESS :: Status
+pattern Status_IN_PROGRESS = Status' "IN_PROGRESS"
+
+pattern Status_NOT_STARTED :: Status
+pattern Status_NOT_STARTED = Status' "NOT_STARTED"
+
+pattern Status_RETRY :: Status
+pattern Status_RETRY = Status' "RETRY"
+
+pattern Status_SPLIT :: Status
+pattern Status_SPLIT = Status' "SPLIT"
+
+{-# COMPLETE
+  Status_CANCELLED,
+  Status_COMPLETE,
+  Status_FAILED,
+  Status_IN_PROGRESS,
+  Status_NOT_STARTED,
+  Status_RETRY,
+  Status_SPLIT,
+  Status'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/Task.hs b/gen/Amazonka/CustomerProfiles/Types/Task.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/Task.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.Task
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.Task where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.ConnectorOperator
+import Amazonka.CustomerProfiles.Types.OperatorPropertiesKeys
+import Amazonka.CustomerProfiles.Types.TaskType
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A class for modeling different type of tasks. Task implementation varies
+-- based on the TaskType.
+--
+-- /See:/ 'newTask' smart constructor.
+data Task = Task'
+  { -- | The operation to be performed on the provided source fields.
+    connectorOperator :: Prelude.Maybe ConnectorOperator,
+    -- | A field in a destination connector, or a field value against which
+    -- Amazon AppFlow validates a source field.
+    destinationField :: Prelude.Maybe Prelude.Text,
+    -- | A map used to store task-related information. The service looks for
+    -- particular information based on the TaskType.
+    taskProperties :: Prelude.Maybe (Prelude.HashMap OperatorPropertiesKeys Prelude.Text),
+    -- | The source fields to which a particular task is applied.
+    sourceFields :: [Prelude.Text],
+    -- | Specifies the particular task implementation that Amazon AppFlow
+    -- performs.
+    taskType :: TaskType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Task' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectorOperator', 'task_connectorOperator' - The operation to be performed on the provided source fields.
+--
+-- 'destinationField', 'task_destinationField' - A field in a destination connector, or a field value against which
+-- Amazon AppFlow validates a source field.
+--
+-- 'taskProperties', 'task_taskProperties' - A map used to store task-related information. The service looks for
+-- particular information based on the TaskType.
+--
+-- 'sourceFields', 'task_sourceFields' - The source fields to which a particular task is applied.
+--
+-- 'taskType', 'task_taskType' - Specifies the particular task implementation that Amazon AppFlow
+-- performs.
+newTask ::
+  -- | 'taskType'
+  TaskType ->
+  Task
+newTask pTaskType_ =
+  Task'
+    { connectorOperator = Prelude.Nothing,
+      destinationField = Prelude.Nothing,
+      taskProperties = Prelude.Nothing,
+      sourceFields = Prelude.mempty,
+      taskType = pTaskType_
+    }
+
+-- | The operation to be performed on the provided source fields.
+task_connectorOperator :: Lens.Lens' Task (Prelude.Maybe ConnectorOperator)
+task_connectorOperator = Lens.lens (\Task' {connectorOperator} -> connectorOperator) (\s@Task' {} a -> s {connectorOperator = a} :: Task)
+
+-- | A field in a destination connector, or a field value against which
+-- Amazon AppFlow validates a source field.
+task_destinationField :: Lens.Lens' Task (Prelude.Maybe Prelude.Text)
+task_destinationField = Lens.lens (\Task' {destinationField} -> destinationField) (\s@Task' {} a -> s {destinationField = a} :: Task)
+
+-- | A map used to store task-related information. The service looks for
+-- particular information based on the TaskType.
+task_taskProperties :: Lens.Lens' Task (Prelude.Maybe (Prelude.HashMap OperatorPropertiesKeys Prelude.Text))
+task_taskProperties = Lens.lens (\Task' {taskProperties} -> taskProperties) (\s@Task' {} a -> s {taskProperties = a} :: Task) Prelude.. Lens.mapping Lens.coerced
+
+-- | The source fields to which a particular task is applied.
+task_sourceFields :: Lens.Lens' Task [Prelude.Text]
+task_sourceFields = Lens.lens (\Task' {sourceFields} -> sourceFields) (\s@Task' {} a -> s {sourceFields = a} :: Task) Prelude.. Lens.coerced
+
+-- | Specifies the particular task implementation that Amazon AppFlow
+-- performs.
+task_taskType :: Lens.Lens' Task TaskType
+task_taskType = Lens.lens (\Task' {taskType} -> taskType) (\s@Task' {} a -> s {taskType = a} :: Task)
+
+instance Prelude.Hashable Task where
+  hashWithSalt _salt Task' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectorOperator
+      `Prelude.hashWithSalt` destinationField
+      `Prelude.hashWithSalt` taskProperties
+      `Prelude.hashWithSalt` sourceFields
+      `Prelude.hashWithSalt` taskType
+
+instance Prelude.NFData Task where
+  rnf Task' {..} =
+    Prelude.rnf connectorOperator
+      `Prelude.seq` Prelude.rnf destinationField
+      `Prelude.seq` Prelude.rnf taskProperties
+      `Prelude.seq` Prelude.rnf sourceFields
+      `Prelude.seq` Prelude.rnf taskType
+
+instance Data.ToJSON Task where
+  toJSON Task' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ConnectorOperator" Data..=)
+              Prelude.<$> connectorOperator,
+            ("DestinationField" Data..=)
+              Prelude.<$> destinationField,
+            ("TaskProperties" Data..=)
+              Prelude.<$> taskProperties,
+            Prelude.Just ("SourceFields" Data..= sourceFields),
+            Prelude.Just ("TaskType" Data..= taskType)
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/TaskType.hs b/gen/Amazonka/CustomerProfiles/Types/TaskType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/TaskType.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.TaskType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.TaskType
+  ( TaskType
+      ( ..,
+        TaskType_Arithmetic,
+        TaskType_Filter,
+        TaskType_Map,
+        TaskType_Mask,
+        TaskType_Merge,
+        TaskType_Truncate,
+        TaskType_Validate
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TaskType = TaskType'
+  { fromTaskType ::
+      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 TaskType_Arithmetic :: TaskType
+pattern TaskType_Arithmetic = TaskType' "Arithmetic"
+
+pattern TaskType_Filter :: TaskType
+pattern TaskType_Filter = TaskType' "Filter"
+
+pattern TaskType_Map :: TaskType
+pattern TaskType_Map = TaskType' "Map"
+
+pattern TaskType_Mask :: TaskType
+pattern TaskType_Mask = TaskType' "Mask"
+
+pattern TaskType_Merge :: TaskType
+pattern TaskType_Merge = TaskType' "Merge"
+
+pattern TaskType_Truncate :: TaskType
+pattern TaskType_Truncate = TaskType' "Truncate"
+
+pattern TaskType_Validate :: TaskType
+pattern TaskType_Validate = TaskType' "Validate"
+
+{-# COMPLETE
+  TaskType_Arithmetic,
+  TaskType_Filter,
+  TaskType_Map,
+  TaskType_Mask,
+  TaskType_Merge,
+  TaskType_Truncate,
+  TaskType_Validate,
+  TaskType'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/TriggerConfig.hs b/gen/Amazonka/CustomerProfiles/Types/TriggerConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/TriggerConfig.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.CustomerProfiles.Types.TriggerConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.TriggerConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.TriggerProperties
+import Amazonka.CustomerProfiles.Types.TriggerType
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The trigger settings that determine how and when Amazon AppFlow runs the
+-- specified flow.
+--
+-- /See:/ 'newTriggerConfig' smart constructor.
+data TriggerConfig = TriggerConfig'
+  { -- | Specifies the configuration details of a schedule-triggered flow that
+    -- you define. Currently, these settings only apply to the Scheduled
+    -- trigger type.
+    triggerProperties :: Prelude.Maybe TriggerProperties,
+    -- | Specifies the type of flow trigger. It can be OnDemand, Scheduled, or
+    -- Event.
+    triggerType :: TriggerType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TriggerConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'triggerProperties', 'triggerConfig_triggerProperties' - Specifies the configuration details of a schedule-triggered flow that
+-- you define. Currently, these settings only apply to the Scheduled
+-- trigger type.
+--
+-- 'triggerType', 'triggerConfig_triggerType' - Specifies the type of flow trigger. It can be OnDemand, Scheduled, or
+-- Event.
+newTriggerConfig ::
+  -- | 'triggerType'
+  TriggerType ->
+  TriggerConfig
+newTriggerConfig pTriggerType_ =
+  TriggerConfig'
+    { triggerProperties = Prelude.Nothing,
+      triggerType = pTriggerType_
+    }
+
+-- | Specifies the configuration details of a schedule-triggered flow that
+-- you define. Currently, these settings only apply to the Scheduled
+-- trigger type.
+triggerConfig_triggerProperties :: Lens.Lens' TriggerConfig (Prelude.Maybe TriggerProperties)
+triggerConfig_triggerProperties = Lens.lens (\TriggerConfig' {triggerProperties} -> triggerProperties) (\s@TriggerConfig' {} a -> s {triggerProperties = a} :: TriggerConfig)
+
+-- | Specifies the type of flow trigger. It can be OnDemand, Scheduled, or
+-- Event.
+triggerConfig_triggerType :: Lens.Lens' TriggerConfig TriggerType
+triggerConfig_triggerType = Lens.lens (\TriggerConfig' {triggerType} -> triggerType) (\s@TriggerConfig' {} a -> s {triggerType = a} :: TriggerConfig)
+
+instance Prelude.Hashable TriggerConfig where
+  hashWithSalt _salt TriggerConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` triggerProperties
+      `Prelude.hashWithSalt` triggerType
+
+instance Prelude.NFData TriggerConfig where
+  rnf TriggerConfig' {..} =
+    Prelude.rnf triggerProperties
+      `Prelude.seq` Prelude.rnf triggerType
+
+instance Data.ToJSON TriggerConfig where
+  toJSON TriggerConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("TriggerProperties" Data..=)
+              Prelude.<$> triggerProperties,
+            Prelude.Just ("TriggerType" Data..= triggerType)
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/TriggerProperties.hs b/gen/Amazonka/CustomerProfiles/Types/TriggerProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/TriggerProperties.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.TriggerProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.TriggerProperties where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.ScheduledTriggerProperties
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the configuration details that control the trigger for a flow.
+-- Currently, these settings only apply to the Scheduled trigger type.
+--
+-- /See:/ 'newTriggerProperties' smart constructor.
+data TriggerProperties = TriggerProperties'
+  { -- | Specifies the configuration details of a schedule-triggered flow that
+    -- you define.
+    scheduled :: Prelude.Maybe ScheduledTriggerProperties
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TriggerProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'scheduled', 'triggerProperties_scheduled' - Specifies the configuration details of a schedule-triggered flow that
+-- you define.
+newTriggerProperties ::
+  TriggerProperties
+newTriggerProperties =
+  TriggerProperties' {scheduled = Prelude.Nothing}
+
+-- | Specifies the configuration details of a schedule-triggered flow that
+-- you define.
+triggerProperties_scheduled :: Lens.Lens' TriggerProperties (Prelude.Maybe ScheduledTriggerProperties)
+triggerProperties_scheduled = Lens.lens (\TriggerProperties' {scheduled} -> scheduled) (\s@TriggerProperties' {} a -> s {scheduled = a} :: TriggerProperties)
+
+instance Prelude.Hashable TriggerProperties where
+  hashWithSalt _salt TriggerProperties' {..} =
+    _salt `Prelude.hashWithSalt` scheduled
+
+instance Prelude.NFData TriggerProperties where
+  rnf TriggerProperties' {..} = Prelude.rnf scheduled
+
+instance Data.ToJSON TriggerProperties where
+  toJSON TriggerProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Scheduled" Data..=) Prelude.<$> scheduled]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/TriggerType.hs b/gen/Amazonka/CustomerProfiles/Types/TriggerType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/TriggerType.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.CustomerProfiles.Types.TriggerType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.TriggerType
+  ( TriggerType
+      ( ..,
+        TriggerType_Event,
+        TriggerType_OnDemand,
+        TriggerType_Scheduled
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TriggerType = TriggerType'
+  { fromTriggerType ::
+      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 TriggerType_Event :: TriggerType
+pattern TriggerType_Event = TriggerType' "Event"
+
+pattern TriggerType_OnDemand :: TriggerType
+pattern TriggerType_OnDemand = TriggerType' "OnDemand"
+
+pattern TriggerType_Scheduled :: TriggerType
+pattern TriggerType_Scheduled = TriggerType' "Scheduled"
+
+{-# COMPLETE
+  TriggerType_Event,
+  TriggerType_OnDemand,
+  TriggerType_Scheduled,
+  TriggerType'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/UpdateAddress.hs b/gen/Amazonka/CustomerProfiles/Types/UpdateAddress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/UpdateAddress.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.UpdateAddress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.UpdateAddress where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Updates associated with the address properties of a customer profile.
+--
+-- /See:/ 'newUpdateAddress' smart constructor.
+data UpdateAddress = UpdateAddress'
+  { -- | The first line of a customer address.
+    address1 :: Prelude.Maybe Prelude.Text,
+    -- | The second line of a customer address.
+    address2 :: Prelude.Maybe Prelude.Text,
+    -- | The third line of a customer address.
+    address3 :: Prelude.Maybe Prelude.Text,
+    -- | The fourth line of a customer address.
+    address4 :: Prelude.Maybe Prelude.Text,
+    -- | The city in which a customer lives.
+    city :: Prelude.Maybe Prelude.Text,
+    -- | The country in which a customer lives.
+    country :: Prelude.Maybe Prelude.Text,
+    -- | The county in which a customer lives.
+    county :: Prelude.Maybe Prelude.Text,
+    -- | The postal code of a customer address.
+    postalCode :: Prelude.Maybe Prelude.Text,
+    -- | The province in which a customer lives.
+    province :: Prelude.Maybe Prelude.Text,
+    -- | The state in which a customer lives.
+    state :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAddress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'address1', 'updateAddress_address1' - The first line of a customer address.
+--
+-- 'address2', 'updateAddress_address2' - The second line of a customer address.
+--
+-- 'address3', 'updateAddress_address3' - The third line of a customer address.
+--
+-- 'address4', 'updateAddress_address4' - The fourth line of a customer address.
+--
+-- 'city', 'updateAddress_city' - The city in which a customer lives.
+--
+-- 'country', 'updateAddress_country' - The country in which a customer lives.
+--
+-- 'county', 'updateAddress_county' - The county in which a customer lives.
+--
+-- 'postalCode', 'updateAddress_postalCode' - The postal code of a customer address.
+--
+-- 'province', 'updateAddress_province' - The province in which a customer lives.
+--
+-- 'state', 'updateAddress_state' - The state in which a customer lives.
+newUpdateAddress ::
+  UpdateAddress
+newUpdateAddress =
+  UpdateAddress'
+    { address1 = Prelude.Nothing,
+      address2 = Prelude.Nothing,
+      address3 = Prelude.Nothing,
+      address4 = Prelude.Nothing,
+      city = Prelude.Nothing,
+      country = Prelude.Nothing,
+      county = Prelude.Nothing,
+      postalCode = Prelude.Nothing,
+      province = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The first line of a customer address.
+updateAddress_address1 :: Lens.Lens' UpdateAddress (Prelude.Maybe Prelude.Text)
+updateAddress_address1 = Lens.lens (\UpdateAddress' {address1} -> address1) (\s@UpdateAddress' {} a -> s {address1 = a} :: UpdateAddress)
+
+-- | The second line of a customer address.
+updateAddress_address2 :: Lens.Lens' UpdateAddress (Prelude.Maybe Prelude.Text)
+updateAddress_address2 = Lens.lens (\UpdateAddress' {address2} -> address2) (\s@UpdateAddress' {} a -> s {address2 = a} :: UpdateAddress)
+
+-- | The third line of a customer address.
+updateAddress_address3 :: Lens.Lens' UpdateAddress (Prelude.Maybe Prelude.Text)
+updateAddress_address3 = Lens.lens (\UpdateAddress' {address3} -> address3) (\s@UpdateAddress' {} a -> s {address3 = a} :: UpdateAddress)
+
+-- | The fourth line of a customer address.
+updateAddress_address4 :: Lens.Lens' UpdateAddress (Prelude.Maybe Prelude.Text)
+updateAddress_address4 = Lens.lens (\UpdateAddress' {address4} -> address4) (\s@UpdateAddress' {} a -> s {address4 = a} :: UpdateAddress)
+
+-- | The city in which a customer lives.
+updateAddress_city :: Lens.Lens' UpdateAddress (Prelude.Maybe Prelude.Text)
+updateAddress_city = Lens.lens (\UpdateAddress' {city} -> city) (\s@UpdateAddress' {} a -> s {city = a} :: UpdateAddress)
+
+-- | The country in which a customer lives.
+updateAddress_country :: Lens.Lens' UpdateAddress (Prelude.Maybe Prelude.Text)
+updateAddress_country = Lens.lens (\UpdateAddress' {country} -> country) (\s@UpdateAddress' {} a -> s {country = a} :: UpdateAddress)
+
+-- | The county in which a customer lives.
+updateAddress_county :: Lens.Lens' UpdateAddress (Prelude.Maybe Prelude.Text)
+updateAddress_county = Lens.lens (\UpdateAddress' {county} -> county) (\s@UpdateAddress' {} a -> s {county = a} :: UpdateAddress)
+
+-- | The postal code of a customer address.
+updateAddress_postalCode :: Lens.Lens' UpdateAddress (Prelude.Maybe Prelude.Text)
+updateAddress_postalCode = Lens.lens (\UpdateAddress' {postalCode} -> postalCode) (\s@UpdateAddress' {} a -> s {postalCode = a} :: UpdateAddress)
+
+-- | The province in which a customer lives.
+updateAddress_province :: Lens.Lens' UpdateAddress (Prelude.Maybe Prelude.Text)
+updateAddress_province = Lens.lens (\UpdateAddress' {province} -> province) (\s@UpdateAddress' {} a -> s {province = a} :: UpdateAddress)
+
+-- | The state in which a customer lives.
+updateAddress_state :: Lens.Lens' UpdateAddress (Prelude.Maybe Prelude.Text)
+updateAddress_state = Lens.lens (\UpdateAddress' {state} -> state) (\s@UpdateAddress' {} a -> s {state = a} :: UpdateAddress)
+
+instance Prelude.Hashable UpdateAddress where
+  hashWithSalt _salt UpdateAddress' {..} =
+    _salt
+      `Prelude.hashWithSalt` address1
+      `Prelude.hashWithSalt` address2
+      `Prelude.hashWithSalt` address3
+      `Prelude.hashWithSalt` address4
+      `Prelude.hashWithSalt` city
+      `Prelude.hashWithSalt` country
+      `Prelude.hashWithSalt` county
+      `Prelude.hashWithSalt` postalCode
+      `Prelude.hashWithSalt` province
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData UpdateAddress where
+  rnf UpdateAddress' {..} =
+    Prelude.rnf address1
+      `Prelude.seq` Prelude.rnf address2
+      `Prelude.seq` Prelude.rnf address3
+      `Prelude.seq` Prelude.rnf address4
+      `Prelude.seq` Prelude.rnf city
+      `Prelude.seq` Prelude.rnf country
+      `Prelude.seq` Prelude.rnf county
+      `Prelude.seq` Prelude.rnf postalCode
+      `Prelude.seq` Prelude.rnf province
+      `Prelude.seq` Prelude.rnf state
+
+instance Data.ToJSON UpdateAddress where
+  toJSON UpdateAddress' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Address1" Data..=) Prelude.<$> address1,
+            ("Address2" Data..=) Prelude.<$> address2,
+            ("Address3" Data..=) Prelude.<$> address3,
+            ("Address4" Data..=) Prelude.<$> address4,
+            ("City" Data..=) Prelude.<$> city,
+            ("Country" Data..=) Prelude.<$> country,
+            ("County" Data..=) Prelude.<$> county,
+            ("PostalCode" Data..=) Prelude.<$> postalCode,
+            ("Province" Data..=) Prelude.<$> province,
+            ("State" Data..=) Prelude.<$> state
+          ]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/Types/WorkflowAttributes.hs b/gen/Amazonka/CustomerProfiles/Types/WorkflowAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/WorkflowAttributes.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.WorkflowAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.WorkflowAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowAttributes
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Structure to hold workflow attributes.
+--
+-- /See:/ 'newWorkflowAttributes' smart constructor.
+data WorkflowAttributes = WorkflowAttributes'
+  { -- | Workflow attributes specific to @APPFLOW_INTEGRATION@ workflow.
+    appflowIntegration :: Prelude.Maybe AppflowIntegrationWorkflowAttributes
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkflowAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appflowIntegration', 'workflowAttributes_appflowIntegration' - Workflow attributes specific to @APPFLOW_INTEGRATION@ workflow.
+newWorkflowAttributes ::
+  WorkflowAttributes
+newWorkflowAttributes =
+  WorkflowAttributes'
+    { appflowIntegration =
+        Prelude.Nothing
+    }
+
+-- | Workflow attributes specific to @APPFLOW_INTEGRATION@ workflow.
+workflowAttributes_appflowIntegration :: Lens.Lens' WorkflowAttributes (Prelude.Maybe AppflowIntegrationWorkflowAttributes)
+workflowAttributes_appflowIntegration = Lens.lens (\WorkflowAttributes' {appflowIntegration} -> appflowIntegration) (\s@WorkflowAttributes' {} a -> s {appflowIntegration = a} :: WorkflowAttributes)
+
+instance Data.FromJSON WorkflowAttributes where
+  parseJSON =
+    Data.withObject
+      "WorkflowAttributes"
+      ( \x ->
+          WorkflowAttributes'
+            Prelude.<$> (x Data..:? "AppflowIntegration")
+      )
+
+instance Prelude.Hashable WorkflowAttributes where
+  hashWithSalt _salt WorkflowAttributes' {..} =
+    _salt `Prelude.hashWithSalt` appflowIntegration
+
+instance Prelude.NFData WorkflowAttributes where
+  rnf WorkflowAttributes' {..} =
+    Prelude.rnf appflowIntegration
diff --git a/gen/Amazonka/CustomerProfiles/Types/WorkflowMetrics.hs b/gen/Amazonka/CustomerProfiles/Types/WorkflowMetrics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/WorkflowMetrics.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.WorkflowMetrics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.WorkflowMetrics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowMetrics
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Generic object containing workflow execution metrics.
+--
+-- /See:/ 'newWorkflowMetrics' smart constructor.
+data WorkflowMetrics = WorkflowMetrics'
+  { -- | Workflow execution metrics for @APPFLOW_INTEGRATION@ workflow.
+    appflowIntegration :: Prelude.Maybe AppflowIntegrationWorkflowMetrics
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkflowMetrics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appflowIntegration', 'workflowMetrics_appflowIntegration' - Workflow execution metrics for @APPFLOW_INTEGRATION@ workflow.
+newWorkflowMetrics ::
+  WorkflowMetrics
+newWorkflowMetrics =
+  WorkflowMetrics'
+    { appflowIntegration =
+        Prelude.Nothing
+    }
+
+-- | Workflow execution metrics for @APPFLOW_INTEGRATION@ workflow.
+workflowMetrics_appflowIntegration :: Lens.Lens' WorkflowMetrics (Prelude.Maybe AppflowIntegrationWorkflowMetrics)
+workflowMetrics_appflowIntegration = Lens.lens (\WorkflowMetrics' {appflowIntegration} -> appflowIntegration) (\s@WorkflowMetrics' {} a -> s {appflowIntegration = a} :: WorkflowMetrics)
+
+instance Data.FromJSON WorkflowMetrics where
+  parseJSON =
+    Data.withObject
+      "WorkflowMetrics"
+      ( \x ->
+          WorkflowMetrics'
+            Prelude.<$> (x Data..:? "AppflowIntegration")
+      )
+
+instance Prelude.Hashable WorkflowMetrics where
+  hashWithSalt _salt WorkflowMetrics' {..} =
+    _salt `Prelude.hashWithSalt` appflowIntegration
+
+instance Prelude.NFData WorkflowMetrics where
+  rnf WorkflowMetrics' {..} =
+    Prelude.rnf appflowIntegration
diff --git a/gen/Amazonka/CustomerProfiles/Types/WorkflowStepItem.hs b/gen/Amazonka/CustomerProfiles/Types/WorkflowStepItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/WorkflowStepItem.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.WorkflowStepItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.WorkflowStepItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types.AppflowIntegrationWorkflowStep
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | List containing steps in workflow.
+--
+-- /See:/ 'newWorkflowStepItem' smart constructor.
+data WorkflowStepItem = WorkflowStepItem'
+  { -- | Workflow step information specific to @APPFLOW_INTEGRATION@ workflow.
+    appflowIntegration :: Prelude.Maybe AppflowIntegrationWorkflowStep
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkflowStepItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appflowIntegration', 'workflowStepItem_appflowIntegration' - Workflow step information specific to @APPFLOW_INTEGRATION@ workflow.
+newWorkflowStepItem ::
+  WorkflowStepItem
+newWorkflowStepItem =
+  WorkflowStepItem'
+    { appflowIntegration =
+        Prelude.Nothing
+    }
+
+-- | Workflow step information specific to @APPFLOW_INTEGRATION@ workflow.
+workflowStepItem_appflowIntegration :: Lens.Lens' WorkflowStepItem (Prelude.Maybe AppflowIntegrationWorkflowStep)
+workflowStepItem_appflowIntegration = Lens.lens (\WorkflowStepItem' {appflowIntegration} -> appflowIntegration) (\s@WorkflowStepItem' {} a -> s {appflowIntegration = a} :: WorkflowStepItem)
+
+instance Data.FromJSON WorkflowStepItem where
+  parseJSON =
+    Data.withObject
+      "WorkflowStepItem"
+      ( \x ->
+          WorkflowStepItem'
+            Prelude.<$> (x Data..:? "AppflowIntegration")
+      )
+
+instance Prelude.Hashable WorkflowStepItem where
+  hashWithSalt _salt WorkflowStepItem' {..} =
+    _salt `Prelude.hashWithSalt` appflowIntegration
+
+instance Prelude.NFData WorkflowStepItem where
+  rnf WorkflowStepItem' {..} =
+    Prelude.rnf appflowIntegration
diff --git a/gen/Amazonka/CustomerProfiles/Types/WorkflowType.hs b/gen/Amazonka/CustomerProfiles/Types/WorkflowType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/WorkflowType.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.WorkflowType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.WorkflowType
+  ( WorkflowType
+      ( ..,
+        WorkflowType_APPFLOW_INTEGRATION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WorkflowType = WorkflowType'
+  { fromWorkflowType ::
+      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 WorkflowType_APPFLOW_INTEGRATION :: WorkflowType
+pattern WorkflowType_APPFLOW_INTEGRATION = WorkflowType' "APPFLOW_INTEGRATION"
+
+{-# COMPLETE
+  WorkflowType_APPFLOW_INTEGRATION,
+  WorkflowType'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/ZendeskConnectorOperator.hs b/gen/Amazonka/CustomerProfiles/Types/ZendeskConnectorOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ZendeskConnectorOperator.hs
@@ -0,0 +1,131 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.ZendeskConnectorOperator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ZendeskConnectorOperator
+  ( ZendeskConnectorOperator
+      ( ..,
+        ZendeskConnectorOperator_ADDITION,
+        ZendeskConnectorOperator_DIVISION,
+        ZendeskConnectorOperator_GREATER_THAN,
+        ZendeskConnectorOperator_MASK_ALL,
+        ZendeskConnectorOperator_MASK_FIRST_N,
+        ZendeskConnectorOperator_MASK_LAST_N,
+        ZendeskConnectorOperator_MULTIPLICATION,
+        ZendeskConnectorOperator_NO_OP,
+        ZendeskConnectorOperator_PROJECTION,
+        ZendeskConnectorOperator_SUBTRACTION,
+        ZendeskConnectorOperator_VALIDATE_NON_NEGATIVE,
+        ZendeskConnectorOperator_VALIDATE_NON_NULL,
+        ZendeskConnectorOperator_VALIDATE_NON_ZERO,
+        ZendeskConnectorOperator_VALIDATE_NUMERIC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ZendeskConnectorOperator = ZendeskConnectorOperator'
+  { fromZendeskConnectorOperator ::
+      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 ZendeskConnectorOperator_ADDITION :: ZendeskConnectorOperator
+pattern ZendeskConnectorOperator_ADDITION = ZendeskConnectorOperator' "ADDITION"
+
+pattern ZendeskConnectorOperator_DIVISION :: ZendeskConnectorOperator
+pattern ZendeskConnectorOperator_DIVISION = ZendeskConnectorOperator' "DIVISION"
+
+pattern ZendeskConnectorOperator_GREATER_THAN :: ZendeskConnectorOperator
+pattern ZendeskConnectorOperator_GREATER_THAN = ZendeskConnectorOperator' "GREATER_THAN"
+
+pattern ZendeskConnectorOperator_MASK_ALL :: ZendeskConnectorOperator
+pattern ZendeskConnectorOperator_MASK_ALL = ZendeskConnectorOperator' "MASK_ALL"
+
+pattern ZendeskConnectorOperator_MASK_FIRST_N :: ZendeskConnectorOperator
+pattern ZendeskConnectorOperator_MASK_FIRST_N = ZendeskConnectorOperator' "MASK_FIRST_N"
+
+pattern ZendeskConnectorOperator_MASK_LAST_N :: ZendeskConnectorOperator
+pattern ZendeskConnectorOperator_MASK_LAST_N = ZendeskConnectorOperator' "MASK_LAST_N"
+
+pattern ZendeskConnectorOperator_MULTIPLICATION :: ZendeskConnectorOperator
+pattern ZendeskConnectorOperator_MULTIPLICATION = ZendeskConnectorOperator' "MULTIPLICATION"
+
+pattern ZendeskConnectorOperator_NO_OP :: ZendeskConnectorOperator
+pattern ZendeskConnectorOperator_NO_OP = ZendeskConnectorOperator' "NO_OP"
+
+pattern ZendeskConnectorOperator_PROJECTION :: ZendeskConnectorOperator
+pattern ZendeskConnectorOperator_PROJECTION = ZendeskConnectorOperator' "PROJECTION"
+
+pattern ZendeskConnectorOperator_SUBTRACTION :: ZendeskConnectorOperator
+pattern ZendeskConnectorOperator_SUBTRACTION = ZendeskConnectorOperator' "SUBTRACTION"
+
+pattern ZendeskConnectorOperator_VALIDATE_NON_NEGATIVE :: ZendeskConnectorOperator
+pattern ZendeskConnectorOperator_VALIDATE_NON_NEGATIVE = ZendeskConnectorOperator' "VALIDATE_NON_NEGATIVE"
+
+pattern ZendeskConnectorOperator_VALIDATE_NON_NULL :: ZendeskConnectorOperator
+pattern ZendeskConnectorOperator_VALIDATE_NON_NULL = ZendeskConnectorOperator' "VALIDATE_NON_NULL"
+
+pattern ZendeskConnectorOperator_VALIDATE_NON_ZERO :: ZendeskConnectorOperator
+pattern ZendeskConnectorOperator_VALIDATE_NON_ZERO = ZendeskConnectorOperator' "VALIDATE_NON_ZERO"
+
+pattern ZendeskConnectorOperator_VALIDATE_NUMERIC :: ZendeskConnectorOperator
+pattern ZendeskConnectorOperator_VALIDATE_NUMERIC = ZendeskConnectorOperator' "VALIDATE_NUMERIC"
+
+{-# COMPLETE
+  ZendeskConnectorOperator_ADDITION,
+  ZendeskConnectorOperator_DIVISION,
+  ZendeskConnectorOperator_GREATER_THAN,
+  ZendeskConnectorOperator_MASK_ALL,
+  ZendeskConnectorOperator_MASK_FIRST_N,
+  ZendeskConnectorOperator_MASK_LAST_N,
+  ZendeskConnectorOperator_MULTIPLICATION,
+  ZendeskConnectorOperator_NO_OP,
+  ZendeskConnectorOperator_PROJECTION,
+  ZendeskConnectorOperator_SUBTRACTION,
+  ZendeskConnectorOperator_VALIDATE_NON_NEGATIVE,
+  ZendeskConnectorOperator_VALIDATE_NON_NULL,
+  ZendeskConnectorOperator_VALIDATE_NON_ZERO,
+  ZendeskConnectorOperator_VALIDATE_NUMERIC,
+  ZendeskConnectorOperator'
+  #-}
diff --git a/gen/Amazonka/CustomerProfiles/Types/ZendeskSourceProperties.hs b/gen/Amazonka/CustomerProfiles/Types/ZendeskSourceProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/Types/ZendeskSourceProperties.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.Types.ZendeskSourceProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CustomerProfiles.Types.ZendeskSourceProperties where
+
+import qualified 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 properties that are applied when using Zendesk as a flow source.
+--
+-- /See:/ 'newZendeskSourceProperties' smart constructor.
+data ZendeskSourceProperties = ZendeskSourceProperties'
+  { -- | The object specified in the Zendesk flow source.
+    object' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ZendeskSourceProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'object'', 'zendeskSourceProperties_object' - The object specified in the Zendesk flow source.
+newZendeskSourceProperties ::
+  -- | 'object''
+  Prelude.Text ->
+  ZendeskSourceProperties
+newZendeskSourceProperties pObject_ =
+  ZendeskSourceProperties' {object' = pObject_}
+
+-- | The object specified in the Zendesk flow source.
+zendeskSourceProperties_object :: Lens.Lens' ZendeskSourceProperties Prelude.Text
+zendeskSourceProperties_object = Lens.lens (\ZendeskSourceProperties' {object'} -> object') (\s@ZendeskSourceProperties' {} a -> s {object' = a} :: ZendeskSourceProperties)
+
+instance Prelude.Hashable ZendeskSourceProperties where
+  hashWithSalt _salt ZendeskSourceProperties' {..} =
+    _salt `Prelude.hashWithSalt` object'
+
+instance Prelude.NFData ZendeskSourceProperties where
+  rnf ZendeskSourceProperties' {..} =
+    Prelude.rnf object'
+
+instance Data.ToJSON ZendeskSourceProperties where
+  toJSON ZendeskSourceProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Object" Data..= object')]
+      )
diff --git a/gen/Amazonka/CustomerProfiles/UntagResource.hs b/gen/Amazonka/CustomerProfiles/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/UntagResource.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes one or more tags from the specified Amazon Connect Customer
+-- Profiles resource. In Connect Customer Profiles, domains, profile object
+-- types, and integrations can be tagged.
+module Amazonka.CustomerProfiles.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 Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The ARN of the resource from which you are removing tags.
+    resourceArn :: Prelude.Text,
+    -- | The list of tag keys to remove from the resource.
+    tagKeys :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The ARN of the resource from which you are removing tags.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The list of tag keys to remove from the resource.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'tagKeys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ pTagKeys_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Lens.coerced Lens.# pTagKeys_
+    }
+
+-- | The ARN of the resource from which you are removing tags.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The list of tag keys to remove from the resource.
+untagResource_tagKeys :: Lens.Lens' UntagResource (Prelude.NonEmpty Prelude.Text)
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CustomerProfiles/UpdateDomain.hs b/gen/Amazonka/CustomerProfiles/UpdateDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/UpdateDomain.hs
@@ -0,0 +1,438 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.UpdateDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the properties of a domain, including creating or selecting a
+-- dead letter queue or an encryption key.
+--
+-- After a domain is created, the name can’t be changed.
+--
+-- Use this API or
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_CreateDomain.html CreateDomain>
+-- to enable
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html identity resolution>:
+-- set @Matching@ to true.
+--
+-- To prevent cross-service impersonation when you call this API, see
+-- <https://docs.aws.amazon.com/connect/latest/adminguide/cross-service-confused-deputy-prevention.html Cross-service confused deputy prevention>
+-- for sample policies that you should apply.
+--
+-- To add or remove tags on an existing Domain, see
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_TagResource.html TagResource>\/<https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_UntagResource.html UntagResource>.
+module Amazonka.CustomerProfiles.UpdateDomain
+  ( -- * Creating a Request
+    UpdateDomain (..),
+    newUpdateDomain,
+
+    -- * Request Lenses
+    updateDomain_deadLetterQueueUrl,
+    updateDomain_defaultEncryptionKey,
+    updateDomain_defaultExpirationDays,
+    updateDomain_matching,
+    updateDomain_tags,
+    updateDomain_domainName,
+
+    -- * Destructuring the Response
+    UpdateDomainResponse (..),
+    newUpdateDomainResponse,
+
+    -- * Response Lenses
+    updateDomainResponse_deadLetterQueueUrl,
+    updateDomainResponse_defaultEncryptionKey,
+    updateDomainResponse_defaultExpirationDays,
+    updateDomainResponse_matching,
+    updateDomainResponse_tags,
+    updateDomainResponse_httpStatus,
+    updateDomainResponse_domainName,
+    updateDomainResponse_createdAt,
+    updateDomainResponse_lastUpdatedAt,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateDomain' smart constructor.
+data UpdateDomain = UpdateDomain'
+  { -- | The URL of the SQS dead letter queue, which is used for reporting errors
+    -- associated with ingesting data from third party applications. If
+    -- specified as an empty string, it will clear any existing value. You must
+    -- set up a policy on the DeadLetterQueue for the SendMessage operation to
+    -- enable Amazon Connect Customer Profiles to send messages to the
+    -- DeadLetterQueue.
+    deadLetterQueueUrl :: Prelude.Maybe Prelude.Text,
+    -- | The default encryption key, which is an AWS managed key, is used when no
+    -- specific type of encryption key is specified. It is used to encrypt all
+    -- data before it is placed in permanent or semi-permanent storage. If
+    -- specified as an empty string, it will clear any existing value.
+    defaultEncryptionKey :: Prelude.Maybe Prelude.Text,
+    -- | The default number of days until the data within the domain expires.
+    defaultExpirationDays :: Prelude.Maybe Prelude.Natural,
+    -- | The process of matching duplicate profiles. If @Matching@ = @true@,
+    -- Amazon Connect Customer Profiles starts a weekly batch process called
+    -- Identity Resolution Job. If you do not specify a date and time for
+    -- Identity Resolution Job to run, by default it runs every Saturday at
+    -- 12AM UTC to detect duplicate profiles in your domains.
+    --
+    -- After the Identity Resolution Job completes, use the
+    -- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html GetMatches>
+    -- API to return and review the results. Or, if you have configured
+    -- @ExportingConfig@ in the @MatchingRequest@, you can download the results
+    -- from S3.
+    matching :: Prelude.Maybe MatchingRequest,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deadLetterQueueUrl', 'updateDomain_deadLetterQueueUrl' - The URL of the SQS dead letter queue, which is used for reporting errors
+-- associated with ingesting data from third party applications. If
+-- specified as an empty string, it will clear any existing value. You must
+-- set up a policy on the DeadLetterQueue for the SendMessage operation to
+-- enable Amazon Connect Customer Profiles to send messages to the
+-- DeadLetterQueue.
+--
+-- 'defaultEncryptionKey', 'updateDomain_defaultEncryptionKey' - The default encryption key, which is an AWS managed key, is used when no
+-- specific type of encryption key is specified. It is used to encrypt all
+-- data before it is placed in permanent or semi-permanent storage. If
+-- specified as an empty string, it will clear any existing value.
+--
+-- 'defaultExpirationDays', 'updateDomain_defaultExpirationDays' - The default number of days until the data within the domain expires.
+--
+-- 'matching', 'updateDomain_matching' - The process of matching duplicate profiles. If @Matching@ = @true@,
+-- Amazon Connect Customer Profiles starts a weekly batch process called
+-- Identity Resolution Job. If you do not specify a date and time for
+-- Identity Resolution Job to run, by default it runs every Saturday at
+-- 12AM UTC to detect duplicate profiles in your domains.
+--
+-- After the Identity Resolution Job completes, use the
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html GetMatches>
+-- API to return and review the results. Or, if you have configured
+-- @ExportingConfig@ in the @MatchingRequest@, you can download the results
+-- from S3.
+--
+-- 'tags', 'updateDomain_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'domainName', 'updateDomain_domainName' - The unique name of the domain.
+newUpdateDomain ::
+  -- | 'domainName'
+  Prelude.Text ->
+  UpdateDomain
+newUpdateDomain pDomainName_ =
+  UpdateDomain'
+    { deadLetterQueueUrl = Prelude.Nothing,
+      defaultEncryptionKey = Prelude.Nothing,
+      defaultExpirationDays = Prelude.Nothing,
+      matching = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      domainName = pDomainName_
+    }
+
+-- | The URL of the SQS dead letter queue, which is used for reporting errors
+-- associated with ingesting data from third party applications. If
+-- specified as an empty string, it will clear any existing value. You must
+-- set up a policy on the DeadLetterQueue for the SendMessage operation to
+-- enable Amazon Connect Customer Profiles to send messages to the
+-- DeadLetterQueue.
+updateDomain_deadLetterQueueUrl :: Lens.Lens' UpdateDomain (Prelude.Maybe Prelude.Text)
+updateDomain_deadLetterQueueUrl = Lens.lens (\UpdateDomain' {deadLetterQueueUrl} -> deadLetterQueueUrl) (\s@UpdateDomain' {} a -> s {deadLetterQueueUrl = a} :: UpdateDomain)
+
+-- | The default encryption key, which is an AWS managed key, is used when no
+-- specific type of encryption key is specified. It is used to encrypt all
+-- data before it is placed in permanent or semi-permanent storage. If
+-- specified as an empty string, it will clear any existing value.
+updateDomain_defaultEncryptionKey :: Lens.Lens' UpdateDomain (Prelude.Maybe Prelude.Text)
+updateDomain_defaultEncryptionKey = Lens.lens (\UpdateDomain' {defaultEncryptionKey} -> defaultEncryptionKey) (\s@UpdateDomain' {} a -> s {defaultEncryptionKey = a} :: UpdateDomain)
+
+-- | The default number of days until the data within the domain expires.
+updateDomain_defaultExpirationDays :: Lens.Lens' UpdateDomain (Prelude.Maybe Prelude.Natural)
+updateDomain_defaultExpirationDays = Lens.lens (\UpdateDomain' {defaultExpirationDays} -> defaultExpirationDays) (\s@UpdateDomain' {} a -> s {defaultExpirationDays = a} :: UpdateDomain)
+
+-- | The process of matching duplicate profiles. If @Matching@ = @true@,
+-- Amazon Connect Customer Profiles starts a weekly batch process called
+-- Identity Resolution Job. If you do not specify a date and time for
+-- Identity Resolution Job to run, by default it runs every Saturday at
+-- 12AM UTC to detect duplicate profiles in your domains.
+--
+-- After the Identity Resolution Job completes, use the
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html GetMatches>
+-- API to return and review the results. Or, if you have configured
+-- @ExportingConfig@ in the @MatchingRequest@, you can download the results
+-- from S3.
+updateDomain_matching :: Lens.Lens' UpdateDomain (Prelude.Maybe MatchingRequest)
+updateDomain_matching = Lens.lens (\UpdateDomain' {matching} -> matching) (\s@UpdateDomain' {} a -> s {matching = a} :: UpdateDomain)
+
+-- | The tags used to organize, track, or control access for this resource.
+updateDomain_tags :: Lens.Lens' UpdateDomain (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateDomain_tags = Lens.lens (\UpdateDomain' {tags} -> tags) (\s@UpdateDomain' {} a -> s {tags = a} :: UpdateDomain) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique name of the domain.
+updateDomain_domainName :: Lens.Lens' UpdateDomain Prelude.Text
+updateDomain_domainName = Lens.lens (\UpdateDomain' {domainName} -> domainName) (\s@UpdateDomain' {} a -> s {domainName = a} :: UpdateDomain)
+
+instance Core.AWSRequest UpdateDomain where
+  type AWSResponse UpdateDomain = UpdateDomainResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateDomainResponse'
+            Prelude.<$> (x Data..?> "DeadLetterQueueUrl")
+            Prelude.<*> (x Data..?> "DefaultEncryptionKey")
+            Prelude.<*> (x Data..?> "DefaultExpirationDays")
+            Prelude.<*> (x Data..?> "Matching")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "DomainName")
+            Prelude.<*> (x Data..:> "CreatedAt")
+            Prelude.<*> (x Data..:> "LastUpdatedAt")
+      )
+
+instance Prelude.Hashable UpdateDomain where
+  hashWithSalt _salt UpdateDomain' {..} =
+    _salt
+      `Prelude.hashWithSalt` deadLetterQueueUrl
+      `Prelude.hashWithSalt` defaultEncryptionKey
+      `Prelude.hashWithSalt` defaultExpirationDays
+      `Prelude.hashWithSalt` matching
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData UpdateDomain where
+  rnf UpdateDomain' {..} =
+    Prelude.rnf deadLetterQueueUrl
+      `Prelude.seq` Prelude.rnf defaultEncryptionKey
+      `Prelude.seq` Prelude.rnf defaultExpirationDays
+      `Prelude.seq` Prelude.rnf matching
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders UpdateDomain where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDomain where
+  toJSON UpdateDomain' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DeadLetterQueueUrl" Data..=)
+              Prelude.<$> deadLetterQueueUrl,
+            ("DefaultEncryptionKey" Data..=)
+              Prelude.<$> defaultEncryptionKey,
+            ("DefaultExpirationDays" Data..=)
+              Prelude.<$> defaultExpirationDays,
+            ("Matching" Data..=) Prelude.<$> matching,
+            ("Tags" Data..=) Prelude.<$> tags
+          ]
+      )
+
+instance Data.ToPath UpdateDomain where
+  toPath UpdateDomain' {..} =
+    Prelude.mconcat ["/domains/", Data.toBS domainName]
+
+instance Data.ToQuery UpdateDomain where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDomainResponse' smart constructor.
+data UpdateDomainResponse = UpdateDomainResponse'
+  { -- | The URL of the SQS dead letter queue, which is used for reporting errors
+    -- associated with ingesting data from third party applications.
+    deadLetterQueueUrl :: Prelude.Maybe Prelude.Text,
+    -- | The default encryption key, which is an AWS managed key, is used when no
+    -- specific type of encryption key is specified. It is used to encrypt all
+    -- data before it is placed in permanent or semi-permanent storage.
+    defaultEncryptionKey :: Prelude.Maybe Prelude.Text,
+    -- | The default number of days until the data within the domain expires.
+    defaultExpirationDays :: Prelude.Maybe Prelude.Natural,
+    -- | The process of matching duplicate profiles. If @Matching@ = @true@,
+    -- Amazon Connect Customer Profiles starts a weekly batch process called
+    -- Identity Resolution Job. If you do not specify a date and time for
+    -- Identity Resolution Job to run, by default it runs every Saturday at
+    -- 12AM UTC to detect duplicate profiles in your domains.
+    --
+    -- After the Identity Resolution Job completes, use the
+    -- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html GetMatches>
+    -- API to return and review the results. Or, if you have configured
+    -- @ExportingConfig@ in the @MatchingRequest@, you can download the results
+    -- from S3.
+    matching :: Prelude.Maybe MatchingResponse,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The timestamp of when the domain was created.
+    createdAt :: Data.POSIX,
+    -- | The timestamp of when the domain was most recently edited.
+    lastUpdatedAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deadLetterQueueUrl', 'updateDomainResponse_deadLetterQueueUrl' - The URL of the SQS dead letter queue, which is used for reporting errors
+-- associated with ingesting data from third party applications.
+--
+-- 'defaultEncryptionKey', 'updateDomainResponse_defaultEncryptionKey' - The default encryption key, which is an AWS managed key, is used when no
+-- specific type of encryption key is specified. It is used to encrypt all
+-- data before it is placed in permanent or semi-permanent storage.
+--
+-- 'defaultExpirationDays', 'updateDomainResponse_defaultExpirationDays' - The default number of days until the data within the domain expires.
+--
+-- 'matching', 'updateDomainResponse_matching' - The process of matching duplicate profiles. If @Matching@ = @true@,
+-- Amazon Connect Customer Profiles starts a weekly batch process called
+-- Identity Resolution Job. If you do not specify a date and time for
+-- Identity Resolution Job to run, by default it runs every Saturday at
+-- 12AM UTC to detect duplicate profiles in your domains.
+--
+-- After the Identity Resolution Job completes, use the
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html GetMatches>
+-- API to return and review the results. Or, if you have configured
+-- @ExportingConfig@ in the @MatchingRequest@, you can download the results
+-- from S3.
+--
+-- 'tags', 'updateDomainResponse_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'httpStatus', 'updateDomainResponse_httpStatus' - The response's http status code.
+--
+-- 'domainName', 'updateDomainResponse_domainName' - The unique name of the domain.
+--
+-- 'createdAt', 'updateDomainResponse_createdAt' - The timestamp of when the domain was created.
+--
+-- 'lastUpdatedAt', 'updateDomainResponse_lastUpdatedAt' - The timestamp of when the domain was most recently edited.
+newUpdateDomainResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'lastUpdatedAt'
+  Prelude.UTCTime ->
+  UpdateDomainResponse
+newUpdateDomainResponse
+  pHttpStatus_
+  pDomainName_
+  pCreatedAt_
+  pLastUpdatedAt_ =
+    UpdateDomainResponse'
+      { deadLetterQueueUrl =
+          Prelude.Nothing,
+        defaultEncryptionKey = Prelude.Nothing,
+        defaultExpirationDays = Prelude.Nothing,
+        matching = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        domainName = pDomainName_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        lastUpdatedAt = Data._Time Lens.# pLastUpdatedAt_
+      }
+
+-- | The URL of the SQS dead letter queue, which is used for reporting errors
+-- associated with ingesting data from third party applications.
+updateDomainResponse_deadLetterQueueUrl :: Lens.Lens' UpdateDomainResponse (Prelude.Maybe Prelude.Text)
+updateDomainResponse_deadLetterQueueUrl = Lens.lens (\UpdateDomainResponse' {deadLetterQueueUrl} -> deadLetterQueueUrl) (\s@UpdateDomainResponse' {} a -> s {deadLetterQueueUrl = a} :: UpdateDomainResponse)
+
+-- | The default encryption key, which is an AWS managed key, is used when no
+-- specific type of encryption key is specified. It is used to encrypt all
+-- data before it is placed in permanent or semi-permanent storage.
+updateDomainResponse_defaultEncryptionKey :: Lens.Lens' UpdateDomainResponse (Prelude.Maybe Prelude.Text)
+updateDomainResponse_defaultEncryptionKey = Lens.lens (\UpdateDomainResponse' {defaultEncryptionKey} -> defaultEncryptionKey) (\s@UpdateDomainResponse' {} a -> s {defaultEncryptionKey = a} :: UpdateDomainResponse)
+
+-- | The default number of days until the data within the domain expires.
+updateDomainResponse_defaultExpirationDays :: Lens.Lens' UpdateDomainResponse (Prelude.Maybe Prelude.Natural)
+updateDomainResponse_defaultExpirationDays = Lens.lens (\UpdateDomainResponse' {defaultExpirationDays} -> defaultExpirationDays) (\s@UpdateDomainResponse' {} a -> s {defaultExpirationDays = a} :: UpdateDomainResponse)
+
+-- | The process of matching duplicate profiles. If @Matching@ = @true@,
+-- Amazon Connect Customer Profiles starts a weekly batch process called
+-- Identity Resolution Job. If you do not specify a date and time for
+-- Identity Resolution Job to run, by default it runs every Saturday at
+-- 12AM UTC to detect duplicate profiles in your domains.
+--
+-- After the Identity Resolution Job completes, use the
+-- <https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html GetMatches>
+-- API to return and review the results. Or, if you have configured
+-- @ExportingConfig@ in the @MatchingRequest@, you can download the results
+-- from S3.
+updateDomainResponse_matching :: Lens.Lens' UpdateDomainResponse (Prelude.Maybe MatchingResponse)
+updateDomainResponse_matching = Lens.lens (\UpdateDomainResponse' {matching} -> matching) (\s@UpdateDomainResponse' {} a -> s {matching = a} :: UpdateDomainResponse)
+
+-- | The tags used to organize, track, or control access for this resource.
+updateDomainResponse_tags :: Lens.Lens' UpdateDomainResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateDomainResponse_tags = Lens.lens (\UpdateDomainResponse' {tags} -> tags) (\s@UpdateDomainResponse' {} a -> s {tags = a} :: UpdateDomainResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+updateDomainResponse_httpStatus :: Lens.Lens' UpdateDomainResponse Prelude.Int
+updateDomainResponse_httpStatus = Lens.lens (\UpdateDomainResponse' {httpStatus} -> httpStatus) (\s@UpdateDomainResponse' {} a -> s {httpStatus = a} :: UpdateDomainResponse)
+
+-- | The unique name of the domain.
+updateDomainResponse_domainName :: Lens.Lens' UpdateDomainResponse Prelude.Text
+updateDomainResponse_domainName = Lens.lens (\UpdateDomainResponse' {domainName} -> domainName) (\s@UpdateDomainResponse' {} a -> s {domainName = a} :: UpdateDomainResponse)
+
+-- | The timestamp of when the domain was created.
+updateDomainResponse_createdAt :: Lens.Lens' UpdateDomainResponse Prelude.UTCTime
+updateDomainResponse_createdAt = Lens.lens (\UpdateDomainResponse' {createdAt} -> createdAt) (\s@UpdateDomainResponse' {} a -> s {createdAt = a} :: UpdateDomainResponse) Prelude.. Data._Time
+
+-- | The timestamp of when the domain was most recently edited.
+updateDomainResponse_lastUpdatedAt :: Lens.Lens' UpdateDomainResponse Prelude.UTCTime
+updateDomainResponse_lastUpdatedAt = Lens.lens (\UpdateDomainResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@UpdateDomainResponse' {} a -> s {lastUpdatedAt = a} :: UpdateDomainResponse) Prelude.. Data._Time
+
+instance Prelude.NFData UpdateDomainResponse where
+  rnf UpdateDomainResponse' {..} =
+    Prelude.rnf deadLetterQueueUrl
+      `Prelude.seq` Prelude.rnf defaultEncryptionKey
+      `Prelude.seq` Prelude.rnf defaultExpirationDays
+      `Prelude.seq` Prelude.rnf matching
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
diff --git a/gen/Amazonka/CustomerProfiles/UpdateProfile.hs b/gen/Amazonka/CustomerProfiles/UpdateProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/UpdateProfile.hs
@@ -0,0 +1,512 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CustomerProfiles.UpdateProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the properties of a profile. The ProfileId is required for
+-- updating a customer profile.
+--
+-- When calling the UpdateProfile API, specifying an empty string value
+-- means that any existing value will be removed. Not specifying a string
+-- value means that any value already there will be kept.
+module Amazonka.CustomerProfiles.UpdateProfile
+  ( -- * Creating a Request
+    UpdateProfile (..),
+    newUpdateProfile,
+
+    -- * Request Lenses
+    updateProfile_accountNumber,
+    updateProfile_additionalInformation,
+    updateProfile_address,
+    updateProfile_attributes,
+    updateProfile_billingAddress,
+    updateProfile_birthDate,
+    updateProfile_businessEmailAddress,
+    updateProfile_businessName,
+    updateProfile_businessPhoneNumber,
+    updateProfile_emailAddress,
+    updateProfile_firstName,
+    updateProfile_gender,
+    updateProfile_genderString,
+    updateProfile_homePhoneNumber,
+    updateProfile_lastName,
+    updateProfile_mailingAddress,
+    updateProfile_middleName,
+    updateProfile_mobilePhoneNumber,
+    updateProfile_partyType,
+    updateProfile_partyTypeString,
+    updateProfile_personalEmailAddress,
+    updateProfile_phoneNumber,
+    updateProfile_shippingAddress,
+    updateProfile_domainName,
+    updateProfile_profileId,
+
+    -- * Destructuring the Response
+    UpdateProfileResponse (..),
+    newUpdateProfileResponse,
+
+    -- * Response Lenses
+    updateProfileResponse_httpStatus,
+    updateProfileResponse_profileId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateProfile' smart constructor.
+data UpdateProfile = UpdateProfile'
+  { -- | A unique account number that you have given to the customer.
+    accountNumber :: Prelude.Maybe Prelude.Text,
+    -- | Any additional information relevant to the customer’s profile.
+    additionalInformation :: Prelude.Maybe Prelude.Text,
+    -- | A generic address associated with the customer that is not mailing,
+    -- shipping, or billing.
+    address :: Prelude.Maybe UpdateAddress,
+    -- | A key value pair of attributes of a customer profile.
+    attributes :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The customer’s billing address.
+    billingAddress :: Prelude.Maybe UpdateAddress,
+    -- | The customer’s birth date.
+    birthDate :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s business email address.
+    businessEmailAddress :: Prelude.Maybe Prelude.Text,
+    -- | The name of the customer’s business.
+    businessName :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s business phone number.
+    businessPhoneNumber :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s email address, which has not been specified as a personal
+    -- or business address.
+    emailAddress :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s first name.
+    firstName :: Prelude.Maybe Prelude.Text,
+    -- | The gender with which the customer identifies.
+    gender :: Prelude.Maybe Gender,
+    -- | An alternative to @Gender@ which accepts any string as input.
+    genderString :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s home phone number.
+    homePhoneNumber :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s last name.
+    lastName :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s mailing address.
+    mailingAddress :: Prelude.Maybe UpdateAddress,
+    -- | The customer’s middle name.
+    middleName :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s mobile phone number.
+    mobilePhoneNumber :: Prelude.Maybe Prelude.Text,
+    -- | The type of profile used to describe the customer.
+    partyType :: Prelude.Maybe PartyType,
+    -- | An alternative to @PartyType@ which accepts any string as input.
+    partyTypeString :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s personal email address.
+    personalEmailAddress :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s phone number, which has not been specified as a mobile,
+    -- home, or business number.
+    phoneNumber :: Prelude.Maybe Prelude.Text,
+    -- | The customer’s shipping address.
+    shippingAddress :: Prelude.Maybe UpdateAddress,
+    -- | The unique name of the domain.
+    domainName :: Prelude.Text,
+    -- | The unique identifier of a customer profile.
+    profileId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountNumber', 'updateProfile_accountNumber' - A unique account number that you have given to the customer.
+--
+-- 'additionalInformation', 'updateProfile_additionalInformation' - Any additional information relevant to the customer’s profile.
+--
+-- 'address', 'updateProfile_address' - A generic address associated with the customer that is not mailing,
+-- shipping, or billing.
+--
+-- 'attributes', 'updateProfile_attributes' - A key value pair of attributes of a customer profile.
+--
+-- 'billingAddress', 'updateProfile_billingAddress' - The customer’s billing address.
+--
+-- 'birthDate', 'updateProfile_birthDate' - The customer’s birth date.
+--
+-- 'businessEmailAddress', 'updateProfile_businessEmailAddress' - The customer’s business email address.
+--
+-- 'businessName', 'updateProfile_businessName' - The name of the customer’s business.
+--
+-- 'businessPhoneNumber', 'updateProfile_businessPhoneNumber' - The customer’s business phone number.
+--
+-- 'emailAddress', 'updateProfile_emailAddress' - The customer’s email address, which has not been specified as a personal
+-- or business address.
+--
+-- 'firstName', 'updateProfile_firstName' - The customer’s first name.
+--
+-- 'gender', 'updateProfile_gender' - The gender with which the customer identifies.
+--
+-- 'genderString', 'updateProfile_genderString' - An alternative to @Gender@ which accepts any string as input.
+--
+-- 'homePhoneNumber', 'updateProfile_homePhoneNumber' - The customer’s home phone number.
+--
+-- 'lastName', 'updateProfile_lastName' - The customer’s last name.
+--
+-- 'mailingAddress', 'updateProfile_mailingAddress' - The customer’s mailing address.
+--
+-- 'middleName', 'updateProfile_middleName' - The customer’s middle name.
+--
+-- 'mobilePhoneNumber', 'updateProfile_mobilePhoneNumber' - The customer’s mobile phone number.
+--
+-- 'partyType', 'updateProfile_partyType' - The type of profile used to describe the customer.
+--
+-- 'partyTypeString', 'updateProfile_partyTypeString' - An alternative to @PartyType@ which accepts any string as input.
+--
+-- 'personalEmailAddress', 'updateProfile_personalEmailAddress' - The customer’s personal email address.
+--
+-- 'phoneNumber', 'updateProfile_phoneNumber' - The customer’s phone number, which has not been specified as a mobile,
+-- home, or business number.
+--
+-- 'shippingAddress', 'updateProfile_shippingAddress' - The customer’s shipping address.
+--
+-- 'domainName', 'updateProfile_domainName' - The unique name of the domain.
+--
+-- 'profileId', 'updateProfile_profileId' - The unique identifier of a customer profile.
+newUpdateProfile ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'profileId'
+  Prelude.Text ->
+  UpdateProfile
+newUpdateProfile pDomainName_ pProfileId_ =
+  UpdateProfile'
+    { accountNumber = Prelude.Nothing,
+      additionalInformation = Prelude.Nothing,
+      address = Prelude.Nothing,
+      attributes = Prelude.Nothing,
+      billingAddress = Prelude.Nothing,
+      birthDate = Prelude.Nothing,
+      businessEmailAddress = Prelude.Nothing,
+      businessName = Prelude.Nothing,
+      businessPhoneNumber = Prelude.Nothing,
+      emailAddress = Prelude.Nothing,
+      firstName = Prelude.Nothing,
+      gender = Prelude.Nothing,
+      genderString = Prelude.Nothing,
+      homePhoneNumber = Prelude.Nothing,
+      lastName = Prelude.Nothing,
+      mailingAddress = Prelude.Nothing,
+      middleName = Prelude.Nothing,
+      mobilePhoneNumber = Prelude.Nothing,
+      partyType = Prelude.Nothing,
+      partyTypeString = Prelude.Nothing,
+      personalEmailAddress = Prelude.Nothing,
+      phoneNumber = Prelude.Nothing,
+      shippingAddress = Prelude.Nothing,
+      domainName = pDomainName_,
+      profileId = pProfileId_
+    }
+
+-- | A unique account number that you have given to the customer.
+updateProfile_accountNumber :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_accountNumber = Lens.lens (\UpdateProfile' {accountNumber} -> accountNumber) (\s@UpdateProfile' {} a -> s {accountNumber = a} :: UpdateProfile)
+
+-- | Any additional information relevant to the customer’s profile.
+updateProfile_additionalInformation :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_additionalInformation = Lens.lens (\UpdateProfile' {additionalInformation} -> additionalInformation) (\s@UpdateProfile' {} a -> s {additionalInformation = a} :: UpdateProfile)
+
+-- | A generic address associated with the customer that is not mailing,
+-- shipping, or billing.
+updateProfile_address :: Lens.Lens' UpdateProfile (Prelude.Maybe UpdateAddress)
+updateProfile_address = Lens.lens (\UpdateProfile' {address} -> address) (\s@UpdateProfile' {} a -> s {address = a} :: UpdateProfile)
+
+-- | A key value pair of attributes of a customer profile.
+updateProfile_attributes :: Lens.Lens' UpdateProfile (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateProfile_attributes = Lens.lens (\UpdateProfile' {attributes} -> attributes) (\s@UpdateProfile' {} a -> s {attributes = a} :: UpdateProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The customer’s billing address.
+updateProfile_billingAddress :: Lens.Lens' UpdateProfile (Prelude.Maybe UpdateAddress)
+updateProfile_billingAddress = Lens.lens (\UpdateProfile' {billingAddress} -> billingAddress) (\s@UpdateProfile' {} a -> s {billingAddress = a} :: UpdateProfile)
+
+-- | The customer’s birth date.
+updateProfile_birthDate :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_birthDate = Lens.lens (\UpdateProfile' {birthDate} -> birthDate) (\s@UpdateProfile' {} a -> s {birthDate = a} :: UpdateProfile)
+
+-- | The customer’s business email address.
+updateProfile_businessEmailAddress :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_businessEmailAddress = Lens.lens (\UpdateProfile' {businessEmailAddress} -> businessEmailAddress) (\s@UpdateProfile' {} a -> s {businessEmailAddress = a} :: UpdateProfile)
+
+-- | The name of the customer’s business.
+updateProfile_businessName :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_businessName = Lens.lens (\UpdateProfile' {businessName} -> businessName) (\s@UpdateProfile' {} a -> s {businessName = a} :: UpdateProfile)
+
+-- | The customer’s business phone number.
+updateProfile_businessPhoneNumber :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_businessPhoneNumber = Lens.lens (\UpdateProfile' {businessPhoneNumber} -> businessPhoneNumber) (\s@UpdateProfile' {} a -> s {businessPhoneNumber = a} :: UpdateProfile)
+
+-- | The customer’s email address, which has not been specified as a personal
+-- or business address.
+updateProfile_emailAddress :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_emailAddress = Lens.lens (\UpdateProfile' {emailAddress} -> emailAddress) (\s@UpdateProfile' {} a -> s {emailAddress = a} :: UpdateProfile)
+
+-- | The customer’s first name.
+updateProfile_firstName :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_firstName = Lens.lens (\UpdateProfile' {firstName} -> firstName) (\s@UpdateProfile' {} a -> s {firstName = a} :: UpdateProfile)
+
+-- | The gender with which the customer identifies.
+updateProfile_gender :: Lens.Lens' UpdateProfile (Prelude.Maybe Gender)
+updateProfile_gender = Lens.lens (\UpdateProfile' {gender} -> gender) (\s@UpdateProfile' {} a -> s {gender = a} :: UpdateProfile)
+
+-- | An alternative to @Gender@ which accepts any string as input.
+updateProfile_genderString :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_genderString = Lens.lens (\UpdateProfile' {genderString} -> genderString) (\s@UpdateProfile' {} a -> s {genderString = a} :: UpdateProfile)
+
+-- | The customer’s home phone number.
+updateProfile_homePhoneNumber :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_homePhoneNumber = Lens.lens (\UpdateProfile' {homePhoneNumber} -> homePhoneNumber) (\s@UpdateProfile' {} a -> s {homePhoneNumber = a} :: UpdateProfile)
+
+-- | The customer’s last name.
+updateProfile_lastName :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_lastName = Lens.lens (\UpdateProfile' {lastName} -> lastName) (\s@UpdateProfile' {} a -> s {lastName = a} :: UpdateProfile)
+
+-- | The customer’s mailing address.
+updateProfile_mailingAddress :: Lens.Lens' UpdateProfile (Prelude.Maybe UpdateAddress)
+updateProfile_mailingAddress = Lens.lens (\UpdateProfile' {mailingAddress} -> mailingAddress) (\s@UpdateProfile' {} a -> s {mailingAddress = a} :: UpdateProfile)
+
+-- | The customer’s middle name.
+updateProfile_middleName :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_middleName = Lens.lens (\UpdateProfile' {middleName} -> middleName) (\s@UpdateProfile' {} a -> s {middleName = a} :: UpdateProfile)
+
+-- | The customer’s mobile phone number.
+updateProfile_mobilePhoneNumber :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_mobilePhoneNumber = Lens.lens (\UpdateProfile' {mobilePhoneNumber} -> mobilePhoneNumber) (\s@UpdateProfile' {} a -> s {mobilePhoneNumber = a} :: UpdateProfile)
+
+-- | The type of profile used to describe the customer.
+updateProfile_partyType :: Lens.Lens' UpdateProfile (Prelude.Maybe PartyType)
+updateProfile_partyType = Lens.lens (\UpdateProfile' {partyType} -> partyType) (\s@UpdateProfile' {} a -> s {partyType = a} :: UpdateProfile)
+
+-- | An alternative to @PartyType@ which accepts any string as input.
+updateProfile_partyTypeString :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_partyTypeString = Lens.lens (\UpdateProfile' {partyTypeString} -> partyTypeString) (\s@UpdateProfile' {} a -> s {partyTypeString = a} :: UpdateProfile)
+
+-- | The customer’s personal email address.
+updateProfile_personalEmailAddress :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_personalEmailAddress = Lens.lens (\UpdateProfile' {personalEmailAddress} -> personalEmailAddress) (\s@UpdateProfile' {} a -> s {personalEmailAddress = a} :: UpdateProfile)
+
+-- | The customer’s phone number, which has not been specified as a mobile,
+-- home, or business number.
+updateProfile_phoneNumber :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_phoneNumber = Lens.lens (\UpdateProfile' {phoneNumber} -> phoneNumber) (\s@UpdateProfile' {} a -> s {phoneNumber = a} :: UpdateProfile)
+
+-- | The customer’s shipping address.
+updateProfile_shippingAddress :: Lens.Lens' UpdateProfile (Prelude.Maybe UpdateAddress)
+updateProfile_shippingAddress = Lens.lens (\UpdateProfile' {shippingAddress} -> shippingAddress) (\s@UpdateProfile' {} a -> s {shippingAddress = a} :: UpdateProfile)
+
+-- | The unique name of the domain.
+updateProfile_domainName :: Lens.Lens' UpdateProfile Prelude.Text
+updateProfile_domainName = Lens.lens (\UpdateProfile' {domainName} -> domainName) (\s@UpdateProfile' {} a -> s {domainName = a} :: UpdateProfile)
+
+-- | The unique identifier of a customer profile.
+updateProfile_profileId :: Lens.Lens' UpdateProfile Prelude.Text
+updateProfile_profileId = Lens.lens (\UpdateProfile' {profileId} -> profileId) (\s@UpdateProfile' {} a -> s {profileId = a} :: UpdateProfile)
+
+instance Core.AWSRequest UpdateProfile where
+  type
+    AWSResponse UpdateProfile =
+      UpdateProfileResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateProfileResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "ProfileId")
+      )
+
+instance Prelude.Hashable UpdateProfile where
+  hashWithSalt _salt UpdateProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountNumber
+      `Prelude.hashWithSalt` additionalInformation
+      `Prelude.hashWithSalt` address
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` billingAddress
+      `Prelude.hashWithSalt` birthDate
+      `Prelude.hashWithSalt` businessEmailAddress
+      `Prelude.hashWithSalt` businessName
+      `Prelude.hashWithSalt` businessPhoneNumber
+      `Prelude.hashWithSalt` emailAddress
+      `Prelude.hashWithSalt` firstName
+      `Prelude.hashWithSalt` gender
+      `Prelude.hashWithSalt` genderString
+      `Prelude.hashWithSalt` homePhoneNumber
+      `Prelude.hashWithSalt` lastName
+      `Prelude.hashWithSalt` mailingAddress
+      `Prelude.hashWithSalt` middleName
+      `Prelude.hashWithSalt` mobilePhoneNumber
+      `Prelude.hashWithSalt` partyType
+      `Prelude.hashWithSalt` partyTypeString
+      `Prelude.hashWithSalt` personalEmailAddress
+      `Prelude.hashWithSalt` phoneNumber
+      `Prelude.hashWithSalt` shippingAddress
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` profileId
+
+instance Prelude.NFData UpdateProfile where
+  rnf UpdateProfile' {..} =
+    Prelude.rnf accountNumber
+      `Prelude.seq` Prelude.rnf additionalInformation
+      `Prelude.seq` Prelude.rnf address
+      `Prelude.seq` Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf billingAddress
+      `Prelude.seq` Prelude.rnf birthDate
+      `Prelude.seq` Prelude.rnf businessEmailAddress
+      `Prelude.seq` Prelude.rnf businessName
+      `Prelude.seq` Prelude.rnf businessPhoneNumber
+      `Prelude.seq` Prelude.rnf emailAddress
+      `Prelude.seq` Prelude.rnf firstName
+      `Prelude.seq` Prelude.rnf gender
+      `Prelude.seq` Prelude.rnf genderString
+      `Prelude.seq` Prelude.rnf homePhoneNumber
+      `Prelude.seq` Prelude.rnf lastName
+      `Prelude.seq` Prelude.rnf mailingAddress
+      `Prelude.seq` Prelude.rnf middleName
+      `Prelude.seq` Prelude.rnf mobilePhoneNumber
+      `Prelude.seq` Prelude.rnf partyType
+      `Prelude.seq` Prelude.rnf partyTypeString
+      `Prelude.seq` Prelude.rnf
+        personalEmailAddress
+      `Prelude.seq` Prelude.rnf phoneNumber
+      `Prelude.seq` Prelude.rnf
+        shippingAddress
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf
+        profileId
+
+instance Data.ToHeaders UpdateProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateProfile where
+  toJSON UpdateProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccountNumber" Data..=) Prelude.<$> accountNumber,
+            ("AdditionalInformation" Data..=)
+              Prelude.<$> additionalInformation,
+            ("Address" Data..=) Prelude.<$> address,
+            ("Attributes" Data..=) Prelude.<$> attributes,
+            ("BillingAddress" Data..=)
+              Prelude.<$> billingAddress,
+            ("BirthDate" Data..=) Prelude.<$> birthDate,
+            ("BusinessEmailAddress" Data..=)
+              Prelude.<$> businessEmailAddress,
+            ("BusinessName" Data..=) Prelude.<$> businessName,
+            ("BusinessPhoneNumber" Data..=)
+              Prelude.<$> businessPhoneNumber,
+            ("EmailAddress" Data..=) Prelude.<$> emailAddress,
+            ("FirstName" Data..=) Prelude.<$> firstName,
+            ("Gender" Data..=) Prelude.<$> gender,
+            ("GenderString" Data..=) Prelude.<$> genderString,
+            ("HomePhoneNumber" Data..=)
+              Prelude.<$> homePhoneNumber,
+            ("LastName" Data..=) Prelude.<$> lastName,
+            ("MailingAddress" Data..=)
+              Prelude.<$> mailingAddress,
+            ("MiddleName" Data..=) Prelude.<$> middleName,
+            ("MobilePhoneNumber" Data..=)
+              Prelude.<$> mobilePhoneNumber,
+            ("PartyType" Data..=) Prelude.<$> partyType,
+            ("PartyTypeString" Data..=)
+              Prelude.<$> partyTypeString,
+            ("PersonalEmailAddress" Data..=)
+              Prelude.<$> personalEmailAddress,
+            ("PhoneNumber" Data..=) Prelude.<$> phoneNumber,
+            ("ShippingAddress" Data..=)
+              Prelude.<$> shippingAddress,
+            Prelude.Just ("ProfileId" Data..= profileId)
+          ]
+      )
+
+instance Data.ToPath UpdateProfile where
+  toPath UpdateProfile' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainName, "/profiles"]
+
+instance Data.ToQuery UpdateProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateProfileResponse' smart constructor.
+data UpdateProfileResponse = UpdateProfileResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The unique identifier of a customer profile.
+    profileId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateProfileResponse_httpStatus' - The response's http status code.
+--
+-- 'profileId', 'updateProfileResponse_profileId' - The unique identifier of a customer profile.
+newUpdateProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'profileId'
+  Prelude.Text ->
+  UpdateProfileResponse
+newUpdateProfileResponse pHttpStatus_ pProfileId_ =
+  UpdateProfileResponse'
+    { httpStatus = pHttpStatus_,
+      profileId = pProfileId_
+    }
+
+-- | The response's http status code.
+updateProfileResponse_httpStatus :: Lens.Lens' UpdateProfileResponse Prelude.Int
+updateProfileResponse_httpStatus = Lens.lens (\UpdateProfileResponse' {httpStatus} -> httpStatus) (\s@UpdateProfileResponse' {} a -> s {httpStatus = a} :: UpdateProfileResponse)
+
+-- | The unique identifier of a customer profile.
+updateProfileResponse_profileId :: Lens.Lens' UpdateProfileResponse Prelude.Text
+updateProfileResponse_profileId = Lens.lens (\UpdateProfileResponse' {profileId} -> profileId) (\s@UpdateProfileResponse' {} a -> s {profileId = a} :: UpdateProfileResponse)
+
+instance Prelude.NFData UpdateProfileResponse where
+  rnf UpdateProfileResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf profileId
diff --git a/gen/Amazonka/CustomerProfiles/Waiters.hs b/gen/Amazonka/CustomerProfiles/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CustomerProfiles/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.CustomerProfiles.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.CustomerProfiles.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.CustomerProfiles.Lens
+import Amazonka.CustomerProfiles.Types
+import qualified Amazonka.Data as Data
+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.CustomerProfiles
+import Test.Amazonka.CustomerProfiles.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "CustomerProfiles"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/CustomerProfiles.hs b/test/Test/Amazonka/CustomerProfiles.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/CustomerProfiles.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.CustomerProfiles
+-- Copyright   : (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.CustomerProfiles
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/CustomerProfiles/Internal.hs b/test/Test/Amazonka/CustomerProfiles/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/CustomerProfiles/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.CustomerProfiles.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.CustomerProfiles.Internal where
diff --git a/test/Test/Amazonka/Gen/CustomerProfiles.hs b/test/Test/Amazonka/Gen/CustomerProfiles.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/CustomerProfiles.hs
@@ -0,0 +1,798 @@
+{-# 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.CustomerProfiles
+-- Copyright   : (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.CustomerProfiles where
+
+import Amazonka.CustomerProfiles
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.CustomerProfiles.Internal
+import Test.Amazonka.Fixture
+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"
+--         [ requestAddProfileKey $
+--             newAddProfileKey
+--
+--         , requestCreateDomain $
+--             newCreateDomain
+--
+--         , requestCreateIntegrationWorkflow $
+--             newCreateIntegrationWorkflow
+--
+--         , requestCreateProfile $
+--             newCreateProfile
+--
+--         , requestDeleteDomain $
+--             newDeleteDomain
+--
+--         , requestDeleteIntegration $
+--             newDeleteIntegration
+--
+--         , requestDeleteProfile $
+--             newDeleteProfile
+--
+--         , requestDeleteProfileKey $
+--             newDeleteProfileKey
+--
+--         , requestDeleteProfileObject $
+--             newDeleteProfileObject
+--
+--         , requestDeleteProfileObjectType $
+--             newDeleteProfileObjectType
+--
+--         , requestDeleteWorkflow $
+--             newDeleteWorkflow
+--
+--         , requestGetAutoMergingPreview $
+--             newGetAutoMergingPreview
+--
+--         , requestGetDomain $
+--             newGetDomain
+--
+--         , requestGetIdentityResolutionJob $
+--             newGetIdentityResolutionJob
+--
+--         , requestGetIntegration $
+--             newGetIntegration
+--
+--         , requestGetMatches $
+--             newGetMatches
+--
+--         , requestGetProfileObjectType $
+--             newGetProfileObjectType
+--
+--         , requestGetProfileObjectTypeTemplate $
+--             newGetProfileObjectTypeTemplate
+--
+--         , requestGetWorkflow $
+--             newGetWorkflow
+--
+--         , requestGetWorkflowSteps $
+--             newGetWorkflowSteps
+--
+--         , requestListAccountIntegrations $
+--             newListAccountIntegrations
+--
+--         , requestListDomains $
+--             newListDomains
+--
+--         , requestListIdentityResolutionJobs $
+--             newListIdentityResolutionJobs
+--
+--         , requestListIntegrations $
+--             newListIntegrations
+--
+--         , requestListProfileObjectTypeTemplates $
+--             newListProfileObjectTypeTemplates
+--
+--         , requestListProfileObjectTypes $
+--             newListProfileObjectTypes
+--
+--         , requestListProfileObjects $
+--             newListProfileObjects
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestListWorkflows $
+--             newListWorkflows
+--
+--         , requestMergeProfiles $
+--             newMergeProfiles
+--
+--         , requestPutIntegration $
+--             newPutIntegration
+--
+--         , requestPutProfileObject $
+--             newPutProfileObject
+--
+--         , requestPutProfileObjectType $
+--             newPutProfileObjectType
+--
+--         , requestSearchProfiles $
+--             newSearchProfiles
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateDomain $
+--             newUpdateDomain
+--
+--         , requestUpdateProfile $
+--             newUpdateProfile
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAddProfileKey $
+--             newAddProfileKeyResponse
+--
+--         , responseCreateDomain $
+--             newCreateDomainResponse
+--
+--         , responseCreateIntegrationWorkflow $
+--             newCreateIntegrationWorkflowResponse
+--
+--         , responseCreateProfile $
+--             newCreateProfileResponse
+--
+--         , responseDeleteDomain $
+--             newDeleteDomainResponse
+--
+--         , responseDeleteIntegration $
+--             newDeleteIntegrationResponse
+--
+--         , responseDeleteProfile $
+--             newDeleteProfileResponse
+--
+--         , responseDeleteProfileKey $
+--             newDeleteProfileKeyResponse
+--
+--         , responseDeleteProfileObject $
+--             newDeleteProfileObjectResponse
+--
+--         , responseDeleteProfileObjectType $
+--             newDeleteProfileObjectTypeResponse
+--
+--         , responseDeleteWorkflow $
+--             newDeleteWorkflowResponse
+--
+--         , responseGetAutoMergingPreview $
+--             newGetAutoMergingPreviewResponse
+--
+--         , responseGetDomain $
+--             newGetDomainResponse
+--
+--         , responseGetIdentityResolutionJob $
+--             newGetIdentityResolutionJobResponse
+--
+--         , responseGetIntegration $
+--             newGetIntegrationResponse
+--
+--         , responseGetMatches $
+--             newGetMatchesResponse
+--
+--         , responseGetProfileObjectType $
+--             newGetProfileObjectTypeResponse
+--
+--         , responseGetProfileObjectTypeTemplate $
+--             newGetProfileObjectTypeTemplateResponse
+--
+--         , responseGetWorkflow $
+--             newGetWorkflowResponse
+--
+--         , responseGetWorkflowSteps $
+--             newGetWorkflowStepsResponse
+--
+--         , responseListAccountIntegrations $
+--             newListAccountIntegrationsResponse
+--
+--         , responseListDomains $
+--             newListDomainsResponse
+--
+--         , responseListIdentityResolutionJobs $
+--             newListIdentityResolutionJobsResponse
+--
+--         , responseListIntegrations $
+--             newListIntegrationsResponse
+--
+--         , responseListProfileObjectTypeTemplates $
+--             newListProfileObjectTypeTemplatesResponse
+--
+--         , responseListProfileObjectTypes $
+--             newListProfileObjectTypesResponse
+--
+--         , responseListProfileObjects $
+--             newListProfileObjectsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseListWorkflows $
+--             newListWorkflowsResponse
+--
+--         , responseMergeProfiles $
+--             newMergeProfilesResponse
+--
+--         , responsePutIntegration $
+--             newPutIntegrationResponse
+--
+--         , responsePutProfileObject $
+--             newPutProfileObjectResponse
+--
+--         , responsePutProfileObjectType $
+--             newPutProfileObjectTypeResponse
+--
+--         , responseSearchProfiles $
+--             newSearchProfilesResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateDomain $
+--             newUpdateDomainResponse
+--
+--         , responseUpdateProfile $
+--             newUpdateProfileResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAddProfileKey :: AddProfileKey -> TestTree
+requestAddProfileKey =
+  req
+    "AddProfileKey"
+    "fixture/AddProfileKey.yaml"
+
+requestCreateDomain :: CreateDomain -> TestTree
+requestCreateDomain =
+  req
+    "CreateDomain"
+    "fixture/CreateDomain.yaml"
+
+requestCreateIntegrationWorkflow :: CreateIntegrationWorkflow -> TestTree
+requestCreateIntegrationWorkflow =
+  req
+    "CreateIntegrationWorkflow"
+    "fixture/CreateIntegrationWorkflow.yaml"
+
+requestCreateProfile :: CreateProfile -> TestTree
+requestCreateProfile =
+  req
+    "CreateProfile"
+    "fixture/CreateProfile.yaml"
+
+requestDeleteDomain :: DeleteDomain -> TestTree
+requestDeleteDomain =
+  req
+    "DeleteDomain"
+    "fixture/DeleteDomain.yaml"
+
+requestDeleteIntegration :: DeleteIntegration -> TestTree
+requestDeleteIntegration =
+  req
+    "DeleteIntegration"
+    "fixture/DeleteIntegration.yaml"
+
+requestDeleteProfile :: DeleteProfile -> TestTree
+requestDeleteProfile =
+  req
+    "DeleteProfile"
+    "fixture/DeleteProfile.yaml"
+
+requestDeleteProfileKey :: DeleteProfileKey -> TestTree
+requestDeleteProfileKey =
+  req
+    "DeleteProfileKey"
+    "fixture/DeleteProfileKey.yaml"
+
+requestDeleteProfileObject :: DeleteProfileObject -> TestTree
+requestDeleteProfileObject =
+  req
+    "DeleteProfileObject"
+    "fixture/DeleteProfileObject.yaml"
+
+requestDeleteProfileObjectType :: DeleteProfileObjectType -> TestTree
+requestDeleteProfileObjectType =
+  req
+    "DeleteProfileObjectType"
+    "fixture/DeleteProfileObjectType.yaml"
+
+requestDeleteWorkflow :: DeleteWorkflow -> TestTree
+requestDeleteWorkflow =
+  req
+    "DeleteWorkflow"
+    "fixture/DeleteWorkflow.yaml"
+
+requestGetAutoMergingPreview :: GetAutoMergingPreview -> TestTree
+requestGetAutoMergingPreview =
+  req
+    "GetAutoMergingPreview"
+    "fixture/GetAutoMergingPreview.yaml"
+
+requestGetDomain :: GetDomain -> TestTree
+requestGetDomain =
+  req
+    "GetDomain"
+    "fixture/GetDomain.yaml"
+
+requestGetIdentityResolutionJob :: GetIdentityResolutionJob -> TestTree
+requestGetIdentityResolutionJob =
+  req
+    "GetIdentityResolutionJob"
+    "fixture/GetIdentityResolutionJob.yaml"
+
+requestGetIntegration :: GetIntegration -> TestTree
+requestGetIntegration =
+  req
+    "GetIntegration"
+    "fixture/GetIntegration.yaml"
+
+requestGetMatches :: GetMatches -> TestTree
+requestGetMatches =
+  req
+    "GetMatches"
+    "fixture/GetMatches.yaml"
+
+requestGetProfileObjectType :: GetProfileObjectType -> TestTree
+requestGetProfileObjectType =
+  req
+    "GetProfileObjectType"
+    "fixture/GetProfileObjectType.yaml"
+
+requestGetProfileObjectTypeTemplate :: GetProfileObjectTypeTemplate -> TestTree
+requestGetProfileObjectTypeTemplate =
+  req
+    "GetProfileObjectTypeTemplate"
+    "fixture/GetProfileObjectTypeTemplate.yaml"
+
+requestGetWorkflow :: GetWorkflow -> TestTree
+requestGetWorkflow =
+  req
+    "GetWorkflow"
+    "fixture/GetWorkflow.yaml"
+
+requestGetWorkflowSteps :: GetWorkflowSteps -> TestTree
+requestGetWorkflowSteps =
+  req
+    "GetWorkflowSteps"
+    "fixture/GetWorkflowSteps.yaml"
+
+requestListAccountIntegrations :: ListAccountIntegrations -> TestTree
+requestListAccountIntegrations =
+  req
+    "ListAccountIntegrations"
+    "fixture/ListAccountIntegrations.yaml"
+
+requestListDomains :: ListDomains -> TestTree
+requestListDomains =
+  req
+    "ListDomains"
+    "fixture/ListDomains.yaml"
+
+requestListIdentityResolutionJobs :: ListIdentityResolutionJobs -> TestTree
+requestListIdentityResolutionJobs =
+  req
+    "ListIdentityResolutionJobs"
+    "fixture/ListIdentityResolutionJobs.yaml"
+
+requestListIntegrations :: ListIntegrations -> TestTree
+requestListIntegrations =
+  req
+    "ListIntegrations"
+    "fixture/ListIntegrations.yaml"
+
+requestListProfileObjectTypeTemplates :: ListProfileObjectTypeTemplates -> TestTree
+requestListProfileObjectTypeTemplates =
+  req
+    "ListProfileObjectTypeTemplates"
+    "fixture/ListProfileObjectTypeTemplates.yaml"
+
+requestListProfileObjectTypes :: ListProfileObjectTypes -> TestTree
+requestListProfileObjectTypes =
+  req
+    "ListProfileObjectTypes"
+    "fixture/ListProfileObjectTypes.yaml"
+
+requestListProfileObjects :: ListProfileObjects -> TestTree
+requestListProfileObjects =
+  req
+    "ListProfileObjects"
+    "fixture/ListProfileObjects.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestListWorkflows :: ListWorkflows -> TestTree
+requestListWorkflows =
+  req
+    "ListWorkflows"
+    "fixture/ListWorkflows.yaml"
+
+requestMergeProfiles :: MergeProfiles -> TestTree
+requestMergeProfiles =
+  req
+    "MergeProfiles"
+    "fixture/MergeProfiles.yaml"
+
+requestPutIntegration :: PutIntegration -> TestTree
+requestPutIntegration =
+  req
+    "PutIntegration"
+    "fixture/PutIntegration.yaml"
+
+requestPutProfileObject :: PutProfileObject -> TestTree
+requestPutProfileObject =
+  req
+    "PutProfileObject"
+    "fixture/PutProfileObject.yaml"
+
+requestPutProfileObjectType :: PutProfileObjectType -> TestTree
+requestPutProfileObjectType =
+  req
+    "PutProfileObjectType"
+    "fixture/PutProfileObjectType.yaml"
+
+requestSearchProfiles :: SearchProfiles -> TestTree
+requestSearchProfiles =
+  req
+    "SearchProfiles"
+    "fixture/SearchProfiles.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateDomain :: UpdateDomain -> TestTree
+requestUpdateDomain =
+  req
+    "UpdateDomain"
+    "fixture/UpdateDomain.yaml"
+
+requestUpdateProfile :: UpdateProfile -> TestTree
+requestUpdateProfile =
+  req
+    "UpdateProfile"
+    "fixture/UpdateProfile.yaml"
+
+-- Responses
+
+responseAddProfileKey :: AddProfileKeyResponse -> TestTree
+responseAddProfileKey =
+  res
+    "AddProfileKeyResponse"
+    "fixture/AddProfileKeyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AddProfileKey)
+
+responseCreateDomain :: CreateDomainResponse -> TestTree
+responseCreateDomain =
+  res
+    "CreateDomainResponse"
+    "fixture/CreateDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDomain)
+
+responseCreateIntegrationWorkflow :: CreateIntegrationWorkflowResponse -> TestTree
+responseCreateIntegrationWorkflow =
+  res
+    "CreateIntegrationWorkflowResponse"
+    "fixture/CreateIntegrationWorkflowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateIntegrationWorkflow)
+
+responseCreateProfile :: CreateProfileResponse -> TestTree
+responseCreateProfile =
+  res
+    "CreateProfileResponse"
+    "fixture/CreateProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateProfile)
+
+responseDeleteDomain :: DeleteDomainResponse -> TestTree
+responseDeleteDomain =
+  res
+    "DeleteDomainResponse"
+    "fixture/DeleteDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDomain)
+
+responseDeleteIntegration :: DeleteIntegrationResponse -> TestTree
+responseDeleteIntegration =
+  res
+    "DeleteIntegrationResponse"
+    "fixture/DeleteIntegrationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteIntegration)
+
+responseDeleteProfile :: DeleteProfileResponse -> TestTree
+responseDeleteProfile =
+  res
+    "DeleteProfileResponse"
+    "fixture/DeleteProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteProfile)
+
+responseDeleteProfileKey :: DeleteProfileKeyResponse -> TestTree
+responseDeleteProfileKey =
+  res
+    "DeleteProfileKeyResponse"
+    "fixture/DeleteProfileKeyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteProfileKey)
+
+responseDeleteProfileObject :: DeleteProfileObjectResponse -> TestTree
+responseDeleteProfileObject =
+  res
+    "DeleteProfileObjectResponse"
+    "fixture/DeleteProfileObjectResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteProfileObject)
+
+responseDeleteProfileObjectType :: DeleteProfileObjectTypeResponse -> TestTree
+responseDeleteProfileObjectType =
+  res
+    "DeleteProfileObjectTypeResponse"
+    "fixture/DeleteProfileObjectTypeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteProfileObjectType)
+
+responseDeleteWorkflow :: DeleteWorkflowResponse -> TestTree
+responseDeleteWorkflow =
+  res
+    "DeleteWorkflowResponse"
+    "fixture/DeleteWorkflowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWorkflow)
+
+responseGetAutoMergingPreview :: GetAutoMergingPreviewResponse -> TestTree
+responseGetAutoMergingPreview =
+  res
+    "GetAutoMergingPreviewResponse"
+    "fixture/GetAutoMergingPreviewResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAutoMergingPreview)
+
+responseGetDomain :: GetDomainResponse -> TestTree
+responseGetDomain =
+  res
+    "GetDomainResponse"
+    "fixture/GetDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDomain)
+
+responseGetIdentityResolutionJob :: GetIdentityResolutionJobResponse -> TestTree
+responseGetIdentityResolutionJob =
+  res
+    "GetIdentityResolutionJobResponse"
+    "fixture/GetIdentityResolutionJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetIdentityResolutionJob)
+
+responseGetIntegration :: GetIntegrationResponse -> TestTree
+responseGetIntegration =
+  res
+    "GetIntegrationResponse"
+    "fixture/GetIntegrationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetIntegration)
+
+responseGetMatches :: GetMatchesResponse -> TestTree
+responseGetMatches =
+  res
+    "GetMatchesResponse"
+    "fixture/GetMatchesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetMatches)
+
+responseGetProfileObjectType :: GetProfileObjectTypeResponse -> TestTree
+responseGetProfileObjectType =
+  res
+    "GetProfileObjectTypeResponse"
+    "fixture/GetProfileObjectTypeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetProfileObjectType)
+
+responseGetProfileObjectTypeTemplate :: GetProfileObjectTypeTemplateResponse -> TestTree
+responseGetProfileObjectTypeTemplate =
+  res
+    "GetProfileObjectTypeTemplateResponse"
+    "fixture/GetProfileObjectTypeTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetProfileObjectTypeTemplate)
+
+responseGetWorkflow :: GetWorkflowResponse -> TestTree
+responseGetWorkflow =
+  res
+    "GetWorkflowResponse"
+    "fixture/GetWorkflowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetWorkflow)
+
+responseGetWorkflowSteps :: GetWorkflowStepsResponse -> TestTree
+responseGetWorkflowSteps =
+  res
+    "GetWorkflowStepsResponse"
+    "fixture/GetWorkflowStepsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetWorkflowSteps)
+
+responseListAccountIntegrations :: ListAccountIntegrationsResponse -> TestTree
+responseListAccountIntegrations =
+  res
+    "ListAccountIntegrationsResponse"
+    "fixture/ListAccountIntegrationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAccountIntegrations)
+
+responseListDomains :: ListDomainsResponse -> TestTree
+responseListDomains =
+  res
+    "ListDomainsResponse"
+    "fixture/ListDomainsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDomains)
+
+responseListIdentityResolutionJobs :: ListIdentityResolutionJobsResponse -> TestTree
+responseListIdentityResolutionJobs =
+  res
+    "ListIdentityResolutionJobsResponse"
+    "fixture/ListIdentityResolutionJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListIdentityResolutionJobs)
+
+responseListIntegrations :: ListIntegrationsResponse -> TestTree
+responseListIntegrations =
+  res
+    "ListIntegrationsResponse"
+    "fixture/ListIntegrationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListIntegrations)
+
+responseListProfileObjectTypeTemplates :: ListProfileObjectTypeTemplatesResponse -> TestTree
+responseListProfileObjectTypeTemplates =
+  res
+    "ListProfileObjectTypeTemplatesResponse"
+    "fixture/ListProfileObjectTypeTemplatesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListProfileObjectTypeTemplates)
+
+responseListProfileObjectTypes :: ListProfileObjectTypesResponse -> TestTree
+responseListProfileObjectTypes =
+  res
+    "ListProfileObjectTypesResponse"
+    "fixture/ListProfileObjectTypesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListProfileObjectTypes)
+
+responseListProfileObjects :: ListProfileObjectsResponse -> TestTree
+responseListProfileObjects =
+  res
+    "ListProfileObjectsResponse"
+    "fixture/ListProfileObjectsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListProfileObjects)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseListWorkflows :: ListWorkflowsResponse -> TestTree
+responseListWorkflows =
+  res
+    "ListWorkflowsResponse"
+    "fixture/ListWorkflowsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWorkflows)
+
+responseMergeProfiles :: MergeProfilesResponse -> TestTree
+responseMergeProfiles =
+  res
+    "MergeProfilesResponse"
+    "fixture/MergeProfilesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy MergeProfiles)
+
+responsePutIntegration :: PutIntegrationResponse -> TestTree
+responsePutIntegration =
+  res
+    "PutIntegrationResponse"
+    "fixture/PutIntegrationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutIntegration)
+
+responsePutProfileObject :: PutProfileObjectResponse -> TestTree
+responsePutProfileObject =
+  res
+    "PutProfileObjectResponse"
+    "fixture/PutProfileObjectResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutProfileObject)
+
+responsePutProfileObjectType :: PutProfileObjectTypeResponse -> TestTree
+responsePutProfileObjectType =
+  res
+    "PutProfileObjectTypeResponse"
+    "fixture/PutProfileObjectTypeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutProfileObjectType)
+
+responseSearchProfiles :: SearchProfilesResponse -> TestTree
+responseSearchProfiles =
+  res
+    "SearchProfilesResponse"
+    "fixture/SearchProfilesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchProfiles)
+
+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)
+
+responseUpdateDomain :: UpdateDomainResponse -> TestTree
+responseUpdateDomain =
+  res
+    "UpdateDomainResponse"
+    "fixture/UpdateDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDomain)
+
+responseUpdateProfile :: UpdateProfileResponse -> TestTree
+responseUpdateProfile =
+  res
+    "UpdateProfileResponse"
+    "fixture/UpdateProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateProfile)
