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 Amplify SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2017-07-25@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-amplify)
+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.Amplify](http://hackage.haskell.org/package/amazonka-amplify/docs/Amazonka-Amplify.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-amplify` 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-amplify.cabal b/amazonka-amplify.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-amplify.cabal
@@ -0,0 +1,140 @@
+cabal-version:      2.2
+name:               amazonka-amplify
+version:            2.0
+synopsis:           Amazon Amplify 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 @2017-07-25@ 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.Amplify.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.Amplify" 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-amplify
+
+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.Amplify
+    Amazonka.Amplify.CreateApp
+    Amazonka.Amplify.CreateBackendEnvironment
+    Amazonka.Amplify.CreateBranch
+    Amazonka.Amplify.CreateDeployment
+    Amazonka.Amplify.CreateDomainAssociation
+    Amazonka.Amplify.CreateWebhook
+    Amazonka.Amplify.DeleteApp
+    Amazonka.Amplify.DeleteBackendEnvironment
+    Amazonka.Amplify.DeleteBranch
+    Amazonka.Amplify.DeleteDomainAssociation
+    Amazonka.Amplify.DeleteJob
+    Amazonka.Amplify.DeleteWebhook
+    Amazonka.Amplify.GenerateAccessLogs
+    Amazonka.Amplify.GetApp
+    Amazonka.Amplify.GetArtifactUrl
+    Amazonka.Amplify.GetBackendEnvironment
+    Amazonka.Amplify.GetBranch
+    Amazonka.Amplify.GetDomainAssociation
+    Amazonka.Amplify.GetJob
+    Amazonka.Amplify.GetWebhook
+    Amazonka.Amplify.Lens
+    Amazonka.Amplify.ListApps
+    Amazonka.Amplify.ListArtifacts
+    Amazonka.Amplify.ListBackendEnvironments
+    Amazonka.Amplify.ListBranches
+    Amazonka.Amplify.ListDomainAssociations
+    Amazonka.Amplify.ListJobs
+    Amazonka.Amplify.ListTagsForResource
+    Amazonka.Amplify.ListWebhooks
+    Amazonka.Amplify.StartDeployment
+    Amazonka.Amplify.StartJob
+    Amazonka.Amplify.StopJob
+    Amazonka.Amplify.TagResource
+    Amazonka.Amplify.Types
+    Amazonka.Amplify.Types.App
+    Amazonka.Amplify.Types.Artifact
+    Amazonka.Amplify.Types.AutoBranchCreationConfig
+    Amazonka.Amplify.Types.BackendEnvironment
+    Amazonka.Amplify.Types.Branch
+    Amazonka.Amplify.Types.CustomRule
+    Amazonka.Amplify.Types.DomainAssociation
+    Amazonka.Amplify.Types.DomainStatus
+    Amazonka.Amplify.Types.Job
+    Amazonka.Amplify.Types.JobStatus
+    Amazonka.Amplify.Types.JobSummary
+    Amazonka.Amplify.Types.JobType
+    Amazonka.Amplify.Types.Platform
+    Amazonka.Amplify.Types.ProductionBranch
+    Amazonka.Amplify.Types.RepositoryCloneMethod
+    Amazonka.Amplify.Types.Stage
+    Amazonka.Amplify.Types.Step
+    Amazonka.Amplify.Types.SubDomain
+    Amazonka.Amplify.Types.SubDomainSetting
+    Amazonka.Amplify.Types.Webhook
+    Amazonka.Amplify.UntagResource
+    Amazonka.Amplify.UpdateApp
+    Amazonka.Amplify.UpdateBranch
+    Amazonka.Amplify.UpdateDomainAssociation
+    Amazonka.Amplify.UpdateWebhook
+    Amazonka.Amplify.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-amplify-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.Amplify
+    Test.Amazonka.Amplify.Internal
+    Test.Amazonka.Gen.Amplify
+
+  build-depends:
+    , amazonka-amplify
+    , 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/CreateApp.yaml b/fixture/CreateApp.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateApp.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateAppResponse.proto b/fixture/CreateAppResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAppResponse.proto
diff --git a/fixture/CreateBackendEnvironment.yaml b/fixture/CreateBackendEnvironment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBackendEnvironment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateBackendEnvironmentResponse.proto b/fixture/CreateBackendEnvironmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBackendEnvironmentResponse.proto
diff --git a/fixture/CreateBranch.yaml b/fixture/CreateBranch.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBranch.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateBranchResponse.proto b/fixture/CreateBranchResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBranchResponse.proto
diff --git a/fixture/CreateDeployment.yaml b/fixture/CreateDeployment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDeployment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateDeploymentResponse.proto b/fixture/CreateDeploymentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDeploymentResponse.proto
diff --git a/fixture/CreateDomainAssociation.yaml b/fixture/CreateDomainAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDomainAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateDomainAssociationResponse.proto b/fixture/CreateDomainAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDomainAssociationResponse.proto
diff --git a/fixture/CreateWebhook.yaml b/fixture/CreateWebhook.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWebhook.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateWebhookResponse.proto b/fixture/CreateWebhookResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWebhookResponse.proto
diff --git a/fixture/DeleteApp.yaml b/fixture/DeleteApp.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApp.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteAppResponse.proto b/fixture/DeleteAppResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppResponse.proto
diff --git a/fixture/DeleteBackendEnvironment.yaml b/fixture/DeleteBackendEnvironment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBackendEnvironment.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteBackendEnvironmentResponse.proto b/fixture/DeleteBackendEnvironmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBackendEnvironmentResponse.proto
diff --git a/fixture/DeleteBranch.yaml b/fixture/DeleteBranch.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBranch.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteBranchResponse.proto b/fixture/DeleteBranchResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBranchResponse.proto
diff --git a/fixture/DeleteDomainAssociation.yaml b/fixture/DeleteDomainAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDomainAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDomainAssociationResponse.proto b/fixture/DeleteDomainAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDomainAssociationResponse.proto
diff --git a/fixture/DeleteJob.yaml b/fixture/DeleteJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteJob.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteJobResponse.proto b/fixture/DeleteJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteJobResponse.proto
diff --git a/fixture/DeleteWebhook.yaml b/fixture/DeleteWebhook.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWebhook.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteWebhookResponse.proto b/fixture/DeleteWebhookResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWebhookResponse.proto
diff --git a/fixture/GenerateAccessLogs.yaml b/fixture/GenerateAccessLogs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GenerateAccessLogs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GenerateAccessLogsResponse.proto b/fixture/GenerateAccessLogsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GenerateAccessLogsResponse.proto
diff --git a/fixture/GetApp.yaml b/fixture/GetApp.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetApp.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetAppResponse.proto b/fixture/GetAppResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAppResponse.proto
diff --git a/fixture/GetArtifactUrl.yaml b/fixture/GetArtifactUrl.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetArtifactUrl.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetArtifactUrlResponse.proto b/fixture/GetArtifactUrlResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetArtifactUrlResponse.proto
diff --git a/fixture/GetBackendEnvironment.yaml b/fixture/GetBackendEnvironment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBackendEnvironment.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetBackendEnvironmentResponse.proto b/fixture/GetBackendEnvironmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBackendEnvironmentResponse.proto
diff --git a/fixture/GetBranch.yaml b/fixture/GetBranch.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBranch.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetBranchResponse.proto b/fixture/GetBranchResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBranchResponse.proto
diff --git a/fixture/GetDomainAssociation.yaml b/fixture/GetDomainAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDomainAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDomainAssociationResponse.proto b/fixture/GetDomainAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDomainAssociationResponse.proto
diff --git a/fixture/GetJob.yaml b/fixture/GetJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetJob.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetJobResponse.proto b/fixture/GetJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetJobResponse.proto
diff --git a/fixture/GetWebhook.yaml b/fixture/GetWebhook.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetWebhook.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetWebhookResponse.proto b/fixture/GetWebhookResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetWebhookResponse.proto
diff --git a/fixture/ListApps.yaml b/fixture/ListApps.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListApps.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListAppsResponse.proto b/fixture/ListAppsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppsResponse.proto
diff --git a/fixture/ListArtifacts.yaml b/fixture/ListArtifacts.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListArtifacts.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListArtifactsResponse.proto b/fixture/ListArtifactsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListArtifactsResponse.proto
diff --git a/fixture/ListBackendEnvironments.yaml b/fixture/ListBackendEnvironments.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListBackendEnvironments.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListBackendEnvironmentsResponse.proto b/fixture/ListBackendEnvironmentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListBackendEnvironmentsResponse.proto
diff --git a/fixture/ListBranches.yaml b/fixture/ListBranches.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListBranches.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListBranchesResponse.proto b/fixture/ListBranchesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListBranchesResponse.proto
diff --git a/fixture/ListDomainAssociations.yaml b/fixture/ListDomainAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDomainAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListDomainAssociationsResponse.proto b/fixture/ListDomainAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDomainAssociationsResponse.proto
diff --git a/fixture/ListJobs.yaml b/fixture/ListJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListJobsResponse.proto b/fixture/ListJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListJobsResponse.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/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  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/ListWebhooks.yaml b/fixture/ListWebhooks.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWebhooks.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListWebhooksResponse.proto b/fixture/ListWebhooksResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWebhooksResponse.proto
diff --git a/fixture/StartDeployment.yaml b/fixture/StartDeployment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartDeployment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartDeploymentResponse.proto b/fixture/StartDeploymentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartDeploymentResponse.proto
diff --git a/fixture/StartJob.yaml b/fixture/StartJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartJobResponse.proto b/fixture/StartJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartJobResponse.proto
diff --git a/fixture/StopJob.yaml b/fixture/StopJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopJob.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StopJobResponse.proto b/fixture/StopJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopJobResponse.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/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  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/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  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/UpdateApp.yaml b/fixture/UpdateApp.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateApp.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateAppResponse.proto b/fixture/UpdateAppResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAppResponse.proto
diff --git a/fixture/UpdateBranch.yaml b/fixture/UpdateBranch.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateBranch.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateBranchResponse.proto b/fixture/UpdateBranchResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateBranchResponse.proto
diff --git a/fixture/UpdateDomainAssociation.yaml b/fixture/UpdateDomainAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDomainAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateDomainAssociationResponse.proto b/fixture/UpdateDomainAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDomainAssociationResponse.proto
diff --git a/fixture/UpdateWebhook.yaml b/fixture/UpdateWebhook.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWebhook.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplify/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplify.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateWebhookResponse.proto b/fixture/UpdateWebhookResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWebhookResponse.proto
diff --git a/gen/Amazonka/Amplify.hs b/gen/Amazonka/Amplify.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify.hs
@@ -0,0 +1,421 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.Amplify
+-- 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 @2017-07-25@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amplify enables developers to develop and deploy cloud-powered mobile
+-- and web apps. The Amplify Console provides a continuous delivery and
+-- hosting service for web applications. For more information, see the
+-- <https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html Amplify Console User Guide>.
+-- The Amplify Framework is a comprehensive set of SDKs, libraries, tools,
+-- and documentation for client app development. For more information, see
+-- the <https://docs.amplify.aws/ Amplify Framework.>
+module Amazonka.Amplify
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** BadRequestException
+    _BadRequestException,
+
+    -- ** DependentServiceFailureException
+    _DependentServiceFailureException,
+
+    -- ** InternalFailureException
+    _InternalFailureException,
+
+    -- ** LimitExceededException
+    _LimitExceededException,
+
+    -- ** NotFoundException
+    _NotFoundException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** UnauthorizedException
+    _UnauthorizedException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateApp
+    CreateApp (CreateApp'),
+    newCreateApp,
+    CreateAppResponse (CreateAppResponse'),
+    newCreateAppResponse,
+
+    -- ** CreateBackendEnvironment
+    CreateBackendEnvironment (CreateBackendEnvironment'),
+    newCreateBackendEnvironment,
+    CreateBackendEnvironmentResponse (CreateBackendEnvironmentResponse'),
+    newCreateBackendEnvironmentResponse,
+
+    -- ** CreateBranch
+    CreateBranch (CreateBranch'),
+    newCreateBranch,
+    CreateBranchResponse (CreateBranchResponse'),
+    newCreateBranchResponse,
+
+    -- ** CreateDeployment
+    CreateDeployment (CreateDeployment'),
+    newCreateDeployment,
+    CreateDeploymentResponse (CreateDeploymentResponse'),
+    newCreateDeploymentResponse,
+
+    -- ** CreateDomainAssociation
+    CreateDomainAssociation (CreateDomainAssociation'),
+    newCreateDomainAssociation,
+    CreateDomainAssociationResponse (CreateDomainAssociationResponse'),
+    newCreateDomainAssociationResponse,
+
+    -- ** CreateWebhook
+    CreateWebhook (CreateWebhook'),
+    newCreateWebhook,
+    CreateWebhookResponse (CreateWebhookResponse'),
+    newCreateWebhookResponse,
+
+    -- ** DeleteApp
+    DeleteApp (DeleteApp'),
+    newDeleteApp,
+    DeleteAppResponse (DeleteAppResponse'),
+    newDeleteAppResponse,
+
+    -- ** DeleteBackendEnvironment
+    DeleteBackendEnvironment (DeleteBackendEnvironment'),
+    newDeleteBackendEnvironment,
+    DeleteBackendEnvironmentResponse (DeleteBackendEnvironmentResponse'),
+    newDeleteBackendEnvironmentResponse,
+
+    -- ** DeleteBranch
+    DeleteBranch (DeleteBranch'),
+    newDeleteBranch,
+    DeleteBranchResponse (DeleteBranchResponse'),
+    newDeleteBranchResponse,
+
+    -- ** DeleteDomainAssociation
+    DeleteDomainAssociation (DeleteDomainAssociation'),
+    newDeleteDomainAssociation,
+    DeleteDomainAssociationResponse (DeleteDomainAssociationResponse'),
+    newDeleteDomainAssociationResponse,
+
+    -- ** DeleteJob
+    DeleteJob (DeleteJob'),
+    newDeleteJob,
+    DeleteJobResponse (DeleteJobResponse'),
+    newDeleteJobResponse,
+
+    -- ** DeleteWebhook
+    DeleteWebhook (DeleteWebhook'),
+    newDeleteWebhook,
+    DeleteWebhookResponse (DeleteWebhookResponse'),
+    newDeleteWebhookResponse,
+
+    -- ** GenerateAccessLogs
+    GenerateAccessLogs (GenerateAccessLogs'),
+    newGenerateAccessLogs,
+    GenerateAccessLogsResponse (GenerateAccessLogsResponse'),
+    newGenerateAccessLogsResponse,
+
+    -- ** GetApp
+    GetApp (GetApp'),
+    newGetApp,
+    GetAppResponse (GetAppResponse'),
+    newGetAppResponse,
+
+    -- ** GetArtifactUrl
+    GetArtifactUrl (GetArtifactUrl'),
+    newGetArtifactUrl,
+    GetArtifactUrlResponse (GetArtifactUrlResponse'),
+    newGetArtifactUrlResponse,
+
+    -- ** GetBackendEnvironment
+    GetBackendEnvironment (GetBackendEnvironment'),
+    newGetBackendEnvironment,
+    GetBackendEnvironmentResponse (GetBackendEnvironmentResponse'),
+    newGetBackendEnvironmentResponse,
+
+    -- ** GetBranch
+    GetBranch (GetBranch'),
+    newGetBranch,
+    GetBranchResponse (GetBranchResponse'),
+    newGetBranchResponse,
+
+    -- ** GetDomainAssociation
+    GetDomainAssociation (GetDomainAssociation'),
+    newGetDomainAssociation,
+    GetDomainAssociationResponse (GetDomainAssociationResponse'),
+    newGetDomainAssociationResponse,
+
+    -- ** GetJob
+    GetJob (GetJob'),
+    newGetJob,
+    GetJobResponse (GetJobResponse'),
+    newGetJobResponse,
+
+    -- ** GetWebhook
+    GetWebhook (GetWebhook'),
+    newGetWebhook,
+    GetWebhookResponse (GetWebhookResponse'),
+    newGetWebhookResponse,
+
+    -- ** ListApps (Paginated)
+    ListApps (ListApps'),
+    newListApps,
+    ListAppsResponse (ListAppsResponse'),
+    newListAppsResponse,
+
+    -- ** ListArtifacts
+    ListArtifacts (ListArtifacts'),
+    newListArtifacts,
+    ListArtifactsResponse (ListArtifactsResponse'),
+    newListArtifactsResponse,
+
+    -- ** ListBackendEnvironments
+    ListBackendEnvironments (ListBackendEnvironments'),
+    newListBackendEnvironments,
+    ListBackendEnvironmentsResponse (ListBackendEnvironmentsResponse'),
+    newListBackendEnvironmentsResponse,
+
+    -- ** ListBranches (Paginated)
+    ListBranches (ListBranches'),
+    newListBranches,
+    ListBranchesResponse (ListBranchesResponse'),
+    newListBranchesResponse,
+
+    -- ** ListDomainAssociations (Paginated)
+    ListDomainAssociations (ListDomainAssociations'),
+    newListDomainAssociations,
+    ListDomainAssociationsResponse (ListDomainAssociationsResponse'),
+    newListDomainAssociationsResponse,
+
+    -- ** ListJobs (Paginated)
+    ListJobs (ListJobs'),
+    newListJobs,
+    ListJobsResponse (ListJobsResponse'),
+    newListJobsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ListWebhooks
+    ListWebhooks (ListWebhooks'),
+    newListWebhooks,
+    ListWebhooksResponse (ListWebhooksResponse'),
+    newListWebhooksResponse,
+
+    -- ** StartDeployment
+    StartDeployment (StartDeployment'),
+    newStartDeployment,
+    StartDeploymentResponse (StartDeploymentResponse'),
+    newStartDeploymentResponse,
+
+    -- ** StartJob
+    StartJob (StartJob'),
+    newStartJob,
+    StartJobResponse (StartJobResponse'),
+    newStartJobResponse,
+
+    -- ** StopJob
+    StopJob (StopJob'),
+    newStopJob,
+    StopJobResponse (StopJobResponse'),
+    newStopJobResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateApp
+    UpdateApp (UpdateApp'),
+    newUpdateApp,
+    UpdateAppResponse (UpdateAppResponse'),
+    newUpdateAppResponse,
+
+    -- ** UpdateBranch
+    UpdateBranch (UpdateBranch'),
+    newUpdateBranch,
+    UpdateBranchResponse (UpdateBranchResponse'),
+    newUpdateBranchResponse,
+
+    -- ** UpdateDomainAssociation
+    UpdateDomainAssociation (UpdateDomainAssociation'),
+    newUpdateDomainAssociation,
+    UpdateDomainAssociationResponse (UpdateDomainAssociationResponse'),
+    newUpdateDomainAssociationResponse,
+
+    -- ** UpdateWebhook
+    UpdateWebhook (UpdateWebhook'),
+    newUpdateWebhook,
+    UpdateWebhookResponse (UpdateWebhookResponse'),
+    newUpdateWebhookResponse,
+
+    -- * Types
+
+    -- ** DomainStatus
+    DomainStatus (..),
+
+    -- ** JobStatus
+    JobStatus (..),
+
+    -- ** JobType
+    JobType (..),
+
+    -- ** Platform
+    Platform (..),
+
+    -- ** RepositoryCloneMethod
+    RepositoryCloneMethod (..),
+
+    -- ** Stage
+    Stage (..),
+
+    -- ** App
+    App (App'),
+    newApp,
+
+    -- ** Artifact
+    Artifact (Artifact'),
+    newArtifact,
+
+    -- ** AutoBranchCreationConfig
+    AutoBranchCreationConfig (AutoBranchCreationConfig'),
+    newAutoBranchCreationConfig,
+
+    -- ** BackendEnvironment
+    BackendEnvironment (BackendEnvironment'),
+    newBackendEnvironment,
+
+    -- ** Branch
+    Branch (Branch'),
+    newBranch,
+
+    -- ** CustomRule
+    CustomRule (CustomRule'),
+    newCustomRule,
+
+    -- ** DomainAssociation
+    DomainAssociation (DomainAssociation'),
+    newDomainAssociation,
+
+    -- ** Job
+    Job (Job'),
+    newJob,
+
+    -- ** JobSummary
+    JobSummary (JobSummary'),
+    newJobSummary,
+
+    -- ** ProductionBranch
+    ProductionBranch (ProductionBranch'),
+    newProductionBranch,
+
+    -- ** Step
+    Step (Step'),
+    newStep,
+
+    -- ** SubDomain
+    SubDomain (SubDomain'),
+    newSubDomain,
+
+    -- ** SubDomainSetting
+    SubDomainSetting (SubDomainSetting'),
+    newSubDomainSetting,
+
+    -- ** Webhook
+    Webhook (Webhook'),
+    newWebhook,
+  )
+where
+
+import Amazonka.Amplify.CreateApp
+import Amazonka.Amplify.CreateBackendEnvironment
+import Amazonka.Amplify.CreateBranch
+import Amazonka.Amplify.CreateDeployment
+import Amazonka.Amplify.CreateDomainAssociation
+import Amazonka.Amplify.CreateWebhook
+import Amazonka.Amplify.DeleteApp
+import Amazonka.Amplify.DeleteBackendEnvironment
+import Amazonka.Amplify.DeleteBranch
+import Amazonka.Amplify.DeleteDomainAssociation
+import Amazonka.Amplify.DeleteJob
+import Amazonka.Amplify.DeleteWebhook
+import Amazonka.Amplify.GenerateAccessLogs
+import Amazonka.Amplify.GetApp
+import Amazonka.Amplify.GetArtifactUrl
+import Amazonka.Amplify.GetBackendEnvironment
+import Amazonka.Amplify.GetBranch
+import Amazonka.Amplify.GetDomainAssociation
+import Amazonka.Amplify.GetJob
+import Amazonka.Amplify.GetWebhook
+import Amazonka.Amplify.Lens
+import Amazonka.Amplify.ListApps
+import Amazonka.Amplify.ListArtifacts
+import Amazonka.Amplify.ListBackendEnvironments
+import Amazonka.Amplify.ListBranches
+import Amazonka.Amplify.ListDomainAssociations
+import Amazonka.Amplify.ListJobs
+import Amazonka.Amplify.ListTagsForResource
+import Amazonka.Amplify.ListWebhooks
+import Amazonka.Amplify.StartDeployment
+import Amazonka.Amplify.StartJob
+import Amazonka.Amplify.StopJob
+import Amazonka.Amplify.TagResource
+import Amazonka.Amplify.Types
+import Amazonka.Amplify.UntagResource
+import Amazonka.Amplify.UpdateApp
+import Amazonka.Amplify.UpdateBranch
+import Amazonka.Amplify.UpdateDomainAssociation
+import Amazonka.Amplify.UpdateWebhook
+import Amazonka.Amplify.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 'Amplify'.
+
+-- $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/Amplify/CreateApp.hs b/gen/Amazonka/Amplify/CreateApp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/CreateApp.hs
@@ -0,0 +1,523 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.CreateApp
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new Amplify app.
+module Amazonka.Amplify.CreateApp
+  ( -- * Creating a Request
+    CreateApp (..),
+    newCreateApp,
+
+    -- * Request Lenses
+    createApp_accessToken,
+    createApp_autoBranchCreationConfig,
+    createApp_autoBranchCreationPatterns,
+    createApp_basicAuthCredentials,
+    createApp_buildSpec,
+    createApp_customHeaders,
+    createApp_customRules,
+    createApp_description,
+    createApp_enableAutoBranchCreation,
+    createApp_enableBasicAuth,
+    createApp_enableBranchAutoBuild,
+    createApp_enableBranchAutoDeletion,
+    createApp_environmentVariables,
+    createApp_iamServiceRoleArn,
+    createApp_oauthToken,
+    createApp_platform,
+    createApp_repository,
+    createApp_tags,
+    createApp_name,
+
+    -- * Destructuring the Response
+    CreateAppResponse (..),
+    newCreateAppResponse,
+
+    -- * Response Lenses
+    createAppResponse_httpStatus,
+    createAppResponse_app,
+  )
+where
+
+import Amazonka.Amplify.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 structure used to create apps in Amplify.
+--
+-- /See:/ 'newCreateApp' smart constructor.
+data CreateApp = CreateApp'
+  { -- | The personal access token for a GitHub repository for an Amplify app.
+    -- The personal access token is used to authorize access to a GitHub
+    -- repository using the Amplify GitHub App. The token is not stored.
+    --
+    -- Use @accessToken@ for GitHub repositories only. To authorize access to a
+    -- repository provider such as Bitbucket or CodeCommit, use @oauthToken@.
+    --
+    -- You must specify either @accessToken@ or @oauthToken@ when you create a
+    -- new app.
+    --
+    -- Existing Amplify apps deployed from a GitHub repository using OAuth
+    -- continue to work with CI\/CD. However, we strongly recommend that you
+    -- migrate these apps to use the GitHub App. For more information, see
+    -- <https://docs.aws.amazon.com/amplify/latest/UserGuide/setting-up-GitHub-access.html#migrating-to-github-app-auth Migrating an existing OAuth app to the Amplify GitHub App>
+    -- in the /Amplify User Guide/ .
+    accessToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The automated branch creation configuration for an Amplify app.
+    autoBranchCreationConfig :: Prelude.Maybe AutoBranchCreationConfig,
+    -- | The automated branch creation glob patterns for an Amplify app.
+    autoBranchCreationPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | The credentials for basic authorization for an Amplify app. You must
+    -- base64-encode the authorization credentials and provide them in the
+    -- format @user:password@.
+    basicAuthCredentials :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The build specification (build spec) for an Amplify app.
+    buildSpec :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The custom HTTP headers for an Amplify app.
+    customHeaders :: Prelude.Maybe Prelude.Text,
+    -- | The custom rewrite and redirect rules for an Amplify app.
+    customRules :: Prelude.Maybe [CustomRule],
+    -- | The description for an Amplify app.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Enables automated branch creation for an Amplify app.
+    enableAutoBranchCreation :: Prelude.Maybe Prelude.Bool,
+    -- | Enables basic authorization for an Amplify app. This will apply to all
+    -- branches that are part of this app.
+    enableBasicAuth :: Prelude.Maybe Prelude.Bool,
+    -- | Enables the auto building of branches for an Amplify app.
+    enableBranchAutoBuild :: Prelude.Maybe Prelude.Bool,
+    -- | Automatically disconnects a branch in the Amplify Console when you
+    -- delete a branch from your Git repository.
+    enableBranchAutoDeletion :: Prelude.Maybe Prelude.Bool,
+    -- | The environment variables map for an Amplify app.
+    environmentVariables :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The AWS Identity and Access Management (IAM) service role for an Amplify
+    -- app.
+    iamServiceRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The OAuth token for a third-party source control system for an Amplify
+    -- app. The OAuth token is used to create a webhook and a read-only deploy
+    -- key using SSH cloning. The OAuth token is not stored.
+    --
+    -- Use @oauthToken@ for repository providers other than GitHub, such as
+    -- Bitbucket or CodeCommit. To authorize access to GitHub as your
+    -- repository provider, use @accessToken@.
+    --
+    -- You must specify either @oauthToken@ or @accessToken@ when you create a
+    -- new app.
+    --
+    -- Existing Amplify apps deployed from a GitHub repository using OAuth
+    -- continue to work with CI\/CD. However, we strongly recommend that you
+    -- migrate these apps to use the GitHub App. For more information, see
+    -- <https://docs.aws.amazon.com/amplify/latest/UserGuide/setting-up-GitHub-access.html#migrating-to-github-app-auth Migrating an existing OAuth app to the Amplify GitHub App>
+    -- in the /Amplify User Guide/ .
+    oauthToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The platform for the Amplify app. For a static app, set the platform
+    -- type to @WEB@. For a dynamic server-side rendered (SSR) app, set the
+    -- platform type to @WEB_COMPUTE@. For an app requiring Amplify Hosting\'s
+    -- original SSR support only, set the platform type to @WEB_DYNAMIC@.
+    platform :: Prelude.Maybe Platform,
+    -- | The repository for an Amplify app.
+    repository :: Prelude.Maybe Prelude.Text,
+    -- | The tag for an Amplify app.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name for an Amplify app.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateApp' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessToken', 'createApp_accessToken' - The personal access token for a GitHub repository for an Amplify app.
+-- The personal access token is used to authorize access to a GitHub
+-- repository using the Amplify GitHub App. The token is not stored.
+--
+-- Use @accessToken@ for GitHub repositories only. To authorize access to a
+-- repository provider such as Bitbucket or CodeCommit, use @oauthToken@.
+--
+-- You must specify either @accessToken@ or @oauthToken@ when you create a
+-- new app.
+--
+-- Existing Amplify apps deployed from a GitHub repository using OAuth
+-- continue to work with CI\/CD. However, we strongly recommend that you
+-- migrate these apps to use the GitHub App. For more information, see
+-- <https://docs.aws.amazon.com/amplify/latest/UserGuide/setting-up-GitHub-access.html#migrating-to-github-app-auth Migrating an existing OAuth app to the Amplify GitHub App>
+-- in the /Amplify User Guide/ .
+--
+-- 'autoBranchCreationConfig', 'createApp_autoBranchCreationConfig' - The automated branch creation configuration for an Amplify app.
+--
+-- 'autoBranchCreationPatterns', 'createApp_autoBranchCreationPatterns' - The automated branch creation glob patterns for an Amplify app.
+--
+-- 'basicAuthCredentials', 'createApp_basicAuthCredentials' - The credentials for basic authorization for an Amplify app. You must
+-- base64-encode the authorization credentials and provide them in the
+-- format @user:password@.
+--
+-- 'buildSpec', 'createApp_buildSpec' - The build specification (build spec) for an Amplify app.
+--
+-- 'customHeaders', 'createApp_customHeaders' - The custom HTTP headers for an Amplify app.
+--
+-- 'customRules', 'createApp_customRules' - The custom rewrite and redirect rules for an Amplify app.
+--
+-- 'description', 'createApp_description' - The description for an Amplify app.
+--
+-- 'enableAutoBranchCreation', 'createApp_enableAutoBranchCreation' - Enables automated branch creation for an Amplify app.
+--
+-- 'enableBasicAuth', 'createApp_enableBasicAuth' - Enables basic authorization for an Amplify app. This will apply to all
+-- branches that are part of this app.
+--
+-- 'enableBranchAutoBuild', 'createApp_enableBranchAutoBuild' - Enables the auto building of branches for an Amplify app.
+--
+-- 'enableBranchAutoDeletion', 'createApp_enableBranchAutoDeletion' - Automatically disconnects a branch in the Amplify Console when you
+-- delete a branch from your Git repository.
+--
+-- 'environmentVariables', 'createApp_environmentVariables' - The environment variables map for an Amplify app.
+--
+-- 'iamServiceRoleArn', 'createApp_iamServiceRoleArn' - The AWS Identity and Access Management (IAM) service role for an Amplify
+-- app.
+--
+-- 'oauthToken', 'createApp_oauthToken' - The OAuth token for a third-party source control system for an Amplify
+-- app. The OAuth token is used to create a webhook and a read-only deploy
+-- key using SSH cloning. The OAuth token is not stored.
+--
+-- Use @oauthToken@ for repository providers other than GitHub, such as
+-- Bitbucket or CodeCommit. To authorize access to GitHub as your
+-- repository provider, use @accessToken@.
+--
+-- You must specify either @oauthToken@ or @accessToken@ when you create a
+-- new app.
+--
+-- Existing Amplify apps deployed from a GitHub repository using OAuth
+-- continue to work with CI\/CD. However, we strongly recommend that you
+-- migrate these apps to use the GitHub App. For more information, see
+-- <https://docs.aws.amazon.com/amplify/latest/UserGuide/setting-up-GitHub-access.html#migrating-to-github-app-auth Migrating an existing OAuth app to the Amplify GitHub App>
+-- in the /Amplify User Guide/ .
+--
+-- 'platform', 'createApp_platform' - The platform for the Amplify app. For a static app, set the platform
+-- type to @WEB@. For a dynamic server-side rendered (SSR) app, set the
+-- platform type to @WEB_COMPUTE@. For an app requiring Amplify Hosting\'s
+-- original SSR support only, set the platform type to @WEB_DYNAMIC@.
+--
+-- 'repository', 'createApp_repository' - The repository for an Amplify app.
+--
+-- 'tags', 'createApp_tags' - The tag for an Amplify app.
+--
+-- 'name', 'createApp_name' - The name for an Amplify app.
+newCreateApp ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateApp
+newCreateApp pName_ =
+  CreateApp'
+    { accessToken = Prelude.Nothing,
+      autoBranchCreationConfig = Prelude.Nothing,
+      autoBranchCreationPatterns = Prelude.Nothing,
+      basicAuthCredentials = Prelude.Nothing,
+      buildSpec = Prelude.Nothing,
+      customHeaders = Prelude.Nothing,
+      customRules = Prelude.Nothing,
+      description = Prelude.Nothing,
+      enableAutoBranchCreation = Prelude.Nothing,
+      enableBasicAuth = Prelude.Nothing,
+      enableBranchAutoBuild = Prelude.Nothing,
+      enableBranchAutoDeletion = Prelude.Nothing,
+      environmentVariables = Prelude.Nothing,
+      iamServiceRoleArn = Prelude.Nothing,
+      oauthToken = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      repository = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The personal access token for a GitHub repository for an Amplify app.
+-- The personal access token is used to authorize access to a GitHub
+-- repository using the Amplify GitHub App. The token is not stored.
+--
+-- Use @accessToken@ for GitHub repositories only. To authorize access to a
+-- repository provider such as Bitbucket or CodeCommit, use @oauthToken@.
+--
+-- You must specify either @accessToken@ or @oauthToken@ when you create a
+-- new app.
+--
+-- Existing Amplify apps deployed from a GitHub repository using OAuth
+-- continue to work with CI\/CD. However, we strongly recommend that you
+-- migrate these apps to use the GitHub App. For more information, see
+-- <https://docs.aws.amazon.com/amplify/latest/UserGuide/setting-up-GitHub-access.html#migrating-to-github-app-auth Migrating an existing OAuth app to the Amplify GitHub App>
+-- in the /Amplify User Guide/ .
+createApp_accessToken :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Text)
+createApp_accessToken = Lens.lens (\CreateApp' {accessToken} -> accessToken) (\s@CreateApp' {} a -> s {accessToken = a} :: CreateApp) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The automated branch creation configuration for an Amplify app.
+createApp_autoBranchCreationConfig :: Lens.Lens' CreateApp (Prelude.Maybe AutoBranchCreationConfig)
+createApp_autoBranchCreationConfig = Lens.lens (\CreateApp' {autoBranchCreationConfig} -> autoBranchCreationConfig) (\s@CreateApp' {} a -> s {autoBranchCreationConfig = a} :: CreateApp)
+
+-- | The automated branch creation glob patterns for an Amplify app.
+createApp_autoBranchCreationPatterns :: Lens.Lens' CreateApp (Prelude.Maybe [Prelude.Text])
+createApp_autoBranchCreationPatterns = Lens.lens (\CreateApp' {autoBranchCreationPatterns} -> autoBranchCreationPatterns) (\s@CreateApp' {} a -> s {autoBranchCreationPatterns = a} :: CreateApp) Prelude.. Lens.mapping Lens.coerced
+
+-- | The credentials for basic authorization for an Amplify app. You must
+-- base64-encode the authorization credentials and provide them in the
+-- format @user:password@.
+createApp_basicAuthCredentials :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Text)
+createApp_basicAuthCredentials = Lens.lens (\CreateApp' {basicAuthCredentials} -> basicAuthCredentials) (\s@CreateApp' {} a -> s {basicAuthCredentials = a} :: CreateApp) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The build specification (build spec) for an Amplify app.
+createApp_buildSpec :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Text)
+createApp_buildSpec = Lens.lens (\CreateApp' {buildSpec} -> buildSpec) (\s@CreateApp' {} a -> s {buildSpec = a} :: CreateApp) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The custom HTTP headers for an Amplify app.
+createApp_customHeaders :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Text)
+createApp_customHeaders = Lens.lens (\CreateApp' {customHeaders} -> customHeaders) (\s@CreateApp' {} a -> s {customHeaders = a} :: CreateApp)
+
+-- | The custom rewrite and redirect rules for an Amplify app.
+createApp_customRules :: Lens.Lens' CreateApp (Prelude.Maybe [CustomRule])
+createApp_customRules = Lens.lens (\CreateApp' {customRules} -> customRules) (\s@CreateApp' {} a -> s {customRules = a} :: CreateApp) Prelude.. Lens.mapping Lens.coerced
+
+-- | The description for an Amplify app.
+createApp_description :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Text)
+createApp_description = Lens.lens (\CreateApp' {description} -> description) (\s@CreateApp' {} a -> s {description = a} :: CreateApp)
+
+-- | Enables automated branch creation for an Amplify app.
+createApp_enableAutoBranchCreation :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Bool)
+createApp_enableAutoBranchCreation = Lens.lens (\CreateApp' {enableAutoBranchCreation} -> enableAutoBranchCreation) (\s@CreateApp' {} a -> s {enableAutoBranchCreation = a} :: CreateApp)
+
+-- | Enables basic authorization for an Amplify app. This will apply to all
+-- branches that are part of this app.
+createApp_enableBasicAuth :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Bool)
+createApp_enableBasicAuth = Lens.lens (\CreateApp' {enableBasicAuth} -> enableBasicAuth) (\s@CreateApp' {} a -> s {enableBasicAuth = a} :: CreateApp)
+
+-- | Enables the auto building of branches for an Amplify app.
+createApp_enableBranchAutoBuild :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Bool)
+createApp_enableBranchAutoBuild = Lens.lens (\CreateApp' {enableBranchAutoBuild} -> enableBranchAutoBuild) (\s@CreateApp' {} a -> s {enableBranchAutoBuild = a} :: CreateApp)
+
+-- | Automatically disconnects a branch in the Amplify Console when you
+-- delete a branch from your Git repository.
+createApp_enableBranchAutoDeletion :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Bool)
+createApp_enableBranchAutoDeletion = Lens.lens (\CreateApp' {enableBranchAutoDeletion} -> enableBranchAutoDeletion) (\s@CreateApp' {} a -> s {enableBranchAutoDeletion = a} :: CreateApp)
+
+-- | The environment variables map for an Amplify app.
+createApp_environmentVariables :: Lens.Lens' CreateApp (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createApp_environmentVariables = Lens.lens (\CreateApp' {environmentVariables} -> environmentVariables) (\s@CreateApp' {} a -> s {environmentVariables = a} :: CreateApp) Prelude.. Lens.mapping Lens.coerced
+
+-- | The AWS Identity and Access Management (IAM) service role for an Amplify
+-- app.
+createApp_iamServiceRoleArn :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Text)
+createApp_iamServiceRoleArn = Lens.lens (\CreateApp' {iamServiceRoleArn} -> iamServiceRoleArn) (\s@CreateApp' {} a -> s {iamServiceRoleArn = a} :: CreateApp)
+
+-- | The OAuth token for a third-party source control system for an Amplify
+-- app. The OAuth token is used to create a webhook and a read-only deploy
+-- key using SSH cloning. The OAuth token is not stored.
+--
+-- Use @oauthToken@ for repository providers other than GitHub, such as
+-- Bitbucket or CodeCommit. To authorize access to GitHub as your
+-- repository provider, use @accessToken@.
+--
+-- You must specify either @oauthToken@ or @accessToken@ when you create a
+-- new app.
+--
+-- Existing Amplify apps deployed from a GitHub repository using OAuth
+-- continue to work with CI\/CD. However, we strongly recommend that you
+-- migrate these apps to use the GitHub App. For more information, see
+-- <https://docs.aws.amazon.com/amplify/latest/UserGuide/setting-up-GitHub-access.html#migrating-to-github-app-auth Migrating an existing OAuth app to the Amplify GitHub App>
+-- in the /Amplify User Guide/ .
+createApp_oauthToken :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Text)
+createApp_oauthToken = Lens.lens (\CreateApp' {oauthToken} -> oauthToken) (\s@CreateApp' {} a -> s {oauthToken = a} :: CreateApp) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The platform for the Amplify app. For a static app, set the platform
+-- type to @WEB@. For a dynamic server-side rendered (SSR) app, set the
+-- platform type to @WEB_COMPUTE@. For an app requiring Amplify Hosting\'s
+-- original SSR support only, set the platform type to @WEB_DYNAMIC@.
+createApp_platform :: Lens.Lens' CreateApp (Prelude.Maybe Platform)
+createApp_platform = Lens.lens (\CreateApp' {platform} -> platform) (\s@CreateApp' {} a -> s {platform = a} :: CreateApp)
+
+-- | The repository for an Amplify app.
+createApp_repository :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Text)
+createApp_repository = Lens.lens (\CreateApp' {repository} -> repository) (\s@CreateApp' {} a -> s {repository = a} :: CreateApp)
+
+-- | The tag for an Amplify app.
+createApp_tags :: Lens.Lens' CreateApp (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createApp_tags = Lens.lens (\CreateApp' {tags} -> tags) (\s@CreateApp' {} a -> s {tags = a} :: CreateApp) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name for an Amplify app.
+createApp_name :: Lens.Lens' CreateApp Prelude.Text
+createApp_name = Lens.lens (\CreateApp' {name} -> name) (\s@CreateApp' {} a -> s {name = a} :: CreateApp)
+
+instance Core.AWSRequest CreateApp where
+  type AWSResponse CreateApp = CreateAppResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAppResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "app")
+      )
+
+instance Prelude.Hashable CreateApp where
+  hashWithSalt _salt CreateApp' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessToken
+      `Prelude.hashWithSalt` autoBranchCreationConfig
+      `Prelude.hashWithSalt` autoBranchCreationPatterns
+      `Prelude.hashWithSalt` basicAuthCredentials
+      `Prelude.hashWithSalt` buildSpec
+      `Prelude.hashWithSalt` customHeaders
+      `Prelude.hashWithSalt` customRules
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` enableAutoBranchCreation
+      `Prelude.hashWithSalt` enableBasicAuth
+      `Prelude.hashWithSalt` enableBranchAutoBuild
+      `Prelude.hashWithSalt` enableBranchAutoDeletion
+      `Prelude.hashWithSalt` environmentVariables
+      `Prelude.hashWithSalt` iamServiceRoleArn
+      `Prelude.hashWithSalt` oauthToken
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` repository
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateApp where
+  rnf CreateApp' {..} =
+    Prelude.rnf accessToken
+      `Prelude.seq` Prelude.rnf autoBranchCreationConfig
+      `Prelude.seq` Prelude.rnf autoBranchCreationPatterns
+      `Prelude.seq` Prelude.rnf basicAuthCredentials
+      `Prelude.seq` Prelude.rnf buildSpec
+      `Prelude.seq` Prelude.rnf customHeaders
+      `Prelude.seq` Prelude.rnf customRules
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf enableAutoBranchCreation
+      `Prelude.seq` Prelude.rnf enableBasicAuth
+      `Prelude.seq` Prelude.rnf enableBranchAutoBuild
+      `Prelude.seq` Prelude.rnf enableBranchAutoDeletion
+      `Prelude.seq` Prelude.rnf environmentVariables
+      `Prelude.seq` Prelude.rnf iamServiceRoleArn
+      `Prelude.seq` Prelude.rnf oauthToken
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateApp where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateApp where
+  toJSON CreateApp' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("accessToken" Data..=) Prelude.<$> accessToken,
+            ("autoBranchCreationConfig" Data..=)
+              Prelude.<$> autoBranchCreationConfig,
+            ("autoBranchCreationPatterns" Data..=)
+              Prelude.<$> autoBranchCreationPatterns,
+            ("basicAuthCredentials" Data..=)
+              Prelude.<$> basicAuthCredentials,
+            ("buildSpec" Data..=) Prelude.<$> buildSpec,
+            ("customHeaders" Data..=) Prelude.<$> customHeaders,
+            ("customRules" Data..=) Prelude.<$> customRules,
+            ("description" Data..=) Prelude.<$> description,
+            ("enableAutoBranchCreation" Data..=)
+              Prelude.<$> enableAutoBranchCreation,
+            ("enableBasicAuth" Data..=)
+              Prelude.<$> enableBasicAuth,
+            ("enableBranchAutoBuild" Data..=)
+              Prelude.<$> enableBranchAutoBuild,
+            ("enableBranchAutoDeletion" Data..=)
+              Prelude.<$> enableBranchAutoDeletion,
+            ("environmentVariables" Data..=)
+              Prelude.<$> environmentVariables,
+            ("iamServiceRoleArn" Data..=)
+              Prelude.<$> iamServiceRoleArn,
+            ("oauthToken" Data..=) Prelude.<$> oauthToken,
+            ("platform" Data..=) Prelude.<$> platform,
+            ("repository" Data..=) Prelude.<$> repository,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateApp where
+  toPath = Prelude.const "/apps"
+
+instance Data.ToQuery CreateApp where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAppResponse' smart constructor.
+data CreateAppResponse = CreateAppResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    app :: App
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAppResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createAppResponse_httpStatus' - The response's http status code.
+--
+-- 'app', 'createAppResponse_app' - Undocumented member.
+newCreateAppResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'app'
+  App ->
+  CreateAppResponse
+newCreateAppResponse pHttpStatus_ pApp_ =
+  CreateAppResponse'
+    { httpStatus = pHttpStatus_,
+      app = pApp_
+    }
+
+-- | The response's http status code.
+createAppResponse_httpStatus :: Lens.Lens' CreateAppResponse Prelude.Int
+createAppResponse_httpStatus = Lens.lens (\CreateAppResponse' {httpStatus} -> httpStatus) (\s@CreateAppResponse' {} a -> s {httpStatus = a} :: CreateAppResponse)
+
+-- | Undocumented member.
+createAppResponse_app :: Lens.Lens' CreateAppResponse App
+createAppResponse_app = Lens.lens (\CreateAppResponse' {app} -> app) (\s@CreateAppResponse' {} a -> s {app = a} :: CreateAppResponse)
+
+instance Prelude.NFData CreateAppResponse where
+  rnf CreateAppResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf app
diff --git a/gen/Amazonka/Amplify/CreateBackendEnvironment.hs b/gen/Amazonka/Amplify/CreateBackendEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/CreateBackendEnvironment.hs
@@ -0,0 +1,225 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.CreateBackendEnvironment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new backend environment for an Amplify app.
+module Amazonka.Amplify.CreateBackendEnvironment
+  ( -- * Creating a Request
+    CreateBackendEnvironment (..),
+    newCreateBackendEnvironment,
+
+    -- * Request Lenses
+    createBackendEnvironment_deploymentArtifacts,
+    createBackendEnvironment_stackName,
+    createBackendEnvironment_appId,
+    createBackendEnvironment_environmentName,
+
+    -- * Destructuring the Response
+    CreateBackendEnvironmentResponse (..),
+    newCreateBackendEnvironmentResponse,
+
+    -- * Response Lenses
+    createBackendEnvironmentResponse_httpStatus,
+    createBackendEnvironmentResponse_backendEnvironment,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the backend environment create request.
+--
+-- /See:/ 'newCreateBackendEnvironment' smart constructor.
+data CreateBackendEnvironment = CreateBackendEnvironment'
+  { -- | The name of deployment artifacts.
+    deploymentArtifacts :: Prelude.Maybe Prelude.Text,
+    -- | The AWS CloudFormation stack name of a backend environment.
+    stackName :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The name for the backend environment.
+    environmentName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBackendEnvironment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deploymentArtifacts', 'createBackendEnvironment_deploymentArtifacts' - The name of deployment artifacts.
+--
+-- 'stackName', 'createBackendEnvironment_stackName' - The AWS CloudFormation stack name of a backend environment.
+--
+-- 'appId', 'createBackendEnvironment_appId' - The unique ID for an Amplify app.
+--
+-- 'environmentName', 'createBackendEnvironment_environmentName' - The name for the backend environment.
+newCreateBackendEnvironment ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  CreateBackendEnvironment
+newCreateBackendEnvironment pAppId_ pEnvironmentName_ =
+  CreateBackendEnvironment'
+    { deploymentArtifacts =
+        Prelude.Nothing,
+      stackName = Prelude.Nothing,
+      appId = pAppId_,
+      environmentName = pEnvironmentName_
+    }
+
+-- | The name of deployment artifacts.
+createBackendEnvironment_deploymentArtifacts :: Lens.Lens' CreateBackendEnvironment (Prelude.Maybe Prelude.Text)
+createBackendEnvironment_deploymentArtifacts = Lens.lens (\CreateBackendEnvironment' {deploymentArtifacts} -> deploymentArtifacts) (\s@CreateBackendEnvironment' {} a -> s {deploymentArtifacts = a} :: CreateBackendEnvironment)
+
+-- | The AWS CloudFormation stack name of a backend environment.
+createBackendEnvironment_stackName :: Lens.Lens' CreateBackendEnvironment (Prelude.Maybe Prelude.Text)
+createBackendEnvironment_stackName = Lens.lens (\CreateBackendEnvironment' {stackName} -> stackName) (\s@CreateBackendEnvironment' {} a -> s {stackName = a} :: CreateBackendEnvironment)
+
+-- | The unique ID for an Amplify app.
+createBackendEnvironment_appId :: Lens.Lens' CreateBackendEnvironment Prelude.Text
+createBackendEnvironment_appId = Lens.lens (\CreateBackendEnvironment' {appId} -> appId) (\s@CreateBackendEnvironment' {} a -> s {appId = a} :: CreateBackendEnvironment)
+
+-- | The name for the backend environment.
+createBackendEnvironment_environmentName :: Lens.Lens' CreateBackendEnvironment Prelude.Text
+createBackendEnvironment_environmentName = Lens.lens (\CreateBackendEnvironment' {environmentName} -> environmentName) (\s@CreateBackendEnvironment' {} a -> s {environmentName = a} :: CreateBackendEnvironment)
+
+instance Core.AWSRequest CreateBackendEnvironment where
+  type
+    AWSResponse CreateBackendEnvironment =
+      CreateBackendEnvironmentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateBackendEnvironmentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "backendEnvironment")
+      )
+
+instance Prelude.Hashable CreateBackendEnvironment where
+  hashWithSalt _salt CreateBackendEnvironment' {..} =
+    _salt
+      `Prelude.hashWithSalt` deploymentArtifacts
+      `Prelude.hashWithSalt` stackName
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+
+instance Prelude.NFData CreateBackendEnvironment where
+  rnf CreateBackendEnvironment' {..} =
+    Prelude.rnf deploymentArtifacts
+      `Prelude.seq` Prelude.rnf stackName
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+
+instance Data.ToHeaders CreateBackendEnvironment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateBackendEnvironment where
+  toJSON CreateBackendEnvironment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("deploymentArtifacts" Data..=)
+              Prelude.<$> deploymentArtifacts,
+            ("stackName" Data..=) Prelude.<$> stackName,
+            Prelude.Just
+              ("environmentName" Data..= environmentName)
+          ]
+      )
+
+instance Data.ToPath CreateBackendEnvironment where
+  toPath CreateBackendEnvironment' {..} =
+    Prelude.mconcat
+      ["/apps/", Data.toBS appId, "/backendenvironments"]
+
+instance Data.ToQuery CreateBackendEnvironment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the create backend environment request.
+--
+-- /See:/ 'newCreateBackendEnvironmentResponse' smart constructor.
+data CreateBackendEnvironmentResponse = CreateBackendEnvironmentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Describes the backend environment for an Amplify app.
+    backendEnvironment :: BackendEnvironment
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBackendEnvironmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createBackendEnvironmentResponse_httpStatus' - The response's http status code.
+--
+-- 'backendEnvironment', 'createBackendEnvironmentResponse_backendEnvironment' - Describes the backend environment for an Amplify app.
+newCreateBackendEnvironmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'backendEnvironment'
+  BackendEnvironment ->
+  CreateBackendEnvironmentResponse
+newCreateBackendEnvironmentResponse
+  pHttpStatus_
+  pBackendEnvironment_ =
+    CreateBackendEnvironmentResponse'
+      { httpStatus =
+          pHttpStatus_,
+        backendEnvironment = pBackendEnvironment_
+      }
+
+-- | The response's http status code.
+createBackendEnvironmentResponse_httpStatus :: Lens.Lens' CreateBackendEnvironmentResponse Prelude.Int
+createBackendEnvironmentResponse_httpStatus = Lens.lens (\CreateBackendEnvironmentResponse' {httpStatus} -> httpStatus) (\s@CreateBackendEnvironmentResponse' {} a -> s {httpStatus = a} :: CreateBackendEnvironmentResponse)
+
+-- | Describes the backend environment for an Amplify app.
+createBackendEnvironmentResponse_backendEnvironment :: Lens.Lens' CreateBackendEnvironmentResponse BackendEnvironment
+createBackendEnvironmentResponse_backendEnvironment = Lens.lens (\CreateBackendEnvironmentResponse' {backendEnvironment} -> backendEnvironment) (\s@CreateBackendEnvironmentResponse' {} a -> s {backendEnvironment = a} :: CreateBackendEnvironmentResponse)
+
+instance
+  Prelude.NFData
+    CreateBackendEnvironmentResponse
+  where
+  rnf CreateBackendEnvironmentResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf backendEnvironment
diff --git a/gen/Amazonka/Amplify/CreateBranch.hs b/gen/Amazonka/Amplify/CreateBranch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/CreateBranch.hs
@@ -0,0 +1,436 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.CreateBranch
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new branch for an Amplify app.
+module Amazonka.Amplify.CreateBranch
+  ( -- * Creating a Request
+    CreateBranch (..),
+    newCreateBranch,
+
+    -- * Request Lenses
+    createBranch_backendEnvironmentArn,
+    createBranch_basicAuthCredentials,
+    createBranch_buildSpec,
+    createBranch_description,
+    createBranch_displayName,
+    createBranch_enableAutoBuild,
+    createBranch_enableBasicAuth,
+    createBranch_enableNotification,
+    createBranch_enablePerformanceMode,
+    createBranch_enablePullRequestPreview,
+    createBranch_environmentVariables,
+    createBranch_framework,
+    createBranch_pullRequestEnvironmentName,
+    createBranch_stage,
+    createBranch_tags,
+    createBranch_ttl,
+    createBranch_appId,
+    createBranch_branchName,
+
+    -- * Destructuring the Response
+    CreateBranchResponse (..),
+    newCreateBranchResponse,
+
+    -- * Response Lenses
+    createBranchResponse_httpStatus,
+    createBranchResponse_branch,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the create branch request.
+--
+-- /See:/ 'newCreateBranch' smart constructor.
+data CreateBranch = CreateBranch'
+  { -- | The Amazon Resource Name (ARN) for a backend environment that is part of
+    -- an Amplify app.
+    backendEnvironmentArn :: Prelude.Maybe Prelude.Text,
+    -- | The basic authorization credentials for the branch. You must
+    -- base64-encode the authorization credentials and provide them in the
+    -- format @user:password@.
+    basicAuthCredentials :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The build specification (build spec) for the branch.
+    buildSpec :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The description for the branch.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The display name for a branch. This is used as the default domain
+    -- prefix.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | Enables auto building for the branch.
+    enableAutoBuild :: Prelude.Maybe Prelude.Bool,
+    -- | Enables basic authorization for the branch.
+    enableBasicAuth :: Prelude.Maybe Prelude.Bool,
+    -- | Enables notifications for the branch.
+    enableNotification :: Prelude.Maybe Prelude.Bool,
+    -- | Enables performance mode for the branch.
+    --
+    -- Performance mode optimizes for faster hosting performance by keeping
+    -- content cached at the edge for a longer interval. When performance mode
+    -- is enabled, hosting configuration or code changes can take up to 10
+    -- minutes to roll out.
+    enablePerformanceMode :: Prelude.Maybe Prelude.Bool,
+    -- | Enables pull request previews for this branch.
+    enablePullRequestPreview :: Prelude.Maybe Prelude.Bool,
+    -- | The environment variables for the branch.
+    environmentVariables :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The framework for the branch.
+    framework :: Prelude.Maybe Prelude.Text,
+    -- | The Amplify environment name for the pull request.
+    pullRequestEnvironmentName :: Prelude.Maybe Prelude.Text,
+    -- | Describes the current stage for the branch.
+    stage :: Prelude.Maybe Stage,
+    -- | The tag for the branch.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The content Time To Live (TTL) for the website in seconds.
+    ttl :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The name for the branch.
+    branchName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBranch' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'backendEnvironmentArn', 'createBranch_backendEnvironmentArn' - The Amazon Resource Name (ARN) for a backend environment that is part of
+-- an Amplify app.
+--
+-- 'basicAuthCredentials', 'createBranch_basicAuthCredentials' - The basic authorization credentials for the branch. You must
+-- base64-encode the authorization credentials and provide them in the
+-- format @user:password@.
+--
+-- 'buildSpec', 'createBranch_buildSpec' - The build specification (build spec) for the branch.
+--
+-- 'description', 'createBranch_description' - The description for the branch.
+--
+-- 'displayName', 'createBranch_displayName' - The display name for a branch. This is used as the default domain
+-- prefix.
+--
+-- 'enableAutoBuild', 'createBranch_enableAutoBuild' - Enables auto building for the branch.
+--
+-- 'enableBasicAuth', 'createBranch_enableBasicAuth' - Enables basic authorization for the branch.
+--
+-- 'enableNotification', 'createBranch_enableNotification' - Enables notifications for the branch.
+--
+-- 'enablePerformanceMode', 'createBranch_enablePerformanceMode' - Enables performance mode for the branch.
+--
+-- Performance mode optimizes for faster hosting performance by keeping
+-- content cached at the edge for a longer interval. When performance mode
+-- is enabled, hosting configuration or code changes can take up to 10
+-- minutes to roll out.
+--
+-- 'enablePullRequestPreview', 'createBranch_enablePullRequestPreview' - Enables pull request previews for this branch.
+--
+-- 'environmentVariables', 'createBranch_environmentVariables' - The environment variables for the branch.
+--
+-- 'framework', 'createBranch_framework' - The framework for the branch.
+--
+-- 'pullRequestEnvironmentName', 'createBranch_pullRequestEnvironmentName' - The Amplify environment name for the pull request.
+--
+-- 'stage', 'createBranch_stage' - Describes the current stage for the branch.
+--
+-- 'tags', 'createBranch_tags' - The tag for the branch.
+--
+-- 'ttl', 'createBranch_ttl' - The content Time To Live (TTL) for the website in seconds.
+--
+-- 'appId', 'createBranch_appId' - The unique ID for an Amplify app.
+--
+-- 'branchName', 'createBranch_branchName' - The name for the branch.
+newCreateBranch ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'branchName'
+  Prelude.Text ->
+  CreateBranch
+newCreateBranch pAppId_ pBranchName_ =
+  CreateBranch'
+    { backendEnvironmentArn =
+        Prelude.Nothing,
+      basicAuthCredentials = Prelude.Nothing,
+      buildSpec = Prelude.Nothing,
+      description = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      enableAutoBuild = Prelude.Nothing,
+      enableBasicAuth = Prelude.Nothing,
+      enableNotification = Prelude.Nothing,
+      enablePerformanceMode = Prelude.Nothing,
+      enablePullRequestPreview = Prelude.Nothing,
+      environmentVariables = Prelude.Nothing,
+      framework = Prelude.Nothing,
+      pullRequestEnvironmentName = Prelude.Nothing,
+      stage = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      ttl = Prelude.Nothing,
+      appId = pAppId_,
+      branchName = pBranchName_
+    }
+
+-- | The Amazon Resource Name (ARN) for a backend environment that is part of
+-- an Amplify app.
+createBranch_backendEnvironmentArn :: Lens.Lens' CreateBranch (Prelude.Maybe Prelude.Text)
+createBranch_backendEnvironmentArn = Lens.lens (\CreateBranch' {backendEnvironmentArn} -> backendEnvironmentArn) (\s@CreateBranch' {} a -> s {backendEnvironmentArn = a} :: CreateBranch)
+
+-- | The basic authorization credentials for the branch. You must
+-- base64-encode the authorization credentials and provide them in the
+-- format @user:password@.
+createBranch_basicAuthCredentials :: Lens.Lens' CreateBranch (Prelude.Maybe Prelude.Text)
+createBranch_basicAuthCredentials = Lens.lens (\CreateBranch' {basicAuthCredentials} -> basicAuthCredentials) (\s@CreateBranch' {} a -> s {basicAuthCredentials = a} :: CreateBranch) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The build specification (build spec) for the branch.
+createBranch_buildSpec :: Lens.Lens' CreateBranch (Prelude.Maybe Prelude.Text)
+createBranch_buildSpec = Lens.lens (\CreateBranch' {buildSpec} -> buildSpec) (\s@CreateBranch' {} a -> s {buildSpec = a} :: CreateBranch) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The description for the branch.
+createBranch_description :: Lens.Lens' CreateBranch (Prelude.Maybe Prelude.Text)
+createBranch_description = Lens.lens (\CreateBranch' {description} -> description) (\s@CreateBranch' {} a -> s {description = a} :: CreateBranch)
+
+-- | The display name for a branch. This is used as the default domain
+-- prefix.
+createBranch_displayName :: Lens.Lens' CreateBranch (Prelude.Maybe Prelude.Text)
+createBranch_displayName = Lens.lens (\CreateBranch' {displayName} -> displayName) (\s@CreateBranch' {} a -> s {displayName = a} :: CreateBranch)
+
+-- | Enables auto building for the branch.
+createBranch_enableAutoBuild :: Lens.Lens' CreateBranch (Prelude.Maybe Prelude.Bool)
+createBranch_enableAutoBuild = Lens.lens (\CreateBranch' {enableAutoBuild} -> enableAutoBuild) (\s@CreateBranch' {} a -> s {enableAutoBuild = a} :: CreateBranch)
+
+-- | Enables basic authorization for the branch.
+createBranch_enableBasicAuth :: Lens.Lens' CreateBranch (Prelude.Maybe Prelude.Bool)
+createBranch_enableBasicAuth = Lens.lens (\CreateBranch' {enableBasicAuth} -> enableBasicAuth) (\s@CreateBranch' {} a -> s {enableBasicAuth = a} :: CreateBranch)
+
+-- | Enables notifications for the branch.
+createBranch_enableNotification :: Lens.Lens' CreateBranch (Prelude.Maybe Prelude.Bool)
+createBranch_enableNotification = Lens.lens (\CreateBranch' {enableNotification} -> enableNotification) (\s@CreateBranch' {} a -> s {enableNotification = a} :: CreateBranch)
+
+-- | Enables performance mode for the branch.
+--
+-- Performance mode optimizes for faster hosting performance by keeping
+-- content cached at the edge for a longer interval. When performance mode
+-- is enabled, hosting configuration or code changes can take up to 10
+-- minutes to roll out.
+createBranch_enablePerformanceMode :: Lens.Lens' CreateBranch (Prelude.Maybe Prelude.Bool)
+createBranch_enablePerformanceMode = Lens.lens (\CreateBranch' {enablePerformanceMode} -> enablePerformanceMode) (\s@CreateBranch' {} a -> s {enablePerformanceMode = a} :: CreateBranch)
+
+-- | Enables pull request previews for this branch.
+createBranch_enablePullRequestPreview :: Lens.Lens' CreateBranch (Prelude.Maybe Prelude.Bool)
+createBranch_enablePullRequestPreview = Lens.lens (\CreateBranch' {enablePullRequestPreview} -> enablePullRequestPreview) (\s@CreateBranch' {} a -> s {enablePullRequestPreview = a} :: CreateBranch)
+
+-- | The environment variables for the branch.
+createBranch_environmentVariables :: Lens.Lens' CreateBranch (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createBranch_environmentVariables = Lens.lens (\CreateBranch' {environmentVariables} -> environmentVariables) (\s@CreateBranch' {} a -> s {environmentVariables = a} :: CreateBranch) Prelude.. Lens.mapping Lens.coerced
+
+-- | The framework for the branch.
+createBranch_framework :: Lens.Lens' CreateBranch (Prelude.Maybe Prelude.Text)
+createBranch_framework = Lens.lens (\CreateBranch' {framework} -> framework) (\s@CreateBranch' {} a -> s {framework = a} :: CreateBranch)
+
+-- | The Amplify environment name for the pull request.
+createBranch_pullRequestEnvironmentName :: Lens.Lens' CreateBranch (Prelude.Maybe Prelude.Text)
+createBranch_pullRequestEnvironmentName = Lens.lens (\CreateBranch' {pullRequestEnvironmentName} -> pullRequestEnvironmentName) (\s@CreateBranch' {} a -> s {pullRequestEnvironmentName = a} :: CreateBranch)
+
+-- | Describes the current stage for the branch.
+createBranch_stage :: Lens.Lens' CreateBranch (Prelude.Maybe Stage)
+createBranch_stage = Lens.lens (\CreateBranch' {stage} -> stage) (\s@CreateBranch' {} a -> s {stage = a} :: CreateBranch)
+
+-- | The tag for the branch.
+createBranch_tags :: Lens.Lens' CreateBranch (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createBranch_tags = Lens.lens (\CreateBranch' {tags} -> tags) (\s@CreateBranch' {} a -> s {tags = a} :: CreateBranch) Prelude.. Lens.mapping Lens.coerced
+
+-- | The content Time To Live (TTL) for the website in seconds.
+createBranch_ttl :: Lens.Lens' CreateBranch (Prelude.Maybe Prelude.Text)
+createBranch_ttl = Lens.lens (\CreateBranch' {ttl} -> ttl) (\s@CreateBranch' {} a -> s {ttl = a} :: CreateBranch)
+
+-- | The unique ID for an Amplify app.
+createBranch_appId :: Lens.Lens' CreateBranch Prelude.Text
+createBranch_appId = Lens.lens (\CreateBranch' {appId} -> appId) (\s@CreateBranch' {} a -> s {appId = a} :: CreateBranch)
+
+-- | The name for the branch.
+createBranch_branchName :: Lens.Lens' CreateBranch Prelude.Text
+createBranch_branchName = Lens.lens (\CreateBranch' {branchName} -> branchName) (\s@CreateBranch' {} a -> s {branchName = a} :: CreateBranch)
+
+instance Core.AWSRequest CreateBranch where
+  type AWSResponse CreateBranch = CreateBranchResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateBranchResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "branch")
+      )
+
+instance Prelude.Hashable CreateBranch where
+  hashWithSalt _salt CreateBranch' {..} =
+    _salt
+      `Prelude.hashWithSalt` backendEnvironmentArn
+      `Prelude.hashWithSalt` basicAuthCredentials
+      `Prelude.hashWithSalt` buildSpec
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` enableAutoBuild
+      `Prelude.hashWithSalt` enableBasicAuth
+      `Prelude.hashWithSalt` enableNotification
+      `Prelude.hashWithSalt` enablePerformanceMode
+      `Prelude.hashWithSalt` enablePullRequestPreview
+      `Prelude.hashWithSalt` environmentVariables
+      `Prelude.hashWithSalt` framework
+      `Prelude.hashWithSalt` pullRequestEnvironmentName
+      `Prelude.hashWithSalt` stage
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` ttl
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` branchName
+
+instance Prelude.NFData CreateBranch where
+  rnf CreateBranch' {..} =
+    Prelude.rnf backendEnvironmentArn
+      `Prelude.seq` Prelude.rnf basicAuthCredentials
+      `Prelude.seq` Prelude.rnf buildSpec
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf enableAutoBuild
+      `Prelude.seq` Prelude.rnf enableBasicAuth
+      `Prelude.seq` Prelude.rnf enableNotification
+      `Prelude.seq` Prelude.rnf enablePerformanceMode
+      `Prelude.seq` Prelude.rnf enablePullRequestPreview
+      `Prelude.seq` Prelude.rnf environmentVariables
+      `Prelude.seq` Prelude.rnf framework
+      `Prelude.seq` Prelude.rnf pullRequestEnvironmentName
+      `Prelude.seq` Prelude.rnf stage
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf ttl
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf branchName
+
+instance Data.ToHeaders CreateBranch where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateBranch where
+  toJSON CreateBranch' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("backendEnvironmentArn" Data..=)
+              Prelude.<$> backendEnvironmentArn,
+            ("basicAuthCredentials" Data..=)
+              Prelude.<$> basicAuthCredentials,
+            ("buildSpec" Data..=) Prelude.<$> buildSpec,
+            ("description" Data..=) Prelude.<$> description,
+            ("displayName" Data..=) Prelude.<$> displayName,
+            ("enableAutoBuild" Data..=)
+              Prelude.<$> enableAutoBuild,
+            ("enableBasicAuth" Data..=)
+              Prelude.<$> enableBasicAuth,
+            ("enableNotification" Data..=)
+              Prelude.<$> enableNotification,
+            ("enablePerformanceMode" Data..=)
+              Prelude.<$> enablePerformanceMode,
+            ("enablePullRequestPreview" Data..=)
+              Prelude.<$> enablePullRequestPreview,
+            ("environmentVariables" Data..=)
+              Prelude.<$> environmentVariables,
+            ("framework" Data..=) Prelude.<$> framework,
+            ("pullRequestEnvironmentName" Data..=)
+              Prelude.<$> pullRequestEnvironmentName,
+            ("stage" Data..=) Prelude.<$> stage,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("ttl" Data..=) Prelude.<$> ttl,
+            Prelude.Just ("branchName" Data..= branchName)
+          ]
+      )
+
+instance Data.ToPath CreateBranch where
+  toPath CreateBranch' {..} =
+    Prelude.mconcat
+      ["/apps/", Data.toBS appId, "/branches"]
+
+instance Data.ToQuery CreateBranch where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for create branch request.
+--
+-- /See:/ 'newCreateBranchResponse' smart constructor.
+data CreateBranchResponse = CreateBranchResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Describes the branch for an Amplify app, which maps to a third-party
+    -- repository branch.
+    branch :: Branch
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBranchResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createBranchResponse_httpStatus' - The response's http status code.
+--
+-- 'branch', 'createBranchResponse_branch' - Describes the branch for an Amplify app, which maps to a third-party
+-- repository branch.
+newCreateBranchResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'branch'
+  Branch ->
+  CreateBranchResponse
+newCreateBranchResponse pHttpStatus_ pBranch_ =
+  CreateBranchResponse'
+    { httpStatus = pHttpStatus_,
+      branch = pBranch_
+    }
+
+-- | The response's http status code.
+createBranchResponse_httpStatus :: Lens.Lens' CreateBranchResponse Prelude.Int
+createBranchResponse_httpStatus = Lens.lens (\CreateBranchResponse' {httpStatus} -> httpStatus) (\s@CreateBranchResponse' {} a -> s {httpStatus = a} :: CreateBranchResponse)
+
+-- | Describes the branch for an Amplify app, which maps to a third-party
+-- repository branch.
+createBranchResponse_branch :: Lens.Lens' CreateBranchResponse Branch
+createBranchResponse_branch = Lens.lens (\CreateBranchResponse' {branch} -> branch) (\s@CreateBranchResponse' {} a -> s {branch = a} :: CreateBranchResponse)
+
+instance Prelude.NFData CreateBranchResponse where
+  rnf CreateBranchResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf branch
diff --git a/gen/Amazonka/Amplify/CreateDeployment.hs b/gen/Amazonka/Amplify/CreateDeployment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/CreateDeployment.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.CreateDeployment
+-- 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 deployment for a manually deployed Amplify app. Manually
+-- deployed apps are not connected to a repository.
+module Amazonka.Amplify.CreateDeployment
+  ( -- * Creating a Request
+    CreateDeployment (..),
+    newCreateDeployment,
+
+    -- * Request Lenses
+    createDeployment_fileMap,
+    createDeployment_appId,
+    createDeployment_branchName,
+
+    -- * Destructuring the Response
+    CreateDeploymentResponse (..),
+    newCreateDeploymentResponse,
+
+    -- * Response Lenses
+    createDeploymentResponse_jobId,
+    createDeploymentResponse_httpStatus,
+    createDeploymentResponse_fileUploadUrls,
+    createDeploymentResponse_zipUploadUrl,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the create a new deployment request.
+--
+-- /See:/ 'newCreateDeployment' smart constructor.
+data CreateDeployment = CreateDeployment'
+  { -- | An optional file map that contains the file name as the key and the file
+    -- content md5 hash as the value. If this argument is provided, the service
+    -- will generate a unique upload URL per file. Otherwise, the service will
+    -- only generate a single upload URL for the zipped files.
+    fileMap :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The name for the branch, for the job.
+    branchName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDeployment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fileMap', 'createDeployment_fileMap' - An optional file map that contains the file name as the key and the file
+-- content md5 hash as the value. If this argument is provided, the service
+-- will generate a unique upload URL per file. Otherwise, the service will
+-- only generate a single upload URL for the zipped files.
+--
+-- 'appId', 'createDeployment_appId' - The unique ID for an Amplify app.
+--
+-- 'branchName', 'createDeployment_branchName' - The name for the branch, for the job.
+newCreateDeployment ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'branchName'
+  Prelude.Text ->
+  CreateDeployment
+newCreateDeployment pAppId_ pBranchName_ =
+  CreateDeployment'
+    { fileMap = Prelude.Nothing,
+      appId = pAppId_,
+      branchName = pBranchName_
+    }
+
+-- | An optional file map that contains the file name as the key and the file
+-- content md5 hash as the value. If this argument is provided, the service
+-- will generate a unique upload URL per file. Otherwise, the service will
+-- only generate a single upload URL for the zipped files.
+createDeployment_fileMap :: Lens.Lens' CreateDeployment (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createDeployment_fileMap = Lens.lens (\CreateDeployment' {fileMap} -> fileMap) (\s@CreateDeployment' {} a -> s {fileMap = a} :: CreateDeployment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique ID for an Amplify app.
+createDeployment_appId :: Lens.Lens' CreateDeployment Prelude.Text
+createDeployment_appId = Lens.lens (\CreateDeployment' {appId} -> appId) (\s@CreateDeployment' {} a -> s {appId = a} :: CreateDeployment)
+
+-- | The name for the branch, for the job.
+createDeployment_branchName :: Lens.Lens' CreateDeployment Prelude.Text
+createDeployment_branchName = Lens.lens (\CreateDeployment' {branchName} -> branchName) (\s@CreateDeployment' {} a -> s {branchName = a} :: CreateDeployment)
+
+instance Core.AWSRequest CreateDeployment where
+  type
+    AWSResponse CreateDeployment =
+      CreateDeploymentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDeploymentResponse'
+            Prelude.<$> (x Data..?> "jobId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "fileUploadUrls" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..:> "zipUploadUrl")
+      )
+
+instance Prelude.Hashable CreateDeployment where
+  hashWithSalt _salt CreateDeployment' {..} =
+    _salt
+      `Prelude.hashWithSalt` fileMap
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` branchName
+
+instance Prelude.NFData CreateDeployment where
+  rnf CreateDeployment' {..} =
+    Prelude.rnf fileMap
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf branchName
+
+instance Data.ToHeaders CreateDeployment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDeployment where
+  toJSON CreateDeployment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("fileMap" Data..=) Prelude.<$> fileMap]
+      )
+
+instance Data.ToPath CreateDeployment where
+  toPath CreateDeployment' {..} =
+    Prelude.mconcat
+      [ "/apps/",
+        Data.toBS appId,
+        "/branches/",
+        Data.toBS branchName,
+        "/deployments"
+      ]
+
+instance Data.ToQuery CreateDeployment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the create a new deployment request.
+--
+-- /See:/ 'newCreateDeploymentResponse' smart constructor.
+data CreateDeploymentResponse = CreateDeploymentResponse'
+  { -- | The job ID for this deployment. will supply to start deployment api.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | When the @fileMap@ argument is provided in the request, @fileUploadUrls@
+    -- will contain a map of file names to upload URLs.
+    fileUploadUrls :: Prelude.HashMap Prelude.Text Prelude.Text,
+    -- | When the @fileMap@ argument is not provided in the request, this
+    -- @zipUploadUrl@ is returned.
+    zipUploadUrl :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDeploymentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'createDeploymentResponse_jobId' - The job ID for this deployment. will supply to start deployment api.
+--
+-- 'httpStatus', 'createDeploymentResponse_httpStatus' - The response's http status code.
+--
+-- 'fileUploadUrls', 'createDeploymentResponse_fileUploadUrls' - When the @fileMap@ argument is provided in the request, @fileUploadUrls@
+-- will contain a map of file names to upload URLs.
+--
+-- 'zipUploadUrl', 'createDeploymentResponse_zipUploadUrl' - When the @fileMap@ argument is not provided in the request, this
+-- @zipUploadUrl@ is returned.
+newCreateDeploymentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'zipUploadUrl'
+  Prelude.Text ->
+  CreateDeploymentResponse
+newCreateDeploymentResponse
+  pHttpStatus_
+  pZipUploadUrl_ =
+    CreateDeploymentResponse'
+      { jobId = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        fileUploadUrls = Prelude.mempty,
+        zipUploadUrl = pZipUploadUrl_
+      }
+
+-- | The job ID for this deployment. will supply to start deployment api.
+createDeploymentResponse_jobId :: Lens.Lens' CreateDeploymentResponse (Prelude.Maybe Prelude.Text)
+createDeploymentResponse_jobId = Lens.lens (\CreateDeploymentResponse' {jobId} -> jobId) (\s@CreateDeploymentResponse' {} a -> s {jobId = a} :: CreateDeploymentResponse)
+
+-- | The response's http status code.
+createDeploymentResponse_httpStatus :: Lens.Lens' CreateDeploymentResponse Prelude.Int
+createDeploymentResponse_httpStatus = Lens.lens (\CreateDeploymentResponse' {httpStatus} -> httpStatus) (\s@CreateDeploymentResponse' {} a -> s {httpStatus = a} :: CreateDeploymentResponse)
+
+-- | When the @fileMap@ argument is provided in the request, @fileUploadUrls@
+-- will contain a map of file names to upload URLs.
+createDeploymentResponse_fileUploadUrls :: Lens.Lens' CreateDeploymentResponse (Prelude.HashMap Prelude.Text Prelude.Text)
+createDeploymentResponse_fileUploadUrls = Lens.lens (\CreateDeploymentResponse' {fileUploadUrls} -> fileUploadUrls) (\s@CreateDeploymentResponse' {} a -> s {fileUploadUrls = a} :: CreateDeploymentResponse) Prelude.. Lens.coerced
+
+-- | When the @fileMap@ argument is not provided in the request, this
+-- @zipUploadUrl@ is returned.
+createDeploymentResponse_zipUploadUrl :: Lens.Lens' CreateDeploymentResponse Prelude.Text
+createDeploymentResponse_zipUploadUrl = Lens.lens (\CreateDeploymentResponse' {zipUploadUrl} -> zipUploadUrl) (\s@CreateDeploymentResponse' {} a -> s {zipUploadUrl = a} :: CreateDeploymentResponse)
+
+instance Prelude.NFData CreateDeploymentResponse where
+  rnf CreateDeploymentResponse' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf fileUploadUrls
+      `Prelude.seq` Prelude.rnf zipUploadUrl
diff --git a/gen/Amazonka/Amplify/CreateDomainAssociation.hs b/gen/Amazonka/Amplify/CreateDomainAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/CreateDomainAssociation.hs
@@ -0,0 +1,260 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.CreateDomainAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new domain association for an Amplify app. This action
+-- associates a custom domain with the Amplify app
+module Amazonka.Amplify.CreateDomainAssociation
+  ( -- * Creating a Request
+    CreateDomainAssociation (..),
+    newCreateDomainAssociation,
+
+    -- * Request Lenses
+    createDomainAssociation_autoSubDomainCreationPatterns,
+    createDomainAssociation_autoSubDomainIAMRole,
+    createDomainAssociation_enableAutoSubDomain,
+    createDomainAssociation_appId,
+    createDomainAssociation_domainName,
+    createDomainAssociation_subDomainSettings,
+
+    -- * Destructuring the Response
+    CreateDomainAssociationResponse (..),
+    newCreateDomainAssociationResponse,
+
+    -- * Response Lenses
+    createDomainAssociationResponse_httpStatus,
+    createDomainAssociationResponse_domainAssociation,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the create domain association request.
+--
+-- /See:/ 'newCreateDomainAssociation' smart constructor.
+data CreateDomainAssociation = CreateDomainAssociation'
+  { -- | Sets the branch patterns for automatic subdomain creation.
+    autoSubDomainCreationPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | The required AWS Identity and Access Management (IAM) service role for
+    -- the Amazon Resource Name (ARN) for automatically creating subdomains.
+    autoSubDomainIAMRole :: Prelude.Maybe Prelude.Text,
+    -- | Enables the automated creation of subdomains for branches.
+    enableAutoSubDomain :: Prelude.Maybe Prelude.Bool,
+    -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The domain name for the domain association.
+    domainName :: Prelude.Text,
+    -- | The setting for the subdomain.
+    subDomainSettings :: [SubDomainSetting]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDomainAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoSubDomainCreationPatterns', 'createDomainAssociation_autoSubDomainCreationPatterns' - Sets the branch patterns for automatic subdomain creation.
+--
+-- 'autoSubDomainIAMRole', 'createDomainAssociation_autoSubDomainIAMRole' - The required AWS Identity and Access Management (IAM) service role for
+-- the Amazon Resource Name (ARN) for automatically creating subdomains.
+--
+-- 'enableAutoSubDomain', 'createDomainAssociation_enableAutoSubDomain' - Enables the automated creation of subdomains for branches.
+--
+-- 'appId', 'createDomainAssociation_appId' - The unique ID for an Amplify app.
+--
+-- 'domainName', 'createDomainAssociation_domainName' - The domain name for the domain association.
+--
+-- 'subDomainSettings', 'createDomainAssociation_subDomainSettings' - The setting for the subdomain.
+newCreateDomainAssociation ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'domainName'
+  Prelude.Text ->
+  CreateDomainAssociation
+newCreateDomainAssociation pAppId_ pDomainName_ =
+  CreateDomainAssociation'
+    { autoSubDomainCreationPatterns =
+        Prelude.Nothing,
+      autoSubDomainIAMRole = Prelude.Nothing,
+      enableAutoSubDomain = Prelude.Nothing,
+      appId = pAppId_,
+      domainName = pDomainName_,
+      subDomainSettings = Prelude.mempty
+    }
+
+-- | Sets the branch patterns for automatic subdomain creation.
+createDomainAssociation_autoSubDomainCreationPatterns :: Lens.Lens' CreateDomainAssociation (Prelude.Maybe [Prelude.Text])
+createDomainAssociation_autoSubDomainCreationPatterns = Lens.lens (\CreateDomainAssociation' {autoSubDomainCreationPatterns} -> autoSubDomainCreationPatterns) (\s@CreateDomainAssociation' {} a -> s {autoSubDomainCreationPatterns = a} :: CreateDomainAssociation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The required AWS Identity and Access Management (IAM) service role for
+-- the Amazon Resource Name (ARN) for automatically creating subdomains.
+createDomainAssociation_autoSubDomainIAMRole :: Lens.Lens' CreateDomainAssociation (Prelude.Maybe Prelude.Text)
+createDomainAssociation_autoSubDomainIAMRole = Lens.lens (\CreateDomainAssociation' {autoSubDomainIAMRole} -> autoSubDomainIAMRole) (\s@CreateDomainAssociation' {} a -> s {autoSubDomainIAMRole = a} :: CreateDomainAssociation)
+
+-- | Enables the automated creation of subdomains for branches.
+createDomainAssociation_enableAutoSubDomain :: Lens.Lens' CreateDomainAssociation (Prelude.Maybe Prelude.Bool)
+createDomainAssociation_enableAutoSubDomain = Lens.lens (\CreateDomainAssociation' {enableAutoSubDomain} -> enableAutoSubDomain) (\s@CreateDomainAssociation' {} a -> s {enableAutoSubDomain = a} :: CreateDomainAssociation)
+
+-- | The unique ID for an Amplify app.
+createDomainAssociation_appId :: Lens.Lens' CreateDomainAssociation Prelude.Text
+createDomainAssociation_appId = Lens.lens (\CreateDomainAssociation' {appId} -> appId) (\s@CreateDomainAssociation' {} a -> s {appId = a} :: CreateDomainAssociation)
+
+-- | The domain name for the domain association.
+createDomainAssociation_domainName :: Lens.Lens' CreateDomainAssociation Prelude.Text
+createDomainAssociation_domainName = Lens.lens (\CreateDomainAssociation' {domainName} -> domainName) (\s@CreateDomainAssociation' {} a -> s {domainName = a} :: CreateDomainAssociation)
+
+-- | The setting for the subdomain.
+createDomainAssociation_subDomainSettings :: Lens.Lens' CreateDomainAssociation [SubDomainSetting]
+createDomainAssociation_subDomainSettings = Lens.lens (\CreateDomainAssociation' {subDomainSettings} -> subDomainSettings) (\s@CreateDomainAssociation' {} a -> s {subDomainSettings = a} :: CreateDomainAssociation) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateDomainAssociation where
+  type
+    AWSResponse CreateDomainAssociation =
+      CreateDomainAssociationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDomainAssociationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "domainAssociation")
+      )
+
+instance Prelude.Hashable CreateDomainAssociation where
+  hashWithSalt _salt CreateDomainAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoSubDomainCreationPatterns
+      `Prelude.hashWithSalt` autoSubDomainIAMRole
+      `Prelude.hashWithSalt` enableAutoSubDomain
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` subDomainSettings
+
+instance Prelude.NFData CreateDomainAssociation where
+  rnf CreateDomainAssociation' {..} =
+    Prelude.rnf autoSubDomainCreationPatterns
+      `Prelude.seq` Prelude.rnf autoSubDomainIAMRole
+      `Prelude.seq` Prelude.rnf enableAutoSubDomain
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf subDomainSettings
+
+instance Data.ToHeaders CreateDomainAssociation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDomainAssociation where
+  toJSON CreateDomainAssociation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("autoSubDomainCreationPatterns" Data..=)
+              Prelude.<$> autoSubDomainCreationPatterns,
+            ("autoSubDomainIAMRole" Data..=)
+              Prelude.<$> autoSubDomainIAMRole,
+            ("enableAutoSubDomain" Data..=)
+              Prelude.<$> enableAutoSubDomain,
+            Prelude.Just ("domainName" Data..= domainName),
+            Prelude.Just
+              ("subDomainSettings" Data..= subDomainSettings)
+          ]
+      )
+
+instance Data.ToPath CreateDomainAssociation where
+  toPath CreateDomainAssociation' {..} =
+    Prelude.mconcat
+      ["/apps/", Data.toBS appId, "/domains"]
+
+instance Data.ToQuery CreateDomainAssociation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the create domain association request.
+--
+-- /See:/ 'newCreateDomainAssociationResponse' smart constructor.
+data CreateDomainAssociationResponse = CreateDomainAssociationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Describes the structure of a domain association, which associates a
+    -- custom domain with an Amplify app.
+    domainAssociation :: DomainAssociation
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDomainAssociationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createDomainAssociationResponse_httpStatus' - The response's http status code.
+--
+-- 'domainAssociation', 'createDomainAssociationResponse_domainAssociation' - Describes the structure of a domain association, which associates a
+-- custom domain with an Amplify app.
+newCreateDomainAssociationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'domainAssociation'
+  DomainAssociation ->
+  CreateDomainAssociationResponse
+newCreateDomainAssociationResponse
+  pHttpStatus_
+  pDomainAssociation_ =
+    CreateDomainAssociationResponse'
+      { httpStatus =
+          pHttpStatus_,
+        domainAssociation = pDomainAssociation_
+      }
+
+-- | The response's http status code.
+createDomainAssociationResponse_httpStatus :: Lens.Lens' CreateDomainAssociationResponse Prelude.Int
+createDomainAssociationResponse_httpStatus = Lens.lens (\CreateDomainAssociationResponse' {httpStatus} -> httpStatus) (\s@CreateDomainAssociationResponse' {} a -> s {httpStatus = a} :: CreateDomainAssociationResponse)
+
+-- | Describes the structure of a domain association, which associates a
+-- custom domain with an Amplify app.
+createDomainAssociationResponse_domainAssociation :: Lens.Lens' CreateDomainAssociationResponse DomainAssociation
+createDomainAssociationResponse_domainAssociation = Lens.lens (\CreateDomainAssociationResponse' {domainAssociation} -> domainAssociation) (\s@CreateDomainAssociationResponse' {} a -> s {domainAssociation = a} :: CreateDomainAssociationResponse)
+
+instance
+  Prelude.NFData
+    CreateDomainAssociationResponse
+  where
+  rnf CreateDomainAssociationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf domainAssociation
diff --git a/gen/Amazonka/Amplify/CreateWebhook.hs b/gen/Amazonka/Amplify/CreateWebhook.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/CreateWebhook.hs
@@ -0,0 +1,203 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.CreateWebhook
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new webhook on an Amplify app.
+module Amazonka.Amplify.CreateWebhook
+  ( -- * Creating a Request
+    CreateWebhook (..),
+    newCreateWebhook,
+
+    -- * Request Lenses
+    createWebhook_description,
+    createWebhook_appId,
+    createWebhook_branchName,
+
+    -- * Destructuring the Response
+    CreateWebhookResponse (..),
+    newCreateWebhookResponse,
+
+    -- * Response Lenses
+    createWebhookResponse_httpStatus,
+    createWebhookResponse_webhook,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the create webhook request.
+--
+-- /See:/ 'newCreateWebhook' smart constructor.
+data CreateWebhook = CreateWebhook'
+  { -- | The description for a webhook.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The name for a branch that is part of an Amplify app.
+    branchName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWebhook' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createWebhook_description' - The description for a webhook.
+--
+-- 'appId', 'createWebhook_appId' - The unique ID for an Amplify app.
+--
+-- 'branchName', 'createWebhook_branchName' - The name for a branch that is part of an Amplify app.
+newCreateWebhook ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'branchName'
+  Prelude.Text ->
+  CreateWebhook
+newCreateWebhook pAppId_ pBranchName_ =
+  CreateWebhook'
+    { description = Prelude.Nothing,
+      appId = pAppId_,
+      branchName = pBranchName_
+    }
+
+-- | The description for a webhook.
+createWebhook_description :: Lens.Lens' CreateWebhook (Prelude.Maybe Prelude.Text)
+createWebhook_description = Lens.lens (\CreateWebhook' {description} -> description) (\s@CreateWebhook' {} a -> s {description = a} :: CreateWebhook)
+
+-- | The unique ID for an Amplify app.
+createWebhook_appId :: Lens.Lens' CreateWebhook Prelude.Text
+createWebhook_appId = Lens.lens (\CreateWebhook' {appId} -> appId) (\s@CreateWebhook' {} a -> s {appId = a} :: CreateWebhook)
+
+-- | The name for a branch that is part of an Amplify app.
+createWebhook_branchName :: Lens.Lens' CreateWebhook Prelude.Text
+createWebhook_branchName = Lens.lens (\CreateWebhook' {branchName} -> branchName) (\s@CreateWebhook' {} a -> s {branchName = a} :: CreateWebhook)
+
+instance Core.AWSRequest CreateWebhook where
+  type
+    AWSResponse CreateWebhook =
+      CreateWebhookResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWebhookResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "webhook")
+      )
+
+instance Prelude.Hashable CreateWebhook where
+  hashWithSalt _salt CreateWebhook' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` branchName
+
+instance Prelude.NFData CreateWebhook where
+  rnf CreateWebhook' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf branchName
+
+instance Data.ToHeaders CreateWebhook where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateWebhook where
+  toJSON CreateWebhook' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            Prelude.Just ("branchName" Data..= branchName)
+          ]
+      )
+
+instance Data.ToPath CreateWebhook where
+  toPath CreateWebhook' {..} =
+    Prelude.mconcat
+      ["/apps/", Data.toBS appId, "/webhooks"]
+
+instance Data.ToQuery CreateWebhook where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the create webhook request.
+--
+-- /See:/ 'newCreateWebhookResponse' smart constructor.
+data CreateWebhookResponse = CreateWebhookResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Describes a webhook that connects repository events to an Amplify app.
+    webhook :: Webhook
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWebhookResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createWebhookResponse_httpStatus' - The response's http status code.
+--
+-- 'webhook', 'createWebhookResponse_webhook' - Describes a webhook that connects repository events to an Amplify app.
+newCreateWebhookResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'webhook'
+  Webhook ->
+  CreateWebhookResponse
+newCreateWebhookResponse pHttpStatus_ pWebhook_ =
+  CreateWebhookResponse'
+    { httpStatus = pHttpStatus_,
+      webhook = pWebhook_
+    }
+
+-- | The response's http status code.
+createWebhookResponse_httpStatus :: Lens.Lens' CreateWebhookResponse Prelude.Int
+createWebhookResponse_httpStatus = Lens.lens (\CreateWebhookResponse' {httpStatus} -> httpStatus) (\s@CreateWebhookResponse' {} a -> s {httpStatus = a} :: CreateWebhookResponse)
+
+-- | Describes a webhook that connects repository events to an Amplify app.
+createWebhookResponse_webhook :: Lens.Lens' CreateWebhookResponse Webhook
+createWebhookResponse_webhook = Lens.lens (\CreateWebhookResponse' {webhook} -> webhook) (\s@CreateWebhookResponse' {} a -> s {webhook = a} :: CreateWebhookResponse)
+
+instance Prelude.NFData CreateWebhookResponse where
+  rnf CreateWebhookResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf webhook
diff --git a/gen/Amazonka/Amplify/DeleteApp.hs b/gen/Amazonka/Amplify/DeleteApp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/DeleteApp.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.DeleteApp
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an existing Amplify app specified by an app ID.
+module Amazonka.Amplify.DeleteApp
+  ( -- * Creating a Request
+    DeleteApp (..),
+    newDeleteApp,
+
+    -- * Request Lenses
+    deleteApp_appId,
+
+    -- * Destructuring the Response
+    DeleteAppResponse (..),
+    newDeleteAppResponse,
+
+    -- * Response Lenses
+    deleteAppResponse_httpStatus,
+    deleteAppResponse_app,
+  )
+where
+
+import Amazonka.Amplify.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
+
+-- | Describes the request structure for the delete app request.
+--
+-- /See:/ 'newDeleteApp' smart constructor.
+data DeleteApp = DeleteApp'
+  { -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteApp' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'deleteApp_appId' - The unique ID for an Amplify app.
+newDeleteApp ::
+  -- | 'appId'
+  Prelude.Text ->
+  DeleteApp
+newDeleteApp pAppId_ = DeleteApp' {appId = pAppId_}
+
+-- | The unique ID for an Amplify app.
+deleteApp_appId :: Lens.Lens' DeleteApp Prelude.Text
+deleteApp_appId = Lens.lens (\DeleteApp' {appId} -> appId) (\s@DeleteApp' {} a -> s {appId = a} :: DeleteApp)
+
+instance Core.AWSRequest DeleteApp where
+  type AWSResponse DeleteApp = DeleteAppResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteAppResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "app")
+      )
+
+instance Prelude.Hashable DeleteApp where
+  hashWithSalt _salt DeleteApp' {..} =
+    _salt `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData DeleteApp where
+  rnf DeleteApp' {..} = Prelude.rnf appId
+
+instance Data.ToHeaders DeleteApp where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteApp where
+  toPath DeleteApp' {..} =
+    Prelude.mconcat ["/apps/", Data.toBS appId]
+
+instance Data.ToQuery DeleteApp where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the delete app request.
+--
+-- /See:/ 'newDeleteAppResponse' smart constructor.
+data DeleteAppResponse = DeleteAppResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    app :: App
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteAppResponse_httpStatus' - The response's http status code.
+--
+-- 'app', 'deleteAppResponse_app' - Undocumented member.
+newDeleteAppResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'app'
+  App ->
+  DeleteAppResponse
+newDeleteAppResponse pHttpStatus_ pApp_ =
+  DeleteAppResponse'
+    { httpStatus = pHttpStatus_,
+      app = pApp_
+    }
+
+-- | The response's http status code.
+deleteAppResponse_httpStatus :: Lens.Lens' DeleteAppResponse Prelude.Int
+deleteAppResponse_httpStatus = Lens.lens (\DeleteAppResponse' {httpStatus} -> httpStatus) (\s@DeleteAppResponse' {} a -> s {httpStatus = a} :: DeleteAppResponse)
+
+-- | Undocumented member.
+deleteAppResponse_app :: Lens.Lens' DeleteAppResponse App
+deleteAppResponse_app = Lens.lens (\DeleteAppResponse' {app} -> app) (\s@DeleteAppResponse' {} a -> s {app = a} :: DeleteAppResponse)
+
+instance Prelude.NFData DeleteAppResponse where
+  rnf DeleteAppResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf app
diff --git a/gen/Amazonka/Amplify/DeleteBackendEnvironment.hs b/gen/Amazonka/Amplify/DeleteBackendEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/DeleteBackendEnvironment.hs
@@ -0,0 +1,192 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.DeleteBackendEnvironment
+-- 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 backend environment for an Amplify app.
+module Amazonka.Amplify.DeleteBackendEnvironment
+  ( -- * Creating a Request
+    DeleteBackendEnvironment (..),
+    newDeleteBackendEnvironment,
+
+    -- * Request Lenses
+    deleteBackendEnvironment_appId,
+    deleteBackendEnvironment_environmentName,
+
+    -- * Destructuring the Response
+    DeleteBackendEnvironmentResponse (..),
+    newDeleteBackendEnvironmentResponse,
+
+    -- * Response Lenses
+    deleteBackendEnvironmentResponse_httpStatus,
+    deleteBackendEnvironmentResponse_backendEnvironment,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the delete backend environment request.
+--
+-- /See:/ 'newDeleteBackendEnvironment' smart constructor.
+data DeleteBackendEnvironment = DeleteBackendEnvironment'
+  { -- | The unique ID of an Amplify app.
+    appId :: Prelude.Text,
+    -- | The name of a backend environment of an Amplify app.
+    environmentName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBackendEnvironment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'deleteBackendEnvironment_appId' - The unique ID of an Amplify app.
+--
+-- 'environmentName', 'deleteBackendEnvironment_environmentName' - The name of a backend environment of an Amplify app.
+newDeleteBackendEnvironment ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  DeleteBackendEnvironment
+newDeleteBackendEnvironment pAppId_ pEnvironmentName_ =
+  DeleteBackendEnvironment'
+    { appId = pAppId_,
+      environmentName = pEnvironmentName_
+    }
+
+-- | The unique ID of an Amplify app.
+deleteBackendEnvironment_appId :: Lens.Lens' DeleteBackendEnvironment Prelude.Text
+deleteBackendEnvironment_appId = Lens.lens (\DeleteBackendEnvironment' {appId} -> appId) (\s@DeleteBackendEnvironment' {} a -> s {appId = a} :: DeleteBackendEnvironment)
+
+-- | The name of a backend environment of an Amplify app.
+deleteBackendEnvironment_environmentName :: Lens.Lens' DeleteBackendEnvironment Prelude.Text
+deleteBackendEnvironment_environmentName = Lens.lens (\DeleteBackendEnvironment' {environmentName} -> environmentName) (\s@DeleteBackendEnvironment' {} a -> s {environmentName = a} :: DeleteBackendEnvironment)
+
+instance Core.AWSRequest DeleteBackendEnvironment where
+  type
+    AWSResponse DeleteBackendEnvironment =
+      DeleteBackendEnvironmentResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteBackendEnvironmentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "backendEnvironment")
+      )
+
+instance Prelude.Hashable DeleteBackendEnvironment where
+  hashWithSalt _salt DeleteBackendEnvironment' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+
+instance Prelude.NFData DeleteBackendEnvironment where
+  rnf DeleteBackendEnvironment' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+
+instance Data.ToHeaders DeleteBackendEnvironment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteBackendEnvironment where
+  toPath DeleteBackendEnvironment' {..} =
+    Prelude.mconcat
+      [ "/apps/",
+        Data.toBS appId,
+        "/backendenvironments/",
+        Data.toBS environmentName
+      ]
+
+instance Data.ToQuery DeleteBackendEnvironment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure of the delete backend environment result.
+--
+-- /See:/ 'newDeleteBackendEnvironmentResponse' smart constructor.
+data DeleteBackendEnvironmentResponse = DeleteBackendEnvironmentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Describes the backend environment for an Amplify app.
+    backendEnvironment :: BackendEnvironment
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBackendEnvironmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteBackendEnvironmentResponse_httpStatus' - The response's http status code.
+--
+-- 'backendEnvironment', 'deleteBackendEnvironmentResponse_backendEnvironment' - Describes the backend environment for an Amplify app.
+newDeleteBackendEnvironmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'backendEnvironment'
+  BackendEnvironment ->
+  DeleteBackendEnvironmentResponse
+newDeleteBackendEnvironmentResponse
+  pHttpStatus_
+  pBackendEnvironment_ =
+    DeleteBackendEnvironmentResponse'
+      { httpStatus =
+          pHttpStatus_,
+        backendEnvironment = pBackendEnvironment_
+      }
+
+-- | The response's http status code.
+deleteBackendEnvironmentResponse_httpStatus :: Lens.Lens' DeleteBackendEnvironmentResponse Prelude.Int
+deleteBackendEnvironmentResponse_httpStatus = Lens.lens (\DeleteBackendEnvironmentResponse' {httpStatus} -> httpStatus) (\s@DeleteBackendEnvironmentResponse' {} a -> s {httpStatus = a} :: DeleteBackendEnvironmentResponse)
+
+-- | Describes the backend environment for an Amplify app.
+deleteBackendEnvironmentResponse_backendEnvironment :: Lens.Lens' DeleteBackendEnvironmentResponse BackendEnvironment
+deleteBackendEnvironmentResponse_backendEnvironment = Lens.lens (\DeleteBackendEnvironmentResponse' {backendEnvironment} -> backendEnvironment) (\s@DeleteBackendEnvironmentResponse' {} a -> s {backendEnvironment = a} :: DeleteBackendEnvironmentResponse)
+
+instance
+  Prelude.NFData
+    DeleteBackendEnvironmentResponse
+  where
+  rnf DeleteBackendEnvironmentResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf backendEnvironment
diff --git a/gen/Amazonka/Amplify/DeleteBranch.hs b/gen/Amazonka/Amplify/DeleteBranch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/DeleteBranch.hs
@@ -0,0 +1,187 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.DeleteBranch
+-- 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 branch for an Amplify app.
+module Amazonka.Amplify.DeleteBranch
+  ( -- * Creating a Request
+    DeleteBranch (..),
+    newDeleteBranch,
+
+    -- * Request Lenses
+    deleteBranch_appId,
+    deleteBranch_branchName,
+
+    -- * Destructuring the Response
+    DeleteBranchResponse (..),
+    newDeleteBranchResponse,
+
+    -- * Response Lenses
+    deleteBranchResponse_httpStatus,
+    deleteBranchResponse_branch,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the delete branch request.
+--
+-- /See:/ 'newDeleteBranch' smart constructor.
+data DeleteBranch = DeleteBranch'
+  { -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The name for the branch.
+    branchName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBranch' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'deleteBranch_appId' - The unique ID for an Amplify app.
+--
+-- 'branchName', 'deleteBranch_branchName' - The name for the branch.
+newDeleteBranch ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'branchName'
+  Prelude.Text ->
+  DeleteBranch
+newDeleteBranch pAppId_ pBranchName_ =
+  DeleteBranch'
+    { appId = pAppId_,
+      branchName = pBranchName_
+    }
+
+-- | The unique ID for an Amplify app.
+deleteBranch_appId :: Lens.Lens' DeleteBranch Prelude.Text
+deleteBranch_appId = Lens.lens (\DeleteBranch' {appId} -> appId) (\s@DeleteBranch' {} a -> s {appId = a} :: DeleteBranch)
+
+-- | The name for the branch.
+deleteBranch_branchName :: Lens.Lens' DeleteBranch Prelude.Text
+deleteBranch_branchName = Lens.lens (\DeleteBranch' {branchName} -> branchName) (\s@DeleteBranch' {} a -> s {branchName = a} :: DeleteBranch)
+
+instance Core.AWSRequest DeleteBranch where
+  type AWSResponse DeleteBranch = DeleteBranchResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteBranchResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "branch")
+      )
+
+instance Prelude.Hashable DeleteBranch where
+  hashWithSalt _salt DeleteBranch' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` branchName
+
+instance Prelude.NFData DeleteBranch where
+  rnf DeleteBranch' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf branchName
+
+instance Data.ToHeaders DeleteBranch where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteBranch where
+  toPath DeleteBranch' {..} =
+    Prelude.mconcat
+      [ "/apps/",
+        Data.toBS appId,
+        "/branches/",
+        Data.toBS branchName
+      ]
+
+instance Data.ToQuery DeleteBranch where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the delete branch request.
+--
+-- /See:/ 'newDeleteBranchResponse' smart constructor.
+data DeleteBranchResponse = DeleteBranchResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The branch for an Amplify app, which maps to a third-party repository
+    -- branch.
+    branch :: Branch
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBranchResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteBranchResponse_httpStatus' - The response's http status code.
+--
+-- 'branch', 'deleteBranchResponse_branch' - The branch for an Amplify app, which maps to a third-party repository
+-- branch.
+newDeleteBranchResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'branch'
+  Branch ->
+  DeleteBranchResponse
+newDeleteBranchResponse pHttpStatus_ pBranch_ =
+  DeleteBranchResponse'
+    { httpStatus = pHttpStatus_,
+      branch = pBranch_
+    }
+
+-- | The response's http status code.
+deleteBranchResponse_httpStatus :: Lens.Lens' DeleteBranchResponse Prelude.Int
+deleteBranchResponse_httpStatus = Lens.lens (\DeleteBranchResponse' {httpStatus} -> httpStatus) (\s@DeleteBranchResponse' {} a -> s {httpStatus = a} :: DeleteBranchResponse)
+
+-- | The branch for an Amplify app, which maps to a third-party repository
+-- branch.
+deleteBranchResponse_branch :: Lens.Lens' DeleteBranchResponse Branch
+deleteBranchResponse_branch = Lens.lens (\DeleteBranchResponse' {branch} -> branch) (\s@DeleteBranchResponse' {} a -> s {branch = a} :: DeleteBranchResponse)
+
+instance Prelude.NFData DeleteBranchResponse where
+  rnf DeleteBranchResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf branch
diff --git a/gen/Amazonka/Amplify/DeleteDomainAssociation.hs b/gen/Amazonka/Amplify/DeleteDomainAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/DeleteDomainAssociation.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.DeleteDomainAssociation
+-- 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 domain association for an Amplify app.
+module Amazonka.Amplify.DeleteDomainAssociation
+  ( -- * Creating a Request
+    DeleteDomainAssociation (..),
+    newDeleteDomainAssociation,
+
+    -- * Request Lenses
+    deleteDomainAssociation_appId,
+    deleteDomainAssociation_domainName,
+
+    -- * Destructuring the Response
+    DeleteDomainAssociationResponse (..),
+    newDeleteDomainAssociationResponse,
+
+    -- * Response Lenses
+    deleteDomainAssociationResponse_httpStatus,
+    deleteDomainAssociationResponse_domainAssociation,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the delete domain association request.
+--
+-- /See:/ 'newDeleteDomainAssociation' smart constructor.
+data DeleteDomainAssociation = DeleteDomainAssociation'
+  { -- | The unique id for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDomainAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'deleteDomainAssociation_appId' - The unique id for an Amplify app.
+--
+-- 'domainName', 'deleteDomainAssociation_domainName' - The name of the domain.
+newDeleteDomainAssociation ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'domainName'
+  Prelude.Text ->
+  DeleteDomainAssociation
+newDeleteDomainAssociation pAppId_ pDomainName_ =
+  DeleteDomainAssociation'
+    { appId = pAppId_,
+      domainName = pDomainName_
+    }
+
+-- | The unique id for an Amplify app.
+deleteDomainAssociation_appId :: Lens.Lens' DeleteDomainAssociation Prelude.Text
+deleteDomainAssociation_appId = Lens.lens (\DeleteDomainAssociation' {appId} -> appId) (\s@DeleteDomainAssociation' {} a -> s {appId = a} :: DeleteDomainAssociation)
+
+-- | The name of the domain.
+deleteDomainAssociation_domainName :: Lens.Lens' DeleteDomainAssociation Prelude.Text
+deleteDomainAssociation_domainName = Lens.lens (\DeleteDomainAssociation' {domainName} -> domainName) (\s@DeleteDomainAssociation' {} a -> s {domainName = a} :: DeleteDomainAssociation)
+
+instance Core.AWSRequest DeleteDomainAssociation where
+  type
+    AWSResponse DeleteDomainAssociation =
+      DeleteDomainAssociationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteDomainAssociationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "domainAssociation")
+      )
+
+instance Prelude.Hashable DeleteDomainAssociation where
+  hashWithSalt _salt DeleteDomainAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData DeleteDomainAssociation where
+  rnf DeleteDomainAssociation' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders DeleteDomainAssociation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteDomainAssociation where
+  toPath DeleteDomainAssociation' {..} =
+    Prelude.mconcat
+      [ "/apps/",
+        Data.toBS appId,
+        "/domains/",
+        Data.toBS domainName
+      ]
+
+instance Data.ToQuery DeleteDomainAssociation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDomainAssociationResponse' smart constructor.
+data DeleteDomainAssociationResponse = DeleteDomainAssociationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    domainAssociation :: DomainAssociation
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDomainAssociationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteDomainAssociationResponse_httpStatus' - The response's http status code.
+--
+-- 'domainAssociation', 'deleteDomainAssociationResponse_domainAssociation' - Undocumented member.
+newDeleteDomainAssociationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'domainAssociation'
+  DomainAssociation ->
+  DeleteDomainAssociationResponse
+newDeleteDomainAssociationResponse
+  pHttpStatus_
+  pDomainAssociation_ =
+    DeleteDomainAssociationResponse'
+      { httpStatus =
+          pHttpStatus_,
+        domainAssociation = pDomainAssociation_
+      }
+
+-- | The response's http status code.
+deleteDomainAssociationResponse_httpStatus :: Lens.Lens' DeleteDomainAssociationResponse Prelude.Int
+deleteDomainAssociationResponse_httpStatus = Lens.lens (\DeleteDomainAssociationResponse' {httpStatus} -> httpStatus) (\s@DeleteDomainAssociationResponse' {} a -> s {httpStatus = a} :: DeleteDomainAssociationResponse)
+
+-- | Undocumented member.
+deleteDomainAssociationResponse_domainAssociation :: Lens.Lens' DeleteDomainAssociationResponse DomainAssociation
+deleteDomainAssociationResponse_domainAssociation = Lens.lens (\DeleteDomainAssociationResponse' {domainAssociation} -> domainAssociation) (\s@DeleteDomainAssociationResponse' {} a -> s {domainAssociation = a} :: DeleteDomainAssociationResponse)
+
+instance
+  Prelude.NFData
+    DeleteDomainAssociationResponse
+  where
+  rnf DeleteDomainAssociationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf domainAssociation
diff --git a/gen/Amazonka/Amplify/DeleteJob.hs b/gen/Amazonka/Amplify/DeleteJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/DeleteJob.hs
@@ -0,0 +1,199 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.DeleteJob
+-- 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 job for a branch of an Amplify app.
+module Amazonka.Amplify.DeleteJob
+  ( -- * Creating a Request
+    DeleteJob (..),
+    newDeleteJob,
+
+    -- * Request Lenses
+    deleteJob_appId,
+    deleteJob_branchName,
+    deleteJob_jobId,
+
+    -- * Destructuring the Response
+    DeleteJobResponse (..),
+    newDeleteJobResponse,
+
+    -- * Response Lenses
+    deleteJobResponse_httpStatus,
+    deleteJobResponse_jobSummary,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the delete job request.
+--
+-- /See:/ 'newDeleteJob' smart constructor.
+data DeleteJob = DeleteJob'
+  { -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The name for the branch, for the job.
+    branchName :: Prelude.Text,
+    -- | The unique ID for the job.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'deleteJob_appId' - The unique ID for an Amplify app.
+--
+-- 'branchName', 'deleteJob_branchName' - The name for the branch, for the job.
+--
+-- 'jobId', 'deleteJob_jobId' - The unique ID for the job.
+newDeleteJob ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'branchName'
+  Prelude.Text ->
+  -- | 'jobId'
+  Prelude.Text ->
+  DeleteJob
+newDeleteJob pAppId_ pBranchName_ pJobId_ =
+  DeleteJob'
+    { appId = pAppId_,
+      branchName = pBranchName_,
+      jobId = pJobId_
+    }
+
+-- | The unique ID for an Amplify app.
+deleteJob_appId :: Lens.Lens' DeleteJob Prelude.Text
+deleteJob_appId = Lens.lens (\DeleteJob' {appId} -> appId) (\s@DeleteJob' {} a -> s {appId = a} :: DeleteJob)
+
+-- | The name for the branch, for the job.
+deleteJob_branchName :: Lens.Lens' DeleteJob Prelude.Text
+deleteJob_branchName = Lens.lens (\DeleteJob' {branchName} -> branchName) (\s@DeleteJob' {} a -> s {branchName = a} :: DeleteJob)
+
+-- | The unique ID for the job.
+deleteJob_jobId :: Lens.Lens' DeleteJob Prelude.Text
+deleteJob_jobId = Lens.lens (\DeleteJob' {jobId} -> jobId) (\s@DeleteJob' {} a -> s {jobId = a} :: DeleteJob)
+
+instance Core.AWSRequest DeleteJob where
+  type AWSResponse DeleteJob = DeleteJobResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "jobSummary")
+      )
+
+instance Prelude.Hashable DeleteJob where
+  hashWithSalt _salt DeleteJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` branchName
+      `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData DeleteJob where
+  rnf DeleteJob' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf branchName
+      `Prelude.seq` Prelude.rnf jobId
+
+instance Data.ToHeaders DeleteJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteJob where
+  toPath DeleteJob' {..} =
+    Prelude.mconcat
+      [ "/apps/",
+        Data.toBS appId,
+        "/branches/",
+        Data.toBS branchName,
+        "/jobs/",
+        Data.toBS jobId
+      ]
+
+instance Data.ToQuery DeleteJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the delete job request.
+--
+-- /See:/ 'newDeleteJobResponse' smart constructor.
+data DeleteJobResponse = DeleteJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    jobSummary :: JobSummary
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteJobResponse_httpStatus' - The response's http status code.
+--
+-- 'jobSummary', 'deleteJobResponse_jobSummary' - Undocumented member.
+newDeleteJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'jobSummary'
+  JobSummary ->
+  DeleteJobResponse
+newDeleteJobResponse pHttpStatus_ pJobSummary_ =
+  DeleteJobResponse'
+    { httpStatus = pHttpStatus_,
+      jobSummary = pJobSummary_
+    }
+
+-- | The response's http status code.
+deleteJobResponse_httpStatus :: Lens.Lens' DeleteJobResponse Prelude.Int
+deleteJobResponse_httpStatus = Lens.lens (\DeleteJobResponse' {httpStatus} -> httpStatus) (\s@DeleteJobResponse' {} a -> s {httpStatus = a} :: DeleteJobResponse)
+
+-- | Undocumented member.
+deleteJobResponse_jobSummary :: Lens.Lens' DeleteJobResponse JobSummary
+deleteJobResponse_jobSummary = Lens.lens (\DeleteJobResponse' {jobSummary} -> jobSummary) (\s@DeleteJobResponse' {} a -> s {jobSummary = a} :: DeleteJobResponse)
+
+instance Prelude.NFData DeleteJobResponse where
+  rnf DeleteJobResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf jobSummary
diff --git a/gen/Amazonka/Amplify/DeleteWebhook.hs b/gen/Amazonka/Amplify/DeleteWebhook.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/DeleteWebhook.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.DeleteWebhook
+-- 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 webhook.
+module Amazonka.Amplify.DeleteWebhook
+  ( -- * Creating a Request
+    DeleteWebhook (..),
+    newDeleteWebhook,
+
+    -- * Request Lenses
+    deleteWebhook_webhookId,
+
+    -- * Destructuring the Response
+    DeleteWebhookResponse (..),
+    newDeleteWebhookResponse,
+
+    -- * Response Lenses
+    deleteWebhookResponse_httpStatus,
+    deleteWebhookResponse_webhook,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the delete webhook request.
+--
+-- /See:/ 'newDeleteWebhook' smart constructor.
+data DeleteWebhook = DeleteWebhook'
+  { -- | The unique ID for a webhook.
+    webhookId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWebhook' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'webhookId', 'deleteWebhook_webhookId' - The unique ID for a webhook.
+newDeleteWebhook ::
+  -- | 'webhookId'
+  Prelude.Text ->
+  DeleteWebhook
+newDeleteWebhook pWebhookId_ =
+  DeleteWebhook' {webhookId = pWebhookId_}
+
+-- | The unique ID for a webhook.
+deleteWebhook_webhookId :: Lens.Lens' DeleteWebhook Prelude.Text
+deleteWebhook_webhookId = Lens.lens (\DeleteWebhook' {webhookId} -> webhookId) (\s@DeleteWebhook' {} a -> s {webhookId = a} :: DeleteWebhook)
+
+instance Core.AWSRequest DeleteWebhook where
+  type
+    AWSResponse DeleteWebhook =
+      DeleteWebhookResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteWebhookResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "webhook")
+      )
+
+instance Prelude.Hashable DeleteWebhook where
+  hashWithSalt _salt DeleteWebhook' {..} =
+    _salt `Prelude.hashWithSalt` webhookId
+
+instance Prelude.NFData DeleteWebhook where
+  rnf DeleteWebhook' {..} = Prelude.rnf webhookId
+
+instance Data.ToHeaders DeleteWebhook where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteWebhook where
+  toPath DeleteWebhook' {..} =
+    Prelude.mconcat ["/webhooks/", Data.toBS webhookId]
+
+instance Data.ToQuery DeleteWebhook where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the delete webhook request.
+--
+-- /See:/ 'newDeleteWebhookResponse' smart constructor.
+data DeleteWebhookResponse = DeleteWebhookResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Describes a webhook that connects repository events to an Amplify app.
+    webhook :: Webhook
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWebhookResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteWebhookResponse_httpStatus' - The response's http status code.
+--
+-- 'webhook', 'deleteWebhookResponse_webhook' - Describes a webhook that connects repository events to an Amplify app.
+newDeleteWebhookResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'webhook'
+  Webhook ->
+  DeleteWebhookResponse
+newDeleteWebhookResponse pHttpStatus_ pWebhook_ =
+  DeleteWebhookResponse'
+    { httpStatus = pHttpStatus_,
+      webhook = pWebhook_
+    }
+
+-- | The response's http status code.
+deleteWebhookResponse_httpStatus :: Lens.Lens' DeleteWebhookResponse Prelude.Int
+deleteWebhookResponse_httpStatus = Lens.lens (\DeleteWebhookResponse' {httpStatus} -> httpStatus) (\s@DeleteWebhookResponse' {} a -> s {httpStatus = a} :: DeleteWebhookResponse)
+
+-- | Describes a webhook that connects repository events to an Amplify app.
+deleteWebhookResponse_webhook :: Lens.Lens' DeleteWebhookResponse Webhook
+deleteWebhookResponse_webhook = Lens.lens (\DeleteWebhookResponse' {webhook} -> webhook) (\s@DeleteWebhookResponse' {} a -> s {webhook = a} :: DeleteWebhookResponse)
+
+instance Prelude.NFData DeleteWebhookResponse where
+  rnf DeleteWebhookResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf webhook
diff --git a/gen/Amazonka/Amplify/GenerateAccessLogs.hs b/gen/Amazonka/Amplify/GenerateAccessLogs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/GenerateAccessLogs.hs
@@ -0,0 +1,222 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.GenerateAccessLogs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the website access logs for a specific time range using a
+-- presigned URL.
+module Amazonka.Amplify.GenerateAccessLogs
+  ( -- * Creating a Request
+    GenerateAccessLogs (..),
+    newGenerateAccessLogs,
+
+    -- * Request Lenses
+    generateAccessLogs_endTime,
+    generateAccessLogs_startTime,
+    generateAccessLogs_domainName,
+    generateAccessLogs_appId,
+
+    -- * Destructuring the Response
+    GenerateAccessLogsResponse (..),
+    newGenerateAccessLogsResponse,
+
+    -- * Response Lenses
+    generateAccessLogsResponse_logUrl,
+    generateAccessLogsResponse_httpStatus,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the generate access logs request.
+--
+-- /See:/ 'newGenerateAccessLogs' smart constructor.
+data GenerateAccessLogs = GenerateAccessLogs'
+  { -- | The time at which the logs should end. The time range specified is
+    -- inclusive of the end time.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | The time at which the logs should start. The time range specified is
+    -- inclusive of the start time.
+    startTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the domain.
+    domainName :: Prelude.Text,
+    -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GenerateAccessLogs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endTime', 'generateAccessLogs_endTime' - The time at which the logs should end. The time range specified is
+-- inclusive of the end time.
+--
+-- 'startTime', 'generateAccessLogs_startTime' - The time at which the logs should start. The time range specified is
+-- inclusive of the start time.
+--
+-- 'domainName', 'generateAccessLogs_domainName' - The name of the domain.
+--
+-- 'appId', 'generateAccessLogs_appId' - The unique ID for an Amplify app.
+newGenerateAccessLogs ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'appId'
+  Prelude.Text ->
+  GenerateAccessLogs
+newGenerateAccessLogs pDomainName_ pAppId_ =
+  GenerateAccessLogs'
+    { endTime = Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      domainName = pDomainName_,
+      appId = pAppId_
+    }
+
+-- | The time at which the logs should end. The time range specified is
+-- inclusive of the end time.
+generateAccessLogs_endTime :: Lens.Lens' GenerateAccessLogs (Prelude.Maybe Prelude.UTCTime)
+generateAccessLogs_endTime = Lens.lens (\GenerateAccessLogs' {endTime} -> endTime) (\s@GenerateAccessLogs' {} a -> s {endTime = a} :: GenerateAccessLogs) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which the logs should start. The time range specified is
+-- inclusive of the start time.
+generateAccessLogs_startTime :: Lens.Lens' GenerateAccessLogs (Prelude.Maybe Prelude.UTCTime)
+generateAccessLogs_startTime = Lens.lens (\GenerateAccessLogs' {startTime} -> startTime) (\s@GenerateAccessLogs' {} a -> s {startTime = a} :: GenerateAccessLogs) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the domain.
+generateAccessLogs_domainName :: Lens.Lens' GenerateAccessLogs Prelude.Text
+generateAccessLogs_domainName = Lens.lens (\GenerateAccessLogs' {domainName} -> domainName) (\s@GenerateAccessLogs' {} a -> s {domainName = a} :: GenerateAccessLogs)
+
+-- | The unique ID for an Amplify app.
+generateAccessLogs_appId :: Lens.Lens' GenerateAccessLogs Prelude.Text
+generateAccessLogs_appId = Lens.lens (\GenerateAccessLogs' {appId} -> appId) (\s@GenerateAccessLogs' {} a -> s {appId = a} :: GenerateAccessLogs)
+
+instance Core.AWSRequest GenerateAccessLogs where
+  type
+    AWSResponse GenerateAccessLogs =
+      GenerateAccessLogsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GenerateAccessLogsResponse'
+            Prelude.<$> (x Data..?> "logUrl")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GenerateAccessLogs where
+  hashWithSalt _salt GenerateAccessLogs' {..} =
+    _salt
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData GenerateAccessLogs where
+  rnf GenerateAccessLogs' {..} =
+    Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf appId
+
+instance Data.ToHeaders GenerateAccessLogs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GenerateAccessLogs where
+  toJSON GenerateAccessLogs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("endTime" Data..=) Prelude.<$> endTime,
+            ("startTime" Data..=) Prelude.<$> startTime,
+            Prelude.Just ("domainName" Data..= domainName)
+          ]
+      )
+
+instance Data.ToPath GenerateAccessLogs where
+  toPath GenerateAccessLogs' {..} =
+    Prelude.mconcat
+      ["/apps/", Data.toBS appId, "/accesslogs"]
+
+instance Data.ToQuery GenerateAccessLogs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the generate access logs request.
+--
+-- /See:/ 'newGenerateAccessLogsResponse' smart constructor.
+data GenerateAccessLogsResponse = GenerateAccessLogsResponse'
+  { -- | The pre-signed URL for the requested access logs.
+    logUrl :: 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 'GenerateAccessLogsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logUrl', 'generateAccessLogsResponse_logUrl' - The pre-signed URL for the requested access logs.
+--
+-- 'httpStatus', 'generateAccessLogsResponse_httpStatus' - The response's http status code.
+newGenerateAccessLogsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GenerateAccessLogsResponse
+newGenerateAccessLogsResponse pHttpStatus_ =
+  GenerateAccessLogsResponse'
+    { logUrl =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The pre-signed URL for the requested access logs.
+generateAccessLogsResponse_logUrl :: Lens.Lens' GenerateAccessLogsResponse (Prelude.Maybe Prelude.Text)
+generateAccessLogsResponse_logUrl = Lens.lens (\GenerateAccessLogsResponse' {logUrl} -> logUrl) (\s@GenerateAccessLogsResponse' {} a -> s {logUrl = a} :: GenerateAccessLogsResponse)
+
+-- | The response's http status code.
+generateAccessLogsResponse_httpStatus :: Lens.Lens' GenerateAccessLogsResponse Prelude.Int
+generateAccessLogsResponse_httpStatus = Lens.lens (\GenerateAccessLogsResponse' {httpStatus} -> httpStatus) (\s@GenerateAccessLogsResponse' {} a -> s {httpStatus = a} :: GenerateAccessLogsResponse)
+
+instance Prelude.NFData GenerateAccessLogsResponse where
+  rnf GenerateAccessLogsResponse' {..} =
+    Prelude.rnf logUrl
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Amplify/GetApp.hs b/gen/Amazonka/Amplify/GetApp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/GetApp.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.GetApp
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns an existing Amplify app by appID.
+module Amazonka.Amplify.GetApp
+  ( -- * Creating a Request
+    GetApp (..),
+    newGetApp,
+
+    -- * Request Lenses
+    getApp_appId,
+
+    -- * Destructuring the Response
+    GetAppResponse (..),
+    newGetAppResponse,
+
+    -- * Response Lenses
+    getAppResponse_httpStatus,
+    getAppResponse_app,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the get app request.
+--
+-- /See:/ 'newGetApp' smart constructor.
+data GetApp = GetApp'
+  { -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetApp' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'getApp_appId' - The unique ID for an Amplify app.
+newGetApp ::
+  -- | 'appId'
+  Prelude.Text ->
+  GetApp
+newGetApp pAppId_ = GetApp' {appId = pAppId_}
+
+-- | The unique ID for an Amplify app.
+getApp_appId :: Lens.Lens' GetApp Prelude.Text
+getApp_appId = Lens.lens (\GetApp' {appId} -> appId) (\s@GetApp' {} a -> s {appId = a} :: GetApp)
+
+instance Core.AWSRequest GetApp where
+  type AWSResponse GetApp = GetAppResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAppResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "app")
+      )
+
+instance Prelude.Hashable GetApp where
+  hashWithSalt _salt GetApp' {..} =
+    _salt `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData GetApp where
+  rnf GetApp' {..} = Prelude.rnf appId
+
+instance Data.ToHeaders GetApp where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetApp where
+  toPath GetApp' {..} =
+    Prelude.mconcat ["/apps/", Data.toBS appId]
+
+instance Data.ToQuery GetApp where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAppResponse' smart constructor.
+data GetAppResponse = GetAppResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    app :: App
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAppResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'getAppResponse_httpStatus' - The response's http status code.
+--
+-- 'app', 'getAppResponse_app' - Undocumented member.
+newGetAppResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'app'
+  App ->
+  GetAppResponse
+newGetAppResponse pHttpStatus_ pApp_ =
+  GetAppResponse'
+    { httpStatus = pHttpStatus_,
+      app = pApp_
+    }
+
+-- | The response's http status code.
+getAppResponse_httpStatus :: Lens.Lens' GetAppResponse Prelude.Int
+getAppResponse_httpStatus = Lens.lens (\GetAppResponse' {httpStatus} -> httpStatus) (\s@GetAppResponse' {} a -> s {httpStatus = a} :: GetAppResponse)
+
+-- | Undocumented member.
+getAppResponse_app :: Lens.Lens' GetAppResponse App
+getAppResponse_app = Lens.lens (\GetAppResponse' {app} -> app) (\s@GetAppResponse' {} a -> s {app = a} :: GetAppResponse)
+
+instance Prelude.NFData GetAppResponse where
+  rnf GetAppResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf app
diff --git a/gen/Amazonka/Amplify/GetArtifactUrl.hs b/gen/Amazonka/Amplify/GetArtifactUrl.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/GetArtifactUrl.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.GetArtifactUrl
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the artifact info that corresponds to an artifact id.
+module Amazonka.Amplify.GetArtifactUrl
+  ( -- * Creating a Request
+    GetArtifactUrl (..),
+    newGetArtifactUrl,
+
+    -- * Request Lenses
+    getArtifactUrl_artifactId,
+
+    -- * Destructuring the Response
+    GetArtifactUrlResponse (..),
+    newGetArtifactUrlResponse,
+
+    -- * Response Lenses
+    getArtifactUrlResponse_httpStatus,
+    getArtifactUrlResponse_artifactId,
+    getArtifactUrlResponse_artifactUrl,
+  )
+where
+
+import Amazonka.Amplify.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
+
+-- | Returns the request structure for the get artifact request.
+--
+-- /See:/ 'newGetArtifactUrl' smart constructor.
+data GetArtifactUrl = GetArtifactUrl'
+  { -- | The unique ID for an artifact.
+    artifactId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetArtifactUrl' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'artifactId', 'getArtifactUrl_artifactId' - The unique ID for an artifact.
+newGetArtifactUrl ::
+  -- | 'artifactId'
+  Prelude.Text ->
+  GetArtifactUrl
+newGetArtifactUrl pArtifactId_ =
+  GetArtifactUrl' {artifactId = pArtifactId_}
+
+-- | The unique ID for an artifact.
+getArtifactUrl_artifactId :: Lens.Lens' GetArtifactUrl Prelude.Text
+getArtifactUrl_artifactId = Lens.lens (\GetArtifactUrl' {artifactId} -> artifactId) (\s@GetArtifactUrl' {} a -> s {artifactId = a} :: GetArtifactUrl)
+
+instance Core.AWSRequest GetArtifactUrl where
+  type
+    AWSResponse GetArtifactUrl =
+      GetArtifactUrlResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetArtifactUrlResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "artifactId")
+            Prelude.<*> (x Data..:> "artifactUrl")
+      )
+
+instance Prelude.Hashable GetArtifactUrl where
+  hashWithSalt _salt GetArtifactUrl' {..} =
+    _salt `Prelude.hashWithSalt` artifactId
+
+instance Prelude.NFData GetArtifactUrl where
+  rnf GetArtifactUrl' {..} = Prelude.rnf artifactId
+
+instance Data.ToHeaders GetArtifactUrl where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetArtifactUrl where
+  toPath GetArtifactUrl' {..} =
+    Prelude.mconcat
+      ["/artifacts/", Data.toBS artifactId]
+
+instance Data.ToQuery GetArtifactUrl where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | Returns the result structure for the get artifact request.
+--
+-- /See:/ 'newGetArtifactUrlResponse' smart constructor.
+data GetArtifactUrlResponse = GetArtifactUrlResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The unique ID for an artifact.
+    artifactId :: Prelude.Text,
+    -- | The presigned URL for the artifact.
+    artifactUrl :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetArtifactUrlResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'getArtifactUrlResponse_httpStatus' - The response's http status code.
+--
+-- 'artifactId', 'getArtifactUrlResponse_artifactId' - The unique ID for an artifact.
+--
+-- 'artifactUrl', 'getArtifactUrlResponse_artifactUrl' - The presigned URL for the artifact.
+newGetArtifactUrlResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'artifactId'
+  Prelude.Text ->
+  -- | 'artifactUrl'
+  Prelude.Text ->
+  GetArtifactUrlResponse
+newGetArtifactUrlResponse
+  pHttpStatus_
+  pArtifactId_
+  pArtifactUrl_ =
+    GetArtifactUrlResponse'
+      { httpStatus = pHttpStatus_,
+        artifactId = pArtifactId_,
+        artifactUrl = pArtifactUrl_
+      }
+
+-- | The response's http status code.
+getArtifactUrlResponse_httpStatus :: Lens.Lens' GetArtifactUrlResponse Prelude.Int
+getArtifactUrlResponse_httpStatus = Lens.lens (\GetArtifactUrlResponse' {httpStatus} -> httpStatus) (\s@GetArtifactUrlResponse' {} a -> s {httpStatus = a} :: GetArtifactUrlResponse)
+
+-- | The unique ID for an artifact.
+getArtifactUrlResponse_artifactId :: Lens.Lens' GetArtifactUrlResponse Prelude.Text
+getArtifactUrlResponse_artifactId = Lens.lens (\GetArtifactUrlResponse' {artifactId} -> artifactId) (\s@GetArtifactUrlResponse' {} a -> s {artifactId = a} :: GetArtifactUrlResponse)
+
+-- | The presigned URL for the artifact.
+getArtifactUrlResponse_artifactUrl :: Lens.Lens' GetArtifactUrlResponse Prelude.Text
+getArtifactUrlResponse_artifactUrl = Lens.lens (\GetArtifactUrlResponse' {artifactUrl} -> artifactUrl) (\s@GetArtifactUrlResponse' {} a -> s {artifactUrl = a} :: GetArtifactUrlResponse)
+
+instance Prelude.NFData GetArtifactUrlResponse where
+  rnf GetArtifactUrlResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf artifactId
+      `Prelude.seq` Prelude.rnf artifactUrl
diff --git a/gen/Amazonka/Amplify/GetBackendEnvironment.hs b/gen/Amazonka/Amplify/GetBackendEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/GetBackendEnvironment.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.GetBackendEnvironment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a backend environment for an Amplify app.
+module Amazonka.Amplify.GetBackendEnvironment
+  ( -- * Creating a Request
+    GetBackendEnvironment (..),
+    newGetBackendEnvironment,
+
+    -- * Request Lenses
+    getBackendEnvironment_appId,
+    getBackendEnvironment_environmentName,
+
+    -- * Destructuring the Response
+    GetBackendEnvironmentResponse (..),
+    newGetBackendEnvironmentResponse,
+
+    -- * Response Lenses
+    getBackendEnvironmentResponse_httpStatus,
+    getBackendEnvironmentResponse_backendEnvironment,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the get backend environment request.
+--
+-- /See:/ 'newGetBackendEnvironment' smart constructor.
+data GetBackendEnvironment = GetBackendEnvironment'
+  { -- | The unique id for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The name for the backend environment.
+    environmentName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetBackendEnvironment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'getBackendEnvironment_appId' - The unique id for an Amplify app.
+--
+-- 'environmentName', 'getBackendEnvironment_environmentName' - The name for the backend environment.
+newGetBackendEnvironment ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  GetBackendEnvironment
+newGetBackendEnvironment pAppId_ pEnvironmentName_ =
+  GetBackendEnvironment'
+    { appId = pAppId_,
+      environmentName = pEnvironmentName_
+    }
+
+-- | The unique id for an Amplify app.
+getBackendEnvironment_appId :: Lens.Lens' GetBackendEnvironment Prelude.Text
+getBackendEnvironment_appId = Lens.lens (\GetBackendEnvironment' {appId} -> appId) (\s@GetBackendEnvironment' {} a -> s {appId = a} :: GetBackendEnvironment)
+
+-- | The name for the backend environment.
+getBackendEnvironment_environmentName :: Lens.Lens' GetBackendEnvironment Prelude.Text
+getBackendEnvironment_environmentName = Lens.lens (\GetBackendEnvironment' {environmentName} -> environmentName) (\s@GetBackendEnvironment' {} a -> s {environmentName = a} :: GetBackendEnvironment)
+
+instance Core.AWSRequest GetBackendEnvironment where
+  type
+    AWSResponse GetBackendEnvironment =
+      GetBackendEnvironmentResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetBackendEnvironmentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "backendEnvironment")
+      )
+
+instance Prelude.Hashable GetBackendEnvironment where
+  hashWithSalt _salt GetBackendEnvironment' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+
+instance Prelude.NFData GetBackendEnvironment where
+  rnf GetBackendEnvironment' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+
+instance Data.ToHeaders GetBackendEnvironment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetBackendEnvironment where
+  toPath GetBackendEnvironment' {..} =
+    Prelude.mconcat
+      [ "/apps/",
+        Data.toBS appId,
+        "/backendenvironments/",
+        Data.toBS environmentName
+      ]
+
+instance Data.ToQuery GetBackendEnvironment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the get backend environment result.
+--
+-- /See:/ 'newGetBackendEnvironmentResponse' smart constructor.
+data GetBackendEnvironmentResponse = GetBackendEnvironmentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Describes the backend environment for an Amplify app.
+    backendEnvironment :: BackendEnvironment
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetBackendEnvironmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'getBackendEnvironmentResponse_httpStatus' - The response's http status code.
+--
+-- 'backendEnvironment', 'getBackendEnvironmentResponse_backendEnvironment' - Describes the backend environment for an Amplify app.
+newGetBackendEnvironmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'backendEnvironment'
+  BackendEnvironment ->
+  GetBackendEnvironmentResponse
+newGetBackendEnvironmentResponse
+  pHttpStatus_
+  pBackendEnvironment_ =
+    GetBackendEnvironmentResponse'
+      { httpStatus =
+          pHttpStatus_,
+        backendEnvironment = pBackendEnvironment_
+      }
+
+-- | The response's http status code.
+getBackendEnvironmentResponse_httpStatus :: Lens.Lens' GetBackendEnvironmentResponse Prelude.Int
+getBackendEnvironmentResponse_httpStatus = Lens.lens (\GetBackendEnvironmentResponse' {httpStatus} -> httpStatus) (\s@GetBackendEnvironmentResponse' {} a -> s {httpStatus = a} :: GetBackendEnvironmentResponse)
+
+-- | Describes the backend environment for an Amplify app.
+getBackendEnvironmentResponse_backendEnvironment :: Lens.Lens' GetBackendEnvironmentResponse BackendEnvironment
+getBackendEnvironmentResponse_backendEnvironment = Lens.lens (\GetBackendEnvironmentResponse' {backendEnvironment} -> backendEnvironment) (\s@GetBackendEnvironmentResponse' {} a -> s {backendEnvironment = a} :: GetBackendEnvironmentResponse)
+
+instance Prelude.NFData GetBackendEnvironmentResponse where
+  rnf GetBackendEnvironmentResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf backendEnvironment
diff --git a/gen/Amazonka/Amplify/GetBranch.hs b/gen/Amazonka/Amplify/GetBranch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/GetBranch.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.GetBranch
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a branch for an Amplify app.
+module Amazonka.Amplify.GetBranch
+  ( -- * Creating a Request
+    GetBranch (..),
+    newGetBranch,
+
+    -- * Request Lenses
+    getBranch_appId,
+    getBranch_branchName,
+
+    -- * Destructuring the Response
+    GetBranchResponse (..),
+    newGetBranchResponse,
+
+    -- * Response Lenses
+    getBranchResponse_httpStatus,
+    getBranchResponse_branch,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the get branch request.
+--
+-- /See:/ 'newGetBranch' smart constructor.
+data GetBranch = GetBranch'
+  { -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The name for the branch.
+    branchName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetBranch' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'getBranch_appId' - The unique ID for an Amplify app.
+--
+-- 'branchName', 'getBranch_branchName' - The name for the branch.
+newGetBranch ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'branchName'
+  Prelude.Text ->
+  GetBranch
+newGetBranch pAppId_ pBranchName_ =
+  GetBranch'
+    { appId = pAppId_,
+      branchName = pBranchName_
+    }
+
+-- | The unique ID for an Amplify app.
+getBranch_appId :: Lens.Lens' GetBranch Prelude.Text
+getBranch_appId = Lens.lens (\GetBranch' {appId} -> appId) (\s@GetBranch' {} a -> s {appId = a} :: GetBranch)
+
+-- | The name for the branch.
+getBranch_branchName :: Lens.Lens' GetBranch Prelude.Text
+getBranch_branchName = Lens.lens (\GetBranch' {branchName} -> branchName) (\s@GetBranch' {} a -> s {branchName = a} :: GetBranch)
+
+instance Core.AWSRequest GetBranch where
+  type AWSResponse GetBranch = GetBranchResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetBranchResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "branch")
+      )
+
+instance Prelude.Hashable GetBranch where
+  hashWithSalt _salt GetBranch' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` branchName
+
+instance Prelude.NFData GetBranch where
+  rnf GetBranch' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf branchName
+
+instance Data.ToHeaders GetBranch where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetBranch where
+  toPath GetBranch' {..} =
+    Prelude.mconcat
+      [ "/apps/",
+        Data.toBS appId,
+        "/branches/",
+        Data.toBS branchName
+      ]
+
+instance Data.ToQuery GetBranch where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetBranchResponse' smart constructor.
+data GetBranchResponse = GetBranchResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    branch :: Branch
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetBranchResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'getBranchResponse_httpStatus' - The response's http status code.
+--
+-- 'branch', 'getBranchResponse_branch' - Undocumented member.
+newGetBranchResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'branch'
+  Branch ->
+  GetBranchResponse
+newGetBranchResponse pHttpStatus_ pBranch_ =
+  GetBranchResponse'
+    { httpStatus = pHttpStatus_,
+      branch = pBranch_
+    }
+
+-- | The response's http status code.
+getBranchResponse_httpStatus :: Lens.Lens' GetBranchResponse Prelude.Int
+getBranchResponse_httpStatus = Lens.lens (\GetBranchResponse' {httpStatus} -> httpStatus) (\s@GetBranchResponse' {} a -> s {httpStatus = a} :: GetBranchResponse)
+
+-- | Undocumented member.
+getBranchResponse_branch :: Lens.Lens' GetBranchResponse Branch
+getBranchResponse_branch = Lens.lens (\GetBranchResponse' {branch} -> branch) (\s@GetBranchResponse' {} a -> s {branch = a} :: GetBranchResponse)
+
+instance Prelude.NFData GetBranchResponse where
+  rnf GetBranchResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf branch
diff --git a/gen/Amazonka/Amplify/GetDomainAssociation.hs b/gen/Amazonka/Amplify/GetDomainAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/GetDomainAssociation.hs
@@ -0,0 +1,192 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.GetDomainAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the domain information for an Amplify app.
+module Amazonka.Amplify.GetDomainAssociation
+  ( -- * Creating a Request
+    GetDomainAssociation (..),
+    newGetDomainAssociation,
+
+    -- * Request Lenses
+    getDomainAssociation_appId,
+    getDomainAssociation_domainName,
+
+    -- * Destructuring the Response
+    GetDomainAssociationResponse (..),
+    newGetDomainAssociationResponse,
+
+    -- * Response Lenses
+    getDomainAssociationResponse_httpStatus,
+    getDomainAssociationResponse_domainAssociation,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the get domain association request.
+--
+-- /See:/ 'newGetDomainAssociation' smart constructor.
+data GetDomainAssociation = GetDomainAssociation'
+  { -- | The unique id for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDomainAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'getDomainAssociation_appId' - The unique id for an Amplify app.
+--
+-- 'domainName', 'getDomainAssociation_domainName' - The name of the domain.
+newGetDomainAssociation ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'domainName'
+  Prelude.Text ->
+  GetDomainAssociation
+newGetDomainAssociation pAppId_ pDomainName_ =
+  GetDomainAssociation'
+    { appId = pAppId_,
+      domainName = pDomainName_
+    }
+
+-- | The unique id for an Amplify app.
+getDomainAssociation_appId :: Lens.Lens' GetDomainAssociation Prelude.Text
+getDomainAssociation_appId = Lens.lens (\GetDomainAssociation' {appId} -> appId) (\s@GetDomainAssociation' {} a -> s {appId = a} :: GetDomainAssociation)
+
+-- | The name of the domain.
+getDomainAssociation_domainName :: Lens.Lens' GetDomainAssociation Prelude.Text
+getDomainAssociation_domainName = Lens.lens (\GetDomainAssociation' {domainName} -> domainName) (\s@GetDomainAssociation' {} a -> s {domainName = a} :: GetDomainAssociation)
+
+instance Core.AWSRequest GetDomainAssociation where
+  type
+    AWSResponse GetDomainAssociation =
+      GetDomainAssociationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDomainAssociationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "domainAssociation")
+      )
+
+instance Prelude.Hashable GetDomainAssociation where
+  hashWithSalt _salt GetDomainAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData GetDomainAssociation where
+  rnf GetDomainAssociation' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders GetDomainAssociation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDomainAssociation where
+  toPath GetDomainAssociation' {..} =
+    Prelude.mconcat
+      [ "/apps/",
+        Data.toBS appId,
+        "/domains/",
+        Data.toBS domainName
+      ]
+
+instance Data.ToQuery GetDomainAssociation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the get domain association request.
+--
+-- /See:/ 'newGetDomainAssociationResponse' smart constructor.
+data GetDomainAssociationResponse = GetDomainAssociationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Describes the structure of a domain association, which associates a
+    -- custom domain with an Amplify app.
+    domainAssociation :: DomainAssociation
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDomainAssociationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'getDomainAssociationResponse_httpStatus' - The response's http status code.
+--
+-- 'domainAssociation', 'getDomainAssociationResponse_domainAssociation' - Describes the structure of a domain association, which associates a
+-- custom domain with an Amplify app.
+newGetDomainAssociationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'domainAssociation'
+  DomainAssociation ->
+  GetDomainAssociationResponse
+newGetDomainAssociationResponse
+  pHttpStatus_
+  pDomainAssociation_ =
+    GetDomainAssociationResponse'
+      { httpStatus =
+          pHttpStatus_,
+        domainAssociation = pDomainAssociation_
+      }
+
+-- | The response's http status code.
+getDomainAssociationResponse_httpStatus :: Lens.Lens' GetDomainAssociationResponse Prelude.Int
+getDomainAssociationResponse_httpStatus = Lens.lens (\GetDomainAssociationResponse' {httpStatus} -> httpStatus) (\s@GetDomainAssociationResponse' {} a -> s {httpStatus = a} :: GetDomainAssociationResponse)
+
+-- | Describes the structure of a domain association, which associates a
+-- custom domain with an Amplify app.
+getDomainAssociationResponse_domainAssociation :: Lens.Lens' GetDomainAssociationResponse DomainAssociation
+getDomainAssociationResponse_domainAssociation = Lens.lens (\GetDomainAssociationResponse' {domainAssociation} -> domainAssociation) (\s@GetDomainAssociationResponse' {} a -> s {domainAssociation = a} :: GetDomainAssociationResponse)
+
+instance Prelude.NFData GetDomainAssociationResponse where
+  rnf GetDomainAssociationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf domainAssociation
diff --git a/gen/Amazonka/Amplify/GetJob.hs b/gen/Amazonka/Amplify/GetJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/GetJob.hs
@@ -0,0 +1,197 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.GetJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a job for a branch of an Amplify app.
+module Amazonka.Amplify.GetJob
+  ( -- * Creating a Request
+    GetJob (..),
+    newGetJob,
+
+    -- * Request Lenses
+    getJob_appId,
+    getJob_branchName,
+    getJob_jobId,
+
+    -- * Destructuring the Response
+    GetJobResponse (..),
+    newGetJobResponse,
+
+    -- * Response Lenses
+    getJobResponse_httpStatus,
+    getJobResponse_job,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the get job request.
+--
+-- /See:/ 'newGetJob' smart constructor.
+data GetJob = GetJob'
+  { -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The branch name for the job.
+    branchName :: Prelude.Text,
+    -- | The unique ID for the job.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'getJob_appId' - The unique ID for an Amplify app.
+--
+-- 'branchName', 'getJob_branchName' - The branch name for the job.
+--
+-- 'jobId', 'getJob_jobId' - The unique ID for the job.
+newGetJob ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'branchName'
+  Prelude.Text ->
+  -- | 'jobId'
+  Prelude.Text ->
+  GetJob
+newGetJob pAppId_ pBranchName_ pJobId_ =
+  GetJob'
+    { appId = pAppId_,
+      branchName = pBranchName_,
+      jobId = pJobId_
+    }
+
+-- | The unique ID for an Amplify app.
+getJob_appId :: Lens.Lens' GetJob Prelude.Text
+getJob_appId = Lens.lens (\GetJob' {appId} -> appId) (\s@GetJob' {} a -> s {appId = a} :: GetJob)
+
+-- | The branch name for the job.
+getJob_branchName :: Lens.Lens' GetJob Prelude.Text
+getJob_branchName = Lens.lens (\GetJob' {branchName} -> branchName) (\s@GetJob' {} a -> s {branchName = a} :: GetJob)
+
+-- | The unique ID for the job.
+getJob_jobId :: Lens.Lens' GetJob Prelude.Text
+getJob_jobId = Lens.lens (\GetJob' {jobId} -> jobId) (\s@GetJob' {} a -> s {jobId = a} :: GetJob)
+
+instance Core.AWSRequest GetJob where
+  type AWSResponse GetJob = GetJobResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "job")
+      )
+
+instance Prelude.Hashable GetJob where
+  hashWithSalt _salt GetJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` branchName
+      `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData GetJob where
+  rnf GetJob' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf branchName
+      `Prelude.seq` Prelude.rnf jobId
+
+instance Data.ToHeaders GetJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetJob where
+  toPath GetJob' {..} =
+    Prelude.mconcat
+      [ "/apps/",
+        Data.toBS appId,
+        "/branches/",
+        Data.toBS branchName,
+        "/jobs/",
+        Data.toBS jobId
+      ]
+
+instance Data.ToQuery GetJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetJobResponse' smart constructor.
+data GetJobResponse = GetJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    job :: Job
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'getJobResponse_httpStatus' - The response's http status code.
+--
+-- 'job', 'getJobResponse_job' - Undocumented member.
+newGetJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'job'
+  Job ->
+  GetJobResponse
+newGetJobResponse pHttpStatus_ pJob_ =
+  GetJobResponse'
+    { httpStatus = pHttpStatus_,
+      job = pJob_
+    }
+
+-- | The response's http status code.
+getJobResponse_httpStatus :: Lens.Lens' GetJobResponse Prelude.Int
+getJobResponse_httpStatus = Lens.lens (\GetJobResponse' {httpStatus} -> httpStatus) (\s@GetJobResponse' {} a -> s {httpStatus = a} :: GetJobResponse)
+
+-- | Undocumented member.
+getJobResponse_job :: Lens.Lens' GetJobResponse Job
+getJobResponse_job = Lens.lens (\GetJobResponse' {job} -> job) (\s@GetJobResponse' {} a -> s {job = a} :: GetJobResponse)
+
+instance Prelude.NFData GetJobResponse where
+  rnf GetJobResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf job
diff --git a/gen/Amazonka/Amplify/GetWebhook.hs b/gen/Amazonka/Amplify/GetWebhook.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/GetWebhook.hs
@@ -0,0 +1,162 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.GetWebhook
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the webhook information that corresponds to a specified webhook
+-- ID.
+module Amazonka.Amplify.GetWebhook
+  ( -- * Creating a Request
+    GetWebhook (..),
+    newGetWebhook,
+
+    -- * Request Lenses
+    getWebhook_webhookId,
+
+    -- * Destructuring the Response
+    GetWebhookResponse (..),
+    newGetWebhookResponse,
+
+    -- * Response Lenses
+    getWebhookResponse_httpStatus,
+    getWebhookResponse_webhook,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the get webhook request.
+--
+-- /See:/ 'newGetWebhook' smart constructor.
+data GetWebhook = GetWebhook'
+  { -- | The unique ID for a webhook.
+    webhookId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWebhook' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'webhookId', 'getWebhook_webhookId' - The unique ID for a webhook.
+newGetWebhook ::
+  -- | 'webhookId'
+  Prelude.Text ->
+  GetWebhook
+newGetWebhook pWebhookId_ =
+  GetWebhook' {webhookId = pWebhookId_}
+
+-- | The unique ID for a webhook.
+getWebhook_webhookId :: Lens.Lens' GetWebhook Prelude.Text
+getWebhook_webhookId = Lens.lens (\GetWebhook' {webhookId} -> webhookId) (\s@GetWebhook' {} a -> s {webhookId = a} :: GetWebhook)
+
+instance Core.AWSRequest GetWebhook where
+  type AWSResponse GetWebhook = GetWebhookResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetWebhookResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "webhook")
+      )
+
+instance Prelude.Hashable GetWebhook where
+  hashWithSalt _salt GetWebhook' {..} =
+    _salt `Prelude.hashWithSalt` webhookId
+
+instance Prelude.NFData GetWebhook where
+  rnf GetWebhook' {..} = Prelude.rnf webhookId
+
+instance Data.ToHeaders GetWebhook where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetWebhook where
+  toPath GetWebhook' {..} =
+    Prelude.mconcat ["/webhooks/", Data.toBS webhookId]
+
+instance Data.ToQuery GetWebhook where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the get webhook request.
+--
+-- /See:/ 'newGetWebhookResponse' smart constructor.
+data GetWebhookResponse = GetWebhookResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Describes the structure of a webhook.
+    webhook :: Webhook
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWebhookResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'getWebhookResponse_httpStatus' - The response's http status code.
+--
+-- 'webhook', 'getWebhookResponse_webhook' - Describes the structure of a webhook.
+newGetWebhookResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'webhook'
+  Webhook ->
+  GetWebhookResponse
+newGetWebhookResponse pHttpStatus_ pWebhook_ =
+  GetWebhookResponse'
+    { httpStatus = pHttpStatus_,
+      webhook = pWebhook_
+    }
+
+-- | The response's http status code.
+getWebhookResponse_httpStatus :: Lens.Lens' GetWebhookResponse Prelude.Int
+getWebhookResponse_httpStatus = Lens.lens (\GetWebhookResponse' {httpStatus} -> httpStatus) (\s@GetWebhookResponse' {} a -> s {httpStatus = a} :: GetWebhookResponse)
+
+-- | Describes the structure of a webhook.
+getWebhookResponse_webhook :: Lens.Lens' GetWebhookResponse Webhook
+getWebhookResponse_webhook = Lens.lens (\GetWebhookResponse' {webhook} -> webhook) (\s@GetWebhookResponse' {} a -> s {webhook = a} :: GetWebhookResponse)
+
+instance Prelude.NFData GetWebhookResponse where
+  rnf GetWebhookResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf webhook
diff --git a/gen/Amazonka/Amplify/Lens.hs b/gen/Amazonka/Amplify/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Lens.hs
@@ -0,0 +1,544 @@
+{-# 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.Amplify.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.Amplify.Lens
+  ( -- * Operations
+
+    -- ** CreateApp
+    createApp_accessToken,
+    createApp_autoBranchCreationConfig,
+    createApp_autoBranchCreationPatterns,
+    createApp_basicAuthCredentials,
+    createApp_buildSpec,
+    createApp_customHeaders,
+    createApp_customRules,
+    createApp_description,
+    createApp_enableAutoBranchCreation,
+    createApp_enableBasicAuth,
+    createApp_enableBranchAutoBuild,
+    createApp_enableBranchAutoDeletion,
+    createApp_environmentVariables,
+    createApp_iamServiceRoleArn,
+    createApp_oauthToken,
+    createApp_platform,
+    createApp_repository,
+    createApp_tags,
+    createApp_name,
+    createAppResponse_httpStatus,
+    createAppResponse_app,
+
+    -- ** CreateBackendEnvironment
+    createBackendEnvironment_deploymentArtifacts,
+    createBackendEnvironment_stackName,
+    createBackendEnvironment_appId,
+    createBackendEnvironment_environmentName,
+    createBackendEnvironmentResponse_httpStatus,
+    createBackendEnvironmentResponse_backendEnvironment,
+
+    -- ** CreateBranch
+    createBranch_backendEnvironmentArn,
+    createBranch_basicAuthCredentials,
+    createBranch_buildSpec,
+    createBranch_description,
+    createBranch_displayName,
+    createBranch_enableAutoBuild,
+    createBranch_enableBasicAuth,
+    createBranch_enableNotification,
+    createBranch_enablePerformanceMode,
+    createBranch_enablePullRequestPreview,
+    createBranch_environmentVariables,
+    createBranch_framework,
+    createBranch_pullRequestEnvironmentName,
+    createBranch_stage,
+    createBranch_tags,
+    createBranch_ttl,
+    createBranch_appId,
+    createBranch_branchName,
+    createBranchResponse_httpStatus,
+    createBranchResponse_branch,
+
+    -- ** CreateDeployment
+    createDeployment_fileMap,
+    createDeployment_appId,
+    createDeployment_branchName,
+    createDeploymentResponse_jobId,
+    createDeploymentResponse_httpStatus,
+    createDeploymentResponse_fileUploadUrls,
+    createDeploymentResponse_zipUploadUrl,
+
+    -- ** CreateDomainAssociation
+    createDomainAssociation_autoSubDomainCreationPatterns,
+    createDomainAssociation_autoSubDomainIAMRole,
+    createDomainAssociation_enableAutoSubDomain,
+    createDomainAssociation_appId,
+    createDomainAssociation_domainName,
+    createDomainAssociation_subDomainSettings,
+    createDomainAssociationResponse_httpStatus,
+    createDomainAssociationResponse_domainAssociation,
+
+    -- ** CreateWebhook
+    createWebhook_description,
+    createWebhook_appId,
+    createWebhook_branchName,
+    createWebhookResponse_httpStatus,
+    createWebhookResponse_webhook,
+
+    -- ** DeleteApp
+    deleteApp_appId,
+    deleteAppResponse_httpStatus,
+    deleteAppResponse_app,
+
+    -- ** DeleteBackendEnvironment
+    deleteBackendEnvironment_appId,
+    deleteBackendEnvironment_environmentName,
+    deleteBackendEnvironmentResponse_httpStatus,
+    deleteBackendEnvironmentResponse_backendEnvironment,
+
+    -- ** DeleteBranch
+    deleteBranch_appId,
+    deleteBranch_branchName,
+    deleteBranchResponse_httpStatus,
+    deleteBranchResponse_branch,
+
+    -- ** DeleteDomainAssociation
+    deleteDomainAssociation_appId,
+    deleteDomainAssociation_domainName,
+    deleteDomainAssociationResponse_httpStatus,
+    deleteDomainAssociationResponse_domainAssociation,
+
+    -- ** DeleteJob
+    deleteJob_appId,
+    deleteJob_branchName,
+    deleteJob_jobId,
+    deleteJobResponse_httpStatus,
+    deleteJobResponse_jobSummary,
+
+    -- ** DeleteWebhook
+    deleteWebhook_webhookId,
+    deleteWebhookResponse_httpStatus,
+    deleteWebhookResponse_webhook,
+
+    -- ** GenerateAccessLogs
+    generateAccessLogs_endTime,
+    generateAccessLogs_startTime,
+    generateAccessLogs_domainName,
+    generateAccessLogs_appId,
+    generateAccessLogsResponse_logUrl,
+    generateAccessLogsResponse_httpStatus,
+
+    -- ** GetApp
+    getApp_appId,
+    getAppResponse_httpStatus,
+    getAppResponse_app,
+
+    -- ** GetArtifactUrl
+    getArtifactUrl_artifactId,
+    getArtifactUrlResponse_httpStatus,
+    getArtifactUrlResponse_artifactId,
+    getArtifactUrlResponse_artifactUrl,
+
+    -- ** GetBackendEnvironment
+    getBackendEnvironment_appId,
+    getBackendEnvironment_environmentName,
+    getBackendEnvironmentResponse_httpStatus,
+    getBackendEnvironmentResponse_backendEnvironment,
+
+    -- ** GetBranch
+    getBranch_appId,
+    getBranch_branchName,
+    getBranchResponse_httpStatus,
+    getBranchResponse_branch,
+
+    -- ** GetDomainAssociation
+    getDomainAssociation_appId,
+    getDomainAssociation_domainName,
+    getDomainAssociationResponse_httpStatus,
+    getDomainAssociationResponse_domainAssociation,
+
+    -- ** GetJob
+    getJob_appId,
+    getJob_branchName,
+    getJob_jobId,
+    getJobResponse_httpStatus,
+    getJobResponse_job,
+
+    -- ** GetWebhook
+    getWebhook_webhookId,
+    getWebhookResponse_httpStatus,
+    getWebhookResponse_webhook,
+
+    -- ** ListApps
+    listApps_maxResults,
+    listApps_nextToken,
+    listAppsResponse_nextToken,
+    listAppsResponse_httpStatus,
+    listAppsResponse_apps,
+
+    -- ** ListArtifacts
+    listArtifacts_maxResults,
+    listArtifacts_nextToken,
+    listArtifacts_appId,
+    listArtifacts_branchName,
+    listArtifacts_jobId,
+    listArtifactsResponse_nextToken,
+    listArtifactsResponse_httpStatus,
+    listArtifactsResponse_artifacts,
+
+    -- ** ListBackendEnvironments
+    listBackendEnvironments_environmentName,
+    listBackendEnvironments_maxResults,
+    listBackendEnvironments_nextToken,
+    listBackendEnvironments_appId,
+    listBackendEnvironmentsResponse_nextToken,
+    listBackendEnvironmentsResponse_httpStatus,
+    listBackendEnvironmentsResponse_backendEnvironments,
+
+    -- ** ListBranches
+    listBranches_maxResults,
+    listBranches_nextToken,
+    listBranches_appId,
+    listBranchesResponse_nextToken,
+    listBranchesResponse_httpStatus,
+    listBranchesResponse_branches,
+
+    -- ** ListDomainAssociations
+    listDomainAssociations_maxResults,
+    listDomainAssociations_nextToken,
+    listDomainAssociations_appId,
+    listDomainAssociationsResponse_nextToken,
+    listDomainAssociationsResponse_httpStatus,
+    listDomainAssociationsResponse_domainAssociations,
+
+    -- ** ListJobs
+    listJobs_maxResults,
+    listJobs_nextToken,
+    listJobs_appId,
+    listJobs_branchName,
+    listJobsResponse_nextToken,
+    listJobsResponse_httpStatus,
+    listJobsResponse_jobSummaries,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ListWebhooks
+    listWebhooks_maxResults,
+    listWebhooks_nextToken,
+    listWebhooks_appId,
+    listWebhooksResponse_nextToken,
+    listWebhooksResponse_httpStatus,
+    listWebhooksResponse_webhooks,
+
+    -- ** StartDeployment
+    startDeployment_jobId,
+    startDeployment_sourceUrl,
+    startDeployment_appId,
+    startDeployment_branchName,
+    startDeploymentResponse_httpStatus,
+    startDeploymentResponse_jobSummary,
+
+    -- ** StartJob
+    startJob_commitId,
+    startJob_commitMessage,
+    startJob_commitTime,
+    startJob_jobId,
+    startJob_jobReason,
+    startJob_appId,
+    startJob_branchName,
+    startJob_jobType,
+    startJobResponse_httpStatus,
+    startJobResponse_jobSummary,
+
+    -- ** StopJob
+    stopJob_appId,
+    stopJob_branchName,
+    stopJob_jobId,
+    stopJobResponse_httpStatus,
+    stopJobResponse_jobSummary,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateApp
+    updateApp_accessToken,
+    updateApp_autoBranchCreationConfig,
+    updateApp_autoBranchCreationPatterns,
+    updateApp_basicAuthCredentials,
+    updateApp_buildSpec,
+    updateApp_customHeaders,
+    updateApp_customRules,
+    updateApp_description,
+    updateApp_enableAutoBranchCreation,
+    updateApp_enableBasicAuth,
+    updateApp_enableBranchAutoBuild,
+    updateApp_enableBranchAutoDeletion,
+    updateApp_environmentVariables,
+    updateApp_iamServiceRoleArn,
+    updateApp_name,
+    updateApp_oauthToken,
+    updateApp_platform,
+    updateApp_repository,
+    updateApp_appId,
+    updateAppResponse_httpStatus,
+    updateAppResponse_app,
+
+    -- ** UpdateBranch
+    updateBranch_backendEnvironmentArn,
+    updateBranch_basicAuthCredentials,
+    updateBranch_buildSpec,
+    updateBranch_description,
+    updateBranch_displayName,
+    updateBranch_enableAutoBuild,
+    updateBranch_enableBasicAuth,
+    updateBranch_enableNotification,
+    updateBranch_enablePerformanceMode,
+    updateBranch_enablePullRequestPreview,
+    updateBranch_environmentVariables,
+    updateBranch_framework,
+    updateBranch_pullRequestEnvironmentName,
+    updateBranch_stage,
+    updateBranch_ttl,
+    updateBranch_appId,
+    updateBranch_branchName,
+    updateBranchResponse_httpStatus,
+    updateBranchResponse_branch,
+
+    -- ** UpdateDomainAssociation
+    updateDomainAssociation_autoSubDomainCreationPatterns,
+    updateDomainAssociation_autoSubDomainIAMRole,
+    updateDomainAssociation_enableAutoSubDomain,
+    updateDomainAssociation_subDomainSettings,
+    updateDomainAssociation_appId,
+    updateDomainAssociation_domainName,
+    updateDomainAssociationResponse_httpStatus,
+    updateDomainAssociationResponse_domainAssociation,
+
+    -- ** UpdateWebhook
+    updateWebhook_branchName,
+    updateWebhook_description,
+    updateWebhook_webhookId,
+    updateWebhookResponse_httpStatus,
+    updateWebhookResponse_webhook,
+
+    -- * Types
+
+    -- ** App
+    app_autoBranchCreationConfig,
+    app_autoBranchCreationPatterns,
+    app_basicAuthCredentials,
+    app_buildSpec,
+    app_customHeaders,
+    app_customRules,
+    app_enableAutoBranchCreation,
+    app_enableBranchAutoDeletion,
+    app_iamServiceRoleArn,
+    app_productionBranch,
+    app_repositoryCloneMethod,
+    app_tags,
+    app_appId,
+    app_appArn,
+    app_name,
+    app_description,
+    app_repository,
+    app_platform,
+    app_createTime,
+    app_updateTime,
+    app_environmentVariables,
+    app_defaultDomain,
+    app_enableBranchAutoBuild,
+    app_enableBasicAuth,
+
+    -- ** Artifact
+    artifact_artifactFileName,
+    artifact_artifactId,
+
+    -- ** AutoBranchCreationConfig
+    autoBranchCreationConfig_basicAuthCredentials,
+    autoBranchCreationConfig_buildSpec,
+    autoBranchCreationConfig_enableAutoBuild,
+    autoBranchCreationConfig_enableBasicAuth,
+    autoBranchCreationConfig_enablePerformanceMode,
+    autoBranchCreationConfig_enablePullRequestPreview,
+    autoBranchCreationConfig_environmentVariables,
+    autoBranchCreationConfig_framework,
+    autoBranchCreationConfig_pullRequestEnvironmentName,
+    autoBranchCreationConfig_stage,
+
+    -- ** BackendEnvironment
+    backendEnvironment_deploymentArtifacts,
+    backendEnvironment_stackName,
+    backendEnvironment_backendEnvironmentArn,
+    backendEnvironment_environmentName,
+    backendEnvironment_createTime,
+    backendEnvironment_updateTime,
+
+    -- ** Branch
+    branch_associatedResources,
+    branch_backendEnvironmentArn,
+    branch_basicAuthCredentials,
+    branch_buildSpec,
+    branch_destinationBranch,
+    branch_enablePerformanceMode,
+    branch_pullRequestEnvironmentName,
+    branch_sourceBranch,
+    branch_tags,
+    branch_thumbnailUrl,
+    branch_branchArn,
+    branch_branchName,
+    branch_description,
+    branch_stage,
+    branch_displayName,
+    branch_enableNotification,
+    branch_createTime,
+    branch_updateTime,
+    branch_environmentVariables,
+    branch_enableAutoBuild,
+    branch_customDomains,
+    branch_framework,
+    branch_activeJobId,
+    branch_totalNumberOfJobs,
+    branch_enableBasicAuth,
+    branch_ttl,
+    branch_enablePullRequestPreview,
+
+    -- ** CustomRule
+    customRule_condition,
+    customRule_status,
+    customRule_source,
+    customRule_target,
+
+    -- ** DomainAssociation
+    domainAssociation_autoSubDomainCreationPatterns,
+    domainAssociation_autoSubDomainIAMRole,
+    domainAssociation_certificateVerificationDNSRecord,
+    domainAssociation_domainAssociationArn,
+    domainAssociation_domainName,
+    domainAssociation_enableAutoSubDomain,
+    domainAssociation_domainStatus,
+    domainAssociation_statusReason,
+    domainAssociation_subDomains,
+
+    -- ** Job
+    job_summary,
+    job_steps,
+
+    -- ** JobSummary
+    jobSummary_endTime,
+    jobSummary_jobArn,
+    jobSummary_jobId,
+    jobSummary_commitId,
+    jobSummary_commitMessage,
+    jobSummary_commitTime,
+    jobSummary_startTime,
+    jobSummary_status,
+    jobSummary_jobType,
+
+    -- ** ProductionBranch
+    productionBranch_branchName,
+    productionBranch_lastDeployTime,
+    productionBranch_status,
+    productionBranch_thumbnailUrl,
+
+    -- ** Step
+    step_artifactsUrl,
+    step_context,
+    step_logUrl,
+    step_screenshots,
+    step_statusReason,
+    step_testArtifactsUrl,
+    step_testConfigUrl,
+    step_stepName,
+    step_startTime,
+    step_status,
+    step_endTime,
+
+    -- ** SubDomain
+    subDomain_subDomainSetting,
+    subDomain_verified,
+    subDomain_dnsRecord,
+
+    -- ** SubDomainSetting
+    subDomainSetting_prefix,
+    subDomainSetting_branchName,
+
+    -- ** Webhook
+    webhook_webhookArn,
+    webhook_webhookId,
+    webhook_webhookUrl,
+    webhook_branchName,
+    webhook_description,
+    webhook_createTime,
+    webhook_updateTime,
+  )
+where
+
+import Amazonka.Amplify.CreateApp
+import Amazonka.Amplify.CreateBackendEnvironment
+import Amazonka.Amplify.CreateBranch
+import Amazonka.Amplify.CreateDeployment
+import Amazonka.Amplify.CreateDomainAssociation
+import Amazonka.Amplify.CreateWebhook
+import Amazonka.Amplify.DeleteApp
+import Amazonka.Amplify.DeleteBackendEnvironment
+import Amazonka.Amplify.DeleteBranch
+import Amazonka.Amplify.DeleteDomainAssociation
+import Amazonka.Amplify.DeleteJob
+import Amazonka.Amplify.DeleteWebhook
+import Amazonka.Amplify.GenerateAccessLogs
+import Amazonka.Amplify.GetApp
+import Amazonka.Amplify.GetArtifactUrl
+import Amazonka.Amplify.GetBackendEnvironment
+import Amazonka.Amplify.GetBranch
+import Amazonka.Amplify.GetDomainAssociation
+import Amazonka.Amplify.GetJob
+import Amazonka.Amplify.GetWebhook
+import Amazonka.Amplify.ListApps
+import Amazonka.Amplify.ListArtifacts
+import Amazonka.Amplify.ListBackendEnvironments
+import Amazonka.Amplify.ListBranches
+import Amazonka.Amplify.ListDomainAssociations
+import Amazonka.Amplify.ListJobs
+import Amazonka.Amplify.ListTagsForResource
+import Amazonka.Amplify.ListWebhooks
+import Amazonka.Amplify.StartDeployment
+import Amazonka.Amplify.StartJob
+import Amazonka.Amplify.StopJob
+import Amazonka.Amplify.TagResource
+import Amazonka.Amplify.Types.App
+import Amazonka.Amplify.Types.Artifact
+import Amazonka.Amplify.Types.AutoBranchCreationConfig
+import Amazonka.Amplify.Types.BackendEnvironment
+import Amazonka.Amplify.Types.Branch
+import Amazonka.Amplify.Types.CustomRule
+import Amazonka.Amplify.Types.DomainAssociation
+import Amazonka.Amplify.Types.Job
+import Amazonka.Amplify.Types.JobSummary
+import Amazonka.Amplify.Types.ProductionBranch
+import Amazonka.Amplify.Types.Step
+import Amazonka.Amplify.Types.SubDomain
+import Amazonka.Amplify.Types.SubDomainSetting
+import Amazonka.Amplify.Types.Webhook
+import Amazonka.Amplify.UntagResource
+import Amazonka.Amplify.UpdateApp
+import Amazonka.Amplify.UpdateBranch
+import Amazonka.Amplify.UpdateDomainAssociation
+import Amazonka.Amplify.UpdateWebhook
diff --git a/gen/Amazonka/Amplify/ListApps.hs b/gen/Amazonka/Amplify/ListApps.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/ListApps.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.ListApps
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of the existing Amplify apps.
+--
+-- This operation returns paginated results.
+module Amazonka.Amplify.ListApps
+  ( -- * Creating a Request
+    ListApps (..),
+    newListApps,
+
+    -- * Request Lenses
+    listApps_maxResults,
+    listApps_nextToken,
+
+    -- * Destructuring the Response
+    ListAppsResponse (..),
+    newListAppsResponse,
+
+    -- * Response Lenses
+    listAppsResponse_nextToken,
+    listAppsResponse_httpStatus,
+    listAppsResponse_apps,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the list apps request.
+--
+-- /See:/ 'newListApps' smart constructor.
+data ListApps = ListApps'
+  { -- | The maximum number of records to list in a single response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token. If non-null, the pagination token is returned in a
+    -- result. Pass its value in another request to retrieve more entries.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListApps' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listApps_maxResults' - The maximum number of records to list in a single response.
+--
+-- 'nextToken', 'listApps_nextToken' - A pagination token. If non-null, the pagination token is returned in a
+-- result. Pass its value in another request to retrieve more entries.
+newListApps ::
+  ListApps
+newListApps =
+  ListApps'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of records to list in a single response.
+listApps_maxResults :: Lens.Lens' ListApps (Prelude.Maybe Prelude.Natural)
+listApps_maxResults = Lens.lens (\ListApps' {maxResults} -> maxResults) (\s@ListApps' {} a -> s {maxResults = a} :: ListApps)
+
+-- | A pagination token. If non-null, the pagination token is returned in a
+-- result. Pass its value in another request to retrieve more entries.
+listApps_nextToken :: Lens.Lens' ListApps (Prelude.Maybe Prelude.Text)
+listApps_nextToken = Lens.lens (\ListApps' {nextToken} -> nextToken) (\s@ListApps' {} a -> s {nextToken = a} :: ListApps)
+
+instance Core.AWSPager ListApps where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAppsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop (rs Lens.^. listAppsResponse_apps) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listApps_nextToken
+          Lens..~ rs
+          Lens.^? listAppsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListApps where
+  type AWSResponse ListApps = ListAppsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAppsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "apps" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListApps where
+  hashWithSalt _salt ListApps' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListApps where
+  rnf ListApps' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListApps where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListApps where
+  toPath = Prelude.const "/apps"
+
+instance Data.ToQuery ListApps where
+  toQuery ListApps' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | The result structure for an Amplify app list request.
+--
+-- /See:/ 'newListAppsResponse' smart constructor.
+data ListAppsResponse = ListAppsResponse'
+  { -- | A pagination token. Set to null to start listing apps from start. If
+    -- non-null, the pagination token is returned in a result. Pass its value
+    -- in here to list more projects.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of Amplify apps.
+    apps :: [App]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listAppsResponse_nextToken' - A pagination token. Set to null to start listing apps from start. If
+-- non-null, the pagination token is returned in a result. Pass its value
+-- in here to list more projects.
+--
+-- 'httpStatus', 'listAppsResponse_httpStatus' - The response's http status code.
+--
+-- 'apps', 'listAppsResponse_apps' - A list of Amplify apps.
+newListAppsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAppsResponse
+newListAppsResponse pHttpStatus_ =
+  ListAppsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      apps = Prelude.mempty
+    }
+
+-- | A pagination token. Set to null to start listing apps from start. If
+-- non-null, the pagination token is returned in a result. Pass its value
+-- in here to list more projects.
+listAppsResponse_nextToken :: Lens.Lens' ListAppsResponse (Prelude.Maybe Prelude.Text)
+listAppsResponse_nextToken = Lens.lens (\ListAppsResponse' {nextToken} -> nextToken) (\s@ListAppsResponse' {} a -> s {nextToken = a} :: ListAppsResponse)
+
+-- | The response's http status code.
+listAppsResponse_httpStatus :: Lens.Lens' ListAppsResponse Prelude.Int
+listAppsResponse_httpStatus = Lens.lens (\ListAppsResponse' {httpStatus} -> httpStatus) (\s@ListAppsResponse' {} a -> s {httpStatus = a} :: ListAppsResponse)
+
+-- | A list of Amplify apps.
+listAppsResponse_apps :: Lens.Lens' ListAppsResponse [App]
+listAppsResponse_apps = Lens.lens (\ListAppsResponse' {apps} -> apps) (\s@ListAppsResponse' {} a -> s {apps = a} :: ListAppsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListAppsResponse where
+  rnf ListAppsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf apps
diff --git a/gen/Amazonka/Amplify/ListArtifacts.hs b/gen/Amazonka/Amplify/ListArtifacts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/ListArtifacts.hs
@@ -0,0 +1,250 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.ListArtifacts
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of artifacts for a specified app, branch, and job.
+module Amazonka.Amplify.ListArtifacts
+  ( -- * Creating a Request
+    ListArtifacts (..),
+    newListArtifacts,
+
+    -- * Request Lenses
+    listArtifacts_maxResults,
+    listArtifacts_nextToken,
+    listArtifacts_appId,
+    listArtifacts_branchName,
+    listArtifacts_jobId,
+
+    -- * Destructuring the Response
+    ListArtifactsResponse (..),
+    newListArtifactsResponse,
+
+    -- * Response Lenses
+    listArtifactsResponse_nextToken,
+    listArtifactsResponse_httpStatus,
+    listArtifactsResponse_artifacts,
+  )
+where
+
+import Amazonka.Amplify.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
+
+-- | Describes the request structure for the list artifacts request.
+--
+-- /See:/ 'newListArtifacts' smart constructor.
+data ListArtifacts = ListArtifacts'
+  { -- | The maximum number of records to list in a single response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token. Set to null to start listing artifacts from start.
+    -- If a non-null pagination token is returned in a result, pass its value
+    -- in here to list more artifacts.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The name of a branch that is part of an Amplify app.
+    branchName :: Prelude.Text,
+    -- | The unique ID for a job.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListArtifacts' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listArtifacts_maxResults' - The maximum number of records to list in a single response.
+--
+-- 'nextToken', 'listArtifacts_nextToken' - A pagination token. Set to null to start listing artifacts from start.
+-- If a non-null pagination token is returned in a result, pass its value
+-- in here to list more artifacts.
+--
+-- 'appId', 'listArtifacts_appId' - The unique ID for an Amplify app.
+--
+-- 'branchName', 'listArtifacts_branchName' - The name of a branch that is part of an Amplify app.
+--
+-- 'jobId', 'listArtifacts_jobId' - The unique ID for a job.
+newListArtifacts ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'branchName'
+  Prelude.Text ->
+  -- | 'jobId'
+  Prelude.Text ->
+  ListArtifacts
+newListArtifacts pAppId_ pBranchName_ pJobId_ =
+  ListArtifacts'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      appId = pAppId_,
+      branchName = pBranchName_,
+      jobId = pJobId_
+    }
+
+-- | The maximum number of records to list in a single response.
+listArtifacts_maxResults :: Lens.Lens' ListArtifacts (Prelude.Maybe Prelude.Natural)
+listArtifacts_maxResults = Lens.lens (\ListArtifacts' {maxResults} -> maxResults) (\s@ListArtifacts' {} a -> s {maxResults = a} :: ListArtifacts)
+
+-- | A pagination token. Set to null to start listing artifacts from start.
+-- If a non-null pagination token is returned in a result, pass its value
+-- in here to list more artifacts.
+listArtifacts_nextToken :: Lens.Lens' ListArtifacts (Prelude.Maybe Prelude.Text)
+listArtifacts_nextToken = Lens.lens (\ListArtifacts' {nextToken} -> nextToken) (\s@ListArtifacts' {} a -> s {nextToken = a} :: ListArtifacts)
+
+-- | The unique ID for an Amplify app.
+listArtifacts_appId :: Lens.Lens' ListArtifacts Prelude.Text
+listArtifacts_appId = Lens.lens (\ListArtifacts' {appId} -> appId) (\s@ListArtifacts' {} a -> s {appId = a} :: ListArtifacts)
+
+-- | The name of a branch that is part of an Amplify app.
+listArtifacts_branchName :: Lens.Lens' ListArtifacts Prelude.Text
+listArtifacts_branchName = Lens.lens (\ListArtifacts' {branchName} -> branchName) (\s@ListArtifacts' {} a -> s {branchName = a} :: ListArtifacts)
+
+-- | The unique ID for a job.
+listArtifacts_jobId :: Lens.Lens' ListArtifacts Prelude.Text
+listArtifacts_jobId = Lens.lens (\ListArtifacts' {jobId} -> jobId) (\s@ListArtifacts' {} a -> s {jobId = a} :: ListArtifacts)
+
+instance Core.AWSRequest ListArtifacts where
+  type
+    AWSResponse ListArtifacts =
+      ListArtifactsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListArtifactsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "artifacts" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListArtifacts where
+  hashWithSalt _salt ListArtifacts' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` branchName
+      `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData ListArtifacts where
+  rnf ListArtifacts' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf branchName
+      `Prelude.seq` Prelude.rnf jobId
+
+instance Data.ToHeaders ListArtifacts where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListArtifacts where
+  toPath ListArtifacts' {..} =
+    Prelude.mconcat
+      [ "/apps/",
+        Data.toBS appId,
+        "/branches/",
+        Data.toBS branchName,
+        "/jobs/",
+        Data.toBS jobId,
+        "/artifacts"
+      ]
+
+instance Data.ToQuery ListArtifacts where
+  toQuery ListArtifacts' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | The result structure for the list artifacts request.
+--
+-- /See:/ 'newListArtifactsResponse' smart constructor.
+data ListArtifactsResponse = ListArtifactsResponse'
+  { -- | A pagination token. If a non-null pagination token is returned in a
+    -- result, pass its value in another request to retrieve more entries.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of artifacts.
+    artifacts :: [Artifact]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListArtifactsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listArtifactsResponse_nextToken' - A pagination token. If a non-null pagination token is returned in a
+-- result, pass its value in another request to retrieve more entries.
+--
+-- 'httpStatus', 'listArtifactsResponse_httpStatus' - The response's http status code.
+--
+-- 'artifacts', 'listArtifactsResponse_artifacts' - A list of artifacts.
+newListArtifactsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListArtifactsResponse
+newListArtifactsResponse pHttpStatus_ =
+  ListArtifactsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      artifacts = Prelude.mempty
+    }
+
+-- | A pagination token. If a non-null pagination token is returned in a
+-- result, pass its value in another request to retrieve more entries.
+listArtifactsResponse_nextToken :: Lens.Lens' ListArtifactsResponse (Prelude.Maybe Prelude.Text)
+listArtifactsResponse_nextToken = Lens.lens (\ListArtifactsResponse' {nextToken} -> nextToken) (\s@ListArtifactsResponse' {} a -> s {nextToken = a} :: ListArtifactsResponse)
+
+-- | The response's http status code.
+listArtifactsResponse_httpStatus :: Lens.Lens' ListArtifactsResponse Prelude.Int
+listArtifactsResponse_httpStatus = Lens.lens (\ListArtifactsResponse' {httpStatus} -> httpStatus) (\s@ListArtifactsResponse' {} a -> s {httpStatus = a} :: ListArtifactsResponse)
+
+-- | A list of artifacts.
+listArtifactsResponse_artifacts :: Lens.Lens' ListArtifactsResponse [Artifact]
+listArtifactsResponse_artifacts = Lens.lens (\ListArtifactsResponse' {artifacts} -> artifacts) (\s@ListArtifactsResponse' {} a -> s {artifacts = a} :: ListArtifactsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListArtifactsResponse where
+  rnf ListArtifactsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf artifacts
diff --git a/gen/Amazonka/Amplify/ListBackendEnvironments.hs b/gen/Amazonka/Amplify/ListBackendEnvironments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/ListBackendEnvironments.hs
@@ -0,0 +1,236 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.ListBackendEnvironments
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the backend environments for an Amplify app.
+module Amazonka.Amplify.ListBackendEnvironments
+  ( -- * Creating a Request
+    ListBackendEnvironments (..),
+    newListBackendEnvironments,
+
+    -- * Request Lenses
+    listBackendEnvironments_environmentName,
+    listBackendEnvironments_maxResults,
+    listBackendEnvironments_nextToken,
+    listBackendEnvironments_appId,
+
+    -- * Destructuring the Response
+    ListBackendEnvironmentsResponse (..),
+    newListBackendEnvironmentsResponse,
+
+    -- * Response Lenses
+    listBackendEnvironmentsResponse_nextToken,
+    listBackendEnvironmentsResponse_httpStatus,
+    listBackendEnvironmentsResponse_backendEnvironments,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the list backend environments request.
+--
+-- /See:/ 'newListBackendEnvironments' smart constructor.
+data ListBackendEnvironments = ListBackendEnvironments'
+  { -- | The name of the backend environment
+    environmentName :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of records to list in a single response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token. Set to null to start listing backend environments
+    -- from the start. If a non-null pagination token is returned in a result,
+    -- pass its value in here to list more backend environments.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBackendEnvironments' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'environmentName', 'listBackendEnvironments_environmentName' - The name of the backend environment
+--
+-- 'maxResults', 'listBackendEnvironments_maxResults' - The maximum number of records to list in a single response.
+--
+-- 'nextToken', 'listBackendEnvironments_nextToken' - A pagination token. Set to null to start listing backend environments
+-- from the start. If a non-null pagination token is returned in a result,
+-- pass its value in here to list more backend environments.
+--
+-- 'appId', 'listBackendEnvironments_appId' - The unique ID for an Amplify app.
+newListBackendEnvironments ::
+  -- | 'appId'
+  Prelude.Text ->
+  ListBackendEnvironments
+newListBackendEnvironments pAppId_ =
+  ListBackendEnvironments'
+    { environmentName =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      appId = pAppId_
+    }
+
+-- | The name of the backend environment
+listBackendEnvironments_environmentName :: Lens.Lens' ListBackendEnvironments (Prelude.Maybe Prelude.Text)
+listBackendEnvironments_environmentName = Lens.lens (\ListBackendEnvironments' {environmentName} -> environmentName) (\s@ListBackendEnvironments' {} a -> s {environmentName = a} :: ListBackendEnvironments)
+
+-- | The maximum number of records to list in a single response.
+listBackendEnvironments_maxResults :: Lens.Lens' ListBackendEnvironments (Prelude.Maybe Prelude.Natural)
+listBackendEnvironments_maxResults = Lens.lens (\ListBackendEnvironments' {maxResults} -> maxResults) (\s@ListBackendEnvironments' {} a -> s {maxResults = a} :: ListBackendEnvironments)
+
+-- | A pagination token. Set to null to start listing backend environments
+-- from the start. If a non-null pagination token is returned in a result,
+-- pass its value in here to list more backend environments.
+listBackendEnvironments_nextToken :: Lens.Lens' ListBackendEnvironments (Prelude.Maybe Prelude.Text)
+listBackendEnvironments_nextToken = Lens.lens (\ListBackendEnvironments' {nextToken} -> nextToken) (\s@ListBackendEnvironments' {} a -> s {nextToken = a} :: ListBackendEnvironments)
+
+-- | The unique ID for an Amplify app.
+listBackendEnvironments_appId :: Lens.Lens' ListBackendEnvironments Prelude.Text
+listBackendEnvironments_appId = Lens.lens (\ListBackendEnvironments' {appId} -> appId) (\s@ListBackendEnvironments' {} a -> s {appId = a} :: ListBackendEnvironments)
+
+instance Core.AWSRequest ListBackendEnvironments where
+  type
+    AWSResponse ListBackendEnvironments =
+      ListBackendEnvironmentsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListBackendEnvironmentsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "backendEnvironments"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListBackendEnvironments where
+  hashWithSalt _salt ListBackendEnvironments' {..} =
+    _salt
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData ListBackendEnvironments where
+  rnf ListBackendEnvironments' {..} =
+    Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf appId
+
+instance Data.ToHeaders ListBackendEnvironments where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListBackendEnvironments where
+  toPath ListBackendEnvironments' {..} =
+    Prelude.mconcat
+      ["/apps/", Data.toBS appId, "/backendenvironments"]
+
+instance Data.ToQuery ListBackendEnvironments where
+  toQuery ListBackendEnvironments' {..} =
+    Prelude.mconcat
+      [ "environmentName" Data.=: environmentName,
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | The result structure for the list backend environments result.
+--
+-- /See:/ 'newListBackendEnvironmentsResponse' smart constructor.
+data ListBackendEnvironmentsResponse = ListBackendEnvironmentsResponse'
+  { -- | A pagination token. If a non-null pagination token is returned in a
+    -- result, pass its value in another request to retrieve more entries.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The list of backend environments for an Amplify app.
+    backendEnvironments :: [BackendEnvironment]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBackendEnvironmentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listBackendEnvironmentsResponse_nextToken' - A pagination token. If a non-null pagination token is returned in a
+-- result, pass its value in another request to retrieve more entries.
+--
+-- 'httpStatus', 'listBackendEnvironmentsResponse_httpStatus' - The response's http status code.
+--
+-- 'backendEnvironments', 'listBackendEnvironmentsResponse_backendEnvironments' - The list of backend environments for an Amplify app.
+newListBackendEnvironmentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListBackendEnvironmentsResponse
+newListBackendEnvironmentsResponse pHttpStatus_ =
+  ListBackendEnvironmentsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      backendEnvironments = Prelude.mempty
+    }
+
+-- | A pagination token. If a non-null pagination token is returned in a
+-- result, pass its value in another request to retrieve more entries.
+listBackendEnvironmentsResponse_nextToken :: Lens.Lens' ListBackendEnvironmentsResponse (Prelude.Maybe Prelude.Text)
+listBackendEnvironmentsResponse_nextToken = Lens.lens (\ListBackendEnvironmentsResponse' {nextToken} -> nextToken) (\s@ListBackendEnvironmentsResponse' {} a -> s {nextToken = a} :: ListBackendEnvironmentsResponse)
+
+-- | The response's http status code.
+listBackendEnvironmentsResponse_httpStatus :: Lens.Lens' ListBackendEnvironmentsResponse Prelude.Int
+listBackendEnvironmentsResponse_httpStatus = Lens.lens (\ListBackendEnvironmentsResponse' {httpStatus} -> httpStatus) (\s@ListBackendEnvironmentsResponse' {} a -> s {httpStatus = a} :: ListBackendEnvironmentsResponse)
+
+-- | The list of backend environments for an Amplify app.
+listBackendEnvironmentsResponse_backendEnvironments :: Lens.Lens' ListBackendEnvironmentsResponse [BackendEnvironment]
+listBackendEnvironmentsResponse_backendEnvironments = Lens.lens (\ListBackendEnvironmentsResponse' {backendEnvironments} -> backendEnvironments) (\s@ListBackendEnvironmentsResponse' {} a -> s {backendEnvironments = a} :: ListBackendEnvironmentsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListBackendEnvironmentsResponse
+  where
+  rnf ListBackendEnvironmentsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf backendEnvironments
diff --git a/gen/Amazonka/Amplify/ListBranches.hs b/gen/Amazonka/Amplify/ListBranches.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/ListBranches.hs
@@ -0,0 +1,234 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.ListBranches
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the branches of an Amplify app.
+--
+-- This operation returns paginated results.
+module Amazonka.Amplify.ListBranches
+  ( -- * Creating a Request
+    ListBranches (..),
+    newListBranches,
+
+    -- * Request Lenses
+    listBranches_maxResults,
+    listBranches_nextToken,
+    listBranches_appId,
+
+    -- * Destructuring the Response
+    ListBranchesResponse (..),
+    newListBranchesResponse,
+
+    -- * Response Lenses
+    listBranchesResponse_nextToken,
+    listBranchesResponse_httpStatus,
+    listBranchesResponse_branches,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the list branches request.
+--
+-- /See:/ 'newListBranches' smart constructor.
+data ListBranches = ListBranches'
+  { -- | The maximum number of records to list in a single response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token. Set to null to start listing branches from the
+    -- start. If a non-null pagination token is returned in a result, pass its
+    -- value in here to list more branches.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBranches' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listBranches_maxResults' - The maximum number of records to list in a single response.
+--
+-- 'nextToken', 'listBranches_nextToken' - A pagination token. Set to null to start listing branches from the
+-- start. If a non-null pagination token is returned in a result, pass its
+-- value in here to list more branches.
+--
+-- 'appId', 'listBranches_appId' - The unique ID for an Amplify app.
+newListBranches ::
+  -- | 'appId'
+  Prelude.Text ->
+  ListBranches
+newListBranches pAppId_ =
+  ListBranches'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      appId = pAppId_
+    }
+
+-- | The maximum number of records to list in a single response.
+listBranches_maxResults :: Lens.Lens' ListBranches (Prelude.Maybe Prelude.Natural)
+listBranches_maxResults = Lens.lens (\ListBranches' {maxResults} -> maxResults) (\s@ListBranches' {} a -> s {maxResults = a} :: ListBranches)
+
+-- | A pagination token. Set to null to start listing branches from the
+-- start. If a non-null pagination token is returned in a result, pass its
+-- value in here to list more branches.
+listBranches_nextToken :: Lens.Lens' ListBranches (Prelude.Maybe Prelude.Text)
+listBranches_nextToken = Lens.lens (\ListBranches' {nextToken} -> nextToken) (\s@ListBranches' {} a -> s {nextToken = a} :: ListBranches)
+
+-- | The unique ID for an Amplify app.
+listBranches_appId :: Lens.Lens' ListBranches Prelude.Text
+listBranches_appId = Lens.lens (\ListBranches' {appId} -> appId) (\s@ListBranches' {} a -> s {appId = a} :: ListBranches)
+
+instance Core.AWSPager ListBranches where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listBranchesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listBranchesResponse_branches) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listBranches_nextToken
+          Lens..~ rs
+          Lens.^? listBranchesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListBranches where
+  type AWSResponse ListBranches = ListBranchesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListBranchesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "branches" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListBranches where
+  hashWithSalt _salt ListBranches' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData ListBranches where
+  rnf ListBranches' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf appId
+
+instance Data.ToHeaders ListBranches where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListBranches where
+  toPath ListBranches' {..} =
+    Prelude.mconcat
+      ["/apps/", Data.toBS appId, "/branches"]
+
+instance Data.ToQuery ListBranches where
+  toQuery ListBranches' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | The result structure for the list branches request.
+--
+-- /See:/ 'newListBranchesResponse' smart constructor.
+data ListBranchesResponse = ListBranchesResponse'
+  { -- | A pagination token. If a non-null pagination token is returned in a
+    -- result, pass its value in another request to retrieve more entries.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of branches for an Amplify app.
+    branches :: [Branch]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBranchesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listBranchesResponse_nextToken' - A pagination token. If a non-null pagination token is returned in a
+-- result, pass its value in another request to retrieve more entries.
+--
+-- 'httpStatus', 'listBranchesResponse_httpStatus' - The response's http status code.
+--
+-- 'branches', 'listBranchesResponse_branches' - A list of branches for an Amplify app.
+newListBranchesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListBranchesResponse
+newListBranchesResponse pHttpStatus_ =
+  ListBranchesResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      branches = Prelude.mempty
+    }
+
+-- | A pagination token. If a non-null pagination token is returned in a
+-- result, pass its value in another request to retrieve more entries.
+listBranchesResponse_nextToken :: Lens.Lens' ListBranchesResponse (Prelude.Maybe Prelude.Text)
+listBranchesResponse_nextToken = Lens.lens (\ListBranchesResponse' {nextToken} -> nextToken) (\s@ListBranchesResponse' {} a -> s {nextToken = a} :: ListBranchesResponse)
+
+-- | The response's http status code.
+listBranchesResponse_httpStatus :: Lens.Lens' ListBranchesResponse Prelude.Int
+listBranchesResponse_httpStatus = Lens.lens (\ListBranchesResponse' {httpStatus} -> httpStatus) (\s@ListBranchesResponse' {} a -> s {httpStatus = a} :: ListBranchesResponse)
+
+-- | A list of branches for an Amplify app.
+listBranchesResponse_branches :: Lens.Lens' ListBranchesResponse [Branch]
+listBranchesResponse_branches = Lens.lens (\ListBranchesResponse' {branches} -> branches) (\s@ListBranchesResponse' {} a -> s {branches = a} :: ListBranchesResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListBranchesResponse where
+  rnf ListBranchesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf branches
diff --git a/gen/Amazonka/Amplify/ListDomainAssociations.hs b/gen/Amazonka/Amplify/ListDomainAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/ListDomainAssociations.hs
@@ -0,0 +1,246 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.ListDomainAssociations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the domain associations for an Amplify app.
+--
+-- This operation returns paginated results.
+module Amazonka.Amplify.ListDomainAssociations
+  ( -- * Creating a Request
+    ListDomainAssociations (..),
+    newListDomainAssociations,
+
+    -- * Request Lenses
+    listDomainAssociations_maxResults,
+    listDomainAssociations_nextToken,
+    listDomainAssociations_appId,
+
+    -- * Destructuring the Response
+    ListDomainAssociationsResponse (..),
+    newListDomainAssociationsResponse,
+
+    -- * Response Lenses
+    listDomainAssociationsResponse_nextToken,
+    listDomainAssociationsResponse_httpStatus,
+    listDomainAssociationsResponse_domainAssociations,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the list domain associations request.
+--
+-- /See:/ 'newListDomainAssociations' smart constructor.
+data ListDomainAssociations = ListDomainAssociations'
+  { -- | The maximum number of records to list in a single response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token. Set to null to start listing apps from the start. If
+    -- non-null, a pagination token is returned in a result. Pass its value in
+    -- here to list more projects.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDomainAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listDomainAssociations_maxResults' - The maximum number of records to list in a single response.
+--
+-- 'nextToken', 'listDomainAssociations_nextToken' - A pagination token. Set to null to start listing apps from the start. If
+-- non-null, a pagination token is returned in a result. Pass its value in
+-- here to list more projects.
+--
+-- 'appId', 'listDomainAssociations_appId' - The unique ID for an Amplify app.
+newListDomainAssociations ::
+  -- | 'appId'
+  Prelude.Text ->
+  ListDomainAssociations
+newListDomainAssociations pAppId_ =
+  ListDomainAssociations'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      appId = pAppId_
+    }
+
+-- | The maximum number of records to list in a single response.
+listDomainAssociations_maxResults :: Lens.Lens' ListDomainAssociations (Prelude.Maybe Prelude.Natural)
+listDomainAssociations_maxResults = Lens.lens (\ListDomainAssociations' {maxResults} -> maxResults) (\s@ListDomainAssociations' {} a -> s {maxResults = a} :: ListDomainAssociations)
+
+-- | A pagination token. Set to null to start listing apps from the start. If
+-- non-null, a pagination token is returned in a result. Pass its value in
+-- here to list more projects.
+listDomainAssociations_nextToken :: Lens.Lens' ListDomainAssociations (Prelude.Maybe Prelude.Text)
+listDomainAssociations_nextToken = Lens.lens (\ListDomainAssociations' {nextToken} -> nextToken) (\s@ListDomainAssociations' {} a -> s {nextToken = a} :: ListDomainAssociations)
+
+-- | The unique ID for an Amplify app.
+listDomainAssociations_appId :: Lens.Lens' ListDomainAssociations Prelude.Text
+listDomainAssociations_appId = Lens.lens (\ListDomainAssociations' {appId} -> appId) (\s@ListDomainAssociations' {} a -> s {appId = a} :: ListDomainAssociations)
+
+instance Core.AWSPager ListDomainAssociations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDomainAssociationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listDomainAssociationsResponse_domainAssociations
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDomainAssociations_nextToken
+          Lens..~ rs
+          Lens.^? listDomainAssociationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListDomainAssociations where
+  type
+    AWSResponse ListDomainAssociations =
+      ListDomainAssociationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDomainAssociationsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "domainAssociations"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListDomainAssociations where
+  hashWithSalt _salt ListDomainAssociations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData ListDomainAssociations where
+  rnf ListDomainAssociations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf appId
+
+instance Data.ToHeaders ListDomainAssociations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListDomainAssociations where
+  toPath ListDomainAssociations' {..} =
+    Prelude.mconcat
+      ["/apps/", Data.toBS appId, "/domains"]
+
+instance Data.ToQuery ListDomainAssociations where
+  toQuery ListDomainAssociations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | The result structure for the list domain association request.
+--
+-- /See:/ 'newListDomainAssociationsResponse' smart constructor.
+data ListDomainAssociationsResponse = ListDomainAssociationsResponse'
+  { -- | A pagination token. If non-null, a pagination token is returned in a
+    -- result. Pass its value in another request to retrieve more entries.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of domain associations.
+    domainAssociations :: [DomainAssociation]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDomainAssociationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listDomainAssociationsResponse_nextToken' - A pagination token. If non-null, a pagination token is returned in a
+-- result. Pass its value in another request to retrieve more entries.
+--
+-- 'httpStatus', 'listDomainAssociationsResponse_httpStatus' - The response's http status code.
+--
+-- 'domainAssociations', 'listDomainAssociationsResponse_domainAssociations' - A list of domain associations.
+newListDomainAssociationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDomainAssociationsResponse
+newListDomainAssociationsResponse pHttpStatus_ =
+  ListDomainAssociationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      domainAssociations = Prelude.mempty
+    }
+
+-- | A pagination token. If non-null, a pagination token is returned in a
+-- result. Pass its value in another request to retrieve more entries.
+listDomainAssociationsResponse_nextToken :: Lens.Lens' ListDomainAssociationsResponse (Prelude.Maybe Prelude.Text)
+listDomainAssociationsResponse_nextToken = Lens.lens (\ListDomainAssociationsResponse' {nextToken} -> nextToken) (\s@ListDomainAssociationsResponse' {} a -> s {nextToken = a} :: ListDomainAssociationsResponse)
+
+-- | The response's http status code.
+listDomainAssociationsResponse_httpStatus :: Lens.Lens' ListDomainAssociationsResponse Prelude.Int
+listDomainAssociationsResponse_httpStatus = Lens.lens (\ListDomainAssociationsResponse' {httpStatus} -> httpStatus) (\s@ListDomainAssociationsResponse' {} a -> s {httpStatus = a} :: ListDomainAssociationsResponse)
+
+-- | A list of domain associations.
+listDomainAssociationsResponse_domainAssociations :: Lens.Lens' ListDomainAssociationsResponse [DomainAssociation]
+listDomainAssociationsResponse_domainAssociations = Lens.lens (\ListDomainAssociationsResponse' {domainAssociations} -> domainAssociations) (\s@ListDomainAssociationsResponse' {} a -> s {domainAssociations = a} :: ListDomainAssociationsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListDomainAssociationsResponse
+  where
+  rnf ListDomainAssociationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf domainAssociations
diff --git a/gen/Amazonka/Amplify/ListJobs.hs b/gen/Amazonka/Amplify/ListJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/ListJobs.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.Amplify.ListJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the jobs for a branch of an Amplify app.
+--
+-- This operation returns paginated results.
+module Amazonka.Amplify.ListJobs
+  ( -- * Creating a Request
+    ListJobs (..),
+    newListJobs,
+
+    -- * Request Lenses
+    listJobs_maxResults,
+    listJobs_nextToken,
+    listJobs_appId,
+    listJobs_branchName,
+
+    -- * Destructuring the Response
+    ListJobsResponse (..),
+    newListJobsResponse,
+
+    -- * Response Lenses
+    listJobsResponse_nextToken,
+    listJobsResponse_httpStatus,
+    listJobsResponse_jobSummaries,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the list jobs request.
+--
+-- /See:/ 'newListJobs' smart constructor.
+data ListJobs = ListJobs'
+  { -- | The maximum number of records to list in a single response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token. Set to null to start listing steps from the start.
+    -- If a non-null pagination token is returned in a result, pass its value
+    -- in here to list more steps.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The name for a branch.
+    branchName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listJobs_maxResults' - The maximum number of records to list in a single response.
+--
+-- 'nextToken', 'listJobs_nextToken' - A pagination token. Set to null to start listing steps from the start.
+-- If a non-null pagination token is returned in a result, pass its value
+-- in here to list more steps.
+--
+-- 'appId', 'listJobs_appId' - The unique ID for an Amplify app.
+--
+-- 'branchName', 'listJobs_branchName' - The name for a branch.
+newListJobs ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'branchName'
+  Prelude.Text ->
+  ListJobs
+newListJobs pAppId_ pBranchName_ =
+  ListJobs'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      appId = pAppId_,
+      branchName = pBranchName_
+    }
+
+-- | The maximum number of records to list in a single response.
+listJobs_maxResults :: Lens.Lens' ListJobs (Prelude.Maybe Prelude.Natural)
+listJobs_maxResults = Lens.lens (\ListJobs' {maxResults} -> maxResults) (\s@ListJobs' {} a -> s {maxResults = a} :: ListJobs)
+
+-- | A pagination token. Set to null to start listing steps from the start.
+-- If a non-null pagination token is returned in a result, pass its value
+-- in here to list more steps.
+listJobs_nextToken :: Lens.Lens' ListJobs (Prelude.Maybe Prelude.Text)
+listJobs_nextToken = Lens.lens (\ListJobs' {nextToken} -> nextToken) (\s@ListJobs' {} a -> s {nextToken = a} :: ListJobs)
+
+-- | The unique ID for an Amplify app.
+listJobs_appId :: Lens.Lens' ListJobs Prelude.Text
+listJobs_appId = Lens.lens (\ListJobs' {appId} -> appId) (\s@ListJobs' {} a -> s {appId = a} :: ListJobs)
+
+-- | The name for a branch.
+listJobs_branchName :: Lens.Lens' ListJobs Prelude.Text
+listJobs_branchName = Lens.lens (\ListJobs' {branchName} -> branchName) (\s@ListJobs' {} a -> s {branchName = a} :: ListJobs)
+
+instance Core.AWSPager ListJobs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listJobsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listJobsResponse_jobSummaries) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listJobs_nextToken
+          Lens..~ rs
+          Lens.^? listJobsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListJobs where
+  type AWSResponse ListJobs = ListJobsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListJobsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "jobSummaries" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListJobs where
+  hashWithSalt _salt ListJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` branchName
+
+instance Prelude.NFData ListJobs where
+  rnf ListJobs' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf branchName
+
+instance Data.ToHeaders ListJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListJobs where
+  toPath ListJobs' {..} =
+    Prelude.mconcat
+      [ "/apps/",
+        Data.toBS appId,
+        "/branches/",
+        Data.toBS branchName,
+        "/jobs"
+      ]
+
+instance Data.ToQuery ListJobs where
+  toQuery ListJobs' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | The maximum number of records to list in a single response.
+--
+-- /See:/ 'newListJobsResponse' smart constructor.
+data ListJobsResponse = ListJobsResponse'
+  { -- | A pagination token. If non-null the pagination token is returned in a
+    -- result. Pass its value in another request to retrieve more entries.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The result structure for the list job result request.
+    jobSummaries :: [JobSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listJobsResponse_nextToken' - A pagination token. If non-null the pagination token is returned in a
+-- result. Pass its value in another request to retrieve more entries.
+--
+-- 'httpStatus', 'listJobsResponse_httpStatus' - The response's http status code.
+--
+-- 'jobSummaries', 'listJobsResponse_jobSummaries' - The result structure for the list job result request.
+newListJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListJobsResponse
+newListJobsResponse pHttpStatus_ =
+  ListJobsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      jobSummaries = Prelude.mempty
+    }
+
+-- | A pagination token. If non-null the pagination token is returned in a
+-- result. Pass its value in another request to retrieve more entries.
+listJobsResponse_nextToken :: Lens.Lens' ListJobsResponse (Prelude.Maybe Prelude.Text)
+listJobsResponse_nextToken = Lens.lens (\ListJobsResponse' {nextToken} -> nextToken) (\s@ListJobsResponse' {} a -> s {nextToken = a} :: ListJobsResponse)
+
+-- | The response's http status code.
+listJobsResponse_httpStatus :: Lens.Lens' ListJobsResponse Prelude.Int
+listJobsResponse_httpStatus = Lens.lens (\ListJobsResponse' {httpStatus} -> httpStatus) (\s@ListJobsResponse' {} a -> s {httpStatus = a} :: ListJobsResponse)
+
+-- | The result structure for the list job result request.
+listJobsResponse_jobSummaries :: Lens.Lens' ListJobsResponse [JobSummary]
+listJobsResponse_jobSummaries = Lens.lens (\ListJobsResponse' {jobSummaries} -> jobSummaries) (\s@ListJobsResponse' {} a -> s {jobSummaries = a} :: ListJobsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListJobsResponse where
+  rnf ListJobsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf jobSummaries
diff --git a/gen/Amazonka/Amplify/ListTagsForResource.hs b/gen/Amazonka/Amplify/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/ListTagsForResource.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.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)
+--
+-- Returns a list of tags for a specified Amazon Resource Name (ARN).
+module Amazonka.Amplify.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.Amplify.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 structure to use to list tags for a resource.
+--
+-- /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) to use to list tags.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) to use to list tags.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) to use to list tags.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The response for the list tags for resource request.
+--
+-- /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | A list of tags for the specified The Amazon Resource Name (ARN).
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - A list of tags for the specified The Amazon Resource Name (ARN).
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of tags for the specified The Amazon Resource Name (ARN).
+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/Amplify/ListWebhooks.hs b/gen/Amazonka/Amplify/ListWebhooks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/ListWebhooks.hs
@@ -0,0 +1,213 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.ListWebhooks
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of webhooks for an Amplify app.
+module Amazonka.Amplify.ListWebhooks
+  ( -- * Creating a Request
+    ListWebhooks (..),
+    newListWebhooks,
+
+    -- * Request Lenses
+    listWebhooks_maxResults,
+    listWebhooks_nextToken,
+    listWebhooks_appId,
+
+    -- * Destructuring the Response
+    ListWebhooksResponse (..),
+    newListWebhooksResponse,
+
+    -- * Response Lenses
+    listWebhooksResponse_nextToken,
+    listWebhooksResponse_httpStatus,
+    listWebhooksResponse_webhooks,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the list webhooks request.
+--
+-- /See:/ 'newListWebhooks' smart constructor.
+data ListWebhooks = ListWebhooks'
+  { -- | The maximum number of records to list in a single response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token. Set to null to start listing webhooks from the
+    -- start. If non-null,the pagination token is returned in a result. Pass
+    -- its value in here to list more webhooks.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWebhooks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listWebhooks_maxResults' - The maximum number of records to list in a single response.
+--
+-- 'nextToken', 'listWebhooks_nextToken' - A pagination token. Set to null to start listing webhooks from the
+-- start. If non-null,the pagination token is returned in a result. Pass
+-- its value in here to list more webhooks.
+--
+-- 'appId', 'listWebhooks_appId' - The unique ID for an Amplify app.
+newListWebhooks ::
+  -- | 'appId'
+  Prelude.Text ->
+  ListWebhooks
+newListWebhooks pAppId_ =
+  ListWebhooks'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      appId = pAppId_
+    }
+
+-- | The maximum number of records to list in a single response.
+listWebhooks_maxResults :: Lens.Lens' ListWebhooks (Prelude.Maybe Prelude.Natural)
+listWebhooks_maxResults = Lens.lens (\ListWebhooks' {maxResults} -> maxResults) (\s@ListWebhooks' {} a -> s {maxResults = a} :: ListWebhooks)
+
+-- | A pagination token. Set to null to start listing webhooks from the
+-- start. If non-null,the pagination token is returned in a result. Pass
+-- its value in here to list more webhooks.
+listWebhooks_nextToken :: Lens.Lens' ListWebhooks (Prelude.Maybe Prelude.Text)
+listWebhooks_nextToken = Lens.lens (\ListWebhooks' {nextToken} -> nextToken) (\s@ListWebhooks' {} a -> s {nextToken = a} :: ListWebhooks)
+
+-- | The unique ID for an Amplify app.
+listWebhooks_appId :: Lens.Lens' ListWebhooks Prelude.Text
+listWebhooks_appId = Lens.lens (\ListWebhooks' {appId} -> appId) (\s@ListWebhooks' {} a -> s {appId = a} :: ListWebhooks)
+
+instance Core.AWSRequest ListWebhooks where
+  type AWSResponse ListWebhooks = ListWebhooksResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWebhooksResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "webhooks" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListWebhooks where
+  hashWithSalt _salt ListWebhooks' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData ListWebhooks where
+  rnf ListWebhooks' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf appId
+
+instance Data.ToHeaders ListWebhooks where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListWebhooks where
+  toPath ListWebhooks' {..} =
+    Prelude.mconcat
+      ["/apps/", Data.toBS appId, "/webhooks"]
+
+instance Data.ToQuery ListWebhooks where
+  toQuery ListWebhooks' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | The result structure for the list webhooks request.
+--
+-- /See:/ 'newListWebhooksResponse' smart constructor.
+data ListWebhooksResponse = ListWebhooksResponse'
+  { -- | A pagination token. If non-null, the pagination token is returned in a
+    -- result. Pass its value in another request to retrieve more entries.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of webhooks.
+    webhooks :: [Webhook]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWebhooksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listWebhooksResponse_nextToken' - A pagination token. If non-null, the pagination token is returned in a
+-- result. Pass its value in another request to retrieve more entries.
+--
+-- 'httpStatus', 'listWebhooksResponse_httpStatus' - The response's http status code.
+--
+-- 'webhooks', 'listWebhooksResponse_webhooks' - A list of webhooks.
+newListWebhooksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWebhooksResponse
+newListWebhooksResponse pHttpStatus_ =
+  ListWebhooksResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      webhooks = Prelude.mempty
+    }
+
+-- | A pagination token. If non-null, the pagination token is returned in a
+-- result. Pass its value in another request to retrieve more entries.
+listWebhooksResponse_nextToken :: Lens.Lens' ListWebhooksResponse (Prelude.Maybe Prelude.Text)
+listWebhooksResponse_nextToken = Lens.lens (\ListWebhooksResponse' {nextToken} -> nextToken) (\s@ListWebhooksResponse' {} a -> s {nextToken = a} :: ListWebhooksResponse)
+
+-- | The response's http status code.
+listWebhooksResponse_httpStatus :: Lens.Lens' ListWebhooksResponse Prelude.Int
+listWebhooksResponse_httpStatus = Lens.lens (\ListWebhooksResponse' {httpStatus} -> httpStatus) (\s@ListWebhooksResponse' {} a -> s {httpStatus = a} :: ListWebhooksResponse)
+
+-- | A list of webhooks.
+listWebhooksResponse_webhooks :: Lens.Lens' ListWebhooksResponse [Webhook]
+listWebhooksResponse_webhooks = Lens.lens (\ListWebhooksResponse' {webhooks} -> webhooks) (\s@ListWebhooksResponse' {} a -> s {webhooks = a} :: ListWebhooksResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListWebhooksResponse where
+  rnf ListWebhooksResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf webhooks
diff --git a/gen/Amazonka/Amplify/StartDeployment.hs b/gen/Amazonka/Amplify/StartDeployment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/StartDeployment.hs
@@ -0,0 +1,230 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.StartDeployment
+-- 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 deployment for a manually deployed app. Manually deployed apps
+-- are not connected to a repository.
+module Amazonka.Amplify.StartDeployment
+  ( -- * Creating a Request
+    StartDeployment (..),
+    newStartDeployment,
+
+    -- * Request Lenses
+    startDeployment_jobId,
+    startDeployment_sourceUrl,
+    startDeployment_appId,
+    startDeployment_branchName,
+
+    -- * Destructuring the Response
+    StartDeploymentResponse (..),
+    newStartDeploymentResponse,
+
+    -- * Response Lenses
+    startDeploymentResponse_httpStatus,
+    startDeploymentResponse_jobSummary,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the start a deployment request.
+--
+-- /See:/ 'newStartDeployment' smart constructor.
+data StartDeployment = StartDeployment'
+  { -- | The job ID for this deployment, generated by the create deployment
+    -- request.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The source URL for this deployment, used when calling start deployment
+    -- without create deployment. The source URL can be any HTTP GET URL that
+    -- is publicly accessible and downloads a single .zip file.
+    sourceUrl :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The name for the branch, for the job.
+    branchName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartDeployment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'startDeployment_jobId' - The job ID for this deployment, generated by the create deployment
+-- request.
+--
+-- 'sourceUrl', 'startDeployment_sourceUrl' - The source URL for this deployment, used when calling start deployment
+-- without create deployment. The source URL can be any HTTP GET URL that
+-- is publicly accessible and downloads a single .zip file.
+--
+-- 'appId', 'startDeployment_appId' - The unique ID for an Amplify app.
+--
+-- 'branchName', 'startDeployment_branchName' - The name for the branch, for the job.
+newStartDeployment ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'branchName'
+  Prelude.Text ->
+  StartDeployment
+newStartDeployment pAppId_ pBranchName_ =
+  StartDeployment'
+    { jobId = Prelude.Nothing,
+      sourceUrl = Prelude.Nothing,
+      appId = pAppId_,
+      branchName = pBranchName_
+    }
+
+-- | The job ID for this deployment, generated by the create deployment
+-- request.
+startDeployment_jobId :: Lens.Lens' StartDeployment (Prelude.Maybe Prelude.Text)
+startDeployment_jobId = Lens.lens (\StartDeployment' {jobId} -> jobId) (\s@StartDeployment' {} a -> s {jobId = a} :: StartDeployment)
+
+-- | The source URL for this deployment, used when calling start deployment
+-- without create deployment. The source URL can be any HTTP GET URL that
+-- is publicly accessible and downloads a single .zip file.
+startDeployment_sourceUrl :: Lens.Lens' StartDeployment (Prelude.Maybe Prelude.Text)
+startDeployment_sourceUrl = Lens.lens (\StartDeployment' {sourceUrl} -> sourceUrl) (\s@StartDeployment' {} a -> s {sourceUrl = a} :: StartDeployment)
+
+-- | The unique ID for an Amplify app.
+startDeployment_appId :: Lens.Lens' StartDeployment Prelude.Text
+startDeployment_appId = Lens.lens (\StartDeployment' {appId} -> appId) (\s@StartDeployment' {} a -> s {appId = a} :: StartDeployment)
+
+-- | The name for the branch, for the job.
+startDeployment_branchName :: Lens.Lens' StartDeployment Prelude.Text
+startDeployment_branchName = Lens.lens (\StartDeployment' {branchName} -> branchName) (\s@StartDeployment' {} a -> s {branchName = a} :: StartDeployment)
+
+instance Core.AWSRequest StartDeployment where
+  type
+    AWSResponse StartDeployment =
+      StartDeploymentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartDeploymentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "jobSummary")
+      )
+
+instance Prelude.Hashable StartDeployment where
+  hashWithSalt _salt StartDeployment' {..} =
+    _salt
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` sourceUrl
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` branchName
+
+instance Prelude.NFData StartDeployment where
+  rnf StartDeployment' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf sourceUrl
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf branchName
+
+instance Data.ToHeaders StartDeployment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartDeployment where
+  toJSON StartDeployment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("jobId" Data..=) Prelude.<$> jobId,
+            ("sourceUrl" Data..=) Prelude.<$> sourceUrl
+          ]
+      )
+
+instance Data.ToPath StartDeployment where
+  toPath StartDeployment' {..} =
+    Prelude.mconcat
+      [ "/apps/",
+        Data.toBS appId,
+        "/branches/",
+        Data.toBS branchName,
+        "/deployments/start"
+      ]
+
+instance Data.ToQuery StartDeployment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the start a deployment request.
+--
+-- /See:/ 'newStartDeploymentResponse' smart constructor.
+data StartDeploymentResponse = StartDeploymentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The summary for the job.
+    jobSummary :: JobSummary
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartDeploymentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'startDeploymentResponse_httpStatus' - The response's http status code.
+--
+-- 'jobSummary', 'startDeploymentResponse_jobSummary' - The summary for the job.
+newStartDeploymentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'jobSummary'
+  JobSummary ->
+  StartDeploymentResponse
+newStartDeploymentResponse pHttpStatus_ pJobSummary_ =
+  StartDeploymentResponse'
+    { httpStatus = pHttpStatus_,
+      jobSummary = pJobSummary_
+    }
+
+-- | The response's http status code.
+startDeploymentResponse_httpStatus :: Lens.Lens' StartDeploymentResponse Prelude.Int
+startDeploymentResponse_httpStatus = Lens.lens (\StartDeploymentResponse' {httpStatus} -> httpStatus) (\s@StartDeploymentResponse' {} a -> s {httpStatus = a} :: StartDeploymentResponse)
+
+-- | The summary for the job.
+startDeploymentResponse_jobSummary :: Lens.Lens' StartDeploymentResponse JobSummary
+startDeploymentResponse_jobSummary = Lens.lens (\StartDeploymentResponse' {jobSummary} -> jobSummary) (\s@StartDeploymentResponse' {} a -> s {jobSummary = a} :: StartDeploymentResponse)
+
+instance Prelude.NFData StartDeploymentResponse where
+  rnf StartDeploymentResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf jobSummary
diff --git a/gen/Amazonka/Amplify/StartJob.hs b/gen/Amazonka/Amplify/StartJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/StartJob.hs
@@ -0,0 +1,287 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.StartJob
+-- 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 new job for a branch of an Amplify app.
+module Amazonka.Amplify.StartJob
+  ( -- * Creating a Request
+    StartJob (..),
+    newStartJob,
+
+    -- * Request Lenses
+    startJob_commitId,
+    startJob_commitMessage,
+    startJob_commitTime,
+    startJob_jobId,
+    startJob_jobReason,
+    startJob_appId,
+    startJob_branchName,
+    startJob_jobType,
+
+    -- * Destructuring the Response
+    StartJobResponse (..),
+    newStartJobResponse,
+
+    -- * Response Lenses
+    startJobResponse_httpStatus,
+    startJobResponse_jobSummary,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the start job request.
+--
+-- /See:/ 'newStartJob' smart constructor.
+data StartJob = StartJob'
+  { -- | The commit ID from a third-party repository provider for the job.
+    commitId :: Prelude.Maybe Prelude.Text,
+    -- | The commit message from a third-party repository provider for the job.
+    commitMessage :: Prelude.Maybe Prelude.Text,
+    -- | The commit date and time for the job.
+    commitTime :: Prelude.Maybe Data.POSIX,
+    -- | The unique ID for an existing job. This is required if the value of
+    -- @jobType@ is @RETRY@.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | A descriptive reason for starting this job.
+    jobReason :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The branch name for the job.
+    branchName :: Prelude.Text,
+    -- | Describes the type for the job. The job type @RELEASE@ starts a new job
+    -- with the latest change from the specified branch. This value is
+    -- available only for apps that are connected to a repository. The job type
+    -- @RETRY@ retries an existing job. If the job type value is @RETRY@, the
+    -- @jobId@ is also required.
+    jobType :: JobType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'commitId', 'startJob_commitId' - The commit ID from a third-party repository provider for the job.
+--
+-- 'commitMessage', 'startJob_commitMessage' - The commit message from a third-party repository provider for the job.
+--
+-- 'commitTime', 'startJob_commitTime' - The commit date and time for the job.
+--
+-- 'jobId', 'startJob_jobId' - The unique ID for an existing job. This is required if the value of
+-- @jobType@ is @RETRY@.
+--
+-- 'jobReason', 'startJob_jobReason' - A descriptive reason for starting this job.
+--
+-- 'appId', 'startJob_appId' - The unique ID for an Amplify app.
+--
+-- 'branchName', 'startJob_branchName' - The branch name for the job.
+--
+-- 'jobType', 'startJob_jobType' - Describes the type for the job. The job type @RELEASE@ starts a new job
+-- with the latest change from the specified branch. This value is
+-- available only for apps that are connected to a repository. The job type
+-- @RETRY@ retries an existing job. If the job type value is @RETRY@, the
+-- @jobId@ is also required.
+newStartJob ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'branchName'
+  Prelude.Text ->
+  -- | 'jobType'
+  JobType ->
+  StartJob
+newStartJob pAppId_ pBranchName_ pJobType_ =
+  StartJob'
+    { commitId = Prelude.Nothing,
+      commitMessage = Prelude.Nothing,
+      commitTime = Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      jobReason = Prelude.Nothing,
+      appId = pAppId_,
+      branchName = pBranchName_,
+      jobType = pJobType_
+    }
+
+-- | The commit ID from a third-party repository provider for the job.
+startJob_commitId :: Lens.Lens' StartJob (Prelude.Maybe Prelude.Text)
+startJob_commitId = Lens.lens (\StartJob' {commitId} -> commitId) (\s@StartJob' {} a -> s {commitId = a} :: StartJob)
+
+-- | The commit message from a third-party repository provider for the job.
+startJob_commitMessage :: Lens.Lens' StartJob (Prelude.Maybe Prelude.Text)
+startJob_commitMessage = Lens.lens (\StartJob' {commitMessage} -> commitMessage) (\s@StartJob' {} a -> s {commitMessage = a} :: StartJob)
+
+-- | The commit date and time for the job.
+startJob_commitTime :: Lens.Lens' StartJob (Prelude.Maybe Prelude.UTCTime)
+startJob_commitTime = Lens.lens (\StartJob' {commitTime} -> commitTime) (\s@StartJob' {} a -> s {commitTime = a} :: StartJob) Prelude.. Lens.mapping Data._Time
+
+-- | The unique ID for an existing job. This is required if the value of
+-- @jobType@ is @RETRY@.
+startJob_jobId :: Lens.Lens' StartJob (Prelude.Maybe Prelude.Text)
+startJob_jobId = Lens.lens (\StartJob' {jobId} -> jobId) (\s@StartJob' {} a -> s {jobId = a} :: StartJob)
+
+-- | A descriptive reason for starting this job.
+startJob_jobReason :: Lens.Lens' StartJob (Prelude.Maybe Prelude.Text)
+startJob_jobReason = Lens.lens (\StartJob' {jobReason} -> jobReason) (\s@StartJob' {} a -> s {jobReason = a} :: StartJob)
+
+-- | The unique ID for an Amplify app.
+startJob_appId :: Lens.Lens' StartJob Prelude.Text
+startJob_appId = Lens.lens (\StartJob' {appId} -> appId) (\s@StartJob' {} a -> s {appId = a} :: StartJob)
+
+-- | The branch name for the job.
+startJob_branchName :: Lens.Lens' StartJob Prelude.Text
+startJob_branchName = Lens.lens (\StartJob' {branchName} -> branchName) (\s@StartJob' {} a -> s {branchName = a} :: StartJob)
+
+-- | Describes the type for the job. The job type @RELEASE@ starts a new job
+-- with the latest change from the specified branch. This value is
+-- available only for apps that are connected to a repository. The job type
+-- @RETRY@ retries an existing job. If the job type value is @RETRY@, the
+-- @jobId@ is also required.
+startJob_jobType :: Lens.Lens' StartJob JobType
+startJob_jobType = Lens.lens (\StartJob' {jobType} -> jobType) (\s@StartJob' {} a -> s {jobType = a} :: StartJob)
+
+instance Core.AWSRequest StartJob where
+  type AWSResponse StartJob = StartJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "jobSummary")
+      )
+
+instance Prelude.Hashable StartJob where
+  hashWithSalt _salt StartJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` commitId
+      `Prelude.hashWithSalt` commitMessage
+      `Prelude.hashWithSalt` commitTime
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` jobReason
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` branchName
+      `Prelude.hashWithSalt` jobType
+
+instance Prelude.NFData StartJob where
+  rnf StartJob' {..} =
+    Prelude.rnf commitId
+      `Prelude.seq` Prelude.rnf commitMessage
+      `Prelude.seq` Prelude.rnf commitTime
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf jobReason
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf branchName
+      `Prelude.seq` Prelude.rnf jobType
+
+instance Data.ToHeaders StartJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartJob where
+  toJSON StartJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("commitId" Data..=) Prelude.<$> commitId,
+            ("commitMessage" Data..=) Prelude.<$> commitMessage,
+            ("commitTime" Data..=) Prelude.<$> commitTime,
+            ("jobId" Data..=) Prelude.<$> jobId,
+            ("jobReason" Data..=) Prelude.<$> jobReason,
+            Prelude.Just ("jobType" Data..= jobType)
+          ]
+      )
+
+instance Data.ToPath StartJob where
+  toPath StartJob' {..} =
+    Prelude.mconcat
+      [ "/apps/",
+        Data.toBS appId,
+        "/branches/",
+        Data.toBS branchName,
+        "/jobs"
+      ]
+
+instance Data.ToQuery StartJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the run job request.
+--
+-- /See:/ 'newStartJobResponse' smart constructor.
+data StartJobResponse = StartJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The summary for the job.
+    jobSummary :: JobSummary
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'startJobResponse_httpStatus' - The response's http status code.
+--
+-- 'jobSummary', 'startJobResponse_jobSummary' - The summary for the job.
+newStartJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'jobSummary'
+  JobSummary ->
+  StartJobResponse
+newStartJobResponse pHttpStatus_ pJobSummary_ =
+  StartJobResponse'
+    { httpStatus = pHttpStatus_,
+      jobSummary = pJobSummary_
+    }
+
+-- | The response's http status code.
+startJobResponse_httpStatus :: Lens.Lens' StartJobResponse Prelude.Int
+startJobResponse_httpStatus = Lens.lens (\StartJobResponse' {httpStatus} -> httpStatus) (\s@StartJobResponse' {} a -> s {httpStatus = a} :: StartJobResponse)
+
+-- | The summary for the job.
+startJobResponse_jobSummary :: Lens.Lens' StartJobResponse JobSummary
+startJobResponse_jobSummary = Lens.lens (\StartJobResponse' {jobSummary} -> jobSummary) (\s@StartJobResponse' {} a -> s {jobSummary = a} :: StartJobResponse)
+
+instance Prelude.NFData StartJobResponse where
+  rnf StartJobResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf jobSummary
diff --git a/gen/Amazonka/Amplify/StopJob.hs b/gen/Amazonka/Amplify/StopJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/StopJob.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.Amplify.StopJob
+-- 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 job that is in progress for a branch of an Amplify app.
+module Amazonka.Amplify.StopJob
+  ( -- * Creating a Request
+    StopJob (..),
+    newStopJob,
+
+    -- * Request Lenses
+    stopJob_appId,
+    stopJob_branchName,
+    stopJob_jobId,
+
+    -- * Destructuring the Response
+    StopJobResponse (..),
+    newStopJobResponse,
+
+    -- * Response Lenses
+    stopJobResponse_httpStatus,
+    stopJobResponse_jobSummary,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the stop job request.
+--
+-- /See:/ 'newStopJob' smart constructor.
+data StopJob = StopJob'
+  { -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The name for the branch, for the job.
+    branchName :: Prelude.Text,
+    -- | The unique id for the job.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'stopJob_appId' - The unique ID for an Amplify app.
+--
+-- 'branchName', 'stopJob_branchName' - The name for the branch, for the job.
+--
+-- 'jobId', 'stopJob_jobId' - The unique id for the job.
+newStopJob ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'branchName'
+  Prelude.Text ->
+  -- | 'jobId'
+  Prelude.Text ->
+  StopJob
+newStopJob pAppId_ pBranchName_ pJobId_ =
+  StopJob'
+    { appId = pAppId_,
+      branchName = pBranchName_,
+      jobId = pJobId_
+    }
+
+-- | The unique ID for an Amplify app.
+stopJob_appId :: Lens.Lens' StopJob Prelude.Text
+stopJob_appId = Lens.lens (\StopJob' {appId} -> appId) (\s@StopJob' {} a -> s {appId = a} :: StopJob)
+
+-- | The name for the branch, for the job.
+stopJob_branchName :: Lens.Lens' StopJob Prelude.Text
+stopJob_branchName = Lens.lens (\StopJob' {branchName} -> branchName) (\s@StopJob' {} a -> s {branchName = a} :: StopJob)
+
+-- | The unique id for the job.
+stopJob_jobId :: Lens.Lens' StopJob Prelude.Text
+stopJob_jobId = Lens.lens (\StopJob' {jobId} -> jobId) (\s@StopJob' {} a -> s {jobId = a} :: StopJob)
+
+instance Core.AWSRequest StopJob where
+  type AWSResponse StopJob = StopJobResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StopJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "jobSummary")
+      )
+
+instance Prelude.Hashable StopJob where
+  hashWithSalt _salt StopJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` branchName
+      `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData StopJob where
+  rnf StopJob' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf branchName
+      `Prelude.seq` Prelude.rnf jobId
+
+instance Data.ToHeaders StopJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath StopJob where
+  toPath StopJob' {..} =
+    Prelude.mconcat
+      [ "/apps/",
+        Data.toBS appId,
+        "/branches/",
+        Data.toBS branchName,
+        "/jobs/",
+        Data.toBS jobId,
+        "/stop"
+      ]
+
+instance Data.ToQuery StopJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the stop job request.
+--
+-- /See:/ 'newStopJobResponse' smart constructor.
+data StopJobResponse = StopJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The summary for the job.
+    jobSummary :: JobSummary
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'stopJobResponse_httpStatus' - The response's http status code.
+--
+-- 'jobSummary', 'stopJobResponse_jobSummary' - The summary for the job.
+newStopJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'jobSummary'
+  JobSummary ->
+  StopJobResponse
+newStopJobResponse pHttpStatus_ pJobSummary_ =
+  StopJobResponse'
+    { httpStatus = pHttpStatus_,
+      jobSummary = pJobSummary_
+    }
+
+-- | The response's http status code.
+stopJobResponse_httpStatus :: Lens.Lens' StopJobResponse Prelude.Int
+stopJobResponse_httpStatus = Lens.lens (\StopJobResponse' {httpStatus} -> httpStatus) (\s@StopJobResponse' {} a -> s {httpStatus = a} :: StopJobResponse)
+
+-- | The summary for the job.
+stopJobResponse_jobSummary :: Lens.Lens' StopJobResponse JobSummary
+stopJobResponse_jobSummary = Lens.lens (\StopJobResponse' {jobSummary} -> jobSummary) (\s@StopJobResponse' {} a -> s {jobSummary = a} :: StopJobResponse)
+
+instance Prelude.NFData StopJobResponse where
+  rnf StopJobResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf jobSummary
diff --git a/gen/Amazonka/Amplify/TagResource.hs b/gen/Amazonka/Amplify/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/TagResource.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.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)
+--
+-- Tags the resource with a tag key and value.
+module Amazonka.Amplify.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.Amplify.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 structure to tag a resource with a tag key and value.
+--
+-- /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) to use to tag a resource.
+    resourceArn :: Prelude.Text,
+    -- | The tags used to tag the resource.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) to use to tag a resource.
+--
+-- 'tags', 'tagResource_tags' - The tags used to tag the resource.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) to use to tag a resource.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | The tags used to tag the resource.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The response for the tag resource request.
+--
+-- /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Amplify/Types.hs b/gen/Amazonka/Amplify/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types.hs
@@ -0,0 +1,374 @@
+{-# 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.Amplify.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.Amplify.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _BadRequestException,
+    _DependentServiceFailureException,
+    _InternalFailureException,
+    _LimitExceededException,
+    _NotFoundException,
+    _ResourceNotFoundException,
+    _UnauthorizedException,
+
+    -- * DomainStatus
+    DomainStatus (..),
+
+    -- * JobStatus
+    JobStatus (..),
+
+    -- * JobType
+    JobType (..),
+
+    -- * Platform
+    Platform (..),
+
+    -- * RepositoryCloneMethod
+    RepositoryCloneMethod (..),
+
+    -- * Stage
+    Stage (..),
+
+    -- * App
+    App (..),
+    newApp,
+    app_autoBranchCreationConfig,
+    app_autoBranchCreationPatterns,
+    app_basicAuthCredentials,
+    app_buildSpec,
+    app_customHeaders,
+    app_customRules,
+    app_enableAutoBranchCreation,
+    app_enableBranchAutoDeletion,
+    app_iamServiceRoleArn,
+    app_productionBranch,
+    app_repositoryCloneMethod,
+    app_tags,
+    app_appId,
+    app_appArn,
+    app_name,
+    app_description,
+    app_repository,
+    app_platform,
+    app_createTime,
+    app_updateTime,
+    app_environmentVariables,
+    app_defaultDomain,
+    app_enableBranchAutoBuild,
+    app_enableBasicAuth,
+
+    -- * Artifact
+    Artifact (..),
+    newArtifact,
+    artifact_artifactFileName,
+    artifact_artifactId,
+
+    -- * AutoBranchCreationConfig
+    AutoBranchCreationConfig (..),
+    newAutoBranchCreationConfig,
+    autoBranchCreationConfig_basicAuthCredentials,
+    autoBranchCreationConfig_buildSpec,
+    autoBranchCreationConfig_enableAutoBuild,
+    autoBranchCreationConfig_enableBasicAuth,
+    autoBranchCreationConfig_enablePerformanceMode,
+    autoBranchCreationConfig_enablePullRequestPreview,
+    autoBranchCreationConfig_environmentVariables,
+    autoBranchCreationConfig_framework,
+    autoBranchCreationConfig_pullRequestEnvironmentName,
+    autoBranchCreationConfig_stage,
+
+    -- * BackendEnvironment
+    BackendEnvironment (..),
+    newBackendEnvironment,
+    backendEnvironment_deploymentArtifacts,
+    backendEnvironment_stackName,
+    backendEnvironment_backendEnvironmentArn,
+    backendEnvironment_environmentName,
+    backendEnvironment_createTime,
+    backendEnvironment_updateTime,
+
+    -- * Branch
+    Branch (..),
+    newBranch,
+    branch_associatedResources,
+    branch_backendEnvironmentArn,
+    branch_basicAuthCredentials,
+    branch_buildSpec,
+    branch_destinationBranch,
+    branch_enablePerformanceMode,
+    branch_pullRequestEnvironmentName,
+    branch_sourceBranch,
+    branch_tags,
+    branch_thumbnailUrl,
+    branch_branchArn,
+    branch_branchName,
+    branch_description,
+    branch_stage,
+    branch_displayName,
+    branch_enableNotification,
+    branch_createTime,
+    branch_updateTime,
+    branch_environmentVariables,
+    branch_enableAutoBuild,
+    branch_customDomains,
+    branch_framework,
+    branch_activeJobId,
+    branch_totalNumberOfJobs,
+    branch_enableBasicAuth,
+    branch_ttl,
+    branch_enablePullRequestPreview,
+
+    -- * CustomRule
+    CustomRule (..),
+    newCustomRule,
+    customRule_condition,
+    customRule_status,
+    customRule_source,
+    customRule_target,
+
+    -- * DomainAssociation
+    DomainAssociation (..),
+    newDomainAssociation,
+    domainAssociation_autoSubDomainCreationPatterns,
+    domainAssociation_autoSubDomainIAMRole,
+    domainAssociation_certificateVerificationDNSRecord,
+    domainAssociation_domainAssociationArn,
+    domainAssociation_domainName,
+    domainAssociation_enableAutoSubDomain,
+    domainAssociation_domainStatus,
+    domainAssociation_statusReason,
+    domainAssociation_subDomains,
+
+    -- * Job
+    Job (..),
+    newJob,
+    job_summary,
+    job_steps,
+
+    -- * JobSummary
+    JobSummary (..),
+    newJobSummary,
+    jobSummary_endTime,
+    jobSummary_jobArn,
+    jobSummary_jobId,
+    jobSummary_commitId,
+    jobSummary_commitMessage,
+    jobSummary_commitTime,
+    jobSummary_startTime,
+    jobSummary_status,
+    jobSummary_jobType,
+
+    -- * ProductionBranch
+    ProductionBranch (..),
+    newProductionBranch,
+    productionBranch_branchName,
+    productionBranch_lastDeployTime,
+    productionBranch_status,
+    productionBranch_thumbnailUrl,
+
+    -- * Step
+    Step (..),
+    newStep,
+    step_artifactsUrl,
+    step_context,
+    step_logUrl,
+    step_screenshots,
+    step_statusReason,
+    step_testArtifactsUrl,
+    step_testConfigUrl,
+    step_stepName,
+    step_startTime,
+    step_status,
+    step_endTime,
+
+    -- * SubDomain
+    SubDomain (..),
+    newSubDomain,
+    subDomain_subDomainSetting,
+    subDomain_verified,
+    subDomain_dnsRecord,
+
+    -- * SubDomainSetting
+    SubDomainSetting (..),
+    newSubDomainSetting,
+    subDomainSetting_prefix,
+    subDomainSetting_branchName,
+
+    -- * Webhook
+    Webhook (..),
+    newWebhook,
+    webhook_webhookArn,
+    webhook_webhookId,
+    webhook_webhookUrl,
+    webhook_branchName,
+    webhook_description,
+    webhook_createTime,
+    webhook_updateTime,
+  )
+where
+
+import Amazonka.Amplify.Types.App
+import Amazonka.Amplify.Types.Artifact
+import Amazonka.Amplify.Types.AutoBranchCreationConfig
+import Amazonka.Amplify.Types.BackendEnvironment
+import Amazonka.Amplify.Types.Branch
+import Amazonka.Amplify.Types.CustomRule
+import Amazonka.Amplify.Types.DomainAssociation
+import Amazonka.Amplify.Types.DomainStatus
+import Amazonka.Amplify.Types.Job
+import Amazonka.Amplify.Types.JobStatus
+import Amazonka.Amplify.Types.JobSummary
+import Amazonka.Amplify.Types.JobType
+import Amazonka.Amplify.Types.Platform
+import Amazonka.Amplify.Types.ProductionBranch
+import Amazonka.Amplify.Types.RepositoryCloneMethod
+import Amazonka.Amplify.Types.Stage
+import Amazonka.Amplify.Types.Step
+import Amazonka.Amplify.Types.SubDomain
+import Amazonka.Amplify.Types.SubDomainSetting
+import Amazonka.Amplify.Types.Webhook
+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 @2017-07-25@ of the Amazon Amplify SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "Amplify",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "amplify",
+      Core.signingName = "amplify",
+      Core.version = "2017-07-25",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "Amplify",
+      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
+
+-- | A request contains unexpected data.
+_BadRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_BadRequestException =
+  Core._MatchServiceError
+    defaultService
+    "BadRequestException"
+    Prelude.. Core.hasStatus 400
+
+-- | An operation failed because a dependent service threw an exception.
+_DependentServiceFailureException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_DependentServiceFailureException =
+  Core._MatchServiceError
+    defaultService
+    "DependentServiceFailureException"
+    Prelude.. Core.hasStatus 503
+
+-- | The service failed to perform an operation due to an internal issue.
+_InternalFailureException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalFailureException =
+  Core._MatchServiceError
+    defaultService
+    "InternalFailureException"
+    Prelude.. Core.hasStatus 500
+
+-- | A resource could not be created because service quotas were exceeded.
+_LimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_LimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "LimitExceededException"
+    Prelude.. Core.hasStatus 429
+
+-- | An entity was not found during an operation.
+_NotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "NotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | An operation failed due to a non-existent resource.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | An operation failed due to a lack of access.
+_UnauthorizedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnauthorizedException =
+  Core._MatchServiceError
+    defaultService
+    "UnauthorizedException"
+    Prelude.. Core.hasStatus 401
diff --git a/gen/Amazonka/Amplify/Types/App.hs b/gen/Amazonka/Amplify/Types/App.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/App.hs
@@ -0,0 +1,444 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.App
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.App where
+
+import Amazonka.Amplify.Types.AutoBranchCreationConfig
+import Amazonka.Amplify.Types.CustomRule
+import Amazonka.Amplify.Types.Platform
+import Amazonka.Amplify.Types.ProductionBranch
+import Amazonka.Amplify.Types.RepositoryCloneMethod
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents the different branches of a repository for building,
+-- deploying, and hosting an Amplify app.
+--
+-- /See:/ 'newApp' smart constructor.
+data App = App'
+  { -- | Describes the automated branch creation configuration for the Amplify
+    -- app.
+    autoBranchCreationConfig :: Prelude.Maybe AutoBranchCreationConfig,
+    -- | Describes the automated branch creation glob patterns for the Amplify
+    -- app.
+    autoBranchCreationPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | The basic authorization credentials for branches for the Amplify app.
+    -- You must base64-encode the authorization credentials and provide them in
+    -- the format @user:password@.
+    basicAuthCredentials :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | Describes the content of the build specification (build spec) for the
+    -- Amplify app.
+    buildSpec :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | Describes the custom HTTP headers for the Amplify app.
+    customHeaders :: Prelude.Maybe Prelude.Text,
+    -- | Describes the custom redirect and rewrite rules for the Amplify app.
+    customRules :: Prelude.Maybe [CustomRule],
+    -- | Enables automated branch creation for the Amplify app.
+    enableAutoBranchCreation :: Prelude.Maybe Prelude.Bool,
+    -- | Automatically disconnect a branch in the Amplify Console when you delete
+    -- a branch from your Git repository.
+    enableBranchAutoDeletion :: Prelude.Maybe Prelude.Bool,
+    -- | The AWS Identity and Access Management (IAM) service role for the Amazon
+    -- Resource Name (ARN) of the Amplify app.
+    iamServiceRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | Describes the information about a production branch of the Amplify app.
+    productionBranch :: Prelude.Maybe ProductionBranch,
+    -- | This is for internal use.
+    --
+    -- The Amplify service uses this parameter to specify the authentication
+    -- protocol to use to access the Git repository for an Amplify app. Amplify
+    -- specifies @TOKEN@ for a GitHub repository, @SIGV4@ for an Amazon Web
+    -- Services CodeCommit repository, and @SSH@ for GitLab and Bitbucket
+    -- repositories.
+    repositoryCloneMethod :: Prelude.Maybe RepositoryCloneMethod,
+    -- | The tag for the Amplify app.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The unique ID of the Amplify app.
+    appId :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Amplify app.
+    appArn :: Prelude.Text,
+    -- | The name for the Amplify app.
+    name :: Prelude.Text,
+    -- | The description for the Amplify app.
+    description :: Prelude.Text,
+    -- | The Git repository for the Amplify app.
+    repository :: Prelude.Text,
+    -- | The platform for the Amplify app. For a static app, set the platform
+    -- type to @WEB@. For a dynamic server-side rendered (SSR) app, set the
+    -- platform type to @WEB_COMPUTE@. For an app requiring Amplify Hosting\'s
+    -- original SSR support only, set the platform type to @WEB_DYNAMIC@.
+    platform :: Platform,
+    -- | Creates a date and time for the Amplify app.
+    createTime :: Data.POSIX,
+    -- | Updates the date and time for the Amplify app.
+    updateTime :: Data.POSIX,
+    -- | The environment variables for the Amplify app.
+    environmentVariables :: Prelude.HashMap Prelude.Text Prelude.Text,
+    -- | The default domain for the Amplify app.
+    defaultDomain :: Prelude.Text,
+    -- | Enables the auto-building of branches for the Amplify app.
+    enableBranchAutoBuild :: Prelude.Bool,
+    -- | Enables basic authorization for the Amplify app\'s branches.
+    enableBasicAuth :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'App' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoBranchCreationConfig', 'app_autoBranchCreationConfig' - Describes the automated branch creation configuration for the Amplify
+-- app.
+--
+-- 'autoBranchCreationPatterns', 'app_autoBranchCreationPatterns' - Describes the automated branch creation glob patterns for the Amplify
+-- app.
+--
+-- 'basicAuthCredentials', 'app_basicAuthCredentials' - The basic authorization credentials for branches for the Amplify app.
+-- You must base64-encode the authorization credentials and provide them in
+-- the format @user:password@.
+--
+-- 'buildSpec', 'app_buildSpec' - Describes the content of the build specification (build spec) for the
+-- Amplify app.
+--
+-- 'customHeaders', 'app_customHeaders' - Describes the custom HTTP headers for the Amplify app.
+--
+-- 'customRules', 'app_customRules' - Describes the custom redirect and rewrite rules for the Amplify app.
+--
+-- 'enableAutoBranchCreation', 'app_enableAutoBranchCreation' - Enables automated branch creation for the Amplify app.
+--
+-- 'enableBranchAutoDeletion', 'app_enableBranchAutoDeletion' - Automatically disconnect a branch in the Amplify Console when you delete
+-- a branch from your Git repository.
+--
+-- 'iamServiceRoleArn', 'app_iamServiceRoleArn' - The AWS Identity and Access Management (IAM) service role for the Amazon
+-- Resource Name (ARN) of the Amplify app.
+--
+-- 'productionBranch', 'app_productionBranch' - Describes the information about a production branch of the Amplify app.
+--
+-- 'repositoryCloneMethod', 'app_repositoryCloneMethod' - This is for internal use.
+--
+-- The Amplify service uses this parameter to specify the authentication
+-- protocol to use to access the Git repository for an Amplify app. Amplify
+-- specifies @TOKEN@ for a GitHub repository, @SIGV4@ for an Amazon Web
+-- Services CodeCommit repository, and @SSH@ for GitLab and Bitbucket
+-- repositories.
+--
+-- 'tags', 'app_tags' - The tag for the Amplify app.
+--
+-- 'appId', 'app_appId' - The unique ID of the Amplify app.
+--
+-- 'appArn', 'app_appArn' - The Amazon Resource Name (ARN) of the Amplify app.
+--
+-- 'name', 'app_name' - The name for the Amplify app.
+--
+-- 'description', 'app_description' - The description for the Amplify app.
+--
+-- 'repository', 'app_repository' - The Git repository for the Amplify app.
+--
+-- 'platform', 'app_platform' - The platform for the Amplify app. For a static app, set the platform
+-- type to @WEB@. For a dynamic server-side rendered (SSR) app, set the
+-- platform type to @WEB_COMPUTE@. For an app requiring Amplify Hosting\'s
+-- original SSR support only, set the platform type to @WEB_DYNAMIC@.
+--
+-- 'createTime', 'app_createTime' - Creates a date and time for the Amplify app.
+--
+-- 'updateTime', 'app_updateTime' - Updates the date and time for the Amplify app.
+--
+-- 'environmentVariables', 'app_environmentVariables' - The environment variables for the Amplify app.
+--
+-- 'defaultDomain', 'app_defaultDomain' - The default domain for the Amplify app.
+--
+-- 'enableBranchAutoBuild', 'app_enableBranchAutoBuild' - Enables the auto-building of branches for the Amplify app.
+--
+-- 'enableBasicAuth', 'app_enableBasicAuth' - Enables basic authorization for the Amplify app\'s branches.
+newApp ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'appArn'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'repository'
+  Prelude.Text ->
+  -- | 'platform'
+  Platform ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  -- | 'defaultDomain'
+  Prelude.Text ->
+  -- | 'enableBranchAutoBuild'
+  Prelude.Bool ->
+  -- | 'enableBasicAuth'
+  Prelude.Bool ->
+  App
+newApp
+  pAppId_
+  pAppArn_
+  pName_
+  pDescription_
+  pRepository_
+  pPlatform_
+  pCreateTime_
+  pUpdateTime_
+  pDefaultDomain_
+  pEnableBranchAutoBuild_
+  pEnableBasicAuth_ =
+    App'
+      { autoBranchCreationConfig = Prelude.Nothing,
+        autoBranchCreationPatterns = Prelude.Nothing,
+        basicAuthCredentials = Prelude.Nothing,
+        buildSpec = Prelude.Nothing,
+        customHeaders = Prelude.Nothing,
+        customRules = Prelude.Nothing,
+        enableAutoBranchCreation = Prelude.Nothing,
+        enableBranchAutoDeletion = Prelude.Nothing,
+        iamServiceRoleArn = Prelude.Nothing,
+        productionBranch = Prelude.Nothing,
+        repositoryCloneMethod = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        appId = pAppId_,
+        appArn = pAppArn_,
+        name = pName_,
+        description = pDescription_,
+        repository = pRepository_,
+        platform = pPlatform_,
+        createTime = Data._Time Lens.# pCreateTime_,
+        updateTime = Data._Time Lens.# pUpdateTime_,
+        environmentVariables = Prelude.mempty,
+        defaultDomain = pDefaultDomain_,
+        enableBranchAutoBuild = pEnableBranchAutoBuild_,
+        enableBasicAuth = pEnableBasicAuth_
+      }
+
+-- | Describes the automated branch creation configuration for the Amplify
+-- app.
+app_autoBranchCreationConfig :: Lens.Lens' App (Prelude.Maybe AutoBranchCreationConfig)
+app_autoBranchCreationConfig = Lens.lens (\App' {autoBranchCreationConfig} -> autoBranchCreationConfig) (\s@App' {} a -> s {autoBranchCreationConfig = a} :: App)
+
+-- | Describes the automated branch creation glob patterns for the Amplify
+-- app.
+app_autoBranchCreationPatterns :: Lens.Lens' App (Prelude.Maybe [Prelude.Text])
+app_autoBranchCreationPatterns = Lens.lens (\App' {autoBranchCreationPatterns} -> autoBranchCreationPatterns) (\s@App' {} a -> s {autoBranchCreationPatterns = a} :: App) Prelude.. Lens.mapping Lens.coerced
+
+-- | The basic authorization credentials for branches for the Amplify app.
+-- You must base64-encode the authorization credentials and provide them in
+-- the format @user:password@.
+app_basicAuthCredentials :: Lens.Lens' App (Prelude.Maybe Prelude.Text)
+app_basicAuthCredentials = Lens.lens (\App' {basicAuthCredentials} -> basicAuthCredentials) (\s@App' {} a -> s {basicAuthCredentials = a} :: App) Prelude.. Lens.mapping Data._Sensitive
+
+-- | Describes the content of the build specification (build spec) for the
+-- Amplify app.
+app_buildSpec :: Lens.Lens' App (Prelude.Maybe Prelude.Text)
+app_buildSpec = Lens.lens (\App' {buildSpec} -> buildSpec) (\s@App' {} a -> s {buildSpec = a} :: App) Prelude.. Lens.mapping Data._Sensitive
+
+-- | Describes the custom HTTP headers for the Amplify app.
+app_customHeaders :: Lens.Lens' App (Prelude.Maybe Prelude.Text)
+app_customHeaders = Lens.lens (\App' {customHeaders} -> customHeaders) (\s@App' {} a -> s {customHeaders = a} :: App)
+
+-- | Describes the custom redirect and rewrite rules for the Amplify app.
+app_customRules :: Lens.Lens' App (Prelude.Maybe [CustomRule])
+app_customRules = Lens.lens (\App' {customRules} -> customRules) (\s@App' {} a -> s {customRules = a} :: App) Prelude.. Lens.mapping Lens.coerced
+
+-- | Enables automated branch creation for the Amplify app.
+app_enableAutoBranchCreation :: Lens.Lens' App (Prelude.Maybe Prelude.Bool)
+app_enableAutoBranchCreation = Lens.lens (\App' {enableAutoBranchCreation} -> enableAutoBranchCreation) (\s@App' {} a -> s {enableAutoBranchCreation = a} :: App)
+
+-- | Automatically disconnect a branch in the Amplify Console when you delete
+-- a branch from your Git repository.
+app_enableBranchAutoDeletion :: Lens.Lens' App (Prelude.Maybe Prelude.Bool)
+app_enableBranchAutoDeletion = Lens.lens (\App' {enableBranchAutoDeletion} -> enableBranchAutoDeletion) (\s@App' {} a -> s {enableBranchAutoDeletion = a} :: App)
+
+-- | The AWS Identity and Access Management (IAM) service role for the Amazon
+-- Resource Name (ARN) of the Amplify app.
+app_iamServiceRoleArn :: Lens.Lens' App (Prelude.Maybe Prelude.Text)
+app_iamServiceRoleArn = Lens.lens (\App' {iamServiceRoleArn} -> iamServiceRoleArn) (\s@App' {} a -> s {iamServiceRoleArn = a} :: App)
+
+-- | Describes the information about a production branch of the Amplify app.
+app_productionBranch :: Lens.Lens' App (Prelude.Maybe ProductionBranch)
+app_productionBranch = Lens.lens (\App' {productionBranch} -> productionBranch) (\s@App' {} a -> s {productionBranch = a} :: App)
+
+-- | This is for internal use.
+--
+-- The Amplify service uses this parameter to specify the authentication
+-- protocol to use to access the Git repository for an Amplify app. Amplify
+-- specifies @TOKEN@ for a GitHub repository, @SIGV4@ for an Amazon Web
+-- Services CodeCommit repository, and @SSH@ for GitLab and Bitbucket
+-- repositories.
+app_repositoryCloneMethod :: Lens.Lens' App (Prelude.Maybe RepositoryCloneMethod)
+app_repositoryCloneMethod = Lens.lens (\App' {repositoryCloneMethod} -> repositoryCloneMethod) (\s@App' {} a -> s {repositoryCloneMethod = a} :: App)
+
+-- | The tag for the Amplify app.
+app_tags :: Lens.Lens' App (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+app_tags = Lens.lens (\App' {tags} -> tags) (\s@App' {} a -> s {tags = a} :: App) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique ID of the Amplify app.
+app_appId :: Lens.Lens' App Prelude.Text
+app_appId = Lens.lens (\App' {appId} -> appId) (\s@App' {} a -> s {appId = a} :: App)
+
+-- | The Amazon Resource Name (ARN) of the Amplify app.
+app_appArn :: Lens.Lens' App Prelude.Text
+app_appArn = Lens.lens (\App' {appArn} -> appArn) (\s@App' {} a -> s {appArn = a} :: App)
+
+-- | The name for the Amplify app.
+app_name :: Lens.Lens' App Prelude.Text
+app_name = Lens.lens (\App' {name} -> name) (\s@App' {} a -> s {name = a} :: App)
+
+-- | The description for the Amplify app.
+app_description :: Lens.Lens' App Prelude.Text
+app_description = Lens.lens (\App' {description} -> description) (\s@App' {} a -> s {description = a} :: App)
+
+-- | The Git repository for the Amplify app.
+app_repository :: Lens.Lens' App Prelude.Text
+app_repository = Lens.lens (\App' {repository} -> repository) (\s@App' {} a -> s {repository = a} :: App)
+
+-- | The platform for the Amplify app. For a static app, set the platform
+-- type to @WEB@. For a dynamic server-side rendered (SSR) app, set the
+-- platform type to @WEB_COMPUTE@. For an app requiring Amplify Hosting\'s
+-- original SSR support only, set the platform type to @WEB_DYNAMIC@.
+app_platform :: Lens.Lens' App Platform
+app_platform = Lens.lens (\App' {platform} -> platform) (\s@App' {} a -> s {platform = a} :: App)
+
+-- | Creates a date and time for the Amplify app.
+app_createTime :: Lens.Lens' App Prelude.UTCTime
+app_createTime = Lens.lens (\App' {createTime} -> createTime) (\s@App' {} a -> s {createTime = a} :: App) Prelude.. Data._Time
+
+-- | Updates the date and time for the Amplify app.
+app_updateTime :: Lens.Lens' App Prelude.UTCTime
+app_updateTime = Lens.lens (\App' {updateTime} -> updateTime) (\s@App' {} a -> s {updateTime = a} :: App) Prelude.. Data._Time
+
+-- | The environment variables for the Amplify app.
+app_environmentVariables :: Lens.Lens' App (Prelude.HashMap Prelude.Text Prelude.Text)
+app_environmentVariables = Lens.lens (\App' {environmentVariables} -> environmentVariables) (\s@App' {} a -> s {environmentVariables = a} :: App) Prelude.. Lens.coerced
+
+-- | The default domain for the Amplify app.
+app_defaultDomain :: Lens.Lens' App Prelude.Text
+app_defaultDomain = Lens.lens (\App' {defaultDomain} -> defaultDomain) (\s@App' {} a -> s {defaultDomain = a} :: App)
+
+-- | Enables the auto-building of branches for the Amplify app.
+app_enableBranchAutoBuild :: Lens.Lens' App Prelude.Bool
+app_enableBranchAutoBuild = Lens.lens (\App' {enableBranchAutoBuild} -> enableBranchAutoBuild) (\s@App' {} a -> s {enableBranchAutoBuild = a} :: App)
+
+-- | Enables basic authorization for the Amplify app\'s branches.
+app_enableBasicAuth :: Lens.Lens' App Prelude.Bool
+app_enableBasicAuth = Lens.lens (\App' {enableBasicAuth} -> enableBasicAuth) (\s@App' {} a -> s {enableBasicAuth = a} :: App)
+
+instance Data.FromJSON App where
+  parseJSON =
+    Data.withObject
+      "App"
+      ( \x ->
+          App'
+            Prelude.<$> (x Data..:? "autoBranchCreationConfig")
+            Prelude.<*> ( x
+                            Data..:? "autoBranchCreationPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "basicAuthCredentials")
+            Prelude.<*> (x Data..:? "buildSpec")
+            Prelude.<*> (x Data..:? "customHeaders")
+            Prelude.<*> (x Data..:? "customRules" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "enableAutoBranchCreation")
+            Prelude.<*> (x Data..:? "enableBranchAutoDeletion")
+            Prelude.<*> (x Data..:? "iamServiceRoleArn")
+            Prelude.<*> (x Data..:? "productionBranch")
+            Prelude.<*> (x Data..:? "repositoryCloneMethod")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "appId")
+            Prelude.<*> (x Data..: "appArn")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "description")
+            Prelude.<*> (x Data..: "repository")
+            Prelude.<*> (x Data..: "platform")
+            Prelude.<*> (x Data..: "createTime")
+            Prelude.<*> (x Data..: "updateTime")
+            Prelude.<*> ( x
+                            Data..:? "environmentVariables"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "defaultDomain")
+            Prelude.<*> (x Data..: "enableBranchAutoBuild")
+            Prelude.<*> (x Data..: "enableBasicAuth")
+      )
+
+instance Prelude.Hashable App where
+  hashWithSalt _salt App' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoBranchCreationConfig
+      `Prelude.hashWithSalt` autoBranchCreationPatterns
+      `Prelude.hashWithSalt` basicAuthCredentials
+      `Prelude.hashWithSalt` buildSpec
+      `Prelude.hashWithSalt` customHeaders
+      `Prelude.hashWithSalt` customRules
+      `Prelude.hashWithSalt` enableAutoBranchCreation
+      `Prelude.hashWithSalt` enableBranchAutoDeletion
+      `Prelude.hashWithSalt` iamServiceRoleArn
+      `Prelude.hashWithSalt` productionBranch
+      `Prelude.hashWithSalt` repositoryCloneMethod
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` appArn
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` repository
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` updateTime
+      `Prelude.hashWithSalt` environmentVariables
+      `Prelude.hashWithSalt` defaultDomain
+      `Prelude.hashWithSalt` enableBranchAutoBuild
+      `Prelude.hashWithSalt` enableBasicAuth
+
+instance Prelude.NFData App where
+  rnf App' {..} =
+    Prelude.rnf autoBranchCreationConfig
+      `Prelude.seq` Prelude.rnf autoBranchCreationPatterns
+      `Prelude.seq` Prelude.rnf basicAuthCredentials
+      `Prelude.seq` Prelude.rnf buildSpec
+      `Prelude.seq` Prelude.rnf customHeaders
+      `Prelude.seq` Prelude.rnf customRules
+      `Prelude.seq` Prelude.rnf enableAutoBranchCreation
+      `Prelude.seq` Prelude.rnf enableBranchAutoDeletion
+      `Prelude.seq` Prelude.rnf iamServiceRoleArn
+      `Prelude.seq` Prelude.rnf productionBranch
+      `Prelude.seq` Prelude.rnf repositoryCloneMethod
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf updateTime
+      `Prelude.seq` Prelude.rnf
+        environmentVariables
+      `Prelude.seq` Prelude.rnf defaultDomain
+      `Prelude.seq` Prelude.rnf
+        enableBranchAutoBuild
+      `Prelude.seq` Prelude.rnf
+        enableBasicAuth
diff --git a/gen/Amazonka/Amplify/Types/Artifact.hs b/gen/Amazonka/Amplify/Types/Artifact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/Artifact.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.Artifact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.Artifact where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an artifact.
+--
+-- /See:/ 'newArtifact' smart constructor.
+data Artifact = Artifact'
+  { -- | The file name for the artifact.
+    artifactFileName :: Prelude.Text,
+    -- | The unique ID for the artifact.
+    artifactId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Artifact' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'artifactFileName', 'artifact_artifactFileName' - The file name for the artifact.
+--
+-- 'artifactId', 'artifact_artifactId' - The unique ID for the artifact.
+newArtifact ::
+  -- | 'artifactFileName'
+  Prelude.Text ->
+  -- | 'artifactId'
+  Prelude.Text ->
+  Artifact
+newArtifact pArtifactFileName_ pArtifactId_ =
+  Artifact'
+    { artifactFileName = pArtifactFileName_,
+      artifactId = pArtifactId_
+    }
+
+-- | The file name for the artifact.
+artifact_artifactFileName :: Lens.Lens' Artifact Prelude.Text
+artifact_artifactFileName = Lens.lens (\Artifact' {artifactFileName} -> artifactFileName) (\s@Artifact' {} a -> s {artifactFileName = a} :: Artifact)
+
+-- | The unique ID for the artifact.
+artifact_artifactId :: Lens.Lens' Artifact Prelude.Text
+artifact_artifactId = Lens.lens (\Artifact' {artifactId} -> artifactId) (\s@Artifact' {} a -> s {artifactId = a} :: Artifact)
+
+instance Data.FromJSON Artifact where
+  parseJSON =
+    Data.withObject
+      "Artifact"
+      ( \x ->
+          Artifact'
+            Prelude.<$> (x Data..: "artifactFileName")
+            Prelude.<*> (x Data..: "artifactId")
+      )
+
+instance Prelude.Hashable Artifact where
+  hashWithSalt _salt Artifact' {..} =
+    _salt
+      `Prelude.hashWithSalt` artifactFileName
+      `Prelude.hashWithSalt` artifactId
+
+instance Prelude.NFData Artifact where
+  rnf Artifact' {..} =
+    Prelude.rnf artifactFileName
+      `Prelude.seq` Prelude.rnf artifactId
diff --git a/gen/Amazonka/Amplify/Types/AutoBranchCreationConfig.hs b/gen/Amazonka/Amplify/Types/AutoBranchCreationConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/AutoBranchCreationConfig.hs
@@ -0,0 +1,230 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.AutoBranchCreationConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.AutoBranchCreationConfig where
+
+import Amazonka.Amplify.Types.Stage
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the automated branch creation configuration.
+--
+-- /See:/ 'newAutoBranchCreationConfig' smart constructor.
+data AutoBranchCreationConfig = AutoBranchCreationConfig'
+  { -- | The basic authorization credentials for the autocreated branch. You must
+    -- base64-encode the authorization credentials and provide them in the
+    -- format @user:password@.
+    basicAuthCredentials :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The build specification (build spec) for the autocreated branch.
+    buildSpec :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | Enables auto building for the autocreated branch.
+    enableAutoBuild :: Prelude.Maybe Prelude.Bool,
+    -- | Enables basic authorization for the autocreated branch.
+    enableBasicAuth :: Prelude.Maybe Prelude.Bool,
+    -- | Enables performance mode for the branch.
+    --
+    -- Performance mode optimizes for faster hosting performance by keeping
+    -- content cached at the edge for a longer interval. When performance mode
+    -- is enabled, hosting configuration or code changes can take up to 10
+    -- minutes to roll out.
+    enablePerformanceMode :: Prelude.Maybe Prelude.Bool,
+    -- | Enables pull request previews for the autocreated branch.
+    enablePullRequestPreview :: Prelude.Maybe Prelude.Bool,
+    -- | The environment variables for the autocreated branch.
+    environmentVariables :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The framework for the autocreated branch.
+    framework :: Prelude.Maybe Prelude.Text,
+    -- | The Amplify environment name for the pull request.
+    pullRequestEnvironmentName :: Prelude.Maybe Prelude.Text,
+    -- | Describes the current stage for the autocreated branch.
+    stage :: Prelude.Maybe Stage
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AutoBranchCreationConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'basicAuthCredentials', 'autoBranchCreationConfig_basicAuthCredentials' - The basic authorization credentials for the autocreated branch. You must
+-- base64-encode the authorization credentials and provide them in the
+-- format @user:password@.
+--
+-- 'buildSpec', 'autoBranchCreationConfig_buildSpec' - The build specification (build spec) for the autocreated branch.
+--
+-- 'enableAutoBuild', 'autoBranchCreationConfig_enableAutoBuild' - Enables auto building for the autocreated branch.
+--
+-- 'enableBasicAuth', 'autoBranchCreationConfig_enableBasicAuth' - Enables basic authorization for the autocreated branch.
+--
+-- 'enablePerformanceMode', 'autoBranchCreationConfig_enablePerformanceMode' - Enables performance mode for the branch.
+--
+-- Performance mode optimizes for faster hosting performance by keeping
+-- content cached at the edge for a longer interval. When performance mode
+-- is enabled, hosting configuration or code changes can take up to 10
+-- minutes to roll out.
+--
+-- 'enablePullRequestPreview', 'autoBranchCreationConfig_enablePullRequestPreview' - Enables pull request previews for the autocreated branch.
+--
+-- 'environmentVariables', 'autoBranchCreationConfig_environmentVariables' - The environment variables for the autocreated branch.
+--
+-- 'framework', 'autoBranchCreationConfig_framework' - The framework for the autocreated branch.
+--
+-- 'pullRequestEnvironmentName', 'autoBranchCreationConfig_pullRequestEnvironmentName' - The Amplify environment name for the pull request.
+--
+-- 'stage', 'autoBranchCreationConfig_stage' - Describes the current stage for the autocreated branch.
+newAutoBranchCreationConfig ::
+  AutoBranchCreationConfig
+newAutoBranchCreationConfig =
+  AutoBranchCreationConfig'
+    { basicAuthCredentials =
+        Prelude.Nothing,
+      buildSpec = Prelude.Nothing,
+      enableAutoBuild = Prelude.Nothing,
+      enableBasicAuth = Prelude.Nothing,
+      enablePerformanceMode = Prelude.Nothing,
+      enablePullRequestPreview = Prelude.Nothing,
+      environmentVariables = Prelude.Nothing,
+      framework = Prelude.Nothing,
+      pullRequestEnvironmentName = Prelude.Nothing,
+      stage = Prelude.Nothing
+    }
+
+-- | The basic authorization credentials for the autocreated branch. You must
+-- base64-encode the authorization credentials and provide them in the
+-- format @user:password@.
+autoBranchCreationConfig_basicAuthCredentials :: Lens.Lens' AutoBranchCreationConfig (Prelude.Maybe Prelude.Text)
+autoBranchCreationConfig_basicAuthCredentials = Lens.lens (\AutoBranchCreationConfig' {basicAuthCredentials} -> basicAuthCredentials) (\s@AutoBranchCreationConfig' {} a -> s {basicAuthCredentials = a} :: AutoBranchCreationConfig) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The build specification (build spec) for the autocreated branch.
+autoBranchCreationConfig_buildSpec :: Lens.Lens' AutoBranchCreationConfig (Prelude.Maybe Prelude.Text)
+autoBranchCreationConfig_buildSpec = Lens.lens (\AutoBranchCreationConfig' {buildSpec} -> buildSpec) (\s@AutoBranchCreationConfig' {} a -> s {buildSpec = a} :: AutoBranchCreationConfig) Prelude.. Lens.mapping Data._Sensitive
+
+-- | Enables auto building for the autocreated branch.
+autoBranchCreationConfig_enableAutoBuild :: Lens.Lens' AutoBranchCreationConfig (Prelude.Maybe Prelude.Bool)
+autoBranchCreationConfig_enableAutoBuild = Lens.lens (\AutoBranchCreationConfig' {enableAutoBuild} -> enableAutoBuild) (\s@AutoBranchCreationConfig' {} a -> s {enableAutoBuild = a} :: AutoBranchCreationConfig)
+
+-- | Enables basic authorization for the autocreated branch.
+autoBranchCreationConfig_enableBasicAuth :: Lens.Lens' AutoBranchCreationConfig (Prelude.Maybe Prelude.Bool)
+autoBranchCreationConfig_enableBasicAuth = Lens.lens (\AutoBranchCreationConfig' {enableBasicAuth} -> enableBasicAuth) (\s@AutoBranchCreationConfig' {} a -> s {enableBasicAuth = a} :: AutoBranchCreationConfig)
+
+-- | Enables performance mode for the branch.
+--
+-- Performance mode optimizes for faster hosting performance by keeping
+-- content cached at the edge for a longer interval. When performance mode
+-- is enabled, hosting configuration or code changes can take up to 10
+-- minutes to roll out.
+autoBranchCreationConfig_enablePerformanceMode :: Lens.Lens' AutoBranchCreationConfig (Prelude.Maybe Prelude.Bool)
+autoBranchCreationConfig_enablePerformanceMode = Lens.lens (\AutoBranchCreationConfig' {enablePerformanceMode} -> enablePerformanceMode) (\s@AutoBranchCreationConfig' {} a -> s {enablePerformanceMode = a} :: AutoBranchCreationConfig)
+
+-- | Enables pull request previews for the autocreated branch.
+autoBranchCreationConfig_enablePullRequestPreview :: Lens.Lens' AutoBranchCreationConfig (Prelude.Maybe Prelude.Bool)
+autoBranchCreationConfig_enablePullRequestPreview = Lens.lens (\AutoBranchCreationConfig' {enablePullRequestPreview} -> enablePullRequestPreview) (\s@AutoBranchCreationConfig' {} a -> s {enablePullRequestPreview = a} :: AutoBranchCreationConfig)
+
+-- | The environment variables for the autocreated branch.
+autoBranchCreationConfig_environmentVariables :: Lens.Lens' AutoBranchCreationConfig (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+autoBranchCreationConfig_environmentVariables = Lens.lens (\AutoBranchCreationConfig' {environmentVariables} -> environmentVariables) (\s@AutoBranchCreationConfig' {} a -> s {environmentVariables = a} :: AutoBranchCreationConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The framework for the autocreated branch.
+autoBranchCreationConfig_framework :: Lens.Lens' AutoBranchCreationConfig (Prelude.Maybe Prelude.Text)
+autoBranchCreationConfig_framework = Lens.lens (\AutoBranchCreationConfig' {framework} -> framework) (\s@AutoBranchCreationConfig' {} a -> s {framework = a} :: AutoBranchCreationConfig)
+
+-- | The Amplify environment name for the pull request.
+autoBranchCreationConfig_pullRequestEnvironmentName :: Lens.Lens' AutoBranchCreationConfig (Prelude.Maybe Prelude.Text)
+autoBranchCreationConfig_pullRequestEnvironmentName = Lens.lens (\AutoBranchCreationConfig' {pullRequestEnvironmentName} -> pullRequestEnvironmentName) (\s@AutoBranchCreationConfig' {} a -> s {pullRequestEnvironmentName = a} :: AutoBranchCreationConfig)
+
+-- | Describes the current stage for the autocreated branch.
+autoBranchCreationConfig_stage :: Lens.Lens' AutoBranchCreationConfig (Prelude.Maybe Stage)
+autoBranchCreationConfig_stage = Lens.lens (\AutoBranchCreationConfig' {stage} -> stage) (\s@AutoBranchCreationConfig' {} a -> s {stage = a} :: AutoBranchCreationConfig)
+
+instance Data.FromJSON AutoBranchCreationConfig where
+  parseJSON =
+    Data.withObject
+      "AutoBranchCreationConfig"
+      ( \x ->
+          AutoBranchCreationConfig'
+            Prelude.<$> (x Data..:? "basicAuthCredentials")
+            Prelude.<*> (x Data..:? "buildSpec")
+            Prelude.<*> (x Data..:? "enableAutoBuild")
+            Prelude.<*> (x Data..:? "enableBasicAuth")
+            Prelude.<*> (x Data..:? "enablePerformanceMode")
+            Prelude.<*> (x Data..:? "enablePullRequestPreview")
+            Prelude.<*> ( x
+                            Data..:? "environmentVariables"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "framework")
+            Prelude.<*> (x Data..:? "pullRequestEnvironmentName")
+            Prelude.<*> (x Data..:? "stage")
+      )
+
+instance Prelude.Hashable AutoBranchCreationConfig where
+  hashWithSalt _salt AutoBranchCreationConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` basicAuthCredentials
+      `Prelude.hashWithSalt` buildSpec
+      `Prelude.hashWithSalt` enableAutoBuild
+      `Prelude.hashWithSalt` enableBasicAuth
+      `Prelude.hashWithSalt` enablePerformanceMode
+      `Prelude.hashWithSalt` enablePullRequestPreview
+      `Prelude.hashWithSalt` environmentVariables
+      `Prelude.hashWithSalt` framework
+      `Prelude.hashWithSalt` pullRequestEnvironmentName
+      `Prelude.hashWithSalt` stage
+
+instance Prelude.NFData AutoBranchCreationConfig where
+  rnf AutoBranchCreationConfig' {..} =
+    Prelude.rnf basicAuthCredentials
+      `Prelude.seq` Prelude.rnf buildSpec
+      `Prelude.seq` Prelude.rnf enableAutoBuild
+      `Prelude.seq` Prelude.rnf enableBasicAuth
+      `Prelude.seq` Prelude.rnf enablePerformanceMode
+      `Prelude.seq` Prelude.rnf enablePullRequestPreview
+      `Prelude.seq` Prelude.rnf environmentVariables
+      `Prelude.seq` Prelude.rnf framework
+      `Prelude.seq` Prelude.rnf pullRequestEnvironmentName
+      `Prelude.seq` Prelude.rnf stage
+
+instance Data.ToJSON AutoBranchCreationConfig where
+  toJSON AutoBranchCreationConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("basicAuthCredentials" Data..=)
+              Prelude.<$> basicAuthCredentials,
+            ("buildSpec" Data..=) Prelude.<$> buildSpec,
+            ("enableAutoBuild" Data..=)
+              Prelude.<$> enableAutoBuild,
+            ("enableBasicAuth" Data..=)
+              Prelude.<$> enableBasicAuth,
+            ("enablePerformanceMode" Data..=)
+              Prelude.<$> enablePerformanceMode,
+            ("enablePullRequestPreview" Data..=)
+              Prelude.<$> enablePullRequestPreview,
+            ("environmentVariables" Data..=)
+              Prelude.<$> environmentVariables,
+            ("framework" Data..=) Prelude.<$> framework,
+            ("pullRequestEnvironmentName" Data..=)
+              Prelude.<$> pullRequestEnvironmentName,
+            ("stage" Data..=) Prelude.<$> stage
+          ]
+      )
diff --git a/gen/Amazonka/Amplify/Types/BackendEnvironment.hs b/gen/Amazonka/Amplify/Types/BackendEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/BackendEnvironment.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.BackendEnvironment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.BackendEnvironment where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the backend environment for an Amplify app.
+--
+-- /See:/ 'newBackendEnvironment' smart constructor.
+data BackendEnvironment = BackendEnvironment'
+  { -- | The name of deployment artifacts.
+    deploymentArtifacts :: Prelude.Maybe Prelude.Text,
+    -- | The AWS CloudFormation stack name of a backend environment.
+    stackName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) for a backend environment that is part of
+    -- an Amplify app.
+    backendEnvironmentArn :: Prelude.Text,
+    -- | The name for a backend environment that is part of an Amplify app.
+    environmentName :: Prelude.Text,
+    -- | The creation date and time for a backend environment that is part of an
+    -- Amplify app.
+    createTime :: Data.POSIX,
+    -- | The last updated date and time for a backend environment that is part of
+    -- an Amplify app.
+    updateTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BackendEnvironment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deploymentArtifacts', 'backendEnvironment_deploymentArtifacts' - The name of deployment artifacts.
+--
+-- 'stackName', 'backendEnvironment_stackName' - The AWS CloudFormation stack name of a backend environment.
+--
+-- 'backendEnvironmentArn', 'backendEnvironment_backendEnvironmentArn' - The Amazon Resource Name (ARN) for a backend environment that is part of
+-- an Amplify app.
+--
+-- 'environmentName', 'backendEnvironment_environmentName' - The name for a backend environment that is part of an Amplify app.
+--
+-- 'createTime', 'backendEnvironment_createTime' - The creation date and time for a backend environment that is part of an
+-- Amplify app.
+--
+-- 'updateTime', 'backendEnvironment_updateTime' - The last updated date and time for a backend environment that is part of
+-- an Amplify app.
+newBackendEnvironment ::
+  -- | 'backendEnvironmentArn'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  BackendEnvironment
+newBackendEnvironment
+  pBackendEnvironmentArn_
+  pEnvironmentName_
+  pCreateTime_
+  pUpdateTime_ =
+    BackendEnvironment'
+      { deploymentArtifacts =
+          Prelude.Nothing,
+        stackName = Prelude.Nothing,
+        backendEnvironmentArn = pBackendEnvironmentArn_,
+        environmentName = pEnvironmentName_,
+        createTime = Data._Time Lens.# pCreateTime_,
+        updateTime = Data._Time Lens.# pUpdateTime_
+      }
+
+-- | The name of deployment artifacts.
+backendEnvironment_deploymentArtifacts :: Lens.Lens' BackendEnvironment (Prelude.Maybe Prelude.Text)
+backendEnvironment_deploymentArtifacts = Lens.lens (\BackendEnvironment' {deploymentArtifacts} -> deploymentArtifacts) (\s@BackendEnvironment' {} a -> s {deploymentArtifacts = a} :: BackendEnvironment)
+
+-- | The AWS CloudFormation stack name of a backend environment.
+backendEnvironment_stackName :: Lens.Lens' BackendEnvironment (Prelude.Maybe Prelude.Text)
+backendEnvironment_stackName = Lens.lens (\BackendEnvironment' {stackName} -> stackName) (\s@BackendEnvironment' {} a -> s {stackName = a} :: BackendEnvironment)
+
+-- | The Amazon Resource Name (ARN) for a backend environment that is part of
+-- an Amplify app.
+backendEnvironment_backendEnvironmentArn :: Lens.Lens' BackendEnvironment Prelude.Text
+backendEnvironment_backendEnvironmentArn = Lens.lens (\BackendEnvironment' {backendEnvironmentArn} -> backendEnvironmentArn) (\s@BackendEnvironment' {} a -> s {backendEnvironmentArn = a} :: BackendEnvironment)
+
+-- | The name for a backend environment that is part of an Amplify app.
+backendEnvironment_environmentName :: Lens.Lens' BackendEnvironment Prelude.Text
+backendEnvironment_environmentName = Lens.lens (\BackendEnvironment' {environmentName} -> environmentName) (\s@BackendEnvironment' {} a -> s {environmentName = a} :: BackendEnvironment)
+
+-- | The creation date and time for a backend environment that is part of an
+-- Amplify app.
+backendEnvironment_createTime :: Lens.Lens' BackendEnvironment Prelude.UTCTime
+backendEnvironment_createTime = Lens.lens (\BackendEnvironment' {createTime} -> createTime) (\s@BackendEnvironment' {} a -> s {createTime = a} :: BackendEnvironment) Prelude.. Data._Time
+
+-- | The last updated date and time for a backend environment that is part of
+-- an Amplify app.
+backendEnvironment_updateTime :: Lens.Lens' BackendEnvironment Prelude.UTCTime
+backendEnvironment_updateTime = Lens.lens (\BackendEnvironment' {updateTime} -> updateTime) (\s@BackendEnvironment' {} a -> s {updateTime = a} :: BackendEnvironment) Prelude.. Data._Time
+
+instance Data.FromJSON BackendEnvironment where
+  parseJSON =
+    Data.withObject
+      "BackendEnvironment"
+      ( \x ->
+          BackendEnvironment'
+            Prelude.<$> (x Data..:? "deploymentArtifacts")
+            Prelude.<*> (x Data..:? "stackName")
+            Prelude.<*> (x Data..: "backendEnvironmentArn")
+            Prelude.<*> (x Data..: "environmentName")
+            Prelude.<*> (x Data..: "createTime")
+            Prelude.<*> (x Data..: "updateTime")
+      )
+
+instance Prelude.Hashable BackendEnvironment where
+  hashWithSalt _salt BackendEnvironment' {..} =
+    _salt
+      `Prelude.hashWithSalt` deploymentArtifacts
+      `Prelude.hashWithSalt` stackName
+      `Prelude.hashWithSalt` backendEnvironmentArn
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` updateTime
+
+instance Prelude.NFData BackendEnvironment where
+  rnf BackendEnvironment' {..} =
+    Prelude.rnf deploymentArtifacts
+      `Prelude.seq` Prelude.rnf stackName
+      `Prelude.seq` Prelude.rnf backendEnvironmentArn
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Amplify/Types/Branch.hs b/gen/Amazonka/Amplify/Types/Branch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/Branch.hs
@@ -0,0 +1,477 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.Branch
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.Branch where
+
+import Amazonka.Amplify.Types.Stage
+import qualified 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 branch for an Amplify app, which maps to a third-party repository
+-- branch.
+--
+-- /See:/ 'newBranch' smart constructor.
+data Branch = Branch'
+  { -- | A list of custom resources that are linked to this branch.
+    associatedResources :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) for a backend environment that is part of
+    -- an Amplify app.
+    backendEnvironmentArn :: Prelude.Maybe Prelude.Text,
+    -- | The basic authorization credentials for a branch of an Amplify app. You
+    -- must base64-encode the authorization credentials and provide them in the
+    -- format @user:password@.
+    basicAuthCredentials :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The build specification (build spec) content for the branch of an
+    -- Amplify app.
+    buildSpec :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The destination branch if the branch is a pull request branch.
+    destinationBranch :: Prelude.Maybe Prelude.Text,
+    -- | Enables performance mode for the branch.
+    --
+    -- Performance mode optimizes for faster hosting performance by keeping
+    -- content cached at the edge for a longer interval. When performance mode
+    -- is enabled, hosting configuration or code changes can take up to 10
+    -- minutes to roll out.
+    enablePerformanceMode :: Prelude.Maybe Prelude.Bool,
+    -- | The Amplify environment name for the pull request.
+    pullRequestEnvironmentName :: Prelude.Maybe Prelude.Text,
+    -- | The source branch if the branch is a pull request branch.
+    sourceBranch :: Prelude.Maybe Prelude.Text,
+    -- | The tag for the branch of an Amplify app.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The thumbnail URL for the branch of an Amplify app.
+    thumbnailUrl :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) for a branch that is part of an Amplify
+    -- app.
+    branchArn :: Prelude.Text,
+    -- | The name for the branch that is part of an Amplify app.
+    branchName :: Prelude.Text,
+    -- | The description for the branch that is part of an Amplify app.
+    description :: Prelude.Text,
+    -- | The current stage for the branch that is part of an Amplify app.
+    stage :: Stage,
+    -- | The display name for the branch. This is used as the default domain
+    -- prefix.
+    displayName :: Prelude.Text,
+    -- | Enables notifications for a branch that is part of an Amplify app.
+    enableNotification :: Prelude.Bool,
+    -- | The creation date and time for a branch that is part of an Amplify app.
+    createTime :: Data.POSIX,
+    -- | The last updated date and time for a branch that is part of an Amplify
+    -- app.
+    updateTime :: Data.POSIX,
+    -- | The environment variables specific to a branch of an Amplify app.
+    environmentVariables :: Prelude.HashMap Prelude.Text Prelude.Text,
+    -- | Enables auto-building on push for a branch of an Amplify app.
+    enableAutoBuild :: Prelude.Bool,
+    -- | The custom domains for a branch of an Amplify app.
+    customDomains :: [Prelude.Text],
+    -- | The framework for a branch of an Amplify app.
+    framework :: Prelude.Text,
+    -- | The ID of the active job for a branch of an Amplify app.
+    activeJobId :: Prelude.Text,
+    -- | The total number of jobs that are part of an Amplify app.
+    totalNumberOfJobs :: Prelude.Text,
+    -- | Enables basic authorization for a branch of an Amplify app.
+    enableBasicAuth :: Prelude.Bool,
+    -- | The content Time to Live (TTL) for the website in seconds.
+    ttl :: Prelude.Text,
+    -- | Enables pull request previews for the branch.
+    enablePullRequestPreview :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Branch' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associatedResources', 'branch_associatedResources' - A list of custom resources that are linked to this branch.
+--
+-- 'backendEnvironmentArn', 'branch_backendEnvironmentArn' - The Amazon Resource Name (ARN) for a backend environment that is part of
+-- an Amplify app.
+--
+-- 'basicAuthCredentials', 'branch_basicAuthCredentials' - The basic authorization credentials for a branch of an Amplify app. You
+-- must base64-encode the authorization credentials and provide them in the
+-- format @user:password@.
+--
+-- 'buildSpec', 'branch_buildSpec' - The build specification (build spec) content for the branch of an
+-- Amplify app.
+--
+-- 'destinationBranch', 'branch_destinationBranch' - The destination branch if the branch is a pull request branch.
+--
+-- 'enablePerformanceMode', 'branch_enablePerformanceMode' - Enables performance mode for the branch.
+--
+-- Performance mode optimizes for faster hosting performance by keeping
+-- content cached at the edge for a longer interval. When performance mode
+-- is enabled, hosting configuration or code changes can take up to 10
+-- minutes to roll out.
+--
+-- 'pullRequestEnvironmentName', 'branch_pullRequestEnvironmentName' - The Amplify environment name for the pull request.
+--
+-- 'sourceBranch', 'branch_sourceBranch' - The source branch if the branch is a pull request branch.
+--
+-- 'tags', 'branch_tags' - The tag for the branch of an Amplify app.
+--
+-- 'thumbnailUrl', 'branch_thumbnailUrl' - The thumbnail URL for the branch of an Amplify app.
+--
+-- 'branchArn', 'branch_branchArn' - The Amazon Resource Name (ARN) for a branch that is part of an Amplify
+-- app.
+--
+-- 'branchName', 'branch_branchName' - The name for the branch that is part of an Amplify app.
+--
+-- 'description', 'branch_description' - The description for the branch that is part of an Amplify app.
+--
+-- 'stage', 'branch_stage' - The current stage for the branch that is part of an Amplify app.
+--
+-- 'displayName', 'branch_displayName' - The display name for the branch. This is used as the default domain
+-- prefix.
+--
+-- 'enableNotification', 'branch_enableNotification' - Enables notifications for a branch that is part of an Amplify app.
+--
+-- 'createTime', 'branch_createTime' - The creation date and time for a branch that is part of an Amplify app.
+--
+-- 'updateTime', 'branch_updateTime' - The last updated date and time for a branch that is part of an Amplify
+-- app.
+--
+-- 'environmentVariables', 'branch_environmentVariables' - The environment variables specific to a branch of an Amplify app.
+--
+-- 'enableAutoBuild', 'branch_enableAutoBuild' - Enables auto-building on push for a branch of an Amplify app.
+--
+-- 'customDomains', 'branch_customDomains' - The custom domains for a branch of an Amplify app.
+--
+-- 'framework', 'branch_framework' - The framework for a branch of an Amplify app.
+--
+-- 'activeJobId', 'branch_activeJobId' - The ID of the active job for a branch of an Amplify app.
+--
+-- 'totalNumberOfJobs', 'branch_totalNumberOfJobs' - The total number of jobs that are part of an Amplify app.
+--
+-- 'enableBasicAuth', 'branch_enableBasicAuth' - Enables basic authorization for a branch of an Amplify app.
+--
+-- 'ttl', 'branch_ttl' - The content Time to Live (TTL) for the website in seconds.
+--
+-- 'enablePullRequestPreview', 'branch_enablePullRequestPreview' - Enables pull request previews for the branch.
+newBranch ::
+  -- | 'branchArn'
+  Prelude.Text ->
+  -- | 'branchName'
+  Prelude.Text ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'stage'
+  Stage ->
+  -- | 'displayName'
+  Prelude.Text ->
+  -- | 'enableNotification'
+  Prelude.Bool ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  -- | 'enableAutoBuild'
+  Prelude.Bool ->
+  -- | 'framework'
+  Prelude.Text ->
+  -- | 'activeJobId'
+  Prelude.Text ->
+  -- | 'totalNumberOfJobs'
+  Prelude.Text ->
+  -- | 'enableBasicAuth'
+  Prelude.Bool ->
+  -- | 'ttl'
+  Prelude.Text ->
+  -- | 'enablePullRequestPreview'
+  Prelude.Bool ->
+  Branch
+newBranch
+  pBranchArn_
+  pBranchName_
+  pDescription_
+  pStage_
+  pDisplayName_
+  pEnableNotification_
+  pCreateTime_
+  pUpdateTime_
+  pEnableAutoBuild_
+  pFramework_
+  pActiveJobId_
+  pTotalNumberOfJobs_
+  pEnableBasicAuth_
+  pTtl_
+  pEnablePullRequestPreview_ =
+    Branch'
+      { associatedResources = Prelude.Nothing,
+        backendEnvironmentArn = Prelude.Nothing,
+        basicAuthCredentials = Prelude.Nothing,
+        buildSpec = Prelude.Nothing,
+        destinationBranch = Prelude.Nothing,
+        enablePerformanceMode = Prelude.Nothing,
+        pullRequestEnvironmentName = Prelude.Nothing,
+        sourceBranch = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        thumbnailUrl = Prelude.Nothing,
+        branchArn = pBranchArn_,
+        branchName = pBranchName_,
+        description = pDescription_,
+        stage = pStage_,
+        displayName = pDisplayName_,
+        enableNotification = pEnableNotification_,
+        createTime = Data._Time Lens.# pCreateTime_,
+        updateTime = Data._Time Lens.# pUpdateTime_,
+        environmentVariables = Prelude.mempty,
+        enableAutoBuild = pEnableAutoBuild_,
+        customDomains = Prelude.mempty,
+        framework = pFramework_,
+        activeJobId = pActiveJobId_,
+        totalNumberOfJobs = pTotalNumberOfJobs_,
+        enableBasicAuth = pEnableBasicAuth_,
+        ttl = pTtl_,
+        enablePullRequestPreview =
+          pEnablePullRequestPreview_
+      }
+
+-- | A list of custom resources that are linked to this branch.
+branch_associatedResources :: Lens.Lens' Branch (Prelude.Maybe [Prelude.Text])
+branch_associatedResources = Lens.lens (\Branch' {associatedResources} -> associatedResources) (\s@Branch' {} a -> s {associatedResources = a} :: Branch) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) for a backend environment that is part of
+-- an Amplify app.
+branch_backendEnvironmentArn :: Lens.Lens' Branch (Prelude.Maybe Prelude.Text)
+branch_backendEnvironmentArn = Lens.lens (\Branch' {backendEnvironmentArn} -> backendEnvironmentArn) (\s@Branch' {} a -> s {backendEnvironmentArn = a} :: Branch)
+
+-- | The basic authorization credentials for a branch of an Amplify app. You
+-- must base64-encode the authorization credentials and provide them in the
+-- format @user:password@.
+branch_basicAuthCredentials :: Lens.Lens' Branch (Prelude.Maybe Prelude.Text)
+branch_basicAuthCredentials = Lens.lens (\Branch' {basicAuthCredentials} -> basicAuthCredentials) (\s@Branch' {} a -> s {basicAuthCredentials = a} :: Branch) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The build specification (build spec) content for the branch of an
+-- Amplify app.
+branch_buildSpec :: Lens.Lens' Branch (Prelude.Maybe Prelude.Text)
+branch_buildSpec = Lens.lens (\Branch' {buildSpec} -> buildSpec) (\s@Branch' {} a -> s {buildSpec = a} :: Branch) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The destination branch if the branch is a pull request branch.
+branch_destinationBranch :: Lens.Lens' Branch (Prelude.Maybe Prelude.Text)
+branch_destinationBranch = Lens.lens (\Branch' {destinationBranch} -> destinationBranch) (\s@Branch' {} a -> s {destinationBranch = a} :: Branch)
+
+-- | Enables performance mode for the branch.
+--
+-- Performance mode optimizes for faster hosting performance by keeping
+-- content cached at the edge for a longer interval. When performance mode
+-- is enabled, hosting configuration or code changes can take up to 10
+-- minutes to roll out.
+branch_enablePerformanceMode :: Lens.Lens' Branch (Prelude.Maybe Prelude.Bool)
+branch_enablePerformanceMode = Lens.lens (\Branch' {enablePerformanceMode} -> enablePerformanceMode) (\s@Branch' {} a -> s {enablePerformanceMode = a} :: Branch)
+
+-- | The Amplify environment name for the pull request.
+branch_pullRequestEnvironmentName :: Lens.Lens' Branch (Prelude.Maybe Prelude.Text)
+branch_pullRequestEnvironmentName = Lens.lens (\Branch' {pullRequestEnvironmentName} -> pullRequestEnvironmentName) (\s@Branch' {} a -> s {pullRequestEnvironmentName = a} :: Branch)
+
+-- | The source branch if the branch is a pull request branch.
+branch_sourceBranch :: Lens.Lens' Branch (Prelude.Maybe Prelude.Text)
+branch_sourceBranch = Lens.lens (\Branch' {sourceBranch} -> sourceBranch) (\s@Branch' {} a -> s {sourceBranch = a} :: Branch)
+
+-- | The tag for the branch of an Amplify app.
+branch_tags :: Lens.Lens' Branch (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+branch_tags = Lens.lens (\Branch' {tags} -> tags) (\s@Branch' {} a -> s {tags = a} :: Branch) Prelude.. Lens.mapping Lens.coerced
+
+-- | The thumbnail URL for the branch of an Amplify app.
+branch_thumbnailUrl :: Lens.Lens' Branch (Prelude.Maybe Prelude.Text)
+branch_thumbnailUrl = Lens.lens (\Branch' {thumbnailUrl} -> thumbnailUrl) (\s@Branch' {} a -> s {thumbnailUrl = a} :: Branch)
+
+-- | The Amazon Resource Name (ARN) for a branch that is part of an Amplify
+-- app.
+branch_branchArn :: Lens.Lens' Branch Prelude.Text
+branch_branchArn = Lens.lens (\Branch' {branchArn} -> branchArn) (\s@Branch' {} a -> s {branchArn = a} :: Branch)
+
+-- | The name for the branch that is part of an Amplify app.
+branch_branchName :: Lens.Lens' Branch Prelude.Text
+branch_branchName = Lens.lens (\Branch' {branchName} -> branchName) (\s@Branch' {} a -> s {branchName = a} :: Branch)
+
+-- | The description for the branch that is part of an Amplify app.
+branch_description :: Lens.Lens' Branch Prelude.Text
+branch_description = Lens.lens (\Branch' {description} -> description) (\s@Branch' {} a -> s {description = a} :: Branch)
+
+-- | The current stage for the branch that is part of an Amplify app.
+branch_stage :: Lens.Lens' Branch Stage
+branch_stage = Lens.lens (\Branch' {stage} -> stage) (\s@Branch' {} a -> s {stage = a} :: Branch)
+
+-- | The display name for the branch. This is used as the default domain
+-- prefix.
+branch_displayName :: Lens.Lens' Branch Prelude.Text
+branch_displayName = Lens.lens (\Branch' {displayName} -> displayName) (\s@Branch' {} a -> s {displayName = a} :: Branch)
+
+-- | Enables notifications for a branch that is part of an Amplify app.
+branch_enableNotification :: Lens.Lens' Branch Prelude.Bool
+branch_enableNotification = Lens.lens (\Branch' {enableNotification} -> enableNotification) (\s@Branch' {} a -> s {enableNotification = a} :: Branch)
+
+-- | The creation date and time for a branch that is part of an Amplify app.
+branch_createTime :: Lens.Lens' Branch Prelude.UTCTime
+branch_createTime = Lens.lens (\Branch' {createTime} -> createTime) (\s@Branch' {} a -> s {createTime = a} :: Branch) Prelude.. Data._Time
+
+-- | The last updated date and time for a branch that is part of an Amplify
+-- app.
+branch_updateTime :: Lens.Lens' Branch Prelude.UTCTime
+branch_updateTime = Lens.lens (\Branch' {updateTime} -> updateTime) (\s@Branch' {} a -> s {updateTime = a} :: Branch) Prelude.. Data._Time
+
+-- | The environment variables specific to a branch of an Amplify app.
+branch_environmentVariables :: Lens.Lens' Branch (Prelude.HashMap Prelude.Text Prelude.Text)
+branch_environmentVariables = Lens.lens (\Branch' {environmentVariables} -> environmentVariables) (\s@Branch' {} a -> s {environmentVariables = a} :: Branch) Prelude.. Lens.coerced
+
+-- | Enables auto-building on push for a branch of an Amplify app.
+branch_enableAutoBuild :: Lens.Lens' Branch Prelude.Bool
+branch_enableAutoBuild = Lens.lens (\Branch' {enableAutoBuild} -> enableAutoBuild) (\s@Branch' {} a -> s {enableAutoBuild = a} :: Branch)
+
+-- | The custom domains for a branch of an Amplify app.
+branch_customDomains :: Lens.Lens' Branch [Prelude.Text]
+branch_customDomains = Lens.lens (\Branch' {customDomains} -> customDomains) (\s@Branch' {} a -> s {customDomains = a} :: Branch) Prelude.. Lens.coerced
+
+-- | The framework for a branch of an Amplify app.
+branch_framework :: Lens.Lens' Branch Prelude.Text
+branch_framework = Lens.lens (\Branch' {framework} -> framework) (\s@Branch' {} a -> s {framework = a} :: Branch)
+
+-- | The ID of the active job for a branch of an Amplify app.
+branch_activeJobId :: Lens.Lens' Branch Prelude.Text
+branch_activeJobId = Lens.lens (\Branch' {activeJobId} -> activeJobId) (\s@Branch' {} a -> s {activeJobId = a} :: Branch)
+
+-- | The total number of jobs that are part of an Amplify app.
+branch_totalNumberOfJobs :: Lens.Lens' Branch Prelude.Text
+branch_totalNumberOfJobs = Lens.lens (\Branch' {totalNumberOfJobs} -> totalNumberOfJobs) (\s@Branch' {} a -> s {totalNumberOfJobs = a} :: Branch)
+
+-- | Enables basic authorization for a branch of an Amplify app.
+branch_enableBasicAuth :: Lens.Lens' Branch Prelude.Bool
+branch_enableBasicAuth = Lens.lens (\Branch' {enableBasicAuth} -> enableBasicAuth) (\s@Branch' {} a -> s {enableBasicAuth = a} :: Branch)
+
+-- | The content Time to Live (TTL) for the website in seconds.
+branch_ttl :: Lens.Lens' Branch Prelude.Text
+branch_ttl = Lens.lens (\Branch' {ttl} -> ttl) (\s@Branch' {} a -> s {ttl = a} :: Branch)
+
+-- | Enables pull request previews for the branch.
+branch_enablePullRequestPreview :: Lens.Lens' Branch Prelude.Bool
+branch_enablePullRequestPreview = Lens.lens (\Branch' {enablePullRequestPreview} -> enablePullRequestPreview) (\s@Branch' {} a -> s {enablePullRequestPreview = a} :: Branch)
+
+instance Data.FromJSON Branch where
+  parseJSON =
+    Data.withObject
+      "Branch"
+      ( \x ->
+          Branch'
+            Prelude.<$> ( x
+                            Data..:? "associatedResources"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "backendEnvironmentArn")
+            Prelude.<*> (x Data..:? "basicAuthCredentials")
+            Prelude.<*> (x Data..:? "buildSpec")
+            Prelude.<*> (x Data..:? "destinationBranch")
+            Prelude.<*> (x Data..:? "enablePerformanceMode")
+            Prelude.<*> (x Data..:? "pullRequestEnvironmentName")
+            Prelude.<*> (x Data..:? "sourceBranch")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "thumbnailUrl")
+            Prelude.<*> (x Data..: "branchArn")
+            Prelude.<*> (x Data..: "branchName")
+            Prelude.<*> (x Data..: "description")
+            Prelude.<*> (x Data..: "stage")
+            Prelude.<*> (x Data..: "displayName")
+            Prelude.<*> (x Data..: "enableNotification")
+            Prelude.<*> (x Data..: "createTime")
+            Prelude.<*> (x Data..: "updateTime")
+            Prelude.<*> ( x
+                            Data..:? "environmentVariables"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "enableAutoBuild")
+            Prelude.<*> (x Data..:? "customDomains" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "framework")
+            Prelude.<*> (x Data..: "activeJobId")
+            Prelude.<*> (x Data..: "totalNumberOfJobs")
+            Prelude.<*> (x Data..: "enableBasicAuth")
+            Prelude.<*> (x Data..: "ttl")
+            Prelude.<*> (x Data..: "enablePullRequestPreview")
+      )
+
+instance Prelude.Hashable Branch where
+  hashWithSalt _salt Branch' {..} =
+    _salt
+      `Prelude.hashWithSalt` associatedResources
+      `Prelude.hashWithSalt` backendEnvironmentArn
+      `Prelude.hashWithSalt` basicAuthCredentials
+      `Prelude.hashWithSalt` buildSpec
+      `Prelude.hashWithSalt` destinationBranch
+      `Prelude.hashWithSalt` enablePerformanceMode
+      `Prelude.hashWithSalt` pullRequestEnvironmentName
+      `Prelude.hashWithSalt` sourceBranch
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` thumbnailUrl
+      `Prelude.hashWithSalt` branchArn
+      `Prelude.hashWithSalt` branchName
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` stage
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` enableNotification
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` updateTime
+      `Prelude.hashWithSalt` environmentVariables
+      `Prelude.hashWithSalt` enableAutoBuild
+      `Prelude.hashWithSalt` customDomains
+      `Prelude.hashWithSalt` framework
+      `Prelude.hashWithSalt` activeJobId
+      `Prelude.hashWithSalt` totalNumberOfJobs
+      `Prelude.hashWithSalt` enableBasicAuth
+      `Prelude.hashWithSalt` ttl
+      `Prelude.hashWithSalt` enablePullRequestPreview
+
+instance Prelude.NFData Branch where
+  rnf Branch' {..} =
+    Prelude.rnf associatedResources
+      `Prelude.seq` Prelude.rnf backendEnvironmentArn
+      `Prelude.seq` Prelude.rnf basicAuthCredentials
+      `Prelude.seq` Prelude.rnf buildSpec
+      `Prelude.seq` Prelude.rnf destinationBranch
+      `Prelude.seq` Prelude.rnf enablePerformanceMode
+      `Prelude.seq` Prelude.rnf pullRequestEnvironmentName
+      `Prelude.seq` Prelude.rnf sourceBranch
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf thumbnailUrl
+      `Prelude.seq` Prelude.rnf branchArn
+      `Prelude.seq` Prelude.rnf branchName
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf stage
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf enableNotification
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf updateTime
+      `Prelude.seq` Prelude.rnf environmentVariables
+      `Prelude.seq` Prelude.rnf enableAutoBuild
+      `Prelude.seq` Prelude.rnf customDomains
+      `Prelude.seq` Prelude.rnf framework
+      `Prelude.seq` Prelude.rnf activeJobId
+      `Prelude.seq` Prelude.rnf
+        totalNumberOfJobs
+      `Prelude.seq` Prelude.rnf
+        enableBasicAuth
+      `Prelude.seq` Prelude.rnf ttl
+      `Prelude.seq` Prelude.rnf
+        enablePullRequestPreview
diff --git a/gen/Amazonka/Amplify/Types/CustomRule.hs b/gen/Amazonka/Amplify/Types/CustomRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/CustomRule.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.CustomRule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.CustomRule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a custom rewrite or redirect rule.
+--
+-- /See:/ 'newCustomRule' smart constructor.
+data CustomRule = CustomRule'
+  { -- | The condition for a URL rewrite or redirect rule, such as a country
+    -- code.
+    condition :: Prelude.Maybe Prelude.Text,
+    -- | The status code for a URL rewrite or redirect rule.
+    --
+    -- [200]
+    --     Represents a 200 rewrite rule.
+    --
+    -- [301]
+    --     Represents a 301 (moved pemanently) redirect rule. This and all
+    --     future requests should be directed to the target URL.
+    --
+    -- [302]
+    --     Represents a 302 temporary redirect rule.
+    --
+    -- [404]
+    --     Represents a 404 redirect rule.
+    --
+    -- [404-200]
+    --     Represents a 404 rewrite rule.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The source pattern for a URL rewrite or redirect rule.
+    source :: Prelude.Text,
+    -- | The target pattern for a URL rewrite or redirect rule.
+    target :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomRule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'condition', 'customRule_condition' - The condition for a URL rewrite or redirect rule, such as a country
+-- code.
+--
+-- 'status', 'customRule_status' - The status code for a URL rewrite or redirect rule.
+--
+-- [200]
+--     Represents a 200 rewrite rule.
+--
+-- [301]
+--     Represents a 301 (moved pemanently) redirect rule. This and all
+--     future requests should be directed to the target URL.
+--
+-- [302]
+--     Represents a 302 temporary redirect rule.
+--
+-- [404]
+--     Represents a 404 redirect rule.
+--
+-- [404-200]
+--     Represents a 404 rewrite rule.
+--
+-- 'source', 'customRule_source' - The source pattern for a URL rewrite or redirect rule.
+--
+-- 'target', 'customRule_target' - The target pattern for a URL rewrite or redirect rule.
+newCustomRule ::
+  -- | 'source'
+  Prelude.Text ->
+  -- | 'target'
+  Prelude.Text ->
+  CustomRule
+newCustomRule pSource_ pTarget_ =
+  CustomRule'
+    { condition = Prelude.Nothing,
+      status = Prelude.Nothing,
+      source = pSource_,
+      target = pTarget_
+    }
+
+-- | The condition for a URL rewrite or redirect rule, such as a country
+-- code.
+customRule_condition :: Lens.Lens' CustomRule (Prelude.Maybe Prelude.Text)
+customRule_condition = Lens.lens (\CustomRule' {condition} -> condition) (\s@CustomRule' {} a -> s {condition = a} :: CustomRule)
+
+-- | The status code for a URL rewrite or redirect rule.
+--
+-- [200]
+--     Represents a 200 rewrite rule.
+--
+-- [301]
+--     Represents a 301 (moved pemanently) redirect rule. This and all
+--     future requests should be directed to the target URL.
+--
+-- [302]
+--     Represents a 302 temporary redirect rule.
+--
+-- [404]
+--     Represents a 404 redirect rule.
+--
+-- [404-200]
+--     Represents a 404 rewrite rule.
+customRule_status :: Lens.Lens' CustomRule (Prelude.Maybe Prelude.Text)
+customRule_status = Lens.lens (\CustomRule' {status} -> status) (\s@CustomRule' {} a -> s {status = a} :: CustomRule)
+
+-- | The source pattern for a URL rewrite or redirect rule.
+customRule_source :: Lens.Lens' CustomRule Prelude.Text
+customRule_source = Lens.lens (\CustomRule' {source} -> source) (\s@CustomRule' {} a -> s {source = a} :: CustomRule)
+
+-- | The target pattern for a URL rewrite or redirect rule.
+customRule_target :: Lens.Lens' CustomRule Prelude.Text
+customRule_target = Lens.lens (\CustomRule' {target} -> target) (\s@CustomRule' {} a -> s {target = a} :: CustomRule)
+
+instance Data.FromJSON CustomRule where
+  parseJSON =
+    Data.withObject
+      "CustomRule"
+      ( \x ->
+          CustomRule'
+            Prelude.<$> (x Data..:? "condition")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..: "source")
+            Prelude.<*> (x Data..: "target")
+      )
+
+instance Prelude.Hashable CustomRule where
+  hashWithSalt _salt CustomRule' {..} =
+    _salt
+      `Prelude.hashWithSalt` condition
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` target
+
+instance Prelude.NFData CustomRule where
+  rnf CustomRule' {..} =
+    Prelude.rnf condition
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf target
+
+instance Data.ToJSON CustomRule where
+  toJSON CustomRule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("condition" Data..=) Prelude.<$> condition,
+            ("status" Data..=) Prelude.<$> status,
+            Prelude.Just ("source" Data..= source),
+            Prelude.Just ("target" Data..= target)
+          ]
+      )
diff --git a/gen/Amazonka/Amplify/Types/DomainAssociation.hs b/gen/Amazonka/Amplify/Types/DomainAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/DomainAssociation.hs
@@ -0,0 +1,193 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.DomainAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.DomainAssociation where
+
+import Amazonka.Amplify.Types.DomainStatus
+import Amazonka.Amplify.Types.SubDomain
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a domain association that associates a custom domain with an
+-- Amplify app.
+--
+-- /See:/ 'newDomainAssociation' smart constructor.
+data DomainAssociation = DomainAssociation'
+  { -- | Sets branch patterns for automatic subdomain creation.
+    autoSubDomainCreationPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | The required AWS Identity and Access Management (IAM) service role for
+    -- the Amazon Resource Name (ARN) for automatically creating subdomains.
+    autoSubDomainIAMRole :: Prelude.Maybe Prelude.Text,
+    -- | The DNS record for certificate verification.
+    certificateVerificationDNSRecord :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) for the domain association.
+    domainAssociationArn :: Prelude.Text,
+    -- | The name of the domain.
+    domainName :: Prelude.Text,
+    -- | Enables the automated creation of subdomains for branches.
+    enableAutoSubDomain :: Prelude.Bool,
+    -- | The current status of the domain association.
+    domainStatus :: DomainStatus,
+    -- | The reason for the current status of the domain association.
+    statusReason :: Prelude.Text,
+    -- | The subdomains for the domain association.
+    subDomains :: [SubDomain]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DomainAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoSubDomainCreationPatterns', 'domainAssociation_autoSubDomainCreationPatterns' - Sets branch patterns for automatic subdomain creation.
+--
+-- 'autoSubDomainIAMRole', 'domainAssociation_autoSubDomainIAMRole' - The required AWS Identity and Access Management (IAM) service role for
+-- the Amazon Resource Name (ARN) for automatically creating subdomains.
+--
+-- 'certificateVerificationDNSRecord', 'domainAssociation_certificateVerificationDNSRecord' - The DNS record for certificate verification.
+--
+-- 'domainAssociationArn', 'domainAssociation_domainAssociationArn' - The Amazon Resource Name (ARN) for the domain association.
+--
+-- 'domainName', 'domainAssociation_domainName' - The name of the domain.
+--
+-- 'enableAutoSubDomain', 'domainAssociation_enableAutoSubDomain' - Enables the automated creation of subdomains for branches.
+--
+-- 'domainStatus', 'domainAssociation_domainStatus' - The current status of the domain association.
+--
+-- 'statusReason', 'domainAssociation_statusReason' - The reason for the current status of the domain association.
+--
+-- 'subDomains', 'domainAssociation_subDomains' - The subdomains for the domain association.
+newDomainAssociation ::
+  -- | 'domainAssociationArn'
+  Prelude.Text ->
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'enableAutoSubDomain'
+  Prelude.Bool ->
+  -- | 'domainStatus'
+  DomainStatus ->
+  -- | 'statusReason'
+  Prelude.Text ->
+  DomainAssociation
+newDomainAssociation
+  pDomainAssociationArn_
+  pDomainName_
+  pEnableAutoSubDomain_
+  pDomainStatus_
+  pStatusReason_ =
+    DomainAssociation'
+      { autoSubDomainCreationPatterns =
+          Prelude.Nothing,
+        autoSubDomainIAMRole = Prelude.Nothing,
+        certificateVerificationDNSRecord = Prelude.Nothing,
+        domainAssociationArn = pDomainAssociationArn_,
+        domainName = pDomainName_,
+        enableAutoSubDomain = pEnableAutoSubDomain_,
+        domainStatus = pDomainStatus_,
+        statusReason = pStatusReason_,
+        subDomains = Prelude.mempty
+      }
+
+-- | Sets branch patterns for automatic subdomain creation.
+domainAssociation_autoSubDomainCreationPatterns :: Lens.Lens' DomainAssociation (Prelude.Maybe [Prelude.Text])
+domainAssociation_autoSubDomainCreationPatterns = Lens.lens (\DomainAssociation' {autoSubDomainCreationPatterns} -> autoSubDomainCreationPatterns) (\s@DomainAssociation' {} a -> s {autoSubDomainCreationPatterns = a} :: DomainAssociation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The required AWS Identity and Access Management (IAM) service role for
+-- the Amazon Resource Name (ARN) for automatically creating subdomains.
+domainAssociation_autoSubDomainIAMRole :: Lens.Lens' DomainAssociation (Prelude.Maybe Prelude.Text)
+domainAssociation_autoSubDomainIAMRole = Lens.lens (\DomainAssociation' {autoSubDomainIAMRole} -> autoSubDomainIAMRole) (\s@DomainAssociation' {} a -> s {autoSubDomainIAMRole = a} :: DomainAssociation)
+
+-- | The DNS record for certificate verification.
+domainAssociation_certificateVerificationDNSRecord :: Lens.Lens' DomainAssociation (Prelude.Maybe Prelude.Text)
+domainAssociation_certificateVerificationDNSRecord = Lens.lens (\DomainAssociation' {certificateVerificationDNSRecord} -> certificateVerificationDNSRecord) (\s@DomainAssociation' {} a -> s {certificateVerificationDNSRecord = a} :: DomainAssociation)
+
+-- | The Amazon Resource Name (ARN) for the domain association.
+domainAssociation_domainAssociationArn :: Lens.Lens' DomainAssociation Prelude.Text
+domainAssociation_domainAssociationArn = Lens.lens (\DomainAssociation' {domainAssociationArn} -> domainAssociationArn) (\s@DomainAssociation' {} a -> s {domainAssociationArn = a} :: DomainAssociation)
+
+-- | The name of the domain.
+domainAssociation_domainName :: Lens.Lens' DomainAssociation Prelude.Text
+domainAssociation_domainName = Lens.lens (\DomainAssociation' {domainName} -> domainName) (\s@DomainAssociation' {} a -> s {domainName = a} :: DomainAssociation)
+
+-- | Enables the automated creation of subdomains for branches.
+domainAssociation_enableAutoSubDomain :: Lens.Lens' DomainAssociation Prelude.Bool
+domainAssociation_enableAutoSubDomain = Lens.lens (\DomainAssociation' {enableAutoSubDomain} -> enableAutoSubDomain) (\s@DomainAssociation' {} a -> s {enableAutoSubDomain = a} :: DomainAssociation)
+
+-- | The current status of the domain association.
+domainAssociation_domainStatus :: Lens.Lens' DomainAssociation DomainStatus
+domainAssociation_domainStatus = Lens.lens (\DomainAssociation' {domainStatus} -> domainStatus) (\s@DomainAssociation' {} a -> s {domainStatus = a} :: DomainAssociation)
+
+-- | The reason for the current status of the domain association.
+domainAssociation_statusReason :: Lens.Lens' DomainAssociation Prelude.Text
+domainAssociation_statusReason = Lens.lens (\DomainAssociation' {statusReason} -> statusReason) (\s@DomainAssociation' {} a -> s {statusReason = a} :: DomainAssociation)
+
+-- | The subdomains for the domain association.
+domainAssociation_subDomains :: Lens.Lens' DomainAssociation [SubDomain]
+domainAssociation_subDomains = Lens.lens (\DomainAssociation' {subDomains} -> subDomains) (\s@DomainAssociation' {} a -> s {subDomains = a} :: DomainAssociation) Prelude.. Lens.coerced
+
+instance Data.FromJSON DomainAssociation where
+  parseJSON =
+    Data.withObject
+      "DomainAssociation"
+      ( \x ->
+          DomainAssociation'
+            Prelude.<$> ( x
+                            Data..:? "autoSubDomainCreationPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "autoSubDomainIAMRole")
+            Prelude.<*> (x Data..:? "certificateVerificationDNSRecord")
+            Prelude.<*> (x Data..: "domainAssociationArn")
+            Prelude.<*> (x Data..: "domainName")
+            Prelude.<*> (x Data..: "enableAutoSubDomain")
+            Prelude.<*> (x Data..: "domainStatus")
+            Prelude.<*> (x Data..: "statusReason")
+            Prelude.<*> (x Data..:? "subDomains" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable DomainAssociation where
+  hashWithSalt _salt DomainAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoSubDomainCreationPatterns
+      `Prelude.hashWithSalt` autoSubDomainIAMRole
+      `Prelude.hashWithSalt` certificateVerificationDNSRecord
+      `Prelude.hashWithSalt` domainAssociationArn
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` enableAutoSubDomain
+      `Prelude.hashWithSalt` domainStatus
+      `Prelude.hashWithSalt` statusReason
+      `Prelude.hashWithSalt` subDomains
+
+instance Prelude.NFData DomainAssociation where
+  rnf DomainAssociation' {..} =
+    Prelude.rnf autoSubDomainCreationPatterns
+      `Prelude.seq` Prelude.rnf autoSubDomainIAMRole
+      `Prelude.seq` Prelude.rnf certificateVerificationDNSRecord
+      `Prelude.seq` Prelude.rnf domainAssociationArn
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf enableAutoSubDomain
+      `Prelude.seq` Prelude.rnf domainStatus
+      `Prelude.seq` Prelude.rnf statusReason
+      `Prelude.seq` Prelude.rnf subDomains
diff --git a/gen/Amazonka/Amplify/Types/DomainStatus.hs b/gen/Amazonka/Amplify/Types/DomainStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/DomainStatus.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.DomainStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.DomainStatus
+  ( DomainStatus
+      ( ..,
+        DomainStatus_AVAILABLE,
+        DomainStatus_CREATING,
+        DomainStatus_FAILED,
+        DomainStatus_IN_PROGRESS,
+        DomainStatus_PENDING_DEPLOYMENT,
+        DomainStatus_PENDING_VERIFICATION,
+        DomainStatus_REQUESTING_CERTIFICATE,
+        DomainStatus_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DomainStatus = DomainStatus'
+  { fromDomainStatus ::
+      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 DomainStatus_AVAILABLE :: DomainStatus
+pattern DomainStatus_AVAILABLE = DomainStatus' "AVAILABLE"
+
+pattern DomainStatus_CREATING :: DomainStatus
+pattern DomainStatus_CREATING = DomainStatus' "CREATING"
+
+pattern DomainStatus_FAILED :: DomainStatus
+pattern DomainStatus_FAILED = DomainStatus' "FAILED"
+
+pattern DomainStatus_IN_PROGRESS :: DomainStatus
+pattern DomainStatus_IN_PROGRESS = DomainStatus' "IN_PROGRESS"
+
+pattern DomainStatus_PENDING_DEPLOYMENT :: DomainStatus
+pattern DomainStatus_PENDING_DEPLOYMENT = DomainStatus' "PENDING_DEPLOYMENT"
+
+pattern DomainStatus_PENDING_VERIFICATION :: DomainStatus
+pattern DomainStatus_PENDING_VERIFICATION = DomainStatus' "PENDING_VERIFICATION"
+
+pattern DomainStatus_REQUESTING_CERTIFICATE :: DomainStatus
+pattern DomainStatus_REQUESTING_CERTIFICATE = DomainStatus' "REQUESTING_CERTIFICATE"
+
+pattern DomainStatus_UPDATING :: DomainStatus
+pattern DomainStatus_UPDATING = DomainStatus' "UPDATING"
+
+{-# COMPLETE
+  DomainStatus_AVAILABLE,
+  DomainStatus_CREATING,
+  DomainStatus_FAILED,
+  DomainStatus_IN_PROGRESS,
+  DomainStatus_PENDING_DEPLOYMENT,
+  DomainStatus_PENDING_VERIFICATION,
+  DomainStatus_REQUESTING_CERTIFICATE,
+  DomainStatus_UPDATING,
+  DomainStatus'
+  #-}
diff --git a/gen/Amazonka/Amplify/Types/Job.hs b/gen/Amazonka/Amplify/Types/Job.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/Job.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.Amplify.Types.Job
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.Job where
+
+import Amazonka.Amplify.Types.JobSummary
+import Amazonka.Amplify.Types.Step
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an execution job for an Amplify app.
+--
+-- /See:/ 'newJob' smart constructor.
+data Job = Job'
+  { -- | Describes the summary for an execution job for an Amplify app.
+    summary :: JobSummary,
+    -- | The execution steps for an execution job, for an Amplify app.
+    steps :: [Step]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Job' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'summary', 'job_summary' - Describes the summary for an execution job for an Amplify app.
+--
+-- 'steps', 'job_steps' - The execution steps for an execution job, for an Amplify app.
+newJob ::
+  -- | 'summary'
+  JobSummary ->
+  Job
+newJob pSummary_ =
+  Job' {summary = pSummary_, steps = Prelude.mempty}
+
+-- | Describes the summary for an execution job for an Amplify app.
+job_summary :: Lens.Lens' Job JobSummary
+job_summary = Lens.lens (\Job' {summary} -> summary) (\s@Job' {} a -> s {summary = a} :: Job)
+
+-- | The execution steps for an execution job, for an Amplify app.
+job_steps :: Lens.Lens' Job [Step]
+job_steps = Lens.lens (\Job' {steps} -> steps) (\s@Job' {} a -> s {steps = a} :: Job) Prelude.. Lens.coerced
+
+instance Data.FromJSON Job where
+  parseJSON =
+    Data.withObject
+      "Job"
+      ( \x ->
+          Job'
+            Prelude.<$> (x Data..: "summary")
+            Prelude.<*> (x Data..:? "steps" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable Job where
+  hashWithSalt _salt Job' {..} =
+    _salt
+      `Prelude.hashWithSalt` summary
+      `Prelude.hashWithSalt` steps
+
+instance Prelude.NFData Job where
+  rnf Job' {..} =
+    Prelude.rnf summary `Prelude.seq` Prelude.rnf steps
diff --git a/gen/Amazonka/Amplify/Types/JobStatus.hs b/gen/Amazonka/Amplify/Types/JobStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/JobStatus.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.JobStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.JobStatus
+  ( JobStatus
+      ( ..,
+        JobStatus_CANCELLED,
+        JobStatus_CANCELLING,
+        JobStatus_FAILED,
+        JobStatus_PENDING,
+        JobStatus_PROVISIONING,
+        JobStatus_RUNNING,
+        JobStatus_SUCCEED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype JobStatus = JobStatus'
+  { fromJobStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern JobStatus_CANCELLED :: JobStatus
+pattern JobStatus_CANCELLED = JobStatus' "CANCELLED"
+
+pattern JobStatus_CANCELLING :: JobStatus
+pattern JobStatus_CANCELLING = JobStatus' "CANCELLING"
+
+pattern JobStatus_FAILED :: JobStatus
+pattern JobStatus_FAILED = JobStatus' "FAILED"
+
+pattern JobStatus_PENDING :: JobStatus
+pattern JobStatus_PENDING = JobStatus' "PENDING"
+
+pattern JobStatus_PROVISIONING :: JobStatus
+pattern JobStatus_PROVISIONING = JobStatus' "PROVISIONING"
+
+pattern JobStatus_RUNNING :: JobStatus
+pattern JobStatus_RUNNING = JobStatus' "RUNNING"
+
+pattern JobStatus_SUCCEED :: JobStatus
+pattern JobStatus_SUCCEED = JobStatus' "SUCCEED"
+
+{-# COMPLETE
+  JobStatus_CANCELLED,
+  JobStatus_CANCELLING,
+  JobStatus_FAILED,
+  JobStatus_PENDING,
+  JobStatus_PROVISIONING,
+  JobStatus_RUNNING,
+  JobStatus_SUCCEED,
+  JobStatus'
+  #-}
diff --git a/gen/Amazonka/Amplify/Types/JobSummary.hs b/gen/Amazonka/Amplify/Types/JobSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/JobSummary.hs
@@ -0,0 +1,203 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.JobSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.JobSummary where
+
+import Amazonka.Amplify.Types.JobStatus
+import Amazonka.Amplify.Types.JobType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the summary for an execution job for an Amplify app.
+--
+-- /See:/ 'newJobSummary' smart constructor.
+data JobSummary = JobSummary'
+  { -- | The end date and time for the job.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) for the job.
+    jobArn :: Prelude.Text,
+    -- | The unique ID for the job.
+    jobId :: Prelude.Text,
+    -- | The commit ID from a third-party repository provider for the job.
+    commitId :: Prelude.Text,
+    -- | The commit message from a third-party repository provider for the job.
+    commitMessage :: Prelude.Text,
+    -- | The commit date and time for the job.
+    commitTime :: Data.POSIX,
+    -- | The start date and time for the job.
+    startTime :: Data.POSIX,
+    -- | The current status for the job.
+    status :: JobStatus,
+    -- | The type for the job. If the value is @RELEASE@, the job was manually
+    -- released from its source by using the @StartJob@ API. If the value is
+    -- @RETRY@, the job was manually retried using the @StartJob@ API. If the
+    -- value is @WEB_HOOK@, the job was automatically triggered by webhooks.
+    jobType :: JobType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endTime', 'jobSummary_endTime' - The end date and time for the job.
+--
+-- 'jobArn', 'jobSummary_jobArn' - The Amazon Resource Name (ARN) for the job.
+--
+-- 'jobId', 'jobSummary_jobId' - The unique ID for the job.
+--
+-- 'commitId', 'jobSummary_commitId' - The commit ID from a third-party repository provider for the job.
+--
+-- 'commitMessage', 'jobSummary_commitMessage' - The commit message from a third-party repository provider for the job.
+--
+-- 'commitTime', 'jobSummary_commitTime' - The commit date and time for the job.
+--
+-- 'startTime', 'jobSummary_startTime' - The start date and time for the job.
+--
+-- 'status', 'jobSummary_status' - The current status for the job.
+--
+-- 'jobType', 'jobSummary_jobType' - The type for the job. If the value is @RELEASE@, the job was manually
+-- released from its source by using the @StartJob@ API. If the value is
+-- @RETRY@, the job was manually retried using the @StartJob@ API. If the
+-- value is @WEB_HOOK@, the job was automatically triggered by webhooks.
+newJobSummary ::
+  -- | 'jobArn'
+  Prelude.Text ->
+  -- | 'jobId'
+  Prelude.Text ->
+  -- | 'commitId'
+  Prelude.Text ->
+  -- | 'commitMessage'
+  Prelude.Text ->
+  -- | 'commitTime'
+  Prelude.UTCTime ->
+  -- | 'startTime'
+  Prelude.UTCTime ->
+  -- | 'status'
+  JobStatus ->
+  -- | 'jobType'
+  JobType ->
+  JobSummary
+newJobSummary
+  pJobArn_
+  pJobId_
+  pCommitId_
+  pCommitMessage_
+  pCommitTime_
+  pStartTime_
+  pStatus_
+  pJobType_ =
+    JobSummary'
+      { endTime = Prelude.Nothing,
+        jobArn = pJobArn_,
+        jobId = pJobId_,
+        commitId = pCommitId_,
+        commitMessage = pCommitMessage_,
+        commitTime = Data._Time Lens.# pCommitTime_,
+        startTime = Data._Time Lens.# pStartTime_,
+        status = pStatus_,
+        jobType = pJobType_
+      }
+
+-- | The end date and time for the job.
+jobSummary_endTime :: Lens.Lens' JobSummary (Prelude.Maybe Prelude.UTCTime)
+jobSummary_endTime = Lens.lens (\JobSummary' {endTime} -> endTime) (\s@JobSummary' {} a -> s {endTime = a} :: JobSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) for the job.
+jobSummary_jobArn :: Lens.Lens' JobSummary Prelude.Text
+jobSummary_jobArn = Lens.lens (\JobSummary' {jobArn} -> jobArn) (\s@JobSummary' {} a -> s {jobArn = a} :: JobSummary)
+
+-- | The unique ID for the job.
+jobSummary_jobId :: Lens.Lens' JobSummary Prelude.Text
+jobSummary_jobId = Lens.lens (\JobSummary' {jobId} -> jobId) (\s@JobSummary' {} a -> s {jobId = a} :: JobSummary)
+
+-- | The commit ID from a third-party repository provider for the job.
+jobSummary_commitId :: Lens.Lens' JobSummary Prelude.Text
+jobSummary_commitId = Lens.lens (\JobSummary' {commitId} -> commitId) (\s@JobSummary' {} a -> s {commitId = a} :: JobSummary)
+
+-- | The commit message from a third-party repository provider for the job.
+jobSummary_commitMessage :: Lens.Lens' JobSummary Prelude.Text
+jobSummary_commitMessage = Lens.lens (\JobSummary' {commitMessage} -> commitMessage) (\s@JobSummary' {} a -> s {commitMessage = a} :: JobSummary)
+
+-- | The commit date and time for the job.
+jobSummary_commitTime :: Lens.Lens' JobSummary Prelude.UTCTime
+jobSummary_commitTime = Lens.lens (\JobSummary' {commitTime} -> commitTime) (\s@JobSummary' {} a -> s {commitTime = a} :: JobSummary) Prelude.. Data._Time
+
+-- | The start date and time for the job.
+jobSummary_startTime :: Lens.Lens' JobSummary Prelude.UTCTime
+jobSummary_startTime = Lens.lens (\JobSummary' {startTime} -> startTime) (\s@JobSummary' {} a -> s {startTime = a} :: JobSummary) Prelude.. Data._Time
+
+-- | The current status for the job.
+jobSummary_status :: Lens.Lens' JobSummary JobStatus
+jobSummary_status = Lens.lens (\JobSummary' {status} -> status) (\s@JobSummary' {} a -> s {status = a} :: JobSummary)
+
+-- | The type for the job. If the value is @RELEASE@, the job was manually
+-- released from its source by using the @StartJob@ API. If the value is
+-- @RETRY@, the job was manually retried using the @StartJob@ API. If the
+-- value is @WEB_HOOK@, the job was automatically triggered by webhooks.
+jobSummary_jobType :: Lens.Lens' JobSummary JobType
+jobSummary_jobType = Lens.lens (\JobSummary' {jobType} -> jobType) (\s@JobSummary' {} a -> s {jobType = a} :: JobSummary)
+
+instance Data.FromJSON JobSummary where
+  parseJSON =
+    Data.withObject
+      "JobSummary"
+      ( \x ->
+          JobSummary'
+            Prelude.<$> (x Data..:? "endTime")
+            Prelude.<*> (x Data..: "jobArn")
+            Prelude.<*> (x Data..: "jobId")
+            Prelude.<*> (x Data..: "commitId")
+            Prelude.<*> (x Data..: "commitMessage")
+            Prelude.<*> (x Data..: "commitTime")
+            Prelude.<*> (x Data..: "startTime")
+            Prelude.<*> (x Data..: "status")
+            Prelude.<*> (x Data..: "jobType")
+      )
+
+instance Prelude.Hashable JobSummary where
+  hashWithSalt _salt JobSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` jobArn
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` commitId
+      `Prelude.hashWithSalt` commitMessage
+      `Prelude.hashWithSalt` commitTime
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` jobType
+
+instance Prelude.NFData JobSummary where
+  rnf JobSummary' {..} =
+    Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf jobArn
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf commitId
+      `Prelude.seq` Prelude.rnf commitMessage
+      `Prelude.seq` Prelude.rnf commitTime
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf jobType
diff --git a/gen/Amazonka/Amplify/Types/JobType.hs b/gen/Amazonka/Amplify/Types/JobType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/JobType.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.JobType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.JobType
+  ( JobType
+      ( ..,
+        JobType_MANUAL,
+        JobType_RELEASE,
+        JobType_RETRY,
+        JobType_WEB_HOOK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype JobType = JobType' {fromJobType :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern JobType_MANUAL :: JobType
+pattern JobType_MANUAL = JobType' "MANUAL"
+
+pattern JobType_RELEASE :: JobType
+pattern JobType_RELEASE = JobType' "RELEASE"
+
+pattern JobType_RETRY :: JobType
+pattern JobType_RETRY = JobType' "RETRY"
+
+pattern JobType_WEB_HOOK :: JobType
+pattern JobType_WEB_HOOK = JobType' "WEB_HOOK"
+
+{-# COMPLETE
+  JobType_MANUAL,
+  JobType_RELEASE,
+  JobType_RETRY,
+  JobType_WEB_HOOK,
+  JobType'
+  #-}
diff --git a/gen/Amazonka/Amplify/Types/Platform.hs b/gen/Amazonka/Amplify/Types/Platform.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/Platform.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.Platform
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.Platform
+  ( Platform
+      ( ..,
+        Platform_WEB,
+        Platform_WEB_COMPUTE,
+        Platform_WEB_DYNAMIC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Platform = Platform'
+  { fromPlatform ::
+      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 Platform_WEB :: Platform
+pattern Platform_WEB = Platform' "WEB"
+
+pattern Platform_WEB_COMPUTE :: Platform
+pattern Platform_WEB_COMPUTE = Platform' "WEB_COMPUTE"
+
+pattern Platform_WEB_DYNAMIC :: Platform
+pattern Platform_WEB_DYNAMIC = Platform' "WEB_DYNAMIC"
+
+{-# COMPLETE
+  Platform_WEB,
+  Platform_WEB_COMPUTE,
+  Platform_WEB_DYNAMIC,
+  Platform'
+  #-}
diff --git a/gen/Amazonka/Amplify/Types/ProductionBranch.hs b/gen/Amazonka/Amplify/Types/ProductionBranch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/ProductionBranch.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.ProductionBranch
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.ProductionBranch where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the information about a production branch for an Amplify app.
+--
+-- /See:/ 'newProductionBranch' smart constructor.
+data ProductionBranch = ProductionBranch'
+  { -- | The branch name for the production branch.
+    branchName :: Prelude.Maybe Prelude.Text,
+    -- | The last deploy time of the production branch.
+    lastDeployTime :: Prelude.Maybe Data.POSIX,
+    -- | The status of the production branch.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The thumbnail URL for the production branch.
+    thumbnailUrl :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProductionBranch' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'branchName', 'productionBranch_branchName' - The branch name for the production branch.
+--
+-- 'lastDeployTime', 'productionBranch_lastDeployTime' - The last deploy time of the production branch.
+--
+-- 'status', 'productionBranch_status' - The status of the production branch.
+--
+-- 'thumbnailUrl', 'productionBranch_thumbnailUrl' - The thumbnail URL for the production branch.
+newProductionBranch ::
+  ProductionBranch
+newProductionBranch =
+  ProductionBranch'
+    { branchName = Prelude.Nothing,
+      lastDeployTime = Prelude.Nothing,
+      status = Prelude.Nothing,
+      thumbnailUrl = Prelude.Nothing
+    }
+
+-- | The branch name for the production branch.
+productionBranch_branchName :: Lens.Lens' ProductionBranch (Prelude.Maybe Prelude.Text)
+productionBranch_branchName = Lens.lens (\ProductionBranch' {branchName} -> branchName) (\s@ProductionBranch' {} a -> s {branchName = a} :: ProductionBranch)
+
+-- | The last deploy time of the production branch.
+productionBranch_lastDeployTime :: Lens.Lens' ProductionBranch (Prelude.Maybe Prelude.UTCTime)
+productionBranch_lastDeployTime = Lens.lens (\ProductionBranch' {lastDeployTime} -> lastDeployTime) (\s@ProductionBranch' {} a -> s {lastDeployTime = a} :: ProductionBranch) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the production branch.
+productionBranch_status :: Lens.Lens' ProductionBranch (Prelude.Maybe Prelude.Text)
+productionBranch_status = Lens.lens (\ProductionBranch' {status} -> status) (\s@ProductionBranch' {} a -> s {status = a} :: ProductionBranch)
+
+-- | The thumbnail URL for the production branch.
+productionBranch_thumbnailUrl :: Lens.Lens' ProductionBranch (Prelude.Maybe Prelude.Text)
+productionBranch_thumbnailUrl = Lens.lens (\ProductionBranch' {thumbnailUrl} -> thumbnailUrl) (\s@ProductionBranch' {} a -> s {thumbnailUrl = a} :: ProductionBranch)
+
+instance Data.FromJSON ProductionBranch where
+  parseJSON =
+    Data.withObject
+      "ProductionBranch"
+      ( \x ->
+          ProductionBranch'
+            Prelude.<$> (x Data..:? "branchName")
+            Prelude.<*> (x Data..:? "lastDeployTime")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "thumbnailUrl")
+      )
+
+instance Prelude.Hashable ProductionBranch where
+  hashWithSalt _salt ProductionBranch' {..} =
+    _salt
+      `Prelude.hashWithSalt` branchName
+      `Prelude.hashWithSalt` lastDeployTime
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` thumbnailUrl
+
+instance Prelude.NFData ProductionBranch where
+  rnf ProductionBranch' {..} =
+    Prelude.rnf branchName
+      `Prelude.seq` Prelude.rnf lastDeployTime
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf thumbnailUrl
diff --git a/gen/Amazonka/Amplify/Types/RepositoryCloneMethod.hs b/gen/Amazonka/Amplify/Types/RepositoryCloneMethod.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/RepositoryCloneMethod.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.RepositoryCloneMethod
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.RepositoryCloneMethod
+  ( RepositoryCloneMethod
+      ( ..,
+        RepositoryCloneMethod_SIGV4,
+        RepositoryCloneMethod_SSH,
+        RepositoryCloneMethod_TOKEN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RepositoryCloneMethod = RepositoryCloneMethod'
+  { fromRepositoryCloneMethod ::
+      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 RepositoryCloneMethod_SIGV4 :: RepositoryCloneMethod
+pattern RepositoryCloneMethod_SIGV4 = RepositoryCloneMethod' "SIGV4"
+
+pattern RepositoryCloneMethod_SSH :: RepositoryCloneMethod
+pattern RepositoryCloneMethod_SSH = RepositoryCloneMethod' "SSH"
+
+pattern RepositoryCloneMethod_TOKEN :: RepositoryCloneMethod
+pattern RepositoryCloneMethod_TOKEN = RepositoryCloneMethod' "TOKEN"
+
+{-# COMPLETE
+  RepositoryCloneMethod_SIGV4,
+  RepositoryCloneMethod_SSH,
+  RepositoryCloneMethod_TOKEN,
+  RepositoryCloneMethod'
+  #-}
diff --git a/gen/Amazonka/Amplify/Types/Stage.hs b/gen/Amazonka/Amplify/Types/Stage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/Stage.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.Stage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.Stage
+  ( Stage
+      ( ..,
+        Stage_BETA,
+        Stage_DEVELOPMENT,
+        Stage_EXPERIMENTAL,
+        Stage_PRODUCTION,
+        Stage_PULL_REQUEST
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Stage = Stage' {fromStage :: 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 Stage_BETA :: Stage
+pattern Stage_BETA = Stage' "BETA"
+
+pattern Stage_DEVELOPMENT :: Stage
+pattern Stage_DEVELOPMENT = Stage' "DEVELOPMENT"
+
+pattern Stage_EXPERIMENTAL :: Stage
+pattern Stage_EXPERIMENTAL = Stage' "EXPERIMENTAL"
+
+pattern Stage_PRODUCTION :: Stage
+pattern Stage_PRODUCTION = Stage' "PRODUCTION"
+
+pattern Stage_PULL_REQUEST :: Stage
+pattern Stage_PULL_REQUEST = Stage' "PULL_REQUEST"
+
+{-# COMPLETE
+  Stage_BETA,
+  Stage_DEVELOPMENT,
+  Stage_EXPERIMENTAL,
+  Stage_PRODUCTION,
+  Stage_PULL_REQUEST,
+  Stage'
+  #-}
diff --git a/gen/Amazonka/Amplify/Types/Step.hs b/gen/Amazonka/Amplify/Types/Step.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/Step.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.Step
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.Step where
+
+import Amazonka.Amplify.Types.JobStatus
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an execution step, for an execution job, for an Amplify app.
+--
+-- /See:/ 'newStep' smart constructor.
+data Step = Step'
+  { -- | The URL to the artifact for the execution step.
+    artifactsUrl :: Prelude.Maybe Prelude.Text,
+    -- | The context for the current step. Includes a build image if the step is
+    -- build.
+    context :: Prelude.Maybe Prelude.Text,
+    -- | The URL to the logs for the execution step.
+    logUrl :: Prelude.Maybe Prelude.Text,
+    -- | The list of screenshot URLs for the execution step, if relevant.
+    screenshots :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The reason for the current step status.
+    statusReason :: Prelude.Maybe Prelude.Text,
+    -- | The URL to the test artifact for the execution step.
+    testArtifactsUrl :: Prelude.Maybe Prelude.Text,
+    -- | The URL to the test configuration for the execution step.
+    testConfigUrl :: Prelude.Maybe Prelude.Text,
+    -- | The name of the execution step.
+    stepName :: Prelude.Text,
+    -- | The start date and time of the execution step.
+    startTime :: Data.POSIX,
+    -- | The status of the execution step.
+    status :: JobStatus,
+    -- | The end date and time of the execution step.
+    endTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Step' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'artifactsUrl', 'step_artifactsUrl' - The URL to the artifact for the execution step.
+--
+-- 'context', 'step_context' - The context for the current step. Includes a build image if the step is
+-- build.
+--
+-- 'logUrl', 'step_logUrl' - The URL to the logs for the execution step.
+--
+-- 'screenshots', 'step_screenshots' - The list of screenshot URLs for the execution step, if relevant.
+--
+-- 'statusReason', 'step_statusReason' - The reason for the current step status.
+--
+-- 'testArtifactsUrl', 'step_testArtifactsUrl' - The URL to the test artifact for the execution step.
+--
+-- 'testConfigUrl', 'step_testConfigUrl' - The URL to the test configuration for the execution step.
+--
+-- 'stepName', 'step_stepName' - The name of the execution step.
+--
+-- 'startTime', 'step_startTime' - The start date and time of the execution step.
+--
+-- 'status', 'step_status' - The status of the execution step.
+--
+-- 'endTime', 'step_endTime' - The end date and time of the execution step.
+newStep ::
+  -- | 'stepName'
+  Prelude.Text ->
+  -- | 'startTime'
+  Prelude.UTCTime ->
+  -- | 'status'
+  JobStatus ->
+  -- | 'endTime'
+  Prelude.UTCTime ->
+  Step
+newStep pStepName_ pStartTime_ pStatus_ pEndTime_ =
+  Step'
+    { artifactsUrl = Prelude.Nothing,
+      context = Prelude.Nothing,
+      logUrl = Prelude.Nothing,
+      screenshots = Prelude.Nothing,
+      statusReason = Prelude.Nothing,
+      testArtifactsUrl = Prelude.Nothing,
+      testConfigUrl = Prelude.Nothing,
+      stepName = pStepName_,
+      startTime = Data._Time Lens.# pStartTime_,
+      status = pStatus_,
+      endTime = Data._Time Lens.# pEndTime_
+    }
+
+-- | The URL to the artifact for the execution step.
+step_artifactsUrl :: Lens.Lens' Step (Prelude.Maybe Prelude.Text)
+step_artifactsUrl = Lens.lens (\Step' {artifactsUrl} -> artifactsUrl) (\s@Step' {} a -> s {artifactsUrl = a} :: Step)
+
+-- | The context for the current step. Includes a build image if the step is
+-- build.
+step_context :: Lens.Lens' Step (Prelude.Maybe Prelude.Text)
+step_context = Lens.lens (\Step' {context} -> context) (\s@Step' {} a -> s {context = a} :: Step)
+
+-- | The URL to the logs for the execution step.
+step_logUrl :: Lens.Lens' Step (Prelude.Maybe Prelude.Text)
+step_logUrl = Lens.lens (\Step' {logUrl} -> logUrl) (\s@Step' {} a -> s {logUrl = a} :: Step)
+
+-- | The list of screenshot URLs for the execution step, if relevant.
+step_screenshots :: Lens.Lens' Step (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+step_screenshots = Lens.lens (\Step' {screenshots} -> screenshots) (\s@Step' {} a -> s {screenshots = a} :: Step) Prelude.. Lens.mapping Lens.coerced
+
+-- | The reason for the current step status.
+step_statusReason :: Lens.Lens' Step (Prelude.Maybe Prelude.Text)
+step_statusReason = Lens.lens (\Step' {statusReason} -> statusReason) (\s@Step' {} a -> s {statusReason = a} :: Step)
+
+-- | The URL to the test artifact for the execution step.
+step_testArtifactsUrl :: Lens.Lens' Step (Prelude.Maybe Prelude.Text)
+step_testArtifactsUrl = Lens.lens (\Step' {testArtifactsUrl} -> testArtifactsUrl) (\s@Step' {} a -> s {testArtifactsUrl = a} :: Step)
+
+-- | The URL to the test configuration for the execution step.
+step_testConfigUrl :: Lens.Lens' Step (Prelude.Maybe Prelude.Text)
+step_testConfigUrl = Lens.lens (\Step' {testConfigUrl} -> testConfigUrl) (\s@Step' {} a -> s {testConfigUrl = a} :: Step)
+
+-- | The name of the execution step.
+step_stepName :: Lens.Lens' Step Prelude.Text
+step_stepName = Lens.lens (\Step' {stepName} -> stepName) (\s@Step' {} a -> s {stepName = a} :: Step)
+
+-- | The start date and time of the execution step.
+step_startTime :: Lens.Lens' Step Prelude.UTCTime
+step_startTime = Lens.lens (\Step' {startTime} -> startTime) (\s@Step' {} a -> s {startTime = a} :: Step) Prelude.. Data._Time
+
+-- | The status of the execution step.
+step_status :: Lens.Lens' Step JobStatus
+step_status = Lens.lens (\Step' {status} -> status) (\s@Step' {} a -> s {status = a} :: Step)
+
+-- | The end date and time of the execution step.
+step_endTime :: Lens.Lens' Step Prelude.UTCTime
+step_endTime = Lens.lens (\Step' {endTime} -> endTime) (\s@Step' {} a -> s {endTime = a} :: Step) Prelude.. Data._Time
+
+instance Data.FromJSON Step where
+  parseJSON =
+    Data.withObject
+      "Step"
+      ( \x ->
+          Step'
+            Prelude.<$> (x Data..:? "artifactsUrl")
+            Prelude.<*> (x Data..:? "context")
+            Prelude.<*> (x Data..:? "logUrl")
+            Prelude.<*> (x Data..:? "screenshots" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "statusReason")
+            Prelude.<*> (x Data..:? "testArtifactsUrl")
+            Prelude.<*> (x Data..:? "testConfigUrl")
+            Prelude.<*> (x Data..: "stepName")
+            Prelude.<*> (x Data..: "startTime")
+            Prelude.<*> (x Data..: "status")
+            Prelude.<*> (x Data..: "endTime")
+      )
+
+instance Prelude.Hashable Step where
+  hashWithSalt _salt Step' {..} =
+    _salt
+      `Prelude.hashWithSalt` artifactsUrl
+      `Prelude.hashWithSalt` context
+      `Prelude.hashWithSalt` logUrl
+      `Prelude.hashWithSalt` screenshots
+      `Prelude.hashWithSalt` statusReason
+      `Prelude.hashWithSalt` testArtifactsUrl
+      `Prelude.hashWithSalt` testConfigUrl
+      `Prelude.hashWithSalt` stepName
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` endTime
+
+instance Prelude.NFData Step where
+  rnf Step' {..} =
+    Prelude.rnf artifactsUrl
+      `Prelude.seq` Prelude.rnf context
+      `Prelude.seq` Prelude.rnf logUrl
+      `Prelude.seq` Prelude.rnf screenshots
+      `Prelude.seq` Prelude.rnf statusReason
+      `Prelude.seq` Prelude.rnf testArtifactsUrl
+      `Prelude.seq` Prelude.rnf testConfigUrl
+      `Prelude.seq` Prelude.rnf stepName
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf endTime
diff --git a/gen/Amazonka/Amplify/Types/SubDomain.hs b/gen/Amazonka/Amplify/Types/SubDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/SubDomain.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.SubDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.SubDomain where
+
+import Amazonka.Amplify.Types.SubDomainSetting
+import qualified 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 subdomain for the domain association.
+--
+-- /See:/ 'newSubDomain' smart constructor.
+data SubDomain = SubDomain'
+  { -- | Describes the settings for the subdomain.
+    subDomainSetting :: SubDomainSetting,
+    -- | The verified status of the subdomain
+    verified :: Prelude.Bool,
+    -- | The DNS record for the subdomain.
+    dnsRecord :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SubDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'subDomainSetting', 'subDomain_subDomainSetting' - Describes the settings for the subdomain.
+--
+-- 'verified', 'subDomain_verified' - The verified status of the subdomain
+--
+-- 'dnsRecord', 'subDomain_dnsRecord' - The DNS record for the subdomain.
+newSubDomain ::
+  -- | 'subDomainSetting'
+  SubDomainSetting ->
+  -- | 'verified'
+  Prelude.Bool ->
+  -- | 'dnsRecord'
+  Prelude.Text ->
+  SubDomain
+newSubDomain
+  pSubDomainSetting_
+  pVerified_
+  pDnsRecord_ =
+    SubDomain'
+      { subDomainSetting = pSubDomainSetting_,
+        verified = pVerified_,
+        dnsRecord = pDnsRecord_
+      }
+
+-- | Describes the settings for the subdomain.
+subDomain_subDomainSetting :: Lens.Lens' SubDomain SubDomainSetting
+subDomain_subDomainSetting = Lens.lens (\SubDomain' {subDomainSetting} -> subDomainSetting) (\s@SubDomain' {} a -> s {subDomainSetting = a} :: SubDomain)
+
+-- | The verified status of the subdomain
+subDomain_verified :: Lens.Lens' SubDomain Prelude.Bool
+subDomain_verified = Lens.lens (\SubDomain' {verified} -> verified) (\s@SubDomain' {} a -> s {verified = a} :: SubDomain)
+
+-- | The DNS record for the subdomain.
+subDomain_dnsRecord :: Lens.Lens' SubDomain Prelude.Text
+subDomain_dnsRecord = Lens.lens (\SubDomain' {dnsRecord} -> dnsRecord) (\s@SubDomain' {} a -> s {dnsRecord = a} :: SubDomain)
+
+instance Data.FromJSON SubDomain where
+  parseJSON =
+    Data.withObject
+      "SubDomain"
+      ( \x ->
+          SubDomain'
+            Prelude.<$> (x Data..: "subDomainSetting")
+            Prelude.<*> (x Data..: "verified")
+            Prelude.<*> (x Data..: "dnsRecord")
+      )
+
+instance Prelude.Hashable SubDomain where
+  hashWithSalt _salt SubDomain' {..} =
+    _salt
+      `Prelude.hashWithSalt` subDomainSetting
+      `Prelude.hashWithSalt` verified
+      `Prelude.hashWithSalt` dnsRecord
+
+instance Prelude.NFData SubDomain where
+  rnf SubDomain' {..} =
+    Prelude.rnf subDomainSetting
+      `Prelude.seq` Prelude.rnf verified
+      `Prelude.seq` Prelude.rnf dnsRecord
diff --git a/gen/Amazonka/Amplify/Types/SubDomainSetting.hs b/gen/Amazonka/Amplify/Types/SubDomainSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/SubDomainSetting.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.SubDomainSetting
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.SubDomainSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the settings for the subdomain.
+--
+-- /See:/ 'newSubDomainSetting' smart constructor.
+data SubDomainSetting = SubDomainSetting'
+  { -- | The prefix setting for the subdomain.
+    prefix :: Prelude.Text,
+    -- | The branch name setting for the subdomain.
+    branchName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SubDomainSetting' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'prefix', 'subDomainSetting_prefix' - The prefix setting for the subdomain.
+--
+-- 'branchName', 'subDomainSetting_branchName' - The branch name setting for the subdomain.
+newSubDomainSetting ::
+  -- | 'prefix'
+  Prelude.Text ->
+  -- | 'branchName'
+  Prelude.Text ->
+  SubDomainSetting
+newSubDomainSetting pPrefix_ pBranchName_ =
+  SubDomainSetting'
+    { prefix = pPrefix_,
+      branchName = pBranchName_
+    }
+
+-- | The prefix setting for the subdomain.
+subDomainSetting_prefix :: Lens.Lens' SubDomainSetting Prelude.Text
+subDomainSetting_prefix = Lens.lens (\SubDomainSetting' {prefix} -> prefix) (\s@SubDomainSetting' {} a -> s {prefix = a} :: SubDomainSetting)
+
+-- | The branch name setting for the subdomain.
+subDomainSetting_branchName :: Lens.Lens' SubDomainSetting Prelude.Text
+subDomainSetting_branchName = Lens.lens (\SubDomainSetting' {branchName} -> branchName) (\s@SubDomainSetting' {} a -> s {branchName = a} :: SubDomainSetting)
+
+instance Data.FromJSON SubDomainSetting where
+  parseJSON =
+    Data.withObject
+      "SubDomainSetting"
+      ( \x ->
+          SubDomainSetting'
+            Prelude.<$> (x Data..: "prefix")
+            Prelude.<*> (x Data..: "branchName")
+      )
+
+instance Prelude.Hashable SubDomainSetting where
+  hashWithSalt _salt SubDomainSetting' {..} =
+    _salt
+      `Prelude.hashWithSalt` prefix
+      `Prelude.hashWithSalt` branchName
+
+instance Prelude.NFData SubDomainSetting where
+  rnf SubDomainSetting' {..} =
+    Prelude.rnf prefix
+      `Prelude.seq` Prelude.rnf branchName
+
+instance Data.ToJSON SubDomainSetting where
+  toJSON SubDomainSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("prefix" Data..= prefix),
+            Prelude.Just ("branchName" Data..= branchName)
+          ]
+      )
diff --git a/gen/Amazonka/Amplify/Types/Webhook.hs b/gen/Amazonka/Amplify/Types/Webhook.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/Types/Webhook.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.Types.Webhook
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Amplify.Types.Webhook where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a webhook that connects repository events to an Amplify app.
+--
+-- /See:/ 'newWebhook' smart constructor.
+data Webhook = Webhook'
+  { -- | The Amazon Resource Name (ARN) for the webhook.
+    webhookArn :: Prelude.Text,
+    -- | The ID of the webhook.
+    webhookId :: Prelude.Text,
+    -- | The URL of the webhook.
+    webhookUrl :: Prelude.Text,
+    -- | The name for a branch that is part of an Amplify app.
+    branchName :: Prelude.Text,
+    -- | The description for a webhook.
+    description :: Prelude.Text,
+    -- | The create date and time for a webhook.
+    createTime :: Data.POSIX,
+    -- | Updates the date and time for a webhook.
+    updateTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Webhook' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'webhookArn', 'webhook_webhookArn' - The Amazon Resource Name (ARN) for the webhook.
+--
+-- 'webhookId', 'webhook_webhookId' - The ID of the webhook.
+--
+-- 'webhookUrl', 'webhook_webhookUrl' - The URL of the webhook.
+--
+-- 'branchName', 'webhook_branchName' - The name for a branch that is part of an Amplify app.
+--
+-- 'description', 'webhook_description' - The description for a webhook.
+--
+-- 'createTime', 'webhook_createTime' - The create date and time for a webhook.
+--
+-- 'updateTime', 'webhook_updateTime' - Updates the date and time for a webhook.
+newWebhook ::
+  -- | 'webhookArn'
+  Prelude.Text ->
+  -- | 'webhookId'
+  Prelude.Text ->
+  -- | 'webhookUrl'
+  Prelude.Text ->
+  -- | 'branchName'
+  Prelude.Text ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  Webhook
+newWebhook
+  pWebhookArn_
+  pWebhookId_
+  pWebhookUrl_
+  pBranchName_
+  pDescription_
+  pCreateTime_
+  pUpdateTime_ =
+    Webhook'
+      { webhookArn = pWebhookArn_,
+        webhookId = pWebhookId_,
+        webhookUrl = pWebhookUrl_,
+        branchName = pBranchName_,
+        description = pDescription_,
+        createTime = Data._Time Lens.# pCreateTime_,
+        updateTime = Data._Time Lens.# pUpdateTime_
+      }
+
+-- | The Amazon Resource Name (ARN) for the webhook.
+webhook_webhookArn :: Lens.Lens' Webhook Prelude.Text
+webhook_webhookArn = Lens.lens (\Webhook' {webhookArn} -> webhookArn) (\s@Webhook' {} a -> s {webhookArn = a} :: Webhook)
+
+-- | The ID of the webhook.
+webhook_webhookId :: Lens.Lens' Webhook Prelude.Text
+webhook_webhookId = Lens.lens (\Webhook' {webhookId} -> webhookId) (\s@Webhook' {} a -> s {webhookId = a} :: Webhook)
+
+-- | The URL of the webhook.
+webhook_webhookUrl :: Lens.Lens' Webhook Prelude.Text
+webhook_webhookUrl = Lens.lens (\Webhook' {webhookUrl} -> webhookUrl) (\s@Webhook' {} a -> s {webhookUrl = a} :: Webhook)
+
+-- | The name for a branch that is part of an Amplify app.
+webhook_branchName :: Lens.Lens' Webhook Prelude.Text
+webhook_branchName = Lens.lens (\Webhook' {branchName} -> branchName) (\s@Webhook' {} a -> s {branchName = a} :: Webhook)
+
+-- | The description for a webhook.
+webhook_description :: Lens.Lens' Webhook Prelude.Text
+webhook_description = Lens.lens (\Webhook' {description} -> description) (\s@Webhook' {} a -> s {description = a} :: Webhook)
+
+-- | The create date and time for a webhook.
+webhook_createTime :: Lens.Lens' Webhook Prelude.UTCTime
+webhook_createTime = Lens.lens (\Webhook' {createTime} -> createTime) (\s@Webhook' {} a -> s {createTime = a} :: Webhook) Prelude.. Data._Time
+
+-- | Updates the date and time for a webhook.
+webhook_updateTime :: Lens.Lens' Webhook Prelude.UTCTime
+webhook_updateTime = Lens.lens (\Webhook' {updateTime} -> updateTime) (\s@Webhook' {} a -> s {updateTime = a} :: Webhook) Prelude.. Data._Time
+
+instance Data.FromJSON Webhook where
+  parseJSON =
+    Data.withObject
+      "Webhook"
+      ( \x ->
+          Webhook'
+            Prelude.<$> (x Data..: "webhookArn")
+            Prelude.<*> (x Data..: "webhookId")
+            Prelude.<*> (x Data..: "webhookUrl")
+            Prelude.<*> (x Data..: "branchName")
+            Prelude.<*> (x Data..: "description")
+            Prelude.<*> (x Data..: "createTime")
+            Prelude.<*> (x Data..: "updateTime")
+      )
+
+instance Prelude.Hashable Webhook where
+  hashWithSalt _salt Webhook' {..} =
+    _salt
+      `Prelude.hashWithSalt` webhookArn
+      `Prelude.hashWithSalt` webhookId
+      `Prelude.hashWithSalt` webhookUrl
+      `Prelude.hashWithSalt` branchName
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` updateTime
+
+instance Prelude.NFData Webhook where
+  rnf Webhook' {..} =
+    Prelude.rnf webhookArn
+      `Prelude.seq` Prelude.rnf webhookId
+      `Prelude.seq` Prelude.rnf webhookUrl
+      `Prelude.seq` Prelude.rnf branchName
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Amplify/UntagResource.hs b/gen/Amazonka/Amplify/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/UntagResource.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.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)
+--
+-- Untags a resource with a specified Amazon Resource Name (ARN).
+module Amazonka.Amplify.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the untag resource request.
+--
+-- /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN) to use to untag a resource.
+    resourceArn :: Prelude.Text,
+    -- | The tag keys to use to untag a resource.
+    tagKeys :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) to use to untag a resource.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The tag keys to use to untag a resource.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'tagKeys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ pTagKeys_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Lens.coerced Lens.# pTagKeys_
+    }
+
+-- | The Amazon Resource Name (ARN) to use to untag a resource.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The tag keys to use to untag a resource.
+untagResource_tagKeys :: Lens.Lens' UntagResource (Prelude.NonEmpty Prelude.Text)
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | The response for the untag resource request.
+--
+-- /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Amplify/UpdateApp.hs b/gen/Amazonka/Amplify/UpdateApp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/UpdateApp.hs
@@ -0,0 +1,532 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.UpdateApp
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing Amplify app.
+module Amazonka.Amplify.UpdateApp
+  ( -- * Creating a Request
+    UpdateApp (..),
+    newUpdateApp,
+
+    -- * Request Lenses
+    updateApp_accessToken,
+    updateApp_autoBranchCreationConfig,
+    updateApp_autoBranchCreationPatterns,
+    updateApp_basicAuthCredentials,
+    updateApp_buildSpec,
+    updateApp_customHeaders,
+    updateApp_customRules,
+    updateApp_description,
+    updateApp_enableAutoBranchCreation,
+    updateApp_enableBasicAuth,
+    updateApp_enableBranchAutoBuild,
+    updateApp_enableBranchAutoDeletion,
+    updateApp_environmentVariables,
+    updateApp_iamServiceRoleArn,
+    updateApp_name,
+    updateApp_oauthToken,
+    updateApp_platform,
+    updateApp_repository,
+    updateApp_appId,
+
+    -- * Destructuring the Response
+    UpdateAppResponse (..),
+    newUpdateAppResponse,
+
+    -- * Response Lenses
+    updateAppResponse_httpStatus,
+    updateAppResponse_app,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the update app request.
+--
+-- /See:/ 'newUpdateApp' smart constructor.
+data UpdateApp = UpdateApp'
+  { -- | The personal access token for a GitHub repository for an Amplify app.
+    -- The personal access token is used to authorize access to a GitHub
+    -- repository using the Amplify GitHub App. The token is not stored.
+    --
+    -- Use @accessToken@ for GitHub repositories only. To authorize access to a
+    -- repository provider such as Bitbucket or CodeCommit, use @oauthToken@.
+    --
+    -- You must specify either @accessToken@ or @oauthToken@ when you update an
+    -- app.
+    --
+    -- Existing Amplify apps deployed from a GitHub repository using OAuth
+    -- continue to work with CI\/CD. However, we strongly recommend that you
+    -- migrate these apps to use the GitHub App. For more information, see
+    -- <https://docs.aws.amazon.com/amplify/latest/UserGuide/setting-up-GitHub-access.html#migrating-to-github-app-auth Migrating an existing OAuth app to the Amplify GitHub App>
+    -- in the /Amplify User Guide/ .
+    accessToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The automated branch creation configuration for an Amplify app.
+    autoBranchCreationConfig :: Prelude.Maybe AutoBranchCreationConfig,
+    -- | Describes the automated branch creation glob patterns for an Amplify
+    -- app.
+    autoBranchCreationPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | The basic authorization credentials for an Amplify app. You must
+    -- base64-encode the authorization credentials and provide them in the
+    -- format @user:password@.
+    basicAuthCredentials :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The build specification (build spec) for an Amplify app.
+    buildSpec :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The custom HTTP headers for an Amplify app.
+    customHeaders :: Prelude.Maybe Prelude.Text,
+    -- | The custom redirect and rewrite rules for an Amplify app.
+    customRules :: Prelude.Maybe [CustomRule],
+    -- | The description for an Amplify app.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Enables automated branch creation for an Amplify app.
+    enableAutoBranchCreation :: Prelude.Maybe Prelude.Bool,
+    -- | Enables basic authorization for an Amplify app.
+    enableBasicAuth :: Prelude.Maybe Prelude.Bool,
+    -- | Enables branch auto-building for an Amplify app.
+    enableBranchAutoBuild :: Prelude.Maybe Prelude.Bool,
+    -- | Automatically disconnects a branch in the Amplify Console when you
+    -- delete a branch from your Git repository.
+    enableBranchAutoDeletion :: Prelude.Maybe Prelude.Bool,
+    -- | The environment variables for an Amplify app.
+    environmentVariables :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The AWS Identity and Access Management (IAM) service role for an Amplify
+    -- app.
+    iamServiceRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The name for an Amplify app.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The OAuth token for a third-party source control system for an Amplify
+    -- app. The OAuth token is used to create a webhook and a read-only deploy
+    -- key using SSH cloning. The OAuth token is not stored.
+    --
+    -- Use @oauthToken@ for repository providers other than GitHub, such as
+    -- Bitbucket or CodeCommit.
+    --
+    -- To authorize access to GitHub as your repository provider, use
+    -- @accessToken@.
+    --
+    -- You must specify either @oauthToken@ or @accessToken@ when you update an
+    -- app.
+    --
+    -- Existing Amplify apps deployed from a GitHub repository using OAuth
+    -- continue to work with CI\/CD. However, we strongly recommend that you
+    -- migrate these apps to use the GitHub App. For more information, see
+    -- <https://docs.aws.amazon.com/amplify/latest/UserGuide/setting-up-GitHub-access.html#migrating-to-github-app-auth Migrating an existing OAuth app to the Amplify GitHub App>
+    -- in the /Amplify User Guide/ .
+    oauthToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The platform for the Amplify app. For a static app, set the platform
+    -- type to @WEB@. For a dynamic server-side rendered (SSR) app, set the
+    -- platform type to @WEB_COMPUTE@. For an app requiring Amplify Hosting\'s
+    -- original SSR support only, set the platform type to @WEB_DYNAMIC@.
+    platform :: Prelude.Maybe Platform,
+    -- | The name of the repository for an Amplify app
+    repository :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateApp' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessToken', 'updateApp_accessToken' - The personal access token for a GitHub repository for an Amplify app.
+-- The personal access token is used to authorize access to a GitHub
+-- repository using the Amplify GitHub App. The token is not stored.
+--
+-- Use @accessToken@ for GitHub repositories only. To authorize access to a
+-- repository provider such as Bitbucket or CodeCommit, use @oauthToken@.
+--
+-- You must specify either @accessToken@ or @oauthToken@ when you update an
+-- app.
+--
+-- Existing Amplify apps deployed from a GitHub repository using OAuth
+-- continue to work with CI\/CD. However, we strongly recommend that you
+-- migrate these apps to use the GitHub App. For more information, see
+-- <https://docs.aws.amazon.com/amplify/latest/UserGuide/setting-up-GitHub-access.html#migrating-to-github-app-auth Migrating an existing OAuth app to the Amplify GitHub App>
+-- in the /Amplify User Guide/ .
+--
+-- 'autoBranchCreationConfig', 'updateApp_autoBranchCreationConfig' - The automated branch creation configuration for an Amplify app.
+--
+-- 'autoBranchCreationPatterns', 'updateApp_autoBranchCreationPatterns' - Describes the automated branch creation glob patterns for an Amplify
+-- app.
+--
+-- 'basicAuthCredentials', 'updateApp_basicAuthCredentials' - The basic authorization credentials for an Amplify app. You must
+-- base64-encode the authorization credentials and provide them in the
+-- format @user:password@.
+--
+-- 'buildSpec', 'updateApp_buildSpec' - The build specification (build spec) for an Amplify app.
+--
+-- 'customHeaders', 'updateApp_customHeaders' - The custom HTTP headers for an Amplify app.
+--
+-- 'customRules', 'updateApp_customRules' - The custom redirect and rewrite rules for an Amplify app.
+--
+-- 'description', 'updateApp_description' - The description for an Amplify app.
+--
+-- 'enableAutoBranchCreation', 'updateApp_enableAutoBranchCreation' - Enables automated branch creation for an Amplify app.
+--
+-- 'enableBasicAuth', 'updateApp_enableBasicAuth' - Enables basic authorization for an Amplify app.
+--
+-- 'enableBranchAutoBuild', 'updateApp_enableBranchAutoBuild' - Enables branch auto-building for an Amplify app.
+--
+-- 'enableBranchAutoDeletion', 'updateApp_enableBranchAutoDeletion' - Automatically disconnects a branch in the Amplify Console when you
+-- delete a branch from your Git repository.
+--
+-- 'environmentVariables', 'updateApp_environmentVariables' - The environment variables for an Amplify app.
+--
+-- 'iamServiceRoleArn', 'updateApp_iamServiceRoleArn' - The AWS Identity and Access Management (IAM) service role for an Amplify
+-- app.
+--
+-- 'name', 'updateApp_name' - The name for an Amplify app.
+--
+-- 'oauthToken', 'updateApp_oauthToken' - The OAuth token for a third-party source control system for an Amplify
+-- app. The OAuth token is used to create a webhook and a read-only deploy
+-- key using SSH cloning. The OAuth token is not stored.
+--
+-- Use @oauthToken@ for repository providers other than GitHub, such as
+-- Bitbucket or CodeCommit.
+--
+-- To authorize access to GitHub as your repository provider, use
+-- @accessToken@.
+--
+-- You must specify either @oauthToken@ or @accessToken@ when you update an
+-- app.
+--
+-- Existing Amplify apps deployed from a GitHub repository using OAuth
+-- continue to work with CI\/CD. However, we strongly recommend that you
+-- migrate these apps to use the GitHub App. For more information, see
+-- <https://docs.aws.amazon.com/amplify/latest/UserGuide/setting-up-GitHub-access.html#migrating-to-github-app-auth Migrating an existing OAuth app to the Amplify GitHub App>
+-- in the /Amplify User Guide/ .
+--
+-- 'platform', 'updateApp_platform' - The platform for the Amplify app. For a static app, set the platform
+-- type to @WEB@. For a dynamic server-side rendered (SSR) app, set the
+-- platform type to @WEB_COMPUTE@. For an app requiring Amplify Hosting\'s
+-- original SSR support only, set the platform type to @WEB_DYNAMIC@.
+--
+-- 'repository', 'updateApp_repository' - The name of the repository for an Amplify app
+--
+-- 'appId', 'updateApp_appId' - The unique ID for an Amplify app.
+newUpdateApp ::
+  -- | 'appId'
+  Prelude.Text ->
+  UpdateApp
+newUpdateApp pAppId_ =
+  UpdateApp'
+    { accessToken = Prelude.Nothing,
+      autoBranchCreationConfig = Prelude.Nothing,
+      autoBranchCreationPatterns = Prelude.Nothing,
+      basicAuthCredentials = Prelude.Nothing,
+      buildSpec = Prelude.Nothing,
+      customHeaders = Prelude.Nothing,
+      customRules = Prelude.Nothing,
+      description = Prelude.Nothing,
+      enableAutoBranchCreation = Prelude.Nothing,
+      enableBasicAuth = Prelude.Nothing,
+      enableBranchAutoBuild = Prelude.Nothing,
+      enableBranchAutoDeletion = Prelude.Nothing,
+      environmentVariables = Prelude.Nothing,
+      iamServiceRoleArn = Prelude.Nothing,
+      name = Prelude.Nothing,
+      oauthToken = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      repository = Prelude.Nothing,
+      appId = pAppId_
+    }
+
+-- | The personal access token for a GitHub repository for an Amplify app.
+-- The personal access token is used to authorize access to a GitHub
+-- repository using the Amplify GitHub App. The token is not stored.
+--
+-- Use @accessToken@ for GitHub repositories only. To authorize access to a
+-- repository provider such as Bitbucket or CodeCommit, use @oauthToken@.
+--
+-- You must specify either @accessToken@ or @oauthToken@ when you update an
+-- app.
+--
+-- Existing Amplify apps deployed from a GitHub repository using OAuth
+-- continue to work with CI\/CD. However, we strongly recommend that you
+-- migrate these apps to use the GitHub App. For more information, see
+-- <https://docs.aws.amazon.com/amplify/latest/UserGuide/setting-up-GitHub-access.html#migrating-to-github-app-auth Migrating an existing OAuth app to the Amplify GitHub App>
+-- in the /Amplify User Guide/ .
+updateApp_accessToken :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Text)
+updateApp_accessToken = Lens.lens (\UpdateApp' {accessToken} -> accessToken) (\s@UpdateApp' {} a -> s {accessToken = a} :: UpdateApp) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The automated branch creation configuration for an Amplify app.
+updateApp_autoBranchCreationConfig :: Lens.Lens' UpdateApp (Prelude.Maybe AutoBranchCreationConfig)
+updateApp_autoBranchCreationConfig = Lens.lens (\UpdateApp' {autoBranchCreationConfig} -> autoBranchCreationConfig) (\s@UpdateApp' {} a -> s {autoBranchCreationConfig = a} :: UpdateApp)
+
+-- | Describes the automated branch creation glob patterns for an Amplify
+-- app.
+updateApp_autoBranchCreationPatterns :: Lens.Lens' UpdateApp (Prelude.Maybe [Prelude.Text])
+updateApp_autoBranchCreationPatterns = Lens.lens (\UpdateApp' {autoBranchCreationPatterns} -> autoBranchCreationPatterns) (\s@UpdateApp' {} a -> s {autoBranchCreationPatterns = a} :: UpdateApp) Prelude.. Lens.mapping Lens.coerced
+
+-- | The basic authorization credentials for an Amplify app. You must
+-- base64-encode the authorization credentials and provide them in the
+-- format @user:password@.
+updateApp_basicAuthCredentials :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Text)
+updateApp_basicAuthCredentials = Lens.lens (\UpdateApp' {basicAuthCredentials} -> basicAuthCredentials) (\s@UpdateApp' {} a -> s {basicAuthCredentials = a} :: UpdateApp) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The build specification (build spec) for an Amplify app.
+updateApp_buildSpec :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Text)
+updateApp_buildSpec = Lens.lens (\UpdateApp' {buildSpec} -> buildSpec) (\s@UpdateApp' {} a -> s {buildSpec = a} :: UpdateApp) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The custom HTTP headers for an Amplify app.
+updateApp_customHeaders :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Text)
+updateApp_customHeaders = Lens.lens (\UpdateApp' {customHeaders} -> customHeaders) (\s@UpdateApp' {} a -> s {customHeaders = a} :: UpdateApp)
+
+-- | The custom redirect and rewrite rules for an Amplify app.
+updateApp_customRules :: Lens.Lens' UpdateApp (Prelude.Maybe [CustomRule])
+updateApp_customRules = Lens.lens (\UpdateApp' {customRules} -> customRules) (\s@UpdateApp' {} a -> s {customRules = a} :: UpdateApp) Prelude.. Lens.mapping Lens.coerced
+
+-- | The description for an Amplify app.
+updateApp_description :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Text)
+updateApp_description = Lens.lens (\UpdateApp' {description} -> description) (\s@UpdateApp' {} a -> s {description = a} :: UpdateApp)
+
+-- | Enables automated branch creation for an Amplify app.
+updateApp_enableAutoBranchCreation :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Bool)
+updateApp_enableAutoBranchCreation = Lens.lens (\UpdateApp' {enableAutoBranchCreation} -> enableAutoBranchCreation) (\s@UpdateApp' {} a -> s {enableAutoBranchCreation = a} :: UpdateApp)
+
+-- | Enables basic authorization for an Amplify app.
+updateApp_enableBasicAuth :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Bool)
+updateApp_enableBasicAuth = Lens.lens (\UpdateApp' {enableBasicAuth} -> enableBasicAuth) (\s@UpdateApp' {} a -> s {enableBasicAuth = a} :: UpdateApp)
+
+-- | Enables branch auto-building for an Amplify app.
+updateApp_enableBranchAutoBuild :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Bool)
+updateApp_enableBranchAutoBuild = Lens.lens (\UpdateApp' {enableBranchAutoBuild} -> enableBranchAutoBuild) (\s@UpdateApp' {} a -> s {enableBranchAutoBuild = a} :: UpdateApp)
+
+-- | Automatically disconnects a branch in the Amplify Console when you
+-- delete a branch from your Git repository.
+updateApp_enableBranchAutoDeletion :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Bool)
+updateApp_enableBranchAutoDeletion = Lens.lens (\UpdateApp' {enableBranchAutoDeletion} -> enableBranchAutoDeletion) (\s@UpdateApp' {} a -> s {enableBranchAutoDeletion = a} :: UpdateApp)
+
+-- | The environment variables for an Amplify app.
+updateApp_environmentVariables :: Lens.Lens' UpdateApp (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateApp_environmentVariables = Lens.lens (\UpdateApp' {environmentVariables} -> environmentVariables) (\s@UpdateApp' {} a -> s {environmentVariables = a} :: UpdateApp) Prelude.. Lens.mapping Lens.coerced
+
+-- | The AWS Identity and Access Management (IAM) service role for an Amplify
+-- app.
+updateApp_iamServiceRoleArn :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Text)
+updateApp_iamServiceRoleArn = Lens.lens (\UpdateApp' {iamServiceRoleArn} -> iamServiceRoleArn) (\s@UpdateApp' {} a -> s {iamServiceRoleArn = a} :: UpdateApp)
+
+-- | The name for an Amplify app.
+updateApp_name :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Text)
+updateApp_name = Lens.lens (\UpdateApp' {name} -> name) (\s@UpdateApp' {} a -> s {name = a} :: UpdateApp)
+
+-- | The OAuth token for a third-party source control system for an Amplify
+-- app. The OAuth token is used to create a webhook and a read-only deploy
+-- key using SSH cloning. The OAuth token is not stored.
+--
+-- Use @oauthToken@ for repository providers other than GitHub, such as
+-- Bitbucket or CodeCommit.
+--
+-- To authorize access to GitHub as your repository provider, use
+-- @accessToken@.
+--
+-- You must specify either @oauthToken@ or @accessToken@ when you update an
+-- app.
+--
+-- Existing Amplify apps deployed from a GitHub repository using OAuth
+-- continue to work with CI\/CD. However, we strongly recommend that you
+-- migrate these apps to use the GitHub App. For more information, see
+-- <https://docs.aws.amazon.com/amplify/latest/UserGuide/setting-up-GitHub-access.html#migrating-to-github-app-auth Migrating an existing OAuth app to the Amplify GitHub App>
+-- in the /Amplify User Guide/ .
+updateApp_oauthToken :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Text)
+updateApp_oauthToken = Lens.lens (\UpdateApp' {oauthToken} -> oauthToken) (\s@UpdateApp' {} a -> s {oauthToken = a} :: UpdateApp) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The platform for the Amplify app. For a static app, set the platform
+-- type to @WEB@. For a dynamic server-side rendered (SSR) app, set the
+-- platform type to @WEB_COMPUTE@. For an app requiring Amplify Hosting\'s
+-- original SSR support only, set the platform type to @WEB_DYNAMIC@.
+updateApp_platform :: Lens.Lens' UpdateApp (Prelude.Maybe Platform)
+updateApp_platform = Lens.lens (\UpdateApp' {platform} -> platform) (\s@UpdateApp' {} a -> s {platform = a} :: UpdateApp)
+
+-- | The name of the repository for an Amplify app
+updateApp_repository :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Text)
+updateApp_repository = Lens.lens (\UpdateApp' {repository} -> repository) (\s@UpdateApp' {} a -> s {repository = a} :: UpdateApp)
+
+-- | The unique ID for an Amplify app.
+updateApp_appId :: Lens.Lens' UpdateApp Prelude.Text
+updateApp_appId = Lens.lens (\UpdateApp' {appId} -> appId) (\s@UpdateApp' {} a -> s {appId = a} :: UpdateApp)
+
+instance Core.AWSRequest UpdateApp where
+  type AWSResponse UpdateApp = UpdateAppResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAppResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "app")
+      )
+
+instance Prelude.Hashable UpdateApp where
+  hashWithSalt _salt UpdateApp' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessToken
+      `Prelude.hashWithSalt` autoBranchCreationConfig
+      `Prelude.hashWithSalt` autoBranchCreationPatterns
+      `Prelude.hashWithSalt` basicAuthCredentials
+      `Prelude.hashWithSalt` buildSpec
+      `Prelude.hashWithSalt` customHeaders
+      `Prelude.hashWithSalt` customRules
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` enableAutoBranchCreation
+      `Prelude.hashWithSalt` enableBasicAuth
+      `Prelude.hashWithSalt` enableBranchAutoBuild
+      `Prelude.hashWithSalt` enableBranchAutoDeletion
+      `Prelude.hashWithSalt` environmentVariables
+      `Prelude.hashWithSalt` iamServiceRoleArn
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` oauthToken
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` repository
+      `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData UpdateApp where
+  rnf UpdateApp' {..} =
+    Prelude.rnf accessToken
+      `Prelude.seq` Prelude.rnf autoBranchCreationConfig
+      `Prelude.seq` Prelude.rnf autoBranchCreationPatterns
+      `Prelude.seq` Prelude.rnf basicAuthCredentials
+      `Prelude.seq` Prelude.rnf buildSpec
+      `Prelude.seq` Prelude.rnf customHeaders
+      `Prelude.seq` Prelude.rnf customRules
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf enableAutoBranchCreation
+      `Prelude.seq` Prelude.rnf enableBasicAuth
+      `Prelude.seq` Prelude.rnf enableBranchAutoBuild
+      `Prelude.seq` Prelude.rnf enableBranchAutoDeletion
+      `Prelude.seq` Prelude.rnf environmentVariables
+      `Prelude.seq` Prelude.rnf iamServiceRoleArn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf oauthToken
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf repository
+      `Prelude.seq` Prelude.rnf appId
+
+instance Data.ToHeaders UpdateApp where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateApp where
+  toJSON UpdateApp' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("accessToken" Data..=) Prelude.<$> accessToken,
+            ("autoBranchCreationConfig" Data..=)
+              Prelude.<$> autoBranchCreationConfig,
+            ("autoBranchCreationPatterns" Data..=)
+              Prelude.<$> autoBranchCreationPatterns,
+            ("basicAuthCredentials" Data..=)
+              Prelude.<$> basicAuthCredentials,
+            ("buildSpec" Data..=) Prelude.<$> buildSpec,
+            ("customHeaders" Data..=) Prelude.<$> customHeaders,
+            ("customRules" Data..=) Prelude.<$> customRules,
+            ("description" Data..=) Prelude.<$> description,
+            ("enableAutoBranchCreation" Data..=)
+              Prelude.<$> enableAutoBranchCreation,
+            ("enableBasicAuth" Data..=)
+              Prelude.<$> enableBasicAuth,
+            ("enableBranchAutoBuild" Data..=)
+              Prelude.<$> enableBranchAutoBuild,
+            ("enableBranchAutoDeletion" Data..=)
+              Prelude.<$> enableBranchAutoDeletion,
+            ("environmentVariables" Data..=)
+              Prelude.<$> environmentVariables,
+            ("iamServiceRoleArn" Data..=)
+              Prelude.<$> iamServiceRoleArn,
+            ("name" Data..=) Prelude.<$> name,
+            ("oauthToken" Data..=) Prelude.<$> oauthToken,
+            ("platform" Data..=) Prelude.<$> platform,
+            ("repository" Data..=) Prelude.<$> repository
+          ]
+      )
+
+instance Data.ToPath UpdateApp where
+  toPath UpdateApp' {..} =
+    Prelude.mconcat ["/apps/", Data.toBS appId]
+
+instance Data.ToQuery UpdateApp where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for an Amplify app update request.
+--
+-- /See:/ 'newUpdateAppResponse' smart constructor.
+data UpdateAppResponse = UpdateAppResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Represents the updated Amplify app.
+    app :: App
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAppResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateAppResponse_httpStatus' - The response's http status code.
+--
+-- 'app', 'updateAppResponse_app' - Represents the updated Amplify app.
+newUpdateAppResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'app'
+  App ->
+  UpdateAppResponse
+newUpdateAppResponse pHttpStatus_ pApp_ =
+  UpdateAppResponse'
+    { httpStatus = pHttpStatus_,
+      app = pApp_
+    }
+
+-- | The response's http status code.
+updateAppResponse_httpStatus :: Lens.Lens' UpdateAppResponse Prelude.Int
+updateAppResponse_httpStatus = Lens.lens (\UpdateAppResponse' {httpStatus} -> httpStatus) (\s@UpdateAppResponse' {} a -> s {httpStatus = a} :: UpdateAppResponse)
+
+-- | Represents the updated Amplify app.
+updateAppResponse_app :: Lens.Lens' UpdateAppResponse App
+updateAppResponse_app = Lens.lens (\UpdateAppResponse' {app} -> app) (\s@UpdateAppResponse' {} a -> s {app = a} :: UpdateAppResponse)
+
+instance Prelude.NFData UpdateAppResponse where
+  rnf UpdateAppResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf app
diff --git a/gen/Amazonka/Amplify/UpdateBranch.hs b/gen/Amazonka/Amplify/UpdateBranch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/UpdateBranch.hs
@@ -0,0 +1,426 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.UpdateBranch
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a branch for an Amplify app.
+module Amazonka.Amplify.UpdateBranch
+  ( -- * Creating a Request
+    UpdateBranch (..),
+    newUpdateBranch,
+
+    -- * Request Lenses
+    updateBranch_backendEnvironmentArn,
+    updateBranch_basicAuthCredentials,
+    updateBranch_buildSpec,
+    updateBranch_description,
+    updateBranch_displayName,
+    updateBranch_enableAutoBuild,
+    updateBranch_enableBasicAuth,
+    updateBranch_enableNotification,
+    updateBranch_enablePerformanceMode,
+    updateBranch_enablePullRequestPreview,
+    updateBranch_environmentVariables,
+    updateBranch_framework,
+    updateBranch_pullRequestEnvironmentName,
+    updateBranch_stage,
+    updateBranch_ttl,
+    updateBranch_appId,
+    updateBranch_branchName,
+
+    -- * Destructuring the Response
+    UpdateBranchResponse (..),
+    newUpdateBranchResponse,
+
+    -- * Response Lenses
+    updateBranchResponse_httpStatus,
+    updateBranchResponse_branch,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the update branch request.
+--
+-- /See:/ 'newUpdateBranch' smart constructor.
+data UpdateBranch = UpdateBranch'
+  { -- | The Amazon Resource Name (ARN) for a backend environment that is part of
+    -- an Amplify app.
+    backendEnvironmentArn :: Prelude.Maybe Prelude.Text,
+    -- | The basic authorization credentials for the branch. You must
+    -- base64-encode the authorization credentials and provide them in the
+    -- format @user:password@.
+    basicAuthCredentials :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The build specification (build spec) for the branch.
+    buildSpec :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The description for the branch.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The display name for a branch. This is used as the default domain
+    -- prefix.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | Enables auto building for the branch.
+    enableAutoBuild :: Prelude.Maybe Prelude.Bool,
+    -- | Enables basic authorization for the branch.
+    enableBasicAuth :: Prelude.Maybe Prelude.Bool,
+    -- | Enables notifications for the branch.
+    enableNotification :: Prelude.Maybe Prelude.Bool,
+    -- | Enables performance mode for the branch.
+    --
+    -- Performance mode optimizes for faster hosting performance by keeping
+    -- content cached at the edge for a longer interval. When performance mode
+    -- is enabled, hosting configuration or code changes can take up to 10
+    -- minutes to roll out.
+    enablePerformanceMode :: Prelude.Maybe Prelude.Bool,
+    -- | Enables pull request previews for this branch.
+    enablePullRequestPreview :: Prelude.Maybe Prelude.Bool,
+    -- | The environment variables for the branch.
+    environmentVariables :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The framework for the branch.
+    framework :: Prelude.Maybe Prelude.Text,
+    -- | The Amplify environment name for the pull request.
+    pullRequestEnvironmentName :: Prelude.Maybe Prelude.Text,
+    -- | Describes the current stage for the branch.
+    stage :: Prelude.Maybe Stage,
+    -- | The content Time to Live (TTL) for the website in seconds.
+    ttl :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The name for the branch.
+    branchName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateBranch' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'backendEnvironmentArn', 'updateBranch_backendEnvironmentArn' - The Amazon Resource Name (ARN) for a backend environment that is part of
+-- an Amplify app.
+--
+-- 'basicAuthCredentials', 'updateBranch_basicAuthCredentials' - The basic authorization credentials for the branch. You must
+-- base64-encode the authorization credentials and provide them in the
+-- format @user:password@.
+--
+-- 'buildSpec', 'updateBranch_buildSpec' - The build specification (build spec) for the branch.
+--
+-- 'description', 'updateBranch_description' - The description for the branch.
+--
+-- 'displayName', 'updateBranch_displayName' - The display name for a branch. This is used as the default domain
+-- prefix.
+--
+-- 'enableAutoBuild', 'updateBranch_enableAutoBuild' - Enables auto building for the branch.
+--
+-- 'enableBasicAuth', 'updateBranch_enableBasicAuth' - Enables basic authorization for the branch.
+--
+-- 'enableNotification', 'updateBranch_enableNotification' - Enables notifications for the branch.
+--
+-- 'enablePerformanceMode', 'updateBranch_enablePerformanceMode' - Enables performance mode for the branch.
+--
+-- Performance mode optimizes for faster hosting performance by keeping
+-- content cached at the edge for a longer interval. When performance mode
+-- is enabled, hosting configuration or code changes can take up to 10
+-- minutes to roll out.
+--
+-- 'enablePullRequestPreview', 'updateBranch_enablePullRequestPreview' - Enables pull request previews for this branch.
+--
+-- 'environmentVariables', 'updateBranch_environmentVariables' - The environment variables for the branch.
+--
+-- 'framework', 'updateBranch_framework' - The framework for the branch.
+--
+-- 'pullRequestEnvironmentName', 'updateBranch_pullRequestEnvironmentName' - The Amplify environment name for the pull request.
+--
+-- 'stage', 'updateBranch_stage' - Describes the current stage for the branch.
+--
+-- 'ttl', 'updateBranch_ttl' - The content Time to Live (TTL) for the website in seconds.
+--
+-- 'appId', 'updateBranch_appId' - The unique ID for an Amplify app.
+--
+-- 'branchName', 'updateBranch_branchName' - The name for the branch.
+newUpdateBranch ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'branchName'
+  Prelude.Text ->
+  UpdateBranch
+newUpdateBranch pAppId_ pBranchName_ =
+  UpdateBranch'
+    { backendEnvironmentArn =
+        Prelude.Nothing,
+      basicAuthCredentials = Prelude.Nothing,
+      buildSpec = Prelude.Nothing,
+      description = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      enableAutoBuild = Prelude.Nothing,
+      enableBasicAuth = Prelude.Nothing,
+      enableNotification = Prelude.Nothing,
+      enablePerformanceMode = Prelude.Nothing,
+      enablePullRequestPreview = Prelude.Nothing,
+      environmentVariables = Prelude.Nothing,
+      framework = Prelude.Nothing,
+      pullRequestEnvironmentName = Prelude.Nothing,
+      stage = Prelude.Nothing,
+      ttl = Prelude.Nothing,
+      appId = pAppId_,
+      branchName = pBranchName_
+    }
+
+-- | The Amazon Resource Name (ARN) for a backend environment that is part of
+-- an Amplify app.
+updateBranch_backendEnvironmentArn :: Lens.Lens' UpdateBranch (Prelude.Maybe Prelude.Text)
+updateBranch_backendEnvironmentArn = Lens.lens (\UpdateBranch' {backendEnvironmentArn} -> backendEnvironmentArn) (\s@UpdateBranch' {} a -> s {backendEnvironmentArn = a} :: UpdateBranch)
+
+-- | The basic authorization credentials for the branch. You must
+-- base64-encode the authorization credentials and provide them in the
+-- format @user:password@.
+updateBranch_basicAuthCredentials :: Lens.Lens' UpdateBranch (Prelude.Maybe Prelude.Text)
+updateBranch_basicAuthCredentials = Lens.lens (\UpdateBranch' {basicAuthCredentials} -> basicAuthCredentials) (\s@UpdateBranch' {} a -> s {basicAuthCredentials = a} :: UpdateBranch) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The build specification (build spec) for the branch.
+updateBranch_buildSpec :: Lens.Lens' UpdateBranch (Prelude.Maybe Prelude.Text)
+updateBranch_buildSpec = Lens.lens (\UpdateBranch' {buildSpec} -> buildSpec) (\s@UpdateBranch' {} a -> s {buildSpec = a} :: UpdateBranch) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The description for the branch.
+updateBranch_description :: Lens.Lens' UpdateBranch (Prelude.Maybe Prelude.Text)
+updateBranch_description = Lens.lens (\UpdateBranch' {description} -> description) (\s@UpdateBranch' {} a -> s {description = a} :: UpdateBranch)
+
+-- | The display name for a branch. This is used as the default domain
+-- prefix.
+updateBranch_displayName :: Lens.Lens' UpdateBranch (Prelude.Maybe Prelude.Text)
+updateBranch_displayName = Lens.lens (\UpdateBranch' {displayName} -> displayName) (\s@UpdateBranch' {} a -> s {displayName = a} :: UpdateBranch)
+
+-- | Enables auto building for the branch.
+updateBranch_enableAutoBuild :: Lens.Lens' UpdateBranch (Prelude.Maybe Prelude.Bool)
+updateBranch_enableAutoBuild = Lens.lens (\UpdateBranch' {enableAutoBuild} -> enableAutoBuild) (\s@UpdateBranch' {} a -> s {enableAutoBuild = a} :: UpdateBranch)
+
+-- | Enables basic authorization for the branch.
+updateBranch_enableBasicAuth :: Lens.Lens' UpdateBranch (Prelude.Maybe Prelude.Bool)
+updateBranch_enableBasicAuth = Lens.lens (\UpdateBranch' {enableBasicAuth} -> enableBasicAuth) (\s@UpdateBranch' {} a -> s {enableBasicAuth = a} :: UpdateBranch)
+
+-- | Enables notifications for the branch.
+updateBranch_enableNotification :: Lens.Lens' UpdateBranch (Prelude.Maybe Prelude.Bool)
+updateBranch_enableNotification = Lens.lens (\UpdateBranch' {enableNotification} -> enableNotification) (\s@UpdateBranch' {} a -> s {enableNotification = a} :: UpdateBranch)
+
+-- | Enables performance mode for the branch.
+--
+-- Performance mode optimizes for faster hosting performance by keeping
+-- content cached at the edge for a longer interval. When performance mode
+-- is enabled, hosting configuration or code changes can take up to 10
+-- minutes to roll out.
+updateBranch_enablePerformanceMode :: Lens.Lens' UpdateBranch (Prelude.Maybe Prelude.Bool)
+updateBranch_enablePerformanceMode = Lens.lens (\UpdateBranch' {enablePerformanceMode} -> enablePerformanceMode) (\s@UpdateBranch' {} a -> s {enablePerformanceMode = a} :: UpdateBranch)
+
+-- | Enables pull request previews for this branch.
+updateBranch_enablePullRequestPreview :: Lens.Lens' UpdateBranch (Prelude.Maybe Prelude.Bool)
+updateBranch_enablePullRequestPreview = Lens.lens (\UpdateBranch' {enablePullRequestPreview} -> enablePullRequestPreview) (\s@UpdateBranch' {} a -> s {enablePullRequestPreview = a} :: UpdateBranch)
+
+-- | The environment variables for the branch.
+updateBranch_environmentVariables :: Lens.Lens' UpdateBranch (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateBranch_environmentVariables = Lens.lens (\UpdateBranch' {environmentVariables} -> environmentVariables) (\s@UpdateBranch' {} a -> s {environmentVariables = a} :: UpdateBranch) Prelude.. Lens.mapping Lens.coerced
+
+-- | The framework for the branch.
+updateBranch_framework :: Lens.Lens' UpdateBranch (Prelude.Maybe Prelude.Text)
+updateBranch_framework = Lens.lens (\UpdateBranch' {framework} -> framework) (\s@UpdateBranch' {} a -> s {framework = a} :: UpdateBranch)
+
+-- | The Amplify environment name for the pull request.
+updateBranch_pullRequestEnvironmentName :: Lens.Lens' UpdateBranch (Prelude.Maybe Prelude.Text)
+updateBranch_pullRequestEnvironmentName = Lens.lens (\UpdateBranch' {pullRequestEnvironmentName} -> pullRequestEnvironmentName) (\s@UpdateBranch' {} a -> s {pullRequestEnvironmentName = a} :: UpdateBranch)
+
+-- | Describes the current stage for the branch.
+updateBranch_stage :: Lens.Lens' UpdateBranch (Prelude.Maybe Stage)
+updateBranch_stage = Lens.lens (\UpdateBranch' {stage} -> stage) (\s@UpdateBranch' {} a -> s {stage = a} :: UpdateBranch)
+
+-- | The content Time to Live (TTL) for the website in seconds.
+updateBranch_ttl :: Lens.Lens' UpdateBranch (Prelude.Maybe Prelude.Text)
+updateBranch_ttl = Lens.lens (\UpdateBranch' {ttl} -> ttl) (\s@UpdateBranch' {} a -> s {ttl = a} :: UpdateBranch)
+
+-- | The unique ID for an Amplify app.
+updateBranch_appId :: Lens.Lens' UpdateBranch Prelude.Text
+updateBranch_appId = Lens.lens (\UpdateBranch' {appId} -> appId) (\s@UpdateBranch' {} a -> s {appId = a} :: UpdateBranch)
+
+-- | The name for the branch.
+updateBranch_branchName :: Lens.Lens' UpdateBranch Prelude.Text
+updateBranch_branchName = Lens.lens (\UpdateBranch' {branchName} -> branchName) (\s@UpdateBranch' {} a -> s {branchName = a} :: UpdateBranch)
+
+instance Core.AWSRequest UpdateBranch where
+  type AWSResponse UpdateBranch = UpdateBranchResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateBranchResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "branch")
+      )
+
+instance Prelude.Hashable UpdateBranch where
+  hashWithSalt _salt UpdateBranch' {..} =
+    _salt
+      `Prelude.hashWithSalt` backendEnvironmentArn
+      `Prelude.hashWithSalt` basicAuthCredentials
+      `Prelude.hashWithSalt` buildSpec
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` enableAutoBuild
+      `Prelude.hashWithSalt` enableBasicAuth
+      `Prelude.hashWithSalt` enableNotification
+      `Prelude.hashWithSalt` enablePerformanceMode
+      `Prelude.hashWithSalt` enablePullRequestPreview
+      `Prelude.hashWithSalt` environmentVariables
+      `Prelude.hashWithSalt` framework
+      `Prelude.hashWithSalt` pullRequestEnvironmentName
+      `Prelude.hashWithSalt` stage
+      `Prelude.hashWithSalt` ttl
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` branchName
+
+instance Prelude.NFData UpdateBranch where
+  rnf UpdateBranch' {..} =
+    Prelude.rnf backendEnvironmentArn
+      `Prelude.seq` Prelude.rnf basicAuthCredentials
+      `Prelude.seq` Prelude.rnf buildSpec
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf enableAutoBuild
+      `Prelude.seq` Prelude.rnf enableBasicAuth
+      `Prelude.seq` Prelude.rnf enableNotification
+      `Prelude.seq` Prelude.rnf enablePerformanceMode
+      `Prelude.seq` Prelude.rnf enablePullRequestPreview
+      `Prelude.seq` Prelude.rnf environmentVariables
+      `Prelude.seq` Prelude.rnf framework
+      `Prelude.seq` Prelude.rnf pullRequestEnvironmentName
+      `Prelude.seq` Prelude.rnf stage
+      `Prelude.seq` Prelude.rnf ttl
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf branchName
+
+instance Data.ToHeaders UpdateBranch where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateBranch where
+  toJSON UpdateBranch' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("backendEnvironmentArn" Data..=)
+              Prelude.<$> backendEnvironmentArn,
+            ("basicAuthCredentials" Data..=)
+              Prelude.<$> basicAuthCredentials,
+            ("buildSpec" Data..=) Prelude.<$> buildSpec,
+            ("description" Data..=) Prelude.<$> description,
+            ("displayName" Data..=) Prelude.<$> displayName,
+            ("enableAutoBuild" Data..=)
+              Prelude.<$> enableAutoBuild,
+            ("enableBasicAuth" Data..=)
+              Prelude.<$> enableBasicAuth,
+            ("enableNotification" Data..=)
+              Prelude.<$> enableNotification,
+            ("enablePerformanceMode" Data..=)
+              Prelude.<$> enablePerformanceMode,
+            ("enablePullRequestPreview" Data..=)
+              Prelude.<$> enablePullRequestPreview,
+            ("environmentVariables" Data..=)
+              Prelude.<$> environmentVariables,
+            ("framework" Data..=) Prelude.<$> framework,
+            ("pullRequestEnvironmentName" Data..=)
+              Prelude.<$> pullRequestEnvironmentName,
+            ("stage" Data..=) Prelude.<$> stage,
+            ("ttl" Data..=) Prelude.<$> ttl
+          ]
+      )
+
+instance Data.ToPath UpdateBranch where
+  toPath UpdateBranch' {..} =
+    Prelude.mconcat
+      [ "/apps/",
+        Data.toBS appId,
+        "/branches/",
+        Data.toBS branchName
+      ]
+
+instance Data.ToQuery UpdateBranch where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the update branch request.
+--
+-- /See:/ 'newUpdateBranchResponse' smart constructor.
+data UpdateBranchResponse = UpdateBranchResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The branch for an Amplify app, which maps to a third-party repository
+    -- branch.
+    branch :: Branch
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateBranchResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateBranchResponse_httpStatus' - The response's http status code.
+--
+-- 'branch', 'updateBranchResponse_branch' - The branch for an Amplify app, which maps to a third-party repository
+-- branch.
+newUpdateBranchResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'branch'
+  Branch ->
+  UpdateBranchResponse
+newUpdateBranchResponse pHttpStatus_ pBranch_ =
+  UpdateBranchResponse'
+    { httpStatus = pHttpStatus_,
+      branch = pBranch_
+    }
+
+-- | The response's http status code.
+updateBranchResponse_httpStatus :: Lens.Lens' UpdateBranchResponse Prelude.Int
+updateBranchResponse_httpStatus = Lens.lens (\UpdateBranchResponse' {httpStatus} -> httpStatus) (\s@UpdateBranchResponse' {} a -> s {httpStatus = a} :: UpdateBranchResponse)
+
+-- | The branch for an Amplify app, which maps to a third-party repository
+-- branch.
+updateBranchResponse_branch :: Lens.Lens' UpdateBranchResponse Branch
+updateBranchResponse_branch = Lens.lens (\UpdateBranchResponse' {branch} -> branch) (\s@UpdateBranchResponse' {} a -> s {branch = a} :: UpdateBranchResponse)
+
+instance Prelude.NFData UpdateBranchResponse where
+  rnf UpdateBranchResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf branch
diff --git a/gen/Amazonka/Amplify/UpdateDomainAssociation.hs b/gen/Amazonka/Amplify/UpdateDomainAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/UpdateDomainAssociation.hs
@@ -0,0 +1,262 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.UpdateDomainAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new domain association for an Amplify app.
+module Amazonka.Amplify.UpdateDomainAssociation
+  ( -- * Creating a Request
+    UpdateDomainAssociation (..),
+    newUpdateDomainAssociation,
+
+    -- * Request Lenses
+    updateDomainAssociation_autoSubDomainCreationPatterns,
+    updateDomainAssociation_autoSubDomainIAMRole,
+    updateDomainAssociation_enableAutoSubDomain,
+    updateDomainAssociation_subDomainSettings,
+    updateDomainAssociation_appId,
+    updateDomainAssociation_domainName,
+
+    -- * Destructuring the Response
+    UpdateDomainAssociationResponse (..),
+    newUpdateDomainAssociationResponse,
+
+    -- * Response Lenses
+    updateDomainAssociationResponse_httpStatus,
+    updateDomainAssociationResponse_domainAssociation,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the update domain association request.
+--
+-- /See:/ 'newUpdateDomainAssociation' smart constructor.
+data UpdateDomainAssociation = UpdateDomainAssociation'
+  { -- | Sets the branch patterns for automatic subdomain creation.
+    autoSubDomainCreationPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | The required AWS Identity and Access Management (IAM) service role for
+    -- the Amazon Resource Name (ARN) for automatically creating subdomains.
+    autoSubDomainIAMRole :: Prelude.Maybe Prelude.Text,
+    -- | Enables the automated creation of subdomains for branches.
+    enableAutoSubDomain :: Prelude.Maybe Prelude.Bool,
+    -- | Describes the settings for the subdomain.
+    subDomainSettings :: Prelude.Maybe [SubDomainSetting],
+    -- | The unique ID for an Amplify app.
+    appId :: Prelude.Text,
+    -- | The name of the domain.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDomainAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoSubDomainCreationPatterns', 'updateDomainAssociation_autoSubDomainCreationPatterns' - Sets the branch patterns for automatic subdomain creation.
+--
+-- 'autoSubDomainIAMRole', 'updateDomainAssociation_autoSubDomainIAMRole' - The required AWS Identity and Access Management (IAM) service role for
+-- the Amazon Resource Name (ARN) for automatically creating subdomains.
+--
+-- 'enableAutoSubDomain', 'updateDomainAssociation_enableAutoSubDomain' - Enables the automated creation of subdomains for branches.
+--
+-- 'subDomainSettings', 'updateDomainAssociation_subDomainSettings' - Describes the settings for the subdomain.
+--
+-- 'appId', 'updateDomainAssociation_appId' - The unique ID for an Amplify app.
+--
+-- 'domainName', 'updateDomainAssociation_domainName' - The name of the domain.
+newUpdateDomainAssociation ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'domainName'
+  Prelude.Text ->
+  UpdateDomainAssociation
+newUpdateDomainAssociation pAppId_ pDomainName_ =
+  UpdateDomainAssociation'
+    { autoSubDomainCreationPatterns =
+        Prelude.Nothing,
+      autoSubDomainIAMRole = Prelude.Nothing,
+      enableAutoSubDomain = Prelude.Nothing,
+      subDomainSettings = Prelude.Nothing,
+      appId = pAppId_,
+      domainName = pDomainName_
+    }
+
+-- | Sets the branch patterns for automatic subdomain creation.
+updateDomainAssociation_autoSubDomainCreationPatterns :: Lens.Lens' UpdateDomainAssociation (Prelude.Maybe [Prelude.Text])
+updateDomainAssociation_autoSubDomainCreationPatterns = Lens.lens (\UpdateDomainAssociation' {autoSubDomainCreationPatterns} -> autoSubDomainCreationPatterns) (\s@UpdateDomainAssociation' {} a -> s {autoSubDomainCreationPatterns = a} :: UpdateDomainAssociation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The required AWS Identity and Access Management (IAM) service role for
+-- the Amazon Resource Name (ARN) for automatically creating subdomains.
+updateDomainAssociation_autoSubDomainIAMRole :: Lens.Lens' UpdateDomainAssociation (Prelude.Maybe Prelude.Text)
+updateDomainAssociation_autoSubDomainIAMRole = Lens.lens (\UpdateDomainAssociation' {autoSubDomainIAMRole} -> autoSubDomainIAMRole) (\s@UpdateDomainAssociation' {} a -> s {autoSubDomainIAMRole = a} :: UpdateDomainAssociation)
+
+-- | Enables the automated creation of subdomains for branches.
+updateDomainAssociation_enableAutoSubDomain :: Lens.Lens' UpdateDomainAssociation (Prelude.Maybe Prelude.Bool)
+updateDomainAssociation_enableAutoSubDomain = Lens.lens (\UpdateDomainAssociation' {enableAutoSubDomain} -> enableAutoSubDomain) (\s@UpdateDomainAssociation' {} a -> s {enableAutoSubDomain = a} :: UpdateDomainAssociation)
+
+-- | Describes the settings for the subdomain.
+updateDomainAssociation_subDomainSettings :: Lens.Lens' UpdateDomainAssociation (Prelude.Maybe [SubDomainSetting])
+updateDomainAssociation_subDomainSettings = Lens.lens (\UpdateDomainAssociation' {subDomainSettings} -> subDomainSettings) (\s@UpdateDomainAssociation' {} a -> s {subDomainSettings = a} :: UpdateDomainAssociation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique ID for an Amplify app.
+updateDomainAssociation_appId :: Lens.Lens' UpdateDomainAssociation Prelude.Text
+updateDomainAssociation_appId = Lens.lens (\UpdateDomainAssociation' {appId} -> appId) (\s@UpdateDomainAssociation' {} a -> s {appId = a} :: UpdateDomainAssociation)
+
+-- | The name of the domain.
+updateDomainAssociation_domainName :: Lens.Lens' UpdateDomainAssociation Prelude.Text
+updateDomainAssociation_domainName = Lens.lens (\UpdateDomainAssociation' {domainName} -> domainName) (\s@UpdateDomainAssociation' {} a -> s {domainName = a} :: UpdateDomainAssociation)
+
+instance Core.AWSRequest UpdateDomainAssociation where
+  type
+    AWSResponse UpdateDomainAssociation =
+      UpdateDomainAssociationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateDomainAssociationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "domainAssociation")
+      )
+
+instance Prelude.Hashable UpdateDomainAssociation where
+  hashWithSalt _salt UpdateDomainAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoSubDomainCreationPatterns
+      `Prelude.hashWithSalt` autoSubDomainIAMRole
+      `Prelude.hashWithSalt` enableAutoSubDomain
+      `Prelude.hashWithSalt` subDomainSettings
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData UpdateDomainAssociation where
+  rnf UpdateDomainAssociation' {..} =
+    Prelude.rnf autoSubDomainCreationPatterns
+      `Prelude.seq` Prelude.rnf autoSubDomainIAMRole
+      `Prelude.seq` Prelude.rnf enableAutoSubDomain
+      `Prelude.seq` Prelude.rnf subDomainSettings
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders UpdateDomainAssociation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDomainAssociation where
+  toJSON UpdateDomainAssociation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("autoSubDomainCreationPatterns" Data..=)
+              Prelude.<$> autoSubDomainCreationPatterns,
+            ("autoSubDomainIAMRole" Data..=)
+              Prelude.<$> autoSubDomainIAMRole,
+            ("enableAutoSubDomain" Data..=)
+              Prelude.<$> enableAutoSubDomain,
+            ("subDomainSettings" Data..=)
+              Prelude.<$> subDomainSettings
+          ]
+      )
+
+instance Data.ToPath UpdateDomainAssociation where
+  toPath UpdateDomainAssociation' {..} =
+    Prelude.mconcat
+      [ "/apps/",
+        Data.toBS appId,
+        "/domains/",
+        Data.toBS domainName
+      ]
+
+instance Data.ToQuery UpdateDomainAssociation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the update domain association request.
+--
+-- /See:/ 'newUpdateDomainAssociationResponse' smart constructor.
+data UpdateDomainAssociationResponse = UpdateDomainAssociationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Describes a domain association, which associates a custom domain with an
+    -- Amplify app.
+    domainAssociation :: DomainAssociation
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDomainAssociationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateDomainAssociationResponse_httpStatus' - The response's http status code.
+--
+-- 'domainAssociation', 'updateDomainAssociationResponse_domainAssociation' - Describes a domain association, which associates a custom domain with an
+-- Amplify app.
+newUpdateDomainAssociationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'domainAssociation'
+  DomainAssociation ->
+  UpdateDomainAssociationResponse
+newUpdateDomainAssociationResponse
+  pHttpStatus_
+  pDomainAssociation_ =
+    UpdateDomainAssociationResponse'
+      { httpStatus =
+          pHttpStatus_,
+        domainAssociation = pDomainAssociation_
+      }
+
+-- | The response's http status code.
+updateDomainAssociationResponse_httpStatus :: Lens.Lens' UpdateDomainAssociationResponse Prelude.Int
+updateDomainAssociationResponse_httpStatus = Lens.lens (\UpdateDomainAssociationResponse' {httpStatus} -> httpStatus) (\s@UpdateDomainAssociationResponse' {} a -> s {httpStatus = a} :: UpdateDomainAssociationResponse)
+
+-- | Describes a domain association, which associates a custom domain with an
+-- Amplify app.
+updateDomainAssociationResponse_domainAssociation :: Lens.Lens' UpdateDomainAssociationResponse DomainAssociation
+updateDomainAssociationResponse_domainAssociation = Lens.lens (\UpdateDomainAssociationResponse' {domainAssociation} -> domainAssociation) (\s@UpdateDomainAssociationResponse' {} a -> s {domainAssociation = a} :: UpdateDomainAssociationResponse)
+
+instance
+  Prelude.NFData
+    UpdateDomainAssociationResponse
+  where
+  rnf UpdateDomainAssociationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf domainAssociation
diff --git a/gen/Amazonka/Amplify/UpdateWebhook.hs b/gen/Amazonka/Amplify/UpdateWebhook.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/UpdateWebhook.hs
@@ -0,0 +1,200 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Amplify.UpdateWebhook
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a webhook.
+module Amazonka.Amplify.UpdateWebhook
+  ( -- * Creating a Request
+    UpdateWebhook (..),
+    newUpdateWebhook,
+
+    -- * Request Lenses
+    updateWebhook_branchName,
+    updateWebhook_description,
+    updateWebhook_webhookId,
+
+    -- * Destructuring the Response
+    UpdateWebhookResponse (..),
+    newUpdateWebhookResponse,
+
+    -- * Response Lenses
+    updateWebhookResponse_httpStatus,
+    updateWebhookResponse_webhook,
+  )
+where
+
+import Amazonka.Amplify.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 structure for the update webhook request.
+--
+-- /See:/ 'newUpdateWebhook' smart constructor.
+data UpdateWebhook = UpdateWebhook'
+  { -- | The name for a branch that is part of an Amplify app.
+    branchName :: Prelude.Maybe Prelude.Text,
+    -- | The description for a webhook.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for a webhook.
+    webhookId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWebhook' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'branchName', 'updateWebhook_branchName' - The name for a branch that is part of an Amplify app.
+--
+-- 'description', 'updateWebhook_description' - The description for a webhook.
+--
+-- 'webhookId', 'updateWebhook_webhookId' - The unique ID for a webhook.
+newUpdateWebhook ::
+  -- | 'webhookId'
+  Prelude.Text ->
+  UpdateWebhook
+newUpdateWebhook pWebhookId_ =
+  UpdateWebhook'
+    { branchName = Prelude.Nothing,
+      description = Prelude.Nothing,
+      webhookId = pWebhookId_
+    }
+
+-- | The name for a branch that is part of an Amplify app.
+updateWebhook_branchName :: Lens.Lens' UpdateWebhook (Prelude.Maybe Prelude.Text)
+updateWebhook_branchName = Lens.lens (\UpdateWebhook' {branchName} -> branchName) (\s@UpdateWebhook' {} a -> s {branchName = a} :: UpdateWebhook)
+
+-- | The description for a webhook.
+updateWebhook_description :: Lens.Lens' UpdateWebhook (Prelude.Maybe Prelude.Text)
+updateWebhook_description = Lens.lens (\UpdateWebhook' {description} -> description) (\s@UpdateWebhook' {} a -> s {description = a} :: UpdateWebhook)
+
+-- | The unique ID for a webhook.
+updateWebhook_webhookId :: Lens.Lens' UpdateWebhook Prelude.Text
+updateWebhook_webhookId = Lens.lens (\UpdateWebhook' {webhookId} -> webhookId) (\s@UpdateWebhook' {} a -> s {webhookId = a} :: UpdateWebhook)
+
+instance Core.AWSRequest UpdateWebhook where
+  type
+    AWSResponse UpdateWebhook =
+      UpdateWebhookResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateWebhookResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "webhook")
+      )
+
+instance Prelude.Hashable UpdateWebhook where
+  hashWithSalt _salt UpdateWebhook' {..} =
+    _salt
+      `Prelude.hashWithSalt` branchName
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` webhookId
+
+instance Prelude.NFData UpdateWebhook where
+  rnf UpdateWebhook' {..} =
+    Prelude.rnf branchName
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf webhookId
+
+instance Data.ToHeaders UpdateWebhook where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateWebhook where
+  toJSON UpdateWebhook' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("branchName" Data..=) Prelude.<$> branchName,
+            ("description" Data..=) Prelude.<$> description
+          ]
+      )
+
+instance Data.ToPath UpdateWebhook where
+  toPath UpdateWebhook' {..} =
+    Prelude.mconcat ["/webhooks/", Data.toBS webhookId]
+
+instance Data.ToQuery UpdateWebhook where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result structure for the update webhook request.
+--
+-- /See:/ 'newUpdateWebhookResponse' smart constructor.
+data UpdateWebhookResponse = UpdateWebhookResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Describes a webhook that connects repository events to an Amplify app.
+    webhook :: Webhook
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWebhookResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateWebhookResponse_httpStatus' - The response's http status code.
+--
+-- 'webhook', 'updateWebhookResponse_webhook' - Describes a webhook that connects repository events to an Amplify app.
+newUpdateWebhookResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'webhook'
+  Webhook ->
+  UpdateWebhookResponse
+newUpdateWebhookResponse pHttpStatus_ pWebhook_ =
+  UpdateWebhookResponse'
+    { httpStatus = pHttpStatus_,
+      webhook = pWebhook_
+    }
+
+-- | The response's http status code.
+updateWebhookResponse_httpStatus :: Lens.Lens' UpdateWebhookResponse Prelude.Int
+updateWebhookResponse_httpStatus = Lens.lens (\UpdateWebhookResponse' {httpStatus} -> httpStatus) (\s@UpdateWebhookResponse' {} a -> s {httpStatus = a} :: UpdateWebhookResponse)
+
+-- | Describes a webhook that connects repository events to an Amplify app.
+updateWebhookResponse_webhook :: Lens.Lens' UpdateWebhookResponse Webhook
+updateWebhookResponse_webhook = Lens.lens (\UpdateWebhookResponse' {webhook} -> webhook) (\s@UpdateWebhookResponse' {} a -> s {webhook = a} :: UpdateWebhookResponse)
+
+instance Prelude.NFData UpdateWebhookResponse where
+  rnf UpdateWebhookResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf webhook
diff --git a/gen/Amazonka/Amplify/Waiters.hs b/gen/Amazonka/Amplify/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Amplify/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.Amplify.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.Amplify.Waiters where
+
+import Amazonka.Amplify.Lens
+import Amazonka.Amplify.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.Amplify
+import Test.Amazonka.Amplify.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "Amplify"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Amplify.hs b/test/Test/Amazonka/Amplify.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Amplify.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.Amplify
+-- Copyright   : (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.Amplify
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/Amplify/Internal.hs b/test/Test/Amazonka/Amplify/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Amplify/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.Amplify.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.Amplify.Internal where
diff --git a/test/Test/Amazonka/Gen/Amplify.hs b/test/Test/Amazonka/Gen/Amplify.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/Amplify.hs
@@ -0,0 +1,778 @@
+{-# 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.Amplify
+-- Copyright   : (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.Amplify where
+
+import Amazonka.Amplify
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Amplify.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"
+--         [ requestCreateApp $
+--             newCreateApp
+--
+--         , requestCreateBackendEnvironment $
+--             newCreateBackendEnvironment
+--
+--         , requestCreateBranch $
+--             newCreateBranch
+--
+--         , requestCreateDeployment $
+--             newCreateDeployment
+--
+--         , requestCreateDomainAssociation $
+--             newCreateDomainAssociation
+--
+--         , requestCreateWebhook $
+--             newCreateWebhook
+--
+--         , requestDeleteApp $
+--             newDeleteApp
+--
+--         , requestDeleteBackendEnvironment $
+--             newDeleteBackendEnvironment
+--
+--         , requestDeleteBranch $
+--             newDeleteBranch
+--
+--         , requestDeleteDomainAssociation $
+--             newDeleteDomainAssociation
+--
+--         , requestDeleteJob $
+--             newDeleteJob
+--
+--         , requestDeleteWebhook $
+--             newDeleteWebhook
+--
+--         , requestGenerateAccessLogs $
+--             newGenerateAccessLogs
+--
+--         , requestGetApp $
+--             newGetApp
+--
+--         , requestGetArtifactUrl $
+--             newGetArtifactUrl
+--
+--         , requestGetBackendEnvironment $
+--             newGetBackendEnvironment
+--
+--         , requestGetBranch $
+--             newGetBranch
+--
+--         , requestGetDomainAssociation $
+--             newGetDomainAssociation
+--
+--         , requestGetJob $
+--             newGetJob
+--
+--         , requestGetWebhook $
+--             newGetWebhook
+--
+--         , requestListApps $
+--             newListApps
+--
+--         , requestListArtifacts $
+--             newListArtifacts
+--
+--         , requestListBackendEnvironments $
+--             newListBackendEnvironments
+--
+--         , requestListBranches $
+--             newListBranches
+--
+--         , requestListDomainAssociations $
+--             newListDomainAssociations
+--
+--         , requestListJobs $
+--             newListJobs
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestListWebhooks $
+--             newListWebhooks
+--
+--         , requestStartDeployment $
+--             newStartDeployment
+--
+--         , requestStartJob $
+--             newStartJob
+--
+--         , requestStopJob $
+--             newStopJob
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateApp $
+--             newUpdateApp
+--
+--         , requestUpdateBranch $
+--             newUpdateBranch
+--
+--         , requestUpdateDomainAssociation $
+--             newUpdateDomainAssociation
+--
+--         , requestUpdateWebhook $
+--             newUpdateWebhook
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateApp $
+--             newCreateAppResponse
+--
+--         , responseCreateBackendEnvironment $
+--             newCreateBackendEnvironmentResponse
+--
+--         , responseCreateBranch $
+--             newCreateBranchResponse
+--
+--         , responseCreateDeployment $
+--             newCreateDeploymentResponse
+--
+--         , responseCreateDomainAssociation $
+--             newCreateDomainAssociationResponse
+--
+--         , responseCreateWebhook $
+--             newCreateWebhookResponse
+--
+--         , responseDeleteApp $
+--             newDeleteAppResponse
+--
+--         , responseDeleteBackendEnvironment $
+--             newDeleteBackendEnvironmentResponse
+--
+--         , responseDeleteBranch $
+--             newDeleteBranchResponse
+--
+--         , responseDeleteDomainAssociation $
+--             newDeleteDomainAssociationResponse
+--
+--         , responseDeleteJob $
+--             newDeleteJobResponse
+--
+--         , responseDeleteWebhook $
+--             newDeleteWebhookResponse
+--
+--         , responseGenerateAccessLogs $
+--             newGenerateAccessLogsResponse
+--
+--         , responseGetApp $
+--             newGetAppResponse
+--
+--         , responseGetArtifactUrl $
+--             newGetArtifactUrlResponse
+--
+--         , responseGetBackendEnvironment $
+--             newGetBackendEnvironmentResponse
+--
+--         , responseGetBranch $
+--             newGetBranchResponse
+--
+--         , responseGetDomainAssociation $
+--             newGetDomainAssociationResponse
+--
+--         , responseGetJob $
+--             newGetJobResponse
+--
+--         , responseGetWebhook $
+--             newGetWebhookResponse
+--
+--         , responseListApps $
+--             newListAppsResponse
+--
+--         , responseListArtifacts $
+--             newListArtifactsResponse
+--
+--         , responseListBackendEnvironments $
+--             newListBackendEnvironmentsResponse
+--
+--         , responseListBranches $
+--             newListBranchesResponse
+--
+--         , responseListDomainAssociations $
+--             newListDomainAssociationsResponse
+--
+--         , responseListJobs $
+--             newListJobsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseListWebhooks $
+--             newListWebhooksResponse
+--
+--         , responseStartDeployment $
+--             newStartDeploymentResponse
+--
+--         , responseStartJob $
+--             newStartJobResponse
+--
+--         , responseStopJob $
+--             newStopJobResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateApp $
+--             newUpdateAppResponse
+--
+--         , responseUpdateBranch $
+--             newUpdateBranchResponse
+--
+--         , responseUpdateDomainAssociation $
+--             newUpdateDomainAssociationResponse
+--
+--         , responseUpdateWebhook $
+--             newUpdateWebhookResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateApp :: CreateApp -> TestTree
+requestCreateApp =
+  req
+    "CreateApp"
+    "fixture/CreateApp.yaml"
+
+requestCreateBackendEnvironment :: CreateBackendEnvironment -> TestTree
+requestCreateBackendEnvironment =
+  req
+    "CreateBackendEnvironment"
+    "fixture/CreateBackendEnvironment.yaml"
+
+requestCreateBranch :: CreateBranch -> TestTree
+requestCreateBranch =
+  req
+    "CreateBranch"
+    "fixture/CreateBranch.yaml"
+
+requestCreateDeployment :: CreateDeployment -> TestTree
+requestCreateDeployment =
+  req
+    "CreateDeployment"
+    "fixture/CreateDeployment.yaml"
+
+requestCreateDomainAssociation :: CreateDomainAssociation -> TestTree
+requestCreateDomainAssociation =
+  req
+    "CreateDomainAssociation"
+    "fixture/CreateDomainAssociation.yaml"
+
+requestCreateWebhook :: CreateWebhook -> TestTree
+requestCreateWebhook =
+  req
+    "CreateWebhook"
+    "fixture/CreateWebhook.yaml"
+
+requestDeleteApp :: DeleteApp -> TestTree
+requestDeleteApp =
+  req
+    "DeleteApp"
+    "fixture/DeleteApp.yaml"
+
+requestDeleteBackendEnvironment :: DeleteBackendEnvironment -> TestTree
+requestDeleteBackendEnvironment =
+  req
+    "DeleteBackendEnvironment"
+    "fixture/DeleteBackendEnvironment.yaml"
+
+requestDeleteBranch :: DeleteBranch -> TestTree
+requestDeleteBranch =
+  req
+    "DeleteBranch"
+    "fixture/DeleteBranch.yaml"
+
+requestDeleteDomainAssociation :: DeleteDomainAssociation -> TestTree
+requestDeleteDomainAssociation =
+  req
+    "DeleteDomainAssociation"
+    "fixture/DeleteDomainAssociation.yaml"
+
+requestDeleteJob :: DeleteJob -> TestTree
+requestDeleteJob =
+  req
+    "DeleteJob"
+    "fixture/DeleteJob.yaml"
+
+requestDeleteWebhook :: DeleteWebhook -> TestTree
+requestDeleteWebhook =
+  req
+    "DeleteWebhook"
+    "fixture/DeleteWebhook.yaml"
+
+requestGenerateAccessLogs :: GenerateAccessLogs -> TestTree
+requestGenerateAccessLogs =
+  req
+    "GenerateAccessLogs"
+    "fixture/GenerateAccessLogs.yaml"
+
+requestGetApp :: GetApp -> TestTree
+requestGetApp =
+  req
+    "GetApp"
+    "fixture/GetApp.yaml"
+
+requestGetArtifactUrl :: GetArtifactUrl -> TestTree
+requestGetArtifactUrl =
+  req
+    "GetArtifactUrl"
+    "fixture/GetArtifactUrl.yaml"
+
+requestGetBackendEnvironment :: GetBackendEnvironment -> TestTree
+requestGetBackendEnvironment =
+  req
+    "GetBackendEnvironment"
+    "fixture/GetBackendEnvironment.yaml"
+
+requestGetBranch :: GetBranch -> TestTree
+requestGetBranch =
+  req
+    "GetBranch"
+    "fixture/GetBranch.yaml"
+
+requestGetDomainAssociation :: GetDomainAssociation -> TestTree
+requestGetDomainAssociation =
+  req
+    "GetDomainAssociation"
+    "fixture/GetDomainAssociation.yaml"
+
+requestGetJob :: GetJob -> TestTree
+requestGetJob =
+  req
+    "GetJob"
+    "fixture/GetJob.yaml"
+
+requestGetWebhook :: GetWebhook -> TestTree
+requestGetWebhook =
+  req
+    "GetWebhook"
+    "fixture/GetWebhook.yaml"
+
+requestListApps :: ListApps -> TestTree
+requestListApps =
+  req
+    "ListApps"
+    "fixture/ListApps.yaml"
+
+requestListArtifacts :: ListArtifacts -> TestTree
+requestListArtifacts =
+  req
+    "ListArtifacts"
+    "fixture/ListArtifacts.yaml"
+
+requestListBackendEnvironments :: ListBackendEnvironments -> TestTree
+requestListBackendEnvironments =
+  req
+    "ListBackendEnvironments"
+    "fixture/ListBackendEnvironments.yaml"
+
+requestListBranches :: ListBranches -> TestTree
+requestListBranches =
+  req
+    "ListBranches"
+    "fixture/ListBranches.yaml"
+
+requestListDomainAssociations :: ListDomainAssociations -> TestTree
+requestListDomainAssociations =
+  req
+    "ListDomainAssociations"
+    "fixture/ListDomainAssociations.yaml"
+
+requestListJobs :: ListJobs -> TestTree
+requestListJobs =
+  req
+    "ListJobs"
+    "fixture/ListJobs.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestListWebhooks :: ListWebhooks -> TestTree
+requestListWebhooks =
+  req
+    "ListWebhooks"
+    "fixture/ListWebhooks.yaml"
+
+requestStartDeployment :: StartDeployment -> TestTree
+requestStartDeployment =
+  req
+    "StartDeployment"
+    "fixture/StartDeployment.yaml"
+
+requestStartJob :: StartJob -> TestTree
+requestStartJob =
+  req
+    "StartJob"
+    "fixture/StartJob.yaml"
+
+requestStopJob :: StopJob -> TestTree
+requestStopJob =
+  req
+    "StopJob"
+    "fixture/StopJob.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateApp :: UpdateApp -> TestTree
+requestUpdateApp =
+  req
+    "UpdateApp"
+    "fixture/UpdateApp.yaml"
+
+requestUpdateBranch :: UpdateBranch -> TestTree
+requestUpdateBranch =
+  req
+    "UpdateBranch"
+    "fixture/UpdateBranch.yaml"
+
+requestUpdateDomainAssociation :: UpdateDomainAssociation -> TestTree
+requestUpdateDomainAssociation =
+  req
+    "UpdateDomainAssociation"
+    "fixture/UpdateDomainAssociation.yaml"
+
+requestUpdateWebhook :: UpdateWebhook -> TestTree
+requestUpdateWebhook =
+  req
+    "UpdateWebhook"
+    "fixture/UpdateWebhook.yaml"
+
+-- Responses
+
+responseCreateApp :: CreateAppResponse -> TestTree
+responseCreateApp =
+  res
+    "CreateAppResponse"
+    "fixture/CreateAppResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateApp)
+
+responseCreateBackendEnvironment :: CreateBackendEnvironmentResponse -> TestTree
+responseCreateBackendEnvironment =
+  res
+    "CreateBackendEnvironmentResponse"
+    "fixture/CreateBackendEnvironmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateBackendEnvironment)
+
+responseCreateBranch :: CreateBranchResponse -> TestTree
+responseCreateBranch =
+  res
+    "CreateBranchResponse"
+    "fixture/CreateBranchResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateBranch)
+
+responseCreateDeployment :: CreateDeploymentResponse -> TestTree
+responseCreateDeployment =
+  res
+    "CreateDeploymentResponse"
+    "fixture/CreateDeploymentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDeployment)
+
+responseCreateDomainAssociation :: CreateDomainAssociationResponse -> TestTree
+responseCreateDomainAssociation =
+  res
+    "CreateDomainAssociationResponse"
+    "fixture/CreateDomainAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDomainAssociation)
+
+responseCreateWebhook :: CreateWebhookResponse -> TestTree
+responseCreateWebhook =
+  res
+    "CreateWebhookResponse"
+    "fixture/CreateWebhookResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWebhook)
+
+responseDeleteApp :: DeleteAppResponse -> TestTree
+responseDeleteApp =
+  res
+    "DeleteAppResponse"
+    "fixture/DeleteAppResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteApp)
+
+responseDeleteBackendEnvironment :: DeleteBackendEnvironmentResponse -> TestTree
+responseDeleteBackendEnvironment =
+  res
+    "DeleteBackendEnvironmentResponse"
+    "fixture/DeleteBackendEnvironmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteBackendEnvironment)
+
+responseDeleteBranch :: DeleteBranchResponse -> TestTree
+responseDeleteBranch =
+  res
+    "DeleteBranchResponse"
+    "fixture/DeleteBranchResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteBranch)
+
+responseDeleteDomainAssociation :: DeleteDomainAssociationResponse -> TestTree
+responseDeleteDomainAssociation =
+  res
+    "DeleteDomainAssociationResponse"
+    "fixture/DeleteDomainAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDomainAssociation)
+
+responseDeleteJob :: DeleteJobResponse -> TestTree
+responseDeleteJob =
+  res
+    "DeleteJobResponse"
+    "fixture/DeleteJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteJob)
+
+responseDeleteWebhook :: DeleteWebhookResponse -> TestTree
+responseDeleteWebhook =
+  res
+    "DeleteWebhookResponse"
+    "fixture/DeleteWebhookResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWebhook)
+
+responseGenerateAccessLogs :: GenerateAccessLogsResponse -> TestTree
+responseGenerateAccessLogs =
+  res
+    "GenerateAccessLogsResponse"
+    "fixture/GenerateAccessLogsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GenerateAccessLogs)
+
+responseGetApp :: GetAppResponse -> TestTree
+responseGetApp =
+  res
+    "GetAppResponse"
+    "fixture/GetAppResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetApp)
+
+responseGetArtifactUrl :: GetArtifactUrlResponse -> TestTree
+responseGetArtifactUrl =
+  res
+    "GetArtifactUrlResponse"
+    "fixture/GetArtifactUrlResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetArtifactUrl)
+
+responseGetBackendEnvironment :: GetBackendEnvironmentResponse -> TestTree
+responseGetBackendEnvironment =
+  res
+    "GetBackendEnvironmentResponse"
+    "fixture/GetBackendEnvironmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetBackendEnvironment)
+
+responseGetBranch :: GetBranchResponse -> TestTree
+responseGetBranch =
+  res
+    "GetBranchResponse"
+    "fixture/GetBranchResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetBranch)
+
+responseGetDomainAssociation :: GetDomainAssociationResponse -> TestTree
+responseGetDomainAssociation =
+  res
+    "GetDomainAssociationResponse"
+    "fixture/GetDomainAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDomainAssociation)
+
+responseGetJob :: GetJobResponse -> TestTree
+responseGetJob =
+  res
+    "GetJobResponse"
+    "fixture/GetJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetJob)
+
+responseGetWebhook :: GetWebhookResponse -> TestTree
+responseGetWebhook =
+  res
+    "GetWebhookResponse"
+    "fixture/GetWebhookResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetWebhook)
+
+responseListApps :: ListAppsResponse -> TestTree
+responseListApps =
+  res
+    "ListAppsResponse"
+    "fixture/ListAppsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListApps)
+
+responseListArtifacts :: ListArtifactsResponse -> TestTree
+responseListArtifacts =
+  res
+    "ListArtifactsResponse"
+    "fixture/ListArtifactsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListArtifacts)
+
+responseListBackendEnvironments :: ListBackendEnvironmentsResponse -> TestTree
+responseListBackendEnvironments =
+  res
+    "ListBackendEnvironmentsResponse"
+    "fixture/ListBackendEnvironmentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListBackendEnvironments)
+
+responseListBranches :: ListBranchesResponse -> TestTree
+responseListBranches =
+  res
+    "ListBranchesResponse"
+    "fixture/ListBranchesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListBranches)
+
+responseListDomainAssociations :: ListDomainAssociationsResponse -> TestTree
+responseListDomainAssociations =
+  res
+    "ListDomainAssociationsResponse"
+    "fixture/ListDomainAssociationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDomainAssociations)
+
+responseListJobs :: ListJobsResponse -> TestTree
+responseListJobs =
+  res
+    "ListJobsResponse"
+    "fixture/ListJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListJobs)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseListWebhooks :: ListWebhooksResponse -> TestTree
+responseListWebhooks =
+  res
+    "ListWebhooksResponse"
+    "fixture/ListWebhooksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWebhooks)
+
+responseStartDeployment :: StartDeploymentResponse -> TestTree
+responseStartDeployment =
+  res
+    "StartDeploymentResponse"
+    "fixture/StartDeploymentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartDeployment)
+
+responseStartJob :: StartJobResponse -> TestTree
+responseStartJob =
+  res
+    "StartJobResponse"
+    "fixture/StartJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartJob)
+
+responseStopJob :: StopJobResponse -> TestTree
+responseStopJob =
+  res
+    "StopJobResponse"
+    "fixture/StopJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopJob)
+
+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)
+
+responseUpdateApp :: UpdateAppResponse -> TestTree
+responseUpdateApp =
+  res
+    "UpdateAppResponse"
+    "fixture/UpdateAppResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateApp)
+
+responseUpdateBranch :: UpdateBranchResponse -> TestTree
+responseUpdateBranch =
+  res
+    "UpdateBranchResponse"
+    "fixture/UpdateBranchResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateBranch)
+
+responseUpdateDomainAssociation :: UpdateDomainAssociationResponse -> TestTree
+responseUpdateDomainAssociation =
+  res
+    "UpdateDomainAssociationResponse"
+    "fixture/UpdateDomainAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDomainAssociation)
+
+responseUpdateWebhook :: UpdateWebhookResponse -> TestTree
+responseUpdateWebhook =
+  res
+    "UpdateWebhookResponse"
+    "fixture/UpdateWebhookResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateWebhook)
