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 Migration Hub Orchestrator SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2021-08-28@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-migrationhuborchestrator)
+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.MigrationHubOrchestrator](http://hackage.haskell.org/package/amazonka-migrationhuborchestrator/docs/Amazonka-MigrationHubOrchestrator.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-migrationhuborchestrator` 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-migrationhuborchestrator.cabal b/amazonka-migrationhuborchestrator.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-migrationhuborchestrator.cabal
@@ -0,0 +1,138 @@
+cabal-version:      2.2
+name:               amazonka-migrationhuborchestrator
+version:            2.0
+synopsis:           Amazon Migration Hub Orchestrator SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2021-08-28@ 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.MigrationHubOrchestrator.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.MigrationHubOrchestrator" 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-migrationhuborchestrator
+
+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.MigrationHubOrchestrator
+    Amazonka.MigrationHubOrchestrator.CreateWorkflow
+    Amazonka.MigrationHubOrchestrator.CreateWorkflowStep
+    Amazonka.MigrationHubOrchestrator.CreateWorkflowStepGroup
+    Amazonka.MigrationHubOrchestrator.DeleteWorkflow
+    Amazonka.MigrationHubOrchestrator.DeleteWorkflowStep
+    Amazonka.MigrationHubOrchestrator.DeleteWorkflowStepGroup
+    Amazonka.MigrationHubOrchestrator.GetTemplate
+    Amazonka.MigrationHubOrchestrator.GetTemplateStep
+    Amazonka.MigrationHubOrchestrator.GetTemplateStepGroup
+    Amazonka.MigrationHubOrchestrator.GetWorkflow
+    Amazonka.MigrationHubOrchestrator.GetWorkflowStep
+    Amazonka.MigrationHubOrchestrator.GetWorkflowStepGroup
+    Amazonka.MigrationHubOrchestrator.Lens
+    Amazonka.MigrationHubOrchestrator.ListPlugins
+    Amazonka.MigrationHubOrchestrator.ListTagsForResource
+    Amazonka.MigrationHubOrchestrator.ListTemplates
+    Amazonka.MigrationHubOrchestrator.ListTemplateStepGroups
+    Amazonka.MigrationHubOrchestrator.ListTemplateSteps
+    Amazonka.MigrationHubOrchestrator.ListWorkflows
+    Amazonka.MigrationHubOrchestrator.ListWorkflowStepGroups
+    Amazonka.MigrationHubOrchestrator.ListWorkflowSteps
+    Amazonka.MigrationHubOrchestrator.RetryWorkflowStep
+    Amazonka.MigrationHubOrchestrator.StartWorkflow
+    Amazonka.MigrationHubOrchestrator.StopWorkflow
+    Amazonka.MigrationHubOrchestrator.TagResource
+    Amazonka.MigrationHubOrchestrator.Types
+    Amazonka.MigrationHubOrchestrator.Types.DataType
+    Amazonka.MigrationHubOrchestrator.Types.MigrationWorkflowStatusEnum
+    Amazonka.MigrationHubOrchestrator.Types.MigrationWorkflowSummary
+    Amazonka.MigrationHubOrchestrator.Types.Owner
+    Amazonka.MigrationHubOrchestrator.Types.PlatformCommand
+    Amazonka.MigrationHubOrchestrator.Types.PlatformScriptKey
+    Amazonka.MigrationHubOrchestrator.Types.PluginHealth
+    Amazonka.MigrationHubOrchestrator.Types.PluginSummary
+    Amazonka.MigrationHubOrchestrator.Types.RunEnvironment
+    Amazonka.MigrationHubOrchestrator.Types.StepActionType
+    Amazonka.MigrationHubOrchestrator.Types.StepAutomationConfiguration
+    Amazonka.MigrationHubOrchestrator.Types.StepGroupStatus
+    Amazonka.MigrationHubOrchestrator.Types.StepInput
+    Amazonka.MigrationHubOrchestrator.Types.StepOutput
+    Amazonka.MigrationHubOrchestrator.Types.StepStatus
+    Amazonka.MigrationHubOrchestrator.Types.TargetType
+    Amazonka.MigrationHubOrchestrator.Types.TemplateInput
+    Amazonka.MigrationHubOrchestrator.Types.TemplateStatus
+    Amazonka.MigrationHubOrchestrator.Types.TemplateStepGroupSummary
+    Amazonka.MigrationHubOrchestrator.Types.TemplateStepSummary
+    Amazonka.MigrationHubOrchestrator.Types.TemplateSummary
+    Amazonka.MigrationHubOrchestrator.Types.Tool
+    Amazonka.MigrationHubOrchestrator.Types.WorkflowStepAutomationConfiguration
+    Amazonka.MigrationHubOrchestrator.Types.WorkflowStepGroupSummary
+    Amazonka.MigrationHubOrchestrator.Types.WorkflowStepOutput
+    Amazonka.MigrationHubOrchestrator.Types.WorkflowStepOutputUnion
+    Amazonka.MigrationHubOrchestrator.Types.WorkflowStepSummary
+    Amazonka.MigrationHubOrchestrator.UntagResource
+    Amazonka.MigrationHubOrchestrator.UpdateWorkflow
+    Amazonka.MigrationHubOrchestrator.UpdateWorkflowStep
+    Amazonka.MigrationHubOrchestrator.UpdateWorkflowStepGroup
+    Amazonka.MigrationHubOrchestrator.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-migrationhuborchestrator-test
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
+
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.Gen.MigrationHubOrchestrator
+    Test.Amazonka.MigrationHubOrchestrator
+    Test.Amazonka.MigrationHubOrchestrator.Internal
+
+  build-depends:
+    , amazonka-core                      >=2.0 && <2.1
+    , amazonka-migrationhuborchestrator
+    , amazonka-test                      >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CreateWorkflow.yaml b/fixture/CreateWorkflow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorkflow.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/CreateWorkflowResponse.proto b/fixture/CreateWorkflowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorkflowResponse.proto
diff --git a/fixture/CreateWorkflowStep.yaml b/fixture/CreateWorkflowStep.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorkflowStep.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/CreateWorkflowStepGroup.yaml b/fixture/CreateWorkflowStepGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorkflowStepGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/CreateWorkflowStepGroupResponse.proto b/fixture/CreateWorkflowStepGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorkflowStepGroupResponse.proto
diff --git a/fixture/CreateWorkflowStepResponse.proto b/fixture/CreateWorkflowStepResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorkflowStepResponse.proto
diff --git a/fixture/DeleteWorkflow.yaml b/fixture/DeleteWorkflow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorkflow.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteWorkflowResponse.proto b/fixture/DeleteWorkflowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorkflowResponse.proto
diff --git a/fixture/DeleteWorkflowStep.yaml b/fixture/DeleteWorkflowStep.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorkflowStep.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/DeleteWorkflowStepGroup.yaml b/fixture/DeleteWorkflowStepGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorkflowStepGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/DeleteWorkflowStepGroupResponse.proto b/fixture/DeleteWorkflowStepGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorkflowStepGroupResponse.proto
diff --git a/fixture/DeleteWorkflowStepResponse.proto b/fixture/DeleteWorkflowStepResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorkflowStepResponse.proto
diff --git a/fixture/GetTemplate.yaml b/fixture/GetTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/GetTemplateResponse.proto b/fixture/GetTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTemplateResponse.proto
diff --git a/fixture/GetTemplateStep.yaml b/fixture/GetTemplateStep.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTemplateStep.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/GetTemplateStepGroup.yaml b/fixture/GetTemplateStepGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTemplateStepGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/GetTemplateStepGroupResponse.proto b/fixture/GetTemplateStepGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTemplateStepGroupResponse.proto
diff --git a/fixture/GetTemplateStepResponse.proto b/fixture/GetTemplateStepResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTemplateStepResponse.proto
diff --git a/fixture/GetWorkflow.yaml b/fixture/GetWorkflow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetWorkflow.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetWorkflowResponse.proto b/fixture/GetWorkflowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetWorkflowResponse.proto
diff --git a/fixture/GetWorkflowStep.yaml b/fixture/GetWorkflowStep.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetWorkflowStep.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/GetWorkflowStepGroup.yaml b/fixture/GetWorkflowStepGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetWorkflowStepGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/GetWorkflowStepGroupResponse.proto b/fixture/GetWorkflowStepGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetWorkflowStepGroupResponse.proto
diff --git a/fixture/GetWorkflowStepResponse.proto b/fixture/GetWorkflowStepResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetWorkflowStepResponse.proto
diff --git a/fixture/ListPlugins.yaml b/fixture/ListPlugins.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListPlugins.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/ListPluginsResponse.proto b/fixture/ListPluginsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListPluginsResponse.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/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/ListTemplateStepGroups.yaml b/fixture/ListTemplateStepGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTemplateStepGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/ListTemplateStepGroupsResponse.proto b/fixture/ListTemplateStepGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTemplateStepGroupsResponse.proto
diff --git a/fixture/ListTemplateSteps.yaml b/fixture/ListTemplateSteps.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTemplateSteps.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/ListTemplateStepsResponse.proto b/fixture/ListTemplateStepsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTemplateStepsResponse.proto
diff --git a/fixture/ListTemplates.yaml b/fixture/ListTemplates.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTemplates.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/ListTemplatesResponse.proto b/fixture/ListTemplatesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTemplatesResponse.proto
diff --git a/fixture/ListWorkflowStepGroups.yaml b/fixture/ListWorkflowStepGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorkflowStepGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/ListWorkflowStepGroupsResponse.proto b/fixture/ListWorkflowStepGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorkflowStepGroupsResponse.proto
diff --git a/fixture/ListWorkflowSteps.yaml b/fixture/ListWorkflowSteps.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorkflowSteps.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/ListWorkflowStepsResponse.proto b/fixture/ListWorkflowStepsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorkflowStepsResponse.proto
diff --git a/fixture/ListWorkflows.yaml b/fixture/ListWorkflows.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorkflows.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListWorkflowsResponse.proto b/fixture/ListWorkflowsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorkflowsResponse.proto
diff --git a/fixture/RetryWorkflowStep.yaml b/fixture/RetryWorkflowStep.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RetryWorkflowStep.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/RetryWorkflowStepResponse.proto b/fixture/RetryWorkflowStepResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RetryWorkflowStepResponse.proto
diff --git a/fixture/StartWorkflow.yaml b/fixture/StartWorkflow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartWorkflow.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/StartWorkflowResponse.proto b/fixture/StartWorkflowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartWorkflowResponse.proto
diff --git a/fixture/StopWorkflow.yaml b/fixture/StopWorkflow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopWorkflow.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/StopWorkflowResponse.proto b/fixture/StopWorkflowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopWorkflowResponse.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/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/UpdateWorkflow.yaml b/fixture/UpdateWorkflow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWorkflow.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/UpdateWorkflowResponse.proto b/fixture/UpdateWorkflowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWorkflowResponse.proto
diff --git a/fixture/UpdateWorkflowStep.yaml b/fixture/UpdateWorkflowStep.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWorkflowStep.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/UpdateWorkflowStepGroup.yaml b/fixture/UpdateWorkflowStepGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWorkflowStepGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/migrationhub-orchestrator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  migrationhub-orchestrator.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/UpdateWorkflowStepGroupResponse.proto b/fixture/UpdateWorkflowStepGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWorkflowStepGroupResponse.proto
diff --git a/fixture/UpdateWorkflowStepResponse.proto b/fixture/UpdateWorkflowStepResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWorkflowStepResponse.proto
diff --git a/gen/Amazonka/MigrationHubOrchestrator.hs b/gen/Amazonka/MigrationHubOrchestrator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator.hs
@@ -0,0 +1,375 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2021-08-28@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- This API reference provides descriptions, syntax, and other details
+-- about each of the actions and data types for AWS Migration Hub
+-- Orchestrator. he topic for each action shows the API request parameters
+-- and the response. Alternatively, you can use one of the AWS SDKs to
+-- access an API that is tailored to the programming language or platform
+-- that you\'re using.
+module Amazonka.MigrationHubOrchestrator
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateWorkflow
+    CreateWorkflow (CreateWorkflow'),
+    newCreateWorkflow,
+    CreateWorkflowResponse (CreateWorkflowResponse'),
+    newCreateWorkflowResponse,
+
+    -- ** CreateWorkflowStep
+    CreateWorkflowStep (CreateWorkflowStep'),
+    newCreateWorkflowStep,
+    CreateWorkflowStepResponse (CreateWorkflowStepResponse'),
+    newCreateWorkflowStepResponse,
+
+    -- ** CreateWorkflowStepGroup
+    CreateWorkflowStepGroup (CreateWorkflowStepGroup'),
+    newCreateWorkflowStepGroup,
+    CreateWorkflowStepGroupResponse (CreateWorkflowStepGroupResponse'),
+    newCreateWorkflowStepGroupResponse,
+
+    -- ** DeleteWorkflow
+    DeleteWorkflow (DeleteWorkflow'),
+    newDeleteWorkflow,
+    DeleteWorkflowResponse (DeleteWorkflowResponse'),
+    newDeleteWorkflowResponse,
+
+    -- ** DeleteWorkflowStep
+    DeleteWorkflowStep (DeleteWorkflowStep'),
+    newDeleteWorkflowStep,
+    DeleteWorkflowStepResponse (DeleteWorkflowStepResponse'),
+    newDeleteWorkflowStepResponse,
+
+    -- ** DeleteWorkflowStepGroup
+    DeleteWorkflowStepGroup (DeleteWorkflowStepGroup'),
+    newDeleteWorkflowStepGroup,
+    DeleteWorkflowStepGroupResponse (DeleteWorkflowStepGroupResponse'),
+    newDeleteWorkflowStepGroupResponse,
+
+    -- ** GetTemplate
+    GetTemplate (GetTemplate'),
+    newGetTemplate,
+    GetTemplateResponse (GetTemplateResponse'),
+    newGetTemplateResponse,
+
+    -- ** GetTemplateStep
+    GetTemplateStep (GetTemplateStep'),
+    newGetTemplateStep,
+    GetTemplateStepResponse (GetTemplateStepResponse'),
+    newGetTemplateStepResponse,
+
+    -- ** GetTemplateStepGroup
+    GetTemplateStepGroup (GetTemplateStepGroup'),
+    newGetTemplateStepGroup,
+    GetTemplateStepGroupResponse (GetTemplateStepGroupResponse'),
+    newGetTemplateStepGroupResponse,
+
+    -- ** GetWorkflow
+    GetWorkflow (GetWorkflow'),
+    newGetWorkflow,
+    GetWorkflowResponse (GetWorkflowResponse'),
+    newGetWorkflowResponse,
+
+    -- ** GetWorkflowStep
+    GetWorkflowStep (GetWorkflowStep'),
+    newGetWorkflowStep,
+    GetWorkflowStepResponse (GetWorkflowStepResponse'),
+    newGetWorkflowStepResponse,
+
+    -- ** GetWorkflowStepGroup
+    GetWorkflowStepGroup (GetWorkflowStepGroup'),
+    newGetWorkflowStepGroup,
+    GetWorkflowStepGroupResponse (GetWorkflowStepGroupResponse'),
+    newGetWorkflowStepGroupResponse,
+
+    -- ** ListPlugins (Paginated)
+    ListPlugins (ListPlugins'),
+    newListPlugins,
+    ListPluginsResponse (ListPluginsResponse'),
+    newListPluginsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ListTemplateStepGroups (Paginated)
+    ListTemplateStepGroups (ListTemplateStepGroups'),
+    newListTemplateStepGroups,
+    ListTemplateStepGroupsResponse (ListTemplateStepGroupsResponse'),
+    newListTemplateStepGroupsResponse,
+
+    -- ** ListTemplateSteps (Paginated)
+    ListTemplateSteps (ListTemplateSteps'),
+    newListTemplateSteps,
+    ListTemplateStepsResponse (ListTemplateStepsResponse'),
+    newListTemplateStepsResponse,
+
+    -- ** ListTemplates (Paginated)
+    ListTemplates (ListTemplates'),
+    newListTemplates,
+    ListTemplatesResponse (ListTemplatesResponse'),
+    newListTemplatesResponse,
+
+    -- ** ListWorkflowStepGroups (Paginated)
+    ListWorkflowStepGroups (ListWorkflowStepGroups'),
+    newListWorkflowStepGroups,
+    ListWorkflowStepGroupsResponse (ListWorkflowStepGroupsResponse'),
+    newListWorkflowStepGroupsResponse,
+
+    -- ** ListWorkflowSteps (Paginated)
+    ListWorkflowSteps (ListWorkflowSteps'),
+    newListWorkflowSteps,
+    ListWorkflowStepsResponse (ListWorkflowStepsResponse'),
+    newListWorkflowStepsResponse,
+
+    -- ** ListWorkflows (Paginated)
+    ListWorkflows (ListWorkflows'),
+    newListWorkflows,
+    ListWorkflowsResponse (ListWorkflowsResponse'),
+    newListWorkflowsResponse,
+
+    -- ** RetryWorkflowStep
+    RetryWorkflowStep (RetryWorkflowStep'),
+    newRetryWorkflowStep,
+    RetryWorkflowStepResponse (RetryWorkflowStepResponse'),
+    newRetryWorkflowStepResponse,
+
+    -- ** StartWorkflow
+    StartWorkflow (StartWorkflow'),
+    newStartWorkflow,
+    StartWorkflowResponse (StartWorkflowResponse'),
+    newStartWorkflowResponse,
+
+    -- ** StopWorkflow
+    StopWorkflow (StopWorkflow'),
+    newStopWorkflow,
+    StopWorkflowResponse (StopWorkflowResponse'),
+    newStopWorkflowResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateWorkflow
+    UpdateWorkflow (UpdateWorkflow'),
+    newUpdateWorkflow,
+    UpdateWorkflowResponse (UpdateWorkflowResponse'),
+    newUpdateWorkflowResponse,
+
+    -- ** UpdateWorkflowStep
+    UpdateWorkflowStep (UpdateWorkflowStep'),
+    newUpdateWorkflowStep,
+    UpdateWorkflowStepResponse (UpdateWorkflowStepResponse'),
+    newUpdateWorkflowStepResponse,
+
+    -- ** UpdateWorkflowStepGroup
+    UpdateWorkflowStepGroup (UpdateWorkflowStepGroup'),
+    newUpdateWorkflowStepGroup,
+    UpdateWorkflowStepGroupResponse (UpdateWorkflowStepGroupResponse'),
+    newUpdateWorkflowStepGroupResponse,
+
+    -- * Types
+
+    -- ** DataType
+    DataType (..),
+
+    -- ** MigrationWorkflowStatusEnum
+    MigrationWorkflowStatusEnum (..),
+
+    -- ** Owner
+    Owner (..),
+
+    -- ** PluginHealth
+    PluginHealth (..),
+
+    -- ** RunEnvironment
+    RunEnvironment (..),
+
+    -- ** StepActionType
+    StepActionType (..),
+
+    -- ** StepGroupStatus
+    StepGroupStatus (..),
+
+    -- ** StepStatus
+    StepStatus (..),
+
+    -- ** TargetType
+    TargetType (..),
+
+    -- ** TemplateStatus
+    TemplateStatus (..),
+
+    -- ** MigrationWorkflowSummary
+    MigrationWorkflowSummary (MigrationWorkflowSummary'),
+    newMigrationWorkflowSummary,
+
+    -- ** PlatformCommand
+    PlatformCommand (PlatformCommand'),
+    newPlatformCommand,
+
+    -- ** PlatformScriptKey
+    PlatformScriptKey (PlatformScriptKey'),
+    newPlatformScriptKey,
+
+    -- ** PluginSummary
+    PluginSummary (PluginSummary'),
+    newPluginSummary,
+
+    -- ** StepAutomationConfiguration
+    StepAutomationConfiguration (StepAutomationConfiguration'),
+    newStepAutomationConfiguration,
+
+    -- ** StepInput
+    StepInput (StepInput'),
+    newStepInput,
+
+    -- ** StepOutput
+    StepOutput (StepOutput'),
+    newStepOutput,
+
+    -- ** TemplateInput
+    TemplateInput (TemplateInput'),
+    newTemplateInput,
+
+    -- ** TemplateStepGroupSummary
+    TemplateStepGroupSummary (TemplateStepGroupSummary'),
+    newTemplateStepGroupSummary,
+
+    -- ** TemplateStepSummary
+    TemplateStepSummary (TemplateStepSummary'),
+    newTemplateStepSummary,
+
+    -- ** TemplateSummary
+    TemplateSummary (TemplateSummary'),
+    newTemplateSummary,
+
+    -- ** Tool
+    Tool (Tool'),
+    newTool,
+
+    -- ** WorkflowStepAutomationConfiguration
+    WorkflowStepAutomationConfiguration (WorkflowStepAutomationConfiguration'),
+    newWorkflowStepAutomationConfiguration,
+
+    -- ** WorkflowStepGroupSummary
+    WorkflowStepGroupSummary (WorkflowStepGroupSummary'),
+    newWorkflowStepGroupSummary,
+
+    -- ** WorkflowStepOutput
+    WorkflowStepOutput (WorkflowStepOutput'),
+    newWorkflowStepOutput,
+
+    -- ** WorkflowStepOutputUnion
+    WorkflowStepOutputUnion (WorkflowStepOutputUnion'),
+    newWorkflowStepOutputUnion,
+
+    -- ** WorkflowStepSummary
+    WorkflowStepSummary (WorkflowStepSummary'),
+    newWorkflowStepSummary,
+  )
+where
+
+import Amazonka.MigrationHubOrchestrator.CreateWorkflow
+import Amazonka.MigrationHubOrchestrator.CreateWorkflowStep
+import Amazonka.MigrationHubOrchestrator.CreateWorkflowStepGroup
+import Amazonka.MigrationHubOrchestrator.DeleteWorkflow
+import Amazonka.MigrationHubOrchestrator.DeleteWorkflowStep
+import Amazonka.MigrationHubOrchestrator.DeleteWorkflowStepGroup
+import Amazonka.MigrationHubOrchestrator.GetTemplate
+import Amazonka.MigrationHubOrchestrator.GetTemplateStep
+import Amazonka.MigrationHubOrchestrator.GetTemplateStepGroup
+import Amazonka.MigrationHubOrchestrator.GetWorkflow
+import Amazonka.MigrationHubOrchestrator.GetWorkflowStep
+import Amazonka.MigrationHubOrchestrator.GetWorkflowStepGroup
+import Amazonka.MigrationHubOrchestrator.Lens
+import Amazonka.MigrationHubOrchestrator.ListPlugins
+import Amazonka.MigrationHubOrchestrator.ListTagsForResource
+import Amazonka.MigrationHubOrchestrator.ListTemplateStepGroups
+import Amazonka.MigrationHubOrchestrator.ListTemplateSteps
+import Amazonka.MigrationHubOrchestrator.ListTemplates
+import Amazonka.MigrationHubOrchestrator.ListWorkflowStepGroups
+import Amazonka.MigrationHubOrchestrator.ListWorkflowSteps
+import Amazonka.MigrationHubOrchestrator.ListWorkflows
+import Amazonka.MigrationHubOrchestrator.RetryWorkflowStep
+import Amazonka.MigrationHubOrchestrator.StartWorkflow
+import Amazonka.MigrationHubOrchestrator.StopWorkflow
+import Amazonka.MigrationHubOrchestrator.TagResource
+import Amazonka.MigrationHubOrchestrator.Types
+import Amazonka.MigrationHubOrchestrator.UntagResource
+import Amazonka.MigrationHubOrchestrator.UpdateWorkflow
+import Amazonka.MigrationHubOrchestrator.UpdateWorkflowStep
+import Amazonka.MigrationHubOrchestrator.UpdateWorkflowStepGroup
+import Amazonka.MigrationHubOrchestrator.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 'MigrationHubOrchestrator'.
+
+-- $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/MigrationHubOrchestrator/CreateWorkflow.hs b/gen/Amazonka/MigrationHubOrchestrator/CreateWorkflow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/CreateWorkflow.hs
@@ -0,0 +1,385 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.CreateWorkflow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create a workflow to orchestrate your migrations.
+module Amazonka.MigrationHubOrchestrator.CreateWorkflow
+  ( -- * Creating a Request
+    CreateWorkflow (..),
+    newCreateWorkflow,
+
+    -- * Request Lenses
+    createWorkflow_description,
+    createWorkflow_stepTargets,
+    createWorkflow_tags,
+    createWorkflow_name,
+    createWorkflow_templateId,
+    createWorkflow_applicationConfigurationId,
+    createWorkflow_inputParameters,
+
+    -- * Destructuring the Response
+    CreateWorkflowResponse (..),
+    newCreateWorkflowResponse,
+
+    -- * Response Lenses
+    createWorkflowResponse_adsApplicationConfigurationId,
+    createWorkflowResponse_arn,
+    createWorkflowResponse_creationTime,
+    createWorkflowResponse_description,
+    createWorkflowResponse_id,
+    createWorkflowResponse_name,
+    createWorkflowResponse_status,
+    createWorkflowResponse_stepTargets,
+    createWorkflowResponse_tags,
+    createWorkflowResponse_templateId,
+    createWorkflowResponse_workflowInputs,
+    createWorkflowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateWorkflow' smart constructor.
+data CreateWorkflow = CreateWorkflow'
+  { -- | The description of the migration workflow.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The servers on which a step will be run.
+    stepTargets :: Prelude.Maybe [Prelude.Text],
+    -- | The tags to add on a migration workflow.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the migration workflow.
+    name :: Prelude.Text,
+    -- | The ID of the template.
+    templateId :: Prelude.Text,
+    -- | The configuration ID of the application configured in Application
+    -- Discovery Service.
+    applicationConfigurationId :: Prelude.Text,
+    -- | The input parameters required to create a migration workflow.
+    inputParameters :: Data.Sensitive (Prelude.HashMap Prelude.Text StepInput)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorkflow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createWorkflow_description' - The description of the migration workflow.
+--
+-- 'stepTargets', 'createWorkflow_stepTargets' - The servers on which a step will be run.
+--
+-- 'tags', 'createWorkflow_tags' - The tags to add on a migration workflow.
+--
+-- 'name', 'createWorkflow_name' - The name of the migration workflow.
+--
+-- 'templateId', 'createWorkflow_templateId' - The ID of the template.
+--
+-- 'applicationConfigurationId', 'createWorkflow_applicationConfigurationId' - The configuration ID of the application configured in Application
+-- Discovery Service.
+--
+-- 'inputParameters', 'createWorkflow_inputParameters' - The input parameters required to create a migration workflow.
+newCreateWorkflow ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'templateId'
+  Prelude.Text ->
+  -- | 'applicationConfigurationId'
+  Prelude.Text ->
+  CreateWorkflow
+newCreateWorkflow
+  pName_
+  pTemplateId_
+  pApplicationConfigurationId_ =
+    CreateWorkflow'
+      { description = Prelude.Nothing,
+        stepTargets = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        name = pName_,
+        templateId = pTemplateId_,
+        applicationConfigurationId =
+          pApplicationConfigurationId_,
+        inputParameters = Prelude.mempty
+      }
+
+-- | The description of the migration workflow.
+createWorkflow_description :: Lens.Lens' CreateWorkflow (Prelude.Maybe Prelude.Text)
+createWorkflow_description = Lens.lens (\CreateWorkflow' {description} -> description) (\s@CreateWorkflow' {} a -> s {description = a} :: CreateWorkflow)
+
+-- | The servers on which a step will be run.
+createWorkflow_stepTargets :: Lens.Lens' CreateWorkflow (Prelude.Maybe [Prelude.Text])
+createWorkflow_stepTargets = Lens.lens (\CreateWorkflow' {stepTargets} -> stepTargets) (\s@CreateWorkflow' {} a -> s {stepTargets = a} :: CreateWorkflow) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags to add on a migration workflow.
+createWorkflow_tags :: Lens.Lens' CreateWorkflow (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createWorkflow_tags = Lens.lens (\CreateWorkflow' {tags} -> tags) (\s@CreateWorkflow' {} a -> s {tags = a} :: CreateWorkflow) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the migration workflow.
+createWorkflow_name :: Lens.Lens' CreateWorkflow Prelude.Text
+createWorkflow_name = Lens.lens (\CreateWorkflow' {name} -> name) (\s@CreateWorkflow' {} a -> s {name = a} :: CreateWorkflow)
+
+-- | The ID of the template.
+createWorkflow_templateId :: Lens.Lens' CreateWorkflow Prelude.Text
+createWorkflow_templateId = Lens.lens (\CreateWorkflow' {templateId} -> templateId) (\s@CreateWorkflow' {} a -> s {templateId = a} :: CreateWorkflow)
+
+-- | The configuration ID of the application configured in Application
+-- Discovery Service.
+createWorkflow_applicationConfigurationId :: Lens.Lens' CreateWorkflow Prelude.Text
+createWorkflow_applicationConfigurationId = Lens.lens (\CreateWorkflow' {applicationConfigurationId} -> applicationConfigurationId) (\s@CreateWorkflow' {} a -> s {applicationConfigurationId = a} :: CreateWorkflow)
+
+-- | The input parameters required to create a migration workflow.
+createWorkflow_inputParameters :: Lens.Lens' CreateWorkflow (Prelude.HashMap Prelude.Text StepInput)
+createWorkflow_inputParameters = Lens.lens (\CreateWorkflow' {inputParameters} -> inputParameters) (\s@CreateWorkflow' {} a -> s {inputParameters = a} :: CreateWorkflow) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateWorkflow where
+  type
+    AWSResponse CreateWorkflow =
+      CreateWorkflowResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWorkflowResponse'
+            Prelude.<$> (x Data..?> "adsApplicationConfigurationId")
+            Prelude.<*> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "stepTargets" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "templateId")
+            Prelude.<*> (x Data..?> "workflowInputs" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateWorkflow where
+  hashWithSalt _salt CreateWorkflow' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` stepTargets
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` templateId
+      `Prelude.hashWithSalt` applicationConfigurationId
+      `Prelude.hashWithSalt` inputParameters
+
+instance Prelude.NFData CreateWorkflow where
+  rnf CreateWorkflow' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf stepTargets
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf templateId
+      `Prelude.seq` Prelude.rnf applicationConfigurationId
+      `Prelude.seq` Prelude.rnf inputParameters
+
+instance Data.ToHeaders CreateWorkflow where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateWorkflow where
+  toJSON CreateWorkflow' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("stepTargets" Data..=) Prelude.<$> stepTargets,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("templateId" Data..= templateId),
+            Prelude.Just
+              ( "applicationConfigurationId"
+                  Data..= applicationConfigurationId
+              ),
+            Prelude.Just
+              ("inputParameters" Data..= inputParameters)
+          ]
+      )
+
+instance Data.ToPath CreateWorkflow where
+  toPath = Prelude.const "/migrationworkflow/"
+
+instance Data.ToQuery CreateWorkflow where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWorkflowResponse' smart constructor.
+data CreateWorkflowResponse = CreateWorkflowResponse'
+  { -- | The configuration ID of the application configured in Application
+    -- Discovery Service.
+    adsApplicationConfigurationId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the migration workflow.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the migration workflow was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the migration workflow.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the migration workflow.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the migration workflow.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The status of the migration workflow.
+    status :: Prelude.Maybe MigrationWorkflowStatusEnum,
+    -- | The servers on which a step will be run.
+    stepTargets :: Prelude.Maybe [Prelude.Text],
+    -- | The tags to add on a migration workflow.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ID of the template.
+    templateId :: Prelude.Maybe Prelude.Text,
+    -- | The inputs for creating a migration workflow.
+    workflowInputs :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text StepInput)),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorkflowResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'adsApplicationConfigurationId', 'createWorkflowResponse_adsApplicationConfigurationId' - The configuration ID of the application configured in Application
+-- Discovery Service.
+--
+-- 'arn', 'createWorkflowResponse_arn' - The Amazon Resource Name (ARN) of the migration workflow.
+--
+-- 'creationTime', 'createWorkflowResponse_creationTime' - The time at which the migration workflow was created.
+--
+-- 'description', 'createWorkflowResponse_description' - The description of the migration workflow.
+--
+-- 'id', 'createWorkflowResponse_id' - The ID of the migration workflow.
+--
+-- 'name', 'createWorkflowResponse_name' - The name of the migration workflow.
+--
+-- 'status', 'createWorkflowResponse_status' - The status of the migration workflow.
+--
+-- 'stepTargets', 'createWorkflowResponse_stepTargets' - The servers on which a step will be run.
+--
+-- 'tags', 'createWorkflowResponse_tags' - The tags to add on a migration workflow.
+--
+-- 'templateId', 'createWorkflowResponse_templateId' - The ID of the template.
+--
+-- 'workflowInputs', 'createWorkflowResponse_workflowInputs' - The inputs for creating a migration workflow.
+--
+-- 'httpStatus', 'createWorkflowResponse_httpStatus' - The response's http status code.
+newCreateWorkflowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateWorkflowResponse
+newCreateWorkflowResponse pHttpStatus_ =
+  CreateWorkflowResponse'
+    { adsApplicationConfigurationId =
+        Prelude.Nothing,
+      arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      stepTargets = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      templateId = Prelude.Nothing,
+      workflowInputs = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The configuration ID of the application configured in Application
+-- Discovery Service.
+createWorkflowResponse_adsApplicationConfigurationId :: Lens.Lens' CreateWorkflowResponse (Prelude.Maybe Prelude.Text)
+createWorkflowResponse_adsApplicationConfigurationId = Lens.lens (\CreateWorkflowResponse' {adsApplicationConfigurationId} -> adsApplicationConfigurationId) (\s@CreateWorkflowResponse' {} a -> s {adsApplicationConfigurationId = a} :: CreateWorkflowResponse)
+
+-- | The Amazon Resource Name (ARN) of the migration workflow.
+createWorkflowResponse_arn :: Lens.Lens' CreateWorkflowResponse (Prelude.Maybe Prelude.Text)
+createWorkflowResponse_arn = Lens.lens (\CreateWorkflowResponse' {arn} -> arn) (\s@CreateWorkflowResponse' {} a -> s {arn = a} :: CreateWorkflowResponse)
+
+-- | The time at which the migration workflow was created.
+createWorkflowResponse_creationTime :: Lens.Lens' CreateWorkflowResponse (Prelude.Maybe Prelude.UTCTime)
+createWorkflowResponse_creationTime = Lens.lens (\CreateWorkflowResponse' {creationTime} -> creationTime) (\s@CreateWorkflowResponse' {} a -> s {creationTime = a} :: CreateWorkflowResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the migration workflow.
+createWorkflowResponse_description :: Lens.Lens' CreateWorkflowResponse (Prelude.Maybe Prelude.Text)
+createWorkflowResponse_description = Lens.lens (\CreateWorkflowResponse' {description} -> description) (\s@CreateWorkflowResponse' {} a -> s {description = a} :: CreateWorkflowResponse)
+
+-- | The ID of the migration workflow.
+createWorkflowResponse_id :: Lens.Lens' CreateWorkflowResponse (Prelude.Maybe Prelude.Text)
+createWorkflowResponse_id = Lens.lens (\CreateWorkflowResponse' {id} -> id) (\s@CreateWorkflowResponse' {} a -> s {id = a} :: CreateWorkflowResponse)
+
+-- | The name of the migration workflow.
+createWorkflowResponse_name :: Lens.Lens' CreateWorkflowResponse (Prelude.Maybe Prelude.Text)
+createWorkflowResponse_name = Lens.lens (\CreateWorkflowResponse' {name} -> name) (\s@CreateWorkflowResponse' {} a -> s {name = a} :: CreateWorkflowResponse)
+
+-- | The status of the migration workflow.
+createWorkflowResponse_status :: Lens.Lens' CreateWorkflowResponse (Prelude.Maybe MigrationWorkflowStatusEnum)
+createWorkflowResponse_status = Lens.lens (\CreateWorkflowResponse' {status} -> status) (\s@CreateWorkflowResponse' {} a -> s {status = a} :: CreateWorkflowResponse)
+
+-- | The servers on which a step will be run.
+createWorkflowResponse_stepTargets :: Lens.Lens' CreateWorkflowResponse (Prelude.Maybe [Prelude.Text])
+createWorkflowResponse_stepTargets = Lens.lens (\CreateWorkflowResponse' {stepTargets} -> stepTargets) (\s@CreateWorkflowResponse' {} a -> s {stepTargets = a} :: CreateWorkflowResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags to add on a migration workflow.
+createWorkflowResponse_tags :: Lens.Lens' CreateWorkflowResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createWorkflowResponse_tags = Lens.lens (\CreateWorkflowResponse' {tags} -> tags) (\s@CreateWorkflowResponse' {} a -> s {tags = a} :: CreateWorkflowResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the template.
+createWorkflowResponse_templateId :: Lens.Lens' CreateWorkflowResponse (Prelude.Maybe Prelude.Text)
+createWorkflowResponse_templateId = Lens.lens (\CreateWorkflowResponse' {templateId} -> templateId) (\s@CreateWorkflowResponse' {} a -> s {templateId = a} :: CreateWorkflowResponse)
+
+-- | The inputs for creating a migration workflow.
+createWorkflowResponse_workflowInputs :: Lens.Lens' CreateWorkflowResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text StepInput))
+createWorkflowResponse_workflowInputs = Lens.lens (\CreateWorkflowResponse' {workflowInputs} -> workflowInputs) (\s@CreateWorkflowResponse' {} a -> s {workflowInputs = a} :: CreateWorkflowResponse) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The response's http status code.
+createWorkflowResponse_httpStatus :: Lens.Lens' CreateWorkflowResponse Prelude.Int
+createWorkflowResponse_httpStatus = Lens.lens (\CreateWorkflowResponse' {httpStatus} -> httpStatus) (\s@CreateWorkflowResponse' {} a -> s {httpStatus = a} :: CreateWorkflowResponse)
+
+instance Prelude.NFData CreateWorkflowResponse where
+  rnf CreateWorkflowResponse' {..} =
+    Prelude.rnf adsApplicationConfigurationId
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf stepTargets
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf templateId
+      `Prelude.seq` Prelude.rnf workflowInputs
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/CreateWorkflowStep.hs b/gen/Amazonka/MigrationHubOrchestrator/CreateWorkflowStep.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/CreateWorkflowStep.hs
@@ -0,0 +1,340 @@
+{-# 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.MigrationHubOrchestrator.CreateWorkflowStep
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create a step in the migration workflow.
+module Amazonka.MigrationHubOrchestrator.CreateWorkflowStep
+  ( -- * Creating a Request
+    CreateWorkflowStep (..),
+    newCreateWorkflowStep,
+
+    -- * Request Lenses
+    createWorkflowStep_description,
+    createWorkflowStep_next,
+    createWorkflowStep_outputs,
+    createWorkflowStep_previous,
+    createWorkflowStep_stepTarget,
+    createWorkflowStep_workflowStepAutomationConfiguration,
+    createWorkflowStep_name,
+    createWorkflowStep_stepGroupId,
+    createWorkflowStep_workflowId,
+    createWorkflowStep_stepActionType,
+
+    -- * Destructuring the Response
+    CreateWorkflowStepResponse (..),
+    newCreateWorkflowStepResponse,
+
+    -- * Response Lenses
+    createWorkflowStepResponse_id,
+    createWorkflowStepResponse_name,
+    createWorkflowStepResponse_stepGroupId,
+    createWorkflowStepResponse_workflowId,
+    createWorkflowStepResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateWorkflowStep' smart constructor.
+data CreateWorkflowStep = CreateWorkflowStep'
+  { -- | The description of the step.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The next step.
+    next :: Prelude.Maybe [Prelude.Text],
+    -- | The key value pairs added for the expected output.
+    outputs :: Prelude.Maybe [WorkflowStepOutput],
+    -- | The previous step.
+    previous :: Prelude.Maybe [Prelude.Text],
+    -- | The servers on which a step will be run.
+    stepTarget :: Prelude.Maybe [Prelude.Text],
+    -- | The custom script to run tests on source or target environments.
+    workflowStepAutomationConfiguration :: Prelude.Maybe WorkflowStepAutomationConfiguration,
+    -- | The name of the step.
+    name :: Prelude.Text,
+    -- | The ID of the step group.
+    stepGroupId :: Prelude.Text,
+    -- | The ID of the migration workflow.
+    workflowId :: Prelude.Text,
+    -- | The action type of the step. You must run and update the status of a
+    -- manual step for the workflow to continue after the completion of the
+    -- step.
+    stepActionType :: StepActionType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorkflowStep' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createWorkflowStep_description' - The description of the step.
+--
+-- 'next', 'createWorkflowStep_next' - The next step.
+--
+-- 'outputs', 'createWorkflowStep_outputs' - The key value pairs added for the expected output.
+--
+-- 'previous', 'createWorkflowStep_previous' - The previous step.
+--
+-- 'stepTarget', 'createWorkflowStep_stepTarget' - The servers on which a step will be run.
+--
+-- 'workflowStepAutomationConfiguration', 'createWorkflowStep_workflowStepAutomationConfiguration' - The custom script to run tests on source or target environments.
+--
+-- 'name', 'createWorkflowStep_name' - The name of the step.
+--
+-- 'stepGroupId', 'createWorkflowStep_stepGroupId' - The ID of the step group.
+--
+-- 'workflowId', 'createWorkflowStep_workflowId' - The ID of the migration workflow.
+--
+-- 'stepActionType', 'createWorkflowStep_stepActionType' - The action type of the step. You must run and update the status of a
+-- manual step for the workflow to continue after the completion of the
+-- step.
+newCreateWorkflowStep ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'stepGroupId'
+  Prelude.Text ->
+  -- | 'workflowId'
+  Prelude.Text ->
+  -- | 'stepActionType'
+  StepActionType ->
+  CreateWorkflowStep
+newCreateWorkflowStep
+  pName_
+  pStepGroupId_
+  pWorkflowId_
+  pStepActionType_ =
+    CreateWorkflowStep'
+      { description = Prelude.Nothing,
+        next = Prelude.Nothing,
+        outputs = Prelude.Nothing,
+        previous = Prelude.Nothing,
+        stepTarget = Prelude.Nothing,
+        workflowStepAutomationConfiguration =
+          Prelude.Nothing,
+        name = pName_,
+        stepGroupId = pStepGroupId_,
+        workflowId = pWorkflowId_,
+        stepActionType = pStepActionType_
+      }
+
+-- | The description of the step.
+createWorkflowStep_description :: Lens.Lens' CreateWorkflowStep (Prelude.Maybe Prelude.Text)
+createWorkflowStep_description = Lens.lens (\CreateWorkflowStep' {description} -> description) (\s@CreateWorkflowStep' {} a -> s {description = a} :: CreateWorkflowStep)
+
+-- | The next step.
+createWorkflowStep_next :: Lens.Lens' CreateWorkflowStep (Prelude.Maybe [Prelude.Text])
+createWorkflowStep_next = Lens.lens (\CreateWorkflowStep' {next} -> next) (\s@CreateWorkflowStep' {} a -> s {next = a} :: CreateWorkflowStep) Prelude.. Lens.mapping Lens.coerced
+
+-- | The key value pairs added for the expected output.
+createWorkflowStep_outputs :: Lens.Lens' CreateWorkflowStep (Prelude.Maybe [WorkflowStepOutput])
+createWorkflowStep_outputs = Lens.lens (\CreateWorkflowStep' {outputs} -> outputs) (\s@CreateWorkflowStep' {} a -> s {outputs = a} :: CreateWorkflowStep) Prelude.. Lens.mapping Lens.coerced
+
+-- | The previous step.
+createWorkflowStep_previous :: Lens.Lens' CreateWorkflowStep (Prelude.Maybe [Prelude.Text])
+createWorkflowStep_previous = Lens.lens (\CreateWorkflowStep' {previous} -> previous) (\s@CreateWorkflowStep' {} a -> s {previous = a} :: CreateWorkflowStep) Prelude.. Lens.mapping Lens.coerced
+
+-- | The servers on which a step will be run.
+createWorkflowStep_stepTarget :: Lens.Lens' CreateWorkflowStep (Prelude.Maybe [Prelude.Text])
+createWorkflowStep_stepTarget = Lens.lens (\CreateWorkflowStep' {stepTarget} -> stepTarget) (\s@CreateWorkflowStep' {} a -> s {stepTarget = a} :: CreateWorkflowStep) Prelude.. Lens.mapping Lens.coerced
+
+-- | The custom script to run tests on source or target environments.
+createWorkflowStep_workflowStepAutomationConfiguration :: Lens.Lens' CreateWorkflowStep (Prelude.Maybe WorkflowStepAutomationConfiguration)
+createWorkflowStep_workflowStepAutomationConfiguration = Lens.lens (\CreateWorkflowStep' {workflowStepAutomationConfiguration} -> workflowStepAutomationConfiguration) (\s@CreateWorkflowStep' {} a -> s {workflowStepAutomationConfiguration = a} :: CreateWorkflowStep)
+
+-- | The name of the step.
+createWorkflowStep_name :: Lens.Lens' CreateWorkflowStep Prelude.Text
+createWorkflowStep_name = Lens.lens (\CreateWorkflowStep' {name} -> name) (\s@CreateWorkflowStep' {} a -> s {name = a} :: CreateWorkflowStep)
+
+-- | The ID of the step group.
+createWorkflowStep_stepGroupId :: Lens.Lens' CreateWorkflowStep Prelude.Text
+createWorkflowStep_stepGroupId = Lens.lens (\CreateWorkflowStep' {stepGroupId} -> stepGroupId) (\s@CreateWorkflowStep' {} a -> s {stepGroupId = a} :: CreateWorkflowStep)
+
+-- | The ID of the migration workflow.
+createWorkflowStep_workflowId :: Lens.Lens' CreateWorkflowStep Prelude.Text
+createWorkflowStep_workflowId = Lens.lens (\CreateWorkflowStep' {workflowId} -> workflowId) (\s@CreateWorkflowStep' {} a -> s {workflowId = a} :: CreateWorkflowStep)
+
+-- | The action type of the step. You must run and update the status of a
+-- manual step for the workflow to continue after the completion of the
+-- step.
+createWorkflowStep_stepActionType :: Lens.Lens' CreateWorkflowStep StepActionType
+createWorkflowStep_stepActionType = Lens.lens (\CreateWorkflowStep' {stepActionType} -> stepActionType) (\s@CreateWorkflowStep' {} a -> s {stepActionType = a} :: CreateWorkflowStep)
+
+instance Core.AWSRequest CreateWorkflowStep where
+  type
+    AWSResponse CreateWorkflowStep =
+      CreateWorkflowStepResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWorkflowStepResponse'
+            Prelude.<$> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "stepGroupId")
+            Prelude.<*> (x Data..?> "workflowId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateWorkflowStep where
+  hashWithSalt _salt CreateWorkflowStep' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` next
+      `Prelude.hashWithSalt` outputs
+      `Prelude.hashWithSalt` previous
+      `Prelude.hashWithSalt` stepTarget
+      `Prelude.hashWithSalt` workflowStepAutomationConfiguration
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` stepGroupId
+      `Prelude.hashWithSalt` workflowId
+      `Prelude.hashWithSalt` stepActionType
+
+instance Prelude.NFData CreateWorkflowStep where
+  rnf CreateWorkflowStep' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf next
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf previous
+      `Prelude.seq` Prelude.rnf stepTarget
+      `Prelude.seq` Prelude.rnf workflowStepAutomationConfiguration
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf stepGroupId
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf stepActionType
+
+instance Data.ToHeaders CreateWorkflowStep where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateWorkflowStep where
+  toJSON CreateWorkflowStep' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("next" Data..=) Prelude.<$> next,
+            ("outputs" Data..=) Prelude.<$> outputs,
+            ("previous" Data..=) Prelude.<$> previous,
+            ("stepTarget" Data..=) Prelude.<$> stepTarget,
+            ("workflowStepAutomationConfiguration" Data..=)
+              Prelude.<$> workflowStepAutomationConfiguration,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("stepGroupId" Data..= stepGroupId),
+            Prelude.Just ("workflowId" Data..= workflowId),
+            Prelude.Just
+              ("stepActionType" Data..= stepActionType)
+          ]
+      )
+
+instance Data.ToPath CreateWorkflowStep where
+  toPath = Prelude.const "/workflowstep"
+
+instance Data.ToQuery CreateWorkflowStep where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWorkflowStepResponse' smart constructor.
+data CreateWorkflowStepResponse = CreateWorkflowStepResponse'
+  { -- | The ID of the step.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the step.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the step group.
+    stepGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the migration workflow.
+    workflowId :: 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 'CreateWorkflowStepResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'createWorkflowStepResponse_id' - The ID of the step.
+--
+-- 'name', 'createWorkflowStepResponse_name' - The name of the step.
+--
+-- 'stepGroupId', 'createWorkflowStepResponse_stepGroupId' - The ID of the step group.
+--
+-- 'workflowId', 'createWorkflowStepResponse_workflowId' - The ID of the migration workflow.
+--
+-- 'httpStatus', 'createWorkflowStepResponse_httpStatus' - The response's http status code.
+newCreateWorkflowStepResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateWorkflowStepResponse
+newCreateWorkflowStepResponse pHttpStatus_ =
+  CreateWorkflowStepResponse'
+    { id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      stepGroupId = Prelude.Nothing,
+      workflowId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the step.
+createWorkflowStepResponse_id :: Lens.Lens' CreateWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+createWorkflowStepResponse_id = Lens.lens (\CreateWorkflowStepResponse' {id} -> id) (\s@CreateWorkflowStepResponse' {} a -> s {id = a} :: CreateWorkflowStepResponse)
+
+-- | The name of the step.
+createWorkflowStepResponse_name :: Lens.Lens' CreateWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+createWorkflowStepResponse_name = Lens.lens (\CreateWorkflowStepResponse' {name} -> name) (\s@CreateWorkflowStepResponse' {} a -> s {name = a} :: CreateWorkflowStepResponse)
+
+-- | The ID of the step group.
+createWorkflowStepResponse_stepGroupId :: Lens.Lens' CreateWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+createWorkflowStepResponse_stepGroupId = Lens.lens (\CreateWorkflowStepResponse' {stepGroupId} -> stepGroupId) (\s@CreateWorkflowStepResponse' {} a -> s {stepGroupId = a} :: CreateWorkflowStepResponse)
+
+-- | The ID of the migration workflow.
+createWorkflowStepResponse_workflowId :: Lens.Lens' CreateWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+createWorkflowStepResponse_workflowId = Lens.lens (\CreateWorkflowStepResponse' {workflowId} -> workflowId) (\s@CreateWorkflowStepResponse' {} a -> s {workflowId = a} :: CreateWorkflowStepResponse)
+
+-- | The response's http status code.
+createWorkflowStepResponse_httpStatus :: Lens.Lens' CreateWorkflowStepResponse Prelude.Int
+createWorkflowStepResponse_httpStatus = Lens.lens (\CreateWorkflowStepResponse' {httpStatus} -> httpStatus) (\s@CreateWorkflowStepResponse' {} a -> s {httpStatus = a} :: CreateWorkflowStepResponse)
+
+instance Prelude.NFData CreateWorkflowStepResponse where
+  rnf CreateWorkflowStepResponse' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf stepGroupId
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/CreateWorkflowStepGroup.hs b/gen/Amazonka/MigrationHubOrchestrator/CreateWorkflowStepGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/CreateWorkflowStepGroup.hs
@@ -0,0 +1,311 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.CreateWorkflowStepGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create a step group in a migration workflow.
+module Amazonka.MigrationHubOrchestrator.CreateWorkflowStepGroup
+  ( -- * Creating a Request
+    CreateWorkflowStepGroup (..),
+    newCreateWorkflowStepGroup,
+
+    -- * Request Lenses
+    createWorkflowStepGroup_description,
+    createWorkflowStepGroup_next,
+    createWorkflowStepGroup_previous,
+    createWorkflowStepGroup_workflowId,
+    createWorkflowStepGroup_name,
+
+    -- * Destructuring the Response
+    CreateWorkflowStepGroupResponse (..),
+    newCreateWorkflowStepGroupResponse,
+
+    -- * Response Lenses
+    createWorkflowStepGroupResponse_creationTime,
+    createWorkflowStepGroupResponse_description,
+    createWorkflowStepGroupResponse_id,
+    createWorkflowStepGroupResponse_name,
+    createWorkflowStepGroupResponse_next,
+    createWorkflowStepGroupResponse_previous,
+    createWorkflowStepGroupResponse_tools,
+    createWorkflowStepGroupResponse_workflowId,
+    createWorkflowStepGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateWorkflowStepGroup' smart constructor.
+data CreateWorkflowStepGroup = CreateWorkflowStepGroup'
+  { -- | The description of the step group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The next step group.
+    next :: Prelude.Maybe [Prelude.Text],
+    -- | The previous step group.
+    previous :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the migration workflow that will contain the step group.
+    workflowId :: Prelude.Text,
+    -- | The name of the step group.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorkflowStepGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createWorkflowStepGroup_description' - The description of the step group.
+--
+-- 'next', 'createWorkflowStepGroup_next' - The next step group.
+--
+-- 'previous', 'createWorkflowStepGroup_previous' - The previous step group.
+--
+-- 'workflowId', 'createWorkflowStepGroup_workflowId' - The ID of the migration workflow that will contain the step group.
+--
+-- 'name', 'createWorkflowStepGroup_name' - The name of the step group.
+newCreateWorkflowStepGroup ::
+  -- | 'workflowId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateWorkflowStepGroup
+newCreateWorkflowStepGroup pWorkflowId_ pName_ =
+  CreateWorkflowStepGroup'
+    { description =
+        Prelude.Nothing,
+      next = Prelude.Nothing,
+      previous = Prelude.Nothing,
+      workflowId = pWorkflowId_,
+      name = pName_
+    }
+
+-- | The description of the step group.
+createWorkflowStepGroup_description :: Lens.Lens' CreateWorkflowStepGroup (Prelude.Maybe Prelude.Text)
+createWorkflowStepGroup_description = Lens.lens (\CreateWorkflowStepGroup' {description} -> description) (\s@CreateWorkflowStepGroup' {} a -> s {description = a} :: CreateWorkflowStepGroup)
+
+-- | The next step group.
+createWorkflowStepGroup_next :: Lens.Lens' CreateWorkflowStepGroup (Prelude.Maybe [Prelude.Text])
+createWorkflowStepGroup_next = Lens.lens (\CreateWorkflowStepGroup' {next} -> next) (\s@CreateWorkflowStepGroup' {} a -> s {next = a} :: CreateWorkflowStepGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The previous step group.
+createWorkflowStepGroup_previous :: Lens.Lens' CreateWorkflowStepGroup (Prelude.Maybe [Prelude.Text])
+createWorkflowStepGroup_previous = Lens.lens (\CreateWorkflowStepGroup' {previous} -> previous) (\s@CreateWorkflowStepGroup' {} a -> s {previous = a} :: CreateWorkflowStepGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the migration workflow that will contain the step group.
+createWorkflowStepGroup_workflowId :: Lens.Lens' CreateWorkflowStepGroup Prelude.Text
+createWorkflowStepGroup_workflowId = Lens.lens (\CreateWorkflowStepGroup' {workflowId} -> workflowId) (\s@CreateWorkflowStepGroup' {} a -> s {workflowId = a} :: CreateWorkflowStepGroup)
+
+-- | The name of the step group.
+createWorkflowStepGroup_name :: Lens.Lens' CreateWorkflowStepGroup Prelude.Text
+createWorkflowStepGroup_name = Lens.lens (\CreateWorkflowStepGroup' {name} -> name) (\s@CreateWorkflowStepGroup' {} a -> s {name = a} :: CreateWorkflowStepGroup)
+
+instance Core.AWSRequest CreateWorkflowStepGroup where
+  type
+    AWSResponse CreateWorkflowStepGroup =
+      CreateWorkflowStepGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWorkflowStepGroupResponse'
+            Prelude.<$> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "next" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "previous" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tools" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "workflowId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateWorkflowStepGroup where
+  hashWithSalt _salt CreateWorkflowStepGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` next
+      `Prelude.hashWithSalt` previous
+      `Prelude.hashWithSalt` workflowId
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateWorkflowStepGroup where
+  rnf CreateWorkflowStepGroup' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf next
+      `Prelude.seq` Prelude.rnf previous
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateWorkflowStepGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateWorkflowStepGroup where
+  toJSON CreateWorkflowStepGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("next" Data..=) Prelude.<$> next,
+            ("previous" Data..=) Prelude.<$> previous,
+            Prelude.Just ("workflowId" Data..= workflowId),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateWorkflowStepGroup where
+  toPath = Prelude.const "/workflowstepgroups"
+
+instance Data.ToQuery CreateWorkflowStepGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWorkflowStepGroupResponse' smart constructor.
+data CreateWorkflowStepGroupResponse = CreateWorkflowStepGroupResponse'
+  { -- | The time at which the step group is created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the step group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the step group.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the step group.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The next step group.
+    next :: Prelude.Maybe [Prelude.Text],
+    -- | The previous step group.
+    previous :: Prelude.Maybe [Prelude.Text],
+    -- | List of AWS services utilized in a migration workflow.
+    tools :: Prelude.Maybe [Tool],
+    -- | The ID of the migration workflow that contains the step group.
+    workflowId :: 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 'CreateWorkflowStepGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'createWorkflowStepGroupResponse_creationTime' - The time at which the step group is created.
+--
+-- 'description', 'createWorkflowStepGroupResponse_description' - The description of the step group.
+--
+-- 'id', 'createWorkflowStepGroupResponse_id' - The ID of the step group.
+--
+-- 'name', 'createWorkflowStepGroupResponse_name' - The name of the step group.
+--
+-- 'next', 'createWorkflowStepGroupResponse_next' - The next step group.
+--
+-- 'previous', 'createWorkflowStepGroupResponse_previous' - The previous step group.
+--
+-- 'tools', 'createWorkflowStepGroupResponse_tools' - List of AWS services utilized in a migration workflow.
+--
+-- 'workflowId', 'createWorkflowStepGroupResponse_workflowId' - The ID of the migration workflow that contains the step group.
+--
+-- 'httpStatus', 'createWorkflowStepGroupResponse_httpStatus' - The response's http status code.
+newCreateWorkflowStepGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateWorkflowStepGroupResponse
+newCreateWorkflowStepGroupResponse pHttpStatus_ =
+  CreateWorkflowStepGroupResponse'
+    { creationTime =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      next = Prelude.Nothing,
+      previous = Prelude.Nothing,
+      tools = Prelude.Nothing,
+      workflowId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The time at which the step group is created.
+createWorkflowStepGroupResponse_creationTime :: Lens.Lens' CreateWorkflowStepGroupResponse (Prelude.Maybe Prelude.UTCTime)
+createWorkflowStepGroupResponse_creationTime = Lens.lens (\CreateWorkflowStepGroupResponse' {creationTime} -> creationTime) (\s@CreateWorkflowStepGroupResponse' {} a -> s {creationTime = a} :: CreateWorkflowStepGroupResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the step group.
+createWorkflowStepGroupResponse_description :: Lens.Lens' CreateWorkflowStepGroupResponse (Prelude.Maybe Prelude.Text)
+createWorkflowStepGroupResponse_description = Lens.lens (\CreateWorkflowStepGroupResponse' {description} -> description) (\s@CreateWorkflowStepGroupResponse' {} a -> s {description = a} :: CreateWorkflowStepGroupResponse)
+
+-- | The ID of the step group.
+createWorkflowStepGroupResponse_id :: Lens.Lens' CreateWorkflowStepGroupResponse (Prelude.Maybe Prelude.Text)
+createWorkflowStepGroupResponse_id = Lens.lens (\CreateWorkflowStepGroupResponse' {id} -> id) (\s@CreateWorkflowStepGroupResponse' {} a -> s {id = a} :: CreateWorkflowStepGroupResponse)
+
+-- | The name of the step group.
+createWorkflowStepGroupResponse_name :: Lens.Lens' CreateWorkflowStepGroupResponse (Prelude.Maybe Prelude.Text)
+createWorkflowStepGroupResponse_name = Lens.lens (\CreateWorkflowStepGroupResponse' {name} -> name) (\s@CreateWorkflowStepGroupResponse' {} a -> s {name = a} :: CreateWorkflowStepGroupResponse)
+
+-- | The next step group.
+createWorkflowStepGroupResponse_next :: Lens.Lens' CreateWorkflowStepGroupResponse (Prelude.Maybe [Prelude.Text])
+createWorkflowStepGroupResponse_next = Lens.lens (\CreateWorkflowStepGroupResponse' {next} -> next) (\s@CreateWorkflowStepGroupResponse' {} a -> s {next = a} :: CreateWorkflowStepGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The previous step group.
+createWorkflowStepGroupResponse_previous :: Lens.Lens' CreateWorkflowStepGroupResponse (Prelude.Maybe [Prelude.Text])
+createWorkflowStepGroupResponse_previous = Lens.lens (\CreateWorkflowStepGroupResponse' {previous} -> previous) (\s@CreateWorkflowStepGroupResponse' {} a -> s {previous = a} :: CreateWorkflowStepGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | List of AWS services utilized in a migration workflow.
+createWorkflowStepGroupResponse_tools :: Lens.Lens' CreateWorkflowStepGroupResponse (Prelude.Maybe [Tool])
+createWorkflowStepGroupResponse_tools = Lens.lens (\CreateWorkflowStepGroupResponse' {tools} -> tools) (\s@CreateWorkflowStepGroupResponse' {} a -> s {tools = a} :: CreateWorkflowStepGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the migration workflow that contains the step group.
+createWorkflowStepGroupResponse_workflowId :: Lens.Lens' CreateWorkflowStepGroupResponse (Prelude.Maybe Prelude.Text)
+createWorkflowStepGroupResponse_workflowId = Lens.lens (\CreateWorkflowStepGroupResponse' {workflowId} -> workflowId) (\s@CreateWorkflowStepGroupResponse' {} a -> s {workflowId = a} :: CreateWorkflowStepGroupResponse)
+
+-- | The response's http status code.
+createWorkflowStepGroupResponse_httpStatus :: Lens.Lens' CreateWorkflowStepGroupResponse Prelude.Int
+createWorkflowStepGroupResponse_httpStatus = Lens.lens (\CreateWorkflowStepGroupResponse' {httpStatus} -> httpStatus) (\s@CreateWorkflowStepGroupResponse' {} a -> s {httpStatus = a} :: CreateWorkflowStepGroupResponse)
+
+instance
+  Prelude.NFData
+    CreateWorkflowStepGroupResponse
+  where
+  rnf CreateWorkflowStepGroupResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf next
+      `Prelude.seq` Prelude.rnf previous
+      `Prelude.seq` Prelude.rnf tools
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/DeleteWorkflow.hs b/gen/Amazonka/MigrationHubOrchestrator/DeleteWorkflow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/DeleteWorkflow.hs
@@ -0,0 +1,182 @@
+{-# 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.MigrationHubOrchestrator.DeleteWorkflow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete a migration workflow. You must pause a running workflow in
+-- Migration Hub Orchestrator console to delete it.
+module Amazonka.MigrationHubOrchestrator.DeleteWorkflow
+  ( -- * Creating a Request
+    DeleteWorkflow (..),
+    newDeleteWorkflow,
+
+    -- * Request Lenses
+    deleteWorkflow_id,
+
+    -- * Destructuring the Response
+    DeleteWorkflowResponse (..),
+    newDeleteWorkflowResponse,
+
+    -- * Response Lenses
+    deleteWorkflowResponse_arn,
+    deleteWorkflowResponse_id,
+    deleteWorkflowResponse_status,
+    deleteWorkflowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteWorkflow' smart constructor.
+data DeleteWorkflow = DeleteWorkflow'
+  { -- | The ID of the migration workflow you want to delete.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorkflow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'deleteWorkflow_id' - The ID of the migration workflow you want to delete.
+newDeleteWorkflow ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteWorkflow
+newDeleteWorkflow pId_ = DeleteWorkflow' {id = pId_}
+
+-- | The ID of the migration workflow you want to delete.
+deleteWorkflow_id :: Lens.Lens' DeleteWorkflow Prelude.Text
+deleteWorkflow_id = Lens.lens (\DeleteWorkflow' {id} -> id) (\s@DeleteWorkflow' {} a -> s {id = a} :: DeleteWorkflow)
+
+instance Core.AWSRequest DeleteWorkflow where
+  type
+    AWSResponse DeleteWorkflow =
+      DeleteWorkflowResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteWorkflowResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteWorkflow where
+  hashWithSalt _salt DeleteWorkflow' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteWorkflow where
+  rnf DeleteWorkflow' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteWorkflow where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteWorkflow where
+  toPath DeleteWorkflow' {..} =
+    Prelude.mconcat
+      ["/migrationworkflow/", Data.toBS id]
+
+instance Data.ToQuery DeleteWorkflow where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteWorkflowResponse' smart constructor.
+data DeleteWorkflowResponse = DeleteWorkflowResponse'
+  { -- | The Amazon Resource Name (ARN) of the migration workflow.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the migration workflow.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The status of the migration workflow.
+    status :: Prelude.Maybe MigrationWorkflowStatusEnum,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorkflowResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'deleteWorkflowResponse_arn' - The Amazon Resource Name (ARN) of the migration workflow.
+--
+-- 'id', 'deleteWorkflowResponse_id' - The ID of the migration workflow.
+--
+-- 'status', 'deleteWorkflowResponse_status' - The status of the migration workflow.
+--
+-- 'httpStatus', 'deleteWorkflowResponse_httpStatus' - The response's http status code.
+newDeleteWorkflowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteWorkflowResponse
+newDeleteWorkflowResponse pHttpStatus_ =
+  DeleteWorkflowResponse'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the migration workflow.
+deleteWorkflowResponse_arn :: Lens.Lens' DeleteWorkflowResponse (Prelude.Maybe Prelude.Text)
+deleteWorkflowResponse_arn = Lens.lens (\DeleteWorkflowResponse' {arn} -> arn) (\s@DeleteWorkflowResponse' {} a -> s {arn = a} :: DeleteWorkflowResponse)
+
+-- | The ID of the migration workflow.
+deleteWorkflowResponse_id :: Lens.Lens' DeleteWorkflowResponse (Prelude.Maybe Prelude.Text)
+deleteWorkflowResponse_id = Lens.lens (\DeleteWorkflowResponse' {id} -> id) (\s@DeleteWorkflowResponse' {} a -> s {id = a} :: DeleteWorkflowResponse)
+
+-- | The status of the migration workflow.
+deleteWorkflowResponse_status :: Lens.Lens' DeleteWorkflowResponse (Prelude.Maybe MigrationWorkflowStatusEnum)
+deleteWorkflowResponse_status = Lens.lens (\DeleteWorkflowResponse' {status} -> status) (\s@DeleteWorkflowResponse' {} a -> s {status = a} :: DeleteWorkflowResponse)
+
+-- | The response's http status code.
+deleteWorkflowResponse_httpStatus :: Lens.Lens' DeleteWorkflowResponse Prelude.Int
+deleteWorkflowResponse_httpStatus = Lens.lens (\DeleteWorkflowResponse' {httpStatus} -> httpStatus) (\s@DeleteWorkflowResponse' {} a -> s {httpStatus = a} :: DeleteWorkflowResponse)
+
+instance Prelude.NFData DeleteWorkflowResponse where
+  rnf DeleteWorkflowResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/DeleteWorkflowStep.hs b/gen/Amazonka/MigrationHubOrchestrator/DeleteWorkflowStep.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/DeleteWorkflowStep.hs
@@ -0,0 +1,183 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.DeleteWorkflowStep
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete a step in a migration workflow. Pause the workflow to delete a
+-- running step.
+module Amazonka.MigrationHubOrchestrator.DeleteWorkflowStep
+  ( -- * Creating a Request
+    DeleteWorkflowStep (..),
+    newDeleteWorkflowStep,
+
+    -- * Request Lenses
+    deleteWorkflowStep_id,
+    deleteWorkflowStep_stepGroupId,
+    deleteWorkflowStep_workflowId,
+
+    -- * Destructuring the Response
+    DeleteWorkflowStepResponse (..),
+    newDeleteWorkflowStepResponse,
+
+    -- * Response Lenses
+    deleteWorkflowStepResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteWorkflowStep' smart constructor.
+data DeleteWorkflowStep = DeleteWorkflowStep'
+  { -- | The ID of the step you want to delete.
+    id :: Prelude.Text,
+    -- | The ID of the step group that contains the step you want to delete.
+    stepGroupId :: Prelude.Text,
+    -- | The ID of the migration workflow.
+    workflowId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorkflowStep' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'deleteWorkflowStep_id' - The ID of the step you want to delete.
+--
+-- 'stepGroupId', 'deleteWorkflowStep_stepGroupId' - The ID of the step group that contains the step you want to delete.
+--
+-- 'workflowId', 'deleteWorkflowStep_workflowId' - The ID of the migration workflow.
+newDeleteWorkflowStep ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'stepGroupId'
+  Prelude.Text ->
+  -- | 'workflowId'
+  Prelude.Text ->
+  DeleteWorkflowStep
+newDeleteWorkflowStep pId_ pStepGroupId_ pWorkflowId_ =
+  DeleteWorkflowStep'
+    { id = pId_,
+      stepGroupId = pStepGroupId_,
+      workflowId = pWorkflowId_
+    }
+
+-- | The ID of the step you want to delete.
+deleteWorkflowStep_id :: Lens.Lens' DeleteWorkflowStep Prelude.Text
+deleteWorkflowStep_id = Lens.lens (\DeleteWorkflowStep' {id} -> id) (\s@DeleteWorkflowStep' {} a -> s {id = a} :: DeleteWorkflowStep)
+
+-- | The ID of the step group that contains the step you want to delete.
+deleteWorkflowStep_stepGroupId :: Lens.Lens' DeleteWorkflowStep Prelude.Text
+deleteWorkflowStep_stepGroupId = Lens.lens (\DeleteWorkflowStep' {stepGroupId} -> stepGroupId) (\s@DeleteWorkflowStep' {} a -> s {stepGroupId = a} :: DeleteWorkflowStep)
+
+-- | The ID of the migration workflow.
+deleteWorkflowStep_workflowId :: Lens.Lens' DeleteWorkflowStep Prelude.Text
+deleteWorkflowStep_workflowId = Lens.lens (\DeleteWorkflowStep' {workflowId} -> workflowId) (\s@DeleteWorkflowStep' {} a -> s {workflowId = a} :: DeleteWorkflowStep)
+
+instance Core.AWSRequest DeleteWorkflowStep where
+  type
+    AWSResponse DeleteWorkflowStep =
+      DeleteWorkflowStepResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteWorkflowStepResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteWorkflowStep where
+  hashWithSalt _salt DeleteWorkflowStep' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` stepGroupId
+      `Prelude.hashWithSalt` workflowId
+
+instance Prelude.NFData DeleteWorkflowStep where
+  rnf DeleteWorkflowStep' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf stepGroupId
+      `Prelude.seq` Prelude.rnf workflowId
+
+instance Data.ToHeaders DeleteWorkflowStep where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteWorkflowStep where
+  toPath DeleteWorkflowStep' {..} =
+    Prelude.mconcat ["/workflowstep/", Data.toBS id]
+
+instance Data.ToQuery DeleteWorkflowStep where
+  toQuery DeleteWorkflowStep' {..} =
+    Prelude.mconcat
+      [ "stepGroupId" Data.=: stepGroupId,
+        "workflowId" Data.=: workflowId
+      ]
+
+-- | /See:/ 'newDeleteWorkflowStepResponse' smart constructor.
+data DeleteWorkflowStepResponse = DeleteWorkflowStepResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorkflowStepResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteWorkflowStepResponse_httpStatus' - The response's http status code.
+newDeleteWorkflowStepResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteWorkflowStepResponse
+newDeleteWorkflowStepResponse pHttpStatus_ =
+  DeleteWorkflowStepResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteWorkflowStepResponse_httpStatus :: Lens.Lens' DeleteWorkflowStepResponse Prelude.Int
+deleteWorkflowStepResponse_httpStatus = Lens.lens (\DeleteWorkflowStepResponse' {httpStatus} -> httpStatus) (\s@DeleteWorkflowStepResponse' {} a -> s {httpStatus = a} :: DeleteWorkflowStepResponse)
+
+instance Prelude.NFData DeleteWorkflowStepResponse where
+  rnf DeleteWorkflowStepResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/DeleteWorkflowStepGroup.hs b/gen/Amazonka/MigrationHubOrchestrator/DeleteWorkflowStepGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/DeleteWorkflowStepGroup.hs
@@ -0,0 +1,168 @@
+{-# 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.MigrationHubOrchestrator.DeleteWorkflowStepGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete a step group in a migration workflow.
+module Amazonka.MigrationHubOrchestrator.DeleteWorkflowStepGroup
+  ( -- * Creating a Request
+    DeleteWorkflowStepGroup (..),
+    newDeleteWorkflowStepGroup,
+
+    -- * Request Lenses
+    deleteWorkflowStepGroup_workflowId,
+    deleteWorkflowStepGroup_id,
+
+    -- * Destructuring the Response
+    DeleteWorkflowStepGroupResponse (..),
+    newDeleteWorkflowStepGroupResponse,
+
+    -- * Response Lenses
+    deleteWorkflowStepGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteWorkflowStepGroup' smart constructor.
+data DeleteWorkflowStepGroup = DeleteWorkflowStepGroup'
+  { -- | The ID of the migration workflow.
+    workflowId :: Prelude.Text,
+    -- | The ID of the step group you want to delete.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorkflowStepGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'workflowId', 'deleteWorkflowStepGroup_workflowId' - The ID of the migration workflow.
+--
+-- 'id', 'deleteWorkflowStepGroup_id' - The ID of the step group you want to delete.
+newDeleteWorkflowStepGroup ::
+  -- | 'workflowId'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  DeleteWorkflowStepGroup
+newDeleteWorkflowStepGroup pWorkflowId_ pId_ =
+  DeleteWorkflowStepGroup'
+    { workflowId = pWorkflowId_,
+      id = pId_
+    }
+
+-- | The ID of the migration workflow.
+deleteWorkflowStepGroup_workflowId :: Lens.Lens' DeleteWorkflowStepGroup Prelude.Text
+deleteWorkflowStepGroup_workflowId = Lens.lens (\DeleteWorkflowStepGroup' {workflowId} -> workflowId) (\s@DeleteWorkflowStepGroup' {} a -> s {workflowId = a} :: DeleteWorkflowStepGroup)
+
+-- | The ID of the step group you want to delete.
+deleteWorkflowStepGroup_id :: Lens.Lens' DeleteWorkflowStepGroup Prelude.Text
+deleteWorkflowStepGroup_id = Lens.lens (\DeleteWorkflowStepGroup' {id} -> id) (\s@DeleteWorkflowStepGroup' {} a -> s {id = a} :: DeleteWorkflowStepGroup)
+
+instance Core.AWSRequest DeleteWorkflowStepGroup where
+  type
+    AWSResponse DeleteWorkflowStepGroup =
+      DeleteWorkflowStepGroupResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteWorkflowStepGroupResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteWorkflowStepGroup where
+  hashWithSalt _salt DeleteWorkflowStepGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` workflowId
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteWorkflowStepGroup where
+  rnf DeleteWorkflowStepGroup' {..} =
+    Prelude.rnf workflowId `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders DeleteWorkflowStepGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteWorkflowStepGroup where
+  toPath DeleteWorkflowStepGroup' {..} =
+    Prelude.mconcat
+      ["/workflowstepgroup/", Data.toBS id]
+
+instance Data.ToQuery DeleteWorkflowStepGroup where
+  toQuery DeleteWorkflowStepGroup' {..} =
+    Prelude.mconcat ["workflowId" Data.=: workflowId]
+
+-- | /See:/ 'newDeleteWorkflowStepGroupResponse' smart constructor.
+data DeleteWorkflowStepGroupResponse = DeleteWorkflowStepGroupResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorkflowStepGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteWorkflowStepGroupResponse_httpStatus' - The response's http status code.
+newDeleteWorkflowStepGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteWorkflowStepGroupResponse
+newDeleteWorkflowStepGroupResponse pHttpStatus_ =
+  DeleteWorkflowStepGroupResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteWorkflowStepGroupResponse_httpStatus :: Lens.Lens' DeleteWorkflowStepGroupResponse Prelude.Int
+deleteWorkflowStepGroupResponse_httpStatus = Lens.lens (\DeleteWorkflowStepGroupResponse' {httpStatus} -> httpStatus) (\s@DeleteWorkflowStepGroupResponse' {} a -> s {httpStatus = a} :: DeleteWorkflowStepGroupResponse)
+
+instance
+  Prelude.NFData
+    DeleteWorkflowStepGroupResponse
+  where
+  rnf DeleteWorkflowStepGroupResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/GetTemplate.hs b/gen/Amazonka/MigrationHubOrchestrator/GetTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/GetTemplate.hs
@@ -0,0 +1,228 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.GetTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get the template you want to use for creating a migration workflow.
+module Amazonka.MigrationHubOrchestrator.GetTemplate
+  ( -- * Creating a Request
+    GetTemplate (..),
+    newGetTemplate,
+
+    -- * Request Lenses
+    getTemplate_id,
+
+    -- * Destructuring the Response
+    GetTemplateResponse (..),
+    newGetTemplateResponse,
+
+    -- * Response Lenses
+    getTemplateResponse_creationTime,
+    getTemplateResponse_description,
+    getTemplateResponse_id,
+    getTemplateResponse_inputs,
+    getTemplateResponse_name,
+    getTemplateResponse_status,
+    getTemplateResponse_tools,
+    getTemplateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetTemplate' smart constructor.
+data GetTemplate = GetTemplate'
+  { -- | The ID of the template.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'getTemplate_id' - The ID of the template.
+newGetTemplate ::
+  -- | 'id'
+  Prelude.Text ->
+  GetTemplate
+newGetTemplate pId_ = GetTemplate' {id = pId_}
+
+-- | The ID of the template.
+getTemplate_id :: Lens.Lens' GetTemplate Prelude.Text
+getTemplate_id = Lens.lens (\GetTemplate' {id} -> id) (\s@GetTemplate' {} a -> s {id = a} :: GetTemplate)
+
+instance Core.AWSRequest GetTemplate where
+  type AWSResponse GetTemplate = GetTemplateResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetTemplateResponse'
+            Prelude.<$> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "inputs" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "tools" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetTemplate where
+  hashWithSalt _salt GetTemplate' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetTemplate where
+  rnf GetTemplate' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetTemplate where
+  toPath GetTemplate' {..} =
+    Prelude.mconcat
+      ["/migrationworkflowtemplate/", Data.toBS id]
+
+instance Data.ToQuery GetTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetTemplateResponse' smart constructor.
+data GetTemplateResponse = GetTemplateResponse'
+  { -- | The time at which the template was last created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The time at which the template was last created.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the template.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The inputs provided for the creation of the migration workflow.
+    inputs :: Prelude.Maybe [TemplateInput],
+    -- | The name of the template.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The status of the template.
+    status :: Prelude.Maybe TemplateStatus,
+    -- | List of AWS services utilized in a migration workflow.
+    tools :: Prelude.Maybe [Tool],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'getTemplateResponse_creationTime' - The time at which the template was last created.
+--
+-- 'description', 'getTemplateResponse_description' - The time at which the template was last created.
+--
+-- 'id', 'getTemplateResponse_id' - The ID of the template.
+--
+-- 'inputs', 'getTemplateResponse_inputs' - The inputs provided for the creation of the migration workflow.
+--
+-- 'name', 'getTemplateResponse_name' - The name of the template.
+--
+-- 'status', 'getTemplateResponse_status' - The status of the template.
+--
+-- 'tools', 'getTemplateResponse_tools' - List of AWS services utilized in a migration workflow.
+--
+-- 'httpStatus', 'getTemplateResponse_httpStatus' - The response's http status code.
+newGetTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetTemplateResponse
+newGetTemplateResponse pHttpStatus_ =
+  GetTemplateResponse'
+    { creationTime =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      inputs = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tools = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The time at which the template was last created.
+getTemplateResponse_creationTime :: Lens.Lens' GetTemplateResponse (Prelude.Maybe Prelude.UTCTime)
+getTemplateResponse_creationTime = Lens.lens (\GetTemplateResponse' {creationTime} -> creationTime) (\s@GetTemplateResponse' {} a -> s {creationTime = a} :: GetTemplateResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which the template was last created.
+getTemplateResponse_description :: Lens.Lens' GetTemplateResponse (Prelude.Maybe Prelude.Text)
+getTemplateResponse_description = Lens.lens (\GetTemplateResponse' {description} -> description) (\s@GetTemplateResponse' {} a -> s {description = a} :: GetTemplateResponse)
+
+-- | The ID of the template.
+getTemplateResponse_id :: Lens.Lens' GetTemplateResponse (Prelude.Maybe Prelude.Text)
+getTemplateResponse_id = Lens.lens (\GetTemplateResponse' {id} -> id) (\s@GetTemplateResponse' {} a -> s {id = a} :: GetTemplateResponse)
+
+-- | The inputs provided for the creation of the migration workflow.
+getTemplateResponse_inputs :: Lens.Lens' GetTemplateResponse (Prelude.Maybe [TemplateInput])
+getTemplateResponse_inputs = Lens.lens (\GetTemplateResponse' {inputs} -> inputs) (\s@GetTemplateResponse' {} a -> s {inputs = a} :: GetTemplateResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the template.
+getTemplateResponse_name :: Lens.Lens' GetTemplateResponse (Prelude.Maybe Prelude.Text)
+getTemplateResponse_name = Lens.lens (\GetTemplateResponse' {name} -> name) (\s@GetTemplateResponse' {} a -> s {name = a} :: GetTemplateResponse)
+
+-- | The status of the template.
+getTemplateResponse_status :: Lens.Lens' GetTemplateResponse (Prelude.Maybe TemplateStatus)
+getTemplateResponse_status = Lens.lens (\GetTemplateResponse' {status} -> status) (\s@GetTemplateResponse' {} a -> s {status = a} :: GetTemplateResponse)
+
+-- | List of AWS services utilized in a migration workflow.
+getTemplateResponse_tools :: Lens.Lens' GetTemplateResponse (Prelude.Maybe [Tool])
+getTemplateResponse_tools = Lens.lens (\GetTemplateResponse' {tools} -> tools) (\s@GetTemplateResponse' {} a -> s {tools = a} :: GetTemplateResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getTemplateResponse_httpStatus :: Lens.Lens' GetTemplateResponse Prelude.Int
+getTemplateResponse_httpStatus = Lens.lens (\GetTemplateResponse' {httpStatus} -> httpStatus) (\s@GetTemplateResponse' {} a -> s {httpStatus = a} :: GetTemplateResponse)
+
+instance Prelude.NFData GetTemplateResponse where
+  rnf GetTemplateResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf inputs
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tools
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/GetTemplateStep.hs b/gen/Amazonka/MigrationHubOrchestrator/GetTemplateStep.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/GetTemplateStep.hs
@@ -0,0 +1,320 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.GetTemplateStep
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get a specific step in a template.
+module Amazonka.MigrationHubOrchestrator.GetTemplateStep
+  ( -- * Creating a Request
+    GetTemplateStep (..),
+    newGetTemplateStep,
+
+    -- * Request Lenses
+    getTemplateStep_id,
+    getTemplateStep_templateId,
+    getTemplateStep_stepGroupId,
+
+    -- * Destructuring the Response
+    GetTemplateStepResponse (..),
+    newGetTemplateStepResponse,
+
+    -- * Response Lenses
+    getTemplateStepResponse_creationTime,
+    getTemplateStepResponse_description,
+    getTemplateStepResponse_id,
+    getTemplateStepResponse_name,
+    getTemplateStepResponse_next,
+    getTemplateStepResponse_outputs,
+    getTemplateStepResponse_previous,
+    getTemplateStepResponse_stepActionType,
+    getTemplateStepResponse_stepAutomationConfiguration,
+    getTemplateStepResponse_stepGroupId,
+    getTemplateStepResponse_templateId,
+    getTemplateStepResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetTemplateStep' smart constructor.
+data GetTemplateStep = GetTemplateStep'
+  { -- | The ID of the step.
+    id :: Prelude.Text,
+    -- | The ID of the template.
+    templateId :: Prelude.Text,
+    -- | The ID of the step group.
+    stepGroupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTemplateStep' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'getTemplateStep_id' - The ID of the step.
+--
+-- 'templateId', 'getTemplateStep_templateId' - The ID of the template.
+--
+-- 'stepGroupId', 'getTemplateStep_stepGroupId' - The ID of the step group.
+newGetTemplateStep ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'templateId'
+  Prelude.Text ->
+  -- | 'stepGroupId'
+  Prelude.Text ->
+  GetTemplateStep
+newGetTemplateStep pId_ pTemplateId_ pStepGroupId_ =
+  GetTemplateStep'
+    { id = pId_,
+      templateId = pTemplateId_,
+      stepGroupId = pStepGroupId_
+    }
+
+-- | The ID of the step.
+getTemplateStep_id :: Lens.Lens' GetTemplateStep Prelude.Text
+getTemplateStep_id = Lens.lens (\GetTemplateStep' {id} -> id) (\s@GetTemplateStep' {} a -> s {id = a} :: GetTemplateStep)
+
+-- | The ID of the template.
+getTemplateStep_templateId :: Lens.Lens' GetTemplateStep Prelude.Text
+getTemplateStep_templateId = Lens.lens (\GetTemplateStep' {templateId} -> templateId) (\s@GetTemplateStep' {} a -> s {templateId = a} :: GetTemplateStep)
+
+-- | The ID of the step group.
+getTemplateStep_stepGroupId :: Lens.Lens' GetTemplateStep Prelude.Text
+getTemplateStep_stepGroupId = Lens.lens (\GetTemplateStep' {stepGroupId} -> stepGroupId) (\s@GetTemplateStep' {} a -> s {stepGroupId = a} :: GetTemplateStep)
+
+instance Core.AWSRequest GetTemplateStep where
+  type
+    AWSResponse GetTemplateStep =
+      GetTemplateStepResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetTemplateStepResponse'
+            Prelude.<$> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "next" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "outputs" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "previous" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "stepActionType")
+            Prelude.<*> (x Data..?> "stepAutomationConfiguration")
+            Prelude.<*> (x Data..?> "stepGroupId")
+            Prelude.<*> (x Data..?> "templateId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetTemplateStep where
+  hashWithSalt _salt GetTemplateStep' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` templateId
+      `Prelude.hashWithSalt` stepGroupId
+
+instance Prelude.NFData GetTemplateStep where
+  rnf GetTemplateStep' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf templateId
+      `Prelude.seq` Prelude.rnf stepGroupId
+
+instance Data.ToHeaders GetTemplateStep where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetTemplateStep where
+  toPath GetTemplateStep' {..} =
+    Prelude.mconcat ["/templatestep/", Data.toBS id]
+
+instance Data.ToQuery GetTemplateStep where
+  toQuery GetTemplateStep' {..} =
+    Prelude.mconcat
+      [ "templateId" Data.=: templateId,
+        "stepGroupId" Data.=: stepGroupId
+      ]
+
+-- | /See:/ 'newGetTemplateStepResponse' smart constructor.
+data GetTemplateStepResponse = GetTemplateStepResponse'
+  { -- | The time at which the step was created.
+    creationTime :: Prelude.Maybe Prelude.Text,
+    -- | The description of the step.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the step.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the step.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The next step.
+    next :: Prelude.Maybe [Prelude.Text],
+    -- | The outputs of the step.
+    outputs :: Prelude.Maybe [StepOutput],
+    -- | The previous step.
+    previous :: Prelude.Maybe [Prelude.Text],
+    -- | The action type of the step. You must run and update the status of a
+    -- manual step for the workflow to continue after the completion of the
+    -- step.
+    stepActionType :: Prelude.Maybe StepActionType,
+    -- | The custom script to run tests on source or target environments.
+    stepAutomationConfiguration :: Prelude.Maybe StepAutomationConfiguration,
+    -- | The ID of the step group.
+    stepGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the template.
+    templateId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTemplateStepResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'getTemplateStepResponse_creationTime' - The time at which the step was created.
+--
+-- 'description', 'getTemplateStepResponse_description' - The description of the step.
+--
+-- 'id', 'getTemplateStepResponse_id' - The ID of the step.
+--
+-- 'name', 'getTemplateStepResponse_name' - The name of the step.
+--
+-- 'next', 'getTemplateStepResponse_next' - The next step.
+--
+-- 'outputs', 'getTemplateStepResponse_outputs' - The outputs of the step.
+--
+-- 'previous', 'getTemplateStepResponse_previous' - The previous step.
+--
+-- 'stepActionType', 'getTemplateStepResponse_stepActionType' - The action type of the step. You must run and update the status of a
+-- manual step for the workflow to continue after the completion of the
+-- step.
+--
+-- 'stepAutomationConfiguration', 'getTemplateStepResponse_stepAutomationConfiguration' - The custom script to run tests on source or target environments.
+--
+-- 'stepGroupId', 'getTemplateStepResponse_stepGroupId' - The ID of the step group.
+--
+-- 'templateId', 'getTemplateStepResponse_templateId' - The ID of the template.
+--
+-- 'httpStatus', 'getTemplateStepResponse_httpStatus' - The response's http status code.
+newGetTemplateStepResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetTemplateStepResponse
+newGetTemplateStepResponse pHttpStatus_ =
+  GetTemplateStepResponse'
+    { creationTime =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      next = Prelude.Nothing,
+      outputs = Prelude.Nothing,
+      previous = Prelude.Nothing,
+      stepActionType = Prelude.Nothing,
+      stepAutomationConfiguration = Prelude.Nothing,
+      stepGroupId = Prelude.Nothing,
+      templateId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The time at which the step was created.
+getTemplateStepResponse_creationTime :: Lens.Lens' GetTemplateStepResponse (Prelude.Maybe Prelude.Text)
+getTemplateStepResponse_creationTime = Lens.lens (\GetTemplateStepResponse' {creationTime} -> creationTime) (\s@GetTemplateStepResponse' {} a -> s {creationTime = a} :: GetTemplateStepResponse)
+
+-- | The description of the step.
+getTemplateStepResponse_description :: Lens.Lens' GetTemplateStepResponse (Prelude.Maybe Prelude.Text)
+getTemplateStepResponse_description = Lens.lens (\GetTemplateStepResponse' {description} -> description) (\s@GetTemplateStepResponse' {} a -> s {description = a} :: GetTemplateStepResponse)
+
+-- | The ID of the step.
+getTemplateStepResponse_id :: Lens.Lens' GetTemplateStepResponse (Prelude.Maybe Prelude.Text)
+getTemplateStepResponse_id = Lens.lens (\GetTemplateStepResponse' {id} -> id) (\s@GetTemplateStepResponse' {} a -> s {id = a} :: GetTemplateStepResponse)
+
+-- | The name of the step.
+getTemplateStepResponse_name :: Lens.Lens' GetTemplateStepResponse (Prelude.Maybe Prelude.Text)
+getTemplateStepResponse_name = Lens.lens (\GetTemplateStepResponse' {name} -> name) (\s@GetTemplateStepResponse' {} a -> s {name = a} :: GetTemplateStepResponse)
+
+-- | The next step.
+getTemplateStepResponse_next :: Lens.Lens' GetTemplateStepResponse (Prelude.Maybe [Prelude.Text])
+getTemplateStepResponse_next = Lens.lens (\GetTemplateStepResponse' {next} -> next) (\s@GetTemplateStepResponse' {} a -> s {next = a} :: GetTemplateStepResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The outputs of the step.
+getTemplateStepResponse_outputs :: Lens.Lens' GetTemplateStepResponse (Prelude.Maybe [StepOutput])
+getTemplateStepResponse_outputs = Lens.lens (\GetTemplateStepResponse' {outputs} -> outputs) (\s@GetTemplateStepResponse' {} a -> s {outputs = a} :: GetTemplateStepResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The previous step.
+getTemplateStepResponse_previous :: Lens.Lens' GetTemplateStepResponse (Prelude.Maybe [Prelude.Text])
+getTemplateStepResponse_previous = Lens.lens (\GetTemplateStepResponse' {previous} -> previous) (\s@GetTemplateStepResponse' {} a -> s {previous = a} :: GetTemplateStepResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The action type of the step. You must run and update the status of a
+-- manual step for the workflow to continue after the completion of the
+-- step.
+getTemplateStepResponse_stepActionType :: Lens.Lens' GetTemplateStepResponse (Prelude.Maybe StepActionType)
+getTemplateStepResponse_stepActionType = Lens.lens (\GetTemplateStepResponse' {stepActionType} -> stepActionType) (\s@GetTemplateStepResponse' {} a -> s {stepActionType = a} :: GetTemplateStepResponse)
+
+-- | The custom script to run tests on source or target environments.
+getTemplateStepResponse_stepAutomationConfiguration :: Lens.Lens' GetTemplateStepResponse (Prelude.Maybe StepAutomationConfiguration)
+getTemplateStepResponse_stepAutomationConfiguration = Lens.lens (\GetTemplateStepResponse' {stepAutomationConfiguration} -> stepAutomationConfiguration) (\s@GetTemplateStepResponse' {} a -> s {stepAutomationConfiguration = a} :: GetTemplateStepResponse)
+
+-- | The ID of the step group.
+getTemplateStepResponse_stepGroupId :: Lens.Lens' GetTemplateStepResponse (Prelude.Maybe Prelude.Text)
+getTemplateStepResponse_stepGroupId = Lens.lens (\GetTemplateStepResponse' {stepGroupId} -> stepGroupId) (\s@GetTemplateStepResponse' {} a -> s {stepGroupId = a} :: GetTemplateStepResponse)
+
+-- | The ID of the template.
+getTemplateStepResponse_templateId :: Lens.Lens' GetTemplateStepResponse (Prelude.Maybe Prelude.Text)
+getTemplateStepResponse_templateId = Lens.lens (\GetTemplateStepResponse' {templateId} -> templateId) (\s@GetTemplateStepResponse' {} a -> s {templateId = a} :: GetTemplateStepResponse)
+
+-- | The response's http status code.
+getTemplateStepResponse_httpStatus :: Lens.Lens' GetTemplateStepResponse Prelude.Int
+getTemplateStepResponse_httpStatus = Lens.lens (\GetTemplateStepResponse' {httpStatus} -> httpStatus) (\s@GetTemplateStepResponse' {} a -> s {httpStatus = a} :: GetTemplateStepResponse)
+
+instance Prelude.NFData GetTemplateStepResponse where
+  rnf GetTemplateStepResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf next
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf previous
+      `Prelude.seq` Prelude.rnf stepActionType
+      `Prelude.seq` Prelude.rnf stepAutomationConfiguration
+      `Prelude.seq` Prelude.rnf stepGroupId
+      `Prelude.seq` Prelude.rnf templateId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/GetTemplateStepGroup.hs b/gen/Amazonka/MigrationHubOrchestrator/GetTemplateStepGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/GetTemplateStepGroup.hs
@@ -0,0 +1,288 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.GetTemplateStepGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get a step group in a template.
+module Amazonka.MigrationHubOrchestrator.GetTemplateStepGroup
+  ( -- * Creating a Request
+    GetTemplateStepGroup (..),
+    newGetTemplateStepGroup,
+
+    -- * Request Lenses
+    getTemplateStepGroup_templateId,
+    getTemplateStepGroup_id,
+
+    -- * Destructuring the Response
+    GetTemplateStepGroupResponse (..),
+    newGetTemplateStepGroupResponse,
+
+    -- * Response Lenses
+    getTemplateStepGroupResponse_creationTime,
+    getTemplateStepGroupResponse_description,
+    getTemplateStepGroupResponse_id,
+    getTemplateStepGroupResponse_lastModifiedTime,
+    getTemplateStepGroupResponse_name,
+    getTemplateStepGroupResponse_next,
+    getTemplateStepGroupResponse_previous,
+    getTemplateStepGroupResponse_status,
+    getTemplateStepGroupResponse_templateId,
+    getTemplateStepGroupResponse_tools,
+    getTemplateStepGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetTemplateStepGroup' smart constructor.
+data GetTemplateStepGroup = GetTemplateStepGroup'
+  { -- | The ID of the template.
+    templateId :: Prelude.Text,
+    -- | The ID of the step group.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTemplateStepGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'templateId', 'getTemplateStepGroup_templateId' - The ID of the template.
+--
+-- 'id', 'getTemplateStepGroup_id' - The ID of the step group.
+newGetTemplateStepGroup ::
+  -- | 'templateId'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  GetTemplateStepGroup
+newGetTemplateStepGroup pTemplateId_ pId_ =
+  GetTemplateStepGroup'
+    { templateId = pTemplateId_,
+      id = pId_
+    }
+
+-- | The ID of the template.
+getTemplateStepGroup_templateId :: Lens.Lens' GetTemplateStepGroup Prelude.Text
+getTemplateStepGroup_templateId = Lens.lens (\GetTemplateStepGroup' {templateId} -> templateId) (\s@GetTemplateStepGroup' {} a -> s {templateId = a} :: GetTemplateStepGroup)
+
+-- | The ID of the step group.
+getTemplateStepGroup_id :: Lens.Lens' GetTemplateStepGroup Prelude.Text
+getTemplateStepGroup_id = Lens.lens (\GetTemplateStepGroup' {id} -> id) (\s@GetTemplateStepGroup' {} a -> s {id = a} :: GetTemplateStepGroup)
+
+instance Core.AWSRequest GetTemplateStepGroup where
+  type
+    AWSResponse GetTemplateStepGroup =
+      GetTemplateStepGroupResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetTemplateStepGroupResponse'
+            Prelude.<$> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "lastModifiedTime")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "next" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "previous" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "templateId")
+            Prelude.<*> (x Data..?> "tools" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetTemplateStepGroup where
+  hashWithSalt _salt GetTemplateStepGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` templateId
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetTemplateStepGroup where
+  rnf GetTemplateStepGroup' {..} =
+    Prelude.rnf templateId `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders GetTemplateStepGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetTemplateStepGroup where
+  toPath GetTemplateStepGroup' {..} =
+    Prelude.mconcat
+      [ "/templates/",
+        Data.toBS templateId,
+        "/stepgroups/",
+        Data.toBS id
+      ]
+
+instance Data.ToQuery GetTemplateStepGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetTemplateStepGroupResponse' smart constructor.
+data GetTemplateStepGroupResponse = GetTemplateStepGroupResponse'
+  { -- | The time at which the step group was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the step group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the step group.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the step group was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the step group.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The next step group.
+    next :: Prelude.Maybe [Prelude.Text],
+    -- | The previous step group.
+    previous :: Prelude.Maybe [Prelude.Text],
+    -- | The status of the step group.
+    status :: Prelude.Maybe StepGroupStatus,
+    -- | The ID of the template.
+    templateId :: Prelude.Maybe Prelude.Text,
+    -- | List of AWS services utilized in a migration workflow.
+    tools :: Prelude.Maybe [Tool],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTemplateStepGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'getTemplateStepGroupResponse_creationTime' - The time at which the step group was created.
+--
+-- 'description', 'getTemplateStepGroupResponse_description' - The description of the step group.
+--
+-- 'id', 'getTemplateStepGroupResponse_id' - The ID of the step group.
+--
+-- 'lastModifiedTime', 'getTemplateStepGroupResponse_lastModifiedTime' - The time at which the step group was last modified.
+--
+-- 'name', 'getTemplateStepGroupResponse_name' - The name of the step group.
+--
+-- 'next', 'getTemplateStepGroupResponse_next' - The next step group.
+--
+-- 'previous', 'getTemplateStepGroupResponse_previous' - The previous step group.
+--
+-- 'status', 'getTemplateStepGroupResponse_status' - The status of the step group.
+--
+-- 'templateId', 'getTemplateStepGroupResponse_templateId' - The ID of the template.
+--
+-- 'tools', 'getTemplateStepGroupResponse_tools' - List of AWS services utilized in a migration workflow.
+--
+-- 'httpStatus', 'getTemplateStepGroupResponse_httpStatus' - The response's http status code.
+newGetTemplateStepGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetTemplateStepGroupResponse
+newGetTemplateStepGroupResponse pHttpStatus_ =
+  GetTemplateStepGroupResponse'
+    { creationTime =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      next = Prelude.Nothing,
+      previous = Prelude.Nothing,
+      status = Prelude.Nothing,
+      templateId = Prelude.Nothing,
+      tools = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The time at which the step group was created.
+getTemplateStepGroupResponse_creationTime :: Lens.Lens' GetTemplateStepGroupResponse (Prelude.Maybe Prelude.UTCTime)
+getTemplateStepGroupResponse_creationTime = Lens.lens (\GetTemplateStepGroupResponse' {creationTime} -> creationTime) (\s@GetTemplateStepGroupResponse' {} a -> s {creationTime = a} :: GetTemplateStepGroupResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the step group.
+getTemplateStepGroupResponse_description :: Lens.Lens' GetTemplateStepGroupResponse (Prelude.Maybe Prelude.Text)
+getTemplateStepGroupResponse_description = Lens.lens (\GetTemplateStepGroupResponse' {description} -> description) (\s@GetTemplateStepGroupResponse' {} a -> s {description = a} :: GetTemplateStepGroupResponse)
+
+-- | The ID of the step group.
+getTemplateStepGroupResponse_id :: Lens.Lens' GetTemplateStepGroupResponse (Prelude.Maybe Prelude.Text)
+getTemplateStepGroupResponse_id = Lens.lens (\GetTemplateStepGroupResponse' {id} -> id) (\s@GetTemplateStepGroupResponse' {} a -> s {id = a} :: GetTemplateStepGroupResponse)
+
+-- | The time at which the step group was last modified.
+getTemplateStepGroupResponse_lastModifiedTime :: Lens.Lens' GetTemplateStepGroupResponse (Prelude.Maybe Prelude.UTCTime)
+getTemplateStepGroupResponse_lastModifiedTime = Lens.lens (\GetTemplateStepGroupResponse' {lastModifiedTime} -> lastModifiedTime) (\s@GetTemplateStepGroupResponse' {} a -> s {lastModifiedTime = a} :: GetTemplateStepGroupResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the step group.
+getTemplateStepGroupResponse_name :: Lens.Lens' GetTemplateStepGroupResponse (Prelude.Maybe Prelude.Text)
+getTemplateStepGroupResponse_name = Lens.lens (\GetTemplateStepGroupResponse' {name} -> name) (\s@GetTemplateStepGroupResponse' {} a -> s {name = a} :: GetTemplateStepGroupResponse)
+
+-- | The next step group.
+getTemplateStepGroupResponse_next :: Lens.Lens' GetTemplateStepGroupResponse (Prelude.Maybe [Prelude.Text])
+getTemplateStepGroupResponse_next = Lens.lens (\GetTemplateStepGroupResponse' {next} -> next) (\s@GetTemplateStepGroupResponse' {} a -> s {next = a} :: GetTemplateStepGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The previous step group.
+getTemplateStepGroupResponse_previous :: Lens.Lens' GetTemplateStepGroupResponse (Prelude.Maybe [Prelude.Text])
+getTemplateStepGroupResponse_previous = Lens.lens (\GetTemplateStepGroupResponse' {previous} -> previous) (\s@GetTemplateStepGroupResponse' {} a -> s {previous = a} :: GetTemplateStepGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the step group.
+getTemplateStepGroupResponse_status :: Lens.Lens' GetTemplateStepGroupResponse (Prelude.Maybe StepGroupStatus)
+getTemplateStepGroupResponse_status = Lens.lens (\GetTemplateStepGroupResponse' {status} -> status) (\s@GetTemplateStepGroupResponse' {} a -> s {status = a} :: GetTemplateStepGroupResponse)
+
+-- | The ID of the template.
+getTemplateStepGroupResponse_templateId :: Lens.Lens' GetTemplateStepGroupResponse (Prelude.Maybe Prelude.Text)
+getTemplateStepGroupResponse_templateId = Lens.lens (\GetTemplateStepGroupResponse' {templateId} -> templateId) (\s@GetTemplateStepGroupResponse' {} a -> s {templateId = a} :: GetTemplateStepGroupResponse)
+
+-- | List of AWS services utilized in a migration workflow.
+getTemplateStepGroupResponse_tools :: Lens.Lens' GetTemplateStepGroupResponse (Prelude.Maybe [Tool])
+getTemplateStepGroupResponse_tools = Lens.lens (\GetTemplateStepGroupResponse' {tools} -> tools) (\s@GetTemplateStepGroupResponse' {} a -> s {tools = a} :: GetTemplateStepGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getTemplateStepGroupResponse_httpStatus :: Lens.Lens' GetTemplateStepGroupResponse Prelude.Int
+getTemplateStepGroupResponse_httpStatus = Lens.lens (\GetTemplateStepGroupResponse' {httpStatus} -> httpStatus) (\s@GetTemplateStepGroupResponse' {} a -> s {httpStatus = a} :: GetTemplateStepGroupResponse)
+
+instance Prelude.NFData GetTemplateStepGroupResponse where
+  rnf GetTemplateStepGroupResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf next
+      `Prelude.seq` Prelude.rnf previous
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf templateId
+      `Prelude.seq` Prelude.rnf tools
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/GetWorkflow.hs b/gen/Amazonka/MigrationHubOrchestrator/GetWorkflow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/GetWorkflow.hs
@@ -0,0 +1,387 @@
+{-# 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.MigrationHubOrchestrator.GetWorkflow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get migration workflow.
+module Amazonka.MigrationHubOrchestrator.GetWorkflow
+  ( -- * Creating a Request
+    GetWorkflow (..),
+    newGetWorkflow,
+
+    -- * Request Lenses
+    getWorkflow_id,
+
+    -- * Destructuring the Response
+    GetWorkflowResponse (..),
+    newGetWorkflowResponse,
+
+    -- * Response Lenses
+    getWorkflowResponse_adsApplicationConfigurationId,
+    getWorkflowResponse_adsApplicationName,
+    getWorkflowResponse_arn,
+    getWorkflowResponse_completedSteps,
+    getWorkflowResponse_creationTime,
+    getWorkflowResponse_description,
+    getWorkflowResponse_endTime,
+    getWorkflowResponse_id,
+    getWorkflowResponse_lastModifiedTime,
+    getWorkflowResponse_lastStartTime,
+    getWorkflowResponse_lastStopTime,
+    getWorkflowResponse_name,
+    getWorkflowResponse_status,
+    getWorkflowResponse_statusMessage,
+    getWorkflowResponse_tags,
+    getWorkflowResponse_templateId,
+    getWorkflowResponse_tools,
+    getWorkflowResponse_totalSteps,
+    getWorkflowResponse_workflowBucket,
+    getWorkflowResponse_workflowInputs,
+    getWorkflowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetWorkflow' smart constructor.
+data GetWorkflow = GetWorkflow'
+  { -- | The ID of the migration workflow.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWorkflow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'getWorkflow_id' - The ID of the migration workflow.
+newGetWorkflow ::
+  -- | 'id'
+  Prelude.Text ->
+  GetWorkflow
+newGetWorkflow pId_ = GetWorkflow' {id = pId_}
+
+-- | The ID of the migration workflow.
+getWorkflow_id :: Lens.Lens' GetWorkflow Prelude.Text
+getWorkflow_id = Lens.lens (\GetWorkflow' {id} -> id) (\s@GetWorkflow' {} a -> s {id = a} :: GetWorkflow)
+
+instance Core.AWSRequest GetWorkflow where
+  type AWSResponse GetWorkflow = GetWorkflowResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetWorkflowResponse'
+            Prelude.<$> (x Data..?> "adsApplicationConfigurationId")
+            Prelude.<*> (x Data..?> "adsApplicationName")
+            Prelude.<*> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "completedSteps")
+            Prelude.<*> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "endTime")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "lastModifiedTime")
+            Prelude.<*> (x Data..?> "lastStartTime")
+            Prelude.<*> (x Data..?> "lastStopTime")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "statusMessage")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "templateId")
+            Prelude.<*> (x Data..?> "tools" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "totalSteps")
+            Prelude.<*> (x Data..?> "workflowBucket")
+            Prelude.<*> (x Data..?> "workflowInputs" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetWorkflow where
+  hashWithSalt _salt GetWorkflow' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetWorkflow where
+  rnf GetWorkflow' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetWorkflow where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetWorkflow where
+  toPath GetWorkflow' {..} =
+    Prelude.mconcat
+      ["/migrationworkflow/", Data.toBS id]
+
+instance Data.ToQuery GetWorkflow where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetWorkflowResponse' smart constructor.
+data GetWorkflowResponse = GetWorkflowResponse'
+  { -- | The configuration ID of the application configured in Application
+    -- Discovery Service.
+    adsApplicationConfigurationId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the application configured in Application Discovery Service.
+    adsApplicationName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the migration workflow.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Get a list of completed steps in the migration workflow.
+    completedSteps :: Prelude.Maybe Prelude.Int,
+    -- | The time at which the migration workflow was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the migration workflow.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the migration workflow ended.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | The ID of the migration workflow.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the migration workflow was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The time at which the migration workflow was last started.
+    lastStartTime :: Prelude.Maybe Data.POSIX,
+    -- | The time at which the migration workflow was last stopped.
+    lastStopTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the migration workflow.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The status of the migration workflow.
+    status :: Prelude.Maybe MigrationWorkflowStatusEnum,
+    -- | The status message of the migration workflow.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The tags added to the migration workflow.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ID of the template.
+    templateId :: Prelude.Maybe Prelude.Text,
+    -- | List of AWS services utilized in a migration workflow.
+    tools :: Prelude.Maybe [Tool],
+    -- | The total number of steps in the migration workflow.
+    totalSteps :: Prelude.Maybe Prelude.Int,
+    -- | The Amazon S3 bucket where the migration logs are stored.
+    workflowBucket :: Prelude.Maybe Prelude.Text,
+    -- | The inputs required for creating the migration workflow.
+    workflowInputs :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text StepInput)),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWorkflowResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'adsApplicationConfigurationId', 'getWorkflowResponse_adsApplicationConfigurationId' - The configuration ID of the application configured in Application
+-- Discovery Service.
+--
+-- 'adsApplicationName', 'getWorkflowResponse_adsApplicationName' - The name of the application configured in Application Discovery Service.
+--
+-- 'arn', 'getWorkflowResponse_arn' - The Amazon Resource Name (ARN) of the migration workflow.
+--
+-- 'completedSteps', 'getWorkflowResponse_completedSteps' - Get a list of completed steps in the migration workflow.
+--
+-- 'creationTime', 'getWorkflowResponse_creationTime' - The time at which the migration workflow was created.
+--
+-- 'description', 'getWorkflowResponse_description' - The description of the migration workflow.
+--
+-- 'endTime', 'getWorkflowResponse_endTime' - The time at which the migration workflow ended.
+--
+-- 'id', 'getWorkflowResponse_id' - The ID of the migration workflow.
+--
+-- 'lastModifiedTime', 'getWorkflowResponse_lastModifiedTime' - The time at which the migration workflow was last modified.
+--
+-- 'lastStartTime', 'getWorkflowResponse_lastStartTime' - The time at which the migration workflow was last started.
+--
+-- 'lastStopTime', 'getWorkflowResponse_lastStopTime' - The time at which the migration workflow was last stopped.
+--
+-- 'name', 'getWorkflowResponse_name' - The name of the migration workflow.
+--
+-- 'status', 'getWorkflowResponse_status' - The status of the migration workflow.
+--
+-- 'statusMessage', 'getWorkflowResponse_statusMessage' - The status message of the migration workflow.
+--
+-- 'tags', 'getWorkflowResponse_tags' - The tags added to the migration workflow.
+--
+-- 'templateId', 'getWorkflowResponse_templateId' - The ID of the template.
+--
+-- 'tools', 'getWorkflowResponse_tools' - List of AWS services utilized in a migration workflow.
+--
+-- 'totalSteps', 'getWorkflowResponse_totalSteps' - The total number of steps in the migration workflow.
+--
+-- 'workflowBucket', 'getWorkflowResponse_workflowBucket' - The Amazon S3 bucket where the migration logs are stored.
+--
+-- 'workflowInputs', 'getWorkflowResponse_workflowInputs' - The inputs required for creating the migration workflow.
+--
+-- 'httpStatus', 'getWorkflowResponse_httpStatus' - The response's http status code.
+newGetWorkflowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetWorkflowResponse
+newGetWorkflowResponse pHttpStatus_ =
+  GetWorkflowResponse'
+    { adsApplicationConfigurationId =
+        Prelude.Nothing,
+      adsApplicationName = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      completedSteps = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      endTime = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      lastStartTime = Prelude.Nothing,
+      lastStopTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      templateId = Prelude.Nothing,
+      tools = Prelude.Nothing,
+      totalSteps = Prelude.Nothing,
+      workflowBucket = Prelude.Nothing,
+      workflowInputs = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The configuration ID of the application configured in Application
+-- Discovery Service.
+getWorkflowResponse_adsApplicationConfigurationId :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.Text)
+getWorkflowResponse_adsApplicationConfigurationId = Lens.lens (\GetWorkflowResponse' {adsApplicationConfigurationId} -> adsApplicationConfigurationId) (\s@GetWorkflowResponse' {} a -> s {adsApplicationConfigurationId = a} :: GetWorkflowResponse)
+
+-- | The name of the application configured in Application Discovery Service.
+getWorkflowResponse_adsApplicationName :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.Text)
+getWorkflowResponse_adsApplicationName = Lens.lens (\GetWorkflowResponse' {adsApplicationName} -> adsApplicationName) (\s@GetWorkflowResponse' {} a -> s {adsApplicationName = a} :: GetWorkflowResponse)
+
+-- | The Amazon Resource Name (ARN) of the migration workflow.
+getWorkflowResponse_arn :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.Text)
+getWorkflowResponse_arn = Lens.lens (\GetWorkflowResponse' {arn} -> arn) (\s@GetWorkflowResponse' {} a -> s {arn = a} :: GetWorkflowResponse)
+
+-- | Get a list of completed steps in the migration workflow.
+getWorkflowResponse_completedSteps :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.Int)
+getWorkflowResponse_completedSteps = Lens.lens (\GetWorkflowResponse' {completedSteps} -> completedSteps) (\s@GetWorkflowResponse' {} a -> s {completedSteps = a} :: GetWorkflowResponse)
+
+-- | The time at which the migration workflow was created.
+getWorkflowResponse_creationTime :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.UTCTime)
+getWorkflowResponse_creationTime = Lens.lens (\GetWorkflowResponse' {creationTime} -> creationTime) (\s@GetWorkflowResponse' {} a -> s {creationTime = a} :: GetWorkflowResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the migration workflow.
+getWorkflowResponse_description :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.Text)
+getWorkflowResponse_description = Lens.lens (\GetWorkflowResponse' {description} -> description) (\s@GetWorkflowResponse' {} a -> s {description = a} :: GetWorkflowResponse)
+
+-- | The time at which the migration workflow ended.
+getWorkflowResponse_endTime :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.UTCTime)
+getWorkflowResponse_endTime = Lens.lens (\GetWorkflowResponse' {endTime} -> endTime) (\s@GetWorkflowResponse' {} a -> s {endTime = a} :: GetWorkflowResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the migration workflow.
+getWorkflowResponse_id :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.Text)
+getWorkflowResponse_id = Lens.lens (\GetWorkflowResponse' {id} -> id) (\s@GetWorkflowResponse' {} a -> s {id = a} :: GetWorkflowResponse)
+
+-- | The time at which the migration workflow was last modified.
+getWorkflowResponse_lastModifiedTime :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.UTCTime)
+getWorkflowResponse_lastModifiedTime = Lens.lens (\GetWorkflowResponse' {lastModifiedTime} -> lastModifiedTime) (\s@GetWorkflowResponse' {} a -> s {lastModifiedTime = a} :: GetWorkflowResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which the migration workflow was last started.
+getWorkflowResponse_lastStartTime :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.UTCTime)
+getWorkflowResponse_lastStartTime = Lens.lens (\GetWorkflowResponse' {lastStartTime} -> lastStartTime) (\s@GetWorkflowResponse' {} a -> s {lastStartTime = a} :: GetWorkflowResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which the migration workflow was last stopped.
+getWorkflowResponse_lastStopTime :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.UTCTime)
+getWorkflowResponse_lastStopTime = Lens.lens (\GetWorkflowResponse' {lastStopTime} -> lastStopTime) (\s@GetWorkflowResponse' {} a -> s {lastStopTime = a} :: GetWorkflowResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the migration workflow.
+getWorkflowResponse_name :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.Text)
+getWorkflowResponse_name = Lens.lens (\GetWorkflowResponse' {name} -> name) (\s@GetWorkflowResponse' {} a -> s {name = a} :: GetWorkflowResponse)
+
+-- | The status of the migration workflow.
+getWorkflowResponse_status :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe MigrationWorkflowStatusEnum)
+getWorkflowResponse_status = Lens.lens (\GetWorkflowResponse' {status} -> status) (\s@GetWorkflowResponse' {} a -> s {status = a} :: GetWorkflowResponse)
+
+-- | The status message of the migration workflow.
+getWorkflowResponse_statusMessage :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.Text)
+getWorkflowResponse_statusMessage = Lens.lens (\GetWorkflowResponse' {statusMessage} -> statusMessage) (\s@GetWorkflowResponse' {} a -> s {statusMessage = a} :: GetWorkflowResponse)
+
+-- | The tags added to the migration workflow.
+getWorkflowResponse_tags :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getWorkflowResponse_tags = Lens.lens (\GetWorkflowResponse' {tags} -> tags) (\s@GetWorkflowResponse' {} a -> s {tags = a} :: GetWorkflowResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the template.
+getWorkflowResponse_templateId :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.Text)
+getWorkflowResponse_templateId = Lens.lens (\GetWorkflowResponse' {templateId} -> templateId) (\s@GetWorkflowResponse' {} a -> s {templateId = a} :: GetWorkflowResponse)
+
+-- | List of AWS services utilized in a migration workflow.
+getWorkflowResponse_tools :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe [Tool])
+getWorkflowResponse_tools = Lens.lens (\GetWorkflowResponse' {tools} -> tools) (\s@GetWorkflowResponse' {} a -> s {tools = a} :: GetWorkflowResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The total number of steps in the migration workflow.
+getWorkflowResponse_totalSteps :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.Int)
+getWorkflowResponse_totalSteps = Lens.lens (\GetWorkflowResponse' {totalSteps} -> totalSteps) (\s@GetWorkflowResponse' {} a -> s {totalSteps = a} :: GetWorkflowResponse)
+
+-- | The Amazon S3 bucket where the migration logs are stored.
+getWorkflowResponse_workflowBucket :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe Prelude.Text)
+getWorkflowResponse_workflowBucket = Lens.lens (\GetWorkflowResponse' {workflowBucket} -> workflowBucket) (\s@GetWorkflowResponse' {} a -> s {workflowBucket = a} :: GetWorkflowResponse)
+
+-- | The inputs required for creating the migration workflow.
+getWorkflowResponse_workflowInputs :: Lens.Lens' GetWorkflowResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text StepInput))
+getWorkflowResponse_workflowInputs = Lens.lens (\GetWorkflowResponse' {workflowInputs} -> workflowInputs) (\s@GetWorkflowResponse' {} a -> s {workflowInputs = a} :: GetWorkflowResponse) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The response's http status code.
+getWorkflowResponse_httpStatus :: Lens.Lens' GetWorkflowResponse Prelude.Int
+getWorkflowResponse_httpStatus = Lens.lens (\GetWorkflowResponse' {httpStatus} -> httpStatus) (\s@GetWorkflowResponse' {} a -> s {httpStatus = a} :: GetWorkflowResponse)
+
+instance Prelude.NFData GetWorkflowResponse where
+  rnf GetWorkflowResponse' {..} =
+    Prelude.rnf adsApplicationConfigurationId
+      `Prelude.seq` Prelude.rnf adsApplicationName
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf completedSteps
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf lastStartTime
+      `Prelude.seq` Prelude.rnf lastStopTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf templateId
+      `Prelude.seq` Prelude.rnf tools
+      `Prelude.seq` Prelude.rnf totalSteps
+      `Prelude.seq` Prelude.rnf workflowBucket
+      `Prelude.seq` Prelude.rnf workflowInputs
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/GetWorkflowStep.hs b/gen/Amazonka/MigrationHubOrchestrator/GetWorkflowStep.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/GetWorkflowStep.hs
@@ -0,0 +1,442 @@
+{-# 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.MigrationHubOrchestrator.GetWorkflowStep
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get a step in the migration workflow.
+module Amazonka.MigrationHubOrchestrator.GetWorkflowStep
+  ( -- * Creating a Request
+    GetWorkflowStep (..),
+    newGetWorkflowStep,
+
+    -- * Request Lenses
+    getWorkflowStep_workflowId,
+    getWorkflowStep_stepGroupId,
+    getWorkflowStep_id,
+
+    -- * Destructuring the Response
+    GetWorkflowStepResponse (..),
+    newGetWorkflowStepResponse,
+
+    -- * Response Lenses
+    getWorkflowStepResponse_creationTime,
+    getWorkflowStepResponse_description,
+    getWorkflowStepResponse_endTime,
+    getWorkflowStepResponse_lastStartTime,
+    getWorkflowStepResponse_name,
+    getWorkflowStepResponse_next,
+    getWorkflowStepResponse_noOfSrvCompleted,
+    getWorkflowStepResponse_noOfSrvFailed,
+    getWorkflowStepResponse_outputs,
+    getWorkflowStepResponse_owner,
+    getWorkflowStepResponse_previous,
+    getWorkflowStepResponse_scriptOutputLocation,
+    getWorkflowStepResponse_status,
+    getWorkflowStepResponse_statusMessage,
+    getWorkflowStepResponse_stepActionType,
+    getWorkflowStepResponse_stepGroupId,
+    getWorkflowStepResponse_stepId,
+    getWorkflowStepResponse_stepTarget,
+    getWorkflowStepResponse_totalNoOfSrv,
+    getWorkflowStepResponse_workflowId,
+    getWorkflowStepResponse_workflowStepAutomationConfiguration,
+    getWorkflowStepResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetWorkflowStep' smart constructor.
+data GetWorkflowStep = GetWorkflowStep'
+  { -- | The ID of the migration workflow.
+    workflowId :: Prelude.Text,
+    -- | desThe ID of the step group.
+    stepGroupId :: Prelude.Text,
+    -- | The ID of the step.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWorkflowStep' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'workflowId', 'getWorkflowStep_workflowId' - The ID of the migration workflow.
+--
+-- 'stepGroupId', 'getWorkflowStep_stepGroupId' - desThe ID of the step group.
+--
+-- 'id', 'getWorkflowStep_id' - The ID of the step.
+newGetWorkflowStep ::
+  -- | 'workflowId'
+  Prelude.Text ->
+  -- | 'stepGroupId'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  GetWorkflowStep
+newGetWorkflowStep pWorkflowId_ pStepGroupId_ pId_ =
+  GetWorkflowStep'
+    { workflowId = pWorkflowId_,
+      stepGroupId = pStepGroupId_,
+      id = pId_
+    }
+
+-- | The ID of the migration workflow.
+getWorkflowStep_workflowId :: Lens.Lens' GetWorkflowStep Prelude.Text
+getWorkflowStep_workflowId = Lens.lens (\GetWorkflowStep' {workflowId} -> workflowId) (\s@GetWorkflowStep' {} a -> s {workflowId = a} :: GetWorkflowStep)
+
+-- | desThe ID of the step group.
+getWorkflowStep_stepGroupId :: Lens.Lens' GetWorkflowStep Prelude.Text
+getWorkflowStep_stepGroupId = Lens.lens (\GetWorkflowStep' {stepGroupId} -> stepGroupId) (\s@GetWorkflowStep' {} a -> s {stepGroupId = a} :: GetWorkflowStep)
+
+-- | The ID of the step.
+getWorkflowStep_id :: Lens.Lens' GetWorkflowStep Prelude.Text
+getWorkflowStep_id = Lens.lens (\GetWorkflowStep' {id} -> id) (\s@GetWorkflowStep' {} a -> s {id = a} :: GetWorkflowStep)
+
+instance Core.AWSRequest GetWorkflowStep where
+  type
+    AWSResponse GetWorkflowStep =
+      GetWorkflowStepResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetWorkflowStepResponse'
+            Prelude.<$> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "endTime")
+            Prelude.<*> (x Data..?> "lastStartTime")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "next" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "noOfSrvCompleted")
+            Prelude.<*> (x Data..?> "noOfSrvFailed")
+            Prelude.<*> (x Data..?> "outputs" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "owner")
+            Prelude.<*> (x Data..?> "previous" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "scriptOutputLocation")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "statusMessage")
+            Prelude.<*> (x Data..?> "stepActionType")
+            Prelude.<*> (x Data..?> "stepGroupId")
+            Prelude.<*> (x Data..?> "stepId")
+            Prelude.<*> (x Data..?> "stepTarget" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "totalNoOfSrv")
+            Prelude.<*> (x Data..?> "workflowId")
+            Prelude.<*> (x Data..?> "workflowStepAutomationConfiguration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetWorkflowStep where
+  hashWithSalt _salt GetWorkflowStep' {..} =
+    _salt
+      `Prelude.hashWithSalt` workflowId
+      `Prelude.hashWithSalt` stepGroupId
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetWorkflowStep where
+  rnf GetWorkflowStep' {..} =
+    Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf stepGroupId
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders GetWorkflowStep where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetWorkflowStep where
+  toPath GetWorkflowStep' {..} =
+    Prelude.mconcat ["/workflowstep/", Data.toBS id]
+
+instance Data.ToQuery GetWorkflowStep where
+  toQuery GetWorkflowStep' {..} =
+    Prelude.mconcat
+      [ "workflowId" Data.=: workflowId,
+        "stepGroupId" Data.=: stepGroupId
+      ]
+
+-- | /See:/ 'newGetWorkflowStepResponse' smart constructor.
+data GetWorkflowStepResponse = GetWorkflowStepResponse'
+  { -- | The time at which the step was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the step.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the step ended.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | The time at which the workflow was last started.
+    lastStartTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the step.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The next step.
+    next :: Prelude.Maybe [Prelude.Text],
+    -- | The number of servers that have been migrated.
+    noOfSrvCompleted :: Prelude.Maybe Prelude.Int,
+    -- | The number of servers that have failed to migrate.
+    noOfSrvFailed :: Prelude.Maybe Prelude.Int,
+    -- | The outputs of the step.
+    outputs :: Prelude.Maybe [WorkflowStepOutput],
+    -- | The owner of the step.
+    owner :: Prelude.Maybe Owner,
+    -- | The previous step.
+    previous :: Prelude.Maybe [Prelude.Text],
+    -- | The output location of the script.
+    scriptOutputLocation :: Prelude.Maybe Prelude.Text,
+    -- | The status of the step.
+    status :: Prelude.Maybe StepStatus,
+    -- | The status message of the migration workflow.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The action type of the step. You must run and update the status of a
+    -- manual step for the workflow to continue after the completion of the
+    -- step.
+    stepActionType :: Prelude.Maybe StepActionType,
+    -- | The ID of the step group.
+    stepGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the step.
+    stepId :: Prelude.Maybe Prelude.Text,
+    -- | The servers on which a step will be run.
+    stepTarget :: Prelude.Maybe [Prelude.Text],
+    -- | The total number of servers that have been migrated.
+    totalNoOfSrv :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the migration workflow.
+    workflowId :: Prelude.Maybe Prelude.Text,
+    -- | The custom script to run tests on source or target environments.
+    workflowStepAutomationConfiguration :: Prelude.Maybe WorkflowStepAutomationConfiguration,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWorkflowStepResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'getWorkflowStepResponse_creationTime' - The time at which the step was created.
+--
+-- 'description', 'getWorkflowStepResponse_description' - The description of the step.
+--
+-- 'endTime', 'getWorkflowStepResponse_endTime' - The time at which the step ended.
+--
+-- 'lastStartTime', 'getWorkflowStepResponse_lastStartTime' - The time at which the workflow was last started.
+--
+-- 'name', 'getWorkflowStepResponse_name' - The name of the step.
+--
+-- 'next', 'getWorkflowStepResponse_next' - The next step.
+--
+-- 'noOfSrvCompleted', 'getWorkflowStepResponse_noOfSrvCompleted' - The number of servers that have been migrated.
+--
+-- 'noOfSrvFailed', 'getWorkflowStepResponse_noOfSrvFailed' - The number of servers that have failed to migrate.
+--
+-- 'outputs', 'getWorkflowStepResponse_outputs' - The outputs of the step.
+--
+-- 'owner', 'getWorkflowStepResponse_owner' - The owner of the step.
+--
+-- 'previous', 'getWorkflowStepResponse_previous' - The previous step.
+--
+-- 'scriptOutputLocation', 'getWorkflowStepResponse_scriptOutputLocation' - The output location of the script.
+--
+-- 'status', 'getWorkflowStepResponse_status' - The status of the step.
+--
+-- 'statusMessage', 'getWorkflowStepResponse_statusMessage' - The status message of the migration workflow.
+--
+-- 'stepActionType', 'getWorkflowStepResponse_stepActionType' - The action type of the step. You must run and update the status of a
+-- manual step for the workflow to continue after the completion of the
+-- step.
+--
+-- 'stepGroupId', 'getWorkflowStepResponse_stepGroupId' - The ID of the step group.
+--
+-- 'stepId', 'getWorkflowStepResponse_stepId' - The ID of the step.
+--
+-- 'stepTarget', 'getWorkflowStepResponse_stepTarget' - The servers on which a step will be run.
+--
+-- 'totalNoOfSrv', 'getWorkflowStepResponse_totalNoOfSrv' - The total number of servers that have been migrated.
+--
+-- 'workflowId', 'getWorkflowStepResponse_workflowId' - The ID of the migration workflow.
+--
+-- 'workflowStepAutomationConfiguration', 'getWorkflowStepResponse_workflowStepAutomationConfiguration' - The custom script to run tests on source or target environments.
+--
+-- 'httpStatus', 'getWorkflowStepResponse_httpStatus' - The response's http status code.
+newGetWorkflowStepResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetWorkflowStepResponse
+newGetWorkflowStepResponse pHttpStatus_ =
+  GetWorkflowStepResponse'
+    { creationTime =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      endTime = Prelude.Nothing,
+      lastStartTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      next = Prelude.Nothing,
+      noOfSrvCompleted = Prelude.Nothing,
+      noOfSrvFailed = Prelude.Nothing,
+      outputs = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      previous = Prelude.Nothing,
+      scriptOutputLocation = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      stepActionType = Prelude.Nothing,
+      stepGroupId = Prelude.Nothing,
+      stepId = Prelude.Nothing,
+      stepTarget = Prelude.Nothing,
+      totalNoOfSrv = Prelude.Nothing,
+      workflowId = Prelude.Nothing,
+      workflowStepAutomationConfiguration =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The time at which the step was created.
+getWorkflowStepResponse_creationTime :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe Prelude.UTCTime)
+getWorkflowStepResponse_creationTime = Lens.lens (\GetWorkflowStepResponse' {creationTime} -> creationTime) (\s@GetWorkflowStepResponse' {} a -> s {creationTime = a} :: GetWorkflowStepResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the step.
+getWorkflowStepResponse_description :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+getWorkflowStepResponse_description = Lens.lens (\GetWorkflowStepResponse' {description} -> description) (\s@GetWorkflowStepResponse' {} a -> s {description = a} :: GetWorkflowStepResponse)
+
+-- | The time at which the step ended.
+getWorkflowStepResponse_endTime :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe Prelude.UTCTime)
+getWorkflowStepResponse_endTime = Lens.lens (\GetWorkflowStepResponse' {endTime} -> endTime) (\s@GetWorkflowStepResponse' {} a -> s {endTime = a} :: GetWorkflowStepResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which the workflow was last started.
+getWorkflowStepResponse_lastStartTime :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe Prelude.UTCTime)
+getWorkflowStepResponse_lastStartTime = Lens.lens (\GetWorkflowStepResponse' {lastStartTime} -> lastStartTime) (\s@GetWorkflowStepResponse' {} a -> s {lastStartTime = a} :: GetWorkflowStepResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the step.
+getWorkflowStepResponse_name :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+getWorkflowStepResponse_name = Lens.lens (\GetWorkflowStepResponse' {name} -> name) (\s@GetWorkflowStepResponse' {} a -> s {name = a} :: GetWorkflowStepResponse)
+
+-- | The next step.
+getWorkflowStepResponse_next :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe [Prelude.Text])
+getWorkflowStepResponse_next = Lens.lens (\GetWorkflowStepResponse' {next} -> next) (\s@GetWorkflowStepResponse' {} a -> s {next = a} :: GetWorkflowStepResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of servers that have been migrated.
+getWorkflowStepResponse_noOfSrvCompleted :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe Prelude.Int)
+getWorkflowStepResponse_noOfSrvCompleted = Lens.lens (\GetWorkflowStepResponse' {noOfSrvCompleted} -> noOfSrvCompleted) (\s@GetWorkflowStepResponse' {} a -> s {noOfSrvCompleted = a} :: GetWorkflowStepResponse)
+
+-- | The number of servers that have failed to migrate.
+getWorkflowStepResponse_noOfSrvFailed :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe Prelude.Int)
+getWorkflowStepResponse_noOfSrvFailed = Lens.lens (\GetWorkflowStepResponse' {noOfSrvFailed} -> noOfSrvFailed) (\s@GetWorkflowStepResponse' {} a -> s {noOfSrvFailed = a} :: GetWorkflowStepResponse)
+
+-- | The outputs of the step.
+getWorkflowStepResponse_outputs :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe [WorkflowStepOutput])
+getWorkflowStepResponse_outputs = Lens.lens (\GetWorkflowStepResponse' {outputs} -> outputs) (\s@GetWorkflowStepResponse' {} a -> s {outputs = a} :: GetWorkflowStepResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The owner of the step.
+getWorkflowStepResponse_owner :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe Owner)
+getWorkflowStepResponse_owner = Lens.lens (\GetWorkflowStepResponse' {owner} -> owner) (\s@GetWorkflowStepResponse' {} a -> s {owner = a} :: GetWorkflowStepResponse)
+
+-- | The previous step.
+getWorkflowStepResponse_previous :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe [Prelude.Text])
+getWorkflowStepResponse_previous = Lens.lens (\GetWorkflowStepResponse' {previous} -> previous) (\s@GetWorkflowStepResponse' {} a -> s {previous = a} :: GetWorkflowStepResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The output location of the script.
+getWorkflowStepResponse_scriptOutputLocation :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+getWorkflowStepResponse_scriptOutputLocation = Lens.lens (\GetWorkflowStepResponse' {scriptOutputLocation} -> scriptOutputLocation) (\s@GetWorkflowStepResponse' {} a -> s {scriptOutputLocation = a} :: GetWorkflowStepResponse)
+
+-- | The status of the step.
+getWorkflowStepResponse_status :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe StepStatus)
+getWorkflowStepResponse_status = Lens.lens (\GetWorkflowStepResponse' {status} -> status) (\s@GetWorkflowStepResponse' {} a -> s {status = a} :: GetWorkflowStepResponse)
+
+-- | The status message of the migration workflow.
+getWorkflowStepResponse_statusMessage :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+getWorkflowStepResponse_statusMessage = Lens.lens (\GetWorkflowStepResponse' {statusMessage} -> statusMessage) (\s@GetWorkflowStepResponse' {} a -> s {statusMessage = a} :: GetWorkflowStepResponse)
+
+-- | The action type of the step. You must run and update the status of a
+-- manual step for the workflow to continue after the completion of the
+-- step.
+getWorkflowStepResponse_stepActionType :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe StepActionType)
+getWorkflowStepResponse_stepActionType = Lens.lens (\GetWorkflowStepResponse' {stepActionType} -> stepActionType) (\s@GetWorkflowStepResponse' {} a -> s {stepActionType = a} :: GetWorkflowStepResponse)
+
+-- | The ID of the step group.
+getWorkflowStepResponse_stepGroupId :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+getWorkflowStepResponse_stepGroupId = Lens.lens (\GetWorkflowStepResponse' {stepGroupId} -> stepGroupId) (\s@GetWorkflowStepResponse' {} a -> s {stepGroupId = a} :: GetWorkflowStepResponse)
+
+-- | The ID of the step.
+getWorkflowStepResponse_stepId :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+getWorkflowStepResponse_stepId = Lens.lens (\GetWorkflowStepResponse' {stepId} -> stepId) (\s@GetWorkflowStepResponse' {} a -> s {stepId = a} :: GetWorkflowStepResponse)
+
+-- | The servers on which a step will be run.
+getWorkflowStepResponse_stepTarget :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe [Prelude.Text])
+getWorkflowStepResponse_stepTarget = Lens.lens (\GetWorkflowStepResponse' {stepTarget} -> stepTarget) (\s@GetWorkflowStepResponse' {} a -> s {stepTarget = a} :: GetWorkflowStepResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The total number of servers that have been migrated.
+getWorkflowStepResponse_totalNoOfSrv :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe Prelude.Int)
+getWorkflowStepResponse_totalNoOfSrv = Lens.lens (\GetWorkflowStepResponse' {totalNoOfSrv} -> totalNoOfSrv) (\s@GetWorkflowStepResponse' {} a -> s {totalNoOfSrv = a} :: GetWorkflowStepResponse)
+
+-- | The ID of the migration workflow.
+getWorkflowStepResponse_workflowId :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+getWorkflowStepResponse_workflowId = Lens.lens (\GetWorkflowStepResponse' {workflowId} -> workflowId) (\s@GetWorkflowStepResponse' {} a -> s {workflowId = a} :: GetWorkflowStepResponse)
+
+-- | The custom script to run tests on source or target environments.
+getWorkflowStepResponse_workflowStepAutomationConfiguration :: Lens.Lens' GetWorkflowStepResponse (Prelude.Maybe WorkflowStepAutomationConfiguration)
+getWorkflowStepResponse_workflowStepAutomationConfiguration = Lens.lens (\GetWorkflowStepResponse' {workflowStepAutomationConfiguration} -> workflowStepAutomationConfiguration) (\s@GetWorkflowStepResponse' {} a -> s {workflowStepAutomationConfiguration = a} :: GetWorkflowStepResponse)
+
+-- | The response's http status code.
+getWorkflowStepResponse_httpStatus :: Lens.Lens' GetWorkflowStepResponse Prelude.Int
+getWorkflowStepResponse_httpStatus = Lens.lens (\GetWorkflowStepResponse' {httpStatus} -> httpStatus) (\s@GetWorkflowStepResponse' {} a -> s {httpStatus = a} :: GetWorkflowStepResponse)
+
+instance Prelude.NFData GetWorkflowStepResponse where
+  rnf GetWorkflowStepResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf lastStartTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf next
+      `Prelude.seq` Prelude.rnf noOfSrvCompleted
+      `Prelude.seq` Prelude.rnf noOfSrvFailed
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf previous
+      `Prelude.seq` Prelude.rnf scriptOutputLocation
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf stepActionType
+      `Prelude.seq` Prelude.rnf stepGroupId
+      `Prelude.seq` Prelude.rnf stepId
+      `Prelude.seq` Prelude.rnf stepTarget
+      `Prelude.seq` Prelude.rnf totalNoOfSrv
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf
+        workflowStepAutomationConfiguration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/GetWorkflowStepGroup.hs b/gen/Amazonka/MigrationHubOrchestrator/GetWorkflowStepGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/GetWorkflowStepGroup.hs
@@ -0,0 +1,309 @@
+{-# 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.MigrationHubOrchestrator.GetWorkflowStepGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get the step group of a migration workflow.
+module Amazonka.MigrationHubOrchestrator.GetWorkflowStepGroup
+  ( -- * Creating a Request
+    GetWorkflowStepGroup (..),
+    newGetWorkflowStepGroup,
+
+    -- * Request Lenses
+    getWorkflowStepGroup_id,
+    getWorkflowStepGroup_workflowId,
+
+    -- * Destructuring the Response
+    GetWorkflowStepGroupResponse (..),
+    newGetWorkflowStepGroupResponse,
+
+    -- * Response Lenses
+    getWorkflowStepGroupResponse_creationTime,
+    getWorkflowStepGroupResponse_description,
+    getWorkflowStepGroupResponse_endTime,
+    getWorkflowStepGroupResponse_id,
+    getWorkflowStepGroupResponse_lastModifiedTime,
+    getWorkflowStepGroupResponse_name,
+    getWorkflowStepGroupResponse_next,
+    getWorkflowStepGroupResponse_owner,
+    getWorkflowStepGroupResponse_previous,
+    getWorkflowStepGroupResponse_status,
+    getWorkflowStepGroupResponse_tools,
+    getWorkflowStepGroupResponse_workflowId,
+    getWorkflowStepGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetWorkflowStepGroup' smart constructor.
+data GetWorkflowStepGroup = GetWorkflowStepGroup'
+  { -- | The ID of the step group.
+    id :: Prelude.Text,
+    -- | The ID of the migration workflow.
+    workflowId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWorkflowStepGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'getWorkflowStepGroup_id' - The ID of the step group.
+--
+-- 'workflowId', 'getWorkflowStepGroup_workflowId' - The ID of the migration workflow.
+newGetWorkflowStepGroup ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'workflowId'
+  Prelude.Text ->
+  GetWorkflowStepGroup
+newGetWorkflowStepGroup pId_ pWorkflowId_ =
+  GetWorkflowStepGroup'
+    { id = pId_,
+      workflowId = pWorkflowId_
+    }
+
+-- | The ID of the step group.
+getWorkflowStepGroup_id :: Lens.Lens' GetWorkflowStepGroup Prelude.Text
+getWorkflowStepGroup_id = Lens.lens (\GetWorkflowStepGroup' {id} -> id) (\s@GetWorkflowStepGroup' {} a -> s {id = a} :: GetWorkflowStepGroup)
+
+-- | The ID of the migration workflow.
+getWorkflowStepGroup_workflowId :: Lens.Lens' GetWorkflowStepGroup Prelude.Text
+getWorkflowStepGroup_workflowId = Lens.lens (\GetWorkflowStepGroup' {workflowId} -> workflowId) (\s@GetWorkflowStepGroup' {} a -> s {workflowId = a} :: GetWorkflowStepGroup)
+
+instance Core.AWSRequest GetWorkflowStepGroup where
+  type
+    AWSResponse GetWorkflowStepGroup =
+      GetWorkflowStepGroupResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetWorkflowStepGroupResponse'
+            Prelude.<$> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "endTime")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "lastModifiedTime")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "next" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "owner")
+            Prelude.<*> (x Data..?> "previous" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "tools" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "workflowId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetWorkflowStepGroup where
+  hashWithSalt _salt GetWorkflowStepGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` workflowId
+
+instance Prelude.NFData GetWorkflowStepGroup where
+  rnf GetWorkflowStepGroup' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf workflowId
+
+instance Data.ToHeaders GetWorkflowStepGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetWorkflowStepGroup where
+  toPath GetWorkflowStepGroup' {..} =
+    Prelude.mconcat
+      ["/workflowstepgroup/", Data.toBS id]
+
+instance Data.ToQuery GetWorkflowStepGroup where
+  toQuery GetWorkflowStepGroup' {..} =
+    Prelude.mconcat ["workflowId" Data.=: workflowId]
+
+-- | /See:/ 'newGetWorkflowStepGroupResponse' smart constructor.
+data GetWorkflowStepGroupResponse = GetWorkflowStepGroupResponse'
+  { -- | The time at which the step group was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the step group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the step group ended.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | The ID of the step group.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the step group was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the step group.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The next step group.
+    next :: Prelude.Maybe [Prelude.Text],
+    -- | The owner of the step group.
+    owner :: Prelude.Maybe Owner,
+    -- | The previous step group.
+    previous :: Prelude.Maybe [Prelude.Text],
+    -- | The status of the step group.
+    status :: Prelude.Maybe StepGroupStatus,
+    -- | List of AWS services utilized in a migration workflow.
+    tools :: Prelude.Maybe [Tool],
+    -- | The ID of the migration workflow.
+    workflowId :: 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 'GetWorkflowStepGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'getWorkflowStepGroupResponse_creationTime' - The time at which the step group was created.
+--
+-- 'description', 'getWorkflowStepGroupResponse_description' - The description of the step group.
+--
+-- 'endTime', 'getWorkflowStepGroupResponse_endTime' - The time at which the step group ended.
+--
+-- 'id', 'getWorkflowStepGroupResponse_id' - The ID of the step group.
+--
+-- 'lastModifiedTime', 'getWorkflowStepGroupResponse_lastModifiedTime' - The time at which the step group was last modified.
+--
+-- 'name', 'getWorkflowStepGroupResponse_name' - The name of the step group.
+--
+-- 'next', 'getWorkflowStepGroupResponse_next' - The next step group.
+--
+-- 'owner', 'getWorkflowStepGroupResponse_owner' - The owner of the step group.
+--
+-- 'previous', 'getWorkflowStepGroupResponse_previous' - The previous step group.
+--
+-- 'status', 'getWorkflowStepGroupResponse_status' - The status of the step group.
+--
+-- 'tools', 'getWorkflowStepGroupResponse_tools' - List of AWS services utilized in a migration workflow.
+--
+-- 'workflowId', 'getWorkflowStepGroupResponse_workflowId' - The ID of the migration workflow.
+--
+-- 'httpStatus', 'getWorkflowStepGroupResponse_httpStatus' - The response's http status code.
+newGetWorkflowStepGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetWorkflowStepGroupResponse
+newGetWorkflowStepGroupResponse pHttpStatus_ =
+  GetWorkflowStepGroupResponse'
+    { creationTime =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      endTime = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      next = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      previous = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tools = Prelude.Nothing,
+      workflowId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The time at which the step group was created.
+getWorkflowStepGroupResponse_creationTime :: Lens.Lens' GetWorkflowStepGroupResponse (Prelude.Maybe Prelude.UTCTime)
+getWorkflowStepGroupResponse_creationTime = Lens.lens (\GetWorkflowStepGroupResponse' {creationTime} -> creationTime) (\s@GetWorkflowStepGroupResponse' {} a -> s {creationTime = a} :: GetWorkflowStepGroupResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the step group.
+getWorkflowStepGroupResponse_description :: Lens.Lens' GetWorkflowStepGroupResponse (Prelude.Maybe Prelude.Text)
+getWorkflowStepGroupResponse_description = Lens.lens (\GetWorkflowStepGroupResponse' {description} -> description) (\s@GetWorkflowStepGroupResponse' {} a -> s {description = a} :: GetWorkflowStepGroupResponse)
+
+-- | The time at which the step group ended.
+getWorkflowStepGroupResponse_endTime :: Lens.Lens' GetWorkflowStepGroupResponse (Prelude.Maybe Prelude.UTCTime)
+getWorkflowStepGroupResponse_endTime = Lens.lens (\GetWorkflowStepGroupResponse' {endTime} -> endTime) (\s@GetWorkflowStepGroupResponse' {} a -> s {endTime = a} :: GetWorkflowStepGroupResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the step group.
+getWorkflowStepGroupResponse_id :: Lens.Lens' GetWorkflowStepGroupResponse (Prelude.Maybe Prelude.Text)
+getWorkflowStepGroupResponse_id = Lens.lens (\GetWorkflowStepGroupResponse' {id} -> id) (\s@GetWorkflowStepGroupResponse' {} a -> s {id = a} :: GetWorkflowStepGroupResponse)
+
+-- | The time at which the step group was last modified.
+getWorkflowStepGroupResponse_lastModifiedTime :: Lens.Lens' GetWorkflowStepGroupResponse (Prelude.Maybe Prelude.UTCTime)
+getWorkflowStepGroupResponse_lastModifiedTime = Lens.lens (\GetWorkflowStepGroupResponse' {lastModifiedTime} -> lastModifiedTime) (\s@GetWorkflowStepGroupResponse' {} a -> s {lastModifiedTime = a} :: GetWorkflowStepGroupResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the step group.
+getWorkflowStepGroupResponse_name :: Lens.Lens' GetWorkflowStepGroupResponse (Prelude.Maybe Prelude.Text)
+getWorkflowStepGroupResponse_name = Lens.lens (\GetWorkflowStepGroupResponse' {name} -> name) (\s@GetWorkflowStepGroupResponse' {} a -> s {name = a} :: GetWorkflowStepGroupResponse)
+
+-- | The next step group.
+getWorkflowStepGroupResponse_next :: Lens.Lens' GetWorkflowStepGroupResponse (Prelude.Maybe [Prelude.Text])
+getWorkflowStepGroupResponse_next = Lens.lens (\GetWorkflowStepGroupResponse' {next} -> next) (\s@GetWorkflowStepGroupResponse' {} a -> s {next = a} :: GetWorkflowStepGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The owner of the step group.
+getWorkflowStepGroupResponse_owner :: Lens.Lens' GetWorkflowStepGroupResponse (Prelude.Maybe Owner)
+getWorkflowStepGroupResponse_owner = Lens.lens (\GetWorkflowStepGroupResponse' {owner} -> owner) (\s@GetWorkflowStepGroupResponse' {} a -> s {owner = a} :: GetWorkflowStepGroupResponse)
+
+-- | The previous step group.
+getWorkflowStepGroupResponse_previous :: Lens.Lens' GetWorkflowStepGroupResponse (Prelude.Maybe [Prelude.Text])
+getWorkflowStepGroupResponse_previous = Lens.lens (\GetWorkflowStepGroupResponse' {previous} -> previous) (\s@GetWorkflowStepGroupResponse' {} a -> s {previous = a} :: GetWorkflowStepGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the step group.
+getWorkflowStepGroupResponse_status :: Lens.Lens' GetWorkflowStepGroupResponse (Prelude.Maybe StepGroupStatus)
+getWorkflowStepGroupResponse_status = Lens.lens (\GetWorkflowStepGroupResponse' {status} -> status) (\s@GetWorkflowStepGroupResponse' {} a -> s {status = a} :: GetWorkflowStepGroupResponse)
+
+-- | List of AWS services utilized in a migration workflow.
+getWorkflowStepGroupResponse_tools :: Lens.Lens' GetWorkflowStepGroupResponse (Prelude.Maybe [Tool])
+getWorkflowStepGroupResponse_tools = Lens.lens (\GetWorkflowStepGroupResponse' {tools} -> tools) (\s@GetWorkflowStepGroupResponse' {} a -> s {tools = a} :: GetWorkflowStepGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the migration workflow.
+getWorkflowStepGroupResponse_workflowId :: Lens.Lens' GetWorkflowStepGroupResponse (Prelude.Maybe Prelude.Text)
+getWorkflowStepGroupResponse_workflowId = Lens.lens (\GetWorkflowStepGroupResponse' {workflowId} -> workflowId) (\s@GetWorkflowStepGroupResponse' {} a -> s {workflowId = a} :: GetWorkflowStepGroupResponse)
+
+-- | The response's http status code.
+getWorkflowStepGroupResponse_httpStatus :: Lens.Lens' GetWorkflowStepGroupResponse Prelude.Int
+getWorkflowStepGroupResponse_httpStatus = Lens.lens (\GetWorkflowStepGroupResponse' {httpStatus} -> httpStatus) (\s@GetWorkflowStepGroupResponse' {} a -> s {httpStatus = a} :: GetWorkflowStepGroupResponse)
+
+instance Prelude.NFData GetWorkflowStepGroupResponse where
+  rnf GetWorkflowStepGroupResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf next
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf previous
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tools
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Lens.hs b/gen/Amazonka/MigrationHubOrchestrator/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Lens.hs
@@ -0,0 +1,526 @@
+{-# 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.MigrationHubOrchestrator.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.MigrationHubOrchestrator.Lens
+  ( -- * Operations
+
+    -- ** CreateWorkflow
+    createWorkflow_description,
+    createWorkflow_stepTargets,
+    createWorkflow_tags,
+    createWorkflow_name,
+    createWorkflow_templateId,
+    createWorkflow_applicationConfigurationId,
+    createWorkflow_inputParameters,
+    createWorkflowResponse_adsApplicationConfigurationId,
+    createWorkflowResponse_arn,
+    createWorkflowResponse_creationTime,
+    createWorkflowResponse_description,
+    createWorkflowResponse_id,
+    createWorkflowResponse_name,
+    createWorkflowResponse_status,
+    createWorkflowResponse_stepTargets,
+    createWorkflowResponse_tags,
+    createWorkflowResponse_templateId,
+    createWorkflowResponse_workflowInputs,
+    createWorkflowResponse_httpStatus,
+
+    -- ** CreateWorkflowStep
+    createWorkflowStep_description,
+    createWorkflowStep_next,
+    createWorkflowStep_outputs,
+    createWorkflowStep_previous,
+    createWorkflowStep_stepTarget,
+    createWorkflowStep_workflowStepAutomationConfiguration,
+    createWorkflowStep_name,
+    createWorkflowStep_stepGroupId,
+    createWorkflowStep_workflowId,
+    createWorkflowStep_stepActionType,
+    createWorkflowStepResponse_id,
+    createWorkflowStepResponse_name,
+    createWorkflowStepResponse_stepGroupId,
+    createWorkflowStepResponse_workflowId,
+    createWorkflowStepResponse_httpStatus,
+
+    -- ** CreateWorkflowStepGroup
+    createWorkflowStepGroup_description,
+    createWorkflowStepGroup_next,
+    createWorkflowStepGroup_previous,
+    createWorkflowStepGroup_workflowId,
+    createWorkflowStepGroup_name,
+    createWorkflowStepGroupResponse_creationTime,
+    createWorkflowStepGroupResponse_description,
+    createWorkflowStepGroupResponse_id,
+    createWorkflowStepGroupResponse_name,
+    createWorkflowStepGroupResponse_next,
+    createWorkflowStepGroupResponse_previous,
+    createWorkflowStepGroupResponse_tools,
+    createWorkflowStepGroupResponse_workflowId,
+    createWorkflowStepGroupResponse_httpStatus,
+
+    -- ** DeleteWorkflow
+    deleteWorkflow_id,
+    deleteWorkflowResponse_arn,
+    deleteWorkflowResponse_id,
+    deleteWorkflowResponse_status,
+    deleteWorkflowResponse_httpStatus,
+
+    -- ** DeleteWorkflowStep
+    deleteWorkflowStep_id,
+    deleteWorkflowStep_stepGroupId,
+    deleteWorkflowStep_workflowId,
+    deleteWorkflowStepResponse_httpStatus,
+
+    -- ** DeleteWorkflowStepGroup
+    deleteWorkflowStepGroup_workflowId,
+    deleteWorkflowStepGroup_id,
+    deleteWorkflowStepGroupResponse_httpStatus,
+
+    -- ** GetTemplate
+    getTemplate_id,
+    getTemplateResponse_creationTime,
+    getTemplateResponse_description,
+    getTemplateResponse_id,
+    getTemplateResponse_inputs,
+    getTemplateResponse_name,
+    getTemplateResponse_status,
+    getTemplateResponse_tools,
+    getTemplateResponse_httpStatus,
+
+    -- ** GetTemplateStep
+    getTemplateStep_id,
+    getTemplateStep_templateId,
+    getTemplateStep_stepGroupId,
+    getTemplateStepResponse_creationTime,
+    getTemplateStepResponse_description,
+    getTemplateStepResponse_id,
+    getTemplateStepResponse_name,
+    getTemplateStepResponse_next,
+    getTemplateStepResponse_outputs,
+    getTemplateStepResponse_previous,
+    getTemplateStepResponse_stepActionType,
+    getTemplateStepResponse_stepAutomationConfiguration,
+    getTemplateStepResponse_stepGroupId,
+    getTemplateStepResponse_templateId,
+    getTemplateStepResponse_httpStatus,
+
+    -- ** GetTemplateStepGroup
+    getTemplateStepGroup_templateId,
+    getTemplateStepGroup_id,
+    getTemplateStepGroupResponse_creationTime,
+    getTemplateStepGroupResponse_description,
+    getTemplateStepGroupResponse_id,
+    getTemplateStepGroupResponse_lastModifiedTime,
+    getTemplateStepGroupResponse_name,
+    getTemplateStepGroupResponse_next,
+    getTemplateStepGroupResponse_previous,
+    getTemplateStepGroupResponse_status,
+    getTemplateStepGroupResponse_templateId,
+    getTemplateStepGroupResponse_tools,
+    getTemplateStepGroupResponse_httpStatus,
+
+    -- ** GetWorkflow
+    getWorkflow_id,
+    getWorkflowResponse_adsApplicationConfigurationId,
+    getWorkflowResponse_adsApplicationName,
+    getWorkflowResponse_arn,
+    getWorkflowResponse_completedSteps,
+    getWorkflowResponse_creationTime,
+    getWorkflowResponse_description,
+    getWorkflowResponse_endTime,
+    getWorkflowResponse_id,
+    getWorkflowResponse_lastModifiedTime,
+    getWorkflowResponse_lastStartTime,
+    getWorkflowResponse_lastStopTime,
+    getWorkflowResponse_name,
+    getWorkflowResponse_status,
+    getWorkflowResponse_statusMessage,
+    getWorkflowResponse_tags,
+    getWorkflowResponse_templateId,
+    getWorkflowResponse_tools,
+    getWorkflowResponse_totalSteps,
+    getWorkflowResponse_workflowBucket,
+    getWorkflowResponse_workflowInputs,
+    getWorkflowResponse_httpStatus,
+
+    -- ** GetWorkflowStep
+    getWorkflowStep_workflowId,
+    getWorkflowStep_stepGroupId,
+    getWorkflowStep_id,
+    getWorkflowStepResponse_creationTime,
+    getWorkflowStepResponse_description,
+    getWorkflowStepResponse_endTime,
+    getWorkflowStepResponse_lastStartTime,
+    getWorkflowStepResponse_name,
+    getWorkflowStepResponse_next,
+    getWorkflowStepResponse_noOfSrvCompleted,
+    getWorkflowStepResponse_noOfSrvFailed,
+    getWorkflowStepResponse_outputs,
+    getWorkflowStepResponse_owner,
+    getWorkflowStepResponse_previous,
+    getWorkflowStepResponse_scriptOutputLocation,
+    getWorkflowStepResponse_status,
+    getWorkflowStepResponse_statusMessage,
+    getWorkflowStepResponse_stepActionType,
+    getWorkflowStepResponse_stepGroupId,
+    getWorkflowStepResponse_stepId,
+    getWorkflowStepResponse_stepTarget,
+    getWorkflowStepResponse_totalNoOfSrv,
+    getWorkflowStepResponse_workflowId,
+    getWorkflowStepResponse_workflowStepAutomationConfiguration,
+    getWorkflowStepResponse_httpStatus,
+
+    -- ** GetWorkflowStepGroup
+    getWorkflowStepGroup_id,
+    getWorkflowStepGroup_workflowId,
+    getWorkflowStepGroupResponse_creationTime,
+    getWorkflowStepGroupResponse_description,
+    getWorkflowStepGroupResponse_endTime,
+    getWorkflowStepGroupResponse_id,
+    getWorkflowStepGroupResponse_lastModifiedTime,
+    getWorkflowStepGroupResponse_name,
+    getWorkflowStepGroupResponse_next,
+    getWorkflowStepGroupResponse_owner,
+    getWorkflowStepGroupResponse_previous,
+    getWorkflowStepGroupResponse_status,
+    getWorkflowStepGroupResponse_tools,
+    getWorkflowStepGroupResponse_workflowId,
+    getWorkflowStepGroupResponse_httpStatus,
+
+    -- ** ListPlugins
+    listPlugins_maxResults,
+    listPlugins_nextToken,
+    listPluginsResponse_nextToken,
+    listPluginsResponse_plugins,
+    listPluginsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ListTemplateStepGroups
+    listTemplateStepGroups_maxResults,
+    listTemplateStepGroups_nextToken,
+    listTemplateStepGroups_templateId,
+    listTemplateStepGroupsResponse_nextToken,
+    listTemplateStepGroupsResponse_httpStatus,
+    listTemplateStepGroupsResponse_templateStepGroupSummary,
+
+    -- ** ListTemplateSteps
+    listTemplateSteps_maxResults,
+    listTemplateSteps_nextToken,
+    listTemplateSteps_templateId,
+    listTemplateSteps_stepGroupId,
+    listTemplateStepsResponse_nextToken,
+    listTemplateStepsResponse_templateStepSummaryList,
+    listTemplateStepsResponse_httpStatus,
+
+    -- ** ListTemplates
+    listTemplates_maxResults,
+    listTemplates_name,
+    listTemplates_nextToken,
+    listTemplatesResponse_nextToken,
+    listTemplatesResponse_httpStatus,
+    listTemplatesResponse_templateSummary,
+
+    -- ** ListWorkflowStepGroups
+    listWorkflowStepGroups_maxResults,
+    listWorkflowStepGroups_nextToken,
+    listWorkflowStepGroups_workflowId,
+    listWorkflowStepGroupsResponse_nextToken,
+    listWorkflowStepGroupsResponse_httpStatus,
+    listWorkflowStepGroupsResponse_workflowStepGroupsSummary,
+
+    -- ** ListWorkflowSteps
+    listWorkflowSteps_maxResults,
+    listWorkflowSteps_nextToken,
+    listWorkflowSteps_workflowId,
+    listWorkflowSteps_stepGroupId,
+    listWorkflowStepsResponse_nextToken,
+    listWorkflowStepsResponse_httpStatus,
+    listWorkflowStepsResponse_workflowStepsSummary,
+
+    -- ** ListWorkflows
+    listWorkflows_adsApplicationConfigurationName,
+    listWorkflows_maxResults,
+    listWorkflows_name,
+    listWorkflows_nextToken,
+    listWorkflows_status,
+    listWorkflows_templateId,
+    listWorkflowsResponse_nextToken,
+    listWorkflowsResponse_httpStatus,
+    listWorkflowsResponse_migrationWorkflowSummary,
+
+    -- ** RetryWorkflowStep
+    retryWorkflowStep_workflowId,
+    retryWorkflowStep_stepGroupId,
+    retryWorkflowStep_id,
+    retryWorkflowStepResponse_id,
+    retryWorkflowStepResponse_status,
+    retryWorkflowStepResponse_stepGroupId,
+    retryWorkflowStepResponse_workflowId,
+    retryWorkflowStepResponse_httpStatus,
+
+    -- ** StartWorkflow
+    startWorkflow_id,
+    startWorkflowResponse_arn,
+    startWorkflowResponse_id,
+    startWorkflowResponse_lastStartTime,
+    startWorkflowResponse_status,
+    startWorkflowResponse_statusMessage,
+    startWorkflowResponse_httpStatus,
+
+    -- ** StopWorkflow
+    stopWorkflow_id,
+    stopWorkflowResponse_arn,
+    stopWorkflowResponse_id,
+    stopWorkflowResponse_lastStopTime,
+    stopWorkflowResponse_status,
+    stopWorkflowResponse_statusMessage,
+    stopWorkflowResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateWorkflow
+    updateWorkflow_description,
+    updateWorkflow_inputParameters,
+    updateWorkflow_name,
+    updateWorkflow_stepTargets,
+    updateWorkflow_id,
+    updateWorkflowResponse_adsApplicationConfigurationId,
+    updateWorkflowResponse_arn,
+    updateWorkflowResponse_creationTime,
+    updateWorkflowResponse_description,
+    updateWorkflowResponse_id,
+    updateWorkflowResponse_lastModifiedTime,
+    updateWorkflowResponse_name,
+    updateWorkflowResponse_status,
+    updateWorkflowResponse_stepTargets,
+    updateWorkflowResponse_tags,
+    updateWorkflowResponse_templateId,
+    updateWorkflowResponse_workflowInputs,
+    updateWorkflowResponse_httpStatus,
+
+    -- ** UpdateWorkflowStep
+    updateWorkflowStep_description,
+    updateWorkflowStep_name,
+    updateWorkflowStep_next,
+    updateWorkflowStep_outputs,
+    updateWorkflowStep_previous,
+    updateWorkflowStep_status,
+    updateWorkflowStep_stepActionType,
+    updateWorkflowStep_stepTarget,
+    updateWorkflowStep_workflowStepAutomationConfiguration,
+    updateWorkflowStep_id,
+    updateWorkflowStep_stepGroupId,
+    updateWorkflowStep_workflowId,
+    updateWorkflowStepResponse_id,
+    updateWorkflowStepResponse_name,
+    updateWorkflowStepResponse_stepGroupId,
+    updateWorkflowStepResponse_workflowId,
+    updateWorkflowStepResponse_httpStatus,
+
+    -- ** UpdateWorkflowStepGroup
+    updateWorkflowStepGroup_description,
+    updateWorkflowStepGroup_name,
+    updateWorkflowStepGroup_next,
+    updateWorkflowStepGroup_previous,
+    updateWorkflowStepGroup_workflowId,
+    updateWorkflowStepGroup_id,
+    updateWorkflowStepGroupResponse_description,
+    updateWorkflowStepGroupResponse_id,
+    updateWorkflowStepGroupResponse_lastModifiedTime,
+    updateWorkflowStepGroupResponse_name,
+    updateWorkflowStepGroupResponse_next,
+    updateWorkflowStepGroupResponse_previous,
+    updateWorkflowStepGroupResponse_tools,
+    updateWorkflowStepGroupResponse_workflowId,
+    updateWorkflowStepGroupResponse_httpStatus,
+
+    -- * Types
+
+    -- ** MigrationWorkflowSummary
+    migrationWorkflowSummary_adsApplicationConfigurationName,
+    migrationWorkflowSummary_completedSteps,
+    migrationWorkflowSummary_creationTime,
+    migrationWorkflowSummary_endTime,
+    migrationWorkflowSummary_id,
+    migrationWorkflowSummary_name,
+    migrationWorkflowSummary_status,
+    migrationWorkflowSummary_statusMessage,
+    migrationWorkflowSummary_templateId,
+    migrationWorkflowSummary_totalSteps,
+
+    -- ** PlatformCommand
+    platformCommand_linux,
+    platformCommand_windows,
+
+    -- ** PlatformScriptKey
+    platformScriptKey_linux,
+    platformScriptKey_windows,
+
+    -- ** PluginSummary
+    pluginSummary_hostname,
+    pluginSummary_ipAddress,
+    pluginSummary_pluginId,
+    pluginSummary_registeredTime,
+    pluginSummary_status,
+    pluginSummary_version,
+
+    -- ** StepAutomationConfiguration
+    stepAutomationConfiguration_command,
+    stepAutomationConfiguration_runEnvironment,
+    stepAutomationConfiguration_scriptLocationS3Bucket,
+    stepAutomationConfiguration_scriptLocationS3Key,
+    stepAutomationConfiguration_targetType,
+
+    -- ** StepInput
+    stepInput_integerValue,
+    stepInput_listOfStringsValue,
+    stepInput_mapOfStringValue,
+    stepInput_stringValue,
+
+    -- ** StepOutput
+    stepOutput_dataType,
+    stepOutput_name,
+    stepOutput_required,
+
+    -- ** TemplateInput
+    templateInput_dataType,
+    templateInput_inputName,
+    templateInput_required,
+
+    -- ** TemplateStepGroupSummary
+    templateStepGroupSummary_id,
+    templateStepGroupSummary_name,
+    templateStepGroupSummary_next,
+    templateStepGroupSummary_previous,
+
+    -- ** TemplateStepSummary
+    templateStepSummary_id,
+    templateStepSummary_name,
+    templateStepSummary_next,
+    templateStepSummary_owner,
+    templateStepSummary_previous,
+    templateStepSummary_stepActionType,
+    templateStepSummary_stepGroupId,
+    templateStepSummary_targetType,
+    templateStepSummary_templateId,
+
+    -- ** TemplateSummary
+    templateSummary_arn,
+    templateSummary_description,
+    templateSummary_id,
+    templateSummary_name,
+
+    -- ** Tool
+    tool_name,
+    tool_url,
+
+    -- ** WorkflowStepAutomationConfiguration
+    workflowStepAutomationConfiguration_command,
+    workflowStepAutomationConfiguration_runEnvironment,
+    workflowStepAutomationConfiguration_scriptLocationS3Bucket,
+    workflowStepAutomationConfiguration_scriptLocationS3Key,
+    workflowStepAutomationConfiguration_targetType,
+
+    -- ** WorkflowStepGroupSummary
+    workflowStepGroupSummary_id,
+    workflowStepGroupSummary_name,
+    workflowStepGroupSummary_next,
+    workflowStepGroupSummary_owner,
+    workflowStepGroupSummary_previous,
+    workflowStepGroupSummary_status,
+
+    -- ** WorkflowStepOutput
+    workflowStepOutput_dataType,
+    workflowStepOutput_name,
+    workflowStepOutput_required,
+    workflowStepOutput_value,
+
+    -- ** WorkflowStepOutputUnion
+    workflowStepOutputUnion_integerValue,
+    workflowStepOutputUnion_listOfStringValue,
+    workflowStepOutputUnion_stringValue,
+
+    -- ** WorkflowStepSummary
+    workflowStepSummary_description,
+    workflowStepSummary_name,
+    workflowStepSummary_next,
+    workflowStepSummary_noOfSrvCompleted,
+    workflowStepSummary_noOfSrvFailed,
+    workflowStepSummary_owner,
+    workflowStepSummary_previous,
+    workflowStepSummary_scriptLocation,
+    workflowStepSummary_status,
+    workflowStepSummary_statusMessage,
+    workflowStepSummary_stepActionType,
+    workflowStepSummary_stepId,
+    workflowStepSummary_totalNoOfSrv,
+  )
+where
+
+import Amazonka.MigrationHubOrchestrator.CreateWorkflow
+import Amazonka.MigrationHubOrchestrator.CreateWorkflowStep
+import Amazonka.MigrationHubOrchestrator.CreateWorkflowStepGroup
+import Amazonka.MigrationHubOrchestrator.DeleteWorkflow
+import Amazonka.MigrationHubOrchestrator.DeleteWorkflowStep
+import Amazonka.MigrationHubOrchestrator.DeleteWorkflowStepGroup
+import Amazonka.MigrationHubOrchestrator.GetTemplate
+import Amazonka.MigrationHubOrchestrator.GetTemplateStep
+import Amazonka.MigrationHubOrchestrator.GetTemplateStepGroup
+import Amazonka.MigrationHubOrchestrator.GetWorkflow
+import Amazonka.MigrationHubOrchestrator.GetWorkflowStep
+import Amazonka.MigrationHubOrchestrator.GetWorkflowStepGroup
+import Amazonka.MigrationHubOrchestrator.ListPlugins
+import Amazonka.MigrationHubOrchestrator.ListTagsForResource
+import Amazonka.MigrationHubOrchestrator.ListTemplateStepGroups
+import Amazonka.MigrationHubOrchestrator.ListTemplateSteps
+import Amazonka.MigrationHubOrchestrator.ListTemplates
+import Amazonka.MigrationHubOrchestrator.ListWorkflowStepGroups
+import Amazonka.MigrationHubOrchestrator.ListWorkflowSteps
+import Amazonka.MigrationHubOrchestrator.ListWorkflows
+import Amazonka.MigrationHubOrchestrator.RetryWorkflowStep
+import Amazonka.MigrationHubOrchestrator.StartWorkflow
+import Amazonka.MigrationHubOrchestrator.StopWorkflow
+import Amazonka.MigrationHubOrchestrator.TagResource
+import Amazonka.MigrationHubOrchestrator.Types.MigrationWorkflowSummary
+import Amazonka.MigrationHubOrchestrator.Types.PlatformCommand
+import Amazonka.MigrationHubOrchestrator.Types.PlatformScriptKey
+import Amazonka.MigrationHubOrchestrator.Types.PluginSummary
+import Amazonka.MigrationHubOrchestrator.Types.StepAutomationConfiguration
+import Amazonka.MigrationHubOrchestrator.Types.StepInput
+import Amazonka.MigrationHubOrchestrator.Types.StepOutput
+import Amazonka.MigrationHubOrchestrator.Types.TemplateInput
+import Amazonka.MigrationHubOrchestrator.Types.TemplateStepGroupSummary
+import Amazonka.MigrationHubOrchestrator.Types.TemplateStepSummary
+import Amazonka.MigrationHubOrchestrator.Types.TemplateSummary
+import Amazonka.MigrationHubOrchestrator.Types.Tool
+import Amazonka.MigrationHubOrchestrator.Types.WorkflowStepAutomationConfiguration
+import Amazonka.MigrationHubOrchestrator.Types.WorkflowStepGroupSummary
+import Amazonka.MigrationHubOrchestrator.Types.WorkflowStepOutput
+import Amazonka.MigrationHubOrchestrator.Types.WorkflowStepOutputUnion
+import Amazonka.MigrationHubOrchestrator.Types.WorkflowStepSummary
+import Amazonka.MigrationHubOrchestrator.UntagResource
+import Amazonka.MigrationHubOrchestrator.UpdateWorkflow
+import Amazonka.MigrationHubOrchestrator.UpdateWorkflowStep
+import Amazonka.MigrationHubOrchestrator.UpdateWorkflowStepGroup
diff --git a/gen/Amazonka/MigrationHubOrchestrator/ListPlugins.hs b/gen/Amazonka/MigrationHubOrchestrator/ListPlugins.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/ListPlugins.hs
@@ -0,0 +1,208 @@
+{-# 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.MigrationHubOrchestrator.ListPlugins
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List AWS Migration Hub Orchestrator plugins.
+--
+-- This operation returns paginated results.
+module Amazonka.MigrationHubOrchestrator.ListPlugins
+  ( -- * Creating a Request
+    ListPlugins (..),
+    newListPlugins,
+
+    -- * Request Lenses
+    listPlugins_maxResults,
+    listPlugins_nextToken,
+
+    -- * Destructuring the Response
+    ListPluginsResponse (..),
+    newListPluginsResponse,
+
+    -- * Response Lenses
+    listPluginsResponse_nextToken,
+    listPluginsResponse_plugins,
+    listPluginsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListPlugins' smart constructor.
+data ListPlugins = ListPlugins'
+  { -- | The maximum number of plugins that can be returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPlugins' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listPlugins_maxResults' - The maximum number of plugins that can be returned.
+--
+-- 'nextToken', 'listPlugins_nextToken' - The pagination token.
+newListPlugins ::
+  ListPlugins
+newListPlugins =
+  ListPlugins'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of plugins that can be returned.
+listPlugins_maxResults :: Lens.Lens' ListPlugins (Prelude.Maybe Prelude.Natural)
+listPlugins_maxResults = Lens.lens (\ListPlugins' {maxResults} -> maxResults) (\s@ListPlugins' {} a -> s {maxResults = a} :: ListPlugins)
+
+-- | The pagination token.
+listPlugins_nextToken :: Lens.Lens' ListPlugins (Prelude.Maybe Prelude.Text)
+listPlugins_nextToken = Lens.lens (\ListPlugins' {nextToken} -> nextToken) (\s@ListPlugins' {} a -> s {nextToken = a} :: ListPlugins)
+
+instance Core.AWSPager ListPlugins where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listPluginsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listPluginsResponse_plugins
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listPlugins_nextToken
+          Lens..~ rs
+          Lens.^? listPluginsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListPlugins where
+  type AWSResponse ListPlugins = ListPluginsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListPluginsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "plugins" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListPlugins where
+  hashWithSalt _salt ListPlugins' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListPlugins where
+  rnf ListPlugins' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListPlugins where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListPlugins where
+  toPath = Prelude.const "/plugins"
+
+instance Data.ToQuery ListPlugins where
+  toQuery ListPlugins' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListPluginsResponse' smart constructor.
+data ListPluginsResponse = ListPluginsResponse'
+  { -- | The pagination token.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Migration Hub Orchestrator plugins.
+    plugins :: Prelude.Maybe [PluginSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPluginsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listPluginsResponse_nextToken' - The pagination token.
+--
+-- 'plugins', 'listPluginsResponse_plugins' - Migration Hub Orchestrator plugins.
+--
+-- 'httpStatus', 'listPluginsResponse_httpStatus' - The response's http status code.
+newListPluginsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListPluginsResponse
+newListPluginsResponse pHttpStatus_ =
+  ListPluginsResponse'
+    { nextToken = Prelude.Nothing,
+      plugins = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The pagination token.
+listPluginsResponse_nextToken :: Lens.Lens' ListPluginsResponse (Prelude.Maybe Prelude.Text)
+listPluginsResponse_nextToken = Lens.lens (\ListPluginsResponse' {nextToken} -> nextToken) (\s@ListPluginsResponse' {} a -> s {nextToken = a} :: ListPluginsResponse)
+
+-- | Migration Hub Orchestrator plugins.
+listPluginsResponse_plugins :: Lens.Lens' ListPluginsResponse (Prelude.Maybe [PluginSummary])
+listPluginsResponse_plugins = Lens.lens (\ListPluginsResponse' {plugins} -> plugins) (\s@ListPluginsResponse' {} a -> s {plugins = a} :: ListPluginsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listPluginsResponse_httpStatus :: Lens.Lens' ListPluginsResponse Prelude.Int
+listPluginsResponse_httpStatus = Lens.lens (\ListPluginsResponse' {httpStatus} -> httpStatus) (\s@ListPluginsResponse' {} a -> s {httpStatus = a} :: ListPluginsResponse)
+
+instance Prelude.NFData ListPluginsResponse where
+  rnf ListPluginsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf plugins
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/ListTagsForResource.hs b/gen/Amazonka/MigrationHubOrchestrator/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/ListTagsForResource.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.MigrationHubOrchestrator.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the tags added to a resource.
+module Amazonka.MigrationHubOrchestrator.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) of the resource.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the resource.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The tags added to a resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The tags added to a resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tags added to a resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/ListTemplateStepGroups.hs b/gen/Amazonka/MigrationHubOrchestrator/ListTemplateStepGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/ListTemplateStepGroups.hs
@@ -0,0 +1,233 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.ListTemplateStepGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the step groups in a template.
+--
+-- This operation returns paginated results.
+module Amazonka.MigrationHubOrchestrator.ListTemplateStepGroups
+  ( -- * Creating a Request
+    ListTemplateStepGroups (..),
+    newListTemplateStepGroups,
+
+    -- * Request Lenses
+    listTemplateStepGroups_maxResults,
+    listTemplateStepGroups_nextToken,
+    listTemplateStepGroups_templateId,
+
+    -- * Destructuring the Response
+    ListTemplateStepGroupsResponse (..),
+    newListTemplateStepGroupsResponse,
+
+    -- * Response Lenses
+    listTemplateStepGroupsResponse_nextToken,
+    listTemplateStepGroupsResponse_httpStatus,
+    listTemplateStepGroupsResponse_templateStepGroupSummary,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTemplateStepGroups' smart constructor.
+data ListTemplateStepGroups = ListTemplateStepGroups'
+  { -- | The maximum number of results that can be returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the template.
+    templateId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTemplateStepGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTemplateStepGroups_maxResults' - The maximum number of results that can be returned.
+--
+-- 'nextToken', 'listTemplateStepGroups_nextToken' - The pagination token.
+--
+-- 'templateId', 'listTemplateStepGroups_templateId' - The ID of the template.
+newListTemplateStepGroups ::
+  -- | 'templateId'
+  Prelude.Text ->
+  ListTemplateStepGroups
+newListTemplateStepGroups pTemplateId_ =
+  ListTemplateStepGroups'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      templateId = pTemplateId_
+    }
+
+-- | The maximum number of results that can be returned.
+listTemplateStepGroups_maxResults :: Lens.Lens' ListTemplateStepGroups (Prelude.Maybe Prelude.Natural)
+listTemplateStepGroups_maxResults = Lens.lens (\ListTemplateStepGroups' {maxResults} -> maxResults) (\s@ListTemplateStepGroups' {} a -> s {maxResults = a} :: ListTemplateStepGroups)
+
+-- | The pagination token.
+listTemplateStepGroups_nextToken :: Lens.Lens' ListTemplateStepGroups (Prelude.Maybe Prelude.Text)
+listTemplateStepGroups_nextToken = Lens.lens (\ListTemplateStepGroups' {nextToken} -> nextToken) (\s@ListTemplateStepGroups' {} a -> s {nextToken = a} :: ListTemplateStepGroups)
+
+-- | The ID of the template.
+listTemplateStepGroups_templateId :: Lens.Lens' ListTemplateStepGroups Prelude.Text
+listTemplateStepGroups_templateId = Lens.lens (\ListTemplateStepGroups' {templateId} -> templateId) (\s@ListTemplateStepGroups' {} a -> s {templateId = a} :: ListTemplateStepGroups)
+
+instance Core.AWSPager ListTemplateStepGroups where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listTemplateStepGroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listTemplateStepGroupsResponse_templateStepGroupSummary
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listTemplateStepGroups_nextToken
+          Lens..~ rs
+          Lens.^? listTemplateStepGroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListTemplateStepGroups where
+  type
+    AWSResponse ListTemplateStepGroups =
+      ListTemplateStepGroupsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTemplateStepGroupsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "templateStepGroupSummary"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListTemplateStepGroups where
+  hashWithSalt _salt ListTemplateStepGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` templateId
+
+instance Prelude.NFData ListTemplateStepGroups where
+  rnf ListTemplateStepGroups' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf templateId
+
+instance Data.ToHeaders ListTemplateStepGroups where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTemplateStepGroups where
+  toPath ListTemplateStepGroups' {..} =
+    Prelude.mconcat
+      ["/templatestepgroups/", Data.toBS templateId]
+
+instance Data.ToQuery ListTemplateStepGroups where
+  toQuery ListTemplateStepGroups' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListTemplateStepGroupsResponse' smart constructor.
+data ListTemplateStepGroupsResponse = ListTemplateStepGroupsResponse'
+  { -- | The pagination token.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The summary of the step group in the template.
+    templateStepGroupSummary :: [TemplateStepGroupSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTemplateStepGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTemplateStepGroupsResponse_nextToken' - The pagination token.
+--
+-- 'httpStatus', 'listTemplateStepGroupsResponse_httpStatus' - The response's http status code.
+--
+-- 'templateStepGroupSummary', 'listTemplateStepGroupsResponse_templateStepGroupSummary' - The summary of the step group in the template.
+newListTemplateStepGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTemplateStepGroupsResponse
+newListTemplateStepGroupsResponse pHttpStatus_ =
+  ListTemplateStepGroupsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      templateStepGroupSummary = Prelude.mempty
+    }
+
+-- | The pagination token.
+listTemplateStepGroupsResponse_nextToken :: Lens.Lens' ListTemplateStepGroupsResponse (Prelude.Maybe Prelude.Text)
+listTemplateStepGroupsResponse_nextToken = Lens.lens (\ListTemplateStepGroupsResponse' {nextToken} -> nextToken) (\s@ListTemplateStepGroupsResponse' {} a -> s {nextToken = a} :: ListTemplateStepGroupsResponse)
+
+-- | The response's http status code.
+listTemplateStepGroupsResponse_httpStatus :: Lens.Lens' ListTemplateStepGroupsResponse Prelude.Int
+listTemplateStepGroupsResponse_httpStatus = Lens.lens (\ListTemplateStepGroupsResponse' {httpStatus} -> httpStatus) (\s@ListTemplateStepGroupsResponse' {} a -> s {httpStatus = a} :: ListTemplateStepGroupsResponse)
+
+-- | The summary of the step group in the template.
+listTemplateStepGroupsResponse_templateStepGroupSummary :: Lens.Lens' ListTemplateStepGroupsResponse [TemplateStepGroupSummary]
+listTemplateStepGroupsResponse_templateStepGroupSummary = Lens.lens (\ListTemplateStepGroupsResponse' {templateStepGroupSummary} -> templateStepGroupSummary) (\s@ListTemplateStepGroupsResponse' {} a -> s {templateStepGroupSummary = a} :: ListTemplateStepGroupsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListTemplateStepGroupsResponse
+  where
+  rnf ListTemplateStepGroupsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf templateStepGroupSummary
diff --git a/gen/Amazonka/MigrationHubOrchestrator/ListTemplateSteps.hs b/gen/Amazonka/MigrationHubOrchestrator/ListTemplateSteps.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/ListTemplateSteps.hs
@@ -0,0 +1,244 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.ListTemplateSteps
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the steps in a template.
+--
+-- This operation returns paginated results.
+module Amazonka.MigrationHubOrchestrator.ListTemplateSteps
+  ( -- * Creating a Request
+    ListTemplateSteps (..),
+    newListTemplateSteps,
+
+    -- * Request Lenses
+    listTemplateSteps_maxResults,
+    listTemplateSteps_nextToken,
+    listTemplateSteps_templateId,
+    listTemplateSteps_stepGroupId,
+
+    -- * Destructuring the Response
+    ListTemplateStepsResponse (..),
+    newListTemplateStepsResponse,
+
+    -- * Response Lenses
+    listTemplateStepsResponse_nextToken,
+    listTemplateStepsResponse_templateStepSummaryList,
+    listTemplateStepsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTemplateSteps' smart constructor.
+data ListTemplateSteps = ListTemplateSteps'
+  { -- | The maximum number of results that can be returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the template.
+    templateId :: Prelude.Text,
+    -- | The ID of the step group.
+    stepGroupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTemplateSteps' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTemplateSteps_maxResults' - The maximum number of results that can be returned.
+--
+-- 'nextToken', 'listTemplateSteps_nextToken' - The pagination token.
+--
+-- 'templateId', 'listTemplateSteps_templateId' - The ID of the template.
+--
+-- 'stepGroupId', 'listTemplateSteps_stepGroupId' - The ID of the step group.
+newListTemplateSteps ::
+  -- | 'templateId'
+  Prelude.Text ->
+  -- | 'stepGroupId'
+  Prelude.Text ->
+  ListTemplateSteps
+newListTemplateSteps pTemplateId_ pStepGroupId_ =
+  ListTemplateSteps'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      templateId = pTemplateId_,
+      stepGroupId = pStepGroupId_
+    }
+
+-- | The maximum number of results that can be returned.
+listTemplateSteps_maxResults :: Lens.Lens' ListTemplateSteps (Prelude.Maybe Prelude.Natural)
+listTemplateSteps_maxResults = Lens.lens (\ListTemplateSteps' {maxResults} -> maxResults) (\s@ListTemplateSteps' {} a -> s {maxResults = a} :: ListTemplateSteps)
+
+-- | The pagination token.
+listTemplateSteps_nextToken :: Lens.Lens' ListTemplateSteps (Prelude.Maybe Prelude.Text)
+listTemplateSteps_nextToken = Lens.lens (\ListTemplateSteps' {nextToken} -> nextToken) (\s@ListTemplateSteps' {} a -> s {nextToken = a} :: ListTemplateSteps)
+
+-- | The ID of the template.
+listTemplateSteps_templateId :: Lens.Lens' ListTemplateSteps Prelude.Text
+listTemplateSteps_templateId = Lens.lens (\ListTemplateSteps' {templateId} -> templateId) (\s@ListTemplateSteps' {} a -> s {templateId = a} :: ListTemplateSteps)
+
+-- | The ID of the step group.
+listTemplateSteps_stepGroupId :: Lens.Lens' ListTemplateSteps Prelude.Text
+listTemplateSteps_stepGroupId = Lens.lens (\ListTemplateSteps' {stepGroupId} -> stepGroupId) (\s@ListTemplateSteps' {} a -> s {stepGroupId = a} :: ListTemplateSteps)
+
+instance Core.AWSPager ListTemplateSteps where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listTemplateStepsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listTemplateStepsResponse_templateStepSummaryList
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listTemplateSteps_nextToken
+          Lens..~ rs
+          Lens.^? listTemplateStepsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListTemplateSteps where
+  type
+    AWSResponse ListTemplateSteps =
+      ListTemplateStepsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTemplateStepsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "templateStepSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTemplateSteps where
+  hashWithSalt _salt ListTemplateSteps' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` templateId
+      `Prelude.hashWithSalt` stepGroupId
+
+instance Prelude.NFData ListTemplateSteps where
+  rnf ListTemplateSteps' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf templateId
+      `Prelude.seq` Prelude.rnf stepGroupId
+
+instance Data.ToHeaders ListTemplateSteps where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTemplateSteps where
+  toPath = Prelude.const "/templatesteps"
+
+instance Data.ToQuery ListTemplateSteps where
+  toQuery ListTemplateSteps' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "templateId" Data.=: templateId,
+        "stepGroupId" Data.=: stepGroupId
+      ]
+
+-- | /See:/ 'newListTemplateStepsResponse' smart constructor.
+data ListTemplateStepsResponse = ListTemplateStepsResponse'
+  { -- | The pagination token.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The list of summaries of steps in a template.
+    templateStepSummaryList :: Prelude.Maybe [TemplateStepSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTemplateStepsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTemplateStepsResponse_nextToken' - The pagination token.
+--
+-- 'templateStepSummaryList', 'listTemplateStepsResponse_templateStepSummaryList' - The list of summaries of steps in a template.
+--
+-- 'httpStatus', 'listTemplateStepsResponse_httpStatus' - The response's http status code.
+newListTemplateStepsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTemplateStepsResponse
+newListTemplateStepsResponse pHttpStatus_ =
+  ListTemplateStepsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      templateStepSummaryList = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The pagination token.
+listTemplateStepsResponse_nextToken :: Lens.Lens' ListTemplateStepsResponse (Prelude.Maybe Prelude.Text)
+listTemplateStepsResponse_nextToken = Lens.lens (\ListTemplateStepsResponse' {nextToken} -> nextToken) (\s@ListTemplateStepsResponse' {} a -> s {nextToken = a} :: ListTemplateStepsResponse)
+
+-- | The list of summaries of steps in a template.
+listTemplateStepsResponse_templateStepSummaryList :: Lens.Lens' ListTemplateStepsResponse (Prelude.Maybe [TemplateStepSummary])
+listTemplateStepsResponse_templateStepSummaryList = Lens.lens (\ListTemplateStepsResponse' {templateStepSummaryList} -> templateStepSummaryList) (\s@ListTemplateStepsResponse' {} a -> s {templateStepSummaryList = a} :: ListTemplateStepsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTemplateStepsResponse_httpStatus :: Lens.Lens' ListTemplateStepsResponse Prelude.Int
+listTemplateStepsResponse_httpStatus = Lens.lens (\ListTemplateStepsResponse' {httpStatus} -> httpStatus) (\s@ListTemplateStepsResponse' {} a -> s {httpStatus = a} :: ListTemplateStepsResponse)
+
+instance Prelude.NFData ListTemplateStepsResponse where
+  rnf ListTemplateStepsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf templateStepSummaryList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/ListTemplates.hs b/gen/Amazonka/MigrationHubOrchestrator/ListTemplates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/ListTemplates.hs
@@ -0,0 +1,224 @@
+{-# 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.MigrationHubOrchestrator.ListTemplates
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the templates available in Migration Hub Orchestrator to create a
+-- migration workflow.
+--
+-- This operation returns paginated results.
+module Amazonka.MigrationHubOrchestrator.ListTemplates
+  ( -- * Creating a Request
+    ListTemplates (..),
+    newListTemplates,
+
+    -- * Request Lenses
+    listTemplates_maxResults,
+    listTemplates_name,
+    listTemplates_nextToken,
+
+    -- * Destructuring the Response
+    ListTemplatesResponse (..),
+    newListTemplatesResponse,
+
+    -- * Response Lenses
+    listTemplatesResponse_nextToken,
+    listTemplatesResponse_httpStatus,
+    listTemplatesResponse_templateSummary,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTemplates' smart constructor.
+data ListTemplates = ListTemplates'
+  { -- | The maximum number of results that can be returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the template.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The pagination token.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTemplates' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTemplates_maxResults' - The maximum number of results that can be returned.
+--
+-- 'name', 'listTemplates_name' - The name of the template.
+--
+-- 'nextToken', 'listTemplates_nextToken' - The pagination token.
+newListTemplates ::
+  ListTemplates
+newListTemplates =
+  ListTemplates'
+    { maxResults = Prelude.Nothing,
+      name = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results that can be returned.
+listTemplates_maxResults :: Lens.Lens' ListTemplates (Prelude.Maybe Prelude.Natural)
+listTemplates_maxResults = Lens.lens (\ListTemplates' {maxResults} -> maxResults) (\s@ListTemplates' {} a -> s {maxResults = a} :: ListTemplates)
+
+-- | The name of the template.
+listTemplates_name :: Lens.Lens' ListTemplates (Prelude.Maybe Prelude.Text)
+listTemplates_name = Lens.lens (\ListTemplates' {name} -> name) (\s@ListTemplates' {} a -> s {name = a} :: ListTemplates)
+
+-- | The pagination token.
+listTemplates_nextToken :: Lens.Lens' ListTemplates (Prelude.Maybe Prelude.Text)
+listTemplates_nextToken = Lens.lens (\ListTemplates' {nextToken} -> nextToken) (\s@ListTemplates' {} a -> s {nextToken = a} :: ListTemplates)
+
+instance Core.AWSPager ListTemplates where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listTemplatesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listTemplatesResponse_templateSummary) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listTemplates_nextToken
+          Lens..~ rs
+          Lens.^? listTemplatesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListTemplates where
+  type
+    AWSResponse ListTemplates =
+      ListTemplatesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTemplatesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "templateSummary"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListTemplates where
+  hashWithSalt _salt ListTemplates' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListTemplates where
+  rnf ListTemplates' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListTemplates where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTemplates where
+  toPath = Prelude.const "/migrationworkflowtemplates"
+
+instance Data.ToQuery ListTemplates where
+  toQuery ListTemplates' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "name" Data.=: name,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListTemplatesResponse' smart constructor.
+data ListTemplatesResponse = ListTemplatesResponse'
+  { -- | The pagination token.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The summary of the template.
+    templateSummary :: [TemplateSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTemplatesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTemplatesResponse_nextToken' - The pagination token.
+--
+-- 'httpStatus', 'listTemplatesResponse_httpStatus' - The response's http status code.
+--
+-- 'templateSummary', 'listTemplatesResponse_templateSummary' - The summary of the template.
+newListTemplatesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTemplatesResponse
+newListTemplatesResponse pHttpStatus_ =
+  ListTemplatesResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      templateSummary = Prelude.mempty
+    }
+
+-- | The pagination token.
+listTemplatesResponse_nextToken :: Lens.Lens' ListTemplatesResponse (Prelude.Maybe Prelude.Text)
+listTemplatesResponse_nextToken = Lens.lens (\ListTemplatesResponse' {nextToken} -> nextToken) (\s@ListTemplatesResponse' {} a -> s {nextToken = a} :: ListTemplatesResponse)
+
+-- | The response's http status code.
+listTemplatesResponse_httpStatus :: Lens.Lens' ListTemplatesResponse Prelude.Int
+listTemplatesResponse_httpStatus = Lens.lens (\ListTemplatesResponse' {httpStatus} -> httpStatus) (\s@ListTemplatesResponse' {} a -> s {httpStatus = a} :: ListTemplatesResponse)
+
+-- | The summary of the template.
+listTemplatesResponse_templateSummary :: Lens.Lens' ListTemplatesResponse [TemplateSummary]
+listTemplatesResponse_templateSummary = Lens.lens (\ListTemplatesResponse' {templateSummary} -> templateSummary) (\s@ListTemplatesResponse' {} a -> s {templateSummary = a} :: ListTemplatesResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListTemplatesResponse where
+  rnf ListTemplatesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf templateSummary
diff --git a/gen/Amazonka/MigrationHubOrchestrator/ListWorkflowStepGroups.hs b/gen/Amazonka/MigrationHubOrchestrator/ListWorkflowStepGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/ListWorkflowStepGroups.hs
@@ -0,0 +1,232 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.ListWorkflowStepGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the step groups in a migration workflow.
+--
+-- This operation returns paginated results.
+module Amazonka.MigrationHubOrchestrator.ListWorkflowStepGroups
+  ( -- * Creating a Request
+    ListWorkflowStepGroups (..),
+    newListWorkflowStepGroups,
+
+    -- * Request Lenses
+    listWorkflowStepGroups_maxResults,
+    listWorkflowStepGroups_nextToken,
+    listWorkflowStepGroups_workflowId,
+
+    -- * Destructuring the Response
+    ListWorkflowStepGroupsResponse (..),
+    newListWorkflowStepGroupsResponse,
+
+    -- * Response Lenses
+    listWorkflowStepGroupsResponse_nextToken,
+    listWorkflowStepGroupsResponse_httpStatus,
+    listWorkflowStepGroupsResponse_workflowStepGroupsSummary,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListWorkflowStepGroups' smart constructor.
+data ListWorkflowStepGroups = ListWorkflowStepGroups'
+  { -- | The maximum number of results that can be returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the migration workflow.
+    workflowId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorkflowStepGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listWorkflowStepGroups_maxResults' - The maximum number of results that can be returned.
+--
+-- 'nextToken', 'listWorkflowStepGroups_nextToken' - The pagination token.
+--
+-- 'workflowId', 'listWorkflowStepGroups_workflowId' - The ID of the migration workflow.
+newListWorkflowStepGroups ::
+  -- | 'workflowId'
+  Prelude.Text ->
+  ListWorkflowStepGroups
+newListWorkflowStepGroups pWorkflowId_ =
+  ListWorkflowStepGroups'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      workflowId = pWorkflowId_
+    }
+
+-- | The maximum number of results that can be returned.
+listWorkflowStepGroups_maxResults :: Lens.Lens' ListWorkflowStepGroups (Prelude.Maybe Prelude.Natural)
+listWorkflowStepGroups_maxResults = Lens.lens (\ListWorkflowStepGroups' {maxResults} -> maxResults) (\s@ListWorkflowStepGroups' {} a -> s {maxResults = a} :: ListWorkflowStepGroups)
+
+-- | The pagination token.
+listWorkflowStepGroups_nextToken :: Lens.Lens' ListWorkflowStepGroups (Prelude.Maybe Prelude.Text)
+listWorkflowStepGroups_nextToken = Lens.lens (\ListWorkflowStepGroups' {nextToken} -> nextToken) (\s@ListWorkflowStepGroups' {} a -> s {nextToken = a} :: ListWorkflowStepGroups)
+
+-- | The ID of the migration workflow.
+listWorkflowStepGroups_workflowId :: Lens.Lens' ListWorkflowStepGroups Prelude.Text
+listWorkflowStepGroups_workflowId = Lens.lens (\ListWorkflowStepGroups' {workflowId} -> workflowId) (\s@ListWorkflowStepGroups' {} a -> s {workflowId = a} :: ListWorkflowStepGroups)
+
+instance Core.AWSPager ListWorkflowStepGroups where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listWorkflowStepGroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listWorkflowStepGroupsResponse_workflowStepGroupsSummary
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listWorkflowStepGroups_nextToken
+          Lens..~ rs
+          Lens.^? listWorkflowStepGroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListWorkflowStepGroups where
+  type
+    AWSResponse ListWorkflowStepGroups =
+      ListWorkflowStepGroupsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWorkflowStepGroupsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "workflowStepGroupsSummary"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListWorkflowStepGroups where
+  hashWithSalt _salt ListWorkflowStepGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` workflowId
+
+instance Prelude.NFData ListWorkflowStepGroups where
+  rnf ListWorkflowStepGroups' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf workflowId
+
+instance Data.ToHeaders ListWorkflowStepGroups where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListWorkflowStepGroups where
+  toPath = Prelude.const "/workflowstepgroups"
+
+instance Data.ToQuery ListWorkflowStepGroups where
+  toQuery ListWorkflowStepGroups' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "workflowId" Data.=: workflowId
+      ]
+
+-- | /See:/ 'newListWorkflowStepGroupsResponse' smart constructor.
+data ListWorkflowStepGroupsResponse = ListWorkflowStepGroupsResponse'
+  { -- | The pagination token.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The summary of step groups in a migration workflow.
+    workflowStepGroupsSummary :: [WorkflowStepGroupSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorkflowStepGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listWorkflowStepGroupsResponse_nextToken' - The pagination token.
+--
+-- 'httpStatus', 'listWorkflowStepGroupsResponse_httpStatus' - The response's http status code.
+--
+-- 'workflowStepGroupsSummary', 'listWorkflowStepGroupsResponse_workflowStepGroupsSummary' - The summary of step groups in a migration workflow.
+newListWorkflowStepGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWorkflowStepGroupsResponse
+newListWorkflowStepGroupsResponse pHttpStatus_ =
+  ListWorkflowStepGroupsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      workflowStepGroupsSummary = Prelude.mempty
+    }
+
+-- | The pagination token.
+listWorkflowStepGroupsResponse_nextToken :: Lens.Lens' ListWorkflowStepGroupsResponse (Prelude.Maybe Prelude.Text)
+listWorkflowStepGroupsResponse_nextToken = Lens.lens (\ListWorkflowStepGroupsResponse' {nextToken} -> nextToken) (\s@ListWorkflowStepGroupsResponse' {} a -> s {nextToken = a} :: ListWorkflowStepGroupsResponse)
+
+-- | The response's http status code.
+listWorkflowStepGroupsResponse_httpStatus :: Lens.Lens' ListWorkflowStepGroupsResponse Prelude.Int
+listWorkflowStepGroupsResponse_httpStatus = Lens.lens (\ListWorkflowStepGroupsResponse' {httpStatus} -> httpStatus) (\s@ListWorkflowStepGroupsResponse' {} a -> s {httpStatus = a} :: ListWorkflowStepGroupsResponse)
+
+-- | The summary of step groups in a migration workflow.
+listWorkflowStepGroupsResponse_workflowStepGroupsSummary :: Lens.Lens' ListWorkflowStepGroupsResponse [WorkflowStepGroupSummary]
+listWorkflowStepGroupsResponse_workflowStepGroupsSummary = Lens.lens (\ListWorkflowStepGroupsResponse' {workflowStepGroupsSummary} -> workflowStepGroupsSummary) (\s@ListWorkflowStepGroupsResponse' {} a -> s {workflowStepGroupsSummary = a} :: ListWorkflowStepGroupsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListWorkflowStepGroupsResponse
+  where
+  rnf ListWorkflowStepGroupsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf workflowStepGroupsSummary
diff --git a/gen/Amazonka/MigrationHubOrchestrator/ListWorkflowSteps.hs b/gen/Amazonka/MigrationHubOrchestrator/ListWorkflowSteps.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/ListWorkflowSteps.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.MigrationHubOrchestrator.ListWorkflowSteps
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the steps in a workflow.
+--
+-- This operation returns paginated results.
+module Amazonka.MigrationHubOrchestrator.ListWorkflowSteps
+  ( -- * Creating a Request
+    ListWorkflowSteps (..),
+    newListWorkflowSteps,
+
+    -- * Request Lenses
+    listWorkflowSteps_maxResults,
+    listWorkflowSteps_nextToken,
+    listWorkflowSteps_workflowId,
+    listWorkflowSteps_stepGroupId,
+
+    -- * Destructuring the Response
+    ListWorkflowStepsResponse (..),
+    newListWorkflowStepsResponse,
+
+    -- * Response Lenses
+    listWorkflowStepsResponse_nextToken,
+    listWorkflowStepsResponse_httpStatus,
+    listWorkflowStepsResponse_workflowStepsSummary,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListWorkflowSteps' smart constructor.
+data ListWorkflowSteps = ListWorkflowSteps'
+  { -- | The maximum number of results that can be returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the migration workflow.
+    workflowId :: Prelude.Text,
+    -- | The ID of the step group.
+    stepGroupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorkflowSteps' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listWorkflowSteps_maxResults' - The maximum number of results that can be returned.
+--
+-- 'nextToken', 'listWorkflowSteps_nextToken' - The pagination token.
+--
+-- 'workflowId', 'listWorkflowSteps_workflowId' - The ID of the migration workflow.
+--
+-- 'stepGroupId', 'listWorkflowSteps_stepGroupId' - The ID of the step group.
+newListWorkflowSteps ::
+  -- | 'workflowId'
+  Prelude.Text ->
+  -- | 'stepGroupId'
+  Prelude.Text ->
+  ListWorkflowSteps
+newListWorkflowSteps pWorkflowId_ pStepGroupId_ =
+  ListWorkflowSteps'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      workflowId = pWorkflowId_,
+      stepGroupId = pStepGroupId_
+    }
+
+-- | The maximum number of results that can be returned.
+listWorkflowSteps_maxResults :: Lens.Lens' ListWorkflowSteps (Prelude.Maybe Prelude.Natural)
+listWorkflowSteps_maxResults = Lens.lens (\ListWorkflowSteps' {maxResults} -> maxResults) (\s@ListWorkflowSteps' {} a -> s {maxResults = a} :: ListWorkflowSteps)
+
+-- | The pagination token.
+listWorkflowSteps_nextToken :: Lens.Lens' ListWorkflowSteps (Prelude.Maybe Prelude.Text)
+listWorkflowSteps_nextToken = Lens.lens (\ListWorkflowSteps' {nextToken} -> nextToken) (\s@ListWorkflowSteps' {} a -> s {nextToken = a} :: ListWorkflowSteps)
+
+-- | The ID of the migration workflow.
+listWorkflowSteps_workflowId :: Lens.Lens' ListWorkflowSteps Prelude.Text
+listWorkflowSteps_workflowId = Lens.lens (\ListWorkflowSteps' {workflowId} -> workflowId) (\s@ListWorkflowSteps' {} a -> s {workflowId = a} :: ListWorkflowSteps)
+
+-- | The ID of the step group.
+listWorkflowSteps_stepGroupId :: Lens.Lens' ListWorkflowSteps Prelude.Text
+listWorkflowSteps_stepGroupId = Lens.lens (\ListWorkflowSteps' {stepGroupId} -> stepGroupId) (\s@ListWorkflowSteps' {} a -> s {stepGroupId = a} :: ListWorkflowSteps)
+
+instance Core.AWSPager ListWorkflowSteps where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listWorkflowStepsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listWorkflowStepsResponse_workflowStepsSummary
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listWorkflowSteps_nextToken
+          Lens..~ rs
+          Lens.^? listWorkflowStepsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListWorkflowSteps where
+  type
+    AWSResponse ListWorkflowSteps =
+      ListWorkflowStepsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWorkflowStepsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "workflowStepsSummary"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListWorkflowSteps where
+  hashWithSalt _salt ListWorkflowSteps' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` workflowId
+      `Prelude.hashWithSalt` stepGroupId
+
+instance Prelude.NFData ListWorkflowSteps where
+  rnf ListWorkflowSteps' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf stepGroupId
+
+instance Data.ToHeaders ListWorkflowSteps where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListWorkflowSteps where
+  toPath ListWorkflowSteps' {..} =
+    Prelude.mconcat
+      [ "/workflow/",
+        Data.toBS workflowId,
+        "/workflowstepgroups/",
+        Data.toBS stepGroupId,
+        "/workflowsteps"
+      ]
+
+instance Data.ToQuery ListWorkflowSteps where
+  toQuery ListWorkflowSteps' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListWorkflowStepsResponse' smart constructor.
+data ListWorkflowStepsResponse = ListWorkflowStepsResponse'
+  { -- | The pagination token.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The summary of steps in a migration workflow.
+    workflowStepsSummary :: [WorkflowStepSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorkflowStepsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listWorkflowStepsResponse_nextToken' - The pagination token.
+--
+-- 'httpStatus', 'listWorkflowStepsResponse_httpStatus' - The response's http status code.
+--
+-- 'workflowStepsSummary', 'listWorkflowStepsResponse_workflowStepsSummary' - The summary of steps in a migration workflow.
+newListWorkflowStepsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWorkflowStepsResponse
+newListWorkflowStepsResponse pHttpStatus_ =
+  ListWorkflowStepsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      workflowStepsSummary = Prelude.mempty
+    }
+
+-- | The pagination token.
+listWorkflowStepsResponse_nextToken :: Lens.Lens' ListWorkflowStepsResponse (Prelude.Maybe Prelude.Text)
+listWorkflowStepsResponse_nextToken = Lens.lens (\ListWorkflowStepsResponse' {nextToken} -> nextToken) (\s@ListWorkflowStepsResponse' {} a -> s {nextToken = a} :: ListWorkflowStepsResponse)
+
+-- | The response's http status code.
+listWorkflowStepsResponse_httpStatus :: Lens.Lens' ListWorkflowStepsResponse Prelude.Int
+listWorkflowStepsResponse_httpStatus = Lens.lens (\ListWorkflowStepsResponse' {httpStatus} -> httpStatus) (\s@ListWorkflowStepsResponse' {} a -> s {httpStatus = a} :: ListWorkflowStepsResponse)
+
+-- | The summary of steps in a migration workflow.
+listWorkflowStepsResponse_workflowStepsSummary :: Lens.Lens' ListWorkflowStepsResponse [WorkflowStepSummary]
+listWorkflowStepsResponse_workflowStepsSummary = Lens.lens (\ListWorkflowStepsResponse' {workflowStepsSummary} -> workflowStepsSummary) (\s@ListWorkflowStepsResponse' {} a -> s {workflowStepsSummary = a} :: ListWorkflowStepsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListWorkflowStepsResponse where
+  rnf ListWorkflowStepsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf workflowStepsSummary
diff --git a/gen/Amazonka/MigrationHubOrchestrator/ListWorkflows.hs b/gen/Amazonka/MigrationHubOrchestrator/ListWorkflows.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/ListWorkflows.hs
@@ -0,0 +1,266 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.ListWorkflows
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the migration workflows.
+--
+-- This operation returns paginated results.
+module Amazonka.MigrationHubOrchestrator.ListWorkflows
+  ( -- * Creating a Request
+    ListWorkflows (..),
+    newListWorkflows,
+
+    -- * Request Lenses
+    listWorkflows_adsApplicationConfigurationName,
+    listWorkflows_maxResults,
+    listWorkflows_name,
+    listWorkflows_nextToken,
+    listWorkflows_status,
+    listWorkflows_templateId,
+
+    -- * Destructuring the Response
+    ListWorkflowsResponse (..),
+    newListWorkflowsResponse,
+
+    -- * Response Lenses
+    listWorkflowsResponse_nextToken,
+    listWorkflowsResponse_httpStatus,
+    listWorkflowsResponse_migrationWorkflowSummary,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListWorkflows' smart constructor.
+data ListWorkflows = ListWorkflows'
+  { -- | The name of the application configured in Application Discovery Service.
+    adsApplicationConfigurationName :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results that can be returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the migration workflow.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The pagination token.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The status of the migration workflow.
+    status :: Prelude.Maybe MigrationWorkflowStatusEnum,
+    -- | The ID of the template.
+    templateId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorkflows' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'adsApplicationConfigurationName', 'listWorkflows_adsApplicationConfigurationName' - The name of the application configured in Application Discovery Service.
+--
+-- 'maxResults', 'listWorkflows_maxResults' - The maximum number of results that can be returned.
+--
+-- 'name', 'listWorkflows_name' - The name of the migration workflow.
+--
+-- 'nextToken', 'listWorkflows_nextToken' - The pagination token.
+--
+-- 'status', 'listWorkflows_status' - The status of the migration workflow.
+--
+-- 'templateId', 'listWorkflows_templateId' - The ID of the template.
+newListWorkflows ::
+  ListWorkflows
+newListWorkflows =
+  ListWorkflows'
+    { adsApplicationConfigurationName =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      name = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      status = Prelude.Nothing,
+      templateId = Prelude.Nothing
+    }
+
+-- | The name of the application configured in Application Discovery Service.
+listWorkflows_adsApplicationConfigurationName :: Lens.Lens' ListWorkflows (Prelude.Maybe Prelude.Text)
+listWorkflows_adsApplicationConfigurationName = Lens.lens (\ListWorkflows' {adsApplicationConfigurationName} -> adsApplicationConfigurationName) (\s@ListWorkflows' {} a -> s {adsApplicationConfigurationName = a} :: ListWorkflows)
+
+-- | The maximum number of results that can be returned.
+listWorkflows_maxResults :: Lens.Lens' ListWorkflows (Prelude.Maybe Prelude.Natural)
+listWorkflows_maxResults = Lens.lens (\ListWorkflows' {maxResults} -> maxResults) (\s@ListWorkflows' {} a -> s {maxResults = a} :: ListWorkflows)
+
+-- | The name of the migration workflow.
+listWorkflows_name :: Lens.Lens' ListWorkflows (Prelude.Maybe Prelude.Text)
+listWorkflows_name = Lens.lens (\ListWorkflows' {name} -> name) (\s@ListWorkflows' {} a -> s {name = a} :: ListWorkflows)
+
+-- | The pagination token.
+listWorkflows_nextToken :: Lens.Lens' ListWorkflows (Prelude.Maybe Prelude.Text)
+listWorkflows_nextToken = Lens.lens (\ListWorkflows' {nextToken} -> nextToken) (\s@ListWorkflows' {} a -> s {nextToken = a} :: ListWorkflows)
+
+-- | The status of the migration workflow.
+listWorkflows_status :: Lens.Lens' ListWorkflows (Prelude.Maybe MigrationWorkflowStatusEnum)
+listWorkflows_status = Lens.lens (\ListWorkflows' {status} -> status) (\s@ListWorkflows' {} a -> s {status = a} :: ListWorkflows)
+
+-- | The ID of the template.
+listWorkflows_templateId :: Lens.Lens' ListWorkflows (Prelude.Maybe Prelude.Text)
+listWorkflows_templateId = Lens.lens (\ListWorkflows' {templateId} -> templateId) (\s@ListWorkflows' {} a -> s {templateId = a} :: ListWorkflows)
+
+instance Core.AWSPager ListWorkflows where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listWorkflowsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listWorkflowsResponse_migrationWorkflowSummary
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listWorkflows_nextToken
+          Lens..~ rs
+          Lens.^? listWorkflowsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListWorkflows where
+  type
+    AWSResponse ListWorkflows =
+      ListWorkflowsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWorkflowsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "migrationWorkflowSummary"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListWorkflows where
+  hashWithSalt _salt ListWorkflows' {..} =
+    _salt
+      `Prelude.hashWithSalt` adsApplicationConfigurationName
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` templateId
+
+instance Prelude.NFData ListWorkflows where
+  rnf ListWorkflows' {..} =
+    Prelude.rnf adsApplicationConfigurationName
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf templateId
+
+instance Data.ToHeaders ListWorkflows where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListWorkflows where
+  toPath = Prelude.const "/migrationworkflows"
+
+instance Data.ToQuery ListWorkflows where
+  toQuery ListWorkflows' {..} =
+    Prelude.mconcat
+      [ "adsApplicationConfigurationName"
+          Data.=: adsApplicationConfigurationName,
+        "maxResults" Data.=: maxResults,
+        "name" Data.=: name,
+        "nextToken" Data.=: nextToken,
+        "status" Data.=: status,
+        "templateId" Data.=: templateId
+      ]
+
+-- | /See:/ 'newListWorkflowsResponse' smart constructor.
+data ListWorkflowsResponse = ListWorkflowsResponse'
+  { -- | The pagination token.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The summary of the migration workflow.
+    migrationWorkflowSummary :: [MigrationWorkflowSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorkflowsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listWorkflowsResponse_nextToken' - The pagination token.
+--
+-- 'httpStatus', 'listWorkflowsResponse_httpStatus' - The response's http status code.
+--
+-- 'migrationWorkflowSummary', 'listWorkflowsResponse_migrationWorkflowSummary' - The summary of the migration workflow.
+newListWorkflowsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWorkflowsResponse
+newListWorkflowsResponse pHttpStatus_ =
+  ListWorkflowsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      migrationWorkflowSummary = Prelude.mempty
+    }
+
+-- | The pagination token.
+listWorkflowsResponse_nextToken :: Lens.Lens' ListWorkflowsResponse (Prelude.Maybe Prelude.Text)
+listWorkflowsResponse_nextToken = Lens.lens (\ListWorkflowsResponse' {nextToken} -> nextToken) (\s@ListWorkflowsResponse' {} a -> s {nextToken = a} :: ListWorkflowsResponse)
+
+-- | The response's http status code.
+listWorkflowsResponse_httpStatus :: Lens.Lens' ListWorkflowsResponse Prelude.Int
+listWorkflowsResponse_httpStatus = Lens.lens (\ListWorkflowsResponse' {httpStatus} -> httpStatus) (\s@ListWorkflowsResponse' {} a -> s {httpStatus = a} :: ListWorkflowsResponse)
+
+-- | The summary of the migration workflow.
+listWorkflowsResponse_migrationWorkflowSummary :: Lens.Lens' ListWorkflowsResponse [MigrationWorkflowSummary]
+listWorkflowsResponse_migrationWorkflowSummary = Lens.lens (\ListWorkflowsResponse' {migrationWorkflowSummary} -> migrationWorkflowSummary) (\s@ListWorkflowsResponse' {} a -> s {migrationWorkflowSummary = a} :: ListWorkflowsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListWorkflowsResponse where
+  rnf ListWorkflowsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf migrationWorkflowSummary
diff --git a/gen/Amazonka/MigrationHubOrchestrator/RetryWorkflowStep.hs b/gen/Amazonka/MigrationHubOrchestrator/RetryWorkflowStep.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/RetryWorkflowStep.hs
@@ -0,0 +1,233 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.RetryWorkflowStep
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retry a failed step in a migration workflow.
+module Amazonka.MigrationHubOrchestrator.RetryWorkflowStep
+  ( -- * Creating a Request
+    RetryWorkflowStep (..),
+    newRetryWorkflowStep,
+
+    -- * Request Lenses
+    retryWorkflowStep_workflowId,
+    retryWorkflowStep_stepGroupId,
+    retryWorkflowStep_id,
+
+    -- * Destructuring the Response
+    RetryWorkflowStepResponse (..),
+    newRetryWorkflowStepResponse,
+
+    -- * Response Lenses
+    retryWorkflowStepResponse_id,
+    retryWorkflowStepResponse_status,
+    retryWorkflowStepResponse_stepGroupId,
+    retryWorkflowStepResponse_workflowId,
+    retryWorkflowStepResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRetryWorkflowStep' smart constructor.
+data RetryWorkflowStep = RetryWorkflowStep'
+  { -- | The ID of the migration workflow.
+    workflowId :: Prelude.Text,
+    -- | The ID of the step group.
+    stepGroupId :: Prelude.Text,
+    -- | The ID of the step.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RetryWorkflowStep' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'workflowId', 'retryWorkflowStep_workflowId' - The ID of the migration workflow.
+--
+-- 'stepGroupId', 'retryWorkflowStep_stepGroupId' - The ID of the step group.
+--
+-- 'id', 'retryWorkflowStep_id' - The ID of the step.
+newRetryWorkflowStep ::
+  -- | 'workflowId'
+  Prelude.Text ->
+  -- | 'stepGroupId'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  RetryWorkflowStep
+newRetryWorkflowStep pWorkflowId_ pStepGroupId_ pId_ =
+  RetryWorkflowStep'
+    { workflowId = pWorkflowId_,
+      stepGroupId = pStepGroupId_,
+      id = pId_
+    }
+
+-- | The ID of the migration workflow.
+retryWorkflowStep_workflowId :: Lens.Lens' RetryWorkflowStep Prelude.Text
+retryWorkflowStep_workflowId = Lens.lens (\RetryWorkflowStep' {workflowId} -> workflowId) (\s@RetryWorkflowStep' {} a -> s {workflowId = a} :: RetryWorkflowStep)
+
+-- | The ID of the step group.
+retryWorkflowStep_stepGroupId :: Lens.Lens' RetryWorkflowStep Prelude.Text
+retryWorkflowStep_stepGroupId = Lens.lens (\RetryWorkflowStep' {stepGroupId} -> stepGroupId) (\s@RetryWorkflowStep' {} a -> s {stepGroupId = a} :: RetryWorkflowStep)
+
+-- | The ID of the step.
+retryWorkflowStep_id :: Lens.Lens' RetryWorkflowStep Prelude.Text
+retryWorkflowStep_id = Lens.lens (\RetryWorkflowStep' {id} -> id) (\s@RetryWorkflowStep' {} a -> s {id = a} :: RetryWorkflowStep)
+
+instance Core.AWSRequest RetryWorkflowStep where
+  type
+    AWSResponse RetryWorkflowStep =
+      RetryWorkflowStepResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          RetryWorkflowStepResponse'
+            Prelude.<$> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "stepGroupId")
+            Prelude.<*> (x Data..?> "workflowId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RetryWorkflowStep where
+  hashWithSalt _salt RetryWorkflowStep' {..} =
+    _salt
+      `Prelude.hashWithSalt` workflowId
+      `Prelude.hashWithSalt` stepGroupId
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData RetryWorkflowStep where
+  rnf RetryWorkflowStep' {..} =
+    Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf stepGroupId
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders RetryWorkflowStep where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RetryWorkflowStep where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath RetryWorkflowStep where
+  toPath RetryWorkflowStep' {..} =
+    Prelude.mconcat
+      ["/retryworkflowstep/", Data.toBS id]
+
+instance Data.ToQuery RetryWorkflowStep where
+  toQuery RetryWorkflowStep' {..} =
+    Prelude.mconcat
+      [ "workflowId" Data.=: workflowId,
+        "stepGroupId" Data.=: stepGroupId
+      ]
+
+-- | /See:/ 'newRetryWorkflowStepResponse' smart constructor.
+data RetryWorkflowStepResponse = RetryWorkflowStepResponse'
+  { -- | The ID of the step.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The status of the step.
+    status :: Prelude.Maybe StepStatus,
+    -- | The ID of the step group.
+    stepGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the migration workflow.
+    workflowId :: 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 'RetryWorkflowStepResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'retryWorkflowStepResponse_id' - The ID of the step.
+--
+-- 'status', 'retryWorkflowStepResponse_status' - The status of the step.
+--
+-- 'stepGroupId', 'retryWorkflowStepResponse_stepGroupId' - The ID of the step group.
+--
+-- 'workflowId', 'retryWorkflowStepResponse_workflowId' - The ID of the migration workflow.
+--
+-- 'httpStatus', 'retryWorkflowStepResponse_httpStatus' - The response's http status code.
+newRetryWorkflowStepResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RetryWorkflowStepResponse
+newRetryWorkflowStepResponse pHttpStatus_ =
+  RetryWorkflowStepResponse'
+    { id = Prelude.Nothing,
+      status = Prelude.Nothing,
+      stepGroupId = Prelude.Nothing,
+      workflowId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the step.
+retryWorkflowStepResponse_id :: Lens.Lens' RetryWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+retryWorkflowStepResponse_id = Lens.lens (\RetryWorkflowStepResponse' {id} -> id) (\s@RetryWorkflowStepResponse' {} a -> s {id = a} :: RetryWorkflowStepResponse)
+
+-- | The status of the step.
+retryWorkflowStepResponse_status :: Lens.Lens' RetryWorkflowStepResponse (Prelude.Maybe StepStatus)
+retryWorkflowStepResponse_status = Lens.lens (\RetryWorkflowStepResponse' {status} -> status) (\s@RetryWorkflowStepResponse' {} a -> s {status = a} :: RetryWorkflowStepResponse)
+
+-- | The ID of the step group.
+retryWorkflowStepResponse_stepGroupId :: Lens.Lens' RetryWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+retryWorkflowStepResponse_stepGroupId = Lens.lens (\RetryWorkflowStepResponse' {stepGroupId} -> stepGroupId) (\s@RetryWorkflowStepResponse' {} a -> s {stepGroupId = a} :: RetryWorkflowStepResponse)
+
+-- | The ID of the migration workflow.
+retryWorkflowStepResponse_workflowId :: Lens.Lens' RetryWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+retryWorkflowStepResponse_workflowId = Lens.lens (\RetryWorkflowStepResponse' {workflowId} -> workflowId) (\s@RetryWorkflowStepResponse' {} a -> s {workflowId = a} :: RetryWorkflowStepResponse)
+
+-- | The response's http status code.
+retryWorkflowStepResponse_httpStatus :: Lens.Lens' RetryWorkflowStepResponse Prelude.Int
+retryWorkflowStepResponse_httpStatus = Lens.lens (\RetryWorkflowStepResponse' {httpStatus} -> httpStatus) (\s@RetryWorkflowStepResponse' {} a -> s {httpStatus = a} :: RetryWorkflowStepResponse)
+
+instance Prelude.NFData RetryWorkflowStepResponse where
+  rnf RetryWorkflowStepResponse' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf stepGroupId
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/StartWorkflow.hs b/gen/Amazonka/MigrationHubOrchestrator/StartWorkflow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/StartWorkflow.hs
@@ -0,0 +1,208 @@
+{-# 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.MigrationHubOrchestrator.StartWorkflow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Start a migration workflow.
+module Amazonka.MigrationHubOrchestrator.StartWorkflow
+  ( -- * Creating a Request
+    StartWorkflow (..),
+    newStartWorkflow,
+
+    -- * Request Lenses
+    startWorkflow_id,
+
+    -- * Destructuring the Response
+    StartWorkflowResponse (..),
+    newStartWorkflowResponse,
+
+    -- * Response Lenses
+    startWorkflowResponse_arn,
+    startWorkflowResponse_id,
+    startWorkflowResponse_lastStartTime,
+    startWorkflowResponse_status,
+    startWorkflowResponse_statusMessage,
+    startWorkflowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartWorkflow' smart constructor.
+data StartWorkflow = StartWorkflow'
+  { -- | The ID of the migration workflow.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartWorkflow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'startWorkflow_id' - The ID of the migration workflow.
+newStartWorkflow ::
+  -- | 'id'
+  Prelude.Text ->
+  StartWorkflow
+newStartWorkflow pId_ = StartWorkflow' {id = pId_}
+
+-- | The ID of the migration workflow.
+startWorkflow_id :: Lens.Lens' StartWorkflow Prelude.Text
+startWorkflow_id = Lens.lens (\StartWorkflow' {id} -> id) (\s@StartWorkflow' {} a -> s {id = a} :: StartWorkflow)
+
+instance Core.AWSRequest StartWorkflow where
+  type
+    AWSResponse StartWorkflow =
+      StartWorkflowResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartWorkflowResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "lastStartTime")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "statusMessage")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartWorkflow where
+  hashWithSalt _salt StartWorkflow' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData StartWorkflow where
+  rnf StartWorkflow' {..} = Prelude.rnf id
+
+instance Data.ToHeaders StartWorkflow where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartWorkflow where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath StartWorkflow where
+  toPath StartWorkflow' {..} =
+    Prelude.mconcat
+      ["/migrationworkflow/", Data.toBS id, "/start"]
+
+instance Data.ToQuery StartWorkflow where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartWorkflowResponse' smart constructor.
+data StartWorkflowResponse = StartWorkflowResponse'
+  { -- | The Amazon Resource Name (ARN) of the migration workflow.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the migration workflow.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the migration workflow was last started.
+    lastStartTime :: Prelude.Maybe Data.POSIX,
+    -- | The status of the migration workflow.
+    status :: Prelude.Maybe MigrationWorkflowStatusEnum,
+    -- | The status message of the migration workflow.
+    statusMessage :: 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 'StartWorkflowResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'startWorkflowResponse_arn' - The Amazon Resource Name (ARN) of the migration workflow.
+--
+-- 'id', 'startWorkflowResponse_id' - The ID of the migration workflow.
+--
+-- 'lastStartTime', 'startWorkflowResponse_lastStartTime' - The time at which the migration workflow was last started.
+--
+-- 'status', 'startWorkflowResponse_status' - The status of the migration workflow.
+--
+-- 'statusMessage', 'startWorkflowResponse_statusMessage' - The status message of the migration workflow.
+--
+-- 'httpStatus', 'startWorkflowResponse_httpStatus' - The response's http status code.
+newStartWorkflowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartWorkflowResponse
+newStartWorkflowResponse pHttpStatus_ =
+  StartWorkflowResponse'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastStartTime = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the migration workflow.
+startWorkflowResponse_arn :: Lens.Lens' StartWorkflowResponse (Prelude.Maybe Prelude.Text)
+startWorkflowResponse_arn = Lens.lens (\StartWorkflowResponse' {arn} -> arn) (\s@StartWorkflowResponse' {} a -> s {arn = a} :: StartWorkflowResponse)
+
+-- | The ID of the migration workflow.
+startWorkflowResponse_id :: Lens.Lens' StartWorkflowResponse (Prelude.Maybe Prelude.Text)
+startWorkflowResponse_id = Lens.lens (\StartWorkflowResponse' {id} -> id) (\s@StartWorkflowResponse' {} a -> s {id = a} :: StartWorkflowResponse)
+
+-- | The time at which the migration workflow was last started.
+startWorkflowResponse_lastStartTime :: Lens.Lens' StartWorkflowResponse (Prelude.Maybe Prelude.UTCTime)
+startWorkflowResponse_lastStartTime = Lens.lens (\StartWorkflowResponse' {lastStartTime} -> lastStartTime) (\s@StartWorkflowResponse' {} a -> s {lastStartTime = a} :: StartWorkflowResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the migration workflow.
+startWorkflowResponse_status :: Lens.Lens' StartWorkflowResponse (Prelude.Maybe MigrationWorkflowStatusEnum)
+startWorkflowResponse_status = Lens.lens (\StartWorkflowResponse' {status} -> status) (\s@StartWorkflowResponse' {} a -> s {status = a} :: StartWorkflowResponse)
+
+-- | The status message of the migration workflow.
+startWorkflowResponse_statusMessage :: Lens.Lens' StartWorkflowResponse (Prelude.Maybe Prelude.Text)
+startWorkflowResponse_statusMessage = Lens.lens (\StartWorkflowResponse' {statusMessage} -> statusMessage) (\s@StartWorkflowResponse' {} a -> s {statusMessage = a} :: StartWorkflowResponse)
+
+-- | The response's http status code.
+startWorkflowResponse_httpStatus :: Lens.Lens' StartWorkflowResponse Prelude.Int
+startWorkflowResponse_httpStatus = Lens.lens (\StartWorkflowResponse' {httpStatus} -> httpStatus) (\s@StartWorkflowResponse' {} a -> s {httpStatus = a} :: StartWorkflowResponse)
+
+instance Prelude.NFData StartWorkflowResponse where
+  rnf StartWorkflowResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastStartTime
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/StopWorkflow.hs b/gen/Amazonka/MigrationHubOrchestrator/StopWorkflow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/StopWorkflow.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.StopWorkflow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stop an ongoing migration workflow.
+module Amazonka.MigrationHubOrchestrator.StopWorkflow
+  ( -- * Creating a Request
+    StopWorkflow (..),
+    newStopWorkflow,
+
+    -- * Request Lenses
+    stopWorkflow_id,
+
+    -- * Destructuring the Response
+    StopWorkflowResponse (..),
+    newStopWorkflowResponse,
+
+    -- * Response Lenses
+    stopWorkflowResponse_arn,
+    stopWorkflowResponse_id,
+    stopWorkflowResponse_lastStopTime,
+    stopWorkflowResponse_status,
+    stopWorkflowResponse_statusMessage,
+    stopWorkflowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopWorkflow' smart constructor.
+data StopWorkflow = StopWorkflow'
+  { -- | The ID of the migration workflow.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopWorkflow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'stopWorkflow_id' - The ID of the migration workflow.
+newStopWorkflow ::
+  -- | 'id'
+  Prelude.Text ->
+  StopWorkflow
+newStopWorkflow pId_ = StopWorkflow' {id = pId_}
+
+-- | The ID of the migration workflow.
+stopWorkflow_id :: Lens.Lens' StopWorkflow Prelude.Text
+stopWorkflow_id = Lens.lens (\StopWorkflow' {id} -> id) (\s@StopWorkflow' {} a -> s {id = a} :: StopWorkflow)
+
+instance Core.AWSRequest StopWorkflow where
+  type AWSResponse StopWorkflow = StopWorkflowResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StopWorkflowResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "lastStopTime")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "statusMessage")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopWorkflow where
+  hashWithSalt _salt StopWorkflow' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData StopWorkflow where
+  rnf StopWorkflow' {..} = Prelude.rnf id
+
+instance Data.ToHeaders StopWorkflow where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopWorkflow where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath StopWorkflow where
+  toPath StopWorkflow' {..} =
+    Prelude.mconcat
+      ["/migrationworkflow/", Data.toBS id, "/stop"]
+
+instance Data.ToQuery StopWorkflow where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopWorkflowResponse' smart constructor.
+data StopWorkflowResponse = StopWorkflowResponse'
+  { -- | The Amazon Resource Name (ARN) of the migration workflow.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the migration workflow.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the migration workflow was stopped.
+    lastStopTime :: Prelude.Maybe Data.POSIX,
+    -- | The status of the migration workflow.
+    status :: Prelude.Maybe MigrationWorkflowStatusEnum,
+    -- | The status message of the migration workflow.
+    statusMessage :: 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 'StopWorkflowResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'stopWorkflowResponse_arn' - The Amazon Resource Name (ARN) of the migration workflow.
+--
+-- 'id', 'stopWorkflowResponse_id' - The ID of the migration workflow.
+--
+-- 'lastStopTime', 'stopWorkflowResponse_lastStopTime' - The time at which the migration workflow was stopped.
+--
+-- 'status', 'stopWorkflowResponse_status' - The status of the migration workflow.
+--
+-- 'statusMessage', 'stopWorkflowResponse_statusMessage' - The status message of the migration workflow.
+--
+-- 'httpStatus', 'stopWorkflowResponse_httpStatus' - The response's http status code.
+newStopWorkflowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopWorkflowResponse
+newStopWorkflowResponse pHttpStatus_ =
+  StopWorkflowResponse'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastStopTime = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the migration workflow.
+stopWorkflowResponse_arn :: Lens.Lens' StopWorkflowResponse (Prelude.Maybe Prelude.Text)
+stopWorkflowResponse_arn = Lens.lens (\StopWorkflowResponse' {arn} -> arn) (\s@StopWorkflowResponse' {} a -> s {arn = a} :: StopWorkflowResponse)
+
+-- | The ID of the migration workflow.
+stopWorkflowResponse_id :: Lens.Lens' StopWorkflowResponse (Prelude.Maybe Prelude.Text)
+stopWorkflowResponse_id = Lens.lens (\StopWorkflowResponse' {id} -> id) (\s@StopWorkflowResponse' {} a -> s {id = a} :: StopWorkflowResponse)
+
+-- | The time at which the migration workflow was stopped.
+stopWorkflowResponse_lastStopTime :: Lens.Lens' StopWorkflowResponse (Prelude.Maybe Prelude.UTCTime)
+stopWorkflowResponse_lastStopTime = Lens.lens (\StopWorkflowResponse' {lastStopTime} -> lastStopTime) (\s@StopWorkflowResponse' {} a -> s {lastStopTime = a} :: StopWorkflowResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the migration workflow.
+stopWorkflowResponse_status :: Lens.Lens' StopWorkflowResponse (Prelude.Maybe MigrationWorkflowStatusEnum)
+stopWorkflowResponse_status = Lens.lens (\StopWorkflowResponse' {status} -> status) (\s@StopWorkflowResponse' {} a -> s {status = a} :: StopWorkflowResponse)
+
+-- | The status message of the migration workflow.
+stopWorkflowResponse_statusMessage :: Lens.Lens' StopWorkflowResponse (Prelude.Maybe Prelude.Text)
+stopWorkflowResponse_statusMessage = Lens.lens (\StopWorkflowResponse' {statusMessage} -> statusMessage) (\s@StopWorkflowResponse' {} a -> s {statusMessage = a} :: StopWorkflowResponse)
+
+-- | The response's http status code.
+stopWorkflowResponse_httpStatus :: Lens.Lens' StopWorkflowResponse Prelude.Int
+stopWorkflowResponse_httpStatus = Lens.lens (\StopWorkflowResponse' {httpStatus} -> httpStatus) (\s@StopWorkflowResponse' {} a -> s {httpStatus = a} :: StopWorkflowResponse)
+
+instance Prelude.NFData StopWorkflowResponse where
+  rnf StopWorkflowResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastStopTime
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/TagResource.hs b/gen/Amazonka/MigrationHubOrchestrator/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/TagResource.hs
@@ -0,0 +1,169 @@
+{-# 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.MigrationHubOrchestrator.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Tag a resource by specifying its Amazon Resource Name (ARN).
+module Amazonka.MigrationHubOrchestrator.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource to which you want to add
+    -- tags.
+    resourceArn :: Prelude.Text,
+    -- | A collection of labels, in the form of key:value pairs, that apply to
+    -- this resource.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource to which you want to add
+-- tags.
+--
+-- 'tags', 'tagResource_tags' - A collection of labels, in the form of key:value pairs, that apply to
+-- this resource.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource to which you want to add
+-- tags.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | A collection of labels, in the form of key:value pairs, that apply to
+-- this resource.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types.hs b/gen/Amazonka/MigrationHubOrchestrator/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types.hs
@@ -0,0 +1,354 @@
+{-# 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.MigrationHubOrchestrator.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.MigrationHubOrchestrator.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * DataType
+    DataType (..),
+
+    -- * MigrationWorkflowStatusEnum
+    MigrationWorkflowStatusEnum (..),
+
+    -- * Owner
+    Owner (..),
+
+    -- * PluginHealth
+    PluginHealth (..),
+
+    -- * RunEnvironment
+    RunEnvironment (..),
+
+    -- * StepActionType
+    StepActionType (..),
+
+    -- * StepGroupStatus
+    StepGroupStatus (..),
+
+    -- * StepStatus
+    StepStatus (..),
+
+    -- * TargetType
+    TargetType (..),
+
+    -- * TemplateStatus
+    TemplateStatus (..),
+
+    -- * MigrationWorkflowSummary
+    MigrationWorkflowSummary (..),
+    newMigrationWorkflowSummary,
+    migrationWorkflowSummary_adsApplicationConfigurationName,
+    migrationWorkflowSummary_completedSteps,
+    migrationWorkflowSummary_creationTime,
+    migrationWorkflowSummary_endTime,
+    migrationWorkflowSummary_id,
+    migrationWorkflowSummary_name,
+    migrationWorkflowSummary_status,
+    migrationWorkflowSummary_statusMessage,
+    migrationWorkflowSummary_templateId,
+    migrationWorkflowSummary_totalSteps,
+
+    -- * PlatformCommand
+    PlatformCommand (..),
+    newPlatformCommand,
+    platformCommand_linux,
+    platformCommand_windows,
+
+    -- * PlatformScriptKey
+    PlatformScriptKey (..),
+    newPlatformScriptKey,
+    platformScriptKey_linux,
+    platformScriptKey_windows,
+
+    -- * PluginSummary
+    PluginSummary (..),
+    newPluginSummary,
+    pluginSummary_hostname,
+    pluginSummary_ipAddress,
+    pluginSummary_pluginId,
+    pluginSummary_registeredTime,
+    pluginSummary_status,
+    pluginSummary_version,
+
+    -- * StepAutomationConfiguration
+    StepAutomationConfiguration (..),
+    newStepAutomationConfiguration,
+    stepAutomationConfiguration_command,
+    stepAutomationConfiguration_runEnvironment,
+    stepAutomationConfiguration_scriptLocationS3Bucket,
+    stepAutomationConfiguration_scriptLocationS3Key,
+    stepAutomationConfiguration_targetType,
+
+    -- * StepInput
+    StepInput (..),
+    newStepInput,
+    stepInput_integerValue,
+    stepInput_listOfStringsValue,
+    stepInput_mapOfStringValue,
+    stepInput_stringValue,
+
+    -- * StepOutput
+    StepOutput (..),
+    newStepOutput,
+    stepOutput_dataType,
+    stepOutput_name,
+    stepOutput_required,
+
+    -- * TemplateInput
+    TemplateInput (..),
+    newTemplateInput,
+    templateInput_dataType,
+    templateInput_inputName,
+    templateInput_required,
+
+    -- * TemplateStepGroupSummary
+    TemplateStepGroupSummary (..),
+    newTemplateStepGroupSummary,
+    templateStepGroupSummary_id,
+    templateStepGroupSummary_name,
+    templateStepGroupSummary_next,
+    templateStepGroupSummary_previous,
+
+    -- * TemplateStepSummary
+    TemplateStepSummary (..),
+    newTemplateStepSummary,
+    templateStepSummary_id,
+    templateStepSummary_name,
+    templateStepSummary_next,
+    templateStepSummary_owner,
+    templateStepSummary_previous,
+    templateStepSummary_stepActionType,
+    templateStepSummary_stepGroupId,
+    templateStepSummary_targetType,
+    templateStepSummary_templateId,
+
+    -- * TemplateSummary
+    TemplateSummary (..),
+    newTemplateSummary,
+    templateSummary_arn,
+    templateSummary_description,
+    templateSummary_id,
+    templateSummary_name,
+
+    -- * Tool
+    Tool (..),
+    newTool,
+    tool_name,
+    tool_url,
+
+    -- * WorkflowStepAutomationConfiguration
+    WorkflowStepAutomationConfiguration (..),
+    newWorkflowStepAutomationConfiguration,
+    workflowStepAutomationConfiguration_command,
+    workflowStepAutomationConfiguration_runEnvironment,
+    workflowStepAutomationConfiguration_scriptLocationS3Bucket,
+    workflowStepAutomationConfiguration_scriptLocationS3Key,
+    workflowStepAutomationConfiguration_targetType,
+
+    -- * WorkflowStepGroupSummary
+    WorkflowStepGroupSummary (..),
+    newWorkflowStepGroupSummary,
+    workflowStepGroupSummary_id,
+    workflowStepGroupSummary_name,
+    workflowStepGroupSummary_next,
+    workflowStepGroupSummary_owner,
+    workflowStepGroupSummary_previous,
+    workflowStepGroupSummary_status,
+
+    -- * WorkflowStepOutput
+    WorkflowStepOutput (..),
+    newWorkflowStepOutput,
+    workflowStepOutput_dataType,
+    workflowStepOutput_name,
+    workflowStepOutput_required,
+    workflowStepOutput_value,
+
+    -- * WorkflowStepOutputUnion
+    WorkflowStepOutputUnion (..),
+    newWorkflowStepOutputUnion,
+    workflowStepOutputUnion_integerValue,
+    workflowStepOutputUnion_listOfStringValue,
+    workflowStepOutputUnion_stringValue,
+
+    -- * WorkflowStepSummary
+    WorkflowStepSummary (..),
+    newWorkflowStepSummary,
+    workflowStepSummary_description,
+    workflowStepSummary_name,
+    workflowStepSummary_next,
+    workflowStepSummary_noOfSrvCompleted,
+    workflowStepSummary_noOfSrvFailed,
+    workflowStepSummary_owner,
+    workflowStepSummary_previous,
+    workflowStepSummary_scriptLocation,
+    workflowStepSummary_status,
+    workflowStepSummary_statusMessage,
+    workflowStepSummary_stepActionType,
+    workflowStepSummary_stepId,
+    workflowStepSummary_totalNoOfSrv,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.MigrationHubOrchestrator.Types.DataType
+import Amazonka.MigrationHubOrchestrator.Types.MigrationWorkflowStatusEnum
+import Amazonka.MigrationHubOrchestrator.Types.MigrationWorkflowSummary
+import Amazonka.MigrationHubOrchestrator.Types.Owner
+import Amazonka.MigrationHubOrchestrator.Types.PlatformCommand
+import Amazonka.MigrationHubOrchestrator.Types.PlatformScriptKey
+import Amazonka.MigrationHubOrchestrator.Types.PluginHealth
+import Amazonka.MigrationHubOrchestrator.Types.PluginSummary
+import Amazonka.MigrationHubOrchestrator.Types.RunEnvironment
+import Amazonka.MigrationHubOrchestrator.Types.StepActionType
+import Amazonka.MigrationHubOrchestrator.Types.StepAutomationConfiguration
+import Amazonka.MigrationHubOrchestrator.Types.StepGroupStatus
+import Amazonka.MigrationHubOrchestrator.Types.StepInput
+import Amazonka.MigrationHubOrchestrator.Types.StepOutput
+import Amazonka.MigrationHubOrchestrator.Types.StepStatus
+import Amazonka.MigrationHubOrchestrator.Types.TargetType
+import Amazonka.MigrationHubOrchestrator.Types.TemplateInput
+import Amazonka.MigrationHubOrchestrator.Types.TemplateStatus
+import Amazonka.MigrationHubOrchestrator.Types.TemplateStepGroupSummary
+import Amazonka.MigrationHubOrchestrator.Types.TemplateStepSummary
+import Amazonka.MigrationHubOrchestrator.Types.TemplateSummary
+import Amazonka.MigrationHubOrchestrator.Types.Tool
+import Amazonka.MigrationHubOrchestrator.Types.WorkflowStepAutomationConfiguration
+import Amazonka.MigrationHubOrchestrator.Types.WorkflowStepGroupSummary
+import Amazonka.MigrationHubOrchestrator.Types.WorkflowStepOutput
+import Amazonka.MigrationHubOrchestrator.Types.WorkflowStepOutputUnion
+import Amazonka.MigrationHubOrchestrator.Types.WorkflowStepSummary
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2021-08-28@ of the Amazon Migration Hub Orchestrator SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev =
+        "MigrationHubOrchestrator",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "migrationhub-orchestrator",
+      Core.signingName = "migrationhub-orchestrator",
+      Core.version = "2021-08-28",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error =
+        Core.parseJSONError "MigrationHubOrchestrator",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | You do not have sufficient access to perform this action.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | An internal error has occurred.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | The resource is not available.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The request was denied due to request throttling.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | The input fails to satisfy the constraints specified by an AWS service.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/DataType.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/DataType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/DataType.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.Types.DataType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.DataType
+  ( DataType
+      ( ..,
+        DataType_INTEGER,
+        DataType_STRING,
+        DataType_STRINGLIST,
+        DataType_STRINGMAP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DataType = DataType'
+  { fromDataType ::
+      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 DataType_INTEGER :: DataType
+pattern DataType_INTEGER = DataType' "INTEGER"
+
+pattern DataType_STRING :: DataType
+pattern DataType_STRING = DataType' "STRING"
+
+pattern DataType_STRINGLIST :: DataType
+pattern DataType_STRINGLIST = DataType' "STRINGLIST"
+
+pattern DataType_STRINGMAP :: DataType
+pattern DataType_STRINGMAP = DataType' "STRINGMAP"
+
+{-# COMPLETE
+  DataType_INTEGER,
+  DataType_STRING,
+  DataType_STRINGLIST,
+  DataType_STRINGMAP,
+  DataType'
+  #-}
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/MigrationWorkflowStatusEnum.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/MigrationWorkflowStatusEnum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/MigrationWorkflowStatusEnum.hs
@@ -0,0 +1,131 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.Types.MigrationWorkflowStatusEnum
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.MigrationWorkflowStatusEnum
+  ( MigrationWorkflowStatusEnum
+      ( ..,
+        MigrationWorkflowStatusEnum_COMPLETED,
+        MigrationWorkflowStatusEnum_CREATING,
+        MigrationWorkflowStatusEnum_CREATION_FAILED,
+        MigrationWorkflowStatusEnum_DELETED,
+        MigrationWorkflowStatusEnum_DELETING,
+        MigrationWorkflowStatusEnum_DELETION_FAILED,
+        MigrationWorkflowStatusEnum_IN_PROGRESS,
+        MigrationWorkflowStatusEnum_NOT_STARTED,
+        MigrationWorkflowStatusEnum_PAUSED,
+        MigrationWorkflowStatusEnum_PAUSING,
+        MigrationWorkflowStatusEnum_PAUSING_FAILED,
+        MigrationWorkflowStatusEnum_STARTING,
+        MigrationWorkflowStatusEnum_USER_ATTENTION_REQUIRED,
+        MigrationWorkflowStatusEnum_WORKFLOW_FAILED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype MigrationWorkflowStatusEnum = MigrationWorkflowStatusEnum'
+  { fromMigrationWorkflowStatusEnum ::
+      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 MigrationWorkflowStatusEnum_COMPLETED :: MigrationWorkflowStatusEnum
+pattern MigrationWorkflowStatusEnum_COMPLETED = MigrationWorkflowStatusEnum' "COMPLETED"
+
+pattern MigrationWorkflowStatusEnum_CREATING :: MigrationWorkflowStatusEnum
+pattern MigrationWorkflowStatusEnum_CREATING = MigrationWorkflowStatusEnum' "CREATING"
+
+pattern MigrationWorkflowStatusEnum_CREATION_FAILED :: MigrationWorkflowStatusEnum
+pattern MigrationWorkflowStatusEnum_CREATION_FAILED = MigrationWorkflowStatusEnum' "CREATION_FAILED"
+
+pattern MigrationWorkflowStatusEnum_DELETED :: MigrationWorkflowStatusEnum
+pattern MigrationWorkflowStatusEnum_DELETED = MigrationWorkflowStatusEnum' "DELETED"
+
+pattern MigrationWorkflowStatusEnum_DELETING :: MigrationWorkflowStatusEnum
+pattern MigrationWorkflowStatusEnum_DELETING = MigrationWorkflowStatusEnum' "DELETING"
+
+pattern MigrationWorkflowStatusEnum_DELETION_FAILED :: MigrationWorkflowStatusEnum
+pattern MigrationWorkflowStatusEnum_DELETION_FAILED = MigrationWorkflowStatusEnum' "DELETION_FAILED"
+
+pattern MigrationWorkflowStatusEnum_IN_PROGRESS :: MigrationWorkflowStatusEnum
+pattern MigrationWorkflowStatusEnum_IN_PROGRESS = MigrationWorkflowStatusEnum' "IN_PROGRESS"
+
+pattern MigrationWorkflowStatusEnum_NOT_STARTED :: MigrationWorkflowStatusEnum
+pattern MigrationWorkflowStatusEnum_NOT_STARTED = MigrationWorkflowStatusEnum' "NOT_STARTED"
+
+pattern MigrationWorkflowStatusEnum_PAUSED :: MigrationWorkflowStatusEnum
+pattern MigrationWorkflowStatusEnum_PAUSED = MigrationWorkflowStatusEnum' "PAUSED"
+
+pattern MigrationWorkflowStatusEnum_PAUSING :: MigrationWorkflowStatusEnum
+pattern MigrationWorkflowStatusEnum_PAUSING = MigrationWorkflowStatusEnum' "PAUSING"
+
+pattern MigrationWorkflowStatusEnum_PAUSING_FAILED :: MigrationWorkflowStatusEnum
+pattern MigrationWorkflowStatusEnum_PAUSING_FAILED = MigrationWorkflowStatusEnum' "PAUSING_FAILED"
+
+pattern MigrationWorkflowStatusEnum_STARTING :: MigrationWorkflowStatusEnum
+pattern MigrationWorkflowStatusEnum_STARTING = MigrationWorkflowStatusEnum' "STARTING"
+
+pattern MigrationWorkflowStatusEnum_USER_ATTENTION_REQUIRED :: MigrationWorkflowStatusEnum
+pattern MigrationWorkflowStatusEnum_USER_ATTENTION_REQUIRED = MigrationWorkflowStatusEnum' "USER_ATTENTION_REQUIRED"
+
+pattern MigrationWorkflowStatusEnum_WORKFLOW_FAILED :: MigrationWorkflowStatusEnum
+pattern MigrationWorkflowStatusEnum_WORKFLOW_FAILED = MigrationWorkflowStatusEnum' "WORKFLOW_FAILED"
+
+{-# COMPLETE
+  MigrationWorkflowStatusEnum_COMPLETED,
+  MigrationWorkflowStatusEnum_CREATING,
+  MigrationWorkflowStatusEnum_CREATION_FAILED,
+  MigrationWorkflowStatusEnum_DELETED,
+  MigrationWorkflowStatusEnum_DELETING,
+  MigrationWorkflowStatusEnum_DELETION_FAILED,
+  MigrationWorkflowStatusEnum_IN_PROGRESS,
+  MigrationWorkflowStatusEnum_NOT_STARTED,
+  MigrationWorkflowStatusEnum_PAUSED,
+  MigrationWorkflowStatusEnum_PAUSING,
+  MigrationWorkflowStatusEnum_PAUSING_FAILED,
+  MigrationWorkflowStatusEnum_STARTING,
+  MigrationWorkflowStatusEnum_USER_ATTENTION_REQUIRED,
+  MigrationWorkflowStatusEnum_WORKFLOW_FAILED,
+  MigrationWorkflowStatusEnum'
+  #-}
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/MigrationWorkflowSummary.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/MigrationWorkflowSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/MigrationWorkflowSummary.hs
@@ -0,0 +1,182 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.Types.MigrationWorkflowSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.MigrationWorkflowSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types.MigrationWorkflowStatusEnum
+import qualified Amazonka.Prelude as Prelude
+
+-- | The summary of a migration workflow.
+--
+-- /See:/ 'newMigrationWorkflowSummary' smart constructor.
+data MigrationWorkflowSummary = MigrationWorkflowSummary'
+  { -- | The name of the application configured in Application Discovery Service.
+    adsApplicationConfigurationName :: Prelude.Maybe Prelude.Text,
+    -- | The steps completed in the migration workflow.
+    completedSteps :: Prelude.Maybe Prelude.Int,
+    -- | The time at which the migration workflow was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The time at which the migration workflow ended.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | The ID of the migration workflow.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the migration workflow.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The status of the migration workflow.
+    status :: Prelude.Maybe MigrationWorkflowStatusEnum,
+    -- | The status message of the migration workflow.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the template.
+    templateId :: Prelude.Maybe Prelude.Text,
+    -- | All the steps in a migration workflow.
+    totalSteps :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MigrationWorkflowSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'adsApplicationConfigurationName', 'migrationWorkflowSummary_adsApplicationConfigurationName' - The name of the application configured in Application Discovery Service.
+--
+-- 'completedSteps', 'migrationWorkflowSummary_completedSteps' - The steps completed in the migration workflow.
+--
+-- 'creationTime', 'migrationWorkflowSummary_creationTime' - The time at which the migration workflow was created.
+--
+-- 'endTime', 'migrationWorkflowSummary_endTime' - The time at which the migration workflow ended.
+--
+-- 'id', 'migrationWorkflowSummary_id' - The ID of the migration workflow.
+--
+-- 'name', 'migrationWorkflowSummary_name' - The name of the migration workflow.
+--
+-- 'status', 'migrationWorkflowSummary_status' - The status of the migration workflow.
+--
+-- 'statusMessage', 'migrationWorkflowSummary_statusMessage' - The status message of the migration workflow.
+--
+-- 'templateId', 'migrationWorkflowSummary_templateId' - The ID of the template.
+--
+-- 'totalSteps', 'migrationWorkflowSummary_totalSteps' - All the steps in a migration workflow.
+newMigrationWorkflowSummary ::
+  MigrationWorkflowSummary
+newMigrationWorkflowSummary =
+  MigrationWorkflowSummary'
+    { adsApplicationConfigurationName =
+        Prelude.Nothing,
+      completedSteps = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      endTime = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      templateId = Prelude.Nothing,
+      totalSteps = Prelude.Nothing
+    }
+
+-- | The name of the application configured in Application Discovery Service.
+migrationWorkflowSummary_adsApplicationConfigurationName :: Lens.Lens' MigrationWorkflowSummary (Prelude.Maybe Prelude.Text)
+migrationWorkflowSummary_adsApplicationConfigurationName = Lens.lens (\MigrationWorkflowSummary' {adsApplicationConfigurationName} -> adsApplicationConfigurationName) (\s@MigrationWorkflowSummary' {} a -> s {adsApplicationConfigurationName = a} :: MigrationWorkflowSummary)
+
+-- | The steps completed in the migration workflow.
+migrationWorkflowSummary_completedSteps :: Lens.Lens' MigrationWorkflowSummary (Prelude.Maybe Prelude.Int)
+migrationWorkflowSummary_completedSteps = Lens.lens (\MigrationWorkflowSummary' {completedSteps} -> completedSteps) (\s@MigrationWorkflowSummary' {} a -> s {completedSteps = a} :: MigrationWorkflowSummary)
+
+-- | The time at which the migration workflow was created.
+migrationWorkflowSummary_creationTime :: Lens.Lens' MigrationWorkflowSummary (Prelude.Maybe Prelude.UTCTime)
+migrationWorkflowSummary_creationTime = Lens.lens (\MigrationWorkflowSummary' {creationTime} -> creationTime) (\s@MigrationWorkflowSummary' {} a -> s {creationTime = a} :: MigrationWorkflowSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which the migration workflow ended.
+migrationWorkflowSummary_endTime :: Lens.Lens' MigrationWorkflowSummary (Prelude.Maybe Prelude.UTCTime)
+migrationWorkflowSummary_endTime = Lens.lens (\MigrationWorkflowSummary' {endTime} -> endTime) (\s@MigrationWorkflowSummary' {} a -> s {endTime = a} :: MigrationWorkflowSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the migration workflow.
+migrationWorkflowSummary_id :: Lens.Lens' MigrationWorkflowSummary (Prelude.Maybe Prelude.Text)
+migrationWorkflowSummary_id = Lens.lens (\MigrationWorkflowSummary' {id} -> id) (\s@MigrationWorkflowSummary' {} a -> s {id = a} :: MigrationWorkflowSummary)
+
+-- | The name of the migration workflow.
+migrationWorkflowSummary_name :: Lens.Lens' MigrationWorkflowSummary (Prelude.Maybe Prelude.Text)
+migrationWorkflowSummary_name = Lens.lens (\MigrationWorkflowSummary' {name} -> name) (\s@MigrationWorkflowSummary' {} a -> s {name = a} :: MigrationWorkflowSummary)
+
+-- | The status of the migration workflow.
+migrationWorkflowSummary_status :: Lens.Lens' MigrationWorkflowSummary (Prelude.Maybe MigrationWorkflowStatusEnum)
+migrationWorkflowSummary_status = Lens.lens (\MigrationWorkflowSummary' {status} -> status) (\s@MigrationWorkflowSummary' {} a -> s {status = a} :: MigrationWorkflowSummary)
+
+-- | The status message of the migration workflow.
+migrationWorkflowSummary_statusMessage :: Lens.Lens' MigrationWorkflowSummary (Prelude.Maybe Prelude.Text)
+migrationWorkflowSummary_statusMessage = Lens.lens (\MigrationWorkflowSummary' {statusMessage} -> statusMessage) (\s@MigrationWorkflowSummary' {} a -> s {statusMessage = a} :: MigrationWorkflowSummary)
+
+-- | The ID of the template.
+migrationWorkflowSummary_templateId :: Lens.Lens' MigrationWorkflowSummary (Prelude.Maybe Prelude.Text)
+migrationWorkflowSummary_templateId = Lens.lens (\MigrationWorkflowSummary' {templateId} -> templateId) (\s@MigrationWorkflowSummary' {} a -> s {templateId = a} :: MigrationWorkflowSummary)
+
+-- | All the steps in a migration workflow.
+migrationWorkflowSummary_totalSteps :: Lens.Lens' MigrationWorkflowSummary (Prelude.Maybe Prelude.Int)
+migrationWorkflowSummary_totalSteps = Lens.lens (\MigrationWorkflowSummary' {totalSteps} -> totalSteps) (\s@MigrationWorkflowSummary' {} a -> s {totalSteps = a} :: MigrationWorkflowSummary)
+
+instance Data.FromJSON MigrationWorkflowSummary where
+  parseJSON =
+    Data.withObject
+      "MigrationWorkflowSummary"
+      ( \x ->
+          MigrationWorkflowSummary'
+            Prelude.<$> (x Data..:? "adsApplicationConfigurationName")
+            Prelude.<*> (x Data..:? "completedSteps")
+            Prelude.<*> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "endTime")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "statusMessage")
+            Prelude.<*> (x Data..:? "templateId")
+            Prelude.<*> (x Data..:? "totalSteps")
+      )
+
+instance Prelude.Hashable MigrationWorkflowSummary where
+  hashWithSalt _salt MigrationWorkflowSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` adsApplicationConfigurationName
+      `Prelude.hashWithSalt` completedSteps
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` templateId
+      `Prelude.hashWithSalt` totalSteps
+
+instance Prelude.NFData MigrationWorkflowSummary where
+  rnf MigrationWorkflowSummary' {..} =
+    Prelude.rnf adsApplicationConfigurationName
+      `Prelude.seq` Prelude.rnf completedSteps
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf templateId
+      `Prelude.seq` Prelude.rnf totalSteps
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/Owner.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/Owner.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/Owner.hs
@@ -0,0 +1,68 @@
+{-# 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.MigrationHubOrchestrator.Types.Owner
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.Owner
+  ( Owner
+      ( ..,
+        Owner_AWS_MANAGED,
+        Owner_CUSTOM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Owner = Owner' {fromOwner :: 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 Owner_AWS_MANAGED :: Owner
+pattern Owner_AWS_MANAGED = Owner' "AWS_MANAGED"
+
+pattern Owner_CUSTOM :: Owner
+pattern Owner_CUSTOM = Owner' "CUSTOM"
+
+{-# COMPLETE
+  Owner_AWS_MANAGED,
+  Owner_CUSTOM,
+  Owner'
+  #-}
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/PlatformCommand.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/PlatformCommand.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/PlatformCommand.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.Types.PlatformCommand
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.PlatformCommand 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
+
+-- | Command to be run on a particular operating system.
+--
+-- /See:/ 'newPlatformCommand' smart constructor.
+data PlatformCommand = PlatformCommand'
+  { -- | Command for Linux.
+    linux :: Prelude.Maybe Prelude.Text,
+    -- | Command for Windows.
+    windows :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PlatformCommand' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'linux', 'platformCommand_linux' - Command for Linux.
+--
+-- 'windows', 'platformCommand_windows' - Command for Windows.
+newPlatformCommand ::
+  PlatformCommand
+newPlatformCommand =
+  PlatformCommand'
+    { linux = Prelude.Nothing,
+      windows = Prelude.Nothing
+    }
+
+-- | Command for Linux.
+platformCommand_linux :: Lens.Lens' PlatformCommand (Prelude.Maybe Prelude.Text)
+platformCommand_linux = Lens.lens (\PlatformCommand' {linux} -> linux) (\s@PlatformCommand' {} a -> s {linux = a} :: PlatformCommand)
+
+-- | Command for Windows.
+platformCommand_windows :: Lens.Lens' PlatformCommand (Prelude.Maybe Prelude.Text)
+platformCommand_windows = Lens.lens (\PlatformCommand' {windows} -> windows) (\s@PlatformCommand' {} a -> s {windows = a} :: PlatformCommand)
+
+instance Data.FromJSON PlatformCommand where
+  parseJSON =
+    Data.withObject
+      "PlatformCommand"
+      ( \x ->
+          PlatformCommand'
+            Prelude.<$> (x Data..:? "linux")
+            Prelude.<*> (x Data..:? "windows")
+      )
+
+instance Prelude.Hashable PlatformCommand where
+  hashWithSalt _salt PlatformCommand' {..} =
+    _salt
+      `Prelude.hashWithSalt` linux
+      `Prelude.hashWithSalt` windows
+
+instance Prelude.NFData PlatformCommand where
+  rnf PlatformCommand' {..} =
+    Prelude.rnf linux `Prelude.seq` Prelude.rnf windows
+
+instance Data.ToJSON PlatformCommand where
+  toJSON PlatformCommand' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("linux" Data..=) Prelude.<$> linux,
+            ("windows" Data..=) Prelude.<$> windows
+          ]
+      )
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/PlatformScriptKey.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/PlatformScriptKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/PlatformScriptKey.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.Types.PlatformScriptKey
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.PlatformScriptKey where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The script location for a particular operating system.
+--
+-- /See:/ 'newPlatformScriptKey' smart constructor.
+data PlatformScriptKey = PlatformScriptKey'
+  { -- | The script location for Linux.
+    linux :: Prelude.Maybe Prelude.Text,
+    -- | The script location for Windows.
+    windows :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PlatformScriptKey' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'linux', 'platformScriptKey_linux' - The script location for Linux.
+--
+-- 'windows', 'platformScriptKey_windows' - The script location for Windows.
+newPlatformScriptKey ::
+  PlatformScriptKey
+newPlatformScriptKey =
+  PlatformScriptKey'
+    { linux = Prelude.Nothing,
+      windows = Prelude.Nothing
+    }
+
+-- | The script location for Linux.
+platformScriptKey_linux :: Lens.Lens' PlatformScriptKey (Prelude.Maybe Prelude.Text)
+platformScriptKey_linux = Lens.lens (\PlatformScriptKey' {linux} -> linux) (\s@PlatformScriptKey' {} a -> s {linux = a} :: PlatformScriptKey)
+
+-- | The script location for Windows.
+platformScriptKey_windows :: Lens.Lens' PlatformScriptKey (Prelude.Maybe Prelude.Text)
+platformScriptKey_windows = Lens.lens (\PlatformScriptKey' {windows} -> windows) (\s@PlatformScriptKey' {} a -> s {windows = a} :: PlatformScriptKey)
+
+instance Data.FromJSON PlatformScriptKey where
+  parseJSON =
+    Data.withObject
+      "PlatformScriptKey"
+      ( \x ->
+          PlatformScriptKey'
+            Prelude.<$> (x Data..:? "linux")
+            Prelude.<*> (x Data..:? "windows")
+      )
+
+instance Prelude.Hashable PlatformScriptKey where
+  hashWithSalt _salt PlatformScriptKey' {..} =
+    _salt
+      `Prelude.hashWithSalt` linux
+      `Prelude.hashWithSalt` windows
+
+instance Prelude.NFData PlatformScriptKey where
+  rnf PlatformScriptKey' {..} =
+    Prelude.rnf linux `Prelude.seq` Prelude.rnf windows
+
+instance Data.ToJSON PlatformScriptKey where
+  toJSON PlatformScriptKey' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("linux" Data..=) Prelude.<$> linux,
+            ("windows" Data..=) Prelude.<$> windows
+          ]
+      )
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/PluginHealth.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/PluginHealth.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/PluginHealth.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.Types.PluginHealth
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.PluginHealth
+  ( PluginHealth
+      ( ..,
+        PluginHealth_HEALTHY,
+        PluginHealth_UNHEALTHY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PluginHealth = PluginHealth'
+  { fromPluginHealth ::
+      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 PluginHealth_HEALTHY :: PluginHealth
+pattern PluginHealth_HEALTHY = PluginHealth' "HEALTHY"
+
+pattern PluginHealth_UNHEALTHY :: PluginHealth
+pattern PluginHealth_UNHEALTHY = PluginHealth' "UNHEALTHY"
+
+{-# COMPLETE
+  PluginHealth_HEALTHY,
+  PluginHealth_UNHEALTHY,
+  PluginHealth'
+  #-}
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/PluginSummary.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/PluginSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/PluginSummary.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.Types.PluginSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.PluginSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types.PluginHealth
+import qualified Amazonka.Prelude as Prelude
+
+-- | The summary of the Migration Hub Orchestrator plugin.
+--
+-- /See:/ 'newPluginSummary' smart constructor.
+data PluginSummary = PluginSummary'
+  { -- | The name of the host.
+    hostname :: Prelude.Maybe Prelude.Text,
+    -- | The IP address at which the plugin is located.
+    ipAddress :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the plugin.
+    pluginId :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the plugin was registered.
+    registeredTime :: Prelude.Maybe Prelude.Text,
+    -- | The status of the plugin.
+    status :: Prelude.Maybe PluginHealth,
+    -- | The version of the plugin.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PluginSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'hostname', 'pluginSummary_hostname' - The name of the host.
+--
+-- 'ipAddress', 'pluginSummary_ipAddress' - The IP address at which the plugin is located.
+--
+-- 'pluginId', 'pluginSummary_pluginId' - The ID of the plugin.
+--
+-- 'registeredTime', 'pluginSummary_registeredTime' - The time at which the plugin was registered.
+--
+-- 'status', 'pluginSummary_status' - The status of the plugin.
+--
+-- 'version', 'pluginSummary_version' - The version of the plugin.
+newPluginSummary ::
+  PluginSummary
+newPluginSummary =
+  PluginSummary'
+    { hostname = Prelude.Nothing,
+      ipAddress = Prelude.Nothing,
+      pluginId = Prelude.Nothing,
+      registeredTime = Prelude.Nothing,
+      status = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The name of the host.
+pluginSummary_hostname :: Lens.Lens' PluginSummary (Prelude.Maybe Prelude.Text)
+pluginSummary_hostname = Lens.lens (\PluginSummary' {hostname} -> hostname) (\s@PluginSummary' {} a -> s {hostname = a} :: PluginSummary)
+
+-- | The IP address at which the plugin is located.
+pluginSummary_ipAddress :: Lens.Lens' PluginSummary (Prelude.Maybe Prelude.Text)
+pluginSummary_ipAddress = Lens.lens (\PluginSummary' {ipAddress} -> ipAddress) (\s@PluginSummary' {} a -> s {ipAddress = a} :: PluginSummary)
+
+-- | The ID of the plugin.
+pluginSummary_pluginId :: Lens.Lens' PluginSummary (Prelude.Maybe Prelude.Text)
+pluginSummary_pluginId = Lens.lens (\PluginSummary' {pluginId} -> pluginId) (\s@PluginSummary' {} a -> s {pluginId = a} :: PluginSummary)
+
+-- | The time at which the plugin was registered.
+pluginSummary_registeredTime :: Lens.Lens' PluginSummary (Prelude.Maybe Prelude.Text)
+pluginSummary_registeredTime = Lens.lens (\PluginSummary' {registeredTime} -> registeredTime) (\s@PluginSummary' {} a -> s {registeredTime = a} :: PluginSummary)
+
+-- | The status of the plugin.
+pluginSummary_status :: Lens.Lens' PluginSummary (Prelude.Maybe PluginHealth)
+pluginSummary_status = Lens.lens (\PluginSummary' {status} -> status) (\s@PluginSummary' {} a -> s {status = a} :: PluginSummary)
+
+-- | The version of the plugin.
+pluginSummary_version :: Lens.Lens' PluginSummary (Prelude.Maybe Prelude.Text)
+pluginSummary_version = Lens.lens (\PluginSummary' {version} -> version) (\s@PluginSummary' {} a -> s {version = a} :: PluginSummary)
+
+instance Data.FromJSON PluginSummary where
+  parseJSON =
+    Data.withObject
+      "PluginSummary"
+      ( \x ->
+          PluginSummary'
+            Prelude.<$> (x Data..:? "hostname")
+            Prelude.<*> (x Data..:? "ipAddress")
+            Prelude.<*> (x Data..:? "pluginId")
+            Prelude.<*> (x Data..:? "registeredTime")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance Prelude.Hashable PluginSummary where
+  hashWithSalt _salt PluginSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` hostname
+      `Prelude.hashWithSalt` ipAddress
+      `Prelude.hashWithSalt` pluginId
+      `Prelude.hashWithSalt` registeredTime
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData PluginSummary where
+  rnf PluginSummary' {..} =
+    Prelude.rnf hostname
+      `Prelude.seq` Prelude.rnf ipAddress
+      `Prelude.seq` Prelude.rnf pluginId
+      `Prelude.seq` Prelude.rnf registeredTime
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf version
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/RunEnvironment.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/RunEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/RunEnvironment.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.Types.RunEnvironment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.RunEnvironment
+  ( RunEnvironment
+      ( ..,
+        RunEnvironment_AWS,
+        RunEnvironment_ONPREMISE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RunEnvironment = RunEnvironment'
+  { fromRunEnvironment ::
+      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 RunEnvironment_AWS :: RunEnvironment
+pattern RunEnvironment_AWS = RunEnvironment' "AWS"
+
+pattern RunEnvironment_ONPREMISE :: RunEnvironment
+pattern RunEnvironment_ONPREMISE = RunEnvironment' "ONPREMISE"
+
+{-# COMPLETE
+  RunEnvironment_AWS,
+  RunEnvironment_ONPREMISE,
+  RunEnvironment'
+  #-}
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/StepActionType.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/StepActionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/StepActionType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.Types.StepActionType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.StepActionType
+  ( StepActionType
+      ( ..,
+        StepActionType_AUTOMATED,
+        StepActionType_MANUAL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StepActionType = StepActionType'
+  { fromStepActionType ::
+      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 StepActionType_AUTOMATED :: StepActionType
+pattern StepActionType_AUTOMATED = StepActionType' "AUTOMATED"
+
+pattern StepActionType_MANUAL :: StepActionType
+pattern StepActionType_MANUAL = StepActionType' "MANUAL"
+
+{-# COMPLETE
+  StepActionType_AUTOMATED,
+  StepActionType_MANUAL,
+  StepActionType'
+  #-}
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/StepAutomationConfiguration.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/StepAutomationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/StepAutomationConfiguration.hs
@@ -0,0 +1,125 @@
+{-# 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.MigrationHubOrchestrator.Types.StepAutomationConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.StepAutomationConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types.PlatformCommand
+import Amazonka.MigrationHubOrchestrator.Types.PlatformScriptKey
+import Amazonka.MigrationHubOrchestrator.Types.RunEnvironment
+import Amazonka.MigrationHubOrchestrator.Types.TargetType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The custom script to run tests on source or target environments.
+--
+-- /See:/ 'newStepAutomationConfiguration' smart constructor.
+data StepAutomationConfiguration = StepAutomationConfiguration'
+  { -- | The command to run the script.
+    command :: Prelude.Maybe PlatformCommand,
+    -- | The source or target environment.
+    runEnvironment :: Prelude.Maybe RunEnvironment,
+    -- | The Amazon S3 bucket where the script is located.
+    scriptLocationS3Bucket :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 key for the script location.
+    scriptLocationS3Key :: Prelude.Maybe PlatformScriptKey,
+    -- | The servers on which to run the script.
+    targetType :: Prelude.Maybe TargetType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StepAutomationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'command', 'stepAutomationConfiguration_command' - The command to run the script.
+--
+-- 'runEnvironment', 'stepAutomationConfiguration_runEnvironment' - The source or target environment.
+--
+-- 'scriptLocationS3Bucket', 'stepAutomationConfiguration_scriptLocationS3Bucket' - The Amazon S3 bucket where the script is located.
+--
+-- 'scriptLocationS3Key', 'stepAutomationConfiguration_scriptLocationS3Key' - The Amazon S3 key for the script location.
+--
+-- 'targetType', 'stepAutomationConfiguration_targetType' - The servers on which to run the script.
+newStepAutomationConfiguration ::
+  StepAutomationConfiguration
+newStepAutomationConfiguration =
+  StepAutomationConfiguration'
+    { command =
+        Prelude.Nothing,
+      runEnvironment = Prelude.Nothing,
+      scriptLocationS3Bucket = Prelude.Nothing,
+      scriptLocationS3Key = Prelude.Nothing,
+      targetType = Prelude.Nothing
+    }
+
+-- | The command to run the script.
+stepAutomationConfiguration_command :: Lens.Lens' StepAutomationConfiguration (Prelude.Maybe PlatformCommand)
+stepAutomationConfiguration_command = Lens.lens (\StepAutomationConfiguration' {command} -> command) (\s@StepAutomationConfiguration' {} a -> s {command = a} :: StepAutomationConfiguration)
+
+-- | The source or target environment.
+stepAutomationConfiguration_runEnvironment :: Lens.Lens' StepAutomationConfiguration (Prelude.Maybe RunEnvironment)
+stepAutomationConfiguration_runEnvironment = Lens.lens (\StepAutomationConfiguration' {runEnvironment} -> runEnvironment) (\s@StepAutomationConfiguration' {} a -> s {runEnvironment = a} :: StepAutomationConfiguration)
+
+-- | The Amazon S3 bucket where the script is located.
+stepAutomationConfiguration_scriptLocationS3Bucket :: Lens.Lens' StepAutomationConfiguration (Prelude.Maybe Prelude.Text)
+stepAutomationConfiguration_scriptLocationS3Bucket = Lens.lens (\StepAutomationConfiguration' {scriptLocationS3Bucket} -> scriptLocationS3Bucket) (\s@StepAutomationConfiguration' {} a -> s {scriptLocationS3Bucket = a} :: StepAutomationConfiguration)
+
+-- | The Amazon S3 key for the script location.
+stepAutomationConfiguration_scriptLocationS3Key :: Lens.Lens' StepAutomationConfiguration (Prelude.Maybe PlatformScriptKey)
+stepAutomationConfiguration_scriptLocationS3Key = Lens.lens (\StepAutomationConfiguration' {scriptLocationS3Key} -> scriptLocationS3Key) (\s@StepAutomationConfiguration' {} a -> s {scriptLocationS3Key = a} :: StepAutomationConfiguration)
+
+-- | The servers on which to run the script.
+stepAutomationConfiguration_targetType :: Lens.Lens' StepAutomationConfiguration (Prelude.Maybe TargetType)
+stepAutomationConfiguration_targetType = Lens.lens (\StepAutomationConfiguration' {targetType} -> targetType) (\s@StepAutomationConfiguration' {} a -> s {targetType = a} :: StepAutomationConfiguration)
+
+instance Data.FromJSON StepAutomationConfiguration where
+  parseJSON =
+    Data.withObject
+      "StepAutomationConfiguration"
+      ( \x ->
+          StepAutomationConfiguration'
+            Prelude.<$> (x Data..:? "command")
+            Prelude.<*> (x Data..:? "runEnvironment")
+            Prelude.<*> (x Data..:? "scriptLocationS3Bucket")
+            Prelude.<*> (x Data..:? "scriptLocationS3Key")
+            Prelude.<*> (x Data..:? "targetType")
+      )
+
+instance Prelude.Hashable StepAutomationConfiguration where
+  hashWithSalt _salt StepAutomationConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` command
+      `Prelude.hashWithSalt` runEnvironment
+      `Prelude.hashWithSalt` scriptLocationS3Bucket
+      `Prelude.hashWithSalt` scriptLocationS3Key
+      `Prelude.hashWithSalt` targetType
+
+instance Prelude.NFData StepAutomationConfiguration where
+  rnf StepAutomationConfiguration' {..} =
+    Prelude.rnf command
+      `Prelude.seq` Prelude.rnf runEnvironment
+      `Prelude.seq` Prelude.rnf scriptLocationS3Bucket
+      `Prelude.seq` Prelude.rnf scriptLocationS3Key
+      `Prelude.seq` Prelude.rnf targetType
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/StepGroupStatus.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/StepGroupStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/StepGroupStatus.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.MigrationHubOrchestrator.Types.StepGroupStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.StepGroupStatus
+  ( StepGroupStatus
+      ( ..,
+        StepGroupStatus_AWAITING_DEPENDENCIES,
+        StepGroupStatus_COMPLETED,
+        StepGroupStatus_FAILED,
+        StepGroupStatus_IN_PROGRESS,
+        StepGroupStatus_PAUSED,
+        StepGroupStatus_PAUSING,
+        StepGroupStatus_READY,
+        StepGroupStatus_USER_ATTENTION_REQUIRED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StepGroupStatus = StepGroupStatus'
+  { fromStepGroupStatus ::
+      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 StepGroupStatus_AWAITING_DEPENDENCIES :: StepGroupStatus
+pattern StepGroupStatus_AWAITING_DEPENDENCIES = StepGroupStatus' "AWAITING_DEPENDENCIES"
+
+pattern StepGroupStatus_COMPLETED :: StepGroupStatus
+pattern StepGroupStatus_COMPLETED = StepGroupStatus' "COMPLETED"
+
+pattern StepGroupStatus_FAILED :: StepGroupStatus
+pattern StepGroupStatus_FAILED = StepGroupStatus' "FAILED"
+
+pattern StepGroupStatus_IN_PROGRESS :: StepGroupStatus
+pattern StepGroupStatus_IN_PROGRESS = StepGroupStatus' "IN_PROGRESS"
+
+pattern StepGroupStatus_PAUSED :: StepGroupStatus
+pattern StepGroupStatus_PAUSED = StepGroupStatus' "PAUSED"
+
+pattern StepGroupStatus_PAUSING :: StepGroupStatus
+pattern StepGroupStatus_PAUSING = StepGroupStatus' "PAUSING"
+
+pattern StepGroupStatus_READY :: StepGroupStatus
+pattern StepGroupStatus_READY = StepGroupStatus' "READY"
+
+pattern StepGroupStatus_USER_ATTENTION_REQUIRED :: StepGroupStatus
+pattern StepGroupStatus_USER_ATTENTION_REQUIRED = StepGroupStatus' "USER_ATTENTION_REQUIRED"
+
+{-# COMPLETE
+  StepGroupStatus_AWAITING_DEPENDENCIES,
+  StepGroupStatus_COMPLETED,
+  StepGroupStatus_FAILED,
+  StepGroupStatus_IN_PROGRESS,
+  StepGroupStatus_PAUSED,
+  StepGroupStatus_PAUSING,
+  StepGroupStatus_READY,
+  StepGroupStatus_USER_ATTENTION_REQUIRED,
+  StepGroupStatus'
+  #-}
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/StepInput.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/StepInput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/StepInput.hs
@@ -0,0 +1,129 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.Types.StepInput
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.StepInput where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A map of key value pairs that is generated when you create a migration
+-- workflow. The key value pairs will differ based on your selection of the
+-- template.
+--
+-- /See:/ 'newStepInput' smart constructor.
+data StepInput = StepInput'
+  { -- | The value of the integer.
+    integerValue :: Prelude.Maybe Prelude.Int,
+    -- | List of string values.
+    listOfStringsValue :: Prelude.Maybe [Prelude.Text],
+    -- | Map of string values.
+    mapOfStringValue :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | String value.
+    stringValue :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StepInput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'integerValue', 'stepInput_integerValue' - The value of the integer.
+--
+-- 'listOfStringsValue', 'stepInput_listOfStringsValue' - List of string values.
+--
+-- 'mapOfStringValue', 'stepInput_mapOfStringValue' - Map of string values.
+--
+-- 'stringValue', 'stepInput_stringValue' - String value.
+newStepInput ::
+  StepInput
+newStepInput =
+  StepInput'
+    { integerValue = Prelude.Nothing,
+      listOfStringsValue = Prelude.Nothing,
+      mapOfStringValue = Prelude.Nothing,
+      stringValue = Prelude.Nothing
+    }
+
+-- | The value of the integer.
+stepInput_integerValue :: Lens.Lens' StepInput (Prelude.Maybe Prelude.Int)
+stepInput_integerValue = Lens.lens (\StepInput' {integerValue} -> integerValue) (\s@StepInput' {} a -> s {integerValue = a} :: StepInput)
+
+-- | List of string values.
+stepInput_listOfStringsValue :: Lens.Lens' StepInput (Prelude.Maybe [Prelude.Text])
+stepInput_listOfStringsValue = Lens.lens (\StepInput' {listOfStringsValue} -> listOfStringsValue) (\s@StepInput' {} a -> s {listOfStringsValue = a} :: StepInput) Prelude.. Lens.mapping Lens.coerced
+
+-- | Map of string values.
+stepInput_mapOfStringValue :: Lens.Lens' StepInput (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+stepInput_mapOfStringValue = Lens.lens (\StepInput' {mapOfStringValue} -> mapOfStringValue) (\s@StepInput' {} a -> s {mapOfStringValue = a} :: StepInput) Prelude.. Lens.mapping Lens.coerced
+
+-- | String value.
+stepInput_stringValue :: Lens.Lens' StepInput (Prelude.Maybe Prelude.Text)
+stepInput_stringValue = Lens.lens (\StepInput' {stringValue} -> stringValue) (\s@StepInput' {} a -> s {stringValue = a} :: StepInput)
+
+instance Data.FromJSON StepInput where
+  parseJSON =
+    Data.withObject
+      "StepInput"
+      ( \x ->
+          StepInput'
+            Prelude.<$> (x Data..:? "integerValue")
+            Prelude.<*> ( x
+                            Data..:? "listOfStringsValue"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "mapOfStringValue"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "stringValue")
+      )
+
+instance Prelude.Hashable StepInput where
+  hashWithSalt _salt StepInput' {..} =
+    _salt
+      `Prelude.hashWithSalt` integerValue
+      `Prelude.hashWithSalt` listOfStringsValue
+      `Prelude.hashWithSalt` mapOfStringValue
+      `Prelude.hashWithSalt` stringValue
+
+instance Prelude.NFData StepInput where
+  rnf StepInput' {..} =
+    Prelude.rnf integerValue
+      `Prelude.seq` Prelude.rnf listOfStringsValue
+      `Prelude.seq` Prelude.rnf mapOfStringValue
+      `Prelude.seq` Prelude.rnf stringValue
+
+instance Data.ToJSON StepInput where
+  toJSON StepInput' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("integerValue" Data..=) Prelude.<$> integerValue,
+            ("listOfStringsValue" Data..=)
+              Prelude.<$> listOfStringsValue,
+            ("mapOfStringValue" Data..=)
+              Prelude.<$> mapOfStringValue,
+            ("stringValue" Data..=) Prelude.<$> stringValue
+          ]
+      )
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/StepOutput.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/StepOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/StepOutput.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.MigrationHubOrchestrator.Types.StepOutput
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.StepOutput where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types.DataType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The output of the step.
+--
+-- /See:/ 'newStepOutput' smart constructor.
+data StepOutput = StepOutput'
+  { -- | The data type of the step output.
+    dataType :: Prelude.Maybe DataType,
+    -- | The name of the step.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Determine if an output is required from a step.
+    required :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StepOutput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataType', 'stepOutput_dataType' - The data type of the step output.
+--
+-- 'name', 'stepOutput_name' - The name of the step.
+--
+-- 'required', 'stepOutput_required' - Determine if an output is required from a step.
+newStepOutput ::
+  StepOutput
+newStepOutput =
+  StepOutput'
+    { dataType = Prelude.Nothing,
+      name = Prelude.Nothing,
+      required = Prelude.Nothing
+    }
+
+-- | The data type of the step output.
+stepOutput_dataType :: Lens.Lens' StepOutput (Prelude.Maybe DataType)
+stepOutput_dataType = Lens.lens (\StepOutput' {dataType} -> dataType) (\s@StepOutput' {} a -> s {dataType = a} :: StepOutput)
+
+-- | The name of the step.
+stepOutput_name :: Lens.Lens' StepOutput (Prelude.Maybe Prelude.Text)
+stepOutput_name = Lens.lens (\StepOutput' {name} -> name) (\s@StepOutput' {} a -> s {name = a} :: StepOutput)
+
+-- | Determine if an output is required from a step.
+stepOutput_required :: Lens.Lens' StepOutput (Prelude.Maybe Prelude.Bool)
+stepOutput_required = Lens.lens (\StepOutput' {required} -> required) (\s@StepOutput' {} a -> s {required = a} :: StepOutput)
+
+instance Data.FromJSON StepOutput where
+  parseJSON =
+    Data.withObject
+      "StepOutput"
+      ( \x ->
+          StepOutput'
+            Prelude.<$> (x Data..:? "dataType")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "required")
+      )
+
+instance Prelude.Hashable StepOutput where
+  hashWithSalt _salt StepOutput' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataType
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` required
+
+instance Prelude.NFData StepOutput where
+  rnf StepOutput' {..} =
+    Prelude.rnf dataType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf required
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/StepStatus.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/StepStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/StepStatus.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.MigrationHubOrchestrator.Types.StepStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.StepStatus
+  ( StepStatus
+      ( ..,
+        StepStatus_AWAITING_DEPENDENCIES,
+        StepStatus_COMPLETED,
+        StepStatus_FAILED,
+        StepStatus_IN_PROGRESS,
+        StepStatus_PAUSED,
+        StepStatus_READY,
+        StepStatus_USER_ATTENTION_REQUIRED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StepStatus = StepStatus'
+  { fromStepStatus ::
+      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 StepStatus_AWAITING_DEPENDENCIES :: StepStatus
+pattern StepStatus_AWAITING_DEPENDENCIES = StepStatus' "AWAITING_DEPENDENCIES"
+
+pattern StepStatus_COMPLETED :: StepStatus
+pattern StepStatus_COMPLETED = StepStatus' "COMPLETED"
+
+pattern StepStatus_FAILED :: StepStatus
+pattern StepStatus_FAILED = StepStatus' "FAILED"
+
+pattern StepStatus_IN_PROGRESS :: StepStatus
+pattern StepStatus_IN_PROGRESS = StepStatus' "IN_PROGRESS"
+
+pattern StepStatus_PAUSED :: StepStatus
+pattern StepStatus_PAUSED = StepStatus' "PAUSED"
+
+pattern StepStatus_READY :: StepStatus
+pattern StepStatus_READY = StepStatus' "READY"
+
+pattern StepStatus_USER_ATTENTION_REQUIRED :: StepStatus
+pattern StepStatus_USER_ATTENTION_REQUIRED = StepStatus' "USER_ATTENTION_REQUIRED"
+
+{-# COMPLETE
+  StepStatus_AWAITING_DEPENDENCIES,
+  StepStatus_COMPLETED,
+  StepStatus_FAILED,
+  StepStatus_IN_PROGRESS,
+  StepStatus_PAUSED,
+  StepStatus_READY,
+  StepStatus_USER_ATTENTION_REQUIRED,
+  StepStatus'
+  #-}
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/TargetType.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/TargetType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/TargetType.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.MigrationHubOrchestrator.Types.TargetType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.TargetType
+  ( TargetType
+      ( ..,
+        TargetType_ALL,
+        TargetType_NONE,
+        TargetType_SINGLE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TargetType = TargetType'
+  { fromTargetType ::
+      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 TargetType_ALL :: TargetType
+pattern TargetType_ALL = TargetType' "ALL"
+
+pattern TargetType_NONE :: TargetType
+pattern TargetType_NONE = TargetType' "NONE"
+
+pattern TargetType_SINGLE :: TargetType
+pattern TargetType_SINGLE = TargetType' "SINGLE"
+
+{-# COMPLETE
+  TargetType_ALL,
+  TargetType_NONE,
+  TargetType_SINGLE,
+  TargetType'
+  #-}
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/TemplateInput.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/TemplateInput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/TemplateInput.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.MigrationHubOrchestrator.Types.TemplateInput
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.TemplateInput where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types.DataType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The input parameters of a template.
+--
+-- /See:/ 'newTemplateInput' smart constructor.
+data TemplateInput = TemplateInput'
+  { -- | The data type of the template input.
+    dataType :: Prelude.Maybe DataType,
+    -- | The name of the template.
+    inputName :: Prelude.Maybe Prelude.Text,
+    -- | Determine if an input is required from the template.
+    required :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TemplateInput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataType', 'templateInput_dataType' - The data type of the template input.
+--
+-- 'inputName', 'templateInput_inputName' - The name of the template.
+--
+-- 'required', 'templateInput_required' - Determine if an input is required from the template.
+newTemplateInput ::
+  TemplateInput
+newTemplateInput =
+  TemplateInput'
+    { dataType = Prelude.Nothing,
+      inputName = Prelude.Nothing,
+      required = Prelude.Nothing
+    }
+
+-- | The data type of the template input.
+templateInput_dataType :: Lens.Lens' TemplateInput (Prelude.Maybe DataType)
+templateInput_dataType = Lens.lens (\TemplateInput' {dataType} -> dataType) (\s@TemplateInput' {} a -> s {dataType = a} :: TemplateInput)
+
+-- | The name of the template.
+templateInput_inputName :: Lens.Lens' TemplateInput (Prelude.Maybe Prelude.Text)
+templateInput_inputName = Lens.lens (\TemplateInput' {inputName} -> inputName) (\s@TemplateInput' {} a -> s {inputName = a} :: TemplateInput)
+
+-- | Determine if an input is required from the template.
+templateInput_required :: Lens.Lens' TemplateInput (Prelude.Maybe Prelude.Bool)
+templateInput_required = Lens.lens (\TemplateInput' {required} -> required) (\s@TemplateInput' {} a -> s {required = a} :: TemplateInput)
+
+instance Data.FromJSON TemplateInput where
+  parseJSON =
+    Data.withObject
+      "TemplateInput"
+      ( \x ->
+          TemplateInput'
+            Prelude.<$> (x Data..:? "dataType")
+            Prelude.<*> (x Data..:? "inputName")
+            Prelude.<*> (x Data..:? "required")
+      )
+
+instance Prelude.Hashable TemplateInput where
+  hashWithSalt _salt TemplateInput' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataType
+      `Prelude.hashWithSalt` inputName
+      `Prelude.hashWithSalt` required
+
+instance Prelude.NFData TemplateInput where
+  rnf TemplateInput' {..} =
+    Prelude.rnf dataType
+      `Prelude.seq` Prelude.rnf inputName
+      `Prelude.seq` Prelude.rnf required
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/TemplateStatus.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/TemplateStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/TemplateStatus.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.Types.TemplateStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.TemplateStatus
+  ( TemplateStatus
+      ( ..,
+        TemplateStatus_CREATED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TemplateStatus = TemplateStatus'
+  { fromTemplateStatus ::
+      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 TemplateStatus_CREATED :: TemplateStatus
+pattern TemplateStatus_CREATED = TemplateStatus' "CREATED"
+
+{-# COMPLETE
+  TemplateStatus_CREATED,
+  TemplateStatus'
+  #-}
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/TemplateStepGroupSummary.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/TemplateStepGroupSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/TemplateStepGroupSummary.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.MigrationHubOrchestrator.Types.TemplateStepGroupSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.TemplateStepGroupSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The summary of the step group in the template.
+--
+-- /See:/ 'newTemplateStepGroupSummary' smart constructor.
+data TemplateStepGroupSummary = TemplateStepGroupSummary'
+  { -- | The ID of the step group.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the step group.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The next step group.
+    next :: Prelude.Maybe [Prelude.Text],
+    -- | The previous step group.
+    previous :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TemplateStepGroupSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'templateStepGroupSummary_id' - The ID of the step group.
+--
+-- 'name', 'templateStepGroupSummary_name' - The name of the step group.
+--
+-- 'next', 'templateStepGroupSummary_next' - The next step group.
+--
+-- 'previous', 'templateStepGroupSummary_previous' - The previous step group.
+newTemplateStepGroupSummary ::
+  TemplateStepGroupSummary
+newTemplateStepGroupSummary =
+  TemplateStepGroupSummary'
+    { id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      next = Prelude.Nothing,
+      previous = Prelude.Nothing
+    }
+
+-- | The ID of the step group.
+templateStepGroupSummary_id :: Lens.Lens' TemplateStepGroupSummary (Prelude.Maybe Prelude.Text)
+templateStepGroupSummary_id = Lens.lens (\TemplateStepGroupSummary' {id} -> id) (\s@TemplateStepGroupSummary' {} a -> s {id = a} :: TemplateStepGroupSummary)
+
+-- | The name of the step group.
+templateStepGroupSummary_name :: Lens.Lens' TemplateStepGroupSummary (Prelude.Maybe Prelude.Text)
+templateStepGroupSummary_name = Lens.lens (\TemplateStepGroupSummary' {name} -> name) (\s@TemplateStepGroupSummary' {} a -> s {name = a} :: TemplateStepGroupSummary)
+
+-- | The next step group.
+templateStepGroupSummary_next :: Lens.Lens' TemplateStepGroupSummary (Prelude.Maybe [Prelude.Text])
+templateStepGroupSummary_next = Lens.lens (\TemplateStepGroupSummary' {next} -> next) (\s@TemplateStepGroupSummary' {} a -> s {next = a} :: TemplateStepGroupSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The previous step group.
+templateStepGroupSummary_previous :: Lens.Lens' TemplateStepGroupSummary (Prelude.Maybe [Prelude.Text])
+templateStepGroupSummary_previous = Lens.lens (\TemplateStepGroupSummary' {previous} -> previous) (\s@TemplateStepGroupSummary' {} a -> s {previous = a} :: TemplateStepGroupSummary) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON TemplateStepGroupSummary where
+  parseJSON =
+    Data.withObject
+      "TemplateStepGroupSummary"
+      ( \x ->
+          TemplateStepGroupSummary'
+            Prelude.<$> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "next" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "previous" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable TemplateStepGroupSummary where
+  hashWithSalt _salt TemplateStepGroupSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` next
+      `Prelude.hashWithSalt` previous
+
+instance Prelude.NFData TemplateStepGroupSummary where
+  rnf TemplateStepGroupSummary' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf next
+      `Prelude.seq` Prelude.rnf previous
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/TemplateStepSummary.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/TemplateStepSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/TemplateStepSummary.hs
@@ -0,0 +1,177 @@
+{-# 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.MigrationHubOrchestrator.Types.TemplateStepSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.TemplateStepSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types.Owner
+import Amazonka.MigrationHubOrchestrator.Types.StepActionType
+import Amazonka.MigrationHubOrchestrator.Types.TargetType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The summary of the step.
+--
+-- /See:/ 'newTemplateStepSummary' smart constructor.
+data TemplateStepSummary = TemplateStepSummary'
+  { -- | The ID of the step.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the step.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The next step.
+    next :: Prelude.Maybe [Prelude.Text],
+    -- | The owner of the step.
+    owner :: Prelude.Maybe Owner,
+    -- | The previous step.
+    previous :: Prelude.Maybe [Prelude.Text],
+    -- | The action type of the step. You must run and update the status of a
+    -- manual step for the workflow to continue after the completion of the
+    -- step.
+    stepActionType :: Prelude.Maybe StepActionType,
+    -- | The ID of the step group.
+    stepGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The servers on which to run the script.
+    targetType :: Prelude.Maybe TargetType,
+    -- | The ID of the template.
+    templateId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TemplateStepSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'templateStepSummary_id' - The ID of the step.
+--
+-- 'name', 'templateStepSummary_name' - The name of the step.
+--
+-- 'next', 'templateStepSummary_next' - The next step.
+--
+-- 'owner', 'templateStepSummary_owner' - The owner of the step.
+--
+-- 'previous', 'templateStepSummary_previous' - The previous step.
+--
+-- 'stepActionType', 'templateStepSummary_stepActionType' - The action type of the step. You must run and update the status of a
+-- manual step for the workflow to continue after the completion of the
+-- step.
+--
+-- 'stepGroupId', 'templateStepSummary_stepGroupId' - The ID of the step group.
+--
+-- 'targetType', 'templateStepSummary_targetType' - The servers on which to run the script.
+--
+-- 'templateId', 'templateStepSummary_templateId' - The ID of the template.
+newTemplateStepSummary ::
+  TemplateStepSummary
+newTemplateStepSummary =
+  TemplateStepSummary'
+    { id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      next = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      previous = Prelude.Nothing,
+      stepActionType = Prelude.Nothing,
+      stepGroupId = Prelude.Nothing,
+      targetType = Prelude.Nothing,
+      templateId = Prelude.Nothing
+    }
+
+-- | The ID of the step.
+templateStepSummary_id :: Lens.Lens' TemplateStepSummary (Prelude.Maybe Prelude.Text)
+templateStepSummary_id = Lens.lens (\TemplateStepSummary' {id} -> id) (\s@TemplateStepSummary' {} a -> s {id = a} :: TemplateStepSummary)
+
+-- | The name of the step.
+templateStepSummary_name :: Lens.Lens' TemplateStepSummary (Prelude.Maybe Prelude.Text)
+templateStepSummary_name = Lens.lens (\TemplateStepSummary' {name} -> name) (\s@TemplateStepSummary' {} a -> s {name = a} :: TemplateStepSummary)
+
+-- | The next step.
+templateStepSummary_next :: Lens.Lens' TemplateStepSummary (Prelude.Maybe [Prelude.Text])
+templateStepSummary_next = Lens.lens (\TemplateStepSummary' {next} -> next) (\s@TemplateStepSummary' {} a -> s {next = a} :: TemplateStepSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The owner of the step.
+templateStepSummary_owner :: Lens.Lens' TemplateStepSummary (Prelude.Maybe Owner)
+templateStepSummary_owner = Lens.lens (\TemplateStepSummary' {owner} -> owner) (\s@TemplateStepSummary' {} a -> s {owner = a} :: TemplateStepSummary)
+
+-- | The previous step.
+templateStepSummary_previous :: Lens.Lens' TemplateStepSummary (Prelude.Maybe [Prelude.Text])
+templateStepSummary_previous = Lens.lens (\TemplateStepSummary' {previous} -> previous) (\s@TemplateStepSummary' {} a -> s {previous = a} :: TemplateStepSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The action type of the step. You must run and update the status of a
+-- manual step for the workflow to continue after the completion of the
+-- step.
+templateStepSummary_stepActionType :: Lens.Lens' TemplateStepSummary (Prelude.Maybe StepActionType)
+templateStepSummary_stepActionType = Lens.lens (\TemplateStepSummary' {stepActionType} -> stepActionType) (\s@TemplateStepSummary' {} a -> s {stepActionType = a} :: TemplateStepSummary)
+
+-- | The ID of the step group.
+templateStepSummary_stepGroupId :: Lens.Lens' TemplateStepSummary (Prelude.Maybe Prelude.Text)
+templateStepSummary_stepGroupId = Lens.lens (\TemplateStepSummary' {stepGroupId} -> stepGroupId) (\s@TemplateStepSummary' {} a -> s {stepGroupId = a} :: TemplateStepSummary)
+
+-- | The servers on which to run the script.
+templateStepSummary_targetType :: Lens.Lens' TemplateStepSummary (Prelude.Maybe TargetType)
+templateStepSummary_targetType = Lens.lens (\TemplateStepSummary' {targetType} -> targetType) (\s@TemplateStepSummary' {} a -> s {targetType = a} :: TemplateStepSummary)
+
+-- | The ID of the template.
+templateStepSummary_templateId :: Lens.Lens' TemplateStepSummary (Prelude.Maybe Prelude.Text)
+templateStepSummary_templateId = Lens.lens (\TemplateStepSummary' {templateId} -> templateId) (\s@TemplateStepSummary' {} a -> s {templateId = a} :: TemplateStepSummary)
+
+instance Data.FromJSON TemplateStepSummary where
+  parseJSON =
+    Data.withObject
+      "TemplateStepSummary"
+      ( \x ->
+          TemplateStepSummary'
+            Prelude.<$> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "next" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "previous" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "stepActionType")
+            Prelude.<*> (x Data..:? "stepGroupId")
+            Prelude.<*> (x Data..:? "targetType")
+            Prelude.<*> (x Data..:? "templateId")
+      )
+
+instance Prelude.Hashable TemplateStepSummary where
+  hashWithSalt _salt TemplateStepSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` next
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` previous
+      `Prelude.hashWithSalt` stepActionType
+      `Prelude.hashWithSalt` stepGroupId
+      `Prelude.hashWithSalt` targetType
+      `Prelude.hashWithSalt` templateId
+
+instance Prelude.NFData TemplateStepSummary where
+  rnf TemplateStepSummary' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf next
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf previous
+      `Prelude.seq` Prelude.rnf stepActionType
+      `Prelude.seq` Prelude.rnf stepGroupId
+      `Prelude.seq` Prelude.rnf targetType
+      `Prelude.seq` Prelude.rnf templateId
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/TemplateSummary.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/TemplateSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/TemplateSummary.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.MigrationHubOrchestrator.Types.TemplateSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.TemplateSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The summary of the template.
+--
+-- /See:/ 'newTemplateSummary' smart constructor.
+data TemplateSummary = TemplateSummary'
+  { -- | The Amazon Resource Name (ARN) of the template.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the template.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the template.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the template.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TemplateSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'templateSummary_arn' - The Amazon Resource Name (ARN) of the template.
+--
+-- 'description', 'templateSummary_description' - The description of the template.
+--
+-- 'id', 'templateSummary_id' - The ID of the template.
+--
+-- 'name', 'templateSummary_name' - The name of the template.
+newTemplateSummary ::
+  TemplateSummary
+newTemplateSummary =
+  TemplateSummary'
+    { arn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the template.
+templateSummary_arn :: Lens.Lens' TemplateSummary (Prelude.Maybe Prelude.Text)
+templateSummary_arn = Lens.lens (\TemplateSummary' {arn} -> arn) (\s@TemplateSummary' {} a -> s {arn = a} :: TemplateSummary)
+
+-- | The description of the template.
+templateSummary_description :: Lens.Lens' TemplateSummary (Prelude.Maybe Prelude.Text)
+templateSummary_description = Lens.lens (\TemplateSummary' {description} -> description) (\s@TemplateSummary' {} a -> s {description = a} :: TemplateSummary)
+
+-- | The ID of the template.
+templateSummary_id :: Lens.Lens' TemplateSummary (Prelude.Maybe Prelude.Text)
+templateSummary_id = Lens.lens (\TemplateSummary' {id} -> id) (\s@TemplateSummary' {} a -> s {id = a} :: TemplateSummary)
+
+-- | The name of the template.
+templateSummary_name :: Lens.Lens' TemplateSummary (Prelude.Maybe Prelude.Text)
+templateSummary_name = Lens.lens (\TemplateSummary' {name} -> name) (\s@TemplateSummary' {} a -> s {name = a} :: TemplateSummary)
+
+instance Data.FromJSON TemplateSummary where
+  parseJSON =
+    Data.withObject
+      "TemplateSummary"
+      ( \x ->
+          TemplateSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable TemplateSummary where
+  hashWithSalt _salt TemplateSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData TemplateSummary where
+  rnf TemplateSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/Tool.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/Tool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/Tool.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.Types.Tool
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.Tool 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
+
+-- | List of AWS services utilized in a migration workflow.
+--
+-- /See:/ 'newTool' smart constructor.
+data Tool = Tool'
+  { -- | The name of an AWS service.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The URL of an AWS service.
+    url :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tool' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'tool_name' - The name of an AWS service.
+--
+-- 'url', 'tool_url' - The URL of an AWS service.
+newTool ::
+  Tool
+newTool =
+  Tool'
+    { name = Prelude.Nothing,
+      url = Prelude.Nothing
+    }
+
+-- | The name of an AWS service.
+tool_name :: Lens.Lens' Tool (Prelude.Maybe Prelude.Text)
+tool_name = Lens.lens (\Tool' {name} -> name) (\s@Tool' {} a -> s {name = a} :: Tool)
+
+-- | The URL of an AWS service.
+tool_url :: Lens.Lens' Tool (Prelude.Maybe Prelude.Text)
+tool_url = Lens.lens (\Tool' {url} -> url) (\s@Tool' {} a -> s {url = a} :: Tool)
+
+instance Data.FromJSON Tool where
+  parseJSON =
+    Data.withObject
+      "Tool"
+      ( \x ->
+          Tool'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "url")
+      )
+
+instance Prelude.Hashable Tool where
+  hashWithSalt _salt Tool' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` url
+
+instance Prelude.NFData Tool where
+  rnf Tool' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf url
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/WorkflowStepAutomationConfiguration.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/WorkflowStepAutomationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/WorkflowStepAutomationConfiguration.hs
@@ -0,0 +1,155 @@
+{-# 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.MigrationHubOrchestrator.Types.WorkflowStepAutomationConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.WorkflowStepAutomationConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types.PlatformCommand
+import Amazonka.MigrationHubOrchestrator.Types.PlatformScriptKey
+import Amazonka.MigrationHubOrchestrator.Types.RunEnvironment
+import Amazonka.MigrationHubOrchestrator.Types.TargetType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The custom script to run tests on source or target environments.
+--
+-- /See:/ 'newWorkflowStepAutomationConfiguration' smart constructor.
+data WorkflowStepAutomationConfiguration = WorkflowStepAutomationConfiguration'
+  { -- | The command required to run the script.
+    command :: Prelude.Maybe PlatformCommand,
+    -- | The source or target environment.
+    runEnvironment :: Prelude.Maybe RunEnvironment,
+    -- | The Amazon S3 bucket where the script is located.
+    scriptLocationS3Bucket :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 key for the script location.
+    scriptLocationS3Key :: Prelude.Maybe PlatformScriptKey,
+    -- | The servers on which to run the script.
+    targetType :: Prelude.Maybe TargetType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkflowStepAutomationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'command', 'workflowStepAutomationConfiguration_command' - The command required to run the script.
+--
+-- 'runEnvironment', 'workflowStepAutomationConfiguration_runEnvironment' - The source or target environment.
+--
+-- 'scriptLocationS3Bucket', 'workflowStepAutomationConfiguration_scriptLocationS3Bucket' - The Amazon S3 bucket where the script is located.
+--
+-- 'scriptLocationS3Key', 'workflowStepAutomationConfiguration_scriptLocationS3Key' - The Amazon S3 key for the script location.
+--
+-- 'targetType', 'workflowStepAutomationConfiguration_targetType' - The servers on which to run the script.
+newWorkflowStepAutomationConfiguration ::
+  WorkflowStepAutomationConfiguration
+newWorkflowStepAutomationConfiguration =
+  WorkflowStepAutomationConfiguration'
+    { command =
+        Prelude.Nothing,
+      runEnvironment = Prelude.Nothing,
+      scriptLocationS3Bucket =
+        Prelude.Nothing,
+      scriptLocationS3Key = Prelude.Nothing,
+      targetType = Prelude.Nothing
+    }
+
+-- | The command required to run the script.
+workflowStepAutomationConfiguration_command :: Lens.Lens' WorkflowStepAutomationConfiguration (Prelude.Maybe PlatformCommand)
+workflowStepAutomationConfiguration_command = Lens.lens (\WorkflowStepAutomationConfiguration' {command} -> command) (\s@WorkflowStepAutomationConfiguration' {} a -> s {command = a} :: WorkflowStepAutomationConfiguration)
+
+-- | The source or target environment.
+workflowStepAutomationConfiguration_runEnvironment :: Lens.Lens' WorkflowStepAutomationConfiguration (Prelude.Maybe RunEnvironment)
+workflowStepAutomationConfiguration_runEnvironment = Lens.lens (\WorkflowStepAutomationConfiguration' {runEnvironment} -> runEnvironment) (\s@WorkflowStepAutomationConfiguration' {} a -> s {runEnvironment = a} :: WorkflowStepAutomationConfiguration)
+
+-- | The Amazon S3 bucket where the script is located.
+workflowStepAutomationConfiguration_scriptLocationS3Bucket :: Lens.Lens' WorkflowStepAutomationConfiguration (Prelude.Maybe Prelude.Text)
+workflowStepAutomationConfiguration_scriptLocationS3Bucket = Lens.lens (\WorkflowStepAutomationConfiguration' {scriptLocationS3Bucket} -> scriptLocationS3Bucket) (\s@WorkflowStepAutomationConfiguration' {} a -> s {scriptLocationS3Bucket = a} :: WorkflowStepAutomationConfiguration)
+
+-- | The Amazon S3 key for the script location.
+workflowStepAutomationConfiguration_scriptLocationS3Key :: Lens.Lens' WorkflowStepAutomationConfiguration (Prelude.Maybe PlatformScriptKey)
+workflowStepAutomationConfiguration_scriptLocationS3Key = Lens.lens (\WorkflowStepAutomationConfiguration' {scriptLocationS3Key} -> scriptLocationS3Key) (\s@WorkflowStepAutomationConfiguration' {} a -> s {scriptLocationS3Key = a} :: WorkflowStepAutomationConfiguration)
+
+-- | The servers on which to run the script.
+workflowStepAutomationConfiguration_targetType :: Lens.Lens' WorkflowStepAutomationConfiguration (Prelude.Maybe TargetType)
+workflowStepAutomationConfiguration_targetType = Lens.lens (\WorkflowStepAutomationConfiguration' {targetType} -> targetType) (\s@WorkflowStepAutomationConfiguration' {} a -> s {targetType = a} :: WorkflowStepAutomationConfiguration)
+
+instance
+  Data.FromJSON
+    WorkflowStepAutomationConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "WorkflowStepAutomationConfiguration"
+      ( \x ->
+          WorkflowStepAutomationConfiguration'
+            Prelude.<$> (x Data..:? "command")
+            Prelude.<*> (x Data..:? "runEnvironment")
+            Prelude.<*> (x Data..:? "scriptLocationS3Bucket")
+            Prelude.<*> (x Data..:? "scriptLocationS3Key")
+            Prelude.<*> (x Data..:? "targetType")
+      )
+
+instance
+  Prelude.Hashable
+    WorkflowStepAutomationConfiguration
+  where
+  hashWithSalt
+    _salt
+    WorkflowStepAutomationConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` command
+        `Prelude.hashWithSalt` runEnvironment
+        `Prelude.hashWithSalt` scriptLocationS3Bucket
+        `Prelude.hashWithSalt` scriptLocationS3Key
+        `Prelude.hashWithSalt` targetType
+
+instance
+  Prelude.NFData
+    WorkflowStepAutomationConfiguration
+  where
+  rnf WorkflowStepAutomationConfiguration' {..} =
+    Prelude.rnf command
+      `Prelude.seq` Prelude.rnf runEnvironment
+      `Prelude.seq` Prelude.rnf scriptLocationS3Bucket
+      `Prelude.seq` Prelude.rnf scriptLocationS3Key
+      `Prelude.seq` Prelude.rnf targetType
+
+instance
+  Data.ToJSON
+    WorkflowStepAutomationConfiguration
+  where
+  toJSON WorkflowStepAutomationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("command" Data..=) Prelude.<$> command,
+            ("runEnvironment" Data..=)
+              Prelude.<$> runEnvironment,
+            ("scriptLocationS3Bucket" Data..=)
+              Prelude.<$> scriptLocationS3Bucket,
+            ("scriptLocationS3Key" Data..=)
+              Prelude.<$> scriptLocationS3Key,
+            ("targetType" Data..=) Prelude.<$> targetType
+          ]
+      )
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/WorkflowStepGroupSummary.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/WorkflowStepGroupSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/WorkflowStepGroupSummary.hs
@@ -0,0 +1,134 @@
+{-# 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.MigrationHubOrchestrator.Types.WorkflowStepGroupSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.WorkflowStepGroupSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types.Owner
+import Amazonka.MigrationHubOrchestrator.Types.StepGroupStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | The summary of a step group in a workflow.
+--
+-- /See:/ 'newWorkflowStepGroupSummary' smart constructor.
+data WorkflowStepGroupSummary = WorkflowStepGroupSummary'
+  { -- | The ID of the step group.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the step group.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The next step group.
+    next :: Prelude.Maybe [Prelude.Text],
+    -- | The owner of the step group.
+    owner :: Prelude.Maybe Owner,
+    -- | The previous step group.
+    previous :: Prelude.Maybe [Prelude.Text],
+    -- | The status of the step group.
+    status :: Prelude.Maybe StepGroupStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkflowStepGroupSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'workflowStepGroupSummary_id' - The ID of the step group.
+--
+-- 'name', 'workflowStepGroupSummary_name' - The name of the step group.
+--
+-- 'next', 'workflowStepGroupSummary_next' - The next step group.
+--
+-- 'owner', 'workflowStepGroupSummary_owner' - The owner of the step group.
+--
+-- 'previous', 'workflowStepGroupSummary_previous' - The previous step group.
+--
+-- 'status', 'workflowStepGroupSummary_status' - The status of the step group.
+newWorkflowStepGroupSummary ::
+  WorkflowStepGroupSummary
+newWorkflowStepGroupSummary =
+  WorkflowStepGroupSummary'
+    { id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      next = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      previous = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The ID of the step group.
+workflowStepGroupSummary_id :: Lens.Lens' WorkflowStepGroupSummary (Prelude.Maybe Prelude.Text)
+workflowStepGroupSummary_id = Lens.lens (\WorkflowStepGroupSummary' {id} -> id) (\s@WorkflowStepGroupSummary' {} a -> s {id = a} :: WorkflowStepGroupSummary)
+
+-- | The name of the step group.
+workflowStepGroupSummary_name :: Lens.Lens' WorkflowStepGroupSummary (Prelude.Maybe Prelude.Text)
+workflowStepGroupSummary_name = Lens.lens (\WorkflowStepGroupSummary' {name} -> name) (\s@WorkflowStepGroupSummary' {} a -> s {name = a} :: WorkflowStepGroupSummary)
+
+-- | The next step group.
+workflowStepGroupSummary_next :: Lens.Lens' WorkflowStepGroupSummary (Prelude.Maybe [Prelude.Text])
+workflowStepGroupSummary_next = Lens.lens (\WorkflowStepGroupSummary' {next} -> next) (\s@WorkflowStepGroupSummary' {} a -> s {next = a} :: WorkflowStepGroupSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The owner of the step group.
+workflowStepGroupSummary_owner :: Lens.Lens' WorkflowStepGroupSummary (Prelude.Maybe Owner)
+workflowStepGroupSummary_owner = Lens.lens (\WorkflowStepGroupSummary' {owner} -> owner) (\s@WorkflowStepGroupSummary' {} a -> s {owner = a} :: WorkflowStepGroupSummary)
+
+-- | The previous step group.
+workflowStepGroupSummary_previous :: Lens.Lens' WorkflowStepGroupSummary (Prelude.Maybe [Prelude.Text])
+workflowStepGroupSummary_previous = Lens.lens (\WorkflowStepGroupSummary' {previous} -> previous) (\s@WorkflowStepGroupSummary' {} a -> s {previous = a} :: WorkflowStepGroupSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the step group.
+workflowStepGroupSummary_status :: Lens.Lens' WorkflowStepGroupSummary (Prelude.Maybe StepGroupStatus)
+workflowStepGroupSummary_status = Lens.lens (\WorkflowStepGroupSummary' {status} -> status) (\s@WorkflowStepGroupSummary' {} a -> s {status = a} :: WorkflowStepGroupSummary)
+
+instance Data.FromJSON WorkflowStepGroupSummary where
+  parseJSON =
+    Data.withObject
+      "WorkflowStepGroupSummary"
+      ( \x ->
+          WorkflowStepGroupSummary'
+            Prelude.<$> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "next" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "previous" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable WorkflowStepGroupSummary where
+  hashWithSalt _salt WorkflowStepGroupSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` next
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` previous
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData WorkflowStepGroupSummary where
+  rnf WorkflowStepGroupSummary' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf next
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf previous
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/WorkflowStepOutput.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/WorkflowStepOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/WorkflowStepOutput.hs
@@ -0,0 +1,121 @@
+{-# 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.MigrationHubOrchestrator.Types.WorkflowStepOutput
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.WorkflowStepOutput where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types.DataType
+import Amazonka.MigrationHubOrchestrator.Types.WorkflowStepOutputUnion
+import qualified Amazonka.Prelude as Prelude
+
+-- | The output of a step.
+--
+-- /See:/ 'newWorkflowStepOutput' smart constructor.
+data WorkflowStepOutput = WorkflowStepOutput'
+  { -- | The data type of the output.
+    dataType :: Prelude.Maybe DataType,
+    -- | The name of the step.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Determine if an output is required from a step.
+    required :: Prelude.Maybe Prelude.Bool,
+    -- | The value of the output.
+    value :: Prelude.Maybe WorkflowStepOutputUnion
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkflowStepOutput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataType', 'workflowStepOutput_dataType' - The data type of the output.
+--
+-- 'name', 'workflowStepOutput_name' - The name of the step.
+--
+-- 'required', 'workflowStepOutput_required' - Determine if an output is required from a step.
+--
+-- 'value', 'workflowStepOutput_value' - The value of the output.
+newWorkflowStepOutput ::
+  WorkflowStepOutput
+newWorkflowStepOutput =
+  WorkflowStepOutput'
+    { dataType = Prelude.Nothing,
+      name = Prelude.Nothing,
+      required = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The data type of the output.
+workflowStepOutput_dataType :: Lens.Lens' WorkflowStepOutput (Prelude.Maybe DataType)
+workflowStepOutput_dataType = Lens.lens (\WorkflowStepOutput' {dataType} -> dataType) (\s@WorkflowStepOutput' {} a -> s {dataType = a} :: WorkflowStepOutput)
+
+-- | The name of the step.
+workflowStepOutput_name :: Lens.Lens' WorkflowStepOutput (Prelude.Maybe Prelude.Text)
+workflowStepOutput_name = Lens.lens (\WorkflowStepOutput' {name} -> name) (\s@WorkflowStepOutput' {} a -> s {name = a} :: WorkflowStepOutput)
+
+-- | Determine if an output is required from a step.
+workflowStepOutput_required :: Lens.Lens' WorkflowStepOutput (Prelude.Maybe Prelude.Bool)
+workflowStepOutput_required = Lens.lens (\WorkflowStepOutput' {required} -> required) (\s@WorkflowStepOutput' {} a -> s {required = a} :: WorkflowStepOutput)
+
+-- | The value of the output.
+workflowStepOutput_value :: Lens.Lens' WorkflowStepOutput (Prelude.Maybe WorkflowStepOutputUnion)
+workflowStepOutput_value = Lens.lens (\WorkflowStepOutput' {value} -> value) (\s@WorkflowStepOutput' {} a -> s {value = a} :: WorkflowStepOutput)
+
+instance Data.FromJSON WorkflowStepOutput where
+  parseJSON =
+    Data.withObject
+      "WorkflowStepOutput"
+      ( \x ->
+          WorkflowStepOutput'
+            Prelude.<$> (x Data..:? "dataType")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "required")
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable WorkflowStepOutput where
+  hashWithSalt _salt WorkflowStepOutput' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataType
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` required
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData WorkflowStepOutput where
+  rnf WorkflowStepOutput' {..} =
+    Prelude.rnf dataType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf required
+      `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON WorkflowStepOutput where
+  toJSON WorkflowStepOutput' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("dataType" Data..=) Prelude.<$> dataType,
+            ("name" Data..=) Prelude.<$> name,
+            ("required" Data..=) Prelude.<$> required,
+            ("value" Data..=) Prelude.<$> value
+          ]
+      )
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/WorkflowStepOutputUnion.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/WorkflowStepOutputUnion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/WorkflowStepOutputUnion.hs
@@ -0,0 +1,111 @@
+{-# 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.MigrationHubOrchestrator.Types.WorkflowStepOutputUnion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.WorkflowStepOutputUnion where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A structure to hold multiple values of an output.
+--
+-- /See:/ 'newWorkflowStepOutputUnion' smart constructor.
+data WorkflowStepOutputUnion = WorkflowStepOutputUnion'
+  { -- | The integer value.
+    integerValue :: Prelude.Maybe Prelude.Int,
+    -- | The list of string value.
+    listOfStringValue :: Prelude.Maybe [Prelude.Text],
+    -- | The string value.
+    stringValue :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkflowStepOutputUnion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'integerValue', 'workflowStepOutputUnion_integerValue' - The integer value.
+--
+-- 'listOfStringValue', 'workflowStepOutputUnion_listOfStringValue' - The list of string value.
+--
+-- 'stringValue', 'workflowStepOutputUnion_stringValue' - The string value.
+newWorkflowStepOutputUnion ::
+  WorkflowStepOutputUnion
+newWorkflowStepOutputUnion =
+  WorkflowStepOutputUnion'
+    { integerValue =
+        Prelude.Nothing,
+      listOfStringValue = Prelude.Nothing,
+      stringValue = Prelude.Nothing
+    }
+
+-- | The integer value.
+workflowStepOutputUnion_integerValue :: Lens.Lens' WorkflowStepOutputUnion (Prelude.Maybe Prelude.Int)
+workflowStepOutputUnion_integerValue = Lens.lens (\WorkflowStepOutputUnion' {integerValue} -> integerValue) (\s@WorkflowStepOutputUnion' {} a -> s {integerValue = a} :: WorkflowStepOutputUnion)
+
+-- | The list of string value.
+workflowStepOutputUnion_listOfStringValue :: Lens.Lens' WorkflowStepOutputUnion (Prelude.Maybe [Prelude.Text])
+workflowStepOutputUnion_listOfStringValue = Lens.lens (\WorkflowStepOutputUnion' {listOfStringValue} -> listOfStringValue) (\s@WorkflowStepOutputUnion' {} a -> s {listOfStringValue = a} :: WorkflowStepOutputUnion) Prelude.. Lens.mapping Lens.coerced
+
+-- | The string value.
+workflowStepOutputUnion_stringValue :: Lens.Lens' WorkflowStepOutputUnion (Prelude.Maybe Prelude.Text)
+workflowStepOutputUnion_stringValue = Lens.lens (\WorkflowStepOutputUnion' {stringValue} -> stringValue) (\s@WorkflowStepOutputUnion' {} a -> s {stringValue = a} :: WorkflowStepOutputUnion)
+
+instance Data.FromJSON WorkflowStepOutputUnion where
+  parseJSON =
+    Data.withObject
+      "WorkflowStepOutputUnion"
+      ( \x ->
+          WorkflowStepOutputUnion'
+            Prelude.<$> (x Data..:? "integerValue")
+            Prelude.<*> ( x
+                            Data..:? "listOfStringValue"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "stringValue")
+      )
+
+instance Prelude.Hashable WorkflowStepOutputUnion where
+  hashWithSalt _salt WorkflowStepOutputUnion' {..} =
+    _salt
+      `Prelude.hashWithSalt` integerValue
+      `Prelude.hashWithSalt` listOfStringValue
+      `Prelude.hashWithSalt` stringValue
+
+instance Prelude.NFData WorkflowStepOutputUnion where
+  rnf WorkflowStepOutputUnion' {..} =
+    Prelude.rnf integerValue
+      `Prelude.seq` Prelude.rnf listOfStringValue
+      `Prelude.seq` Prelude.rnf stringValue
+
+instance Data.ToJSON WorkflowStepOutputUnion where
+  toJSON WorkflowStepOutputUnion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("integerValue" Data..=) Prelude.<$> integerValue,
+            ("listOfStringValue" Data..=)
+              Prelude.<$> listOfStringValue,
+            ("stringValue" Data..=) Prelude.<$> stringValue
+          ]
+      )
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Types/WorkflowStepSummary.hs b/gen/Amazonka/MigrationHubOrchestrator/Types/WorkflowStepSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/Types/WorkflowStepSummary.hs
@@ -0,0 +1,225 @@
+{-# 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.MigrationHubOrchestrator.Types.WorkflowStepSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MigrationHubOrchestrator.Types.WorkflowStepSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types.Owner
+import Amazonka.MigrationHubOrchestrator.Types.StepActionType
+import Amazonka.MigrationHubOrchestrator.Types.StepStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | The summary of the step in a migration workflow.
+--
+-- /See:/ 'newWorkflowStepSummary' smart constructor.
+data WorkflowStepSummary = WorkflowStepSummary'
+  { -- | The description of the step.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the step.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The next step.
+    next :: Prelude.Maybe [Prelude.Text],
+    -- | The number of servers that have been migrated.
+    noOfSrvCompleted :: Prelude.Maybe Prelude.Int,
+    -- | The number of servers that have failed to migrate.
+    noOfSrvFailed :: Prelude.Maybe Prelude.Int,
+    -- | The owner of the step.
+    owner :: Prelude.Maybe Owner,
+    -- | The previous step.
+    previous :: Prelude.Maybe [Prelude.Text],
+    -- | The location of the script.
+    scriptLocation :: Prelude.Maybe Prelude.Text,
+    -- | The status of the step.
+    status :: Prelude.Maybe StepStatus,
+    -- | The status message of the migration workflow.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The action type of the step. You must run and update the status of a
+    -- manual step for the workflow to continue after the completion of the
+    -- step.
+    stepActionType :: Prelude.Maybe StepActionType,
+    -- | The ID of the step.
+    stepId :: Prelude.Maybe Prelude.Text,
+    -- | The total number of servers that have been migrated.
+    totalNoOfSrv :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkflowStepSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'workflowStepSummary_description' - The description of the step.
+--
+-- 'name', 'workflowStepSummary_name' - The name of the step.
+--
+-- 'next', 'workflowStepSummary_next' - The next step.
+--
+-- 'noOfSrvCompleted', 'workflowStepSummary_noOfSrvCompleted' - The number of servers that have been migrated.
+--
+-- 'noOfSrvFailed', 'workflowStepSummary_noOfSrvFailed' - The number of servers that have failed to migrate.
+--
+-- 'owner', 'workflowStepSummary_owner' - The owner of the step.
+--
+-- 'previous', 'workflowStepSummary_previous' - The previous step.
+--
+-- 'scriptLocation', 'workflowStepSummary_scriptLocation' - The location of the script.
+--
+-- 'status', 'workflowStepSummary_status' - The status of the step.
+--
+-- 'statusMessage', 'workflowStepSummary_statusMessage' - The status message of the migration workflow.
+--
+-- 'stepActionType', 'workflowStepSummary_stepActionType' - The action type of the step. You must run and update the status of a
+-- manual step for the workflow to continue after the completion of the
+-- step.
+--
+-- 'stepId', 'workflowStepSummary_stepId' - The ID of the step.
+--
+-- 'totalNoOfSrv', 'workflowStepSummary_totalNoOfSrv' - The total number of servers that have been migrated.
+newWorkflowStepSummary ::
+  WorkflowStepSummary
+newWorkflowStepSummary =
+  WorkflowStepSummary'
+    { description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      next = Prelude.Nothing,
+      noOfSrvCompleted = Prelude.Nothing,
+      noOfSrvFailed = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      previous = Prelude.Nothing,
+      scriptLocation = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      stepActionType = Prelude.Nothing,
+      stepId = Prelude.Nothing,
+      totalNoOfSrv = Prelude.Nothing
+    }
+
+-- | The description of the step.
+workflowStepSummary_description :: Lens.Lens' WorkflowStepSummary (Prelude.Maybe Prelude.Text)
+workflowStepSummary_description = Lens.lens (\WorkflowStepSummary' {description} -> description) (\s@WorkflowStepSummary' {} a -> s {description = a} :: WorkflowStepSummary)
+
+-- | The name of the step.
+workflowStepSummary_name :: Lens.Lens' WorkflowStepSummary (Prelude.Maybe Prelude.Text)
+workflowStepSummary_name = Lens.lens (\WorkflowStepSummary' {name} -> name) (\s@WorkflowStepSummary' {} a -> s {name = a} :: WorkflowStepSummary)
+
+-- | The next step.
+workflowStepSummary_next :: Lens.Lens' WorkflowStepSummary (Prelude.Maybe [Prelude.Text])
+workflowStepSummary_next = Lens.lens (\WorkflowStepSummary' {next} -> next) (\s@WorkflowStepSummary' {} a -> s {next = a} :: WorkflowStepSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of servers that have been migrated.
+workflowStepSummary_noOfSrvCompleted :: Lens.Lens' WorkflowStepSummary (Prelude.Maybe Prelude.Int)
+workflowStepSummary_noOfSrvCompleted = Lens.lens (\WorkflowStepSummary' {noOfSrvCompleted} -> noOfSrvCompleted) (\s@WorkflowStepSummary' {} a -> s {noOfSrvCompleted = a} :: WorkflowStepSummary)
+
+-- | The number of servers that have failed to migrate.
+workflowStepSummary_noOfSrvFailed :: Lens.Lens' WorkflowStepSummary (Prelude.Maybe Prelude.Int)
+workflowStepSummary_noOfSrvFailed = Lens.lens (\WorkflowStepSummary' {noOfSrvFailed} -> noOfSrvFailed) (\s@WorkflowStepSummary' {} a -> s {noOfSrvFailed = a} :: WorkflowStepSummary)
+
+-- | The owner of the step.
+workflowStepSummary_owner :: Lens.Lens' WorkflowStepSummary (Prelude.Maybe Owner)
+workflowStepSummary_owner = Lens.lens (\WorkflowStepSummary' {owner} -> owner) (\s@WorkflowStepSummary' {} a -> s {owner = a} :: WorkflowStepSummary)
+
+-- | The previous step.
+workflowStepSummary_previous :: Lens.Lens' WorkflowStepSummary (Prelude.Maybe [Prelude.Text])
+workflowStepSummary_previous = Lens.lens (\WorkflowStepSummary' {previous} -> previous) (\s@WorkflowStepSummary' {} a -> s {previous = a} :: WorkflowStepSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The location of the script.
+workflowStepSummary_scriptLocation :: Lens.Lens' WorkflowStepSummary (Prelude.Maybe Prelude.Text)
+workflowStepSummary_scriptLocation = Lens.lens (\WorkflowStepSummary' {scriptLocation} -> scriptLocation) (\s@WorkflowStepSummary' {} a -> s {scriptLocation = a} :: WorkflowStepSummary)
+
+-- | The status of the step.
+workflowStepSummary_status :: Lens.Lens' WorkflowStepSummary (Prelude.Maybe StepStatus)
+workflowStepSummary_status = Lens.lens (\WorkflowStepSummary' {status} -> status) (\s@WorkflowStepSummary' {} a -> s {status = a} :: WorkflowStepSummary)
+
+-- | The status message of the migration workflow.
+workflowStepSummary_statusMessage :: Lens.Lens' WorkflowStepSummary (Prelude.Maybe Prelude.Text)
+workflowStepSummary_statusMessage = Lens.lens (\WorkflowStepSummary' {statusMessage} -> statusMessage) (\s@WorkflowStepSummary' {} a -> s {statusMessage = a} :: WorkflowStepSummary)
+
+-- | The action type of the step. You must run and update the status of a
+-- manual step for the workflow to continue after the completion of the
+-- step.
+workflowStepSummary_stepActionType :: Lens.Lens' WorkflowStepSummary (Prelude.Maybe StepActionType)
+workflowStepSummary_stepActionType = Lens.lens (\WorkflowStepSummary' {stepActionType} -> stepActionType) (\s@WorkflowStepSummary' {} a -> s {stepActionType = a} :: WorkflowStepSummary)
+
+-- | The ID of the step.
+workflowStepSummary_stepId :: Lens.Lens' WorkflowStepSummary (Prelude.Maybe Prelude.Text)
+workflowStepSummary_stepId = Lens.lens (\WorkflowStepSummary' {stepId} -> stepId) (\s@WorkflowStepSummary' {} a -> s {stepId = a} :: WorkflowStepSummary)
+
+-- | The total number of servers that have been migrated.
+workflowStepSummary_totalNoOfSrv :: Lens.Lens' WorkflowStepSummary (Prelude.Maybe Prelude.Int)
+workflowStepSummary_totalNoOfSrv = Lens.lens (\WorkflowStepSummary' {totalNoOfSrv} -> totalNoOfSrv) (\s@WorkflowStepSummary' {} a -> s {totalNoOfSrv = a} :: WorkflowStepSummary)
+
+instance Data.FromJSON WorkflowStepSummary where
+  parseJSON =
+    Data.withObject
+      "WorkflowStepSummary"
+      ( \x ->
+          WorkflowStepSummary'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "next" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "noOfSrvCompleted")
+            Prelude.<*> (x Data..:? "noOfSrvFailed")
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "previous" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "scriptLocation")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "statusMessage")
+            Prelude.<*> (x Data..:? "stepActionType")
+            Prelude.<*> (x Data..:? "stepId")
+            Prelude.<*> (x Data..:? "totalNoOfSrv")
+      )
+
+instance Prelude.Hashable WorkflowStepSummary where
+  hashWithSalt _salt WorkflowStepSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` next
+      `Prelude.hashWithSalt` noOfSrvCompleted
+      `Prelude.hashWithSalt` noOfSrvFailed
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` previous
+      `Prelude.hashWithSalt` scriptLocation
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` stepActionType
+      `Prelude.hashWithSalt` stepId
+      `Prelude.hashWithSalt` totalNoOfSrv
+
+instance Prelude.NFData WorkflowStepSummary where
+  rnf WorkflowStepSummary' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf next
+      `Prelude.seq` Prelude.rnf noOfSrvCompleted
+      `Prelude.seq` Prelude.rnf noOfSrvFailed
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf previous
+      `Prelude.seq` Prelude.rnf scriptLocation
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf stepActionType
+      `Prelude.seq` Prelude.rnf stepId
+      `Prelude.seq` Prelude.rnf totalNoOfSrv
diff --git a/gen/Amazonka/MigrationHubOrchestrator/UntagResource.hs b/gen/Amazonka/MigrationHubOrchestrator/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/UntagResource.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MigrationHubOrchestrator.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)
+--
+-- Deletes the tags for a resource.
+module Amazonka.MigrationHubOrchestrator.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource from which you want to
+    -- remove tags.
+    resourceArn :: Prelude.Text,
+    -- | One or more tag keys. Specify only the tag keys, not the tag values.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource from which you want to
+-- remove tags.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - One or more tag keys. Specify only the tag keys, not the tag values.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource from which you want to
+-- remove tags.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | One or more tag keys. Specify only the tag keys, not the tag values.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/UpdateWorkflow.hs b/gen/Amazonka/MigrationHubOrchestrator/UpdateWorkflow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/UpdateWorkflow.hs
@@ -0,0 +1,355 @@
+{-# 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.MigrationHubOrchestrator.UpdateWorkflow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update a migration workflow.
+module Amazonka.MigrationHubOrchestrator.UpdateWorkflow
+  ( -- * Creating a Request
+    UpdateWorkflow (..),
+    newUpdateWorkflow,
+
+    -- * Request Lenses
+    updateWorkflow_description,
+    updateWorkflow_inputParameters,
+    updateWorkflow_name,
+    updateWorkflow_stepTargets,
+    updateWorkflow_id,
+
+    -- * Destructuring the Response
+    UpdateWorkflowResponse (..),
+    newUpdateWorkflowResponse,
+
+    -- * Response Lenses
+    updateWorkflowResponse_adsApplicationConfigurationId,
+    updateWorkflowResponse_arn,
+    updateWorkflowResponse_creationTime,
+    updateWorkflowResponse_description,
+    updateWorkflowResponse_id,
+    updateWorkflowResponse_lastModifiedTime,
+    updateWorkflowResponse_name,
+    updateWorkflowResponse_status,
+    updateWorkflowResponse_stepTargets,
+    updateWorkflowResponse_tags,
+    updateWorkflowResponse_templateId,
+    updateWorkflowResponse_workflowInputs,
+    updateWorkflowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateWorkflow' smart constructor.
+data UpdateWorkflow = UpdateWorkflow'
+  { -- | The description of the migration workflow.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The input parameters required to update a migration workflow.
+    inputParameters :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text StepInput)),
+    -- | The name of the migration workflow.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The servers on which a step will be run.
+    stepTargets :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the migration workflow.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWorkflow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateWorkflow_description' - The description of the migration workflow.
+--
+-- 'inputParameters', 'updateWorkflow_inputParameters' - The input parameters required to update a migration workflow.
+--
+-- 'name', 'updateWorkflow_name' - The name of the migration workflow.
+--
+-- 'stepTargets', 'updateWorkflow_stepTargets' - The servers on which a step will be run.
+--
+-- 'id', 'updateWorkflow_id' - The ID of the migration workflow.
+newUpdateWorkflow ::
+  -- | 'id'
+  Prelude.Text ->
+  UpdateWorkflow
+newUpdateWorkflow pId_ =
+  UpdateWorkflow'
+    { description = Prelude.Nothing,
+      inputParameters = Prelude.Nothing,
+      name = Prelude.Nothing,
+      stepTargets = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | The description of the migration workflow.
+updateWorkflow_description :: Lens.Lens' UpdateWorkflow (Prelude.Maybe Prelude.Text)
+updateWorkflow_description = Lens.lens (\UpdateWorkflow' {description} -> description) (\s@UpdateWorkflow' {} a -> s {description = a} :: UpdateWorkflow)
+
+-- | The input parameters required to update a migration workflow.
+updateWorkflow_inputParameters :: Lens.Lens' UpdateWorkflow (Prelude.Maybe (Prelude.HashMap Prelude.Text StepInput))
+updateWorkflow_inputParameters = Lens.lens (\UpdateWorkflow' {inputParameters} -> inputParameters) (\s@UpdateWorkflow' {} a -> s {inputParameters = a} :: UpdateWorkflow) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The name of the migration workflow.
+updateWorkflow_name :: Lens.Lens' UpdateWorkflow (Prelude.Maybe Prelude.Text)
+updateWorkflow_name = Lens.lens (\UpdateWorkflow' {name} -> name) (\s@UpdateWorkflow' {} a -> s {name = a} :: UpdateWorkflow)
+
+-- | The servers on which a step will be run.
+updateWorkflow_stepTargets :: Lens.Lens' UpdateWorkflow (Prelude.Maybe [Prelude.Text])
+updateWorkflow_stepTargets = Lens.lens (\UpdateWorkflow' {stepTargets} -> stepTargets) (\s@UpdateWorkflow' {} a -> s {stepTargets = a} :: UpdateWorkflow) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the migration workflow.
+updateWorkflow_id :: Lens.Lens' UpdateWorkflow Prelude.Text
+updateWorkflow_id = Lens.lens (\UpdateWorkflow' {id} -> id) (\s@UpdateWorkflow' {} a -> s {id = a} :: UpdateWorkflow)
+
+instance Core.AWSRequest UpdateWorkflow where
+  type
+    AWSResponse UpdateWorkflow =
+      UpdateWorkflowResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateWorkflowResponse'
+            Prelude.<$> (x Data..?> "adsApplicationConfigurationId")
+            Prelude.<*> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "lastModifiedTime")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "stepTargets" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "templateId")
+            Prelude.<*> (x Data..?> "workflowInputs" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateWorkflow where
+  hashWithSalt _salt UpdateWorkflow' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` inputParameters
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` stepTargets
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdateWorkflow where
+  rnf UpdateWorkflow' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf inputParameters
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf stepTargets
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdateWorkflow where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateWorkflow where
+  toJSON UpdateWorkflow' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("inputParameters" Data..=)
+              Prelude.<$> inputParameters,
+            ("name" Data..=) Prelude.<$> name,
+            ("stepTargets" Data..=) Prelude.<$> stepTargets
+          ]
+      )
+
+instance Data.ToPath UpdateWorkflow where
+  toPath UpdateWorkflow' {..} =
+    Prelude.mconcat
+      ["/migrationworkflow/", Data.toBS id]
+
+instance Data.ToQuery UpdateWorkflow where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateWorkflowResponse' smart constructor.
+data UpdateWorkflowResponse = UpdateWorkflowResponse'
+  { -- | The ID of the application configured in Application Discovery Service.
+    adsApplicationConfigurationId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the migration workflow.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the migration workflow was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the migration workflow.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the migration workflow.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the migration workflow was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the migration workflow.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The status of the migration workflow.
+    status :: Prelude.Maybe MigrationWorkflowStatusEnum,
+    -- | The servers on which a step will be run.
+    stepTargets :: Prelude.Maybe [Prelude.Text],
+    -- | The tags added to the migration workflow.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ID of the template.
+    templateId :: Prelude.Maybe Prelude.Text,
+    -- | The inputs required to update a migration workflow.
+    workflowInputs :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text StepInput)),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWorkflowResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'adsApplicationConfigurationId', 'updateWorkflowResponse_adsApplicationConfigurationId' - The ID of the application configured in Application Discovery Service.
+--
+-- 'arn', 'updateWorkflowResponse_arn' - The Amazon Resource Name (ARN) of the migration workflow.
+--
+-- 'creationTime', 'updateWorkflowResponse_creationTime' - The time at which the migration workflow was created.
+--
+-- 'description', 'updateWorkflowResponse_description' - The description of the migration workflow.
+--
+-- 'id', 'updateWorkflowResponse_id' - The ID of the migration workflow.
+--
+-- 'lastModifiedTime', 'updateWorkflowResponse_lastModifiedTime' - The time at which the migration workflow was last modified.
+--
+-- 'name', 'updateWorkflowResponse_name' - The name of the migration workflow.
+--
+-- 'status', 'updateWorkflowResponse_status' - The status of the migration workflow.
+--
+-- 'stepTargets', 'updateWorkflowResponse_stepTargets' - The servers on which a step will be run.
+--
+-- 'tags', 'updateWorkflowResponse_tags' - The tags added to the migration workflow.
+--
+-- 'templateId', 'updateWorkflowResponse_templateId' - The ID of the template.
+--
+-- 'workflowInputs', 'updateWorkflowResponse_workflowInputs' - The inputs required to update a migration workflow.
+--
+-- 'httpStatus', 'updateWorkflowResponse_httpStatus' - The response's http status code.
+newUpdateWorkflowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateWorkflowResponse
+newUpdateWorkflowResponse pHttpStatus_ =
+  UpdateWorkflowResponse'
+    { adsApplicationConfigurationId =
+        Prelude.Nothing,
+      arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      stepTargets = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      templateId = Prelude.Nothing,
+      workflowInputs = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the application configured in Application Discovery Service.
+updateWorkflowResponse_adsApplicationConfigurationId :: Lens.Lens' UpdateWorkflowResponse (Prelude.Maybe Prelude.Text)
+updateWorkflowResponse_adsApplicationConfigurationId = Lens.lens (\UpdateWorkflowResponse' {adsApplicationConfigurationId} -> adsApplicationConfigurationId) (\s@UpdateWorkflowResponse' {} a -> s {adsApplicationConfigurationId = a} :: UpdateWorkflowResponse)
+
+-- | The Amazon Resource Name (ARN) of the migration workflow.
+updateWorkflowResponse_arn :: Lens.Lens' UpdateWorkflowResponse (Prelude.Maybe Prelude.Text)
+updateWorkflowResponse_arn = Lens.lens (\UpdateWorkflowResponse' {arn} -> arn) (\s@UpdateWorkflowResponse' {} a -> s {arn = a} :: UpdateWorkflowResponse)
+
+-- | The time at which the migration workflow was created.
+updateWorkflowResponse_creationTime :: Lens.Lens' UpdateWorkflowResponse (Prelude.Maybe Prelude.UTCTime)
+updateWorkflowResponse_creationTime = Lens.lens (\UpdateWorkflowResponse' {creationTime} -> creationTime) (\s@UpdateWorkflowResponse' {} a -> s {creationTime = a} :: UpdateWorkflowResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the migration workflow.
+updateWorkflowResponse_description :: Lens.Lens' UpdateWorkflowResponse (Prelude.Maybe Prelude.Text)
+updateWorkflowResponse_description = Lens.lens (\UpdateWorkflowResponse' {description} -> description) (\s@UpdateWorkflowResponse' {} a -> s {description = a} :: UpdateWorkflowResponse)
+
+-- | The ID of the migration workflow.
+updateWorkflowResponse_id :: Lens.Lens' UpdateWorkflowResponse (Prelude.Maybe Prelude.Text)
+updateWorkflowResponse_id = Lens.lens (\UpdateWorkflowResponse' {id} -> id) (\s@UpdateWorkflowResponse' {} a -> s {id = a} :: UpdateWorkflowResponse)
+
+-- | The time at which the migration workflow was last modified.
+updateWorkflowResponse_lastModifiedTime :: Lens.Lens' UpdateWorkflowResponse (Prelude.Maybe Prelude.UTCTime)
+updateWorkflowResponse_lastModifiedTime = Lens.lens (\UpdateWorkflowResponse' {lastModifiedTime} -> lastModifiedTime) (\s@UpdateWorkflowResponse' {} a -> s {lastModifiedTime = a} :: UpdateWorkflowResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the migration workflow.
+updateWorkflowResponse_name :: Lens.Lens' UpdateWorkflowResponse (Prelude.Maybe Prelude.Text)
+updateWorkflowResponse_name = Lens.lens (\UpdateWorkflowResponse' {name} -> name) (\s@UpdateWorkflowResponse' {} a -> s {name = a} :: UpdateWorkflowResponse)
+
+-- | The status of the migration workflow.
+updateWorkflowResponse_status :: Lens.Lens' UpdateWorkflowResponse (Prelude.Maybe MigrationWorkflowStatusEnum)
+updateWorkflowResponse_status = Lens.lens (\UpdateWorkflowResponse' {status} -> status) (\s@UpdateWorkflowResponse' {} a -> s {status = a} :: UpdateWorkflowResponse)
+
+-- | The servers on which a step will be run.
+updateWorkflowResponse_stepTargets :: Lens.Lens' UpdateWorkflowResponse (Prelude.Maybe [Prelude.Text])
+updateWorkflowResponse_stepTargets = Lens.lens (\UpdateWorkflowResponse' {stepTargets} -> stepTargets) (\s@UpdateWorkflowResponse' {} a -> s {stepTargets = a} :: UpdateWorkflowResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags added to the migration workflow.
+updateWorkflowResponse_tags :: Lens.Lens' UpdateWorkflowResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateWorkflowResponse_tags = Lens.lens (\UpdateWorkflowResponse' {tags} -> tags) (\s@UpdateWorkflowResponse' {} a -> s {tags = a} :: UpdateWorkflowResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the template.
+updateWorkflowResponse_templateId :: Lens.Lens' UpdateWorkflowResponse (Prelude.Maybe Prelude.Text)
+updateWorkflowResponse_templateId = Lens.lens (\UpdateWorkflowResponse' {templateId} -> templateId) (\s@UpdateWorkflowResponse' {} a -> s {templateId = a} :: UpdateWorkflowResponse)
+
+-- | The inputs required to update a migration workflow.
+updateWorkflowResponse_workflowInputs :: Lens.Lens' UpdateWorkflowResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text StepInput))
+updateWorkflowResponse_workflowInputs = Lens.lens (\UpdateWorkflowResponse' {workflowInputs} -> workflowInputs) (\s@UpdateWorkflowResponse' {} a -> s {workflowInputs = a} :: UpdateWorkflowResponse) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The response's http status code.
+updateWorkflowResponse_httpStatus :: Lens.Lens' UpdateWorkflowResponse Prelude.Int
+updateWorkflowResponse_httpStatus = Lens.lens (\UpdateWorkflowResponse' {httpStatus} -> httpStatus) (\s@UpdateWorkflowResponse' {} a -> s {httpStatus = a} :: UpdateWorkflowResponse)
+
+instance Prelude.NFData UpdateWorkflowResponse where
+  rnf UpdateWorkflowResponse' {..} =
+    Prelude.rnf adsApplicationConfigurationId
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf stepTargets
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf templateId
+      `Prelude.seq` Prelude.rnf workflowInputs
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/UpdateWorkflowStep.hs b/gen/Amazonka/MigrationHubOrchestrator/UpdateWorkflowStep.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/UpdateWorkflowStep.hs
@@ -0,0 +1,360 @@
+{-# 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.MigrationHubOrchestrator.UpdateWorkflowStep
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update a step in a migration workflow.
+module Amazonka.MigrationHubOrchestrator.UpdateWorkflowStep
+  ( -- * Creating a Request
+    UpdateWorkflowStep (..),
+    newUpdateWorkflowStep,
+
+    -- * Request Lenses
+    updateWorkflowStep_description,
+    updateWorkflowStep_name,
+    updateWorkflowStep_next,
+    updateWorkflowStep_outputs,
+    updateWorkflowStep_previous,
+    updateWorkflowStep_status,
+    updateWorkflowStep_stepActionType,
+    updateWorkflowStep_stepTarget,
+    updateWorkflowStep_workflowStepAutomationConfiguration,
+    updateWorkflowStep_id,
+    updateWorkflowStep_stepGroupId,
+    updateWorkflowStep_workflowId,
+
+    -- * Destructuring the Response
+    UpdateWorkflowStepResponse (..),
+    newUpdateWorkflowStepResponse,
+
+    -- * Response Lenses
+    updateWorkflowStepResponse_id,
+    updateWorkflowStepResponse_name,
+    updateWorkflowStepResponse_stepGroupId,
+    updateWorkflowStepResponse_workflowId,
+    updateWorkflowStepResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateWorkflowStep' smart constructor.
+data UpdateWorkflowStep = UpdateWorkflowStep'
+  { -- | The description of the step.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the step.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The next step.
+    next :: Prelude.Maybe [Prelude.Text],
+    -- | The outputs of a step.
+    outputs :: Prelude.Maybe [WorkflowStepOutput],
+    -- | The previous step.
+    previous :: Prelude.Maybe [Prelude.Text],
+    -- | The status of the step.
+    status :: Prelude.Maybe StepStatus,
+    -- | The action type of the step. You must run and update the status of a
+    -- manual step for the workflow to continue after the completion of the
+    -- step.
+    stepActionType :: Prelude.Maybe StepActionType,
+    -- | The servers on which a step will be run.
+    stepTarget :: Prelude.Maybe [Prelude.Text],
+    -- | The custom script to run tests on the source and target environments.
+    workflowStepAutomationConfiguration :: Prelude.Maybe WorkflowStepAutomationConfiguration,
+    -- | The ID of the step.
+    id :: Prelude.Text,
+    -- | The ID of the step group.
+    stepGroupId :: Prelude.Text,
+    -- | The ID of the migration workflow.
+    workflowId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWorkflowStep' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateWorkflowStep_description' - The description of the step.
+--
+-- 'name', 'updateWorkflowStep_name' - The name of the step.
+--
+-- 'next', 'updateWorkflowStep_next' - The next step.
+--
+-- 'outputs', 'updateWorkflowStep_outputs' - The outputs of a step.
+--
+-- 'previous', 'updateWorkflowStep_previous' - The previous step.
+--
+-- 'status', 'updateWorkflowStep_status' - The status of the step.
+--
+-- 'stepActionType', 'updateWorkflowStep_stepActionType' - The action type of the step. You must run and update the status of a
+-- manual step for the workflow to continue after the completion of the
+-- step.
+--
+-- 'stepTarget', 'updateWorkflowStep_stepTarget' - The servers on which a step will be run.
+--
+-- 'workflowStepAutomationConfiguration', 'updateWorkflowStep_workflowStepAutomationConfiguration' - The custom script to run tests on the source and target environments.
+--
+-- 'id', 'updateWorkflowStep_id' - The ID of the step.
+--
+-- 'stepGroupId', 'updateWorkflowStep_stepGroupId' - The ID of the step group.
+--
+-- 'workflowId', 'updateWorkflowStep_workflowId' - The ID of the migration workflow.
+newUpdateWorkflowStep ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'stepGroupId'
+  Prelude.Text ->
+  -- | 'workflowId'
+  Prelude.Text ->
+  UpdateWorkflowStep
+newUpdateWorkflowStep pId_ pStepGroupId_ pWorkflowId_ =
+  UpdateWorkflowStep'
+    { description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      next = Prelude.Nothing,
+      outputs = Prelude.Nothing,
+      previous = Prelude.Nothing,
+      status = Prelude.Nothing,
+      stepActionType = Prelude.Nothing,
+      stepTarget = Prelude.Nothing,
+      workflowStepAutomationConfiguration =
+        Prelude.Nothing,
+      id = pId_,
+      stepGroupId = pStepGroupId_,
+      workflowId = pWorkflowId_
+    }
+
+-- | The description of the step.
+updateWorkflowStep_description :: Lens.Lens' UpdateWorkflowStep (Prelude.Maybe Prelude.Text)
+updateWorkflowStep_description = Lens.lens (\UpdateWorkflowStep' {description} -> description) (\s@UpdateWorkflowStep' {} a -> s {description = a} :: UpdateWorkflowStep)
+
+-- | The name of the step.
+updateWorkflowStep_name :: Lens.Lens' UpdateWorkflowStep (Prelude.Maybe Prelude.Text)
+updateWorkflowStep_name = Lens.lens (\UpdateWorkflowStep' {name} -> name) (\s@UpdateWorkflowStep' {} a -> s {name = a} :: UpdateWorkflowStep)
+
+-- | The next step.
+updateWorkflowStep_next :: Lens.Lens' UpdateWorkflowStep (Prelude.Maybe [Prelude.Text])
+updateWorkflowStep_next = Lens.lens (\UpdateWorkflowStep' {next} -> next) (\s@UpdateWorkflowStep' {} a -> s {next = a} :: UpdateWorkflowStep) Prelude.. Lens.mapping Lens.coerced
+
+-- | The outputs of a step.
+updateWorkflowStep_outputs :: Lens.Lens' UpdateWorkflowStep (Prelude.Maybe [WorkflowStepOutput])
+updateWorkflowStep_outputs = Lens.lens (\UpdateWorkflowStep' {outputs} -> outputs) (\s@UpdateWorkflowStep' {} a -> s {outputs = a} :: UpdateWorkflowStep) Prelude.. Lens.mapping Lens.coerced
+
+-- | The previous step.
+updateWorkflowStep_previous :: Lens.Lens' UpdateWorkflowStep (Prelude.Maybe [Prelude.Text])
+updateWorkflowStep_previous = Lens.lens (\UpdateWorkflowStep' {previous} -> previous) (\s@UpdateWorkflowStep' {} a -> s {previous = a} :: UpdateWorkflowStep) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the step.
+updateWorkflowStep_status :: Lens.Lens' UpdateWorkflowStep (Prelude.Maybe StepStatus)
+updateWorkflowStep_status = Lens.lens (\UpdateWorkflowStep' {status} -> status) (\s@UpdateWorkflowStep' {} a -> s {status = a} :: UpdateWorkflowStep)
+
+-- | The action type of the step. You must run and update the status of a
+-- manual step for the workflow to continue after the completion of the
+-- step.
+updateWorkflowStep_stepActionType :: Lens.Lens' UpdateWorkflowStep (Prelude.Maybe StepActionType)
+updateWorkflowStep_stepActionType = Lens.lens (\UpdateWorkflowStep' {stepActionType} -> stepActionType) (\s@UpdateWorkflowStep' {} a -> s {stepActionType = a} :: UpdateWorkflowStep)
+
+-- | The servers on which a step will be run.
+updateWorkflowStep_stepTarget :: Lens.Lens' UpdateWorkflowStep (Prelude.Maybe [Prelude.Text])
+updateWorkflowStep_stepTarget = Lens.lens (\UpdateWorkflowStep' {stepTarget} -> stepTarget) (\s@UpdateWorkflowStep' {} a -> s {stepTarget = a} :: UpdateWorkflowStep) Prelude.. Lens.mapping Lens.coerced
+
+-- | The custom script to run tests on the source and target environments.
+updateWorkflowStep_workflowStepAutomationConfiguration :: Lens.Lens' UpdateWorkflowStep (Prelude.Maybe WorkflowStepAutomationConfiguration)
+updateWorkflowStep_workflowStepAutomationConfiguration = Lens.lens (\UpdateWorkflowStep' {workflowStepAutomationConfiguration} -> workflowStepAutomationConfiguration) (\s@UpdateWorkflowStep' {} a -> s {workflowStepAutomationConfiguration = a} :: UpdateWorkflowStep)
+
+-- | The ID of the step.
+updateWorkflowStep_id :: Lens.Lens' UpdateWorkflowStep Prelude.Text
+updateWorkflowStep_id = Lens.lens (\UpdateWorkflowStep' {id} -> id) (\s@UpdateWorkflowStep' {} a -> s {id = a} :: UpdateWorkflowStep)
+
+-- | The ID of the step group.
+updateWorkflowStep_stepGroupId :: Lens.Lens' UpdateWorkflowStep Prelude.Text
+updateWorkflowStep_stepGroupId = Lens.lens (\UpdateWorkflowStep' {stepGroupId} -> stepGroupId) (\s@UpdateWorkflowStep' {} a -> s {stepGroupId = a} :: UpdateWorkflowStep)
+
+-- | The ID of the migration workflow.
+updateWorkflowStep_workflowId :: Lens.Lens' UpdateWorkflowStep Prelude.Text
+updateWorkflowStep_workflowId = Lens.lens (\UpdateWorkflowStep' {workflowId} -> workflowId) (\s@UpdateWorkflowStep' {} a -> s {workflowId = a} :: UpdateWorkflowStep)
+
+instance Core.AWSRequest UpdateWorkflowStep where
+  type
+    AWSResponse UpdateWorkflowStep =
+      UpdateWorkflowStepResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateWorkflowStepResponse'
+            Prelude.<$> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "stepGroupId")
+            Prelude.<*> (x Data..?> "workflowId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateWorkflowStep where
+  hashWithSalt _salt UpdateWorkflowStep' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` next
+      `Prelude.hashWithSalt` outputs
+      `Prelude.hashWithSalt` previous
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` stepActionType
+      `Prelude.hashWithSalt` stepTarget
+      `Prelude.hashWithSalt` workflowStepAutomationConfiguration
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` stepGroupId
+      `Prelude.hashWithSalt` workflowId
+
+instance Prelude.NFData UpdateWorkflowStep where
+  rnf UpdateWorkflowStep' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf next
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf previous
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf stepActionType
+      `Prelude.seq` Prelude.rnf stepTarget
+      `Prelude.seq` Prelude.rnf workflowStepAutomationConfiguration
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf stepGroupId
+      `Prelude.seq` Prelude.rnf workflowId
+
+instance Data.ToHeaders UpdateWorkflowStep where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateWorkflowStep where
+  toJSON UpdateWorkflowStep' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("name" Data..=) Prelude.<$> name,
+            ("next" Data..=) Prelude.<$> next,
+            ("outputs" Data..=) Prelude.<$> outputs,
+            ("previous" Data..=) Prelude.<$> previous,
+            ("status" Data..=) Prelude.<$> status,
+            ("stepActionType" Data..=)
+              Prelude.<$> stepActionType,
+            ("stepTarget" Data..=) Prelude.<$> stepTarget,
+            ("workflowStepAutomationConfiguration" Data..=)
+              Prelude.<$> workflowStepAutomationConfiguration,
+            Prelude.Just ("stepGroupId" Data..= stepGroupId),
+            Prelude.Just ("workflowId" Data..= workflowId)
+          ]
+      )
+
+instance Data.ToPath UpdateWorkflowStep where
+  toPath UpdateWorkflowStep' {..} =
+    Prelude.mconcat ["/workflowstep/", Data.toBS id]
+
+instance Data.ToQuery UpdateWorkflowStep where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateWorkflowStepResponse' smart constructor.
+data UpdateWorkflowStepResponse = UpdateWorkflowStepResponse'
+  { -- | The ID of the step.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the step.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the step group.
+    stepGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the migration workflow.
+    workflowId :: 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 'UpdateWorkflowStepResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'updateWorkflowStepResponse_id' - The ID of the step.
+--
+-- 'name', 'updateWorkflowStepResponse_name' - The name of the step.
+--
+-- 'stepGroupId', 'updateWorkflowStepResponse_stepGroupId' - The ID of the step group.
+--
+-- 'workflowId', 'updateWorkflowStepResponse_workflowId' - The ID of the migration workflow.
+--
+-- 'httpStatus', 'updateWorkflowStepResponse_httpStatus' - The response's http status code.
+newUpdateWorkflowStepResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateWorkflowStepResponse
+newUpdateWorkflowStepResponse pHttpStatus_ =
+  UpdateWorkflowStepResponse'
+    { id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      stepGroupId = Prelude.Nothing,
+      workflowId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the step.
+updateWorkflowStepResponse_id :: Lens.Lens' UpdateWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+updateWorkflowStepResponse_id = Lens.lens (\UpdateWorkflowStepResponse' {id} -> id) (\s@UpdateWorkflowStepResponse' {} a -> s {id = a} :: UpdateWorkflowStepResponse)
+
+-- | The name of the step.
+updateWorkflowStepResponse_name :: Lens.Lens' UpdateWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+updateWorkflowStepResponse_name = Lens.lens (\UpdateWorkflowStepResponse' {name} -> name) (\s@UpdateWorkflowStepResponse' {} a -> s {name = a} :: UpdateWorkflowStepResponse)
+
+-- | The ID of the step group.
+updateWorkflowStepResponse_stepGroupId :: Lens.Lens' UpdateWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+updateWorkflowStepResponse_stepGroupId = Lens.lens (\UpdateWorkflowStepResponse' {stepGroupId} -> stepGroupId) (\s@UpdateWorkflowStepResponse' {} a -> s {stepGroupId = a} :: UpdateWorkflowStepResponse)
+
+-- | The ID of the migration workflow.
+updateWorkflowStepResponse_workflowId :: Lens.Lens' UpdateWorkflowStepResponse (Prelude.Maybe Prelude.Text)
+updateWorkflowStepResponse_workflowId = Lens.lens (\UpdateWorkflowStepResponse' {workflowId} -> workflowId) (\s@UpdateWorkflowStepResponse' {} a -> s {workflowId = a} :: UpdateWorkflowStepResponse)
+
+-- | The response's http status code.
+updateWorkflowStepResponse_httpStatus :: Lens.Lens' UpdateWorkflowStepResponse Prelude.Int
+updateWorkflowStepResponse_httpStatus = Lens.lens (\UpdateWorkflowStepResponse' {httpStatus} -> httpStatus) (\s@UpdateWorkflowStepResponse' {} a -> s {httpStatus = a} :: UpdateWorkflowStepResponse)
+
+instance Prelude.NFData UpdateWorkflowStepResponse where
+  rnf UpdateWorkflowStepResponse' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf stepGroupId
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/UpdateWorkflowStepGroup.hs b/gen/Amazonka/MigrationHubOrchestrator/UpdateWorkflowStepGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/UpdateWorkflowStepGroup.hs
@@ -0,0 +1,325 @@
+{-# 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.MigrationHubOrchestrator.UpdateWorkflowStepGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update the step group in a migration workflow.
+module Amazonka.MigrationHubOrchestrator.UpdateWorkflowStepGroup
+  ( -- * Creating a Request
+    UpdateWorkflowStepGroup (..),
+    newUpdateWorkflowStepGroup,
+
+    -- * Request Lenses
+    updateWorkflowStepGroup_description,
+    updateWorkflowStepGroup_name,
+    updateWorkflowStepGroup_next,
+    updateWorkflowStepGroup_previous,
+    updateWorkflowStepGroup_workflowId,
+    updateWorkflowStepGroup_id,
+
+    -- * Destructuring the Response
+    UpdateWorkflowStepGroupResponse (..),
+    newUpdateWorkflowStepGroupResponse,
+
+    -- * Response Lenses
+    updateWorkflowStepGroupResponse_description,
+    updateWorkflowStepGroupResponse_id,
+    updateWorkflowStepGroupResponse_lastModifiedTime,
+    updateWorkflowStepGroupResponse_name,
+    updateWorkflowStepGroupResponse_next,
+    updateWorkflowStepGroupResponse_previous,
+    updateWorkflowStepGroupResponse_tools,
+    updateWorkflowStepGroupResponse_workflowId,
+    updateWorkflowStepGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateWorkflowStepGroup' smart constructor.
+data UpdateWorkflowStepGroup = UpdateWorkflowStepGroup'
+  { -- | The description of the step group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the step group.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The next step group.
+    next :: Prelude.Maybe [Prelude.Text],
+    -- | The previous step group.
+    previous :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the migration workflow.
+    workflowId :: Prelude.Text,
+    -- | The ID of the step group.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWorkflowStepGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateWorkflowStepGroup_description' - The description of the step group.
+--
+-- 'name', 'updateWorkflowStepGroup_name' - The name of the step group.
+--
+-- 'next', 'updateWorkflowStepGroup_next' - The next step group.
+--
+-- 'previous', 'updateWorkflowStepGroup_previous' - The previous step group.
+--
+-- 'workflowId', 'updateWorkflowStepGroup_workflowId' - The ID of the migration workflow.
+--
+-- 'id', 'updateWorkflowStepGroup_id' - The ID of the step group.
+newUpdateWorkflowStepGroup ::
+  -- | 'workflowId'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  UpdateWorkflowStepGroup
+newUpdateWorkflowStepGroup pWorkflowId_ pId_ =
+  UpdateWorkflowStepGroup'
+    { description =
+        Prelude.Nothing,
+      name = Prelude.Nothing,
+      next = Prelude.Nothing,
+      previous = Prelude.Nothing,
+      workflowId = pWorkflowId_,
+      id = pId_
+    }
+
+-- | The description of the step group.
+updateWorkflowStepGroup_description :: Lens.Lens' UpdateWorkflowStepGroup (Prelude.Maybe Prelude.Text)
+updateWorkflowStepGroup_description = Lens.lens (\UpdateWorkflowStepGroup' {description} -> description) (\s@UpdateWorkflowStepGroup' {} a -> s {description = a} :: UpdateWorkflowStepGroup)
+
+-- | The name of the step group.
+updateWorkflowStepGroup_name :: Lens.Lens' UpdateWorkflowStepGroup (Prelude.Maybe Prelude.Text)
+updateWorkflowStepGroup_name = Lens.lens (\UpdateWorkflowStepGroup' {name} -> name) (\s@UpdateWorkflowStepGroup' {} a -> s {name = a} :: UpdateWorkflowStepGroup)
+
+-- | The next step group.
+updateWorkflowStepGroup_next :: Lens.Lens' UpdateWorkflowStepGroup (Prelude.Maybe [Prelude.Text])
+updateWorkflowStepGroup_next = Lens.lens (\UpdateWorkflowStepGroup' {next} -> next) (\s@UpdateWorkflowStepGroup' {} a -> s {next = a} :: UpdateWorkflowStepGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The previous step group.
+updateWorkflowStepGroup_previous :: Lens.Lens' UpdateWorkflowStepGroup (Prelude.Maybe [Prelude.Text])
+updateWorkflowStepGroup_previous = Lens.lens (\UpdateWorkflowStepGroup' {previous} -> previous) (\s@UpdateWorkflowStepGroup' {} a -> s {previous = a} :: UpdateWorkflowStepGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the migration workflow.
+updateWorkflowStepGroup_workflowId :: Lens.Lens' UpdateWorkflowStepGroup Prelude.Text
+updateWorkflowStepGroup_workflowId = Lens.lens (\UpdateWorkflowStepGroup' {workflowId} -> workflowId) (\s@UpdateWorkflowStepGroup' {} a -> s {workflowId = a} :: UpdateWorkflowStepGroup)
+
+-- | The ID of the step group.
+updateWorkflowStepGroup_id :: Lens.Lens' UpdateWorkflowStepGroup Prelude.Text
+updateWorkflowStepGroup_id = Lens.lens (\UpdateWorkflowStepGroup' {id} -> id) (\s@UpdateWorkflowStepGroup' {} a -> s {id = a} :: UpdateWorkflowStepGroup)
+
+instance Core.AWSRequest UpdateWorkflowStepGroup where
+  type
+    AWSResponse UpdateWorkflowStepGroup =
+      UpdateWorkflowStepGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateWorkflowStepGroupResponse'
+            Prelude.<$> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "lastModifiedTime")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "next" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "previous" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tools" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "workflowId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateWorkflowStepGroup where
+  hashWithSalt _salt UpdateWorkflowStepGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` next
+      `Prelude.hashWithSalt` previous
+      `Prelude.hashWithSalt` workflowId
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdateWorkflowStepGroup where
+  rnf UpdateWorkflowStepGroup' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf next
+      `Prelude.seq` Prelude.rnf previous
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdateWorkflowStepGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateWorkflowStepGroup where
+  toJSON UpdateWorkflowStepGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("name" Data..=) Prelude.<$> name,
+            ("next" Data..=) Prelude.<$> next,
+            ("previous" Data..=) Prelude.<$> previous
+          ]
+      )
+
+instance Data.ToPath UpdateWorkflowStepGroup where
+  toPath UpdateWorkflowStepGroup' {..} =
+    Prelude.mconcat
+      ["/workflowstepgroup/", Data.toBS id]
+
+instance Data.ToQuery UpdateWorkflowStepGroup where
+  toQuery UpdateWorkflowStepGroup' {..} =
+    Prelude.mconcat ["workflowId" Data.=: workflowId]
+
+-- | /See:/ 'newUpdateWorkflowStepGroupResponse' smart constructor.
+data UpdateWorkflowStepGroupResponse = UpdateWorkflowStepGroupResponse'
+  { -- | The description of the step group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the step group.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the step group was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the step group.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The next step group.
+    next :: Prelude.Maybe [Prelude.Text],
+    -- | The previous step group.
+    previous :: Prelude.Maybe [Prelude.Text],
+    -- | List of AWS services utilized in a migration workflow.
+    tools :: Prelude.Maybe [Tool],
+    -- | The ID of the migration workflow.
+    workflowId :: 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 'UpdateWorkflowStepGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateWorkflowStepGroupResponse_description' - The description of the step group.
+--
+-- 'id', 'updateWorkflowStepGroupResponse_id' - The ID of the step group.
+--
+-- 'lastModifiedTime', 'updateWorkflowStepGroupResponse_lastModifiedTime' - The time at which the step group was last modified.
+--
+-- 'name', 'updateWorkflowStepGroupResponse_name' - The name of the step group.
+--
+-- 'next', 'updateWorkflowStepGroupResponse_next' - The next step group.
+--
+-- 'previous', 'updateWorkflowStepGroupResponse_previous' - The previous step group.
+--
+-- 'tools', 'updateWorkflowStepGroupResponse_tools' - List of AWS services utilized in a migration workflow.
+--
+-- 'workflowId', 'updateWorkflowStepGroupResponse_workflowId' - The ID of the migration workflow.
+--
+-- 'httpStatus', 'updateWorkflowStepGroupResponse_httpStatus' - The response's http status code.
+newUpdateWorkflowStepGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateWorkflowStepGroupResponse
+newUpdateWorkflowStepGroupResponse pHttpStatus_ =
+  UpdateWorkflowStepGroupResponse'
+    { description =
+        Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      next = Prelude.Nothing,
+      previous = Prelude.Nothing,
+      tools = Prelude.Nothing,
+      workflowId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The description of the step group.
+updateWorkflowStepGroupResponse_description :: Lens.Lens' UpdateWorkflowStepGroupResponse (Prelude.Maybe Prelude.Text)
+updateWorkflowStepGroupResponse_description = Lens.lens (\UpdateWorkflowStepGroupResponse' {description} -> description) (\s@UpdateWorkflowStepGroupResponse' {} a -> s {description = a} :: UpdateWorkflowStepGroupResponse)
+
+-- | The ID of the step group.
+updateWorkflowStepGroupResponse_id :: Lens.Lens' UpdateWorkflowStepGroupResponse (Prelude.Maybe Prelude.Text)
+updateWorkflowStepGroupResponse_id = Lens.lens (\UpdateWorkflowStepGroupResponse' {id} -> id) (\s@UpdateWorkflowStepGroupResponse' {} a -> s {id = a} :: UpdateWorkflowStepGroupResponse)
+
+-- | The time at which the step group was last modified.
+updateWorkflowStepGroupResponse_lastModifiedTime :: Lens.Lens' UpdateWorkflowStepGroupResponse (Prelude.Maybe Prelude.UTCTime)
+updateWorkflowStepGroupResponse_lastModifiedTime = Lens.lens (\UpdateWorkflowStepGroupResponse' {lastModifiedTime} -> lastModifiedTime) (\s@UpdateWorkflowStepGroupResponse' {} a -> s {lastModifiedTime = a} :: UpdateWorkflowStepGroupResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the step group.
+updateWorkflowStepGroupResponse_name :: Lens.Lens' UpdateWorkflowStepGroupResponse (Prelude.Maybe Prelude.Text)
+updateWorkflowStepGroupResponse_name = Lens.lens (\UpdateWorkflowStepGroupResponse' {name} -> name) (\s@UpdateWorkflowStepGroupResponse' {} a -> s {name = a} :: UpdateWorkflowStepGroupResponse)
+
+-- | The next step group.
+updateWorkflowStepGroupResponse_next :: Lens.Lens' UpdateWorkflowStepGroupResponse (Prelude.Maybe [Prelude.Text])
+updateWorkflowStepGroupResponse_next = Lens.lens (\UpdateWorkflowStepGroupResponse' {next} -> next) (\s@UpdateWorkflowStepGroupResponse' {} a -> s {next = a} :: UpdateWorkflowStepGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The previous step group.
+updateWorkflowStepGroupResponse_previous :: Lens.Lens' UpdateWorkflowStepGroupResponse (Prelude.Maybe [Prelude.Text])
+updateWorkflowStepGroupResponse_previous = Lens.lens (\UpdateWorkflowStepGroupResponse' {previous} -> previous) (\s@UpdateWorkflowStepGroupResponse' {} a -> s {previous = a} :: UpdateWorkflowStepGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | List of AWS services utilized in a migration workflow.
+updateWorkflowStepGroupResponse_tools :: Lens.Lens' UpdateWorkflowStepGroupResponse (Prelude.Maybe [Tool])
+updateWorkflowStepGroupResponse_tools = Lens.lens (\UpdateWorkflowStepGroupResponse' {tools} -> tools) (\s@UpdateWorkflowStepGroupResponse' {} a -> s {tools = a} :: UpdateWorkflowStepGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the migration workflow.
+updateWorkflowStepGroupResponse_workflowId :: Lens.Lens' UpdateWorkflowStepGroupResponse (Prelude.Maybe Prelude.Text)
+updateWorkflowStepGroupResponse_workflowId = Lens.lens (\UpdateWorkflowStepGroupResponse' {workflowId} -> workflowId) (\s@UpdateWorkflowStepGroupResponse' {} a -> s {workflowId = a} :: UpdateWorkflowStepGroupResponse)
+
+-- | The response's http status code.
+updateWorkflowStepGroupResponse_httpStatus :: Lens.Lens' UpdateWorkflowStepGroupResponse Prelude.Int
+updateWorkflowStepGroupResponse_httpStatus = Lens.lens (\UpdateWorkflowStepGroupResponse' {httpStatus} -> httpStatus) (\s@UpdateWorkflowStepGroupResponse' {} a -> s {httpStatus = a} :: UpdateWorkflowStepGroupResponse)
+
+instance
+  Prelude.NFData
+    UpdateWorkflowStepGroupResponse
+  where
+  rnf UpdateWorkflowStepGroupResponse' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf next
+      `Prelude.seq` Prelude.rnf previous
+      `Prelude.seq` Prelude.rnf tools
+      `Prelude.seq` Prelude.rnf workflowId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MigrationHubOrchestrator/Waiters.hs b/gen/Amazonka/MigrationHubOrchestrator/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MigrationHubOrchestrator/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.MigrationHubOrchestrator.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.MigrationHubOrchestrator.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MigrationHubOrchestrator.Lens
+import Amazonka.MigrationHubOrchestrator.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Main (main) where
+
+import Test.Amazonka.MigrationHubOrchestrator
+import Test.Amazonka.MigrationHubOrchestrator.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "MigrationHubOrchestrator"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/MigrationHubOrchestrator.hs b/test/Test/Amazonka/Gen/MigrationHubOrchestrator.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/MigrationHubOrchestrator.hs
@@ -0,0 +1,598 @@
+{-# 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.MigrationHubOrchestrator
+-- Copyright   : (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.MigrationHubOrchestrator where
+
+import Amazonka.MigrationHubOrchestrator
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.MigrationHubOrchestrator.Internal
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestCreateWorkflow $
+--             newCreateWorkflow
+--
+--         , requestCreateWorkflowStep $
+--             newCreateWorkflowStep
+--
+--         , requestCreateWorkflowStepGroup $
+--             newCreateWorkflowStepGroup
+--
+--         , requestDeleteWorkflow $
+--             newDeleteWorkflow
+--
+--         , requestDeleteWorkflowStep $
+--             newDeleteWorkflowStep
+--
+--         , requestDeleteWorkflowStepGroup $
+--             newDeleteWorkflowStepGroup
+--
+--         , requestGetTemplate $
+--             newGetTemplate
+--
+--         , requestGetTemplateStep $
+--             newGetTemplateStep
+--
+--         , requestGetTemplateStepGroup $
+--             newGetTemplateStepGroup
+--
+--         , requestGetWorkflow $
+--             newGetWorkflow
+--
+--         , requestGetWorkflowStep $
+--             newGetWorkflowStep
+--
+--         , requestGetWorkflowStepGroup $
+--             newGetWorkflowStepGroup
+--
+--         , requestListPlugins $
+--             newListPlugins
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestListTemplateStepGroups $
+--             newListTemplateStepGroups
+--
+--         , requestListTemplateSteps $
+--             newListTemplateSteps
+--
+--         , requestListTemplates $
+--             newListTemplates
+--
+--         , requestListWorkflowStepGroups $
+--             newListWorkflowStepGroups
+--
+--         , requestListWorkflowSteps $
+--             newListWorkflowSteps
+--
+--         , requestListWorkflows $
+--             newListWorkflows
+--
+--         , requestRetryWorkflowStep $
+--             newRetryWorkflowStep
+--
+--         , requestStartWorkflow $
+--             newStartWorkflow
+--
+--         , requestStopWorkflow $
+--             newStopWorkflow
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateWorkflow $
+--             newUpdateWorkflow
+--
+--         , requestUpdateWorkflowStep $
+--             newUpdateWorkflowStep
+--
+--         , requestUpdateWorkflowStepGroup $
+--             newUpdateWorkflowStepGroup
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateWorkflow $
+--             newCreateWorkflowResponse
+--
+--         , responseCreateWorkflowStep $
+--             newCreateWorkflowStepResponse
+--
+--         , responseCreateWorkflowStepGroup $
+--             newCreateWorkflowStepGroupResponse
+--
+--         , responseDeleteWorkflow $
+--             newDeleteWorkflowResponse
+--
+--         , responseDeleteWorkflowStep $
+--             newDeleteWorkflowStepResponse
+--
+--         , responseDeleteWorkflowStepGroup $
+--             newDeleteWorkflowStepGroupResponse
+--
+--         , responseGetTemplate $
+--             newGetTemplateResponse
+--
+--         , responseGetTemplateStep $
+--             newGetTemplateStepResponse
+--
+--         , responseGetTemplateStepGroup $
+--             newGetTemplateStepGroupResponse
+--
+--         , responseGetWorkflow $
+--             newGetWorkflowResponse
+--
+--         , responseGetWorkflowStep $
+--             newGetWorkflowStepResponse
+--
+--         , responseGetWorkflowStepGroup $
+--             newGetWorkflowStepGroupResponse
+--
+--         , responseListPlugins $
+--             newListPluginsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseListTemplateStepGroups $
+--             newListTemplateStepGroupsResponse
+--
+--         , responseListTemplateSteps $
+--             newListTemplateStepsResponse
+--
+--         , responseListTemplates $
+--             newListTemplatesResponse
+--
+--         , responseListWorkflowStepGroups $
+--             newListWorkflowStepGroupsResponse
+--
+--         , responseListWorkflowSteps $
+--             newListWorkflowStepsResponse
+--
+--         , responseListWorkflows $
+--             newListWorkflowsResponse
+--
+--         , responseRetryWorkflowStep $
+--             newRetryWorkflowStepResponse
+--
+--         , responseStartWorkflow $
+--             newStartWorkflowResponse
+--
+--         , responseStopWorkflow $
+--             newStopWorkflowResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateWorkflow $
+--             newUpdateWorkflowResponse
+--
+--         , responseUpdateWorkflowStep $
+--             newUpdateWorkflowStepResponse
+--
+--         , responseUpdateWorkflowStepGroup $
+--             newUpdateWorkflowStepGroupResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateWorkflow :: CreateWorkflow -> TestTree
+requestCreateWorkflow =
+  req
+    "CreateWorkflow"
+    "fixture/CreateWorkflow.yaml"
+
+requestCreateWorkflowStep :: CreateWorkflowStep -> TestTree
+requestCreateWorkflowStep =
+  req
+    "CreateWorkflowStep"
+    "fixture/CreateWorkflowStep.yaml"
+
+requestCreateWorkflowStepGroup :: CreateWorkflowStepGroup -> TestTree
+requestCreateWorkflowStepGroup =
+  req
+    "CreateWorkflowStepGroup"
+    "fixture/CreateWorkflowStepGroup.yaml"
+
+requestDeleteWorkflow :: DeleteWorkflow -> TestTree
+requestDeleteWorkflow =
+  req
+    "DeleteWorkflow"
+    "fixture/DeleteWorkflow.yaml"
+
+requestDeleteWorkflowStep :: DeleteWorkflowStep -> TestTree
+requestDeleteWorkflowStep =
+  req
+    "DeleteWorkflowStep"
+    "fixture/DeleteWorkflowStep.yaml"
+
+requestDeleteWorkflowStepGroup :: DeleteWorkflowStepGroup -> TestTree
+requestDeleteWorkflowStepGroup =
+  req
+    "DeleteWorkflowStepGroup"
+    "fixture/DeleteWorkflowStepGroup.yaml"
+
+requestGetTemplate :: GetTemplate -> TestTree
+requestGetTemplate =
+  req
+    "GetTemplate"
+    "fixture/GetTemplate.yaml"
+
+requestGetTemplateStep :: GetTemplateStep -> TestTree
+requestGetTemplateStep =
+  req
+    "GetTemplateStep"
+    "fixture/GetTemplateStep.yaml"
+
+requestGetTemplateStepGroup :: GetTemplateStepGroup -> TestTree
+requestGetTemplateStepGroup =
+  req
+    "GetTemplateStepGroup"
+    "fixture/GetTemplateStepGroup.yaml"
+
+requestGetWorkflow :: GetWorkflow -> TestTree
+requestGetWorkflow =
+  req
+    "GetWorkflow"
+    "fixture/GetWorkflow.yaml"
+
+requestGetWorkflowStep :: GetWorkflowStep -> TestTree
+requestGetWorkflowStep =
+  req
+    "GetWorkflowStep"
+    "fixture/GetWorkflowStep.yaml"
+
+requestGetWorkflowStepGroup :: GetWorkflowStepGroup -> TestTree
+requestGetWorkflowStepGroup =
+  req
+    "GetWorkflowStepGroup"
+    "fixture/GetWorkflowStepGroup.yaml"
+
+requestListPlugins :: ListPlugins -> TestTree
+requestListPlugins =
+  req
+    "ListPlugins"
+    "fixture/ListPlugins.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestListTemplateStepGroups :: ListTemplateStepGroups -> TestTree
+requestListTemplateStepGroups =
+  req
+    "ListTemplateStepGroups"
+    "fixture/ListTemplateStepGroups.yaml"
+
+requestListTemplateSteps :: ListTemplateSteps -> TestTree
+requestListTemplateSteps =
+  req
+    "ListTemplateSteps"
+    "fixture/ListTemplateSteps.yaml"
+
+requestListTemplates :: ListTemplates -> TestTree
+requestListTemplates =
+  req
+    "ListTemplates"
+    "fixture/ListTemplates.yaml"
+
+requestListWorkflowStepGroups :: ListWorkflowStepGroups -> TestTree
+requestListWorkflowStepGroups =
+  req
+    "ListWorkflowStepGroups"
+    "fixture/ListWorkflowStepGroups.yaml"
+
+requestListWorkflowSteps :: ListWorkflowSteps -> TestTree
+requestListWorkflowSteps =
+  req
+    "ListWorkflowSteps"
+    "fixture/ListWorkflowSteps.yaml"
+
+requestListWorkflows :: ListWorkflows -> TestTree
+requestListWorkflows =
+  req
+    "ListWorkflows"
+    "fixture/ListWorkflows.yaml"
+
+requestRetryWorkflowStep :: RetryWorkflowStep -> TestTree
+requestRetryWorkflowStep =
+  req
+    "RetryWorkflowStep"
+    "fixture/RetryWorkflowStep.yaml"
+
+requestStartWorkflow :: StartWorkflow -> TestTree
+requestStartWorkflow =
+  req
+    "StartWorkflow"
+    "fixture/StartWorkflow.yaml"
+
+requestStopWorkflow :: StopWorkflow -> TestTree
+requestStopWorkflow =
+  req
+    "StopWorkflow"
+    "fixture/StopWorkflow.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateWorkflow :: UpdateWorkflow -> TestTree
+requestUpdateWorkflow =
+  req
+    "UpdateWorkflow"
+    "fixture/UpdateWorkflow.yaml"
+
+requestUpdateWorkflowStep :: UpdateWorkflowStep -> TestTree
+requestUpdateWorkflowStep =
+  req
+    "UpdateWorkflowStep"
+    "fixture/UpdateWorkflowStep.yaml"
+
+requestUpdateWorkflowStepGroup :: UpdateWorkflowStepGroup -> TestTree
+requestUpdateWorkflowStepGroup =
+  req
+    "UpdateWorkflowStepGroup"
+    "fixture/UpdateWorkflowStepGroup.yaml"
+
+-- Responses
+
+responseCreateWorkflow :: CreateWorkflowResponse -> TestTree
+responseCreateWorkflow =
+  res
+    "CreateWorkflowResponse"
+    "fixture/CreateWorkflowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWorkflow)
+
+responseCreateWorkflowStep :: CreateWorkflowStepResponse -> TestTree
+responseCreateWorkflowStep =
+  res
+    "CreateWorkflowStepResponse"
+    "fixture/CreateWorkflowStepResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWorkflowStep)
+
+responseCreateWorkflowStepGroup :: CreateWorkflowStepGroupResponse -> TestTree
+responseCreateWorkflowStepGroup =
+  res
+    "CreateWorkflowStepGroupResponse"
+    "fixture/CreateWorkflowStepGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWorkflowStepGroup)
+
+responseDeleteWorkflow :: DeleteWorkflowResponse -> TestTree
+responseDeleteWorkflow =
+  res
+    "DeleteWorkflowResponse"
+    "fixture/DeleteWorkflowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWorkflow)
+
+responseDeleteWorkflowStep :: DeleteWorkflowStepResponse -> TestTree
+responseDeleteWorkflowStep =
+  res
+    "DeleteWorkflowStepResponse"
+    "fixture/DeleteWorkflowStepResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWorkflowStep)
+
+responseDeleteWorkflowStepGroup :: DeleteWorkflowStepGroupResponse -> TestTree
+responseDeleteWorkflowStepGroup =
+  res
+    "DeleteWorkflowStepGroupResponse"
+    "fixture/DeleteWorkflowStepGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWorkflowStepGroup)
+
+responseGetTemplate :: GetTemplateResponse -> TestTree
+responseGetTemplate =
+  res
+    "GetTemplateResponse"
+    "fixture/GetTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetTemplate)
+
+responseGetTemplateStep :: GetTemplateStepResponse -> TestTree
+responseGetTemplateStep =
+  res
+    "GetTemplateStepResponse"
+    "fixture/GetTemplateStepResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetTemplateStep)
+
+responseGetTemplateStepGroup :: GetTemplateStepGroupResponse -> TestTree
+responseGetTemplateStepGroup =
+  res
+    "GetTemplateStepGroupResponse"
+    "fixture/GetTemplateStepGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetTemplateStepGroup)
+
+responseGetWorkflow :: GetWorkflowResponse -> TestTree
+responseGetWorkflow =
+  res
+    "GetWorkflowResponse"
+    "fixture/GetWorkflowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetWorkflow)
+
+responseGetWorkflowStep :: GetWorkflowStepResponse -> TestTree
+responseGetWorkflowStep =
+  res
+    "GetWorkflowStepResponse"
+    "fixture/GetWorkflowStepResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetWorkflowStep)
+
+responseGetWorkflowStepGroup :: GetWorkflowStepGroupResponse -> TestTree
+responseGetWorkflowStepGroup =
+  res
+    "GetWorkflowStepGroupResponse"
+    "fixture/GetWorkflowStepGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetWorkflowStepGroup)
+
+responseListPlugins :: ListPluginsResponse -> TestTree
+responseListPlugins =
+  res
+    "ListPluginsResponse"
+    "fixture/ListPluginsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListPlugins)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseListTemplateStepGroups :: ListTemplateStepGroupsResponse -> TestTree
+responseListTemplateStepGroups =
+  res
+    "ListTemplateStepGroupsResponse"
+    "fixture/ListTemplateStepGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTemplateStepGroups)
+
+responseListTemplateSteps :: ListTemplateStepsResponse -> TestTree
+responseListTemplateSteps =
+  res
+    "ListTemplateStepsResponse"
+    "fixture/ListTemplateStepsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTemplateSteps)
+
+responseListTemplates :: ListTemplatesResponse -> TestTree
+responseListTemplates =
+  res
+    "ListTemplatesResponse"
+    "fixture/ListTemplatesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTemplates)
+
+responseListWorkflowStepGroups :: ListWorkflowStepGroupsResponse -> TestTree
+responseListWorkflowStepGroups =
+  res
+    "ListWorkflowStepGroupsResponse"
+    "fixture/ListWorkflowStepGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWorkflowStepGroups)
+
+responseListWorkflowSteps :: ListWorkflowStepsResponse -> TestTree
+responseListWorkflowSteps =
+  res
+    "ListWorkflowStepsResponse"
+    "fixture/ListWorkflowStepsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWorkflowSteps)
+
+responseListWorkflows :: ListWorkflowsResponse -> TestTree
+responseListWorkflows =
+  res
+    "ListWorkflowsResponse"
+    "fixture/ListWorkflowsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWorkflows)
+
+responseRetryWorkflowStep :: RetryWorkflowStepResponse -> TestTree
+responseRetryWorkflowStep =
+  res
+    "RetryWorkflowStepResponse"
+    "fixture/RetryWorkflowStepResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RetryWorkflowStep)
+
+responseStartWorkflow :: StartWorkflowResponse -> TestTree
+responseStartWorkflow =
+  res
+    "StartWorkflowResponse"
+    "fixture/StartWorkflowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartWorkflow)
+
+responseStopWorkflow :: StopWorkflowResponse -> TestTree
+responseStopWorkflow =
+  res
+    "StopWorkflowResponse"
+    "fixture/StopWorkflowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopWorkflow)
+
+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)
+
+responseUpdateWorkflow :: UpdateWorkflowResponse -> TestTree
+responseUpdateWorkflow =
+  res
+    "UpdateWorkflowResponse"
+    "fixture/UpdateWorkflowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateWorkflow)
+
+responseUpdateWorkflowStep :: UpdateWorkflowStepResponse -> TestTree
+responseUpdateWorkflowStep =
+  res
+    "UpdateWorkflowStepResponse"
+    "fixture/UpdateWorkflowStepResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateWorkflowStep)
+
+responseUpdateWorkflowStepGroup :: UpdateWorkflowStepGroupResponse -> TestTree
+responseUpdateWorkflowStepGroup =
+  res
+    "UpdateWorkflowStepGroupResponse"
+    "fixture/UpdateWorkflowStepGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateWorkflowStepGroup)
diff --git a/test/Test/Amazonka/MigrationHubOrchestrator.hs b/test/Test/Amazonka/MigrationHubOrchestrator.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/MigrationHubOrchestrator.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.MigrationHubOrchestrator
+-- Copyright   : (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.MigrationHubOrchestrator
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/MigrationHubOrchestrator/Internal.hs b/test/Test/Amazonka/MigrationHubOrchestrator/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/MigrationHubOrchestrator/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.MigrationHubOrchestrator.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.MigrationHubOrchestrator.Internal where
