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 ConnectCampaignService SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2021-01-30@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-connectcampaigns)
+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.ConnectCampaigns](http://hackage.haskell.org/package/amazonka-connectcampaigns/docs/Amazonka-ConnectCampaigns.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-connectcampaigns` 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-connectcampaigns.cabal b/amazonka-connectcampaigns.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-connectcampaigns.cabal
@@ -0,0 +1,129 @@
+cabal-version:      2.2
+name:               amazonka-connectcampaigns
+version:            2.0
+synopsis:           Amazon ConnectCampaignService 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 @2021-01-30@ 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.ConnectCampaigns.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.ConnectCampaigns" 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-connectcampaigns
+
+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.ConnectCampaigns
+    Amazonka.ConnectCampaigns.CreateCampaign
+    Amazonka.ConnectCampaigns.DeleteCampaign
+    Amazonka.ConnectCampaigns.DeleteConnectInstanceConfig
+    Amazonka.ConnectCampaigns.DeleteInstanceOnboardingJob
+    Amazonka.ConnectCampaigns.DescribeCampaign
+    Amazonka.ConnectCampaigns.GetCampaignState
+    Amazonka.ConnectCampaigns.GetCampaignStateBatch
+    Amazonka.ConnectCampaigns.GetConnectInstanceConfig
+    Amazonka.ConnectCampaigns.GetInstanceOnboardingJobStatus
+    Amazonka.ConnectCampaigns.Lens
+    Amazonka.ConnectCampaigns.ListCampaigns
+    Amazonka.ConnectCampaigns.ListTagsForResource
+    Amazonka.ConnectCampaigns.PauseCampaign
+    Amazonka.ConnectCampaigns.PutDialRequestBatch
+    Amazonka.ConnectCampaigns.ResumeCampaign
+    Amazonka.ConnectCampaigns.StartCampaign
+    Amazonka.ConnectCampaigns.StartInstanceOnboardingJob
+    Amazonka.ConnectCampaigns.StopCampaign
+    Amazonka.ConnectCampaigns.TagResource
+    Amazonka.ConnectCampaigns.Types
+    Amazonka.ConnectCampaigns.Types.AnswerMachineDetectionConfig
+    Amazonka.ConnectCampaigns.Types.Campaign
+    Amazonka.ConnectCampaigns.Types.CampaignFilters
+    Amazonka.ConnectCampaigns.Types.CampaignState
+    Amazonka.ConnectCampaigns.Types.CampaignSummary
+    Amazonka.ConnectCampaigns.Types.DialerConfig
+    Amazonka.ConnectCampaigns.Types.DialRequest
+    Amazonka.ConnectCampaigns.Types.EncryptionConfig
+    Amazonka.ConnectCampaigns.Types.EncryptionType
+    Amazonka.ConnectCampaigns.Types.FailedCampaignStateResponse
+    Amazonka.ConnectCampaigns.Types.FailedRequest
+    Amazonka.ConnectCampaigns.Types.FailureCode
+    Amazonka.ConnectCampaigns.Types.GetCampaignStateBatchFailureCode
+    Amazonka.ConnectCampaigns.Types.InstanceConfig
+    Amazonka.ConnectCampaigns.Types.InstanceIdFilter
+    Amazonka.ConnectCampaigns.Types.InstanceIdFilterOperator
+    Amazonka.ConnectCampaigns.Types.InstanceOnboardingJobFailureCode
+    Amazonka.ConnectCampaigns.Types.InstanceOnboardingJobStatus
+    Amazonka.ConnectCampaigns.Types.InstanceOnboardingJobStatusCode
+    Amazonka.ConnectCampaigns.Types.OutboundCallConfig
+    Amazonka.ConnectCampaigns.Types.PredictiveDialerConfig
+    Amazonka.ConnectCampaigns.Types.ProgressiveDialerConfig
+    Amazonka.ConnectCampaigns.Types.SuccessfulCampaignStateResponse
+    Amazonka.ConnectCampaigns.Types.SuccessfulRequest
+    Amazonka.ConnectCampaigns.UntagResource
+    Amazonka.ConnectCampaigns.UpdateCampaignDialerConfig
+    Amazonka.ConnectCampaigns.UpdateCampaignName
+    Amazonka.ConnectCampaigns.UpdateCampaignOutboundCallConfig
+    Amazonka.ConnectCampaigns.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-connectcampaigns-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.ConnectCampaigns
+    Test.Amazonka.ConnectCampaigns.Internal
+    Test.Amazonka.Gen.ConnectCampaigns
+
+  build-depends:
+    , amazonka-connectcampaigns
+    , amazonka-core              >=2.0 && <2.1
+    , amazonka-test              >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CreateCampaign.yaml b/fixture/CreateCampaign.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCampaign.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateCampaignResponse.proto b/fixture/CreateCampaignResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCampaignResponse.proto
diff --git a/fixture/DeleteCampaign.yaml b/fixture/DeleteCampaign.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCampaign.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteCampaignResponse.proto b/fixture/DeleteCampaignResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCampaignResponse.proto
diff --git a/fixture/DeleteConnectInstanceConfig.yaml b/fixture/DeleteConnectInstanceConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConnectInstanceConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteConnectInstanceConfigResponse.proto b/fixture/DeleteConnectInstanceConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConnectInstanceConfigResponse.proto
diff --git a/fixture/DeleteInstanceOnboardingJob.yaml b/fixture/DeleteInstanceOnboardingJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteInstanceOnboardingJob.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteInstanceOnboardingJobResponse.proto b/fixture/DeleteInstanceOnboardingJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteInstanceOnboardingJobResponse.proto
diff --git a/fixture/DescribeCampaign.yaml b/fixture/DescribeCampaign.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCampaign.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeCampaignResponse.proto b/fixture/DescribeCampaignResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCampaignResponse.proto
diff --git a/fixture/GetCampaignState.yaml b/fixture/GetCampaignState.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetCampaignState.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetCampaignStateBatch.yaml b/fixture/GetCampaignStateBatch.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetCampaignStateBatch.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetCampaignStateBatchResponse.proto b/fixture/GetCampaignStateBatchResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetCampaignStateBatchResponse.proto
diff --git a/fixture/GetCampaignStateResponse.proto b/fixture/GetCampaignStateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetCampaignStateResponse.proto
diff --git a/fixture/GetConnectInstanceConfig.yaml b/fixture/GetConnectInstanceConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetConnectInstanceConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetConnectInstanceConfigResponse.proto b/fixture/GetConnectInstanceConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetConnectInstanceConfigResponse.proto
diff --git a/fixture/GetInstanceOnboardingJobStatus.yaml b/fixture/GetInstanceOnboardingJobStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetInstanceOnboardingJobStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetInstanceOnboardingJobStatusResponse.proto b/fixture/GetInstanceOnboardingJobStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetInstanceOnboardingJobStatusResponse.proto
diff --git a/fixture/ListCampaigns.yaml b/fixture/ListCampaigns.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCampaigns.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListCampaignsResponse.proto b/fixture/ListCampaignsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCampaignsResponse.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/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  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/PauseCampaign.yaml b/fixture/PauseCampaign.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PauseCampaign.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PauseCampaignResponse.proto b/fixture/PauseCampaignResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PauseCampaignResponse.proto
diff --git a/fixture/PutDialRequestBatch.yaml b/fixture/PutDialRequestBatch.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutDialRequestBatch.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutDialRequestBatchResponse.proto b/fixture/PutDialRequestBatchResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutDialRequestBatchResponse.proto
diff --git a/fixture/ResumeCampaign.yaml b/fixture/ResumeCampaign.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ResumeCampaign.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ResumeCampaignResponse.proto b/fixture/ResumeCampaignResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ResumeCampaignResponse.proto
diff --git a/fixture/StartCampaign.yaml b/fixture/StartCampaign.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartCampaign.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartCampaignResponse.proto b/fixture/StartCampaignResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartCampaignResponse.proto
diff --git a/fixture/StartInstanceOnboardingJob.yaml b/fixture/StartInstanceOnboardingJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartInstanceOnboardingJob.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartInstanceOnboardingJobResponse.proto b/fixture/StartInstanceOnboardingJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartInstanceOnboardingJobResponse.proto
diff --git a/fixture/StopCampaign.yaml b/fixture/StopCampaign.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopCampaign.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StopCampaignResponse.proto b/fixture/StopCampaignResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopCampaignResponse.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/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  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/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  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/UpdateCampaignDialerConfig.yaml b/fixture/UpdateCampaignDialerConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCampaignDialerConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateCampaignDialerConfigResponse.proto b/fixture/UpdateCampaignDialerConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCampaignDialerConfigResponse.proto
diff --git a/fixture/UpdateCampaignName.yaml b/fixture/UpdateCampaignName.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCampaignName.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateCampaignNameResponse.proto b/fixture/UpdateCampaignNameResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCampaignNameResponse.proto
diff --git a/fixture/UpdateCampaignOutboundCallConfig.yaml b/fixture/UpdateCampaignOutboundCallConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCampaignOutboundCallConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/connect-campaigns/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  connect-campaigns.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateCampaignOutboundCallConfigResponse.proto b/fixture/UpdateCampaignOutboundCallConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCampaignOutboundCallConfigResponse.proto
diff --git a/gen/Amazonka/ConnectCampaigns.hs b/gen/Amazonka/ConnectCampaigns.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns.hs
@@ -0,0 +1,331 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns
+-- 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 @2021-01-30@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Provide APIs to create and manage Amazon Connect Campaigns.
+module Amazonka.ConnectCampaigns
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** InvalidCampaignStateException
+    _InvalidCampaignStateException,
+
+    -- ** InvalidStateException
+    _InvalidStateException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateCampaign
+    CreateCampaign (CreateCampaign'),
+    newCreateCampaign,
+    CreateCampaignResponse (CreateCampaignResponse'),
+    newCreateCampaignResponse,
+
+    -- ** DeleteCampaign
+    DeleteCampaign (DeleteCampaign'),
+    newDeleteCampaign,
+    DeleteCampaignResponse (DeleteCampaignResponse'),
+    newDeleteCampaignResponse,
+
+    -- ** DeleteConnectInstanceConfig
+    DeleteConnectInstanceConfig (DeleteConnectInstanceConfig'),
+    newDeleteConnectInstanceConfig,
+    DeleteConnectInstanceConfigResponse (DeleteConnectInstanceConfigResponse'),
+    newDeleteConnectInstanceConfigResponse,
+
+    -- ** DeleteInstanceOnboardingJob
+    DeleteInstanceOnboardingJob (DeleteInstanceOnboardingJob'),
+    newDeleteInstanceOnboardingJob,
+    DeleteInstanceOnboardingJobResponse (DeleteInstanceOnboardingJobResponse'),
+    newDeleteInstanceOnboardingJobResponse,
+
+    -- ** DescribeCampaign
+    DescribeCampaign (DescribeCampaign'),
+    newDescribeCampaign,
+    DescribeCampaignResponse (DescribeCampaignResponse'),
+    newDescribeCampaignResponse,
+
+    -- ** GetCampaignState
+    GetCampaignState (GetCampaignState'),
+    newGetCampaignState,
+    GetCampaignStateResponse (GetCampaignStateResponse'),
+    newGetCampaignStateResponse,
+
+    -- ** GetCampaignStateBatch
+    GetCampaignStateBatch (GetCampaignStateBatch'),
+    newGetCampaignStateBatch,
+    GetCampaignStateBatchResponse (GetCampaignStateBatchResponse'),
+    newGetCampaignStateBatchResponse,
+
+    -- ** GetConnectInstanceConfig
+    GetConnectInstanceConfig (GetConnectInstanceConfig'),
+    newGetConnectInstanceConfig,
+    GetConnectInstanceConfigResponse (GetConnectInstanceConfigResponse'),
+    newGetConnectInstanceConfigResponse,
+
+    -- ** GetInstanceOnboardingJobStatus
+    GetInstanceOnboardingJobStatus (GetInstanceOnboardingJobStatus'),
+    newGetInstanceOnboardingJobStatus,
+    GetInstanceOnboardingJobStatusResponse (GetInstanceOnboardingJobStatusResponse'),
+    newGetInstanceOnboardingJobStatusResponse,
+
+    -- ** ListCampaigns (Paginated)
+    ListCampaigns (ListCampaigns'),
+    newListCampaigns,
+    ListCampaignsResponse (ListCampaignsResponse'),
+    newListCampaignsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** PauseCampaign
+    PauseCampaign (PauseCampaign'),
+    newPauseCampaign,
+    PauseCampaignResponse (PauseCampaignResponse'),
+    newPauseCampaignResponse,
+
+    -- ** PutDialRequestBatch
+    PutDialRequestBatch (PutDialRequestBatch'),
+    newPutDialRequestBatch,
+    PutDialRequestBatchResponse (PutDialRequestBatchResponse'),
+    newPutDialRequestBatchResponse,
+
+    -- ** ResumeCampaign
+    ResumeCampaign (ResumeCampaign'),
+    newResumeCampaign,
+    ResumeCampaignResponse (ResumeCampaignResponse'),
+    newResumeCampaignResponse,
+
+    -- ** StartCampaign
+    StartCampaign (StartCampaign'),
+    newStartCampaign,
+    StartCampaignResponse (StartCampaignResponse'),
+    newStartCampaignResponse,
+
+    -- ** StartInstanceOnboardingJob
+    StartInstanceOnboardingJob (StartInstanceOnboardingJob'),
+    newStartInstanceOnboardingJob,
+    StartInstanceOnboardingJobResponse (StartInstanceOnboardingJobResponse'),
+    newStartInstanceOnboardingJobResponse,
+
+    -- ** StopCampaign
+    StopCampaign (StopCampaign'),
+    newStopCampaign,
+    StopCampaignResponse (StopCampaignResponse'),
+    newStopCampaignResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateCampaignDialerConfig
+    UpdateCampaignDialerConfig (UpdateCampaignDialerConfig'),
+    newUpdateCampaignDialerConfig,
+    UpdateCampaignDialerConfigResponse (UpdateCampaignDialerConfigResponse'),
+    newUpdateCampaignDialerConfigResponse,
+
+    -- ** UpdateCampaignName
+    UpdateCampaignName (UpdateCampaignName'),
+    newUpdateCampaignName,
+    UpdateCampaignNameResponse (UpdateCampaignNameResponse'),
+    newUpdateCampaignNameResponse,
+
+    -- ** UpdateCampaignOutboundCallConfig
+    UpdateCampaignOutboundCallConfig (UpdateCampaignOutboundCallConfig'),
+    newUpdateCampaignOutboundCallConfig,
+    UpdateCampaignOutboundCallConfigResponse (UpdateCampaignOutboundCallConfigResponse'),
+    newUpdateCampaignOutboundCallConfigResponse,
+
+    -- * Types
+
+    -- ** CampaignState
+    CampaignState (..),
+
+    -- ** EncryptionType
+    EncryptionType (..),
+
+    -- ** FailureCode
+    FailureCode (..),
+
+    -- ** GetCampaignStateBatchFailureCode
+    GetCampaignStateBatchFailureCode (..),
+
+    -- ** InstanceIdFilterOperator
+    InstanceIdFilterOperator (..),
+
+    -- ** InstanceOnboardingJobFailureCode
+    InstanceOnboardingJobFailureCode (..),
+
+    -- ** InstanceOnboardingJobStatusCode
+    InstanceOnboardingJobStatusCode (..),
+
+    -- ** AnswerMachineDetectionConfig
+    AnswerMachineDetectionConfig (AnswerMachineDetectionConfig'),
+    newAnswerMachineDetectionConfig,
+
+    -- ** Campaign
+    Campaign (Campaign'),
+    newCampaign,
+
+    -- ** CampaignFilters
+    CampaignFilters (CampaignFilters'),
+    newCampaignFilters,
+
+    -- ** CampaignSummary
+    CampaignSummary (CampaignSummary'),
+    newCampaignSummary,
+
+    -- ** DialRequest
+    DialRequest (DialRequest'),
+    newDialRequest,
+
+    -- ** DialerConfig
+    DialerConfig (DialerConfig'),
+    newDialerConfig,
+
+    -- ** EncryptionConfig
+    EncryptionConfig (EncryptionConfig'),
+    newEncryptionConfig,
+
+    -- ** FailedCampaignStateResponse
+    FailedCampaignStateResponse (FailedCampaignStateResponse'),
+    newFailedCampaignStateResponse,
+
+    -- ** FailedRequest
+    FailedRequest (FailedRequest'),
+    newFailedRequest,
+
+    -- ** InstanceConfig
+    InstanceConfig (InstanceConfig'),
+    newInstanceConfig,
+
+    -- ** InstanceIdFilter
+    InstanceIdFilter (InstanceIdFilter'),
+    newInstanceIdFilter,
+
+    -- ** InstanceOnboardingJobStatus
+    InstanceOnboardingJobStatus (InstanceOnboardingJobStatus'),
+    newInstanceOnboardingJobStatus,
+
+    -- ** OutboundCallConfig
+    OutboundCallConfig (OutboundCallConfig'),
+    newOutboundCallConfig,
+
+    -- ** PredictiveDialerConfig
+    PredictiveDialerConfig (PredictiveDialerConfig'),
+    newPredictiveDialerConfig,
+
+    -- ** ProgressiveDialerConfig
+    ProgressiveDialerConfig (ProgressiveDialerConfig'),
+    newProgressiveDialerConfig,
+
+    -- ** SuccessfulCampaignStateResponse
+    SuccessfulCampaignStateResponse (SuccessfulCampaignStateResponse'),
+    newSuccessfulCampaignStateResponse,
+
+    -- ** SuccessfulRequest
+    SuccessfulRequest (SuccessfulRequest'),
+    newSuccessfulRequest,
+  )
+where
+
+import Amazonka.ConnectCampaigns.CreateCampaign
+import Amazonka.ConnectCampaigns.DeleteCampaign
+import Amazonka.ConnectCampaigns.DeleteConnectInstanceConfig
+import Amazonka.ConnectCampaigns.DeleteInstanceOnboardingJob
+import Amazonka.ConnectCampaigns.DescribeCampaign
+import Amazonka.ConnectCampaigns.GetCampaignState
+import Amazonka.ConnectCampaigns.GetCampaignStateBatch
+import Amazonka.ConnectCampaigns.GetConnectInstanceConfig
+import Amazonka.ConnectCampaigns.GetInstanceOnboardingJobStatus
+import Amazonka.ConnectCampaigns.Lens
+import Amazonka.ConnectCampaigns.ListCampaigns
+import Amazonka.ConnectCampaigns.ListTagsForResource
+import Amazonka.ConnectCampaigns.PauseCampaign
+import Amazonka.ConnectCampaigns.PutDialRequestBatch
+import Amazonka.ConnectCampaigns.ResumeCampaign
+import Amazonka.ConnectCampaigns.StartCampaign
+import Amazonka.ConnectCampaigns.StartInstanceOnboardingJob
+import Amazonka.ConnectCampaigns.StopCampaign
+import Amazonka.ConnectCampaigns.TagResource
+import Amazonka.ConnectCampaigns.Types
+import Amazonka.ConnectCampaigns.UntagResource
+import Amazonka.ConnectCampaigns.UpdateCampaignDialerConfig
+import Amazonka.ConnectCampaigns.UpdateCampaignName
+import Amazonka.ConnectCampaigns.UpdateCampaignOutboundCallConfig
+import Amazonka.ConnectCampaigns.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 'ConnectCampaigns'.
+
+-- $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/ConnectCampaigns/CreateCampaign.hs b/gen/Amazonka/ConnectCampaigns/CreateCampaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/CreateCampaign.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.CreateCampaign
+-- 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 campaign for the specified Amazon Connect account. This API is
+-- idempotent.
+module Amazonka.ConnectCampaigns.CreateCampaign
+  ( -- * Creating a Request
+    CreateCampaign (..),
+    newCreateCampaign,
+
+    -- * Request Lenses
+    createCampaign_tags,
+    createCampaign_connectInstanceId,
+    createCampaign_dialerConfig,
+    createCampaign_name,
+    createCampaign_outboundCallConfig,
+
+    -- * Destructuring the Response
+    CreateCampaignResponse (..),
+    newCreateCampaignResponse,
+
+    -- * Response Lenses
+    createCampaignResponse_arn,
+    createCampaignResponse_id,
+    createCampaignResponse_tags,
+    createCampaignResponse_httpStatus,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | The request for Create Campaign API.
+--
+-- /See:/ 'newCreateCampaign' smart constructor.
+data CreateCampaign = CreateCampaign'
+  { tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    connectInstanceId :: Prelude.Text,
+    dialerConfig :: DialerConfig,
+    name :: Prelude.Text,
+    outboundCallConfig :: OutboundCallConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCampaign' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createCampaign_tags' - Undocumented member.
+--
+-- 'connectInstanceId', 'createCampaign_connectInstanceId' - Undocumented member.
+--
+-- 'dialerConfig', 'createCampaign_dialerConfig' - Undocumented member.
+--
+-- 'name', 'createCampaign_name' - Undocumented member.
+--
+-- 'outboundCallConfig', 'createCampaign_outboundCallConfig' - Undocumented member.
+newCreateCampaign ::
+  -- | 'connectInstanceId'
+  Prelude.Text ->
+  -- | 'dialerConfig'
+  DialerConfig ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'outboundCallConfig'
+  OutboundCallConfig ->
+  CreateCampaign
+newCreateCampaign
+  pConnectInstanceId_
+  pDialerConfig_
+  pName_
+  pOutboundCallConfig_ =
+    CreateCampaign'
+      { tags = Prelude.Nothing,
+        connectInstanceId = pConnectInstanceId_,
+        dialerConfig = pDialerConfig_,
+        name = pName_,
+        outboundCallConfig = pOutboundCallConfig_
+      }
+
+-- | Undocumented member.
+createCampaign_tags :: Lens.Lens' CreateCampaign (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createCampaign_tags = Lens.lens (\CreateCampaign' {tags} -> tags) (\s@CreateCampaign' {} a -> s {tags = a} :: CreateCampaign) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+createCampaign_connectInstanceId :: Lens.Lens' CreateCampaign Prelude.Text
+createCampaign_connectInstanceId = Lens.lens (\CreateCampaign' {connectInstanceId} -> connectInstanceId) (\s@CreateCampaign' {} a -> s {connectInstanceId = a} :: CreateCampaign)
+
+-- | Undocumented member.
+createCampaign_dialerConfig :: Lens.Lens' CreateCampaign DialerConfig
+createCampaign_dialerConfig = Lens.lens (\CreateCampaign' {dialerConfig} -> dialerConfig) (\s@CreateCampaign' {} a -> s {dialerConfig = a} :: CreateCampaign)
+
+-- | Undocumented member.
+createCampaign_name :: Lens.Lens' CreateCampaign Prelude.Text
+createCampaign_name = Lens.lens (\CreateCampaign' {name} -> name) (\s@CreateCampaign' {} a -> s {name = a} :: CreateCampaign)
+
+-- | Undocumented member.
+createCampaign_outboundCallConfig :: Lens.Lens' CreateCampaign OutboundCallConfig
+createCampaign_outboundCallConfig = Lens.lens (\CreateCampaign' {outboundCallConfig} -> outboundCallConfig) (\s@CreateCampaign' {} a -> s {outboundCallConfig = a} :: CreateCampaign)
+
+instance Core.AWSRequest CreateCampaign where
+  type
+    AWSResponse CreateCampaign =
+      CreateCampaignResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateCampaignResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateCampaign where
+  hashWithSalt _salt CreateCampaign' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` connectInstanceId
+      `Prelude.hashWithSalt` dialerConfig
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` outboundCallConfig
+
+instance Prelude.NFData CreateCampaign where
+  rnf CreateCampaign' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf connectInstanceId
+      `Prelude.seq` Prelude.rnf dialerConfig
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf outboundCallConfig
+
+instance Data.ToHeaders CreateCampaign where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateCampaign where
+  toJSON CreateCampaign' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("connectInstanceId" Data..= connectInstanceId),
+            Prelude.Just ("dialerConfig" Data..= dialerConfig),
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ("outboundCallConfig" Data..= outboundCallConfig)
+          ]
+      )
+
+instance Data.ToPath CreateCampaign where
+  toPath = Prelude.const "/campaigns"
+
+instance Data.ToQuery CreateCampaign where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The response for Create Campaign API
+--
+-- /See:/ 'newCreateCampaignResponse' smart constructor.
+data CreateCampaignResponse = CreateCampaignResponse'
+  { arn :: Prelude.Maybe Prelude.Text,
+    id :: Prelude.Maybe Prelude.Text,
+    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 'CreateCampaignResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'createCampaignResponse_arn' - Undocumented member.
+--
+-- 'id', 'createCampaignResponse_id' - Undocumented member.
+--
+-- 'tags', 'createCampaignResponse_tags' - Undocumented member.
+--
+-- 'httpStatus', 'createCampaignResponse_httpStatus' - The response's http status code.
+newCreateCampaignResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateCampaignResponse
+newCreateCampaignResponse pHttpStatus_ =
+  CreateCampaignResponse'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+createCampaignResponse_arn :: Lens.Lens' CreateCampaignResponse (Prelude.Maybe Prelude.Text)
+createCampaignResponse_arn = Lens.lens (\CreateCampaignResponse' {arn} -> arn) (\s@CreateCampaignResponse' {} a -> s {arn = a} :: CreateCampaignResponse)
+
+-- | Undocumented member.
+createCampaignResponse_id :: Lens.Lens' CreateCampaignResponse (Prelude.Maybe Prelude.Text)
+createCampaignResponse_id = Lens.lens (\CreateCampaignResponse' {id} -> id) (\s@CreateCampaignResponse' {} a -> s {id = a} :: CreateCampaignResponse)
+
+-- | Undocumented member.
+createCampaignResponse_tags :: Lens.Lens' CreateCampaignResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createCampaignResponse_tags = Lens.lens (\CreateCampaignResponse' {tags} -> tags) (\s@CreateCampaignResponse' {} a -> s {tags = a} :: CreateCampaignResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createCampaignResponse_httpStatus :: Lens.Lens' CreateCampaignResponse Prelude.Int
+createCampaignResponse_httpStatus = Lens.lens (\CreateCampaignResponse' {httpStatus} -> httpStatus) (\s@CreateCampaignResponse' {} a -> s {httpStatus = a} :: CreateCampaignResponse)
+
+instance Prelude.NFData CreateCampaignResponse where
+  rnf CreateCampaignResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ConnectCampaigns/DeleteCampaign.hs b/gen/Amazonka/ConnectCampaigns/DeleteCampaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/DeleteCampaign.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.DeleteCampaign
+-- 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 campaign from the specified Amazon Connect account.
+module Amazonka.ConnectCampaigns.DeleteCampaign
+  ( -- * Creating a Request
+    DeleteCampaign (..),
+    newDeleteCampaign,
+
+    -- * Request Lenses
+    deleteCampaign_id,
+
+    -- * Destructuring the Response
+    DeleteCampaignResponse (..),
+    newDeleteCampaignResponse,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | DeleteCampaignRequest
+--
+-- /See:/ 'newDeleteCampaign' smart constructor.
+data DeleteCampaign = DeleteCampaign'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCampaign' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'deleteCampaign_id' - Undocumented member.
+newDeleteCampaign ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteCampaign
+newDeleteCampaign pId_ = DeleteCampaign' {id = pId_}
+
+-- | Undocumented member.
+deleteCampaign_id :: Lens.Lens' DeleteCampaign Prelude.Text
+deleteCampaign_id = Lens.lens (\DeleteCampaign' {id} -> id) (\s@DeleteCampaign' {} a -> s {id = a} :: DeleteCampaign)
+
+instance Core.AWSRequest DeleteCampaign where
+  type
+    AWSResponse DeleteCampaign =
+      DeleteCampaignResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteCampaignResponse'
+
+instance Prelude.Hashable DeleteCampaign where
+  hashWithSalt _salt DeleteCampaign' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteCampaign where
+  rnf DeleteCampaign' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteCampaign where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteCampaign where
+  toPath DeleteCampaign' {..} =
+    Prelude.mconcat ["/campaigns/", Data.toBS id]
+
+instance Data.ToQuery DeleteCampaign where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteCampaignResponse' smart constructor.
+data DeleteCampaignResponse = DeleteCampaignResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCampaignResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteCampaignResponse ::
+  DeleteCampaignResponse
+newDeleteCampaignResponse = DeleteCampaignResponse'
+
+instance Prelude.NFData DeleteCampaignResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ConnectCampaigns/DeleteConnectInstanceConfig.hs b/gen/Amazonka/ConnectCampaigns/DeleteConnectInstanceConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/DeleteConnectInstanceConfig.hs
@@ -0,0 +1,136 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.DeleteConnectInstanceConfig
+-- 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 connect instance config from the specified AWS account.
+module Amazonka.ConnectCampaigns.DeleteConnectInstanceConfig
+  ( -- * Creating a Request
+    DeleteConnectInstanceConfig (..),
+    newDeleteConnectInstanceConfig,
+
+    -- * Request Lenses
+    deleteConnectInstanceConfig_connectInstanceId,
+
+    -- * Destructuring the Response
+    DeleteConnectInstanceConfigResponse (..),
+    newDeleteConnectInstanceConfigResponse,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | DeleteCampaignRequest
+--
+-- /See:/ 'newDeleteConnectInstanceConfig' smart constructor.
+data DeleteConnectInstanceConfig = DeleteConnectInstanceConfig'
+  { connectInstanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConnectInstanceConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectInstanceId', 'deleteConnectInstanceConfig_connectInstanceId' - Undocumented member.
+newDeleteConnectInstanceConfig ::
+  -- | 'connectInstanceId'
+  Prelude.Text ->
+  DeleteConnectInstanceConfig
+newDeleteConnectInstanceConfig pConnectInstanceId_ =
+  DeleteConnectInstanceConfig'
+    { connectInstanceId =
+        pConnectInstanceId_
+    }
+
+-- | Undocumented member.
+deleteConnectInstanceConfig_connectInstanceId :: Lens.Lens' DeleteConnectInstanceConfig Prelude.Text
+deleteConnectInstanceConfig_connectInstanceId = Lens.lens (\DeleteConnectInstanceConfig' {connectInstanceId} -> connectInstanceId) (\s@DeleteConnectInstanceConfig' {} a -> s {connectInstanceId = a} :: DeleteConnectInstanceConfig)
+
+instance Core.AWSRequest DeleteConnectInstanceConfig where
+  type
+    AWSResponse DeleteConnectInstanceConfig =
+      DeleteConnectInstanceConfigResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteConnectInstanceConfigResponse'
+
+instance Prelude.Hashable DeleteConnectInstanceConfig where
+  hashWithSalt _salt DeleteConnectInstanceConfig' {..} =
+    _salt `Prelude.hashWithSalt` connectInstanceId
+
+instance Prelude.NFData DeleteConnectInstanceConfig where
+  rnf DeleteConnectInstanceConfig' {..} =
+    Prelude.rnf connectInstanceId
+
+instance Data.ToHeaders DeleteConnectInstanceConfig where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteConnectInstanceConfig where
+  toPath DeleteConnectInstanceConfig' {..} =
+    Prelude.mconcat
+      [ "/connect-instance/",
+        Data.toBS connectInstanceId,
+        "/config"
+      ]
+
+instance Data.ToQuery DeleteConnectInstanceConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteConnectInstanceConfigResponse' smart constructor.
+data DeleteConnectInstanceConfigResponse = DeleteConnectInstanceConfigResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConnectInstanceConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteConnectInstanceConfigResponse ::
+  DeleteConnectInstanceConfigResponse
+newDeleteConnectInstanceConfigResponse =
+  DeleteConnectInstanceConfigResponse'
+
+instance
+  Prelude.NFData
+    DeleteConnectInstanceConfigResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/ConnectCampaigns/DeleteInstanceOnboardingJob.hs b/gen/Amazonka/ConnectCampaigns/DeleteInstanceOnboardingJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/DeleteInstanceOnboardingJob.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.DeleteInstanceOnboardingJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete the Connect Campaigns onboarding job for the specified Amazon
+-- Connect instance.
+module Amazonka.ConnectCampaigns.DeleteInstanceOnboardingJob
+  ( -- * Creating a Request
+    DeleteInstanceOnboardingJob (..),
+    newDeleteInstanceOnboardingJob,
+
+    -- * Request Lenses
+    deleteInstanceOnboardingJob_connectInstanceId,
+
+    -- * Destructuring the Response
+    DeleteInstanceOnboardingJobResponse (..),
+    newDeleteInstanceOnboardingJobResponse,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | The request for DeleteInstanceOnboardingJob API.
+--
+-- /See:/ 'newDeleteInstanceOnboardingJob' smart constructor.
+data DeleteInstanceOnboardingJob = DeleteInstanceOnboardingJob'
+  { connectInstanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteInstanceOnboardingJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectInstanceId', 'deleteInstanceOnboardingJob_connectInstanceId' - Undocumented member.
+newDeleteInstanceOnboardingJob ::
+  -- | 'connectInstanceId'
+  Prelude.Text ->
+  DeleteInstanceOnboardingJob
+newDeleteInstanceOnboardingJob pConnectInstanceId_ =
+  DeleteInstanceOnboardingJob'
+    { connectInstanceId =
+        pConnectInstanceId_
+    }
+
+-- | Undocumented member.
+deleteInstanceOnboardingJob_connectInstanceId :: Lens.Lens' DeleteInstanceOnboardingJob Prelude.Text
+deleteInstanceOnboardingJob_connectInstanceId = Lens.lens (\DeleteInstanceOnboardingJob' {connectInstanceId} -> connectInstanceId) (\s@DeleteInstanceOnboardingJob' {} a -> s {connectInstanceId = a} :: DeleteInstanceOnboardingJob)
+
+instance Core.AWSRequest DeleteInstanceOnboardingJob where
+  type
+    AWSResponse DeleteInstanceOnboardingJob =
+      DeleteInstanceOnboardingJobResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteInstanceOnboardingJobResponse'
+
+instance Prelude.Hashable DeleteInstanceOnboardingJob where
+  hashWithSalt _salt DeleteInstanceOnboardingJob' {..} =
+    _salt `Prelude.hashWithSalt` connectInstanceId
+
+instance Prelude.NFData DeleteInstanceOnboardingJob where
+  rnf DeleteInstanceOnboardingJob' {..} =
+    Prelude.rnf connectInstanceId
+
+instance Data.ToHeaders DeleteInstanceOnboardingJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteInstanceOnboardingJob where
+  toPath DeleteInstanceOnboardingJob' {..} =
+    Prelude.mconcat
+      [ "/connect-instance/",
+        Data.toBS connectInstanceId,
+        "/onboarding"
+      ]
+
+instance Data.ToQuery DeleteInstanceOnboardingJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteInstanceOnboardingJobResponse' smart constructor.
+data DeleteInstanceOnboardingJobResponse = DeleteInstanceOnboardingJobResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteInstanceOnboardingJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteInstanceOnboardingJobResponse ::
+  DeleteInstanceOnboardingJobResponse
+newDeleteInstanceOnboardingJobResponse =
+  DeleteInstanceOnboardingJobResponse'
+
+instance
+  Prelude.NFData
+    DeleteInstanceOnboardingJobResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/ConnectCampaigns/DescribeCampaign.hs b/gen/Amazonka/ConnectCampaigns/DescribeCampaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/DescribeCampaign.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.DescribeCampaign
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specific campaign.
+module Amazonka.ConnectCampaigns.DescribeCampaign
+  ( -- * Creating a Request
+    DescribeCampaign (..),
+    newDescribeCampaign,
+
+    -- * Request Lenses
+    describeCampaign_id,
+
+    -- * Destructuring the Response
+    DescribeCampaignResponse (..),
+    newDescribeCampaignResponse,
+
+    -- * Response Lenses
+    describeCampaignResponse_campaign,
+    describeCampaignResponse_httpStatus,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | DescribeCampaignRequests
+--
+-- /See:/ 'newDescribeCampaign' smart constructor.
+data DescribeCampaign = DescribeCampaign'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCampaign' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'describeCampaign_id' - Undocumented member.
+newDescribeCampaign ::
+  -- | 'id'
+  Prelude.Text ->
+  DescribeCampaign
+newDescribeCampaign pId_ =
+  DescribeCampaign' {id = pId_}
+
+-- | Undocumented member.
+describeCampaign_id :: Lens.Lens' DescribeCampaign Prelude.Text
+describeCampaign_id = Lens.lens (\DescribeCampaign' {id} -> id) (\s@DescribeCampaign' {} a -> s {id = a} :: DescribeCampaign)
+
+instance Core.AWSRequest DescribeCampaign where
+  type
+    AWSResponse DescribeCampaign =
+      DescribeCampaignResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeCampaignResponse'
+            Prelude.<$> (x Data..?> "campaign")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeCampaign where
+  hashWithSalt _salt DescribeCampaign' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DescribeCampaign where
+  rnf DescribeCampaign' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DescribeCampaign where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeCampaign where
+  toPath DescribeCampaign' {..} =
+    Prelude.mconcat ["/campaigns/", Data.toBS id]
+
+instance Data.ToQuery DescribeCampaign where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | DescribeCampaignResponse
+--
+-- /See:/ 'newDescribeCampaignResponse' smart constructor.
+data DescribeCampaignResponse = DescribeCampaignResponse'
+  { campaign :: Prelude.Maybe Campaign,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCampaignResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'campaign', 'describeCampaignResponse_campaign' - Undocumented member.
+--
+-- 'httpStatus', 'describeCampaignResponse_httpStatus' - The response's http status code.
+newDescribeCampaignResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeCampaignResponse
+newDescribeCampaignResponse pHttpStatus_ =
+  DescribeCampaignResponse'
+    { campaign =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+describeCampaignResponse_campaign :: Lens.Lens' DescribeCampaignResponse (Prelude.Maybe Campaign)
+describeCampaignResponse_campaign = Lens.lens (\DescribeCampaignResponse' {campaign} -> campaign) (\s@DescribeCampaignResponse' {} a -> s {campaign = a} :: DescribeCampaignResponse)
+
+-- | The response's http status code.
+describeCampaignResponse_httpStatus :: Lens.Lens' DescribeCampaignResponse Prelude.Int
+describeCampaignResponse_httpStatus = Lens.lens (\DescribeCampaignResponse' {httpStatus} -> httpStatus) (\s@DescribeCampaignResponse' {} a -> s {httpStatus = a} :: DescribeCampaignResponse)
+
+instance Prelude.NFData DescribeCampaignResponse where
+  rnf DescribeCampaignResponse' {..} =
+    Prelude.rnf campaign
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ConnectCampaigns/GetCampaignState.hs b/gen/Amazonka/ConnectCampaigns/GetCampaignState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/GetCampaignState.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.GetCampaignState
+-- 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 state of a campaign for the specified Amazon Connect account.
+module Amazonka.ConnectCampaigns.GetCampaignState
+  ( -- * Creating a Request
+    GetCampaignState (..),
+    newGetCampaignState,
+
+    -- * Request Lenses
+    getCampaignState_id,
+
+    -- * Destructuring the Response
+    GetCampaignStateResponse (..),
+    newGetCampaignStateResponse,
+
+    -- * Response Lenses
+    getCampaignStateResponse_state,
+    getCampaignStateResponse_httpStatus,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | GetCampaignStateRequest
+--
+-- /See:/ 'newGetCampaignState' smart constructor.
+data GetCampaignState = GetCampaignState'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCampaignState' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'getCampaignState_id' - Undocumented member.
+newGetCampaignState ::
+  -- | 'id'
+  Prelude.Text ->
+  GetCampaignState
+newGetCampaignState pId_ =
+  GetCampaignState' {id = pId_}
+
+-- | Undocumented member.
+getCampaignState_id :: Lens.Lens' GetCampaignState Prelude.Text
+getCampaignState_id = Lens.lens (\GetCampaignState' {id} -> id) (\s@GetCampaignState' {} a -> s {id = a} :: GetCampaignState)
+
+instance Core.AWSRequest GetCampaignState where
+  type
+    AWSResponse GetCampaignState =
+      GetCampaignStateResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetCampaignStateResponse'
+            Prelude.<$> (x Data..?> "state")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetCampaignState where
+  hashWithSalt _salt GetCampaignState' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetCampaignState where
+  rnf GetCampaignState' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetCampaignState where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetCampaignState where
+  toPath GetCampaignState' {..} =
+    Prelude.mconcat
+      ["/campaigns/", Data.toBS id, "/state"]
+
+instance Data.ToQuery GetCampaignState where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | GetCampaignStateResponse
+--
+-- /See:/ 'newGetCampaignStateResponse' smart constructor.
+data GetCampaignStateResponse = GetCampaignStateResponse'
+  { state :: Prelude.Maybe CampaignState,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCampaignStateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'state', 'getCampaignStateResponse_state' - Undocumented member.
+--
+-- 'httpStatus', 'getCampaignStateResponse_httpStatus' - The response's http status code.
+newGetCampaignStateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetCampaignStateResponse
+newGetCampaignStateResponse pHttpStatus_ =
+  GetCampaignStateResponse'
+    { state = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+getCampaignStateResponse_state :: Lens.Lens' GetCampaignStateResponse (Prelude.Maybe CampaignState)
+getCampaignStateResponse_state = Lens.lens (\GetCampaignStateResponse' {state} -> state) (\s@GetCampaignStateResponse' {} a -> s {state = a} :: GetCampaignStateResponse)
+
+-- | The response's http status code.
+getCampaignStateResponse_httpStatus :: Lens.Lens' GetCampaignStateResponse Prelude.Int
+getCampaignStateResponse_httpStatus = Lens.lens (\GetCampaignStateResponse' {httpStatus} -> httpStatus) (\s@GetCampaignStateResponse' {} a -> s {httpStatus = a} :: GetCampaignStateResponse)
+
+instance Prelude.NFData GetCampaignStateResponse where
+  rnf GetCampaignStateResponse' {..} =
+    Prelude.rnf state
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ConnectCampaigns/GetCampaignStateBatch.hs b/gen/Amazonka/ConnectCampaigns/GetCampaignStateBatch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/GetCampaignStateBatch.hs
@@ -0,0 +1,184 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.GetCampaignStateBatch
+-- 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 state of campaigns for the specified Amazon Connect account.
+module Amazonka.ConnectCampaigns.GetCampaignStateBatch
+  ( -- * Creating a Request
+    GetCampaignStateBatch (..),
+    newGetCampaignStateBatch,
+
+    -- * Request Lenses
+    getCampaignStateBatch_campaignIds,
+
+    -- * Destructuring the Response
+    GetCampaignStateBatchResponse (..),
+    newGetCampaignStateBatchResponse,
+
+    -- * Response Lenses
+    getCampaignStateBatchResponse_failedRequests,
+    getCampaignStateBatchResponse_successfulRequests,
+    getCampaignStateBatchResponse_httpStatus,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | GetCampaignStateBatchRequest
+--
+-- /See:/ 'newGetCampaignStateBatch' smart constructor.
+data GetCampaignStateBatch = GetCampaignStateBatch'
+  { campaignIds :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCampaignStateBatch' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'campaignIds', 'getCampaignStateBatch_campaignIds' - Undocumented member.
+newGetCampaignStateBatch ::
+  -- | 'campaignIds'
+  Prelude.NonEmpty Prelude.Text ->
+  GetCampaignStateBatch
+newGetCampaignStateBatch pCampaignIds_ =
+  GetCampaignStateBatch'
+    { campaignIds =
+        Lens.coerced Lens.# pCampaignIds_
+    }
+
+-- | Undocumented member.
+getCampaignStateBatch_campaignIds :: Lens.Lens' GetCampaignStateBatch (Prelude.NonEmpty Prelude.Text)
+getCampaignStateBatch_campaignIds = Lens.lens (\GetCampaignStateBatch' {campaignIds} -> campaignIds) (\s@GetCampaignStateBatch' {} a -> s {campaignIds = a} :: GetCampaignStateBatch) Prelude.. Lens.coerced
+
+instance Core.AWSRequest GetCampaignStateBatch where
+  type
+    AWSResponse GetCampaignStateBatch =
+      GetCampaignStateBatchResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetCampaignStateBatchResponse'
+            Prelude.<$> (x Data..?> "failedRequests" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "successfulRequests"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetCampaignStateBatch where
+  hashWithSalt _salt GetCampaignStateBatch' {..} =
+    _salt `Prelude.hashWithSalt` campaignIds
+
+instance Prelude.NFData GetCampaignStateBatch where
+  rnf GetCampaignStateBatch' {..} =
+    Prelude.rnf campaignIds
+
+instance Data.ToHeaders GetCampaignStateBatch where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetCampaignStateBatch where
+  toJSON GetCampaignStateBatch' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("campaignIds" Data..= campaignIds)]
+      )
+
+instance Data.ToPath GetCampaignStateBatch where
+  toPath = Prelude.const "/campaigns-state"
+
+instance Data.ToQuery GetCampaignStateBatch where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | GetCampaignStateBatchResponse
+--
+-- /See:/ 'newGetCampaignStateBatchResponse' smart constructor.
+data GetCampaignStateBatchResponse = GetCampaignStateBatchResponse'
+  { failedRequests :: Prelude.Maybe [FailedCampaignStateResponse],
+    successfulRequests :: Prelude.Maybe [SuccessfulCampaignStateResponse],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCampaignStateBatchResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedRequests', 'getCampaignStateBatchResponse_failedRequests' - Undocumented member.
+--
+-- 'successfulRequests', 'getCampaignStateBatchResponse_successfulRequests' - Undocumented member.
+--
+-- 'httpStatus', 'getCampaignStateBatchResponse_httpStatus' - The response's http status code.
+newGetCampaignStateBatchResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetCampaignStateBatchResponse
+newGetCampaignStateBatchResponse pHttpStatus_ =
+  GetCampaignStateBatchResponse'
+    { failedRequests =
+        Prelude.Nothing,
+      successfulRequests = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+getCampaignStateBatchResponse_failedRequests :: Lens.Lens' GetCampaignStateBatchResponse (Prelude.Maybe [FailedCampaignStateResponse])
+getCampaignStateBatchResponse_failedRequests = Lens.lens (\GetCampaignStateBatchResponse' {failedRequests} -> failedRequests) (\s@GetCampaignStateBatchResponse' {} a -> s {failedRequests = a} :: GetCampaignStateBatchResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+getCampaignStateBatchResponse_successfulRequests :: Lens.Lens' GetCampaignStateBatchResponse (Prelude.Maybe [SuccessfulCampaignStateResponse])
+getCampaignStateBatchResponse_successfulRequests = Lens.lens (\GetCampaignStateBatchResponse' {successfulRequests} -> successfulRequests) (\s@GetCampaignStateBatchResponse' {} a -> s {successfulRequests = a} :: GetCampaignStateBatchResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getCampaignStateBatchResponse_httpStatus :: Lens.Lens' GetCampaignStateBatchResponse Prelude.Int
+getCampaignStateBatchResponse_httpStatus = Lens.lens (\GetCampaignStateBatchResponse' {httpStatus} -> httpStatus) (\s@GetCampaignStateBatchResponse' {} a -> s {httpStatus = a} :: GetCampaignStateBatchResponse)
+
+instance Prelude.NFData GetCampaignStateBatchResponse where
+  rnf GetCampaignStateBatchResponse' {..} =
+    Prelude.rnf failedRequests
+      `Prelude.seq` Prelude.rnf successfulRequests
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ConnectCampaigns/GetConnectInstanceConfig.hs b/gen/Amazonka/ConnectCampaigns/GetConnectInstanceConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/GetConnectInstanceConfig.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.GetConnectInstanceConfig
+-- 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 the specific Connect instance config.
+module Amazonka.ConnectCampaigns.GetConnectInstanceConfig
+  ( -- * Creating a Request
+    GetConnectInstanceConfig (..),
+    newGetConnectInstanceConfig,
+
+    -- * Request Lenses
+    getConnectInstanceConfig_connectInstanceId,
+
+    -- * Destructuring the Response
+    GetConnectInstanceConfigResponse (..),
+    newGetConnectInstanceConfigResponse,
+
+    -- * Response Lenses
+    getConnectInstanceConfigResponse_connectInstanceConfig,
+    getConnectInstanceConfigResponse_httpStatus,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | GetConnectInstanceConfigRequest
+--
+-- /See:/ 'newGetConnectInstanceConfig' smart constructor.
+data GetConnectInstanceConfig = GetConnectInstanceConfig'
+  { connectInstanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConnectInstanceConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectInstanceId', 'getConnectInstanceConfig_connectInstanceId' - Undocumented member.
+newGetConnectInstanceConfig ::
+  -- | 'connectInstanceId'
+  Prelude.Text ->
+  GetConnectInstanceConfig
+newGetConnectInstanceConfig pConnectInstanceId_ =
+  GetConnectInstanceConfig'
+    { connectInstanceId =
+        pConnectInstanceId_
+    }
+
+-- | Undocumented member.
+getConnectInstanceConfig_connectInstanceId :: Lens.Lens' GetConnectInstanceConfig Prelude.Text
+getConnectInstanceConfig_connectInstanceId = Lens.lens (\GetConnectInstanceConfig' {connectInstanceId} -> connectInstanceId) (\s@GetConnectInstanceConfig' {} a -> s {connectInstanceId = a} :: GetConnectInstanceConfig)
+
+instance Core.AWSRequest GetConnectInstanceConfig where
+  type
+    AWSResponse GetConnectInstanceConfig =
+      GetConnectInstanceConfigResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetConnectInstanceConfigResponse'
+            Prelude.<$> (x Data..?> "connectInstanceConfig")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetConnectInstanceConfig where
+  hashWithSalt _salt GetConnectInstanceConfig' {..} =
+    _salt `Prelude.hashWithSalt` connectInstanceId
+
+instance Prelude.NFData GetConnectInstanceConfig where
+  rnf GetConnectInstanceConfig' {..} =
+    Prelude.rnf connectInstanceId
+
+instance Data.ToHeaders GetConnectInstanceConfig where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetConnectInstanceConfig where
+  toPath GetConnectInstanceConfig' {..} =
+    Prelude.mconcat
+      [ "/connect-instance/",
+        Data.toBS connectInstanceId,
+        "/config"
+      ]
+
+instance Data.ToQuery GetConnectInstanceConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | GetConnectInstanceConfigResponse
+--
+-- /See:/ 'newGetConnectInstanceConfigResponse' smart constructor.
+data GetConnectInstanceConfigResponse = GetConnectInstanceConfigResponse'
+  { connectInstanceConfig :: Prelude.Maybe InstanceConfig,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConnectInstanceConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectInstanceConfig', 'getConnectInstanceConfigResponse_connectInstanceConfig' - Undocumented member.
+--
+-- 'httpStatus', 'getConnectInstanceConfigResponse_httpStatus' - The response's http status code.
+newGetConnectInstanceConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetConnectInstanceConfigResponse
+newGetConnectInstanceConfigResponse pHttpStatus_ =
+  GetConnectInstanceConfigResponse'
+    { connectInstanceConfig =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+getConnectInstanceConfigResponse_connectInstanceConfig :: Lens.Lens' GetConnectInstanceConfigResponse (Prelude.Maybe InstanceConfig)
+getConnectInstanceConfigResponse_connectInstanceConfig = Lens.lens (\GetConnectInstanceConfigResponse' {connectInstanceConfig} -> connectInstanceConfig) (\s@GetConnectInstanceConfigResponse' {} a -> s {connectInstanceConfig = a} :: GetConnectInstanceConfigResponse)
+
+-- | The response's http status code.
+getConnectInstanceConfigResponse_httpStatus :: Lens.Lens' GetConnectInstanceConfigResponse Prelude.Int
+getConnectInstanceConfigResponse_httpStatus = Lens.lens (\GetConnectInstanceConfigResponse' {httpStatus} -> httpStatus) (\s@GetConnectInstanceConfigResponse' {} a -> s {httpStatus = a} :: GetConnectInstanceConfigResponse)
+
+instance
+  Prelude.NFData
+    GetConnectInstanceConfigResponse
+  where
+  rnf GetConnectInstanceConfigResponse' {..} =
+    Prelude.rnf connectInstanceConfig
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ConnectCampaigns/GetInstanceOnboardingJobStatus.hs b/gen/Amazonka/ConnectCampaigns/GetInstanceOnboardingJobStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/GetInstanceOnboardingJobStatus.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.GetInstanceOnboardingJobStatus
+-- 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 the specific instance onboarding job status.
+module Amazonka.ConnectCampaigns.GetInstanceOnboardingJobStatus
+  ( -- * Creating a Request
+    GetInstanceOnboardingJobStatus (..),
+    newGetInstanceOnboardingJobStatus,
+
+    -- * Request Lenses
+    getInstanceOnboardingJobStatus_connectInstanceId,
+
+    -- * Destructuring the Response
+    GetInstanceOnboardingJobStatusResponse (..),
+    newGetInstanceOnboardingJobStatusResponse,
+
+    -- * Response Lenses
+    getInstanceOnboardingJobStatusResponse_connectInstanceOnboardingJobStatus,
+    getInstanceOnboardingJobStatusResponse_httpStatus,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | GetInstanceOnboardingJobStatusRequest
+--
+-- /See:/ 'newGetInstanceOnboardingJobStatus' smart constructor.
+data GetInstanceOnboardingJobStatus = GetInstanceOnboardingJobStatus'
+  { connectInstanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetInstanceOnboardingJobStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectInstanceId', 'getInstanceOnboardingJobStatus_connectInstanceId' - Undocumented member.
+newGetInstanceOnboardingJobStatus ::
+  -- | 'connectInstanceId'
+  Prelude.Text ->
+  GetInstanceOnboardingJobStatus
+newGetInstanceOnboardingJobStatus pConnectInstanceId_ =
+  GetInstanceOnboardingJobStatus'
+    { connectInstanceId =
+        pConnectInstanceId_
+    }
+
+-- | Undocumented member.
+getInstanceOnboardingJobStatus_connectInstanceId :: Lens.Lens' GetInstanceOnboardingJobStatus Prelude.Text
+getInstanceOnboardingJobStatus_connectInstanceId = Lens.lens (\GetInstanceOnboardingJobStatus' {connectInstanceId} -> connectInstanceId) (\s@GetInstanceOnboardingJobStatus' {} a -> s {connectInstanceId = a} :: GetInstanceOnboardingJobStatus)
+
+instance
+  Core.AWSRequest
+    GetInstanceOnboardingJobStatus
+  where
+  type
+    AWSResponse GetInstanceOnboardingJobStatus =
+      GetInstanceOnboardingJobStatusResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetInstanceOnboardingJobStatusResponse'
+            Prelude.<$> (x Data..?> "connectInstanceOnboardingJobStatus")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetInstanceOnboardingJobStatus
+  where
+  hashWithSalt
+    _salt
+    GetInstanceOnboardingJobStatus' {..} =
+      _salt `Prelude.hashWithSalt` connectInstanceId
+
+instance
+  Prelude.NFData
+    GetInstanceOnboardingJobStatus
+  where
+  rnf GetInstanceOnboardingJobStatus' {..} =
+    Prelude.rnf connectInstanceId
+
+instance
+  Data.ToHeaders
+    GetInstanceOnboardingJobStatus
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetInstanceOnboardingJobStatus where
+  toPath GetInstanceOnboardingJobStatus' {..} =
+    Prelude.mconcat
+      [ "/connect-instance/",
+        Data.toBS connectInstanceId,
+        "/onboarding"
+      ]
+
+instance Data.ToQuery GetInstanceOnboardingJobStatus where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | GetInstanceOnboardingJobStatusResponse
+--
+-- /See:/ 'newGetInstanceOnboardingJobStatusResponse' smart constructor.
+data GetInstanceOnboardingJobStatusResponse = GetInstanceOnboardingJobStatusResponse'
+  { connectInstanceOnboardingJobStatus :: Prelude.Maybe InstanceOnboardingJobStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetInstanceOnboardingJobStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectInstanceOnboardingJobStatus', 'getInstanceOnboardingJobStatusResponse_connectInstanceOnboardingJobStatus' - Undocumented member.
+--
+-- 'httpStatus', 'getInstanceOnboardingJobStatusResponse_httpStatus' - The response's http status code.
+newGetInstanceOnboardingJobStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetInstanceOnboardingJobStatusResponse
+newGetInstanceOnboardingJobStatusResponse
+  pHttpStatus_ =
+    GetInstanceOnboardingJobStatusResponse'
+      { connectInstanceOnboardingJobStatus =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Undocumented member.
+getInstanceOnboardingJobStatusResponse_connectInstanceOnboardingJobStatus :: Lens.Lens' GetInstanceOnboardingJobStatusResponse (Prelude.Maybe InstanceOnboardingJobStatus)
+getInstanceOnboardingJobStatusResponse_connectInstanceOnboardingJobStatus = Lens.lens (\GetInstanceOnboardingJobStatusResponse' {connectInstanceOnboardingJobStatus} -> connectInstanceOnboardingJobStatus) (\s@GetInstanceOnboardingJobStatusResponse' {} a -> s {connectInstanceOnboardingJobStatus = a} :: GetInstanceOnboardingJobStatusResponse)
+
+-- | The response's http status code.
+getInstanceOnboardingJobStatusResponse_httpStatus :: Lens.Lens' GetInstanceOnboardingJobStatusResponse Prelude.Int
+getInstanceOnboardingJobStatusResponse_httpStatus = Lens.lens (\GetInstanceOnboardingJobStatusResponse' {httpStatus} -> httpStatus) (\s@GetInstanceOnboardingJobStatusResponse' {} a -> s {httpStatus = a} :: GetInstanceOnboardingJobStatusResponse)
+
+instance
+  Prelude.NFData
+    GetInstanceOnboardingJobStatusResponse
+  where
+  rnf GetInstanceOnboardingJobStatusResponse' {..} =
+    Prelude.rnf connectInstanceOnboardingJobStatus
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ConnectCampaigns/Lens.hs b/gen/Amazonka/ConnectCampaigns/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Lens.hs
@@ -0,0 +1,244 @@
+{-# 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.ConnectCampaigns.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.ConnectCampaigns.Lens
+  ( -- * Operations
+
+    -- ** CreateCampaign
+    createCampaign_tags,
+    createCampaign_connectInstanceId,
+    createCampaign_dialerConfig,
+    createCampaign_name,
+    createCampaign_outboundCallConfig,
+    createCampaignResponse_arn,
+    createCampaignResponse_id,
+    createCampaignResponse_tags,
+    createCampaignResponse_httpStatus,
+
+    -- ** DeleteCampaign
+    deleteCampaign_id,
+
+    -- ** DeleteConnectInstanceConfig
+    deleteConnectInstanceConfig_connectInstanceId,
+
+    -- ** DeleteInstanceOnboardingJob
+    deleteInstanceOnboardingJob_connectInstanceId,
+
+    -- ** DescribeCampaign
+    describeCampaign_id,
+    describeCampaignResponse_campaign,
+    describeCampaignResponse_httpStatus,
+
+    -- ** GetCampaignState
+    getCampaignState_id,
+    getCampaignStateResponse_state,
+    getCampaignStateResponse_httpStatus,
+
+    -- ** GetCampaignStateBatch
+    getCampaignStateBatch_campaignIds,
+    getCampaignStateBatchResponse_failedRequests,
+    getCampaignStateBatchResponse_successfulRequests,
+    getCampaignStateBatchResponse_httpStatus,
+
+    -- ** GetConnectInstanceConfig
+    getConnectInstanceConfig_connectInstanceId,
+    getConnectInstanceConfigResponse_connectInstanceConfig,
+    getConnectInstanceConfigResponse_httpStatus,
+
+    -- ** GetInstanceOnboardingJobStatus
+    getInstanceOnboardingJobStatus_connectInstanceId,
+    getInstanceOnboardingJobStatusResponse_connectInstanceOnboardingJobStatus,
+    getInstanceOnboardingJobStatusResponse_httpStatus,
+
+    -- ** ListCampaigns
+    listCampaigns_filters,
+    listCampaigns_maxResults,
+    listCampaigns_nextToken,
+    listCampaignsResponse_campaignSummaryList,
+    listCampaignsResponse_nextToken,
+    listCampaignsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_arn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** PauseCampaign
+    pauseCampaign_id,
+
+    -- ** PutDialRequestBatch
+    putDialRequestBatch_dialRequests,
+    putDialRequestBatch_id,
+    putDialRequestBatchResponse_failedRequests,
+    putDialRequestBatchResponse_successfulRequests,
+    putDialRequestBatchResponse_httpStatus,
+
+    -- ** ResumeCampaign
+    resumeCampaign_id,
+
+    -- ** StartCampaign
+    startCampaign_id,
+
+    -- ** StartInstanceOnboardingJob
+    startInstanceOnboardingJob_connectInstanceId,
+    startInstanceOnboardingJob_encryptionConfig,
+    startInstanceOnboardingJobResponse_connectInstanceOnboardingJobStatus,
+    startInstanceOnboardingJobResponse_httpStatus,
+
+    -- ** StopCampaign
+    stopCampaign_id,
+
+    -- ** TagResource
+    tagResource_arn,
+    tagResource_tags,
+
+    -- ** UntagResource
+    untagResource_arn,
+    untagResource_tagKeys,
+
+    -- ** UpdateCampaignDialerConfig
+    updateCampaignDialerConfig_dialerConfig,
+    updateCampaignDialerConfig_id,
+
+    -- ** UpdateCampaignName
+    updateCampaignName_id,
+    updateCampaignName_name,
+
+    -- ** UpdateCampaignOutboundCallConfig
+    updateCampaignOutboundCallConfig_answerMachineDetectionConfig,
+    updateCampaignOutboundCallConfig_connectContactFlowId,
+    updateCampaignOutboundCallConfig_connectSourcePhoneNumber,
+    updateCampaignOutboundCallConfig_id,
+
+    -- * Types
+
+    -- ** AnswerMachineDetectionConfig
+    answerMachineDetectionConfig_enableAnswerMachineDetection,
+
+    -- ** Campaign
+    campaign_tags,
+    campaign_arn,
+    campaign_connectInstanceId,
+    campaign_dialerConfig,
+    campaign_id,
+    campaign_name,
+    campaign_outboundCallConfig,
+
+    -- ** CampaignFilters
+    campaignFilters_instanceIdFilter,
+
+    -- ** CampaignSummary
+    campaignSummary_arn,
+    campaignSummary_connectInstanceId,
+    campaignSummary_id,
+    campaignSummary_name,
+
+    -- ** DialRequest
+    dialRequest_attributes,
+    dialRequest_clientToken,
+    dialRequest_expirationTime,
+    dialRequest_phoneNumber,
+
+    -- ** DialerConfig
+    dialerConfig_predictiveDialerConfig,
+    dialerConfig_progressiveDialerConfig,
+
+    -- ** EncryptionConfig
+    encryptionConfig_encryptionType,
+    encryptionConfig_keyArn,
+    encryptionConfig_enabled,
+
+    -- ** FailedCampaignStateResponse
+    failedCampaignStateResponse_campaignId,
+    failedCampaignStateResponse_failureCode,
+
+    -- ** FailedRequest
+    failedRequest_clientToken,
+    failedRequest_failureCode,
+    failedRequest_id,
+
+    -- ** InstanceConfig
+    instanceConfig_connectInstanceId,
+    instanceConfig_encryptionConfig,
+    instanceConfig_serviceLinkedRoleArn,
+
+    -- ** InstanceIdFilter
+    instanceIdFilter_operator,
+    instanceIdFilter_value,
+
+    -- ** InstanceOnboardingJobStatus
+    instanceOnboardingJobStatus_failureCode,
+    instanceOnboardingJobStatus_connectInstanceId,
+    instanceOnboardingJobStatus_status,
+
+    -- ** OutboundCallConfig
+    outboundCallConfig_answerMachineDetectionConfig,
+    outboundCallConfig_connectSourcePhoneNumber,
+    outboundCallConfig_connectContactFlowId,
+    outboundCallConfig_connectQueueId,
+
+    -- ** PredictiveDialerConfig
+    predictiveDialerConfig_bandwidthAllocation,
+
+    -- ** ProgressiveDialerConfig
+    progressiveDialerConfig_bandwidthAllocation,
+
+    -- ** SuccessfulCampaignStateResponse
+    successfulCampaignStateResponse_campaignId,
+    successfulCampaignStateResponse_state,
+
+    -- ** SuccessfulRequest
+    successfulRequest_clientToken,
+    successfulRequest_id,
+  )
+where
+
+import Amazonka.ConnectCampaigns.CreateCampaign
+import Amazonka.ConnectCampaigns.DeleteCampaign
+import Amazonka.ConnectCampaigns.DeleteConnectInstanceConfig
+import Amazonka.ConnectCampaigns.DeleteInstanceOnboardingJob
+import Amazonka.ConnectCampaigns.DescribeCampaign
+import Amazonka.ConnectCampaigns.GetCampaignState
+import Amazonka.ConnectCampaigns.GetCampaignStateBatch
+import Amazonka.ConnectCampaigns.GetConnectInstanceConfig
+import Amazonka.ConnectCampaigns.GetInstanceOnboardingJobStatus
+import Amazonka.ConnectCampaigns.ListCampaigns
+import Amazonka.ConnectCampaigns.ListTagsForResource
+import Amazonka.ConnectCampaigns.PauseCampaign
+import Amazonka.ConnectCampaigns.PutDialRequestBatch
+import Amazonka.ConnectCampaigns.ResumeCampaign
+import Amazonka.ConnectCampaigns.StartCampaign
+import Amazonka.ConnectCampaigns.StartInstanceOnboardingJob
+import Amazonka.ConnectCampaigns.StopCampaign
+import Amazonka.ConnectCampaigns.TagResource
+import Amazonka.ConnectCampaigns.Types.AnswerMachineDetectionConfig
+import Amazonka.ConnectCampaigns.Types.Campaign
+import Amazonka.ConnectCampaigns.Types.CampaignFilters
+import Amazonka.ConnectCampaigns.Types.CampaignSummary
+import Amazonka.ConnectCampaigns.Types.DialRequest
+import Amazonka.ConnectCampaigns.Types.DialerConfig
+import Amazonka.ConnectCampaigns.Types.EncryptionConfig
+import Amazonka.ConnectCampaigns.Types.FailedCampaignStateResponse
+import Amazonka.ConnectCampaigns.Types.FailedRequest
+import Amazonka.ConnectCampaigns.Types.InstanceConfig
+import Amazonka.ConnectCampaigns.Types.InstanceIdFilter
+import Amazonka.ConnectCampaigns.Types.InstanceOnboardingJobStatus
+import Amazonka.ConnectCampaigns.Types.OutboundCallConfig
+import Amazonka.ConnectCampaigns.Types.PredictiveDialerConfig
+import Amazonka.ConnectCampaigns.Types.ProgressiveDialerConfig
+import Amazonka.ConnectCampaigns.Types.SuccessfulCampaignStateResponse
+import Amazonka.ConnectCampaigns.Types.SuccessfulRequest
+import Amazonka.ConnectCampaigns.UntagResource
+import Amazonka.ConnectCampaigns.UpdateCampaignDialerConfig
+import Amazonka.ConnectCampaigns.UpdateCampaignName
+import Amazonka.ConnectCampaigns.UpdateCampaignOutboundCallConfig
diff --git a/gen/Amazonka/ConnectCampaigns/ListCampaigns.hs b/gen/Amazonka/ConnectCampaigns/ListCampaigns.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/ListCampaigns.hs
@@ -0,0 +1,232 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.ListCampaigns
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides summary information about the campaigns under the specified
+-- Amazon Connect account.
+--
+-- This operation returns paginated results.
+module Amazonka.ConnectCampaigns.ListCampaigns
+  ( -- * Creating a Request
+    ListCampaigns (..),
+    newListCampaigns,
+
+    -- * Request Lenses
+    listCampaigns_filters,
+    listCampaigns_maxResults,
+    listCampaigns_nextToken,
+
+    -- * Destructuring the Response
+    ListCampaignsResponse (..),
+    newListCampaignsResponse,
+
+    -- * Response Lenses
+    listCampaignsResponse_campaignSummaryList,
+    listCampaignsResponse_nextToken,
+    listCampaignsResponse_httpStatus,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | ListCampaignsRequest
+--
+-- /See:/ 'newListCampaigns' smart constructor.
+data ListCampaigns = ListCampaigns'
+  { filters :: Prelude.Maybe CampaignFilters,
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCampaigns' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listCampaigns_filters' - Undocumented member.
+--
+-- 'maxResults', 'listCampaigns_maxResults' - Undocumented member.
+--
+-- 'nextToken', 'listCampaigns_nextToken' - Undocumented member.
+newListCampaigns ::
+  ListCampaigns
+newListCampaigns =
+  ListCampaigns'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+listCampaigns_filters :: Lens.Lens' ListCampaigns (Prelude.Maybe CampaignFilters)
+listCampaigns_filters = Lens.lens (\ListCampaigns' {filters} -> filters) (\s@ListCampaigns' {} a -> s {filters = a} :: ListCampaigns)
+
+-- | Undocumented member.
+listCampaigns_maxResults :: Lens.Lens' ListCampaigns (Prelude.Maybe Prelude.Natural)
+listCampaigns_maxResults = Lens.lens (\ListCampaigns' {maxResults} -> maxResults) (\s@ListCampaigns' {} a -> s {maxResults = a} :: ListCampaigns)
+
+-- | Undocumented member.
+listCampaigns_nextToken :: Lens.Lens' ListCampaigns (Prelude.Maybe Prelude.Text)
+listCampaigns_nextToken = Lens.lens (\ListCampaigns' {nextToken} -> nextToken) (\s@ListCampaigns' {} a -> s {nextToken = a} :: ListCampaigns)
+
+instance Core.AWSPager ListCampaigns where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listCampaignsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listCampaignsResponse_campaignSummaryList
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listCampaigns_nextToken
+          Lens..~ rs
+          Lens.^? listCampaignsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListCampaigns where
+  type
+    AWSResponse ListCampaigns =
+      ListCampaignsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListCampaignsResponse'
+            Prelude.<$> ( x
+                            Data..?> "campaignSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListCampaigns where
+  hashWithSalt _salt ListCampaigns' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListCampaigns where
+  rnf ListCampaigns' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListCampaigns where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListCampaigns where
+  toJSON ListCampaigns' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListCampaigns where
+  toPath = Prelude.const "/campaigns-summary"
+
+instance Data.ToQuery ListCampaigns where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | ListCampaignsResponse
+--
+-- /See:/ 'newListCampaignsResponse' smart constructor.
+data ListCampaignsResponse = ListCampaignsResponse'
+  { campaignSummaryList :: Prelude.Maybe [CampaignSummary],
+    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 'ListCampaignsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'campaignSummaryList', 'listCampaignsResponse_campaignSummaryList' - Undocumented member.
+--
+-- 'nextToken', 'listCampaignsResponse_nextToken' - Undocumented member.
+--
+-- 'httpStatus', 'listCampaignsResponse_httpStatus' - The response's http status code.
+newListCampaignsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListCampaignsResponse
+newListCampaignsResponse pHttpStatus_ =
+  ListCampaignsResponse'
+    { campaignSummaryList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+listCampaignsResponse_campaignSummaryList :: Lens.Lens' ListCampaignsResponse (Prelude.Maybe [CampaignSummary])
+listCampaignsResponse_campaignSummaryList = Lens.lens (\ListCampaignsResponse' {campaignSummaryList} -> campaignSummaryList) (\s@ListCampaignsResponse' {} a -> s {campaignSummaryList = a} :: ListCampaignsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+listCampaignsResponse_nextToken :: Lens.Lens' ListCampaignsResponse (Prelude.Maybe Prelude.Text)
+listCampaignsResponse_nextToken = Lens.lens (\ListCampaignsResponse' {nextToken} -> nextToken) (\s@ListCampaignsResponse' {} a -> s {nextToken = a} :: ListCampaignsResponse)
+
+-- | The response's http status code.
+listCampaignsResponse_httpStatus :: Lens.Lens' ListCampaignsResponse Prelude.Int
+listCampaignsResponse_httpStatus = Lens.lens (\ListCampaignsResponse' {httpStatus} -> httpStatus) (\s@ListCampaignsResponse' {} a -> s {httpStatus = a} :: ListCampaignsResponse)
+
+instance Prelude.NFData ListCampaignsResponse where
+  rnf ListCampaignsResponse' {..} =
+    Prelude.rnf campaignSummaryList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ConnectCampaigns/ListTagsForResource.hs b/gen/Amazonka/ConnectCampaigns/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/ListTagsForResource.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.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)
+--
+-- List tags for a resource.
+module Amazonka.ConnectCampaigns.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_arn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | ListTagsForResource
+--
+-- /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { arn :: 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:
+--
+-- 'arn', 'listTagsForResource_arn' - Undocumented member.
+newListTagsForResource ::
+  -- | 'arn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pArn_ =
+  ListTagsForResource' {arn = pArn_}
+
+-- | Undocumented member.
+listTagsForResource_arn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_arn = Lens.lens (\ListTagsForResource' {arn} -> arn) (\s@ListTagsForResource' {} a -> s {arn = 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` arn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} = Prelude.rnf arn
+
+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 arn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | ListTagsForResponse
+--
+-- /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { 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' - Undocumented member.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+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/ConnectCampaigns/PauseCampaign.hs b/gen/Amazonka/ConnectCampaigns/PauseCampaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/PauseCampaign.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.PauseCampaign
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Pauses a campaign for the specified Amazon Connect account.
+module Amazonka.ConnectCampaigns.PauseCampaign
+  ( -- * Creating a Request
+    PauseCampaign (..),
+    newPauseCampaign,
+
+    -- * Request Lenses
+    pauseCampaign_id,
+
+    -- * Destructuring the Response
+    PauseCampaignResponse (..),
+    newPauseCampaignResponse,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | PauseCampaignRequest
+--
+-- /See:/ 'newPauseCampaign' smart constructor.
+data PauseCampaign = PauseCampaign'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PauseCampaign' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'pauseCampaign_id' - Undocumented member.
+newPauseCampaign ::
+  -- | 'id'
+  Prelude.Text ->
+  PauseCampaign
+newPauseCampaign pId_ = PauseCampaign' {id = pId_}
+
+-- | Undocumented member.
+pauseCampaign_id :: Lens.Lens' PauseCampaign Prelude.Text
+pauseCampaign_id = Lens.lens (\PauseCampaign' {id} -> id) (\s@PauseCampaign' {} a -> s {id = a} :: PauseCampaign)
+
+instance Core.AWSRequest PauseCampaign where
+  type
+    AWSResponse PauseCampaign =
+      PauseCampaignResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull PauseCampaignResponse'
+
+instance Prelude.Hashable PauseCampaign where
+  hashWithSalt _salt PauseCampaign' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData PauseCampaign where
+  rnf PauseCampaign' {..} = Prelude.rnf id
+
+instance Data.ToHeaders PauseCampaign where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PauseCampaign where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath PauseCampaign where
+  toPath PauseCampaign' {..} =
+    Prelude.mconcat
+      ["/campaigns/", Data.toBS id, "/pause"]
+
+instance Data.ToQuery PauseCampaign where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPauseCampaignResponse' smart constructor.
+data PauseCampaignResponse = PauseCampaignResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PauseCampaignResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newPauseCampaignResponse ::
+  PauseCampaignResponse
+newPauseCampaignResponse = PauseCampaignResponse'
+
+instance Prelude.NFData PauseCampaignResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ConnectCampaigns/PutDialRequestBatch.hs b/gen/Amazonka/ConnectCampaigns/PutDialRequestBatch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/PutDialRequestBatch.hs
@@ -0,0 +1,201 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.PutDialRequestBatch
+-- 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 dials requests for the specified campaign Amazon Connect
+-- account. This API is idempotent.
+module Amazonka.ConnectCampaigns.PutDialRequestBatch
+  ( -- * Creating a Request
+    PutDialRequestBatch (..),
+    newPutDialRequestBatch,
+
+    -- * Request Lenses
+    putDialRequestBatch_dialRequests,
+    putDialRequestBatch_id,
+
+    -- * Destructuring the Response
+    PutDialRequestBatchResponse (..),
+    newPutDialRequestBatchResponse,
+
+    -- * Response Lenses
+    putDialRequestBatchResponse_failedRequests,
+    putDialRequestBatchResponse_successfulRequests,
+    putDialRequestBatchResponse_httpStatus,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | PutDialRequestBatchRequest
+--
+-- /See:/ 'newPutDialRequestBatch' smart constructor.
+data PutDialRequestBatch = PutDialRequestBatch'
+  { dialRequests :: Prelude.NonEmpty DialRequest,
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDialRequestBatch' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dialRequests', 'putDialRequestBatch_dialRequests' - Undocumented member.
+--
+-- 'id', 'putDialRequestBatch_id' - Undocumented member.
+newPutDialRequestBatch ::
+  -- | 'dialRequests'
+  Prelude.NonEmpty DialRequest ->
+  -- | 'id'
+  Prelude.Text ->
+  PutDialRequestBatch
+newPutDialRequestBatch pDialRequests_ pId_ =
+  PutDialRequestBatch'
+    { dialRequests =
+        Lens.coerced Lens.# pDialRequests_,
+      id = pId_
+    }
+
+-- | Undocumented member.
+putDialRequestBatch_dialRequests :: Lens.Lens' PutDialRequestBatch (Prelude.NonEmpty DialRequest)
+putDialRequestBatch_dialRequests = Lens.lens (\PutDialRequestBatch' {dialRequests} -> dialRequests) (\s@PutDialRequestBatch' {} a -> s {dialRequests = a} :: PutDialRequestBatch) Prelude.. Lens.coerced
+
+-- | Undocumented member.
+putDialRequestBatch_id :: Lens.Lens' PutDialRequestBatch Prelude.Text
+putDialRequestBatch_id = Lens.lens (\PutDialRequestBatch' {id} -> id) (\s@PutDialRequestBatch' {} a -> s {id = a} :: PutDialRequestBatch)
+
+instance Core.AWSRequest PutDialRequestBatch where
+  type
+    AWSResponse PutDialRequestBatch =
+      PutDialRequestBatchResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutDialRequestBatchResponse'
+            Prelude.<$> (x Data..?> "failedRequests" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "successfulRequests"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutDialRequestBatch where
+  hashWithSalt _salt PutDialRequestBatch' {..} =
+    _salt
+      `Prelude.hashWithSalt` dialRequests
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData PutDialRequestBatch where
+  rnf PutDialRequestBatch' {..} =
+    Prelude.rnf dialRequests
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders PutDialRequestBatch where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutDialRequestBatch where
+  toJSON PutDialRequestBatch' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("dialRequests" Data..= dialRequests)]
+      )
+
+instance Data.ToPath PutDialRequestBatch where
+  toPath PutDialRequestBatch' {..} =
+    Prelude.mconcat
+      ["/campaigns/", Data.toBS id, "/dial-requests"]
+
+instance Data.ToQuery PutDialRequestBatch where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | PutDialRequestBatchResponse
+--
+-- /See:/ 'newPutDialRequestBatchResponse' smart constructor.
+data PutDialRequestBatchResponse = PutDialRequestBatchResponse'
+  { failedRequests :: Prelude.Maybe [FailedRequest],
+    successfulRequests :: Prelude.Maybe [SuccessfulRequest],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDialRequestBatchResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedRequests', 'putDialRequestBatchResponse_failedRequests' - Undocumented member.
+--
+-- 'successfulRequests', 'putDialRequestBatchResponse_successfulRequests' - Undocumented member.
+--
+-- 'httpStatus', 'putDialRequestBatchResponse_httpStatus' - The response's http status code.
+newPutDialRequestBatchResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutDialRequestBatchResponse
+newPutDialRequestBatchResponse pHttpStatus_ =
+  PutDialRequestBatchResponse'
+    { failedRequests =
+        Prelude.Nothing,
+      successfulRequests = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+putDialRequestBatchResponse_failedRequests :: Lens.Lens' PutDialRequestBatchResponse (Prelude.Maybe [FailedRequest])
+putDialRequestBatchResponse_failedRequests = Lens.lens (\PutDialRequestBatchResponse' {failedRequests} -> failedRequests) (\s@PutDialRequestBatchResponse' {} a -> s {failedRequests = a} :: PutDialRequestBatchResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+putDialRequestBatchResponse_successfulRequests :: Lens.Lens' PutDialRequestBatchResponse (Prelude.Maybe [SuccessfulRequest])
+putDialRequestBatchResponse_successfulRequests = Lens.lens (\PutDialRequestBatchResponse' {successfulRequests} -> successfulRequests) (\s@PutDialRequestBatchResponse' {} a -> s {successfulRequests = a} :: PutDialRequestBatchResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+putDialRequestBatchResponse_httpStatus :: Lens.Lens' PutDialRequestBatchResponse Prelude.Int
+putDialRequestBatchResponse_httpStatus = Lens.lens (\PutDialRequestBatchResponse' {httpStatus} -> httpStatus) (\s@PutDialRequestBatchResponse' {} a -> s {httpStatus = a} :: PutDialRequestBatchResponse)
+
+instance Prelude.NFData PutDialRequestBatchResponse where
+  rnf PutDialRequestBatchResponse' {..} =
+    Prelude.rnf failedRequests
+      `Prelude.seq` Prelude.rnf successfulRequests
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ConnectCampaigns/ResumeCampaign.hs b/gen/Amazonka/ConnectCampaigns/ResumeCampaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/ResumeCampaign.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.ResumeCampaign
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops a campaign for the specified Amazon Connect account.
+module Amazonka.ConnectCampaigns.ResumeCampaign
+  ( -- * Creating a Request
+    ResumeCampaign (..),
+    newResumeCampaign,
+
+    -- * Request Lenses
+    resumeCampaign_id,
+
+    -- * Destructuring the Response
+    ResumeCampaignResponse (..),
+    newResumeCampaignResponse,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | ResumeCampaignRequest
+--
+-- /See:/ 'newResumeCampaign' smart constructor.
+data ResumeCampaign = ResumeCampaign'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResumeCampaign' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'resumeCampaign_id' - Undocumented member.
+newResumeCampaign ::
+  -- | 'id'
+  Prelude.Text ->
+  ResumeCampaign
+newResumeCampaign pId_ = ResumeCampaign' {id = pId_}
+
+-- | Undocumented member.
+resumeCampaign_id :: Lens.Lens' ResumeCampaign Prelude.Text
+resumeCampaign_id = Lens.lens (\ResumeCampaign' {id} -> id) (\s@ResumeCampaign' {} a -> s {id = a} :: ResumeCampaign)
+
+instance Core.AWSRequest ResumeCampaign where
+  type
+    AWSResponse ResumeCampaign =
+      ResumeCampaignResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull ResumeCampaignResponse'
+
+instance Prelude.Hashable ResumeCampaign where
+  hashWithSalt _salt ResumeCampaign' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData ResumeCampaign where
+  rnf ResumeCampaign' {..} = Prelude.rnf id
+
+instance Data.ToHeaders ResumeCampaign where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ResumeCampaign where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath ResumeCampaign where
+  toPath ResumeCampaign' {..} =
+    Prelude.mconcat
+      ["/campaigns/", Data.toBS id, "/resume"]
+
+instance Data.ToQuery ResumeCampaign where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newResumeCampaignResponse' smart constructor.
+data ResumeCampaignResponse = ResumeCampaignResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResumeCampaignResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newResumeCampaignResponse ::
+  ResumeCampaignResponse
+newResumeCampaignResponse = ResumeCampaignResponse'
+
+instance Prelude.NFData ResumeCampaignResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ConnectCampaigns/StartCampaign.hs b/gen/Amazonka/ConnectCampaigns/StartCampaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/StartCampaign.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.StartCampaign
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts a campaign for the specified Amazon Connect account.
+module Amazonka.ConnectCampaigns.StartCampaign
+  ( -- * Creating a Request
+    StartCampaign (..),
+    newStartCampaign,
+
+    -- * Request Lenses
+    startCampaign_id,
+
+    -- * Destructuring the Response
+    StartCampaignResponse (..),
+    newStartCampaignResponse,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | StartCampaignRequest
+--
+-- /See:/ 'newStartCampaign' smart constructor.
+data StartCampaign = StartCampaign'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartCampaign' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'startCampaign_id' - Undocumented member.
+newStartCampaign ::
+  -- | 'id'
+  Prelude.Text ->
+  StartCampaign
+newStartCampaign pId_ = StartCampaign' {id = pId_}
+
+-- | Undocumented member.
+startCampaign_id :: Lens.Lens' StartCampaign Prelude.Text
+startCampaign_id = Lens.lens (\StartCampaign' {id} -> id) (\s@StartCampaign' {} a -> s {id = a} :: StartCampaign)
+
+instance Core.AWSRequest StartCampaign where
+  type
+    AWSResponse StartCampaign =
+      StartCampaignResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull StartCampaignResponse'
+
+instance Prelude.Hashable StartCampaign where
+  hashWithSalt _salt StartCampaign' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData StartCampaign where
+  rnf StartCampaign' {..} = Prelude.rnf id
+
+instance Data.ToHeaders StartCampaign where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartCampaign where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath StartCampaign where
+  toPath StartCampaign' {..} =
+    Prelude.mconcat
+      ["/campaigns/", Data.toBS id, "/start"]
+
+instance Data.ToQuery StartCampaign where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartCampaignResponse' smart constructor.
+data StartCampaignResponse = StartCampaignResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartCampaignResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newStartCampaignResponse ::
+  StartCampaignResponse
+newStartCampaignResponse = StartCampaignResponse'
+
+instance Prelude.NFData StartCampaignResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ConnectCampaigns/StartInstanceOnboardingJob.hs b/gen/Amazonka/ConnectCampaigns/StartInstanceOnboardingJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/StartInstanceOnboardingJob.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.StartInstanceOnboardingJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Onboard the specific Amazon Connect instance to Connect Campaigns.
+module Amazonka.ConnectCampaigns.StartInstanceOnboardingJob
+  ( -- * Creating a Request
+    StartInstanceOnboardingJob (..),
+    newStartInstanceOnboardingJob,
+
+    -- * Request Lenses
+    startInstanceOnboardingJob_connectInstanceId,
+    startInstanceOnboardingJob_encryptionConfig,
+
+    -- * Destructuring the Response
+    StartInstanceOnboardingJobResponse (..),
+    newStartInstanceOnboardingJobResponse,
+
+    -- * Response Lenses
+    startInstanceOnboardingJobResponse_connectInstanceOnboardingJobStatus,
+    startInstanceOnboardingJobResponse_httpStatus,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | The request for StartInstanceOnboardingJob API.
+--
+-- /See:/ 'newStartInstanceOnboardingJob' smart constructor.
+data StartInstanceOnboardingJob = StartInstanceOnboardingJob'
+  { connectInstanceId :: Prelude.Text,
+    encryptionConfig :: EncryptionConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartInstanceOnboardingJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectInstanceId', 'startInstanceOnboardingJob_connectInstanceId' - Undocumented member.
+--
+-- 'encryptionConfig', 'startInstanceOnboardingJob_encryptionConfig' - Undocumented member.
+newStartInstanceOnboardingJob ::
+  -- | 'connectInstanceId'
+  Prelude.Text ->
+  -- | 'encryptionConfig'
+  EncryptionConfig ->
+  StartInstanceOnboardingJob
+newStartInstanceOnboardingJob
+  pConnectInstanceId_
+  pEncryptionConfig_ =
+    StartInstanceOnboardingJob'
+      { connectInstanceId =
+          pConnectInstanceId_,
+        encryptionConfig = pEncryptionConfig_
+      }
+
+-- | Undocumented member.
+startInstanceOnboardingJob_connectInstanceId :: Lens.Lens' StartInstanceOnboardingJob Prelude.Text
+startInstanceOnboardingJob_connectInstanceId = Lens.lens (\StartInstanceOnboardingJob' {connectInstanceId} -> connectInstanceId) (\s@StartInstanceOnboardingJob' {} a -> s {connectInstanceId = a} :: StartInstanceOnboardingJob)
+
+-- | Undocumented member.
+startInstanceOnboardingJob_encryptionConfig :: Lens.Lens' StartInstanceOnboardingJob EncryptionConfig
+startInstanceOnboardingJob_encryptionConfig = Lens.lens (\StartInstanceOnboardingJob' {encryptionConfig} -> encryptionConfig) (\s@StartInstanceOnboardingJob' {} a -> s {encryptionConfig = a} :: StartInstanceOnboardingJob)
+
+instance Core.AWSRequest StartInstanceOnboardingJob where
+  type
+    AWSResponse StartInstanceOnboardingJob =
+      StartInstanceOnboardingJobResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartInstanceOnboardingJobResponse'
+            Prelude.<$> (x Data..?> "connectInstanceOnboardingJobStatus")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartInstanceOnboardingJob where
+  hashWithSalt _salt StartInstanceOnboardingJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectInstanceId
+      `Prelude.hashWithSalt` encryptionConfig
+
+instance Prelude.NFData StartInstanceOnboardingJob where
+  rnf StartInstanceOnboardingJob' {..} =
+    Prelude.rnf connectInstanceId
+      `Prelude.seq` Prelude.rnf encryptionConfig
+
+instance Data.ToHeaders StartInstanceOnboardingJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartInstanceOnboardingJob where
+  toJSON StartInstanceOnboardingJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("encryptionConfig" Data..= encryptionConfig)
+          ]
+      )
+
+instance Data.ToPath StartInstanceOnboardingJob where
+  toPath StartInstanceOnboardingJob' {..} =
+    Prelude.mconcat
+      [ "/connect-instance/",
+        Data.toBS connectInstanceId,
+        "/onboarding"
+      ]
+
+instance Data.ToQuery StartInstanceOnboardingJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The response for StartInstanceOnboardingJob API.
+--
+-- /See:/ 'newStartInstanceOnboardingJobResponse' smart constructor.
+data StartInstanceOnboardingJobResponse = StartInstanceOnboardingJobResponse'
+  { connectInstanceOnboardingJobStatus :: Prelude.Maybe InstanceOnboardingJobStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartInstanceOnboardingJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectInstanceOnboardingJobStatus', 'startInstanceOnboardingJobResponse_connectInstanceOnboardingJobStatus' - Undocumented member.
+--
+-- 'httpStatus', 'startInstanceOnboardingJobResponse_httpStatus' - The response's http status code.
+newStartInstanceOnboardingJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartInstanceOnboardingJobResponse
+newStartInstanceOnboardingJobResponse pHttpStatus_ =
+  StartInstanceOnboardingJobResponse'
+    { connectInstanceOnboardingJobStatus =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+startInstanceOnboardingJobResponse_connectInstanceOnboardingJobStatus :: Lens.Lens' StartInstanceOnboardingJobResponse (Prelude.Maybe InstanceOnboardingJobStatus)
+startInstanceOnboardingJobResponse_connectInstanceOnboardingJobStatus = Lens.lens (\StartInstanceOnboardingJobResponse' {connectInstanceOnboardingJobStatus} -> connectInstanceOnboardingJobStatus) (\s@StartInstanceOnboardingJobResponse' {} a -> s {connectInstanceOnboardingJobStatus = a} :: StartInstanceOnboardingJobResponse)
+
+-- | The response's http status code.
+startInstanceOnboardingJobResponse_httpStatus :: Lens.Lens' StartInstanceOnboardingJobResponse Prelude.Int
+startInstanceOnboardingJobResponse_httpStatus = Lens.lens (\StartInstanceOnboardingJobResponse' {httpStatus} -> httpStatus) (\s@StartInstanceOnboardingJobResponse' {} a -> s {httpStatus = a} :: StartInstanceOnboardingJobResponse)
+
+instance
+  Prelude.NFData
+    StartInstanceOnboardingJobResponse
+  where
+  rnf StartInstanceOnboardingJobResponse' {..} =
+    Prelude.rnf connectInstanceOnboardingJobStatus
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ConnectCampaigns/StopCampaign.hs b/gen/Amazonka/ConnectCampaigns/StopCampaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/StopCampaign.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.StopCampaign
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops a campaign for the specified Amazon Connect account.
+module Amazonka.ConnectCampaigns.StopCampaign
+  ( -- * Creating a Request
+    StopCampaign (..),
+    newStopCampaign,
+
+    -- * Request Lenses
+    stopCampaign_id,
+
+    -- * Destructuring the Response
+    StopCampaignResponse (..),
+    newStopCampaignResponse,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | StopCampaignRequest
+--
+-- /See:/ 'newStopCampaign' smart constructor.
+data StopCampaign = StopCampaign'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopCampaign' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'stopCampaign_id' - Undocumented member.
+newStopCampaign ::
+  -- | 'id'
+  Prelude.Text ->
+  StopCampaign
+newStopCampaign pId_ = StopCampaign' {id = pId_}
+
+-- | Undocumented member.
+stopCampaign_id :: Lens.Lens' StopCampaign Prelude.Text
+stopCampaign_id = Lens.lens (\StopCampaign' {id} -> id) (\s@StopCampaign' {} a -> s {id = a} :: StopCampaign)
+
+instance Core.AWSRequest StopCampaign where
+  type AWSResponse StopCampaign = StopCampaignResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response = Response.receiveNull StopCampaignResponse'
+
+instance Prelude.Hashable StopCampaign where
+  hashWithSalt _salt StopCampaign' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData StopCampaign where
+  rnf StopCampaign' {..} = Prelude.rnf id
+
+instance Data.ToHeaders StopCampaign where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopCampaign where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath StopCampaign where
+  toPath StopCampaign' {..} =
+    Prelude.mconcat
+      ["/campaigns/", Data.toBS id, "/stop"]
+
+instance Data.ToQuery StopCampaign where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopCampaignResponse' smart constructor.
+data StopCampaignResponse = StopCampaignResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopCampaignResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newStopCampaignResponse ::
+  StopCampaignResponse
+newStopCampaignResponse = StopCampaignResponse'
+
+instance Prelude.NFData StopCampaignResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ConnectCampaigns/TagResource.hs b/gen/Amazonka/ConnectCampaigns/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/TagResource.hs
@@ -0,0 +1,138 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.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)
+--
+-- Tag a resource.
+module Amazonka.ConnectCampaigns.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_arn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | TagResourceRequest
+--
+-- /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { arn :: Prelude.Text,
+    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:
+--
+-- 'arn', 'tagResource_arn' - Undocumented member.
+--
+-- 'tags', 'tagResource_tags' - Undocumented member.
+newTagResource ::
+  -- | 'arn'
+  Prelude.Text ->
+  TagResource
+newTagResource pArn_ =
+  TagResource' {arn = pArn_, tags = Prelude.mempty}
+
+-- | Undocumented member.
+tagResource_arn :: Lens.Lens' TagResource Prelude.Text
+tagResource_arn = Lens.lens (\TagResource' {arn} -> arn) (\s@TagResource' {} a -> s {arn = a} :: TagResource)
+
+-- | Undocumented member.
+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.receiveNull TagResourceResponse'
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf arn `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 arn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  {
+  }
+  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.
+newTagResourceResponse ::
+  TagResourceResponse
+newTagResourceResponse = TagResourceResponse'
+
+instance Prelude.NFData TagResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ConnectCampaigns/Types.hs b/gen/Amazonka/ConnectCampaigns/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types.hs
@@ -0,0 +1,340 @@
+{-# 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.ConnectCampaigns.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.ConnectCampaigns.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _InvalidCampaignStateException,
+    _InvalidStateException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * CampaignState
+    CampaignState (..),
+
+    -- * EncryptionType
+    EncryptionType (..),
+
+    -- * FailureCode
+    FailureCode (..),
+
+    -- * GetCampaignStateBatchFailureCode
+    GetCampaignStateBatchFailureCode (..),
+
+    -- * InstanceIdFilterOperator
+    InstanceIdFilterOperator (..),
+
+    -- * InstanceOnboardingJobFailureCode
+    InstanceOnboardingJobFailureCode (..),
+
+    -- * InstanceOnboardingJobStatusCode
+    InstanceOnboardingJobStatusCode (..),
+
+    -- * AnswerMachineDetectionConfig
+    AnswerMachineDetectionConfig (..),
+    newAnswerMachineDetectionConfig,
+    answerMachineDetectionConfig_enableAnswerMachineDetection,
+
+    -- * Campaign
+    Campaign (..),
+    newCampaign,
+    campaign_tags,
+    campaign_arn,
+    campaign_connectInstanceId,
+    campaign_dialerConfig,
+    campaign_id,
+    campaign_name,
+    campaign_outboundCallConfig,
+
+    -- * CampaignFilters
+    CampaignFilters (..),
+    newCampaignFilters,
+    campaignFilters_instanceIdFilter,
+
+    -- * CampaignSummary
+    CampaignSummary (..),
+    newCampaignSummary,
+    campaignSummary_arn,
+    campaignSummary_connectInstanceId,
+    campaignSummary_id,
+    campaignSummary_name,
+
+    -- * DialRequest
+    DialRequest (..),
+    newDialRequest,
+    dialRequest_attributes,
+    dialRequest_clientToken,
+    dialRequest_expirationTime,
+    dialRequest_phoneNumber,
+
+    -- * DialerConfig
+    DialerConfig (..),
+    newDialerConfig,
+    dialerConfig_predictiveDialerConfig,
+    dialerConfig_progressiveDialerConfig,
+
+    -- * EncryptionConfig
+    EncryptionConfig (..),
+    newEncryptionConfig,
+    encryptionConfig_encryptionType,
+    encryptionConfig_keyArn,
+    encryptionConfig_enabled,
+
+    -- * FailedCampaignStateResponse
+    FailedCampaignStateResponse (..),
+    newFailedCampaignStateResponse,
+    failedCampaignStateResponse_campaignId,
+    failedCampaignStateResponse_failureCode,
+
+    -- * FailedRequest
+    FailedRequest (..),
+    newFailedRequest,
+    failedRequest_clientToken,
+    failedRequest_failureCode,
+    failedRequest_id,
+
+    -- * InstanceConfig
+    InstanceConfig (..),
+    newInstanceConfig,
+    instanceConfig_connectInstanceId,
+    instanceConfig_encryptionConfig,
+    instanceConfig_serviceLinkedRoleArn,
+
+    -- * InstanceIdFilter
+    InstanceIdFilter (..),
+    newInstanceIdFilter,
+    instanceIdFilter_operator,
+    instanceIdFilter_value,
+
+    -- * InstanceOnboardingJobStatus
+    InstanceOnboardingJobStatus (..),
+    newInstanceOnboardingJobStatus,
+    instanceOnboardingJobStatus_failureCode,
+    instanceOnboardingJobStatus_connectInstanceId,
+    instanceOnboardingJobStatus_status,
+
+    -- * OutboundCallConfig
+    OutboundCallConfig (..),
+    newOutboundCallConfig,
+    outboundCallConfig_answerMachineDetectionConfig,
+    outboundCallConfig_connectSourcePhoneNumber,
+    outboundCallConfig_connectContactFlowId,
+    outboundCallConfig_connectQueueId,
+
+    -- * PredictiveDialerConfig
+    PredictiveDialerConfig (..),
+    newPredictiveDialerConfig,
+    predictiveDialerConfig_bandwidthAllocation,
+
+    -- * ProgressiveDialerConfig
+    ProgressiveDialerConfig (..),
+    newProgressiveDialerConfig,
+    progressiveDialerConfig_bandwidthAllocation,
+
+    -- * SuccessfulCampaignStateResponse
+    SuccessfulCampaignStateResponse (..),
+    newSuccessfulCampaignStateResponse,
+    successfulCampaignStateResponse_campaignId,
+    successfulCampaignStateResponse_state,
+
+    -- * SuccessfulRequest
+    SuccessfulRequest (..),
+    newSuccessfulRequest,
+    successfulRequest_clientToken,
+    successfulRequest_id,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types.AnswerMachineDetectionConfig
+import Amazonka.ConnectCampaigns.Types.Campaign
+import Amazonka.ConnectCampaigns.Types.CampaignFilters
+import Amazonka.ConnectCampaigns.Types.CampaignState
+import Amazonka.ConnectCampaigns.Types.CampaignSummary
+import Amazonka.ConnectCampaigns.Types.DialRequest
+import Amazonka.ConnectCampaigns.Types.DialerConfig
+import Amazonka.ConnectCampaigns.Types.EncryptionConfig
+import Amazonka.ConnectCampaigns.Types.EncryptionType
+import Amazonka.ConnectCampaigns.Types.FailedCampaignStateResponse
+import Amazonka.ConnectCampaigns.Types.FailedRequest
+import Amazonka.ConnectCampaigns.Types.FailureCode
+import Amazonka.ConnectCampaigns.Types.GetCampaignStateBatchFailureCode
+import Amazonka.ConnectCampaigns.Types.InstanceConfig
+import Amazonka.ConnectCampaigns.Types.InstanceIdFilter
+import Amazonka.ConnectCampaigns.Types.InstanceIdFilterOperator
+import Amazonka.ConnectCampaigns.Types.InstanceOnboardingJobFailureCode
+import Amazonka.ConnectCampaigns.Types.InstanceOnboardingJobStatus
+import Amazonka.ConnectCampaigns.Types.InstanceOnboardingJobStatusCode
+import Amazonka.ConnectCampaigns.Types.OutboundCallConfig
+import Amazonka.ConnectCampaigns.Types.PredictiveDialerConfig
+import Amazonka.ConnectCampaigns.Types.ProgressiveDialerConfig
+import Amazonka.ConnectCampaigns.Types.SuccessfulCampaignStateResponse
+import Amazonka.ConnectCampaigns.Types.SuccessfulRequest
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2021-01-30@ of the Amazon ConnectCampaignService SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "ConnectCampaigns",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "connect-campaigns",
+      Core.signingName = "connect-campaigns",
+      Core.version = "2021-01-30",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "ConnectCampaigns",
+      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 request could not be processed because of conflict in the current
+-- state of the resource.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | Request processing failed because of an error or failure with the
+-- service.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | The request could not be processed because of conflict in the current
+-- state of the campaign.
+_InvalidCampaignStateException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidCampaignStateException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidCampaignStateException"
+    Prelude.. Core.hasStatus 409
+
+-- | The request could not be processed because of conflict in the current
+-- state.
+_InvalidStateException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidStateException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidStateException"
+    Prelude.. Core.hasStatus 409
+
+-- | The specified resource was not found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | Request would cause a service quota to be exceeded.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | The request was denied due to request throttling.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | The input fails to satisfy the constraints specified by an AWS service.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/ConnectCampaigns/Types/AnswerMachineDetectionConfig.hs b/gen/Amazonka/ConnectCampaigns/Types/AnswerMachineDetectionConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/AnswerMachineDetectionConfig.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.Types.AnswerMachineDetectionConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.AnswerMachineDetectionConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Answering Machine Detection config
+--
+-- /See:/ 'newAnswerMachineDetectionConfig' smart constructor.
+data AnswerMachineDetectionConfig = AnswerMachineDetectionConfig'
+  { -- | Enable or disable answering machine detection
+    enableAnswerMachineDetection :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnswerMachineDetectionConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enableAnswerMachineDetection', 'answerMachineDetectionConfig_enableAnswerMachineDetection' - Enable or disable answering machine detection
+newAnswerMachineDetectionConfig ::
+  -- | 'enableAnswerMachineDetection'
+  Prelude.Bool ->
+  AnswerMachineDetectionConfig
+newAnswerMachineDetectionConfig
+  pEnableAnswerMachineDetection_ =
+    AnswerMachineDetectionConfig'
+      { enableAnswerMachineDetection =
+          pEnableAnswerMachineDetection_
+      }
+
+-- | Enable or disable answering machine detection
+answerMachineDetectionConfig_enableAnswerMachineDetection :: Lens.Lens' AnswerMachineDetectionConfig Prelude.Bool
+answerMachineDetectionConfig_enableAnswerMachineDetection = Lens.lens (\AnswerMachineDetectionConfig' {enableAnswerMachineDetection} -> enableAnswerMachineDetection) (\s@AnswerMachineDetectionConfig' {} a -> s {enableAnswerMachineDetection = a} :: AnswerMachineDetectionConfig)
+
+instance Data.FromJSON AnswerMachineDetectionConfig where
+  parseJSON =
+    Data.withObject
+      "AnswerMachineDetectionConfig"
+      ( \x ->
+          AnswerMachineDetectionConfig'
+            Prelude.<$> (x Data..: "enableAnswerMachineDetection")
+      )
+
+instance
+  Prelude.Hashable
+    AnswerMachineDetectionConfig
+  where
+  hashWithSalt _salt AnswerMachineDetectionConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` enableAnswerMachineDetection
+
+instance Prelude.NFData AnswerMachineDetectionConfig where
+  rnf AnswerMachineDetectionConfig' {..} =
+    Prelude.rnf enableAnswerMachineDetection
+
+instance Data.ToJSON AnswerMachineDetectionConfig where
+  toJSON AnswerMachineDetectionConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "enableAnswerMachineDetection"
+                  Data..= enableAnswerMachineDetection
+              )
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCampaigns/Types/Campaign.hs b/gen/Amazonka/ConnectCampaigns/Types/Campaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/Campaign.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.Types.Campaign
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.Campaign where
+
+import Amazonka.ConnectCampaigns.Types.DialerConfig
+import Amazonka.ConnectCampaigns.Types.OutboundCallConfig
+import qualified 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 Amazon Connect campaign.
+--
+-- /See:/ 'newCampaign' smart constructor.
+data Campaign = Campaign'
+  { tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    arn :: Prelude.Text,
+    connectInstanceId :: Prelude.Text,
+    dialerConfig :: DialerConfig,
+    id :: Prelude.Text,
+    name :: Prelude.Text,
+    outboundCallConfig :: OutboundCallConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Campaign' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'campaign_tags' - Undocumented member.
+--
+-- 'arn', 'campaign_arn' - Undocumented member.
+--
+-- 'connectInstanceId', 'campaign_connectInstanceId' - Undocumented member.
+--
+-- 'dialerConfig', 'campaign_dialerConfig' - Undocumented member.
+--
+-- 'id', 'campaign_id' - Undocumented member.
+--
+-- 'name', 'campaign_name' - Undocumented member.
+--
+-- 'outboundCallConfig', 'campaign_outboundCallConfig' - Undocumented member.
+newCampaign ::
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'connectInstanceId'
+  Prelude.Text ->
+  -- | 'dialerConfig'
+  DialerConfig ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'outboundCallConfig'
+  OutboundCallConfig ->
+  Campaign
+newCampaign
+  pArn_
+  pConnectInstanceId_
+  pDialerConfig_
+  pId_
+  pName_
+  pOutboundCallConfig_ =
+    Campaign'
+      { tags = Prelude.Nothing,
+        arn = pArn_,
+        connectInstanceId = pConnectInstanceId_,
+        dialerConfig = pDialerConfig_,
+        id = pId_,
+        name = pName_,
+        outboundCallConfig = pOutboundCallConfig_
+      }
+
+-- | Undocumented member.
+campaign_tags :: Lens.Lens' Campaign (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+campaign_tags = Lens.lens (\Campaign' {tags} -> tags) (\s@Campaign' {} a -> s {tags = a} :: Campaign) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+campaign_arn :: Lens.Lens' Campaign Prelude.Text
+campaign_arn = Lens.lens (\Campaign' {arn} -> arn) (\s@Campaign' {} a -> s {arn = a} :: Campaign)
+
+-- | Undocumented member.
+campaign_connectInstanceId :: Lens.Lens' Campaign Prelude.Text
+campaign_connectInstanceId = Lens.lens (\Campaign' {connectInstanceId} -> connectInstanceId) (\s@Campaign' {} a -> s {connectInstanceId = a} :: Campaign)
+
+-- | Undocumented member.
+campaign_dialerConfig :: Lens.Lens' Campaign DialerConfig
+campaign_dialerConfig = Lens.lens (\Campaign' {dialerConfig} -> dialerConfig) (\s@Campaign' {} a -> s {dialerConfig = a} :: Campaign)
+
+-- | Undocumented member.
+campaign_id :: Lens.Lens' Campaign Prelude.Text
+campaign_id = Lens.lens (\Campaign' {id} -> id) (\s@Campaign' {} a -> s {id = a} :: Campaign)
+
+-- | Undocumented member.
+campaign_name :: Lens.Lens' Campaign Prelude.Text
+campaign_name = Lens.lens (\Campaign' {name} -> name) (\s@Campaign' {} a -> s {name = a} :: Campaign)
+
+-- | Undocumented member.
+campaign_outboundCallConfig :: Lens.Lens' Campaign OutboundCallConfig
+campaign_outboundCallConfig = Lens.lens (\Campaign' {outboundCallConfig} -> outboundCallConfig) (\s@Campaign' {} a -> s {outboundCallConfig = a} :: Campaign)
+
+instance Data.FromJSON Campaign where
+  parseJSON =
+    Data.withObject
+      "Campaign"
+      ( \x ->
+          Campaign'
+            Prelude.<$> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "arn")
+            Prelude.<*> (x Data..: "connectInstanceId")
+            Prelude.<*> (x Data..: "dialerConfig")
+            Prelude.<*> (x Data..: "id")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "outboundCallConfig")
+      )
+
+instance Prelude.Hashable Campaign where
+  hashWithSalt _salt Campaign' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` connectInstanceId
+      `Prelude.hashWithSalt` dialerConfig
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` outboundCallConfig
+
+instance Prelude.NFData Campaign where
+  rnf Campaign' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf connectInstanceId
+      `Prelude.seq` Prelude.rnf dialerConfig
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf outboundCallConfig
diff --git a/gen/Amazonka/ConnectCampaigns/Types/CampaignFilters.hs b/gen/Amazonka/ConnectCampaigns/Types/CampaignFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/CampaignFilters.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.ConnectCampaigns.Types.CampaignFilters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.CampaignFilters where
+
+import Amazonka.ConnectCampaigns.Types.InstanceIdFilter
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Filter model by type
+--
+-- /See:/ 'newCampaignFilters' smart constructor.
+data CampaignFilters = CampaignFilters'
+  { instanceIdFilter :: Prelude.Maybe InstanceIdFilter
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CampaignFilters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceIdFilter', 'campaignFilters_instanceIdFilter' - Undocumented member.
+newCampaignFilters ::
+  CampaignFilters
+newCampaignFilters =
+  CampaignFilters'
+    { instanceIdFilter =
+        Prelude.Nothing
+    }
+
+-- | Undocumented member.
+campaignFilters_instanceIdFilter :: Lens.Lens' CampaignFilters (Prelude.Maybe InstanceIdFilter)
+campaignFilters_instanceIdFilter = Lens.lens (\CampaignFilters' {instanceIdFilter} -> instanceIdFilter) (\s@CampaignFilters' {} a -> s {instanceIdFilter = a} :: CampaignFilters)
+
+instance Prelude.Hashable CampaignFilters where
+  hashWithSalt _salt CampaignFilters' {..} =
+    _salt `Prelude.hashWithSalt` instanceIdFilter
+
+instance Prelude.NFData CampaignFilters where
+  rnf CampaignFilters' {..} =
+    Prelude.rnf instanceIdFilter
+
+instance Data.ToJSON CampaignFilters where
+  toJSON CampaignFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("instanceIdFilter" Data..=)
+              Prelude.<$> instanceIdFilter
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCampaigns/Types/CampaignState.hs b/gen/Amazonka/ConnectCampaigns/Types/CampaignState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/CampaignState.hs
@@ -0,0 +1,87 @@
+{-# 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.ConnectCampaigns.Types.CampaignState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.CampaignState
+  ( CampaignState
+      ( ..,
+        CampaignState_Failed,
+        CampaignState_Initialized,
+        CampaignState_Paused,
+        CampaignState_Running,
+        CampaignState_Stopped
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | State of a campaign
+newtype CampaignState = CampaignState'
+  { fromCampaignState ::
+      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 CampaignState_Failed :: CampaignState
+pattern CampaignState_Failed = CampaignState' "Failed"
+
+pattern CampaignState_Initialized :: CampaignState
+pattern CampaignState_Initialized = CampaignState' "Initialized"
+
+pattern CampaignState_Paused :: CampaignState
+pattern CampaignState_Paused = CampaignState' "Paused"
+
+pattern CampaignState_Running :: CampaignState
+pattern CampaignState_Running = CampaignState' "Running"
+
+pattern CampaignState_Stopped :: CampaignState
+pattern CampaignState_Stopped = CampaignState' "Stopped"
+
+{-# COMPLETE
+  CampaignState_Failed,
+  CampaignState_Initialized,
+  CampaignState_Paused,
+  CampaignState_Running,
+  CampaignState_Stopped,
+  CampaignState'
+  #-}
diff --git a/gen/Amazonka/ConnectCampaigns/Types/CampaignSummary.hs b/gen/Amazonka/ConnectCampaigns/Types/CampaignSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/CampaignSummary.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.Types.CampaignSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.CampaignSummary where
+
+import qualified 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 Amazon Connect campaign summary.
+--
+-- /See:/ 'newCampaignSummary' smart constructor.
+data CampaignSummary = CampaignSummary'
+  { arn :: Prelude.Text,
+    connectInstanceId :: Prelude.Text,
+    id :: Prelude.Text,
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CampaignSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'campaignSummary_arn' - Undocumented member.
+--
+-- 'connectInstanceId', 'campaignSummary_connectInstanceId' - Undocumented member.
+--
+-- 'id', 'campaignSummary_id' - Undocumented member.
+--
+-- 'name', 'campaignSummary_name' - Undocumented member.
+newCampaignSummary ::
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'connectInstanceId'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  CampaignSummary
+newCampaignSummary
+  pArn_
+  pConnectInstanceId_
+  pId_
+  pName_ =
+    CampaignSummary'
+      { arn = pArn_,
+        connectInstanceId = pConnectInstanceId_,
+        id = pId_,
+        name = pName_
+      }
+
+-- | Undocumented member.
+campaignSummary_arn :: Lens.Lens' CampaignSummary Prelude.Text
+campaignSummary_arn = Lens.lens (\CampaignSummary' {arn} -> arn) (\s@CampaignSummary' {} a -> s {arn = a} :: CampaignSummary)
+
+-- | Undocumented member.
+campaignSummary_connectInstanceId :: Lens.Lens' CampaignSummary Prelude.Text
+campaignSummary_connectInstanceId = Lens.lens (\CampaignSummary' {connectInstanceId} -> connectInstanceId) (\s@CampaignSummary' {} a -> s {connectInstanceId = a} :: CampaignSummary)
+
+-- | Undocumented member.
+campaignSummary_id :: Lens.Lens' CampaignSummary Prelude.Text
+campaignSummary_id = Lens.lens (\CampaignSummary' {id} -> id) (\s@CampaignSummary' {} a -> s {id = a} :: CampaignSummary)
+
+-- | Undocumented member.
+campaignSummary_name :: Lens.Lens' CampaignSummary Prelude.Text
+campaignSummary_name = Lens.lens (\CampaignSummary' {name} -> name) (\s@CampaignSummary' {} a -> s {name = a} :: CampaignSummary)
+
+instance Data.FromJSON CampaignSummary where
+  parseJSON =
+    Data.withObject
+      "CampaignSummary"
+      ( \x ->
+          CampaignSummary'
+            Prelude.<$> (x Data..: "arn")
+            Prelude.<*> (x Data..: "connectInstanceId")
+            Prelude.<*> (x Data..: "id")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable CampaignSummary where
+  hashWithSalt _salt CampaignSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` connectInstanceId
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CampaignSummary where
+  rnf CampaignSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf connectInstanceId
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ConnectCampaigns/Types/DialRequest.hs b/gen/Amazonka/ConnectCampaigns/Types/DialRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/DialRequest.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.Types.DialRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.DialRequest where
+
+import qualified 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 dial request for a campaign.
+--
+-- /See:/ 'newDialRequest' smart constructor.
+data DialRequest = DialRequest'
+  { attributes :: Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text),
+    clientToken :: Prelude.Text,
+    expirationTime :: Data.ISO8601,
+    phoneNumber :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DialRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'dialRequest_attributes' - Undocumented member.
+--
+-- 'clientToken', 'dialRequest_clientToken' - Undocumented member.
+--
+-- 'expirationTime', 'dialRequest_expirationTime' - Undocumented member.
+--
+-- 'phoneNumber', 'dialRequest_phoneNumber' - Undocumented member.
+newDialRequest ::
+  -- | 'clientToken'
+  Prelude.Text ->
+  -- | 'expirationTime'
+  Prelude.UTCTime ->
+  -- | 'phoneNumber'
+  Prelude.Text ->
+  DialRequest
+newDialRequest
+  pClientToken_
+  pExpirationTime_
+  pPhoneNumber_ =
+    DialRequest'
+      { attributes = Prelude.mempty,
+        clientToken = pClientToken_,
+        expirationTime = Data._Time Lens.# pExpirationTime_,
+        phoneNumber = Data._Sensitive Lens.# pPhoneNumber_
+      }
+
+-- | Undocumented member.
+dialRequest_attributes :: Lens.Lens' DialRequest (Prelude.HashMap Prelude.Text Prelude.Text)
+dialRequest_attributes = Lens.lens (\DialRequest' {attributes} -> attributes) (\s@DialRequest' {} a -> s {attributes = a} :: DialRequest) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+-- | Undocumented member.
+dialRequest_clientToken :: Lens.Lens' DialRequest Prelude.Text
+dialRequest_clientToken = Lens.lens (\DialRequest' {clientToken} -> clientToken) (\s@DialRequest' {} a -> s {clientToken = a} :: DialRequest)
+
+-- | Undocumented member.
+dialRequest_expirationTime :: Lens.Lens' DialRequest Prelude.UTCTime
+dialRequest_expirationTime = Lens.lens (\DialRequest' {expirationTime} -> expirationTime) (\s@DialRequest' {} a -> s {expirationTime = a} :: DialRequest) Prelude.. Data._Time
+
+-- | Undocumented member.
+dialRequest_phoneNumber :: Lens.Lens' DialRequest Prelude.Text
+dialRequest_phoneNumber = Lens.lens (\DialRequest' {phoneNumber} -> phoneNumber) (\s@DialRequest' {} a -> s {phoneNumber = a} :: DialRequest) Prelude.. Data._Sensitive
+
+instance Prelude.Hashable DialRequest where
+  hashWithSalt _salt DialRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` expirationTime
+      `Prelude.hashWithSalt` phoneNumber
+
+instance Prelude.NFData DialRequest where
+  rnf DialRequest' {..} =
+    Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf expirationTime
+      `Prelude.seq` Prelude.rnf phoneNumber
+
+instance Data.ToJSON DialRequest where
+  toJSON DialRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("attributes" Data..= attributes),
+            Prelude.Just ("clientToken" Data..= clientToken),
+            Prelude.Just
+              ("expirationTime" Data..= expirationTime),
+            Prelude.Just ("phoneNumber" Data..= phoneNumber)
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCampaigns/Types/DialerConfig.hs b/gen/Amazonka/ConnectCampaigns/Types/DialerConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/DialerConfig.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.ConnectCampaigns.Types.DialerConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.DialerConfig where
+
+import Amazonka.ConnectCampaigns.Types.PredictiveDialerConfig
+import Amazonka.ConnectCampaigns.Types.ProgressiveDialerConfig
+import qualified 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 possible types of dialer config parameters
+--
+-- /See:/ 'newDialerConfig' smart constructor.
+data DialerConfig = DialerConfig'
+  { predictiveDialerConfig :: Prelude.Maybe PredictiveDialerConfig,
+    progressiveDialerConfig :: Prelude.Maybe ProgressiveDialerConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DialerConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'predictiveDialerConfig', 'dialerConfig_predictiveDialerConfig' - Undocumented member.
+--
+-- 'progressiveDialerConfig', 'dialerConfig_progressiveDialerConfig' - Undocumented member.
+newDialerConfig ::
+  DialerConfig
+newDialerConfig =
+  DialerConfig'
+    { predictiveDialerConfig =
+        Prelude.Nothing,
+      progressiveDialerConfig = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+dialerConfig_predictiveDialerConfig :: Lens.Lens' DialerConfig (Prelude.Maybe PredictiveDialerConfig)
+dialerConfig_predictiveDialerConfig = Lens.lens (\DialerConfig' {predictiveDialerConfig} -> predictiveDialerConfig) (\s@DialerConfig' {} a -> s {predictiveDialerConfig = a} :: DialerConfig)
+
+-- | Undocumented member.
+dialerConfig_progressiveDialerConfig :: Lens.Lens' DialerConfig (Prelude.Maybe ProgressiveDialerConfig)
+dialerConfig_progressiveDialerConfig = Lens.lens (\DialerConfig' {progressiveDialerConfig} -> progressiveDialerConfig) (\s@DialerConfig' {} a -> s {progressiveDialerConfig = a} :: DialerConfig)
+
+instance Data.FromJSON DialerConfig where
+  parseJSON =
+    Data.withObject
+      "DialerConfig"
+      ( \x ->
+          DialerConfig'
+            Prelude.<$> (x Data..:? "predictiveDialerConfig")
+            Prelude.<*> (x Data..:? "progressiveDialerConfig")
+      )
+
+instance Prelude.Hashable DialerConfig where
+  hashWithSalt _salt DialerConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` predictiveDialerConfig
+      `Prelude.hashWithSalt` progressiveDialerConfig
+
+instance Prelude.NFData DialerConfig where
+  rnf DialerConfig' {..} =
+    Prelude.rnf predictiveDialerConfig
+      `Prelude.seq` Prelude.rnf progressiveDialerConfig
+
+instance Data.ToJSON DialerConfig where
+  toJSON DialerConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("predictiveDialerConfig" Data..=)
+              Prelude.<$> predictiveDialerConfig,
+            ("progressiveDialerConfig" Data..=)
+              Prelude.<$> progressiveDialerConfig
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCampaigns/Types/EncryptionConfig.hs b/gen/Amazonka/ConnectCampaigns/Types/EncryptionConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/EncryptionConfig.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.Types.EncryptionConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.EncryptionConfig where
+
+import Amazonka.ConnectCampaigns.Types.EncryptionType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Encryption config for Connect Instance. Note that sensitive data will
+-- always be encrypted. If disabled, service will perform encryption with
+-- its own key. If enabled, a KMS key id needs to be provided and KMS
+-- charges will apply. KMS is only type supported
+--
+-- /See:/ 'newEncryptionConfig' smart constructor.
+data EncryptionConfig = EncryptionConfig'
+  { encryptionType :: Prelude.Maybe EncryptionType,
+    keyArn :: Prelude.Maybe Prelude.Text,
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EncryptionConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'encryptionType', 'encryptionConfig_encryptionType' - Undocumented member.
+--
+-- 'keyArn', 'encryptionConfig_keyArn' - Undocumented member.
+--
+-- 'enabled', 'encryptionConfig_enabled' - Undocumented member.
+newEncryptionConfig ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  EncryptionConfig
+newEncryptionConfig pEnabled_ =
+  EncryptionConfig'
+    { encryptionType = Prelude.Nothing,
+      keyArn = Prelude.Nothing,
+      enabled = pEnabled_
+    }
+
+-- | Undocumented member.
+encryptionConfig_encryptionType :: Lens.Lens' EncryptionConfig (Prelude.Maybe EncryptionType)
+encryptionConfig_encryptionType = Lens.lens (\EncryptionConfig' {encryptionType} -> encryptionType) (\s@EncryptionConfig' {} a -> s {encryptionType = a} :: EncryptionConfig)
+
+-- | Undocumented member.
+encryptionConfig_keyArn :: Lens.Lens' EncryptionConfig (Prelude.Maybe Prelude.Text)
+encryptionConfig_keyArn = Lens.lens (\EncryptionConfig' {keyArn} -> keyArn) (\s@EncryptionConfig' {} a -> s {keyArn = a} :: EncryptionConfig)
+
+-- | Undocumented member.
+encryptionConfig_enabled :: Lens.Lens' EncryptionConfig Prelude.Bool
+encryptionConfig_enabled = Lens.lens (\EncryptionConfig' {enabled} -> enabled) (\s@EncryptionConfig' {} a -> s {enabled = a} :: EncryptionConfig)
+
+instance Data.FromJSON EncryptionConfig where
+  parseJSON =
+    Data.withObject
+      "EncryptionConfig"
+      ( \x ->
+          EncryptionConfig'
+            Prelude.<$> (x Data..:? "encryptionType")
+            Prelude.<*> (x Data..:? "keyArn")
+            Prelude.<*> (x Data..: "enabled")
+      )
+
+instance Prelude.Hashable EncryptionConfig where
+  hashWithSalt _salt EncryptionConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` encryptionType
+      `Prelude.hashWithSalt` keyArn
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData EncryptionConfig where
+  rnf EncryptionConfig' {..} =
+    Prelude.rnf encryptionType
+      `Prelude.seq` Prelude.rnf keyArn
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToJSON EncryptionConfig where
+  toJSON EncryptionConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("encryptionType" Data..=)
+              Prelude.<$> encryptionType,
+            ("keyArn" Data..=) Prelude.<$> keyArn,
+            Prelude.Just ("enabled" Data..= enabled)
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCampaigns/Types/EncryptionType.hs b/gen/Amazonka/ConnectCampaigns/Types/EncryptionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/EncryptionType.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.Types.EncryptionType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.EncryptionType
+  ( EncryptionType
+      ( ..,
+        EncryptionType_KMS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Server-side encryption type.
+newtype EncryptionType = EncryptionType'
+  { fromEncryptionType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EncryptionType_KMS :: EncryptionType
+pattern EncryptionType_KMS = EncryptionType' "KMS"
+
+{-# COMPLETE
+  EncryptionType_KMS,
+  EncryptionType'
+  #-}
diff --git a/gen/Amazonka/ConnectCampaigns/Types/FailedCampaignStateResponse.hs b/gen/Amazonka/ConnectCampaigns/Types/FailedCampaignStateResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/FailedCampaignStateResponse.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.Types.FailedCampaignStateResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.FailedCampaignStateResponse where
+
+import Amazonka.ConnectCampaigns.Types.GetCampaignStateBatchFailureCode
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Failed response of campaign state
+--
+-- /See:/ 'newFailedCampaignStateResponse' smart constructor.
+data FailedCampaignStateResponse = FailedCampaignStateResponse'
+  { campaignId :: Prelude.Maybe Prelude.Text,
+    failureCode :: Prelude.Maybe GetCampaignStateBatchFailureCode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FailedCampaignStateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'campaignId', 'failedCampaignStateResponse_campaignId' - Undocumented member.
+--
+-- 'failureCode', 'failedCampaignStateResponse_failureCode' - Undocumented member.
+newFailedCampaignStateResponse ::
+  FailedCampaignStateResponse
+newFailedCampaignStateResponse =
+  FailedCampaignStateResponse'
+    { campaignId =
+        Prelude.Nothing,
+      failureCode = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+failedCampaignStateResponse_campaignId :: Lens.Lens' FailedCampaignStateResponse (Prelude.Maybe Prelude.Text)
+failedCampaignStateResponse_campaignId = Lens.lens (\FailedCampaignStateResponse' {campaignId} -> campaignId) (\s@FailedCampaignStateResponse' {} a -> s {campaignId = a} :: FailedCampaignStateResponse)
+
+-- | Undocumented member.
+failedCampaignStateResponse_failureCode :: Lens.Lens' FailedCampaignStateResponse (Prelude.Maybe GetCampaignStateBatchFailureCode)
+failedCampaignStateResponse_failureCode = Lens.lens (\FailedCampaignStateResponse' {failureCode} -> failureCode) (\s@FailedCampaignStateResponse' {} a -> s {failureCode = a} :: FailedCampaignStateResponse)
+
+instance Data.FromJSON FailedCampaignStateResponse where
+  parseJSON =
+    Data.withObject
+      "FailedCampaignStateResponse"
+      ( \x ->
+          FailedCampaignStateResponse'
+            Prelude.<$> (x Data..:? "campaignId")
+            Prelude.<*> (x Data..:? "failureCode")
+      )
+
+instance Prelude.Hashable FailedCampaignStateResponse where
+  hashWithSalt _salt FailedCampaignStateResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` campaignId
+      `Prelude.hashWithSalt` failureCode
+
+instance Prelude.NFData FailedCampaignStateResponse where
+  rnf FailedCampaignStateResponse' {..} =
+    Prelude.rnf campaignId
+      `Prelude.seq` Prelude.rnf failureCode
diff --git a/gen/Amazonka/ConnectCampaigns/Types/FailedRequest.hs b/gen/Amazonka/ConnectCampaigns/Types/FailedRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/FailedRequest.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.Types.FailedRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.FailedRequest where
+
+import Amazonka.ConnectCampaigns.Types.FailureCode
+import qualified 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 failed request identified by the unique client token.
+--
+-- /See:/ 'newFailedRequest' smart constructor.
+data FailedRequest = FailedRequest'
+  { clientToken :: Prelude.Maybe Prelude.Text,
+    failureCode :: Prelude.Maybe FailureCode,
+    id :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FailedRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'failedRequest_clientToken' - Undocumented member.
+--
+-- 'failureCode', 'failedRequest_failureCode' - Undocumented member.
+--
+-- 'id', 'failedRequest_id' - Undocumented member.
+newFailedRequest ::
+  FailedRequest
+newFailedRequest =
+  FailedRequest'
+    { clientToken = Prelude.Nothing,
+      failureCode = Prelude.Nothing,
+      id = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+failedRequest_clientToken :: Lens.Lens' FailedRequest (Prelude.Maybe Prelude.Text)
+failedRequest_clientToken = Lens.lens (\FailedRequest' {clientToken} -> clientToken) (\s@FailedRequest' {} a -> s {clientToken = a} :: FailedRequest)
+
+-- | Undocumented member.
+failedRequest_failureCode :: Lens.Lens' FailedRequest (Prelude.Maybe FailureCode)
+failedRequest_failureCode = Lens.lens (\FailedRequest' {failureCode} -> failureCode) (\s@FailedRequest' {} a -> s {failureCode = a} :: FailedRequest)
+
+-- | Undocumented member.
+failedRequest_id :: Lens.Lens' FailedRequest (Prelude.Maybe Prelude.Text)
+failedRequest_id = Lens.lens (\FailedRequest' {id} -> id) (\s@FailedRequest' {} a -> s {id = a} :: FailedRequest)
+
+instance Data.FromJSON FailedRequest where
+  parseJSON =
+    Data.withObject
+      "FailedRequest"
+      ( \x ->
+          FailedRequest'
+            Prelude.<$> (x Data..:? "clientToken")
+            Prelude.<*> (x Data..:? "failureCode")
+            Prelude.<*> (x Data..:? "id")
+      )
+
+instance Prelude.Hashable FailedRequest where
+  hashWithSalt _salt FailedRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` failureCode
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData FailedRequest where
+  rnf FailedRequest' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf id
diff --git a/gen/Amazonka/ConnectCampaigns/Types/FailureCode.hs b/gen/Amazonka/ConnectCampaigns/Types/FailureCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/FailureCode.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.Types.FailureCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.FailureCode
+  ( FailureCode
+      ( ..,
+        FailureCode_InvalidInput,
+        FailureCode_RequestThrottled,
+        FailureCode_UnknownError
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A predefined code indicating the error that caused the failure.
+newtype FailureCode = FailureCode'
+  { fromFailureCode ::
+      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 FailureCode_InvalidInput :: FailureCode
+pattern FailureCode_InvalidInput = FailureCode' "InvalidInput"
+
+pattern FailureCode_RequestThrottled :: FailureCode
+pattern FailureCode_RequestThrottled = FailureCode' "RequestThrottled"
+
+pattern FailureCode_UnknownError :: FailureCode
+pattern FailureCode_UnknownError = FailureCode' "UnknownError"
+
+{-# COMPLETE
+  FailureCode_InvalidInput,
+  FailureCode_RequestThrottled,
+  FailureCode_UnknownError,
+  FailureCode'
+  #-}
diff --git a/gen/Amazonka/ConnectCampaigns/Types/GetCampaignStateBatchFailureCode.hs b/gen/Amazonka/ConnectCampaigns/Types/GetCampaignStateBatchFailureCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/GetCampaignStateBatchFailureCode.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.ConnectCampaigns.Types.GetCampaignStateBatchFailureCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.GetCampaignStateBatchFailureCode
+  ( GetCampaignStateBatchFailureCode
+      ( ..,
+        GetCampaignStateBatchFailureCode_ResourceNotFound,
+        GetCampaignStateBatchFailureCode_UnknownError
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A predefined code indicating the error that caused the failure in
+-- getting state of campaigns
+newtype GetCampaignStateBatchFailureCode = GetCampaignStateBatchFailureCode'
+  { fromGetCampaignStateBatchFailureCode ::
+      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 GetCampaignStateBatchFailureCode_ResourceNotFound :: GetCampaignStateBatchFailureCode
+pattern GetCampaignStateBatchFailureCode_ResourceNotFound = GetCampaignStateBatchFailureCode' "ResourceNotFound"
+
+pattern GetCampaignStateBatchFailureCode_UnknownError :: GetCampaignStateBatchFailureCode
+pattern GetCampaignStateBatchFailureCode_UnknownError = GetCampaignStateBatchFailureCode' "UnknownError"
+
+{-# COMPLETE
+  GetCampaignStateBatchFailureCode_ResourceNotFound,
+  GetCampaignStateBatchFailureCode_UnknownError,
+  GetCampaignStateBatchFailureCode'
+  #-}
diff --git a/gen/Amazonka/ConnectCampaigns/Types/InstanceConfig.hs b/gen/Amazonka/ConnectCampaigns/Types/InstanceConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/InstanceConfig.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.ConnectCampaigns.Types.InstanceConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.InstanceConfig where
+
+import Amazonka.ConnectCampaigns.Types.EncryptionConfig
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Instance config object
+--
+-- /See:/ 'newInstanceConfig' smart constructor.
+data InstanceConfig = InstanceConfig'
+  { connectInstanceId :: Prelude.Text,
+    encryptionConfig :: EncryptionConfig,
+    serviceLinkedRoleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectInstanceId', 'instanceConfig_connectInstanceId' - Undocumented member.
+--
+-- 'encryptionConfig', 'instanceConfig_encryptionConfig' - Undocumented member.
+--
+-- 'serviceLinkedRoleArn', 'instanceConfig_serviceLinkedRoleArn' - Undocumented member.
+newInstanceConfig ::
+  -- | 'connectInstanceId'
+  Prelude.Text ->
+  -- | 'encryptionConfig'
+  EncryptionConfig ->
+  -- | 'serviceLinkedRoleArn'
+  Prelude.Text ->
+  InstanceConfig
+newInstanceConfig
+  pConnectInstanceId_
+  pEncryptionConfig_
+  pServiceLinkedRoleArn_ =
+    InstanceConfig'
+      { connectInstanceId =
+          pConnectInstanceId_,
+        encryptionConfig = pEncryptionConfig_,
+        serviceLinkedRoleArn = pServiceLinkedRoleArn_
+      }
+
+-- | Undocumented member.
+instanceConfig_connectInstanceId :: Lens.Lens' InstanceConfig Prelude.Text
+instanceConfig_connectInstanceId = Lens.lens (\InstanceConfig' {connectInstanceId} -> connectInstanceId) (\s@InstanceConfig' {} a -> s {connectInstanceId = a} :: InstanceConfig)
+
+-- | Undocumented member.
+instanceConfig_encryptionConfig :: Lens.Lens' InstanceConfig EncryptionConfig
+instanceConfig_encryptionConfig = Lens.lens (\InstanceConfig' {encryptionConfig} -> encryptionConfig) (\s@InstanceConfig' {} a -> s {encryptionConfig = a} :: InstanceConfig)
+
+-- | Undocumented member.
+instanceConfig_serviceLinkedRoleArn :: Lens.Lens' InstanceConfig Prelude.Text
+instanceConfig_serviceLinkedRoleArn = Lens.lens (\InstanceConfig' {serviceLinkedRoleArn} -> serviceLinkedRoleArn) (\s@InstanceConfig' {} a -> s {serviceLinkedRoleArn = a} :: InstanceConfig)
+
+instance Data.FromJSON InstanceConfig where
+  parseJSON =
+    Data.withObject
+      "InstanceConfig"
+      ( \x ->
+          InstanceConfig'
+            Prelude.<$> (x Data..: "connectInstanceId")
+            Prelude.<*> (x Data..: "encryptionConfig")
+            Prelude.<*> (x Data..: "serviceLinkedRoleArn")
+      )
+
+instance Prelude.Hashable InstanceConfig where
+  hashWithSalt _salt InstanceConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectInstanceId
+      `Prelude.hashWithSalt` encryptionConfig
+      `Prelude.hashWithSalt` serviceLinkedRoleArn
+
+instance Prelude.NFData InstanceConfig where
+  rnf InstanceConfig' {..} =
+    Prelude.rnf connectInstanceId
+      `Prelude.seq` Prelude.rnf encryptionConfig
+      `Prelude.seq` Prelude.rnf serviceLinkedRoleArn
diff --git a/gen/Amazonka/ConnectCampaigns/Types/InstanceIdFilter.hs b/gen/Amazonka/ConnectCampaigns/Types/InstanceIdFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/InstanceIdFilter.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.Types.InstanceIdFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.InstanceIdFilter where
+
+import Amazonka.ConnectCampaigns.Types.InstanceIdFilterOperator
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Connect instance identifier filter
+--
+-- /See:/ 'newInstanceIdFilter' smart constructor.
+data InstanceIdFilter = InstanceIdFilter'
+  { operator :: InstanceIdFilterOperator,
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceIdFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'operator', 'instanceIdFilter_operator' - Undocumented member.
+--
+-- 'value', 'instanceIdFilter_value' - Undocumented member.
+newInstanceIdFilter ::
+  -- | 'operator'
+  InstanceIdFilterOperator ->
+  -- | 'value'
+  Prelude.Text ->
+  InstanceIdFilter
+newInstanceIdFilter pOperator_ pValue_ =
+  InstanceIdFilter'
+    { operator = pOperator_,
+      value = pValue_
+    }
+
+-- | Undocumented member.
+instanceIdFilter_operator :: Lens.Lens' InstanceIdFilter InstanceIdFilterOperator
+instanceIdFilter_operator = Lens.lens (\InstanceIdFilter' {operator} -> operator) (\s@InstanceIdFilter' {} a -> s {operator = a} :: InstanceIdFilter)
+
+-- | Undocumented member.
+instanceIdFilter_value :: Lens.Lens' InstanceIdFilter Prelude.Text
+instanceIdFilter_value = Lens.lens (\InstanceIdFilter' {value} -> value) (\s@InstanceIdFilter' {} a -> s {value = a} :: InstanceIdFilter)
+
+instance Prelude.Hashable InstanceIdFilter where
+  hashWithSalt _salt InstanceIdFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` operator
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData InstanceIdFilter where
+  rnf InstanceIdFilter' {..} =
+    Prelude.rnf operator
+      `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON InstanceIdFilter where
+  toJSON InstanceIdFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("operator" Data..= operator),
+            Prelude.Just ("value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCampaigns/Types/InstanceIdFilterOperator.hs b/gen/Amazonka/ConnectCampaigns/Types/InstanceIdFilterOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/InstanceIdFilterOperator.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.Types.InstanceIdFilterOperator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.InstanceIdFilterOperator
+  ( InstanceIdFilterOperator
+      ( ..,
+        InstanceIdFilterOperator_Eq
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Operators for Connect instance identifier filter
+newtype InstanceIdFilterOperator = InstanceIdFilterOperator'
+  { fromInstanceIdFilterOperator ::
+      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 InstanceIdFilterOperator_Eq :: InstanceIdFilterOperator
+pattern InstanceIdFilterOperator_Eq = InstanceIdFilterOperator' "Eq"
+
+{-# COMPLETE
+  InstanceIdFilterOperator_Eq,
+  InstanceIdFilterOperator'
+  #-}
diff --git a/gen/Amazonka/ConnectCampaigns/Types/InstanceOnboardingJobFailureCode.hs b/gen/Amazonka/ConnectCampaigns/Types/InstanceOnboardingJobFailureCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/InstanceOnboardingJobFailureCode.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.Types.InstanceOnboardingJobFailureCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.InstanceOnboardingJobFailureCode
+  ( InstanceOnboardingJobFailureCode
+      ( ..,
+        InstanceOnboardingJobFailureCode_EVENT_BRIDGE_ACCESS_DENIED,
+        InstanceOnboardingJobFailureCode_EVENT_BRIDGE_MANAGED_RULE_LIMIT_EXCEEDED,
+        InstanceOnboardingJobFailureCode_IAM_ACCESS_DENIED,
+        InstanceOnboardingJobFailureCode_INTERNAL_FAILURE,
+        InstanceOnboardingJobFailureCode_KMS_ACCESS_DENIED,
+        InstanceOnboardingJobFailureCode_KMS_KEY_NOT_FOUND
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Enumeration of the possible failure codes for instance onboarding job
+newtype InstanceOnboardingJobFailureCode = InstanceOnboardingJobFailureCode'
+  { fromInstanceOnboardingJobFailureCode ::
+      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 InstanceOnboardingJobFailureCode_EVENT_BRIDGE_ACCESS_DENIED :: InstanceOnboardingJobFailureCode
+pattern InstanceOnboardingJobFailureCode_EVENT_BRIDGE_ACCESS_DENIED = InstanceOnboardingJobFailureCode' "EVENT_BRIDGE_ACCESS_DENIED"
+
+pattern InstanceOnboardingJobFailureCode_EVENT_BRIDGE_MANAGED_RULE_LIMIT_EXCEEDED :: InstanceOnboardingJobFailureCode
+pattern InstanceOnboardingJobFailureCode_EVENT_BRIDGE_MANAGED_RULE_LIMIT_EXCEEDED = InstanceOnboardingJobFailureCode' "EVENT_BRIDGE_MANAGED_RULE_LIMIT_EXCEEDED"
+
+pattern InstanceOnboardingJobFailureCode_IAM_ACCESS_DENIED :: InstanceOnboardingJobFailureCode
+pattern InstanceOnboardingJobFailureCode_IAM_ACCESS_DENIED = InstanceOnboardingJobFailureCode' "IAM_ACCESS_DENIED"
+
+pattern InstanceOnboardingJobFailureCode_INTERNAL_FAILURE :: InstanceOnboardingJobFailureCode
+pattern InstanceOnboardingJobFailureCode_INTERNAL_FAILURE = InstanceOnboardingJobFailureCode' "INTERNAL_FAILURE"
+
+pattern InstanceOnboardingJobFailureCode_KMS_ACCESS_DENIED :: InstanceOnboardingJobFailureCode
+pattern InstanceOnboardingJobFailureCode_KMS_ACCESS_DENIED = InstanceOnboardingJobFailureCode' "KMS_ACCESS_DENIED"
+
+pattern InstanceOnboardingJobFailureCode_KMS_KEY_NOT_FOUND :: InstanceOnboardingJobFailureCode
+pattern InstanceOnboardingJobFailureCode_KMS_KEY_NOT_FOUND = InstanceOnboardingJobFailureCode' "KMS_KEY_NOT_FOUND"
+
+{-# COMPLETE
+  InstanceOnboardingJobFailureCode_EVENT_BRIDGE_ACCESS_DENIED,
+  InstanceOnboardingJobFailureCode_EVENT_BRIDGE_MANAGED_RULE_LIMIT_EXCEEDED,
+  InstanceOnboardingJobFailureCode_IAM_ACCESS_DENIED,
+  InstanceOnboardingJobFailureCode_INTERNAL_FAILURE,
+  InstanceOnboardingJobFailureCode_KMS_ACCESS_DENIED,
+  InstanceOnboardingJobFailureCode_KMS_KEY_NOT_FOUND,
+  InstanceOnboardingJobFailureCode'
+  #-}
diff --git a/gen/Amazonka/ConnectCampaigns/Types/InstanceOnboardingJobStatus.hs b/gen/Amazonka/ConnectCampaigns/Types/InstanceOnboardingJobStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/InstanceOnboardingJobStatus.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.ConnectCampaigns.Types.InstanceOnboardingJobStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.InstanceOnboardingJobStatus where
+
+import Amazonka.ConnectCampaigns.Types.InstanceOnboardingJobFailureCode
+import Amazonka.ConnectCampaigns.Types.InstanceOnboardingJobStatusCode
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Instance onboarding job status object
+--
+-- /See:/ 'newInstanceOnboardingJobStatus' smart constructor.
+data InstanceOnboardingJobStatus = InstanceOnboardingJobStatus'
+  { failureCode :: Prelude.Maybe InstanceOnboardingJobFailureCode,
+    connectInstanceId :: Prelude.Text,
+    status :: InstanceOnboardingJobStatusCode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceOnboardingJobStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failureCode', 'instanceOnboardingJobStatus_failureCode' - Undocumented member.
+--
+-- 'connectInstanceId', 'instanceOnboardingJobStatus_connectInstanceId' - Undocumented member.
+--
+-- 'status', 'instanceOnboardingJobStatus_status' - Undocumented member.
+newInstanceOnboardingJobStatus ::
+  -- | 'connectInstanceId'
+  Prelude.Text ->
+  -- | 'status'
+  InstanceOnboardingJobStatusCode ->
+  InstanceOnboardingJobStatus
+newInstanceOnboardingJobStatus
+  pConnectInstanceId_
+  pStatus_ =
+    InstanceOnboardingJobStatus'
+      { failureCode =
+          Prelude.Nothing,
+        connectInstanceId = pConnectInstanceId_,
+        status = pStatus_
+      }
+
+-- | Undocumented member.
+instanceOnboardingJobStatus_failureCode :: Lens.Lens' InstanceOnboardingJobStatus (Prelude.Maybe InstanceOnboardingJobFailureCode)
+instanceOnboardingJobStatus_failureCode = Lens.lens (\InstanceOnboardingJobStatus' {failureCode} -> failureCode) (\s@InstanceOnboardingJobStatus' {} a -> s {failureCode = a} :: InstanceOnboardingJobStatus)
+
+-- | Undocumented member.
+instanceOnboardingJobStatus_connectInstanceId :: Lens.Lens' InstanceOnboardingJobStatus Prelude.Text
+instanceOnboardingJobStatus_connectInstanceId = Lens.lens (\InstanceOnboardingJobStatus' {connectInstanceId} -> connectInstanceId) (\s@InstanceOnboardingJobStatus' {} a -> s {connectInstanceId = a} :: InstanceOnboardingJobStatus)
+
+-- | Undocumented member.
+instanceOnboardingJobStatus_status :: Lens.Lens' InstanceOnboardingJobStatus InstanceOnboardingJobStatusCode
+instanceOnboardingJobStatus_status = Lens.lens (\InstanceOnboardingJobStatus' {status} -> status) (\s@InstanceOnboardingJobStatus' {} a -> s {status = a} :: InstanceOnboardingJobStatus)
+
+instance Data.FromJSON InstanceOnboardingJobStatus where
+  parseJSON =
+    Data.withObject
+      "InstanceOnboardingJobStatus"
+      ( \x ->
+          InstanceOnboardingJobStatus'
+            Prelude.<$> (x Data..:? "failureCode")
+            Prelude.<*> (x Data..: "connectInstanceId")
+            Prelude.<*> (x Data..: "status")
+      )
+
+instance Prelude.Hashable InstanceOnboardingJobStatus where
+  hashWithSalt _salt InstanceOnboardingJobStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` failureCode
+      `Prelude.hashWithSalt` connectInstanceId
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData InstanceOnboardingJobStatus where
+  rnf InstanceOnboardingJobStatus' {..} =
+    Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf connectInstanceId
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/ConnectCampaigns/Types/InstanceOnboardingJobStatusCode.hs b/gen/Amazonka/ConnectCampaigns/Types/InstanceOnboardingJobStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/InstanceOnboardingJobStatusCode.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.Types.InstanceOnboardingJobStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.InstanceOnboardingJobStatusCode
+  ( InstanceOnboardingJobStatusCode
+      ( ..,
+        InstanceOnboardingJobStatusCode_FAILED,
+        InstanceOnboardingJobStatusCode_IN_PROGRESS,
+        InstanceOnboardingJobStatusCode_SUCCEEDED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Enumeration of the possible states for instance onboarding job
+newtype InstanceOnboardingJobStatusCode = InstanceOnboardingJobStatusCode'
+  { fromInstanceOnboardingJobStatusCode ::
+      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 InstanceOnboardingJobStatusCode_FAILED :: InstanceOnboardingJobStatusCode
+pattern InstanceOnboardingJobStatusCode_FAILED = InstanceOnboardingJobStatusCode' "FAILED"
+
+pattern InstanceOnboardingJobStatusCode_IN_PROGRESS :: InstanceOnboardingJobStatusCode
+pattern InstanceOnboardingJobStatusCode_IN_PROGRESS = InstanceOnboardingJobStatusCode' "IN_PROGRESS"
+
+pattern InstanceOnboardingJobStatusCode_SUCCEEDED :: InstanceOnboardingJobStatusCode
+pattern InstanceOnboardingJobStatusCode_SUCCEEDED = InstanceOnboardingJobStatusCode' "SUCCEEDED"
+
+{-# COMPLETE
+  InstanceOnboardingJobStatusCode_FAILED,
+  InstanceOnboardingJobStatusCode_IN_PROGRESS,
+  InstanceOnboardingJobStatusCode_SUCCEEDED,
+  InstanceOnboardingJobStatusCode'
+  #-}
diff --git a/gen/Amazonka/ConnectCampaigns/Types/OutboundCallConfig.hs b/gen/Amazonka/ConnectCampaigns/Types/OutboundCallConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/OutboundCallConfig.hs
@@ -0,0 +1,129 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.Types.OutboundCallConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.OutboundCallConfig where
+
+import Amazonka.ConnectCampaigns.Types.AnswerMachineDetectionConfig
+import qualified 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 configuration used for outbound calls.
+--
+-- /See:/ 'newOutboundCallConfig' smart constructor.
+data OutboundCallConfig = OutboundCallConfig'
+  { answerMachineDetectionConfig :: Prelude.Maybe AnswerMachineDetectionConfig,
+    connectSourcePhoneNumber :: Prelude.Maybe Prelude.Text,
+    connectContactFlowId :: Prelude.Text,
+    connectQueueId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OutboundCallConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'answerMachineDetectionConfig', 'outboundCallConfig_answerMachineDetectionConfig' - Undocumented member.
+--
+-- 'connectSourcePhoneNumber', 'outboundCallConfig_connectSourcePhoneNumber' - Undocumented member.
+--
+-- 'connectContactFlowId', 'outboundCallConfig_connectContactFlowId' - Undocumented member.
+--
+-- 'connectQueueId', 'outboundCallConfig_connectQueueId' - Undocumented member.
+newOutboundCallConfig ::
+  -- | 'connectContactFlowId'
+  Prelude.Text ->
+  -- | 'connectQueueId'
+  Prelude.Text ->
+  OutboundCallConfig
+newOutboundCallConfig
+  pConnectContactFlowId_
+  pConnectQueueId_ =
+    OutboundCallConfig'
+      { answerMachineDetectionConfig =
+          Prelude.Nothing,
+        connectSourcePhoneNumber = Prelude.Nothing,
+        connectContactFlowId = pConnectContactFlowId_,
+        connectQueueId = pConnectQueueId_
+      }
+
+-- | Undocumented member.
+outboundCallConfig_answerMachineDetectionConfig :: Lens.Lens' OutboundCallConfig (Prelude.Maybe AnswerMachineDetectionConfig)
+outboundCallConfig_answerMachineDetectionConfig = Lens.lens (\OutboundCallConfig' {answerMachineDetectionConfig} -> answerMachineDetectionConfig) (\s@OutboundCallConfig' {} a -> s {answerMachineDetectionConfig = a} :: OutboundCallConfig)
+
+-- | Undocumented member.
+outboundCallConfig_connectSourcePhoneNumber :: Lens.Lens' OutboundCallConfig (Prelude.Maybe Prelude.Text)
+outboundCallConfig_connectSourcePhoneNumber = Lens.lens (\OutboundCallConfig' {connectSourcePhoneNumber} -> connectSourcePhoneNumber) (\s@OutboundCallConfig' {} a -> s {connectSourcePhoneNumber = a} :: OutboundCallConfig)
+
+-- | Undocumented member.
+outboundCallConfig_connectContactFlowId :: Lens.Lens' OutboundCallConfig Prelude.Text
+outboundCallConfig_connectContactFlowId = Lens.lens (\OutboundCallConfig' {connectContactFlowId} -> connectContactFlowId) (\s@OutboundCallConfig' {} a -> s {connectContactFlowId = a} :: OutboundCallConfig)
+
+-- | Undocumented member.
+outboundCallConfig_connectQueueId :: Lens.Lens' OutboundCallConfig Prelude.Text
+outboundCallConfig_connectQueueId = Lens.lens (\OutboundCallConfig' {connectQueueId} -> connectQueueId) (\s@OutboundCallConfig' {} a -> s {connectQueueId = a} :: OutboundCallConfig)
+
+instance Data.FromJSON OutboundCallConfig where
+  parseJSON =
+    Data.withObject
+      "OutboundCallConfig"
+      ( \x ->
+          OutboundCallConfig'
+            Prelude.<$> (x Data..:? "answerMachineDetectionConfig")
+            Prelude.<*> (x Data..:? "connectSourcePhoneNumber")
+            Prelude.<*> (x Data..: "connectContactFlowId")
+            Prelude.<*> (x Data..: "connectQueueId")
+      )
+
+instance Prelude.Hashable OutboundCallConfig where
+  hashWithSalt _salt OutboundCallConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` answerMachineDetectionConfig
+      `Prelude.hashWithSalt` connectSourcePhoneNumber
+      `Prelude.hashWithSalt` connectContactFlowId
+      `Prelude.hashWithSalt` connectQueueId
+
+instance Prelude.NFData OutboundCallConfig where
+  rnf OutboundCallConfig' {..} =
+    Prelude.rnf answerMachineDetectionConfig
+      `Prelude.seq` Prelude.rnf connectSourcePhoneNumber
+      `Prelude.seq` Prelude.rnf connectContactFlowId
+      `Prelude.seq` Prelude.rnf connectQueueId
+
+instance Data.ToJSON OutboundCallConfig where
+  toJSON OutboundCallConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("answerMachineDetectionConfig" Data..=)
+              Prelude.<$> answerMachineDetectionConfig,
+            ("connectSourcePhoneNumber" Data..=)
+              Prelude.<$> connectSourcePhoneNumber,
+            Prelude.Just
+              ( "connectContactFlowId"
+                  Data..= connectContactFlowId
+              ),
+            Prelude.Just
+              ("connectQueueId" Data..= connectQueueId)
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCampaigns/Types/PredictiveDialerConfig.hs b/gen/Amazonka/ConnectCampaigns/Types/PredictiveDialerConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/PredictiveDialerConfig.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.ConnectCampaigns.Types.PredictiveDialerConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.PredictiveDialerConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Predictive Dialer config
+--
+-- /See:/ 'newPredictiveDialerConfig' smart constructor.
+data PredictiveDialerConfig = PredictiveDialerConfig'
+  { bandwidthAllocation :: Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PredictiveDialerConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bandwidthAllocation', 'predictiveDialerConfig_bandwidthAllocation' - Undocumented member.
+newPredictiveDialerConfig ::
+  -- | 'bandwidthAllocation'
+  Prelude.Double ->
+  PredictiveDialerConfig
+newPredictiveDialerConfig pBandwidthAllocation_ =
+  PredictiveDialerConfig'
+    { bandwidthAllocation =
+        pBandwidthAllocation_
+    }
+
+-- | Undocumented member.
+predictiveDialerConfig_bandwidthAllocation :: Lens.Lens' PredictiveDialerConfig Prelude.Double
+predictiveDialerConfig_bandwidthAllocation = Lens.lens (\PredictiveDialerConfig' {bandwidthAllocation} -> bandwidthAllocation) (\s@PredictiveDialerConfig' {} a -> s {bandwidthAllocation = a} :: PredictiveDialerConfig)
+
+instance Data.FromJSON PredictiveDialerConfig where
+  parseJSON =
+    Data.withObject
+      "PredictiveDialerConfig"
+      ( \x ->
+          PredictiveDialerConfig'
+            Prelude.<$> (x Data..: "bandwidthAllocation")
+      )
+
+instance Prelude.Hashable PredictiveDialerConfig where
+  hashWithSalt _salt PredictiveDialerConfig' {..} =
+    _salt `Prelude.hashWithSalt` bandwidthAllocation
+
+instance Prelude.NFData PredictiveDialerConfig where
+  rnf PredictiveDialerConfig' {..} =
+    Prelude.rnf bandwidthAllocation
+
+instance Data.ToJSON PredictiveDialerConfig where
+  toJSON PredictiveDialerConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("bandwidthAllocation" Data..= bandwidthAllocation)
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCampaigns/Types/ProgressiveDialerConfig.hs b/gen/Amazonka/ConnectCampaigns/Types/ProgressiveDialerConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/ProgressiveDialerConfig.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.ConnectCampaigns.Types.ProgressiveDialerConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.ProgressiveDialerConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Progressive Dialer config
+--
+-- /See:/ 'newProgressiveDialerConfig' smart constructor.
+data ProgressiveDialerConfig = ProgressiveDialerConfig'
+  { bandwidthAllocation :: Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProgressiveDialerConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bandwidthAllocation', 'progressiveDialerConfig_bandwidthAllocation' - Undocumented member.
+newProgressiveDialerConfig ::
+  -- | 'bandwidthAllocation'
+  Prelude.Double ->
+  ProgressiveDialerConfig
+newProgressiveDialerConfig pBandwidthAllocation_ =
+  ProgressiveDialerConfig'
+    { bandwidthAllocation =
+        pBandwidthAllocation_
+    }
+
+-- | Undocumented member.
+progressiveDialerConfig_bandwidthAllocation :: Lens.Lens' ProgressiveDialerConfig Prelude.Double
+progressiveDialerConfig_bandwidthAllocation = Lens.lens (\ProgressiveDialerConfig' {bandwidthAllocation} -> bandwidthAllocation) (\s@ProgressiveDialerConfig' {} a -> s {bandwidthAllocation = a} :: ProgressiveDialerConfig)
+
+instance Data.FromJSON ProgressiveDialerConfig where
+  parseJSON =
+    Data.withObject
+      "ProgressiveDialerConfig"
+      ( \x ->
+          ProgressiveDialerConfig'
+            Prelude.<$> (x Data..: "bandwidthAllocation")
+      )
+
+instance Prelude.Hashable ProgressiveDialerConfig where
+  hashWithSalt _salt ProgressiveDialerConfig' {..} =
+    _salt `Prelude.hashWithSalt` bandwidthAllocation
+
+instance Prelude.NFData ProgressiveDialerConfig where
+  rnf ProgressiveDialerConfig' {..} =
+    Prelude.rnf bandwidthAllocation
+
+instance Data.ToJSON ProgressiveDialerConfig where
+  toJSON ProgressiveDialerConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("bandwidthAllocation" Data..= bandwidthAllocation)
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCampaigns/Types/SuccessfulCampaignStateResponse.hs b/gen/Amazonka/ConnectCampaigns/Types/SuccessfulCampaignStateResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/SuccessfulCampaignStateResponse.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.Types.SuccessfulCampaignStateResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.SuccessfulCampaignStateResponse where
+
+import Amazonka.ConnectCampaigns.Types.CampaignState
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Successful response of campaign state
+--
+-- /See:/ 'newSuccessfulCampaignStateResponse' smart constructor.
+data SuccessfulCampaignStateResponse = SuccessfulCampaignStateResponse'
+  { campaignId :: Prelude.Maybe Prelude.Text,
+    state :: Prelude.Maybe CampaignState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SuccessfulCampaignStateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'campaignId', 'successfulCampaignStateResponse_campaignId' - Undocumented member.
+--
+-- 'state', 'successfulCampaignStateResponse_state' - Undocumented member.
+newSuccessfulCampaignStateResponse ::
+  SuccessfulCampaignStateResponse
+newSuccessfulCampaignStateResponse =
+  SuccessfulCampaignStateResponse'
+    { campaignId =
+        Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+successfulCampaignStateResponse_campaignId :: Lens.Lens' SuccessfulCampaignStateResponse (Prelude.Maybe Prelude.Text)
+successfulCampaignStateResponse_campaignId = Lens.lens (\SuccessfulCampaignStateResponse' {campaignId} -> campaignId) (\s@SuccessfulCampaignStateResponse' {} a -> s {campaignId = a} :: SuccessfulCampaignStateResponse)
+
+-- | Undocumented member.
+successfulCampaignStateResponse_state :: Lens.Lens' SuccessfulCampaignStateResponse (Prelude.Maybe CampaignState)
+successfulCampaignStateResponse_state = Lens.lens (\SuccessfulCampaignStateResponse' {state} -> state) (\s@SuccessfulCampaignStateResponse' {} a -> s {state = a} :: SuccessfulCampaignStateResponse)
+
+instance
+  Data.FromJSON
+    SuccessfulCampaignStateResponse
+  where
+  parseJSON =
+    Data.withObject
+      "SuccessfulCampaignStateResponse"
+      ( \x ->
+          SuccessfulCampaignStateResponse'
+            Prelude.<$> (x Data..:? "campaignId")
+            Prelude.<*> (x Data..:? "state")
+      )
+
+instance
+  Prelude.Hashable
+    SuccessfulCampaignStateResponse
+  where
+  hashWithSalt
+    _salt
+    SuccessfulCampaignStateResponse' {..} =
+      _salt
+        `Prelude.hashWithSalt` campaignId
+        `Prelude.hashWithSalt` state
+
+instance
+  Prelude.NFData
+    SuccessfulCampaignStateResponse
+  where
+  rnf SuccessfulCampaignStateResponse' {..} =
+    Prelude.rnf campaignId
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/ConnectCampaigns/Types/SuccessfulRequest.hs b/gen/Amazonka/ConnectCampaigns/Types/SuccessfulRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/Types/SuccessfulRequest.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.ConnectCampaigns.Types.SuccessfulRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCampaigns.Types.SuccessfulRequest where
+
+import qualified 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 successful request identified by the unique client token.
+--
+-- /See:/ 'newSuccessfulRequest' smart constructor.
+data SuccessfulRequest = SuccessfulRequest'
+  { clientToken :: Prelude.Maybe Prelude.Text,
+    id :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SuccessfulRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'successfulRequest_clientToken' - Undocumented member.
+--
+-- 'id', 'successfulRequest_id' - Undocumented member.
+newSuccessfulRequest ::
+  SuccessfulRequest
+newSuccessfulRequest =
+  SuccessfulRequest'
+    { clientToken = Prelude.Nothing,
+      id = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+successfulRequest_clientToken :: Lens.Lens' SuccessfulRequest (Prelude.Maybe Prelude.Text)
+successfulRequest_clientToken = Lens.lens (\SuccessfulRequest' {clientToken} -> clientToken) (\s@SuccessfulRequest' {} a -> s {clientToken = a} :: SuccessfulRequest)
+
+-- | Undocumented member.
+successfulRequest_id :: Lens.Lens' SuccessfulRequest (Prelude.Maybe Prelude.Text)
+successfulRequest_id = Lens.lens (\SuccessfulRequest' {id} -> id) (\s@SuccessfulRequest' {} a -> s {id = a} :: SuccessfulRequest)
+
+instance Data.FromJSON SuccessfulRequest where
+  parseJSON =
+    Data.withObject
+      "SuccessfulRequest"
+      ( \x ->
+          SuccessfulRequest'
+            Prelude.<$> (x Data..:? "clientToken")
+            Prelude.<*> (x Data..:? "id")
+      )
+
+instance Prelude.Hashable SuccessfulRequest where
+  hashWithSalt _salt SuccessfulRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData SuccessfulRequest where
+  rnf SuccessfulRequest' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf id
diff --git a/gen/Amazonka/ConnectCampaigns/UntagResource.hs b/gen/Amazonka/ConnectCampaigns/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/UntagResource.hs
@@ -0,0 +1,139 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.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)
+--
+-- Untag a resource.
+module Amazonka.ConnectCampaigns.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_arn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | UntagResourceRequest
+--
+-- /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { arn :: Prelude.Text,
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'untagResource_arn' - Undocumented member.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - Undocumented member.
+newUntagResource ::
+  -- | 'arn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pArn_ =
+  UntagResource'
+    { arn = pArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | Undocumented member.
+untagResource_arn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_arn = Lens.lens (\UntagResource' {arn} -> arn) (\s@UntagResource' {} a -> s {arn = a} :: UntagResource)
+
+-- | Undocumented member.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull UntagResourceResponse'
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf arn `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 arn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  {
+  }
+  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.
+newUntagResourceResponse ::
+  UntagResourceResponse
+newUntagResourceResponse = UntagResourceResponse'
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ConnectCampaigns/UpdateCampaignDialerConfig.hs b/gen/Amazonka/ConnectCampaigns/UpdateCampaignDialerConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/UpdateCampaignDialerConfig.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.UpdateCampaignDialerConfig
+-- 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 dialer config of a campaign. This API is idempotent.
+module Amazonka.ConnectCampaigns.UpdateCampaignDialerConfig
+  ( -- * Creating a Request
+    UpdateCampaignDialerConfig (..),
+    newUpdateCampaignDialerConfig,
+
+    -- * Request Lenses
+    updateCampaignDialerConfig_dialerConfig,
+    updateCampaignDialerConfig_id,
+
+    -- * Destructuring the Response
+    UpdateCampaignDialerConfigResponse (..),
+    newUpdateCampaignDialerConfigResponse,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | UpdateCampaignDialerConfigRequest
+--
+-- /See:/ 'newUpdateCampaignDialerConfig' smart constructor.
+data UpdateCampaignDialerConfig = UpdateCampaignDialerConfig'
+  { dialerConfig :: DialerConfig,
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCampaignDialerConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dialerConfig', 'updateCampaignDialerConfig_dialerConfig' - Undocumented member.
+--
+-- 'id', 'updateCampaignDialerConfig_id' - Undocumented member.
+newUpdateCampaignDialerConfig ::
+  -- | 'dialerConfig'
+  DialerConfig ->
+  -- | 'id'
+  Prelude.Text ->
+  UpdateCampaignDialerConfig
+newUpdateCampaignDialerConfig pDialerConfig_ pId_ =
+  UpdateCampaignDialerConfig'
+    { dialerConfig =
+        pDialerConfig_,
+      id = pId_
+    }
+
+-- | Undocumented member.
+updateCampaignDialerConfig_dialerConfig :: Lens.Lens' UpdateCampaignDialerConfig DialerConfig
+updateCampaignDialerConfig_dialerConfig = Lens.lens (\UpdateCampaignDialerConfig' {dialerConfig} -> dialerConfig) (\s@UpdateCampaignDialerConfig' {} a -> s {dialerConfig = a} :: UpdateCampaignDialerConfig)
+
+-- | Undocumented member.
+updateCampaignDialerConfig_id :: Lens.Lens' UpdateCampaignDialerConfig Prelude.Text
+updateCampaignDialerConfig_id = Lens.lens (\UpdateCampaignDialerConfig' {id} -> id) (\s@UpdateCampaignDialerConfig' {} a -> s {id = a} :: UpdateCampaignDialerConfig)
+
+instance Core.AWSRequest UpdateCampaignDialerConfig where
+  type
+    AWSResponse UpdateCampaignDialerConfig =
+      UpdateCampaignDialerConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      UpdateCampaignDialerConfigResponse'
+
+instance Prelude.Hashable UpdateCampaignDialerConfig where
+  hashWithSalt _salt UpdateCampaignDialerConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` dialerConfig
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdateCampaignDialerConfig where
+  rnf UpdateCampaignDialerConfig' {..} =
+    Prelude.rnf dialerConfig
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdateCampaignDialerConfig where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateCampaignDialerConfig where
+  toJSON UpdateCampaignDialerConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("dialerConfig" Data..= dialerConfig)]
+      )
+
+instance Data.ToPath UpdateCampaignDialerConfig where
+  toPath UpdateCampaignDialerConfig' {..} =
+    Prelude.mconcat
+      ["/campaigns/", Data.toBS id, "/dialer-config"]
+
+instance Data.ToQuery UpdateCampaignDialerConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateCampaignDialerConfigResponse' smart constructor.
+data UpdateCampaignDialerConfigResponse = UpdateCampaignDialerConfigResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCampaignDialerConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newUpdateCampaignDialerConfigResponse ::
+  UpdateCampaignDialerConfigResponse
+newUpdateCampaignDialerConfigResponse =
+  UpdateCampaignDialerConfigResponse'
+
+instance
+  Prelude.NFData
+    UpdateCampaignDialerConfigResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/ConnectCampaigns/UpdateCampaignName.hs b/gen/Amazonka/ConnectCampaigns/UpdateCampaignName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/UpdateCampaignName.hs
@@ -0,0 +1,145 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.UpdateCampaignName
+-- 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 name of a campaign. This API is idempotent.
+module Amazonka.ConnectCampaigns.UpdateCampaignName
+  ( -- * Creating a Request
+    UpdateCampaignName (..),
+    newUpdateCampaignName,
+
+    -- * Request Lenses
+    updateCampaignName_id,
+    updateCampaignName_name,
+
+    -- * Destructuring the Response
+    UpdateCampaignNameResponse (..),
+    newUpdateCampaignNameResponse,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | UpdateCampaignNameRequest
+--
+-- /See:/ 'newUpdateCampaignName' smart constructor.
+data UpdateCampaignName = UpdateCampaignName'
+  { id :: Prelude.Text,
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCampaignName' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'updateCampaignName_id' - Undocumented member.
+--
+-- 'name', 'updateCampaignName_name' - Undocumented member.
+newUpdateCampaignName ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  UpdateCampaignName
+newUpdateCampaignName pId_ pName_ =
+  UpdateCampaignName' {id = pId_, name = pName_}
+
+-- | Undocumented member.
+updateCampaignName_id :: Lens.Lens' UpdateCampaignName Prelude.Text
+updateCampaignName_id = Lens.lens (\UpdateCampaignName' {id} -> id) (\s@UpdateCampaignName' {} a -> s {id = a} :: UpdateCampaignName)
+
+-- | Undocumented member.
+updateCampaignName_name :: Lens.Lens' UpdateCampaignName Prelude.Text
+updateCampaignName_name = Lens.lens (\UpdateCampaignName' {name} -> name) (\s@UpdateCampaignName' {} a -> s {name = a} :: UpdateCampaignName)
+
+instance Core.AWSRequest UpdateCampaignName where
+  type
+    AWSResponse UpdateCampaignName =
+      UpdateCampaignNameResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull UpdateCampaignNameResponse'
+
+instance Prelude.Hashable UpdateCampaignName where
+  hashWithSalt _salt UpdateCampaignName' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData UpdateCampaignName where
+  rnf UpdateCampaignName' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders UpdateCampaignName where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateCampaignName where
+  toJSON UpdateCampaignName' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("name" Data..= name)]
+      )
+
+instance Data.ToPath UpdateCampaignName where
+  toPath UpdateCampaignName' {..} =
+    Prelude.mconcat
+      ["/campaigns/", Data.toBS id, "/name"]
+
+instance Data.ToQuery UpdateCampaignName where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateCampaignNameResponse' smart constructor.
+data UpdateCampaignNameResponse = UpdateCampaignNameResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCampaignNameResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newUpdateCampaignNameResponse ::
+  UpdateCampaignNameResponse
+newUpdateCampaignNameResponse =
+  UpdateCampaignNameResponse'
+
+instance Prelude.NFData UpdateCampaignNameResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ConnectCampaigns/UpdateCampaignOutboundCallConfig.hs b/gen/Amazonka/ConnectCampaigns/UpdateCampaignOutboundCallConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/UpdateCampaignOutboundCallConfig.hs
@@ -0,0 +1,201 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCampaigns.UpdateCampaignOutboundCallConfig
+-- 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 outbound call config of a campaign. This API is idempotent.
+module Amazonka.ConnectCampaigns.UpdateCampaignOutboundCallConfig
+  ( -- * Creating a Request
+    UpdateCampaignOutboundCallConfig (..),
+    newUpdateCampaignOutboundCallConfig,
+
+    -- * Request Lenses
+    updateCampaignOutboundCallConfig_answerMachineDetectionConfig,
+    updateCampaignOutboundCallConfig_connectContactFlowId,
+    updateCampaignOutboundCallConfig_connectSourcePhoneNumber,
+    updateCampaignOutboundCallConfig_id,
+
+    -- * Destructuring the Response
+    UpdateCampaignOutboundCallConfigResponse (..),
+    newUpdateCampaignOutboundCallConfigResponse,
+  )
+where
+
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | UpdateCampaignOutboundCallConfigRequest
+--
+-- /See:/ 'newUpdateCampaignOutboundCallConfig' smart constructor.
+data UpdateCampaignOutboundCallConfig = UpdateCampaignOutboundCallConfig'
+  { answerMachineDetectionConfig :: Prelude.Maybe AnswerMachineDetectionConfig,
+    connectContactFlowId :: Prelude.Maybe Prelude.Text,
+    connectSourcePhoneNumber :: Prelude.Maybe Prelude.Text,
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCampaignOutboundCallConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'answerMachineDetectionConfig', 'updateCampaignOutboundCallConfig_answerMachineDetectionConfig' - Undocumented member.
+--
+-- 'connectContactFlowId', 'updateCampaignOutboundCallConfig_connectContactFlowId' - Undocumented member.
+--
+-- 'connectSourcePhoneNumber', 'updateCampaignOutboundCallConfig_connectSourcePhoneNumber' - Undocumented member.
+--
+-- 'id', 'updateCampaignOutboundCallConfig_id' - Undocumented member.
+newUpdateCampaignOutboundCallConfig ::
+  -- | 'id'
+  Prelude.Text ->
+  UpdateCampaignOutboundCallConfig
+newUpdateCampaignOutboundCallConfig pId_ =
+  UpdateCampaignOutboundCallConfig'
+    { answerMachineDetectionConfig =
+        Prelude.Nothing,
+      connectContactFlowId = Prelude.Nothing,
+      connectSourcePhoneNumber =
+        Prelude.Nothing,
+      id = pId_
+    }
+
+-- | Undocumented member.
+updateCampaignOutboundCallConfig_answerMachineDetectionConfig :: Lens.Lens' UpdateCampaignOutboundCallConfig (Prelude.Maybe AnswerMachineDetectionConfig)
+updateCampaignOutboundCallConfig_answerMachineDetectionConfig = Lens.lens (\UpdateCampaignOutboundCallConfig' {answerMachineDetectionConfig} -> answerMachineDetectionConfig) (\s@UpdateCampaignOutboundCallConfig' {} a -> s {answerMachineDetectionConfig = a} :: UpdateCampaignOutboundCallConfig)
+
+-- | Undocumented member.
+updateCampaignOutboundCallConfig_connectContactFlowId :: Lens.Lens' UpdateCampaignOutboundCallConfig (Prelude.Maybe Prelude.Text)
+updateCampaignOutboundCallConfig_connectContactFlowId = Lens.lens (\UpdateCampaignOutboundCallConfig' {connectContactFlowId} -> connectContactFlowId) (\s@UpdateCampaignOutboundCallConfig' {} a -> s {connectContactFlowId = a} :: UpdateCampaignOutboundCallConfig)
+
+-- | Undocumented member.
+updateCampaignOutboundCallConfig_connectSourcePhoneNumber :: Lens.Lens' UpdateCampaignOutboundCallConfig (Prelude.Maybe Prelude.Text)
+updateCampaignOutboundCallConfig_connectSourcePhoneNumber = Lens.lens (\UpdateCampaignOutboundCallConfig' {connectSourcePhoneNumber} -> connectSourcePhoneNumber) (\s@UpdateCampaignOutboundCallConfig' {} a -> s {connectSourcePhoneNumber = a} :: UpdateCampaignOutboundCallConfig)
+
+-- | Undocumented member.
+updateCampaignOutboundCallConfig_id :: Lens.Lens' UpdateCampaignOutboundCallConfig Prelude.Text
+updateCampaignOutboundCallConfig_id = Lens.lens (\UpdateCampaignOutboundCallConfig' {id} -> id) (\s@UpdateCampaignOutboundCallConfig' {} a -> s {id = a} :: UpdateCampaignOutboundCallConfig)
+
+instance
+  Core.AWSRequest
+    UpdateCampaignOutboundCallConfig
+  where
+  type
+    AWSResponse UpdateCampaignOutboundCallConfig =
+      UpdateCampaignOutboundCallConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      UpdateCampaignOutboundCallConfigResponse'
+
+instance
+  Prelude.Hashable
+    UpdateCampaignOutboundCallConfig
+  where
+  hashWithSalt
+    _salt
+    UpdateCampaignOutboundCallConfig' {..} =
+      _salt
+        `Prelude.hashWithSalt` answerMachineDetectionConfig
+        `Prelude.hashWithSalt` connectContactFlowId
+        `Prelude.hashWithSalt` connectSourcePhoneNumber
+        `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    UpdateCampaignOutboundCallConfig
+  where
+  rnf UpdateCampaignOutboundCallConfig' {..} =
+    Prelude.rnf answerMachineDetectionConfig
+      `Prelude.seq` Prelude.rnf connectContactFlowId
+      `Prelude.seq` Prelude.rnf connectSourcePhoneNumber
+      `Prelude.seq` Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    UpdateCampaignOutboundCallConfig
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateCampaignOutboundCallConfig where
+  toJSON UpdateCampaignOutboundCallConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("answerMachineDetectionConfig" Data..=)
+              Prelude.<$> answerMachineDetectionConfig,
+            ("connectContactFlowId" Data..=)
+              Prelude.<$> connectContactFlowId,
+            ("connectSourcePhoneNumber" Data..=)
+              Prelude.<$> connectSourcePhoneNumber
+          ]
+      )
+
+instance Data.ToPath UpdateCampaignOutboundCallConfig where
+  toPath UpdateCampaignOutboundCallConfig' {..} =
+    Prelude.mconcat
+      [ "/campaigns/",
+        Data.toBS id,
+        "/outbound-call-config"
+      ]
+
+instance
+  Data.ToQuery
+    UpdateCampaignOutboundCallConfig
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateCampaignOutboundCallConfigResponse' smart constructor.
+data UpdateCampaignOutboundCallConfigResponse = UpdateCampaignOutboundCallConfigResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCampaignOutboundCallConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newUpdateCampaignOutboundCallConfigResponse ::
+  UpdateCampaignOutboundCallConfigResponse
+newUpdateCampaignOutboundCallConfigResponse =
+  UpdateCampaignOutboundCallConfigResponse'
+
+instance
+  Prelude.NFData
+    UpdateCampaignOutboundCallConfigResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/ConnectCampaigns/Waiters.hs b/gen/Amazonka/ConnectCampaigns/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCampaigns/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.ConnectCampaigns.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.ConnectCampaigns.Waiters where
+
+import Amazonka.ConnectCampaigns.Lens
+import Amazonka.ConnectCampaigns.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+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.ConnectCampaigns
+import Test.Amazonka.ConnectCampaigns.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "ConnectCampaigns"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/ConnectCampaigns.hs b/test/Test/Amazonka/ConnectCampaigns.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ConnectCampaigns.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.ConnectCampaigns
+-- Copyright   : (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.ConnectCampaigns
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/ConnectCampaigns/Internal.hs b/test/Test/Amazonka/ConnectCampaigns/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ConnectCampaigns/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.ConnectCampaigns.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.ConnectCampaigns.Internal where
diff --git a/test/Test/Amazonka/Gen/ConnectCampaigns.hs b/test/Test/Amazonka/Gen/ConnectCampaigns.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/ConnectCampaigns.hs
@@ -0,0 +1,478 @@
+{-# 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.ConnectCampaigns
+-- Copyright   : (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.ConnectCampaigns where
+
+import Amazonka.ConnectCampaigns
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.ConnectCampaigns.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"
+--         [ requestCreateCampaign $
+--             newCreateCampaign
+--
+--         , requestDeleteCampaign $
+--             newDeleteCampaign
+--
+--         , requestDeleteConnectInstanceConfig $
+--             newDeleteConnectInstanceConfig
+--
+--         , requestDeleteInstanceOnboardingJob $
+--             newDeleteInstanceOnboardingJob
+--
+--         , requestDescribeCampaign $
+--             newDescribeCampaign
+--
+--         , requestGetCampaignState $
+--             newGetCampaignState
+--
+--         , requestGetCampaignStateBatch $
+--             newGetCampaignStateBatch
+--
+--         , requestGetConnectInstanceConfig $
+--             newGetConnectInstanceConfig
+--
+--         , requestGetInstanceOnboardingJobStatus $
+--             newGetInstanceOnboardingJobStatus
+--
+--         , requestListCampaigns $
+--             newListCampaigns
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestPauseCampaign $
+--             newPauseCampaign
+--
+--         , requestPutDialRequestBatch $
+--             newPutDialRequestBatch
+--
+--         , requestResumeCampaign $
+--             newResumeCampaign
+--
+--         , requestStartCampaign $
+--             newStartCampaign
+--
+--         , requestStartInstanceOnboardingJob $
+--             newStartInstanceOnboardingJob
+--
+--         , requestStopCampaign $
+--             newStopCampaign
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateCampaignDialerConfig $
+--             newUpdateCampaignDialerConfig
+--
+--         , requestUpdateCampaignName $
+--             newUpdateCampaignName
+--
+--         , requestUpdateCampaignOutboundCallConfig $
+--             newUpdateCampaignOutboundCallConfig
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateCampaign $
+--             newCreateCampaignResponse
+--
+--         , responseDeleteCampaign $
+--             newDeleteCampaignResponse
+--
+--         , responseDeleteConnectInstanceConfig $
+--             newDeleteConnectInstanceConfigResponse
+--
+--         , responseDeleteInstanceOnboardingJob $
+--             newDeleteInstanceOnboardingJobResponse
+--
+--         , responseDescribeCampaign $
+--             newDescribeCampaignResponse
+--
+--         , responseGetCampaignState $
+--             newGetCampaignStateResponse
+--
+--         , responseGetCampaignStateBatch $
+--             newGetCampaignStateBatchResponse
+--
+--         , responseGetConnectInstanceConfig $
+--             newGetConnectInstanceConfigResponse
+--
+--         , responseGetInstanceOnboardingJobStatus $
+--             newGetInstanceOnboardingJobStatusResponse
+--
+--         , responseListCampaigns $
+--             newListCampaignsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responsePauseCampaign $
+--             newPauseCampaignResponse
+--
+--         , responsePutDialRequestBatch $
+--             newPutDialRequestBatchResponse
+--
+--         , responseResumeCampaign $
+--             newResumeCampaignResponse
+--
+--         , responseStartCampaign $
+--             newStartCampaignResponse
+--
+--         , responseStartInstanceOnboardingJob $
+--             newStartInstanceOnboardingJobResponse
+--
+--         , responseStopCampaign $
+--             newStopCampaignResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateCampaignDialerConfig $
+--             newUpdateCampaignDialerConfigResponse
+--
+--         , responseUpdateCampaignName $
+--             newUpdateCampaignNameResponse
+--
+--         , responseUpdateCampaignOutboundCallConfig $
+--             newUpdateCampaignOutboundCallConfigResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateCampaign :: CreateCampaign -> TestTree
+requestCreateCampaign =
+  req
+    "CreateCampaign"
+    "fixture/CreateCampaign.yaml"
+
+requestDeleteCampaign :: DeleteCampaign -> TestTree
+requestDeleteCampaign =
+  req
+    "DeleteCampaign"
+    "fixture/DeleteCampaign.yaml"
+
+requestDeleteConnectInstanceConfig :: DeleteConnectInstanceConfig -> TestTree
+requestDeleteConnectInstanceConfig =
+  req
+    "DeleteConnectInstanceConfig"
+    "fixture/DeleteConnectInstanceConfig.yaml"
+
+requestDeleteInstanceOnboardingJob :: DeleteInstanceOnboardingJob -> TestTree
+requestDeleteInstanceOnboardingJob =
+  req
+    "DeleteInstanceOnboardingJob"
+    "fixture/DeleteInstanceOnboardingJob.yaml"
+
+requestDescribeCampaign :: DescribeCampaign -> TestTree
+requestDescribeCampaign =
+  req
+    "DescribeCampaign"
+    "fixture/DescribeCampaign.yaml"
+
+requestGetCampaignState :: GetCampaignState -> TestTree
+requestGetCampaignState =
+  req
+    "GetCampaignState"
+    "fixture/GetCampaignState.yaml"
+
+requestGetCampaignStateBatch :: GetCampaignStateBatch -> TestTree
+requestGetCampaignStateBatch =
+  req
+    "GetCampaignStateBatch"
+    "fixture/GetCampaignStateBatch.yaml"
+
+requestGetConnectInstanceConfig :: GetConnectInstanceConfig -> TestTree
+requestGetConnectInstanceConfig =
+  req
+    "GetConnectInstanceConfig"
+    "fixture/GetConnectInstanceConfig.yaml"
+
+requestGetInstanceOnboardingJobStatus :: GetInstanceOnboardingJobStatus -> TestTree
+requestGetInstanceOnboardingJobStatus =
+  req
+    "GetInstanceOnboardingJobStatus"
+    "fixture/GetInstanceOnboardingJobStatus.yaml"
+
+requestListCampaigns :: ListCampaigns -> TestTree
+requestListCampaigns =
+  req
+    "ListCampaigns"
+    "fixture/ListCampaigns.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestPauseCampaign :: PauseCampaign -> TestTree
+requestPauseCampaign =
+  req
+    "PauseCampaign"
+    "fixture/PauseCampaign.yaml"
+
+requestPutDialRequestBatch :: PutDialRequestBatch -> TestTree
+requestPutDialRequestBatch =
+  req
+    "PutDialRequestBatch"
+    "fixture/PutDialRequestBatch.yaml"
+
+requestResumeCampaign :: ResumeCampaign -> TestTree
+requestResumeCampaign =
+  req
+    "ResumeCampaign"
+    "fixture/ResumeCampaign.yaml"
+
+requestStartCampaign :: StartCampaign -> TestTree
+requestStartCampaign =
+  req
+    "StartCampaign"
+    "fixture/StartCampaign.yaml"
+
+requestStartInstanceOnboardingJob :: StartInstanceOnboardingJob -> TestTree
+requestStartInstanceOnboardingJob =
+  req
+    "StartInstanceOnboardingJob"
+    "fixture/StartInstanceOnboardingJob.yaml"
+
+requestStopCampaign :: StopCampaign -> TestTree
+requestStopCampaign =
+  req
+    "StopCampaign"
+    "fixture/StopCampaign.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateCampaignDialerConfig :: UpdateCampaignDialerConfig -> TestTree
+requestUpdateCampaignDialerConfig =
+  req
+    "UpdateCampaignDialerConfig"
+    "fixture/UpdateCampaignDialerConfig.yaml"
+
+requestUpdateCampaignName :: UpdateCampaignName -> TestTree
+requestUpdateCampaignName =
+  req
+    "UpdateCampaignName"
+    "fixture/UpdateCampaignName.yaml"
+
+requestUpdateCampaignOutboundCallConfig :: UpdateCampaignOutboundCallConfig -> TestTree
+requestUpdateCampaignOutboundCallConfig =
+  req
+    "UpdateCampaignOutboundCallConfig"
+    "fixture/UpdateCampaignOutboundCallConfig.yaml"
+
+-- Responses
+
+responseCreateCampaign :: CreateCampaignResponse -> TestTree
+responseCreateCampaign =
+  res
+    "CreateCampaignResponse"
+    "fixture/CreateCampaignResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCampaign)
+
+responseDeleteCampaign :: DeleteCampaignResponse -> TestTree
+responseDeleteCampaign =
+  res
+    "DeleteCampaignResponse"
+    "fixture/DeleteCampaignResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCampaign)
+
+responseDeleteConnectInstanceConfig :: DeleteConnectInstanceConfigResponse -> TestTree
+responseDeleteConnectInstanceConfig =
+  res
+    "DeleteConnectInstanceConfigResponse"
+    "fixture/DeleteConnectInstanceConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteConnectInstanceConfig)
+
+responseDeleteInstanceOnboardingJob :: DeleteInstanceOnboardingJobResponse -> TestTree
+responseDeleteInstanceOnboardingJob =
+  res
+    "DeleteInstanceOnboardingJobResponse"
+    "fixture/DeleteInstanceOnboardingJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteInstanceOnboardingJob)
+
+responseDescribeCampaign :: DescribeCampaignResponse -> TestTree
+responseDescribeCampaign =
+  res
+    "DescribeCampaignResponse"
+    "fixture/DescribeCampaignResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeCampaign)
+
+responseGetCampaignState :: GetCampaignStateResponse -> TestTree
+responseGetCampaignState =
+  res
+    "GetCampaignStateResponse"
+    "fixture/GetCampaignStateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetCampaignState)
+
+responseGetCampaignStateBatch :: GetCampaignStateBatchResponse -> TestTree
+responseGetCampaignStateBatch =
+  res
+    "GetCampaignStateBatchResponse"
+    "fixture/GetCampaignStateBatchResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetCampaignStateBatch)
+
+responseGetConnectInstanceConfig :: GetConnectInstanceConfigResponse -> TestTree
+responseGetConnectInstanceConfig =
+  res
+    "GetConnectInstanceConfigResponse"
+    "fixture/GetConnectInstanceConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetConnectInstanceConfig)
+
+responseGetInstanceOnboardingJobStatus :: GetInstanceOnboardingJobStatusResponse -> TestTree
+responseGetInstanceOnboardingJobStatus =
+  res
+    "GetInstanceOnboardingJobStatusResponse"
+    "fixture/GetInstanceOnboardingJobStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetInstanceOnboardingJobStatus)
+
+responseListCampaigns :: ListCampaignsResponse -> TestTree
+responseListCampaigns =
+  res
+    "ListCampaignsResponse"
+    "fixture/ListCampaignsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListCampaigns)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responsePauseCampaign :: PauseCampaignResponse -> TestTree
+responsePauseCampaign =
+  res
+    "PauseCampaignResponse"
+    "fixture/PauseCampaignResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PauseCampaign)
+
+responsePutDialRequestBatch :: PutDialRequestBatchResponse -> TestTree
+responsePutDialRequestBatch =
+  res
+    "PutDialRequestBatchResponse"
+    "fixture/PutDialRequestBatchResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutDialRequestBatch)
+
+responseResumeCampaign :: ResumeCampaignResponse -> TestTree
+responseResumeCampaign =
+  res
+    "ResumeCampaignResponse"
+    "fixture/ResumeCampaignResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ResumeCampaign)
+
+responseStartCampaign :: StartCampaignResponse -> TestTree
+responseStartCampaign =
+  res
+    "StartCampaignResponse"
+    "fixture/StartCampaignResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartCampaign)
+
+responseStartInstanceOnboardingJob :: StartInstanceOnboardingJobResponse -> TestTree
+responseStartInstanceOnboardingJob =
+  res
+    "StartInstanceOnboardingJobResponse"
+    "fixture/StartInstanceOnboardingJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartInstanceOnboardingJob)
+
+responseStopCampaign :: StopCampaignResponse -> TestTree
+responseStopCampaign =
+  res
+    "StopCampaignResponse"
+    "fixture/StopCampaignResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopCampaign)
+
+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)
+
+responseUpdateCampaignDialerConfig :: UpdateCampaignDialerConfigResponse -> TestTree
+responseUpdateCampaignDialerConfig =
+  res
+    "UpdateCampaignDialerConfigResponse"
+    "fixture/UpdateCampaignDialerConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateCampaignDialerConfig)
+
+responseUpdateCampaignName :: UpdateCampaignNameResponse -> TestTree
+responseUpdateCampaignName =
+  res
+    "UpdateCampaignNameResponse"
+    "fixture/UpdateCampaignNameResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateCampaignName)
+
+responseUpdateCampaignOutboundCallConfig :: UpdateCampaignOutboundCallConfigResponse -> TestTree
+responseUpdateCampaignOutboundCallConfig =
+  res
+    "UpdateCampaignOutboundCallConfigResponse"
+    "fixture/UpdateCampaignOutboundCallConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateCampaignOutboundCallConfig)
