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,45 @@
+# Amazon Step Functions SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`1.4.5`
+
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-stepfunctions)
+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 [Network.AWS.StepFunctions](http://hackage.haskell.org/package/amazonka-stepfunctions/docs/Network-AWS-StepFunctions.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-stepfunctions` 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/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import           Distribution.Simple
+main = defaultMain
diff --git a/amazonka-stepfunctions.cabal b/amazonka-stepfunctions.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-stepfunctions.cabal
@@ -0,0 +1,97 @@
+name:                  amazonka-stepfunctions
+version:               1.4.5
+synopsis:              Amazon Step Functions SDK.
+homepage:              https://github.com/brendanhay/amazonka
+bug-reports:           https://github.com/brendanhay/amazonka/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2013-2016 Brendan Hay
+category:              Network, AWS, Cloud, Distributed Computing
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md fixture/*.yaml fixture/*.proto src/.gitkeep
+description:
+    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.
+    .
+    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
+    such as <http://hackage.haskell.org/package/lens lens> or
+    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+    .
+    See "Network.AWS.StepFunctions" or <https://aws.amazon.com/documentation/ the AWS documentation>
+    to get started.
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/amazonka.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.AWS.StepFunctions
+        , Network.AWS.StepFunctions.CreateActivity
+        , Network.AWS.StepFunctions.CreateStateMachine
+        , Network.AWS.StepFunctions.DeleteActivity
+        , Network.AWS.StepFunctions.DeleteStateMachine
+        , Network.AWS.StepFunctions.DescribeActivity
+        , Network.AWS.StepFunctions.DescribeExecution
+        , Network.AWS.StepFunctions.DescribeStateMachine
+        , Network.AWS.StepFunctions.GetActivityTask
+        , Network.AWS.StepFunctions.GetExecutionHistory
+        , Network.AWS.StepFunctions.ListActivities
+        , Network.AWS.StepFunctions.ListExecutions
+        , Network.AWS.StepFunctions.ListStateMachines
+        , Network.AWS.StepFunctions.SendTaskFailure
+        , Network.AWS.StepFunctions.SendTaskHeartbeat
+        , Network.AWS.StepFunctions.SendTaskSuccess
+        , Network.AWS.StepFunctions.StartExecution
+        , Network.AWS.StepFunctions.StopExecution
+        , Network.AWS.StepFunctions.Types
+        , Network.AWS.StepFunctions.Waiters
+
+    other-modules:
+          Network.AWS.StepFunctions.Types.Product
+        , Network.AWS.StepFunctions.Types.Sum
+
+    build-depends:
+          amazonka-core == 1.4.5.*
+        , base          >= 4.7     && < 5
+
+test-suite amazonka-stepfunctions-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.AWS.StepFunctions
+        , Test.AWS.Gen.StepFunctions
+        , Test.AWS.StepFunctions.Internal
+
+    build-depends:
+          amazonka-core == 1.4.5.*
+        , amazonka-test == 1.4.5.*
+        , amazonka-stepfunctions == 1.4.5.*
+        , base
+        , bytestring
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/fixture/CreateActivity.yaml b/fixture/CreateActivity.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateActivity.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/states/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  states.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/CreateActivityResponse.proto b/fixture/CreateActivityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateActivityResponse.proto
diff --git a/fixture/CreateStateMachine.yaml b/fixture/CreateStateMachine.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStateMachine.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/states/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  states.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/CreateStateMachineResponse.proto b/fixture/CreateStateMachineResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStateMachineResponse.proto
diff --git a/fixture/DeleteActivity.yaml b/fixture/DeleteActivity.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteActivity.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/states/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  states.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/DeleteActivityResponse.proto b/fixture/DeleteActivityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteActivityResponse.proto
diff --git a/fixture/DeleteStateMachine.yaml b/fixture/DeleteStateMachine.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteStateMachine.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/states/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  states.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/DeleteStateMachineResponse.proto b/fixture/DeleteStateMachineResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteStateMachineResponse.proto
diff --git a/fixture/DescribeActivity.yaml b/fixture/DescribeActivity.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeActivity.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/states/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  states.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/DescribeActivityResponse.proto b/fixture/DescribeActivityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeActivityResponse.proto
diff --git a/fixture/DescribeExecution.yaml b/fixture/DescribeExecution.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeExecution.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/states/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  states.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/DescribeExecutionResponse.proto b/fixture/DescribeExecutionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeExecutionResponse.proto
diff --git a/fixture/DescribeStateMachine.yaml b/fixture/DescribeStateMachine.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeStateMachine.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/states/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  states.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/DescribeStateMachineResponse.proto b/fixture/DescribeStateMachineResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeStateMachineResponse.proto
diff --git a/fixture/GetActivityTask.yaml b/fixture/GetActivityTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetActivityTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/states/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  states.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/GetActivityTaskResponse.proto b/fixture/GetActivityTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetActivityTaskResponse.proto
diff --git a/fixture/GetExecutionHistory.yaml b/fixture/GetExecutionHistory.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetExecutionHistory.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/states/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  states.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/GetExecutionHistoryResponse.proto b/fixture/GetExecutionHistoryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetExecutionHistoryResponse.proto
diff --git a/fixture/ListActivities.yaml b/fixture/ListActivities.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListActivities.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/states/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  states.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/ListActivitiesResponse.proto b/fixture/ListActivitiesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListActivitiesResponse.proto
diff --git a/fixture/ListExecutions.yaml b/fixture/ListExecutions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListExecutions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/states/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  states.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/ListExecutionsResponse.proto b/fixture/ListExecutionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListExecutionsResponse.proto
diff --git a/fixture/ListStateMachines.yaml b/fixture/ListStateMachines.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListStateMachines.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/states/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  states.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/ListStateMachinesResponse.proto b/fixture/ListStateMachinesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListStateMachinesResponse.proto
diff --git a/fixture/SendTaskFailure.yaml b/fixture/SendTaskFailure.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SendTaskFailure.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/states/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  states.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/SendTaskFailureResponse.proto b/fixture/SendTaskFailureResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SendTaskFailureResponse.proto
diff --git a/fixture/SendTaskHeartbeat.yaml b/fixture/SendTaskHeartbeat.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SendTaskHeartbeat.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/states/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  states.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/SendTaskHeartbeatResponse.proto b/fixture/SendTaskHeartbeatResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SendTaskHeartbeatResponse.proto
diff --git a/fixture/SendTaskSuccess.yaml b/fixture/SendTaskSuccess.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SendTaskSuccess.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/states/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  states.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/SendTaskSuccessResponse.proto b/fixture/SendTaskSuccessResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SendTaskSuccessResponse.proto
diff --git a/fixture/StartExecution.yaml b/fixture/StartExecution.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartExecution.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/states/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  states.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/StartExecutionResponse.proto b/fixture/StartExecutionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartExecutionResponse.proto
diff --git a/fixture/StopExecution.yaml b/fixture/StopExecution.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopExecution.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/states/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  states.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/StopExecutionResponse.proto b/fixture/StopExecutionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopExecutionResponse.proto
diff --git a/gen/Network/AWS/StepFunctions.hs b/gen/Network/AWS/StepFunctions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions.hs
@@ -0,0 +1,363 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- __AWS Step Functions__
+--
+-- AWS Step Functions is a web service that enables you to coordinate the components of distributed applications and microservices using visual workflows. You build applications from individual components that each perform a discrete function, or /task/ , allowing you to scale and change applications quickly. Step Functions provides a graphical console to visualize the components of your application as a series of steps. It automatically triggers and tracks each step, and retries when there are errors, so your application executes in order and as expected, every time. Step Functions logs the state of each step, so when things do go wrong, you can diagnose and debug problems quickly.
+--
+-- Step Functions manages the operations and underlying infrastructure for you to ensure your application is available at any scale. You can run tasks on the AWS cloud, on your own servers, or an any system that has access to AWS. Step Functions can be accessed and used with the Step Functions console, the AWS SDKs (included with your Beta release invitation email), or an HTTP API (the subject of this document).
+--
+module Network.AWS.StepFunctions
+    (
+    -- * Service Configuration
+      stepFunctions
+
+    -- * Errors
+    -- $errors
+
+    -- ** ExecutionLimitExceeded
+    , _ExecutionLimitExceeded
+
+    -- ** InvalidDefinition
+    , _InvalidDefinition
+
+    -- ** StateMachineLimitExceeded
+    , _StateMachineLimitExceeded
+
+    -- ** ExecutionAlreadyExists
+    , _ExecutionAlreadyExists
+
+    -- ** StateMachineAlreadyExists
+    , _StateMachineAlreadyExists
+
+    -- ** TaskTimedOut
+    , _TaskTimedOut
+
+    -- ** InvalidExecutionInput
+    , _InvalidExecutionInput
+
+    -- ** InvalidOutput
+    , _InvalidOutput
+
+    -- ** InvalidName
+    , _InvalidName
+
+    -- ** TaskDoesNotExist
+    , _TaskDoesNotExist
+
+    -- ** ActivityDoesNotExist
+    , _ActivityDoesNotExist
+
+    -- ** StateMachineDeleting
+    , _StateMachineDeleting
+
+    -- ** InvalidARN
+    , _InvalidARN
+
+    -- ** InvalidToken
+    , _InvalidToken
+
+    -- ** ActivityWorkerLimitExceeded
+    , _ActivityWorkerLimitExceeded
+
+    -- ** ActivityLimitExceeded
+    , _ActivityLimitExceeded
+
+    -- ** ExecutionDoesNotExist
+    , _ExecutionDoesNotExist
+
+    -- ** StateMachineDoesNotExist
+    , _StateMachineDoesNotExist
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** DeleteActivity
+    , module Network.AWS.StepFunctions.DeleteActivity
+
+    -- ** DescribeStateMachine
+    , module Network.AWS.StepFunctions.DescribeStateMachine
+
+    -- ** StopExecution
+    , module Network.AWS.StepFunctions.StopExecution
+
+    -- ** DescribeActivity
+    , module Network.AWS.StepFunctions.DescribeActivity
+
+    -- ** ListStateMachines
+    , module Network.AWS.StepFunctions.ListStateMachines
+
+    -- ** ListExecutions
+    , module Network.AWS.StepFunctions.ListExecutions
+
+    -- ** DeleteStateMachine
+    , module Network.AWS.StepFunctions.DeleteStateMachine
+
+    -- ** GetActivityTask
+    , module Network.AWS.StepFunctions.GetActivityTask
+
+    -- ** CreateActivity
+    , module Network.AWS.StepFunctions.CreateActivity
+
+    -- ** ListActivities
+    , module Network.AWS.StepFunctions.ListActivities
+
+    -- ** SendTaskHeartbeat
+    , module Network.AWS.StepFunctions.SendTaskHeartbeat
+
+    -- ** SendTaskFailure
+    , module Network.AWS.StepFunctions.SendTaskFailure
+
+    -- ** DescribeExecution
+    , module Network.AWS.StepFunctions.DescribeExecution
+
+    -- ** SendTaskSuccess
+    , module Network.AWS.StepFunctions.SendTaskSuccess
+
+    -- ** StartExecution
+    , module Network.AWS.StepFunctions.StartExecution
+
+    -- ** GetExecutionHistory
+    , module Network.AWS.StepFunctions.GetExecutionHistory
+
+    -- ** CreateStateMachine
+    , module Network.AWS.StepFunctions.CreateStateMachine
+
+    -- * Types
+
+    -- ** ExecutionStatus
+    , ExecutionStatus (..)
+
+    -- ** HistoryEventType
+    , HistoryEventType (..)
+
+    -- ** StateMachineStatus
+    , StateMachineStatus (..)
+
+    -- ** ActivityFailedEventDetails
+    , ActivityFailedEventDetails
+    , activityFailedEventDetails
+    , afedError
+    , afedCause
+
+    -- ** ActivityListItem
+    , ActivityListItem
+    , activityListItem
+    , aliActivityARN
+    , aliName
+    , aliCreationDate
+
+    -- ** ActivityScheduleFailedEventDetails
+    , ActivityScheduleFailedEventDetails
+    , activityScheduleFailedEventDetails
+    , asfedError
+    , asfedCause
+
+    -- ** ActivityScheduledEventDetails
+    , ActivityScheduledEventDetails
+    , activityScheduledEventDetails
+    , asedHeartbeatInSeconds
+    , asedInput
+    , asedTimeoutInSeconds
+    , asedResource
+
+    -- ** ActivityStartedEventDetails
+    , ActivityStartedEventDetails
+    , activityStartedEventDetails
+    , asedWorkerName
+
+    -- ** ActivitySucceededEventDetails
+    , ActivitySucceededEventDetails
+    , activitySucceededEventDetails
+    , asedOutput
+
+    -- ** ActivityTimedOutEventDetails
+    , ActivityTimedOutEventDetails
+    , activityTimedOutEventDetails
+    , atoedError
+    , atoedCause
+
+    -- ** ExecutionAbortedEventDetails
+    , ExecutionAbortedEventDetails
+    , executionAbortedEventDetails
+    , eaedError
+    , eaedCause
+
+    -- ** ExecutionFailedEventDetails
+    , ExecutionFailedEventDetails
+    , executionFailedEventDetails
+    , efedError
+    , efedCause
+
+    -- ** ExecutionListItem
+    , ExecutionListItem
+    , executionListItem
+    , eliStopDate
+    , eliExecutionARN
+    , eliStateMachineARN
+    , eliName
+    , eliStatus
+    , eliStartDate
+
+    -- ** ExecutionStartedEventDetails
+    , ExecutionStartedEventDetails
+    , executionStartedEventDetails
+    , esedInput
+    , esedRoleARN
+
+    -- ** ExecutionSucceededEventDetails
+    , ExecutionSucceededEventDetails
+    , executionSucceededEventDetails
+    , esedOutput
+
+    -- ** ExecutionTimedOutEventDetails
+    , ExecutionTimedOutEventDetails
+    , executionTimedOutEventDetails
+    , etoedError
+    , etoedCause
+
+    -- ** HistoryEvent
+    , HistoryEvent
+    , historyEvent
+    , heActivityStartedEventDetails
+    , heLambdaFunctionStartFailedEventDetails
+    , heStateExitedEventDetails
+    , heLambdaFunctionSucceededEventDetails
+    , heActivitySucceededEventDetails
+    , heLambdaFunctionTimedOutEventDetails
+    , heActivityTimedOutEventDetails
+    , heExecutionFailedEventDetails
+    , heExecutionAbortedEventDetails
+    , heExecutionSucceededEventDetails
+    , heLambdaFunctionScheduledEventDetails
+    , heActivityScheduledEventDetails
+    , heExecutionStartedEventDetails
+    , heActivityScheduleFailedEventDetails
+    , heLambdaFunctionScheduleFailedEventDetails
+    , heStateEnteredEventDetails
+    , hePreviousEventId
+    , heActivityFailedEventDetails
+    , heLambdaFunctionFailedEventDetails
+    , heExecutionTimedOutEventDetails
+    , heTimestamp
+    , heType
+    , heId
+
+    -- ** LambdaFunctionFailedEventDetails
+    , LambdaFunctionFailedEventDetails
+    , lambdaFunctionFailedEventDetails
+    , lffedError
+    , lffedCause
+
+    -- ** LambdaFunctionScheduleFailedEventDetails
+    , LambdaFunctionScheduleFailedEventDetails
+    , lambdaFunctionScheduleFailedEventDetails
+    , lError
+    , lCause
+
+    -- ** LambdaFunctionScheduledEventDetails
+    , LambdaFunctionScheduledEventDetails
+    , lambdaFunctionScheduledEventDetails
+    , lfsedInput
+    , lfsedTimeoutInSeconds
+    , lfsedResource
+
+    -- ** LambdaFunctionStartFailedEventDetails
+    , LambdaFunctionStartFailedEventDetails
+    , lambdaFunctionStartFailedEventDetails
+    , lfsfedError
+    , lfsfedCause
+
+    -- ** LambdaFunctionSucceededEventDetails
+    , LambdaFunctionSucceededEventDetails
+    , lambdaFunctionSucceededEventDetails
+    , lfsedOutput
+
+    -- ** LambdaFunctionTimedOutEventDetails
+    , LambdaFunctionTimedOutEventDetails
+    , lambdaFunctionTimedOutEventDetails
+    , lftoedError
+    , lftoedCause
+
+    -- ** StateEnteredEventDetails
+    , StateEnteredEventDetails
+    , stateEnteredEventDetails
+    , sInput
+    , sName
+
+    -- ** StateExitedEventDetails
+    , StateExitedEventDetails
+    , stateExitedEventDetails
+    , seedOutput
+    , seedName
+
+    -- ** StateMachineListItem
+    , StateMachineListItem
+    , stateMachineListItem
+    , smliStateMachineARN
+    , smliName
+    , smliCreationDate
+    ) where
+
+import           Network.AWS.StepFunctions.CreateActivity
+import           Network.AWS.StepFunctions.CreateStateMachine
+import           Network.AWS.StepFunctions.DeleteActivity
+import           Network.AWS.StepFunctions.DeleteStateMachine
+import           Network.AWS.StepFunctions.DescribeActivity
+import           Network.AWS.StepFunctions.DescribeExecution
+import           Network.AWS.StepFunctions.DescribeStateMachine
+import           Network.AWS.StepFunctions.GetActivityTask
+import           Network.AWS.StepFunctions.GetExecutionHistory
+import           Network.AWS.StepFunctions.ListActivities
+import           Network.AWS.StepFunctions.ListExecutions
+import           Network.AWS.StepFunctions.ListStateMachines
+import           Network.AWS.StepFunctions.SendTaskFailure
+import           Network.AWS.StepFunctions.SendTaskHeartbeat
+import           Network.AWS.StepFunctions.SendTaskSuccess
+import           Network.AWS.StepFunctions.StartExecution
+import           Network.AWS.StepFunctions.StopExecution
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.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 'StepFunctions'.
+-}
+
+{- $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/Network/AWS/StepFunctions/CreateActivity.hs b/gen/Network/AWS/StepFunctions/CreateActivity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/CreateActivity.hs
@@ -0,0 +1,143 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.CreateActivity
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an activity.
+--
+--
+module Network.AWS.StepFunctions.CreateActivity
+    (
+    -- * Creating a Request
+      createActivity
+    , CreateActivity
+    -- * Request Lenses
+    , caName
+
+    -- * Destructuring the Response
+    , createActivityResponse
+    , CreateActivityResponse
+    -- * Response Lenses
+    , carsResponseStatus
+    , carsActivityARN
+    , carsCreationDate
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.Types.Product
+
+-- | /See:/ 'createActivity' smart constructor.
+newtype CreateActivity = CreateActivity'
+    { _caName :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateActivity' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'caName' - The name of the activity to create. This name must be unique for your AWS account and region.
+createActivity
+    :: Text -- ^ 'caName'
+    -> CreateActivity
+createActivity pName_ =
+    CreateActivity'
+    { _caName = pName_
+    }
+
+-- | The name of the activity to create. This name must be unique for your AWS account and region.
+caName :: Lens' CreateActivity Text
+caName = lens _caName (\ s a -> s{_caName = a});
+
+instance AWSRequest CreateActivity where
+        type Rs CreateActivity = CreateActivityResponse
+        request = postJSON stepFunctions
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateActivityResponse' <$>
+                   (pure (fromEnum s)) <*> (x .:> "activityArn") <*>
+                     (x .:> "creationDate"))
+
+instance Hashable CreateActivity
+
+instance NFData CreateActivity
+
+instance ToHeaders CreateActivity where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSStepFunctions.CreateActivity" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.0" :: ByteString)])
+
+instance ToJSON CreateActivity where
+        toJSON CreateActivity'{..}
+          = object (catMaybes [Just ("name" .= _caName)])
+
+instance ToPath CreateActivity where
+        toPath = const "/"
+
+instance ToQuery CreateActivity where
+        toQuery = const mempty
+
+-- | /See:/ 'createActivityResponse' smart constructor.
+data CreateActivityResponse = CreateActivityResponse'
+    { _carsResponseStatus :: !Int
+    , _carsActivityARN    :: !Text
+    , _carsCreationDate   :: !POSIX
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateActivityResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'carsResponseStatus' - -- | The response status code.
+--
+-- * 'carsActivityARN' - The Amazon Resource Name (ARN) that identifies the created activity.
+--
+-- * 'carsCreationDate' - The date the activity was created.
+createActivityResponse
+    :: Int -- ^ 'carsResponseStatus'
+    -> Text -- ^ 'carsActivityARN'
+    -> UTCTime -- ^ 'carsCreationDate'
+    -> CreateActivityResponse
+createActivityResponse pResponseStatus_ pActivityARN_ pCreationDate_ =
+    CreateActivityResponse'
+    { _carsResponseStatus = pResponseStatus_
+    , _carsActivityARN = pActivityARN_
+    , _carsCreationDate = _Time # pCreationDate_
+    }
+
+-- | -- | The response status code.
+carsResponseStatus :: Lens' CreateActivityResponse Int
+carsResponseStatus = lens _carsResponseStatus (\ s a -> s{_carsResponseStatus = a});
+
+-- | The Amazon Resource Name (ARN) that identifies the created activity.
+carsActivityARN :: Lens' CreateActivityResponse Text
+carsActivityARN = lens _carsActivityARN (\ s a -> s{_carsActivityARN = a});
+
+-- | The date the activity was created.
+carsCreationDate :: Lens' CreateActivityResponse UTCTime
+carsCreationDate = lens _carsCreationDate (\ s a -> s{_carsCreationDate = a}) . _Time;
+
+instance NFData CreateActivityResponse
diff --git a/gen/Network/AWS/StepFunctions/CreateStateMachine.hs b/gen/Network/AWS/StepFunctions/CreateStateMachine.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/CreateStateMachine.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.CreateStateMachine
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a state machine.
+--
+--
+module Network.AWS.StepFunctions.CreateStateMachine
+    (
+    -- * Creating a Request
+      createStateMachine
+    , CreateStateMachine
+    -- * Request Lenses
+    , csmName
+    , csmDefinition
+    , csmRoleARN
+
+    -- * Destructuring the Response
+    , createStateMachineResponse
+    , CreateStateMachineResponse
+    -- * Response Lenses
+    , csmrsResponseStatus
+    , csmrsStateMachineARN
+    , csmrsCreationDate
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.Types.Product
+
+-- | /See:/ 'createStateMachine' smart constructor.
+data CreateStateMachine = CreateStateMachine'
+    { _csmName       :: !Text
+    , _csmDefinition :: !Text
+    , _csmRoleARN    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateStateMachine' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csmName' - The name of the state machine. This name must be unique for your AWS account and region.
+--
+-- * 'csmDefinition' - The Amazon States Language definition of the state machine.
+--
+-- * 'csmRoleARN' - The Amazon Resource Name (ARN) of the IAM role to use for this state machine.
+createStateMachine
+    :: Text -- ^ 'csmName'
+    -> Text -- ^ 'csmDefinition'
+    -> Text -- ^ 'csmRoleARN'
+    -> CreateStateMachine
+createStateMachine pName_ pDefinition_ pRoleARN_ =
+    CreateStateMachine'
+    { _csmName = pName_
+    , _csmDefinition = pDefinition_
+    , _csmRoleARN = pRoleARN_
+    }
+
+-- | The name of the state machine. This name must be unique for your AWS account and region.
+csmName :: Lens' CreateStateMachine Text
+csmName = lens _csmName (\ s a -> s{_csmName = a});
+
+-- | The Amazon States Language definition of the state machine.
+csmDefinition :: Lens' CreateStateMachine Text
+csmDefinition = lens _csmDefinition (\ s a -> s{_csmDefinition = a});
+
+-- | The Amazon Resource Name (ARN) of the IAM role to use for this state machine.
+csmRoleARN :: Lens' CreateStateMachine Text
+csmRoleARN = lens _csmRoleARN (\ s a -> s{_csmRoleARN = a});
+
+instance AWSRequest CreateStateMachine where
+        type Rs CreateStateMachine =
+             CreateStateMachineResponse
+        request = postJSON stepFunctions
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateStateMachineResponse' <$>
+                   (pure (fromEnum s)) <*> (x .:> "stateMachineArn") <*>
+                     (x .:> "creationDate"))
+
+instance Hashable CreateStateMachine
+
+instance NFData CreateStateMachine
+
+instance ToHeaders CreateStateMachine where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSStepFunctions.CreateStateMachine" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.0" :: ByteString)])
+
+instance ToJSON CreateStateMachine where
+        toJSON CreateStateMachine'{..}
+          = object
+              (catMaybes
+                 [Just ("name" .= _csmName),
+                  Just ("definition" .= _csmDefinition),
+                  Just ("roleArn" .= _csmRoleARN)])
+
+instance ToPath CreateStateMachine where
+        toPath = const "/"
+
+instance ToQuery CreateStateMachine where
+        toQuery = const mempty
+
+-- | /See:/ 'createStateMachineResponse' smart constructor.
+data CreateStateMachineResponse = CreateStateMachineResponse'
+    { _csmrsResponseStatus  :: !Int
+    , _csmrsStateMachineARN :: !Text
+    , _csmrsCreationDate    :: !POSIX
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateStateMachineResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csmrsResponseStatus' - -- | The response status code.
+--
+-- * 'csmrsStateMachineARN' - The Amazon Resource Name (ARN) that identifies the created state machine.
+--
+-- * 'csmrsCreationDate' - The date the state machine was created.
+createStateMachineResponse
+    :: Int -- ^ 'csmrsResponseStatus'
+    -> Text -- ^ 'csmrsStateMachineARN'
+    -> UTCTime -- ^ 'csmrsCreationDate'
+    -> CreateStateMachineResponse
+createStateMachineResponse pResponseStatus_ pStateMachineARN_ pCreationDate_ =
+    CreateStateMachineResponse'
+    { _csmrsResponseStatus = pResponseStatus_
+    , _csmrsStateMachineARN = pStateMachineARN_
+    , _csmrsCreationDate = _Time # pCreationDate_
+    }
+
+-- | -- | The response status code.
+csmrsResponseStatus :: Lens' CreateStateMachineResponse Int
+csmrsResponseStatus = lens _csmrsResponseStatus (\ s a -> s{_csmrsResponseStatus = a});
+
+-- | The Amazon Resource Name (ARN) that identifies the created state machine.
+csmrsStateMachineARN :: Lens' CreateStateMachineResponse Text
+csmrsStateMachineARN = lens _csmrsStateMachineARN (\ s a -> s{_csmrsStateMachineARN = a});
+
+-- | The date the state machine was created.
+csmrsCreationDate :: Lens' CreateStateMachineResponse UTCTime
+csmrsCreationDate = lens _csmrsCreationDate (\ s a -> s{_csmrsCreationDate = a}) . _Time;
+
+instance NFData CreateStateMachineResponse
diff --git a/gen/Network/AWS/StepFunctions/DeleteActivity.hs b/gen/Network/AWS/StepFunctions/DeleteActivity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/DeleteActivity.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.DeleteActivity
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an activity.
+--
+--
+module Network.AWS.StepFunctions.DeleteActivity
+    (
+    -- * Creating a Request
+      deleteActivity
+    , DeleteActivity
+    -- * Request Lenses
+    , daActivityARN
+
+    -- * Destructuring the Response
+    , deleteActivityResponse
+    , DeleteActivityResponse
+    -- * Response Lenses
+    , darsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.Types.Product
+
+-- | /See:/ 'deleteActivity' smart constructor.
+newtype DeleteActivity = DeleteActivity'
+    { _daActivityARN :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteActivity' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'daActivityARN' - The Amazon Resource Name (ARN) of the activity to delete.
+deleteActivity
+    :: Text -- ^ 'daActivityARN'
+    -> DeleteActivity
+deleteActivity pActivityARN_ =
+    DeleteActivity'
+    { _daActivityARN = pActivityARN_
+    }
+
+-- | The Amazon Resource Name (ARN) of the activity to delete.
+daActivityARN :: Lens' DeleteActivity Text
+daActivityARN = lens _daActivityARN (\ s a -> s{_daActivityARN = a});
+
+instance AWSRequest DeleteActivity where
+        type Rs DeleteActivity = DeleteActivityResponse
+        request = postJSON stepFunctions
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteActivityResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteActivity
+
+instance NFData DeleteActivity
+
+instance ToHeaders DeleteActivity where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSStepFunctions.DeleteActivity" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.0" :: ByteString)])
+
+instance ToJSON DeleteActivity where
+        toJSON DeleteActivity'{..}
+          = object
+              (catMaybes [Just ("activityArn" .= _daActivityARN)])
+
+instance ToPath DeleteActivity where
+        toPath = const "/"
+
+instance ToQuery DeleteActivity where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteActivityResponse' smart constructor.
+newtype DeleteActivityResponse = DeleteActivityResponse'
+    { _darsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteActivityResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'darsResponseStatus' - -- | The response status code.
+deleteActivityResponse
+    :: Int -- ^ 'darsResponseStatus'
+    -> DeleteActivityResponse
+deleteActivityResponse pResponseStatus_ =
+    DeleteActivityResponse'
+    { _darsResponseStatus = pResponseStatus_
+    }
+
+-- | -- | The response status code.
+darsResponseStatus :: Lens' DeleteActivityResponse Int
+darsResponseStatus = lens _darsResponseStatus (\ s a -> s{_darsResponseStatus = a});
+
+instance NFData DeleteActivityResponse
diff --git a/gen/Network/AWS/StepFunctions/DeleteStateMachine.hs b/gen/Network/AWS/StepFunctions/DeleteStateMachine.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/DeleteStateMachine.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.DeleteStateMachine
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a state machine. This is an asynchronous operation-- it sets the state machine's status to "DELETING" and begins the delete process.
+--
+--
+module Network.AWS.StepFunctions.DeleteStateMachine
+    (
+    -- * Creating a Request
+      deleteStateMachine
+    , DeleteStateMachine
+    -- * Request Lenses
+    , dStateMachineARN
+
+    -- * Destructuring the Response
+    , deleteStateMachineResponse
+    , DeleteStateMachineResponse
+    -- * Response Lenses
+    , drsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.Types.Product
+
+-- | /See:/ 'deleteStateMachine' smart constructor.
+newtype DeleteStateMachine = DeleteStateMachine'
+    { _dStateMachineARN :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteStateMachine' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dStateMachineARN' - The Amazon Resource Name (ARN) of the state machine to delete.
+deleteStateMachine
+    :: Text -- ^ 'dStateMachineARN'
+    -> DeleteStateMachine
+deleteStateMachine pStateMachineARN_ =
+    DeleteStateMachine'
+    { _dStateMachineARN = pStateMachineARN_
+    }
+
+-- | The Amazon Resource Name (ARN) of the state machine to delete.
+dStateMachineARN :: Lens' DeleteStateMachine Text
+dStateMachineARN = lens _dStateMachineARN (\ s a -> s{_dStateMachineARN = a});
+
+instance AWSRequest DeleteStateMachine where
+        type Rs DeleteStateMachine =
+             DeleteStateMachineResponse
+        request = postJSON stepFunctions
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteStateMachineResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteStateMachine
+
+instance NFData DeleteStateMachine
+
+instance ToHeaders DeleteStateMachine where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSStepFunctions.DeleteStateMachine" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.0" :: ByteString)])
+
+instance ToJSON DeleteStateMachine where
+        toJSON DeleteStateMachine'{..}
+          = object
+              (catMaybes
+                 [Just ("stateMachineArn" .= _dStateMachineARN)])
+
+instance ToPath DeleteStateMachine where
+        toPath = const "/"
+
+instance ToQuery DeleteStateMachine where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteStateMachineResponse' smart constructor.
+newtype DeleteStateMachineResponse = DeleteStateMachineResponse'
+    { _drsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteStateMachineResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drsResponseStatus' - -- | The response status code.
+deleteStateMachineResponse
+    :: Int -- ^ 'drsResponseStatus'
+    -> DeleteStateMachineResponse
+deleteStateMachineResponse pResponseStatus_ =
+    DeleteStateMachineResponse'
+    { _drsResponseStatus = pResponseStatus_
+    }
+
+-- | -- | The response status code.
+drsResponseStatus :: Lens' DeleteStateMachineResponse Int
+drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a});
+
+instance NFData DeleteStateMachineResponse
diff --git a/gen/Network/AWS/StepFunctions/DescribeActivity.hs b/gen/Network/AWS/StepFunctions/DescribeActivity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/DescribeActivity.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.DescribeActivity
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes an activity.
+--
+--
+module Network.AWS.StepFunctions.DescribeActivity
+    (
+    -- * Creating a Request
+      describeActivity
+    , DescribeActivity
+    -- * Request Lenses
+    , dActivityARN
+
+    -- * Destructuring the Response
+    , describeActivityResponse
+    , DescribeActivityResponse
+    -- * Response Lenses
+    , desrsResponseStatus
+    , desrsActivityARN
+    , desrsName
+    , desrsCreationDate
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.Types.Product
+
+-- | /See:/ 'describeActivity' smart constructor.
+newtype DescribeActivity = DescribeActivity'
+    { _dActivityARN :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeActivity' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dActivityARN' - The Amazon Resource Name (ARN) of the activity to describe.
+describeActivity
+    :: Text -- ^ 'dActivityARN'
+    -> DescribeActivity
+describeActivity pActivityARN_ =
+    DescribeActivity'
+    { _dActivityARN = pActivityARN_
+    }
+
+-- | The Amazon Resource Name (ARN) of the activity to describe.
+dActivityARN :: Lens' DescribeActivity Text
+dActivityARN = lens _dActivityARN (\ s a -> s{_dActivityARN = a});
+
+instance AWSRequest DescribeActivity where
+        type Rs DescribeActivity = DescribeActivityResponse
+        request = postJSON stepFunctions
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeActivityResponse' <$>
+                   (pure (fromEnum s)) <*> (x .:> "activityArn") <*>
+                     (x .:> "name")
+                     <*> (x .:> "creationDate"))
+
+instance Hashable DescribeActivity
+
+instance NFData DescribeActivity
+
+instance ToHeaders DescribeActivity where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSStepFunctions.DescribeActivity" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.0" :: ByteString)])
+
+instance ToJSON DescribeActivity where
+        toJSON DescribeActivity'{..}
+          = object
+              (catMaybes [Just ("activityArn" .= _dActivityARN)])
+
+instance ToPath DescribeActivity where
+        toPath = const "/"
+
+instance ToQuery DescribeActivity where
+        toQuery = const mempty
+
+-- | /See:/ 'describeActivityResponse' smart constructor.
+data DescribeActivityResponse = DescribeActivityResponse'
+    { _desrsResponseStatus :: !Int
+    , _desrsActivityARN    :: !Text
+    , _desrsName           :: !Text
+    , _desrsCreationDate   :: !POSIX
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeActivityResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'desrsResponseStatus' - -- | The response status code.
+--
+-- * 'desrsActivityARN' - The Amazon Resource Name (ARN) that identifies the activity.
+--
+-- * 'desrsName' - The name of the activity.
+--
+-- * 'desrsCreationDate' - The date the activity was created.
+describeActivityResponse
+    :: Int -- ^ 'desrsResponseStatus'
+    -> Text -- ^ 'desrsActivityARN'
+    -> Text -- ^ 'desrsName'
+    -> UTCTime -- ^ 'desrsCreationDate'
+    -> DescribeActivityResponse
+describeActivityResponse pResponseStatus_ pActivityARN_ pName_ pCreationDate_ =
+    DescribeActivityResponse'
+    { _desrsResponseStatus = pResponseStatus_
+    , _desrsActivityARN = pActivityARN_
+    , _desrsName = pName_
+    , _desrsCreationDate = _Time # pCreationDate_
+    }
+
+-- | -- | The response status code.
+desrsResponseStatus :: Lens' DescribeActivityResponse Int
+desrsResponseStatus = lens _desrsResponseStatus (\ s a -> s{_desrsResponseStatus = a});
+
+-- | The Amazon Resource Name (ARN) that identifies the activity.
+desrsActivityARN :: Lens' DescribeActivityResponse Text
+desrsActivityARN = lens _desrsActivityARN (\ s a -> s{_desrsActivityARN = a});
+
+-- | The name of the activity.
+desrsName :: Lens' DescribeActivityResponse Text
+desrsName = lens _desrsName (\ s a -> s{_desrsName = a});
+
+-- | The date the activity was created.
+desrsCreationDate :: Lens' DescribeActivityResponse UTCTime
+desrsCreationDate = lens _desrsCreationDate (\ s a -> s{_desrsCreationDate = a}) . _Time;
+
+instance NFData DescribeActivityResponse
diff --git a/gen/Network/AWS/StepFunctions/DescribeExecution.hs b/gen/Network/AWS/StepFunctions/DescribeExecution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/DescribeExecution.hs
@@ -0,0 +1,208 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.DescribeExecution
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes an execution.
+--
+--
+module Network.AWS.StepFunctions.DescribeExecution
+    (
+    -- * Creating a Request
+      describeExecution
+    , DescribeExecution
+    -- * Request Lenses
+    , deExecutionARN
+
+    -- * Destructuring the Response
+    , describeExecutionResponse
+    , DescribeExecutionResponse
+    -- * Response Lenses
+    , dersStopDate
+    , dersName
+    , dersOutput
+    , dersResponseStatus
+    , dersExecutionARN
+    , dersStateMachineARN
+    , dersStatus
+    , dersStartDate
+    , dersInput
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.Types.Product
+
+-- | /See:/ 'describeExecution' smart constructor.
+newtype DescribeExecution = DescribeExecution'
+    { _deExecutionARN :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeExecution' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'deExecutionARN' - The Amazon Resource Name (ARN) of the execution to describe.
+describeExecution
+    :: Text -- ^ 'deExecutionARN'
+    -> DescribeExecution
+describeExecution pExecutionARN_ =
+    DescribeExecution'
+    { _deExecutionARN = pExecutionARN_
+    }
+
+-- | The Amazon Resource Name (ARN) of the execution to describe.
+deExecutionARN :: Lens' DescribeExecution Text
+deExecutionARN = lens _deExecutionARN (\ s a -> s{_deExecutionARN = a});
+
+instance AWSRequest DescribeExecution where
+        type Rs DescribeExecution = DescribeExecutionResponse
+        request = postJSON stepFunctions
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeExecutionResponse' <$>
+                   (x .?> "stopDate") <*> (x .?> "name") <*>
+                     (x .?> "output")
+                     <*> (pure (fromEnum s))
+                     <*> (x .:> "executionArn")
+                     <*> (x .:> "stateMachineArn")
+                     <*> (x .:> "status")
+                     <*> (x .:> "startDate")
+                     <*> (x .:> "input"))
+
+instance Hashable DescribeExecution
+
+instance NFData DescribeExecution
+
+instance ToHeaders DescribeExecution where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSStepFunctions.DescribeExecution" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.0" :: ByteString)])
+
+instance ToJSON DescribeExecution where
+        toJSON DescribeExecution'{..}
+          = object
+              (catMaybes
+                 [Just ("executionArn" .= _deExecutionARN)])
+
+instance ToPath DescribeExecution where
+        toPath = const "/"
+
+instance ToQuery DescribeExecution where
+        toQuery = const mempty
+
+-- | /See:/ 'describeExecutionResponse' smart constructor.
+data DescribeExecutionResponse = DescribeExecutionResponse'
+    { _dersStopDate        :: !(Maybe POSIX)
+    , _dersName            :: !(Maybe Text)
+    , _dersOutput          :: !(Maybe Text)
+    , _dersResponseStatus  :: !Int
+    , _dersExecutionARN    :: !Text
+    , _dersStateMachineARN :: !Text
+    , _dersStatus          :: !ExecutionStatus
+    , _dersStartDate       :: !POSIX
+    , _dersInput           :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeExecutionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dersStopDate' - If the execution has already ended, the date the execution stopped.
+--
+-- * 'dersName' - The name of the execution.
+--
+-- * 'dersOutput' - The JSON output data of the execution.
+--
+-- * 'dersResponseStatus' - -- | The response status code.
+--
+-- * 'dersExecutionARN' - The Amazon Resource Name (ARN) that identifies the execution.
+--
+-- * 'dersStateMachineARN' - The Amazon Resource Name (ARN) of the executed stated machine.
+--
+-- * 'dersStatus' - The current status of the execution.
+--
+-- * 'dersStartDate' - The date the execution was started.
+--
+-- * 'dersInput' - The JSON input data of the execution.
+describeExecutionResponse
+    :: Int -- ^ 'dersResponseStatus'
+    -> Text -- ^ 'dersExecutionARN'
+    -> Text -- ^ 'dersStateMachineARN'
+    -> ExecutionStatus -- ^ 'dersStatus'
+    -> UTCTime -- ^ 'dersStartDate'
+    -> Text -- ^ 'dersInput'
+    -> DescribeExecutionResponse
+describeExecutionResponse pResponseStatus_ pExecutionARN_ pStateMachineARN_ pStatus_ pStartDate_ pInput_ =
+    DescribeExecutionResponse'
+    { _dersStopDate = Nothing
+    , _dersName = Nothing
+    , _dersOutput = Nothing
+    , _dersResponseStatus = pResponseStatus_
+    , _dersExecutionARN = pExecutionARN_
+    , _dersStateMachineARN = pStateMachineARN_
+    , _dersStatus = pStatus_
+    , _dersStartDate = _Time # pStartDate_
+    , _dersInput = pInput_
+    }
+
+-- | If the execution has already ended, the date the execution stopped.
+dersStopDate :: Lens' DescribeExecutionResponse (Maybe UTCTime)
+dersStopDate = lens _dersStopDate (\ s a -> s{_dersStopDate = a}) . mapping _Time;
+
+-- | The name of the execution.
+dersName :: Lens' DescribeExecutionResponse (Maybe Text)
+dersName = lens _dersName (\ s a -> s{_dersName = a});
+
+-- | The JSON output data of the execution.
+dersOutput :: Lens' DescribeExecutionResponse (Maybe Text)
+dersOutput = lens _dersOutput (\ s a -> s{_dersOutput = a});
+
+-- | -- | The response status code.
+dersResponseStatus :: Lens' DescribeExecutionResponse Int
+dersResponseStatus = lens _dersResponseStatus (\ s a -> s{_dersResponseStatus = a});
+
+-- | The Amazon Resource Name (ARN) that identifies the execution.
+dersExecutionARN :: Lens' DescribeExecutionResponse Text
+dersExecutionARN = lens _dersExecutionARN (\ s a -> s{_dersExecutionARN = a});
+
+-- | The Amazon Resource Name (ARN) of the executed stated machine.
+dersStateMachineARN :: Lens' DescribeExecutionResponse Text
+dersStateMachineARN = lens _dersStateMachineARN (\ s a -> s{_dersStateMachineARN = a});
+
+-- | The current status of the execution.
+dersStatus :: Lens' DescribeExecutionResponse ExecutionStatus
+dersStatus = lens _dersStatus (\ s a -> s{_dersStatus = a});
+
+-- | The date the execution was started.
+dersStartDate :: Lens' DescribeExecutionResponse UTCTime
+dersStartDate = lens _dersStartDate (\ s a -> s{_dersStartDate = a}) . _Time;
+
+-- | The JSON input data of the execution.
+dersInput :: Lens' DescribeExecutionResponse Text
+dersInput = lens _dersInput (\ s a -> s{_dersInput = a});
+
+instance NFData DescribeExecutionResponse
diff --git a/gen/Network/AWS/StepFunctions/DescribeStateMachine.hs b/gen/Network/AWS/StepFunctions/DescribeStateMachine.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/DescribeStateMachine.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.DescribeStateMachine
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a state machine.
+--
+--
+module Network.AWS.StepFunctions.DescribeStateMachine
+    (
+    -- * Creating a Request
+      describeStateMachine
+    , DescribeStateMachine
+    -- * Request Lenses
+    , dsmStateMachineARN
+
+    -- * Destructuring the Response
+    , describeStateMachineResponse
+    , DescribeStateMachineResponse
+    -- * Response Lenses
+    , dsmrsStatus
+    , dsmrsResponseStatus
+    , dsmrsStateMachineARN
+    , dsmrsName
+    , dsmrsDefinition
+    , dsmrsRoleARN
+    , dsmrsCreationDate
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.Types.Product
+
+-- | /See:/ 'describeStateMachine' smart constructor.
+newtype DescribeStateMachine = DescribeStateMachine'
+    { _dsmStateMachineARN :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeStateMachine' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsmStateMachineARN' - The Amazon Resource Name (ARN) of the state machine to describe.
+describeStateMachine
+    :: Text -- ^ 'dsmStateMachineARN'
+    -> DescribeStateMachine
+describeStateMachine pStateMachineARN_ =
+    DescribeStateMachine'
+    { _dsmStateMachineARN = pStateMachineARN_
+    }
+
+-- | The Amazon Resource Name (ARN) of the state machine to describe.
+dsmStateMachineARN :: Lens' DescribeStateMachine Text
+dsmStateMachineARN = lens _dsmStateMachineARN (\ s a -> s{_dsmStateMachineARN = a});
+
+instance AWSRequest DescribeStateMachine where
+        type Rs DescribeStateMachine =
+             DescribeStateMachineResponse
+        request = postJSON stepFunctions
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeStateMachineResponse' <$>
+                   (x .?> "status") <*> (pure (fromEnum s)) <*>
+                     (x .:> "stateMachineArn")
+                     <*> (x .:> "name")
+                     <*> (x .:> "definition")
+                     <*> (x .:> "roleArn")
+                     <*> (x .:> "creationDate"))
+
+instance Hashable DescribeStateMachine
+
+instance NFData DescribeStateMachine
+
+instance ToHeaders DescribeStateMachine where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSStepFunctions.DescribeStateMachine" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.0" :: ByteString)])
+
+instance ToJSON DescribeStateMachine where
+        toJSON DescribeStateMachine'{..}
+          = object
+              (catMaybes
+                 [Just ("stateMachineArn" .= _dsmStateMachineARN)])
+
+instance ToPath DescribeStateMachine where
+        toPath = const "/"
+
+instance ToQuery DescribeStateMachine where
+        toQuery = const mempty
+
+-- | /See:/ 'describeStateMachineResponse' smart constructor.
+data DescribeStateMachineResponse = DescribeStateMachineResponse'
+    { _dsmrsStatus          :: !(Maybe StateMachineStatus)
+    , _dsmrsResponseStatus  :: !Int
+    , _dsmrsStateMachineARN :: !Text
+    , _dsmrsName            :: !Text
+    , _dsmrsDefinition      :: !Text
+    , _dsmrsRoleARN         :: !Text
+    , _dsmrsCreationDate    :: !POSIX
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeStateMachineResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsmrsStatus' - The current status of the state machine.
+--
+-- * 'dsmrsResponseStatus' - -- | The response status code.
+--
+-- * 'dsmrsStateMachineARN' - The Amazon Resource Name (ARN) that identifies the state machine.
+--
+-- * 'dsmrsName' - The name of the state machine.
+--
+-- * 'dsmrsDefinition' - The Amazon States Language definition of the state machine.
+--
+-- * 'dsmrsRoleARN' - The Amazon Resource Name (ARN) of the IAM role used for executing this state machine.
+--
+-- * 'dsmrsCreationDate' - The date the state machine was created.
+describeStateMachineResponse
+    :: Int -- ^ 'dsmrsResponseStatus'
+    -> Text -- ^ 'dsmrsStateMachineARN'
+    -> Text -- ^ 'dsmrsName'
+    -> Text -- ^ 'dsmrsDefinition'
+    -> Text -- ^ 'dsmrsRoleARN'
+    -> UTCTime -- ^ 'dsmrsCreationDate'
+    -> DescribeStateMachineResponse
+describeStateMachineResponse pResponseStatus_ pStateMachineARN_ pName_ pDefinition_ pRoleARN_ pCreationDate_ =
+    DescribeStateMachineResponse'
+    { _dsmrsStatus = Nothing
+    , _dsmrsResponseStatus = pResponseStatus_
+    , _dsmrsStateMachineARN = pStateMachineARN_
+    , _dsmrsName = pName_
+    , _dsmrsDefinition = pDefinition_
+    , _dsmrsRoleARN = pRoleARN_
+    , _dsmrsCreationDate = _Time # pCreationDate_
+    }
+
+-- | The current status of the state machine.
+dsmrsStatus :: Lens' DescribeStateMachineResponse (Maybe StateMachineStatus)
+dsmrsStatus = lens _dsmrsStatus (\ s a -> s{_dsmrsStatus = a});
+
+-- | -- | The response status code.
+dsmrsResponseStatus :: Lens' DescribeStateMachineResponse Int
+dsmrsResponseStatus = lens _dsmrsResponseStatus (\ s a -> s{_dsmrsResponseStatus = a});
+
+-- | The Amazon Resource Name (ARN) that identifies the state machine.
+dsmrsStateMachineARN :: Lens' DescribeStateMachineResponse Text
+dsmrsStateMachineARN = lens _dsmrsStateMachineARN (\ s a -> s{_dsmrsStateMachineARN = a});
+
+-- | The name of the state machine.
+dsmrsName :: Lens' DescribeStateMachineResponse Text
+dsmrsName = lens _dsmrsName (\ s a -> s{_dsmrsName = a});
+
+-- | The Amazon States Language definition of the state machine.
+dsmrsDefinition :: Lens' DescribeStateMachineResponse Text
+dsmrsDefinition = lens _dsmrsDefinition (\ s a -> s{_dsmrsDefinition = a});
+
+-- | The Amazon Resource Name (ARN) of the IAM role used for executing this state machine.
+dsmrsRoleARN :: Lens' DescribeStateMachineResponse Text
+dsmrsRoleARN = lens _dsmrsRoleARN (\ s a -> s{_dsmrsRoleARN = a});
+
+-- | The date the state machine was created.
+dsmrsCreationDate :: Lens' DescribeStateMachineResponse UTCTime
+dsmrsCreationDate = lens _dsmrsCreationDate (\ s a -> s{_dsmrsCreationDate = a}) . _Time;
+
+instance NFData DescribeStateMachineResponse
diff --git a/gen/Network/AWS/StepFunctions/GetActivityTask.hs b/gen/Network/AWS/StepFunctions/GetActivityTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/GetActivityTask.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.GetActivityTask
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Used by workers to retrieve a task (with the specified activity ARN) scheduled for execution by a running state machine. This initiates a long poll, where the service holds the HTTP connection open and responds as soon as a task becomes available (i.e. an execution of a task of this type is needed.) The maximum time the service holds on to the request before responding is 60 seconds. If no task is available within 60 seconds, the poll will return an empty result, that is, the @taskToken@ returned is an empty string.
+--
+--
+-- /Important:/ Workers should set their client side socket timeout to at least 65 seconds (5 seconds higher than the maximum time the service may hold the poll request).
+--
+module Network.AWS.StepFunctions.GetActivityTask
+    (
+    -- * Creating a Request
+      getActivityTask
+    , GetActivityTask
+    -- * Request Lenses
+    , gatWorkerName
+    , gatActivityARN
+
+    -- * Destructuring the Response
+    , getActivityTaskResponse
+    , GetActivityTaskResponse
+    -- * Response Lenses
+    , gatrsInput
+    , gatrsTaskToken
+    , gatrsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.Types.Product
+
+-- | /See:/ 'getActivityTask' smart constructor.
+data GetActivityTask = GetActivityTask'
+    { _gatWorkerName  :: !(Maybe Text)
+    , _gatActivityARN :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetActivityTask' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gatWorkerName' - An arbitrary name may be provided in order to identify the worker that the task is assigned to. This name will be used when it is logged in the execution history.
+--
+-- * 'gatActivityARN' - The Amazon Resource Name (ARN) of the activity to retrieve tasks from.
+getActivityTask
+    :: Text -- ^ 'gatActivityARN'
+    -> GetActivityTask
+getActivityTask pActivityARN_ =
+    GetActivityTask'
+    { _gatWorkerName = Nothing
+    , _gatActivityARN = pActivityARN_
+    }
+
+-- | An arbitrary name may be provided in order to identify the worker that the task is assigned to. This name will be used when it is logged in the execution history.
+gatWorkerName :: Lens' GetActivityTask (Maybe Text)
+gatWorkerName = lens _gatWorkerName (\ s a -> s{_gatWorkerName = a});
+
+-- | The Amazon Resource Name (ARN) of the activity to retrieve tasks from.
+gatActivityARN :: Lens' GetActivityTask Text
+gatActivityARN = lens _gatActivityARN (\ s a -> s{_gatActivityARN = a});
+
+instance AWSRequest GetActivityTask where
+        type Rs GetActivityTask = GetActivityTaskResponse
+        request = postJSON stepFunctions
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetActivityTaskResponse' <$>
+                   (x .?> "input") <*> (x .?> "taskToken") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable GetActivityTask
+
+instance NFData GetActivityTask
+
+instance ToHeaders GetActivityTask where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSStepFunctions.GetActivityTask" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.0" :: ByteString)])
+
+instance ToJSON GetActivityTask where
+        toJSON GetActivityTask'{..}
+          = object
+              (catMaybes
+                 [("workerName" .=) <$> _gatWorkerName,
+                  Just ("activityArn" .= _gatActivityARN)])
+
+instance ToPath GetActivityTask where
+        toPath = const "/"
+
+instance ToQuery GetActivityTask where
+        toQuery = const mempty
+
+-- | /See:/ 'getActivityTaskResponse' smart constructor.
+data GetActivityTaskResponse = GetActivityTaskResponse'
+    { _gatrsInput          :: !(Maybe Text)
+    , _gatrsTaskToken      :: !(Maybe Text)
+    , _gatrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetActivityTaskResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gatrsInput' - The JSON input data for the task.
+--
+-- * 'gatrsTaskToken' - A token that identifies the scheduled task. This token must be copied and included in subsequent calls to 'SendTaskHeartbeat' , 'SendTaskSuccess' or 'SendTaskFailure' in order to report the progress or completion of the task.
+--
+-- * 'gatrsResponseStatus' - -- | The response status code.
+getActivityTaskResponse
+    :: Int -- ^ 'gatrsResponseStatus'
+    -> GetActivityTaskResponse
+getActivityTaskResponse pResponseStatus_ =
+    GetActivityTaskResponse'
+    { _gatrsInput = Nothing
+    , _gatrsTaskToken = Nothing
+    , _gatrsResponseStatus = pResponseStatus_
+    }
+
+-- | The JSON input data for the task.
+gatrsInput :: Lens' GetActivityTaskResponse (Maybe Text)
+gatrsInput = lens _gatrsInput (\ s a -> s{_gatrsInput = a});
+
+-- | A token that identifies the scheduled task. This token must be copied and included in subsequent calls to 'SendTaskHeartbeat' , 'SendTaskSuccess' or 'SendTaskFailure' in order to report the progress or completion of the task.
+gatrsTaskToken :: Lens' GetActivityTaskResponse (Maybe Text)
+gatrsTaskToken = lens _gatrsTaskToken (\ s a -> s{_gatrsTaskToken = a});
+
+-- | -- | The response status code.
+gatrsResponseStatus :: Lens' GetActivityTaskResponse Int
+gatrsResponseStatus = lens _gatrsResponseStatus (\ s a -> s{_gatrsResponseStatus = a});
+
+instance NFData GetActivityTaskResponse
diff --git a/gen/Network/AWS/StepFunctions/GetExecutionHistory.hs b/gen/Network/AWS/StepFunctions/GetExecutionHistory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/GetExecutionHistory.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.GetExecutionHistory
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the history of the specified execution as a list of events. By default, the results are returned in ascending order of the @timeStamp@ of the events. Use the @reverseOrder@ parameter to get the latest events first. The results may be split into multiple pages. To retrieve subsequent pages, make the call again using the @nextToken@ returned by the previous call.
+--
+--
+module Network.AWS.StepFunctions.GetExecutionHistory
+    (
+    -- * Creating a Request
+      getExecutionHistory
+    , GetExecutionHistory
+    -- * Request Lenses
+    , gehReverseOrder
+    , gehNextToken
+    , gehMaxResults
+    , gehExecutionARN
+
+    -- * Destructuring the Response
+    , getExecutionHistoryResponse
+    , GetExecutionHistoryResponse
+    -- * Response Lenses
+    , gehrsNextToken
+    , gehrsResponseStatus
+    , gehrsEvents
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.Types.Product
+
+-- | /See:/ 'getExecutionHistory' smart constructor.
+data GetExecutionHistory = GetExecutionHistory'
+    { _gehReverseOrder :: !(Maybe Bool)
+    , _gehNextToken    :: !(Maybe Text)
+    , _gehMaxResults   :: !(Maybe Nat)
+    , _gehExecutionARN :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetExecutionHistory' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gehReverseOrder' - Lists events in descending order of their @timeStamp@ .
+--
+-- * 'gehNextToken' - If a @nextToken@ was returned by a previous call, there are more results available. To retrieve the next page of results, make the call again using the returned token in @nextToken@ . Keep all other arguments unchanged. The configured @maxResults@ determines how many results can be returned in a single call.
+--
+-- * 'gehMaxResults' - The maximum number of results that will be returned per call. @nextToken@ can be used to obtain further pages of results. The default is 100 and the maximum allowed page size is 1000. This is an upper limit only; the actual number of results returned per call may be fewer than the specified maximum.
+--
+-- * 'gehExecutionARN' - The Amazon Resource Name (ARN) of the execution.
+getExecutionHistory
+    :: Text -- ^ 'gehExecutionARN'
+    -> GetExecutionHistory
+getExecutionHistory pExecutionARN_ =
+    GetExecutionHistory'
+    { _gehReverseOrder = Nothing
+    , _gehNextToken = Nothing
+    , _gehMaxResults = Nothing
+    , _gehExecutionARN = pExecutionARN_
+    }
+
+-- | Lists events in descending order of their @timeStamp@ .
+gehReverseOrder :: Lens' GetExecutionHistory (Maybe Bool)
+gehReverseOrder = lens _gehReverseOrder (\ s a -> s{_gehReverseOrder = a});
+
+-- | If a @nextToken@ was returned by a previous call, there are more results available. To retrieve the next page of results, make the call again using the returned token in @nextToken@ . Keep all other arguments unchanged. The configured @maxResults@ determines how many results can be returned in a single call.
+gehNextToken :: Lens' GetExecutionHistory (Maybe Text)
+gehNextToken = lens _gehNextToken (\ s a -> s{_gehNextToken = a});
+
+-- | The maximum number of results that will be returned per call. @nextToken@ can be used to obtain further pages of results. The default is 100 and the maximum allowed page size is 1000. This is an upper limit only; the actual number of results returned per call may be fewer than the specified maximum.
+gehMaxResults :: Lens' GetExecutionHistory (Maybe Natural)
+gehMaxResults = lens _gehMaxResults (\ s a -> s{_gehMaxResults = a}) . mapping _Nat;
+
+-- | The Amazon Resource Name (ARN) of the execution.
+gehExecutionARN :: Lens' GetExecutionHistory Text
+gehExecutionARN = lens _gehExecutionARN (\ s a -> s{_gehExecutionARN = a});
+
+instance AWSRequest GetExecutionHistory where
+        type Rs GetExecutionHistory =
+             GetExecutionHistoryResponse
+        request = postJSON stepFunctions
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetExecutionHistoryResponse' <$>
+                   (x .?> "nextToken") <*> (pure (fromEnum s)) <*>
+                     (x .?> "events" .!@ mempty))
+
+instance Hashable GetExecutionHistory
+
+instance NFData GetExecutionHistory
+
+instance ToHeaders GetExecutionHistory where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSStepFunctions.GetExecutionHistory" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.0" :: ByteString)])
+
+instance ToJSON GetExecutionHistory where
+        toJSON GetExecutionHistory'{..}
+          = object
+              (catMaybes
+                 [("reverseOrder" .=) <$> _gehReverseOrder,
+                  ("nextToken" .=) <$> _gehNextToken,
+                  ("maxResults" .=) <$> _gehMaxResults,
+                  Just ("executionArn" .= _gehExecutionARN)])
+
+instance ToPath GetExecutionHistory where
+        toPath = const "/"
+
+instance ToQuery GetExecutionHistory where
+        toQuery = const mempty
+
+-- | /See:/ 'getExecutionHistoryResponse' smart constructor.
+data GetExecutionHistoryResponse = GetExecutionHistoryResponse'
+    { _gehrsNextToken      :: !(Maybe Text)
+    , _gehrsResponseStatus :: !Int
+    , _gehrsEvents         :: ![HistoryEvent]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetExecutionHistoryResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gehrsNextToken' - If a @nextToken@ is returned, there are more results available. To retrieve the next page of results, make the call again using the returned token in @nextToken@ . Keep all other arguments unchanged. The configured @maxResults@ determines how many results can be returned in a single call.
+--
+-- * 'gehrsResponseStatus' - -- | The response status code.
+--
+-- * 'gehrsEvents' - The list of events that occurred in the execution.
+getExecutionHistoryResponse
+    :: Int -- ^ 'gehrsResponseStatus'
+    -> GetExecutionHistoryResponse
+getExecutionHistoryResponse pResponseStatus_ =
+    GetExecutionHistoryResponse'
+    { _gehrsNextToken = Nothing
+    , _gehrsResponseStatus = pResponseStatus_
+    , _gehrsEvents = mempty
+    }
+
+-- | If a @nextToken@ is returned, there are more results available. To retrieve the next page of results, make the call again using the returned token in @nextToken@ . Keep all other arguments unchanged. The configured @maxResults@ determines how many results can be returned in a single call.
+gehrsNextToken :: Lens' GetExecutionHistoryResponse (Maybe Text)
+gehrsNextToken = lens _gehrsNextToken (\ s a -> s{_gehrsNextToken = a});
+
+-- | -- | The response status code.
+gehrsResponseStatus :: Lens' GetExecutionHistoryResponse Int
+gehrsResponseStatus = lens _gehrsResponseStatus (\ s a -> s{_gehrsResponseStatus = a});
+
+-- | The list of events that occurred in the execution.
+gehrsEvents :: Lens' GetExecutionHistoryResponse [HistoryEvent]
+gehrsEvents = lens _gehrsEvents (\ s a -> s{_gehrsEvents = a}) . _Coerce;
+
+instance NFData GetExecutionHistoryResponse
diff --git a/gen/Network/AWS/StepFunctions/ListActivities.hs b/gen/Network/AWS/StepFunctions/ListActivities.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/ListActivities.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.ListActivities
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the existing activities. The results may be split into multiple pages. To retrieve subsequent pages, make the call again using the @nextToken@ returned by the previous call.
+--
+--
+module Network.AWS.StepFunctions.ListActivities
+    (
+    -- * Creating a Request
+      listActivities
+    , ListActivities
+    -- * Request Lenses
+    , laNextToken
+    , laMaxResults
+
+    -- * Destructuring the Response
+    , listActivitiesResponse
+    , ListActivitiesResponse
+    -- * Response Lenses
+    , larsNextToken
+    , larsResponseStatus
+    , larsActivities
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.Types.Product
+
+-- | /See:/ 'listActivities' smart constructor.
+data ListActivities = ListActivities'
+    { _laNextToken  :: !(Maybe Text)
+    , _laMaxResults :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListActivities' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'laNextToken' - If a @nextToken@ was returned by a previous call, there are more results available. To retrieve the next page of results, make the call again using the returned token in @nextToken@ . Keep all other arguments unchanged. The configured @maxResults@ determines how many results can be returned in a single call.
+--
+-- * 'laMaxResults' - The maximum number of results that will be returned per call. @nextToken@ can be used to obtain further pages of results. The default is 100 and the maximum allowed page size is 1000. This is an upper limit only; the actual number of results returned per call may be fewer than the specified maximum.
+listActivities
+    :: ListActivities
+listActivities =
+    ListActivities'
+    { _laNextToken = Nothing
+    , _laMaxResults = Nothing
+    }
+
+-- | If a @nextToken@ was returned by a previous call, there are more results available. To retrieve the next page of results, make the call again using the returned token in @nextToken@ . Keep all other arguments unchanged. The configured @maxResults@ determines how many results can be returned in a single call.
+laNextToken :: Lens' ListActivities (Maybe Text)
+laNextToken = lens _laNextToken (\ s a -> s{_laNextToken = a});
+
+-- | The maximum number of results that will be returned per call. @nextToken@ can be used to obtain further pages of results. The default is 100 and the maximum allowed page size is 1000. This is an upper limit only; the actual number of results returned per call may be fewer than the specified maximum.
+laMaxResults :: Lens' ListActivities (Maybe Natural)
+laMaxResults = lens _laMaxResults (\ s a -> s{_laMaxResults = a}) . mapping _Nat;
+
+instance AWSRequest ListActivities where
+        type Rs ListActivities = ListActivitiesResponse
+        request = postJSON stepFunctions
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListActivitiesResponse' <$>
+                   (x .?> "nextToken") <*> (pure (fromEnum s)) <*>
+                     (x .?> "activities" .!@ mempty))
+
+instance Hashable ListActivities
+
+instance NFData ListActivities
+
+instance ToHeaders ListActivities where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSStepFunctions.ListActivities" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.0" :: ByteString)])
+
+instance ToJSON ListActivities where
+        toJSON ListActivities'{..}
+          = object
+              (catMaybes
+                 [("nextToken" .=) <$> _laNextToken,
+                  ("maxResults" .=) <$> _laMaxResults])
+
+instance ToPath ListActivities where
+        toPath = const "/"
+
+instance ToQuery ListActivities where
+        toQuery = const mempty
+
+-- | /See:/ 'listActivitiesResponse' smart constructor.
+data ListActivitiesResponse = ListActivitiesResponse'
+    { _larsNextToken      :: !(Maybe Text)
+    , _larsResponseStatus :: !Int
+    , _larsActivities     :: ![ActivityListItem]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListActivitiesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'larsNextToken' - If a @nextToken@ is returned, there are more results available. To retrieve the next page of results, make the call again using the returned token in @nextToken@ . Keep all other arguments unchanged. The configured @maxResults@ determines how many results can be returned in a single call.
+--
+-- * 'larsResponseStatus' - -- | The response status code.
+--
+-- * 'larsActivities' - The list of activities.
+listActivitiesResponse
+    :: Int -- ^ 'larsResponseStatus'
+    -> ListActivitiesResponse
+listActivitiesResponse pResponseStatus_ =
+    ListActivitiesResponse'
+    { _larsNextToken = Nothing
+    , _larsResponseStatus = pResponseStatus_
+    , _larsActivities = mempty
+    }
+
+-- | If a @nextToken@ is returned, there are more results available. To retrieve the next page of results, make the call again using the returned token in @nextToken@ . Keep all other arguments unchanged. The configured @maxResults@ determines how many results can be returned in a single call.
+larsNextToken :: Lens' ListActivitiesResponse (Maybe Text)
+larsNextToken = lens _larsNextToken (\ s a -> s{_larsNextToken = a});
+
+-- | -- | The response status code.
+larsResponseStatus :: Lens' ListActivitiesResponse Int
+larsResponseStatus = lens _larsResponseStatus (\ s a -> s{_larsResponseStatus = a});
+
+-- | The list of activities.
+larsActivities :: Lens' ListActivitiesResponse [ActivityListItem]
+larsActivities = lens _larsActivities (\ s a -> s{_larsActivities = a}) . _Coerce;
+
+instance NFData ListActivitiesResponse
diff --git a/gen/Network/AWS/StepFunctions/ListExecutions.hs b/gen/Network/AWS/StepFunctions/ListExecutions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/ListExecutions.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.ListExecutions
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the executions of a state machine that meet the filtering criteria. The results may be split into multiple pages. To retrieve subsequent pages, make the call again using the @nextToken@ returned by the previous call.
+--
+--
+module Network.AWS.StepFunctions.ListExecutions
+    (
+    -- * Creating a Request
+      listExecutions
+    , ListExecutions
+    -- * Request Lenses
+    , leStatusFilter
+    , leNextToken
+    , leMaxResults
+    , leStateMachineARN
+
+    -- * Destructuring the Response
+    , listExecutionsResponse
+    , ListExecutionsResponse
+    -- * Response Lenses
+    , lersNextToken
+    , lersResponseStatus
+    , lersExecutions
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.Types.Product
+
+-- | /See:/ 'listExecutions' smart constructor.
+data ListExecutions = ListExecutions'
+    { _leStatusFilter    :: !(Maybe ExecutionStatus)
+    , _leNextToken       :: !(Maybe Text)
+    , _leMaxResults      :: !(Maybe Nat)
+    , _leStateMachineARN :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListExecutions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'leStatusFilter' - If specified, only list the executions whose current execution status matches the given filter.
+--
+-- * 'leNextToken' - If a @nextToken@ was returned by a previous call, there are more results available. To retrieve the next page of results, make the call again using the returned token in @nextToken@ . Keep all other arguments unchanged. The configured @maxResults@ determines how many results can be returned in a single call.
+--
+-- * 'leMaxResults' - The maximum number of results that will be returned per call. @nextToken@ can be used to obtain further pages of results. The default is 100 and the maximum allowed page size is 1000. This is an upper limit only; the actual number of results returned per call may be fewer than the specified maximum.
+--
+-- * 'leStateMachineARN' - The Amazon Resource Name (ARN) of the state machine whose executions will be listed.
+listExecutions
+    :: Text -- ^ 'leStateMachineARN'
+    -> ListExecutions
+listExecutions pStateMachineARN_ =
+    ListExecutions'
+    { _leStatusFilter = Nothing
+    , _leNextToken = Nothing
+    , _leMaxResults = Nothing
+    , _leStateMachineARN = pStateMachineARN_
+    }
+
+-- | If specified, only list the executions whose current execution status matches the given filter.
+leStatusFilter :: Lens' ListExecutions (Maybe ExecutionStatus)
+leStatusFilter = lens _leStatusFilter (\ s a -> s{_leStatusFilter = a});
+
+-- | If a @nextToken@ was returned by a previous call, there are more results available. To retrieve the next page of results, make the call again using the returned token in @nextToken@ . Keep all other arguments unchanged. The configured @maxResults@ determines how many results can be returned in a single call.
+leNextToken :: Lens' ListExecutions (Maybe Text)
+leNextToken = lens _leNextToken (\ s a -> s{_leNextToken = a});
+
+-- | The maximum number of results that will be returned per call. @nextToken@ can be used to obtain further pages of results. The default is 100 and the maximum allowed page size is 1000. This is an upper limit only; the actual number of results returned per call may be fewer than the specified maximum.
+leMaxResults :: Lens' ListExecutions (Maybe Natural)
+leMaxResults = lens _leMaxResults (\ s a -> s{_leMaxResults = a}) . mapping _Nat;
+
+-- | The Amazon Resource Name (ARN) of the state machine whose executions will be listed.
+leStateMachineARN :: Lens' ListExecutions Text
+leStateMachineARN = lens _leStateMachineARN (\ s a -> s{_leStateMachineARN = a});
+
+instance AWSRequest ListExecutions where
+        type Rs ListExecutions = ListExecutionsResponse
+        request = postJSON stepFunctions
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListExecutionsResponse' <$>
+                   (x .?> "nextToken") <*> (pure (fromEnum s)) <*>
+                     (x .?> "executions" .!@ mempty))
+
+instance Hashable ListExecutions
+
+instance NFData ListExecutions
+
+instance ToHeaders ListExecutions where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSStepFunctions.ListExecutions" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.0" :: ByteString)])
+
+instance ToJSON ListExecutions where
+        toJSON ListExecutions'{..}
+          = object
+              (catMaybes
+                 [("statusFilter" .=) <$> _leStatusFilter,
+                  ("nextToken" .=) <$> _leNextToken,
+                  ("maxResults" .=) <$> _leMaxResults,
+                  Just ("stateMachineArn" .= _leStateMachineARN)])
+
+instance ToPath ListExecutions where
+        toPath = const "/"
+
+instance ToQuery ListExecutions where
+        toQuery = const mempty
+
+-- | /See:/ 'listExecutionsResponse' smart constructor.
+data ListExecutionsResponse = ListExecutionsResponse'
+    { _lersNextToken      :: !(Maybe Text)
+    , _lersResponseStatus :: !Int
+    , _lersExecutions     :: ![ExecutionListItem]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListExecutionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lersNextToken' - If a @nextToken@ is returned, there are more results available. To retrieve the next page of results, make the call again using the returned token in @nextToken@ . Keep all other arguments unchanged. The configured @maxResults@ determines how many results can be returned in a single call.
+--
+-- * 'lersResponseStatus' - -- | The response status code.
+--
+-- * 'lersExecutions' - The list of matching executions.
+listExecutionsResponse
+    :: Int -- ^ 'lersResponseStatus'
+    -> ListExecutionsResponse
+listExecutionsResponse pResponseStatus_ =
+    ListExecutionsResponse'
+    { _lersNextToken = Nothing
+    , _lersResponseStatus = pResponseStatus_
+    , _lersExecutions = mempty
+    }
+
+-- | If a @nextToken@ is returned, there are more results available. To retrieve the next page of results, make the call again using the returned token in @nextToken@ . Keep all other arguments unchanged. The configured @maxResults@ determines how many results can be returned in a single call.
+lersNextToken :: Lens' ListExecutionsResponse (Maybe Text)
+lersNextToken = lens _lersNextToken (\ s a -> s{_lersNextToken = a});
+
+-- | -- | The response status code.
+lersResponseStatus :: Lens' ListExecutionsResponse Int
+lersResponseStatus = lens _lersResponseStatus (\ s a -> s{_lersResponseStatus = a});
+
+-- | The list of matching executions.
+lersExecutions :: Lens' ListExecutionsResponse [ExecutionListItem]
+lersExecutions = lens _lersExecutions (\ s a -> s{_lersExecutions = a}) . _Coerce;
+
+instance NFData ListExecutionsResponse
diff --git a/gen/Network/AWS/StepFunctions/ListStateMachines.hs b/gen/Network/AWS/StepFunctions/ListStateMachines.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/ListStateMachines.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.ListStateMachines
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the existing state machines. The results may be split into multiple pages. To retrieve subsequent pages, make the call again using the @nextToken@ returned by the previous call.
+--
+--
+module Network.AWS.StepFunctions.ListStateMachines
+    (
+    -- * Creating a Request
+      listStateMachines
+    , ListStateMachines
+    -- * Request Lenses
+    , lsmNextToken
+    , lsmMaxResults
+
+    -- * Destructuring the Response
+    , listStateMachinesResponse
+    , ListStateMachinesResponse
+    -- * Response Lenses
+    , lsmrsNextToken
+    , lsmrsResponseStatus
+    , lsmrsStateMachines
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.Types.Product
+
+-- | /See:/ 'listStateMachines' smart constructor.
+data ListStateMachines = ListStateMachines'
+    { _lsmNextToken  :: !(Maybe Text)
+    , _lsmMaxResults :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListStateMachines' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lsmNextToken' - If a @nextToken@ was returned by a previous call, there are more results available. To retrieve the next page of results, make the call again using the returned token in @nextToken@ . Keep all other arguments unchanged. The configured @maxResults@ determines how many results can be returned in a single call.
+--
+-- * 'lsmMaxResults' - The maximum number of results that will be returned per call. @nextToken@ can be used to obtain further pages of results. The default is 100 and the maximum allowed page size is 1000. This is an upper limit only; the actual number of results returned per call may be fewer than the specified maximum.
+listStateMachines
+    :: ListStateMachines
+listStateMachines =
+    ListStateMachines'
+    { _lsmNextToken = Nothing
+    , _lsmMaxResults = Nothing
+    }
+
+-- | If a @nextToken@ was returned by a previous call, there are more results available. To retrieve the next page of results, make the call again using the returned token in @nextToken@ . Keep all other arguments unchanged. The configured @maxResults@ determines how many results can be returned in a single call.
+lsmNextToken :: Lens' ListStateMachines (Maybe Text)
+lsmNextToken = lens _lsmNextToken (\ s a -> s{_lsmNextToken = a});
+
+-- | The maximum number of results that will be returned per call. @nextToken@ can be used to obtain further pages of results. The default is 100 and the maximum allowed page size is 1000. This is an upper limit only; the actual number of results returned per call may be fewer than the specified maximum.
+lsmMaxResults :: Lens' ListStateMachines (Maybe Natural)
+lsmMaxResults = lens _lsmMaxResults (\ s a -> s{_lsmMaxResults = a}) . mapping _Nat;
+
+instance AWSRequest ListStateMachines where
+        type Rs ListStateMachines = ListStateMachinesResponse
+        request = postJSON stepFunctions
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListStateMachinesResponse' <$>
+                   (x .?> "nextToken") <*> (pure (fromEnum s)) <*>
+                     (x .?> "stateMachines" .!@ mempty))
+
+instance Hashable ListStateMachines
+
+instance NFData ListStateMachines
+
+instance ToHeaders ListStateMachines where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSStepFunctions.ListStateMachines" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.0" :: ByteString)])
+
+instance ToJSON ListStateMachines where
+        toJSON ListStateMachines'{..}
+          = object
+              (catMaybes
+                 [("nextToken" .=) <$> _lsmNextToken,
+                  ("maxResults" .=) <$> _lsmMaxResults])
+
+instance ToPath ListStateMachines where
+        toPath = const "/"
+
+instance ToQuery ListStateMachines where
+        toQuery = const mempty
+
+-- | /See:/ 'listStateMachinesResponse' smart constructor.
+data ListStateMachinesResponse = ListStateMachinesResponse'
+    { _lsmrsNextToken      :: !(Maybe Text)
+    , _lsmrsResponseStatus :: !Int
+    , _lsmrsStateMachines  :: ![StateMachineListItem]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListStateMachinesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lsmrsNextToken' - If a @nextToken@ is returned, there are more results available. To retrieve the next page of results, make the call again using the returned token in @nextToken@ . Keep all other arguments unchanged. The configured @maxResults@ determines how many results can be returned in a single call.
+--
+-- * 'lsmrsResponseStatus' - -- | The response status code.
+--
+-- * 'lsmrsStateMachines' - Undocumented member.
+listStateMachinesResponse
+    :: Int -- ^ 'lsmrsResponseStatus'
+    -> ListStateMachinesResponse
+listStateMachinesResponse pResponseStatus_ =
+    ListStateMachinesResponse'
+    { _lsmrsNextToken = Nothing
+    , _lsmrsResponseStatus = pResponseStatus_
+    , _lsmrsStateMachines = mempty
+    }
+
+-- | If a @nextToken@ is returned, there are more results available. To retrieve the next page of results, make the call again using the returned token in @nextToken@ . Keep all other arguments unchanged. The configured @maxResults@ determines how many results can be returned in a single call.
+lsmrsNextToken :: Lens' ListStateMachinesResponse (Maybe Text)
+lsmrsNextToken = lens _lsmrsNextToken (\ s a -> s{_lsmrsNextToken = a});
+
+-- | -- | The response status code.
+lsmrsResponseStatus :: Lens' ListStateMachinesResponse Int
+lsmrsResponseStatus = lens _lsmrsResponseStatus (\ s a -> s{_lsmrsResponseStatus = a});
+
+-- | Undocumented member.
+lsmrsStateMachines :: Lens' ListStateMachinesResponse [StateMachineListItem]
+lsmrsStateMachines = lens _lsmrsStateMachines (\ s a -> s{_lsmrsStateMachines = a}) . _Coerce;
+
+instance NFData ListStateMachinesResponse
diff --git a/gen/Network/AWS/StepFunctions/SendTaskFailure.hs b/gen/Network/AWS/StepFunctions/SendTaskFailure.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/SendTaskFailure.hs
@@ -0,0 +1,143 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.SendTaskFailure
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Used by workers to report that the task identified by the @taskToken@ failed.
+--
+--
+module Network.AWS.StepFunctions.SendTaskFailure
+    (
+    -- * Creating a Request
+      sendTaskFailure
+    , SendTaskFailure
+    -- * Request Lenses
+    , stfError
+    , stfCause
+    , stfTaskToken
+
+    -- * Destructuring the Response
+    , sendTaskFailureResponse
+    , SendTaskFailureResponse
+    -- * Response Lenses
+    , stfrsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.Types.Product
+
+-- | /See:/ 'sendTaskFailure' smart constructor.
+data SendTaskFailure = SendTaskFailure'
+    { _stfError     :: !(Maybe Text)
+    , _stfCause     :: !(Maybe Text)
+    , _stfTaskToken :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SendTaskFailure' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'stfError' - An arbitrary error code that identifies the cause of the failure.
+--
+-- * 'stfCause' - A more detailed explanation of the cause of the failure.
+--
+-- * 'stfTaskToken' - The token that represents this task. Task tokens are generated by the service when the tasks are assigned to a worker (see GetActivityTask::taskToken).
+sendTaskFailure
+    :: Text -- ^ 'stfTaskToken'
+    -> SendTaskFailure
+sendTaskFailure pTaskToken_ =
+    SendTaskFailure'
+    { _stfError = Nothing
+    , _stfCause = Nothing
+    , _stfTaskToken = pTaskToken_
+    }
+
+-- | An arbitrary error code that identifies the cause of the failure.
+stfError :: Lens' SendTaskFailure (Maybe Text)
+stfError = lens _stfError (\ s a -> s{_stfError = a});
+
+-- | A more detailed explanation of the cause of the failure.
+stfCause :: Lens' SendTaskFailure (Maybe Text)
+stfCause = lens _stfCause (\ s a -> s{_stfCause = a});
+
+-- | The token that represents this task. Task tokens are generated by the service when the tasks are assigned to a worker (see GetActivityTask::taskToken).
+stfTaskToken :: Lens' SendTaskFailure Text
+stfTaskToken = lens _stfTaskToken (\ s a -> s{_stfTaskToken = a});
+
+instance AWSRequest SendTaskFailure where
+        type Rs SendTaskFailure = SendTaskFailureResponse
+        request = postJSON stepFunctions
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 SendTaskFailureResponse' <$> (pure (fromEnum s)))
+
+instance Hashable SendTaskFailure
+
+instance NFData SendTaskFailure
+
+instance ToHeaders SendTaskFailure where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSStepFunctions.SendTaskFailure" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.0" :: ByteString)])
+
+instance ToJSON SendTaskFailure where
+        toJSON SendTaskFailure'{..}
+          = object
+              (catMaybes
+                 [("error" .=) <$> _stfError,
+                  ("cause" .=) <$> _stfCause,
+                  Just ("taskToken" .= _stfTaskToken)])
+
+instance ToPath SendTaskFailure where
+        toPath = const "/"
+
+instance ToQuery SendTaskFailure where
+        toQuery = const mempty
+
+-- | /See:/ 'sendTaskFailureResponse' smart constructor.
+newtype SendTaskFailureResponse = SendTaskFailureResponse'
+    { _stfrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SendTaskFailureResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'stfrsResponseStatus' - -- | The response status code.
+sendTaskFailureResponse
+    :: Int -- ^ 'stfrsResponseStatus'
+    -> SendTaskFailureResponse
+sendTaskFailureResponse pResponseStatus_ =
+    SendTaskFailureResponse'
+    { _stfrsResponseStatus = pResponseStatus_
+    }
+
+-- | -- | The response status code.
+stfrsResponseStatus :: Lens' SendTaskFailureResponse Int
+stfrsResponseStatus = lens _stfrsResponseStatus (\ s a -> s{_stfrsResponseStatus = a});
+
+instance NFData SendTaskFailureResponse
diff --git a/gen/Network/AWS/StepFunctions/SendTaskHeartbeat.hs b/gen/Network/AWS/StepFunctions/SendTaskHeartbeat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/SendTaskHeartbeat.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.SendTaskHeartbeat
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Used by workers to report to the service that the task represented by the specified @taskToken@ is still making progress. This action resets the @Heartbeat@ clock. The @Heartbeat@ threshold is specified in the state machine's Amazon States Language definition. This action does not in itself create an event in the execution history. However, if the task times out, the execution history will contain an @ActivityTimedOut@ event.
+--
+--
+module Network.AWS.StepFunctions.SendTaskHeartbeat
+    (
+    -- * Creating a Request
+      sendTaskHeartbeat
+    , SendTaskHeartbeat
+    -- * Request Lenses
+    , sthTaskToken
+
+    -- * Destructuring the Response
+    , sendTaskHeartbeatResponse
+    , SendTaskHeartbeatResponse
+    -- * Response Lenses
+    , sthrsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.Types.Product
+
+-- | /See:/ 'sendTaskHeartbeat' smart constructor.
+newtype SendTaskHeartbeat = SendTaskHeartbeat'
+    { _sthTaskToken :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SendTaskHeartbeat' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sthTaskToken' - The token that represents this task. Task tokens are generated by the service when the tasks are assigned to a worker (see GetActivityTask::taskToken).
+sendTaskHeartbeat
+    :: Text -- ^ 'sthTaskToken'
+    -> SendTaskHeartbeat
+sendTaskHeartbeat pTaskToken_ =
+    SendTaskHeartbeat'
+    { _sthTaskToken = pTaskToken_
+    }
+
+-- | The token that represents this task. Task tokens are generated by the service when the tasks are assigned to a worker (see GetActivityTask::taskToken).
+sthTaskToken :: Lens' SendTaskHeartbeat Text
+sthTaskToken = lens _sthTaskToken (\ s a -> s{_sthTaskToken = a});
+
+instance AWSRequest SendTaskHeartbeat where
+        type Rs SendTaskHeartbeat = SendTaskHeartbeatResponse
+        request = postJSON stepFunctions
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 SendTaskHeartbeatResponse' <$> (pure (fromEnum s)))
+
+instance Hashable SendTaskHeartbeat
+
+instance NFData SendTaskHeartbeat
+
+instance ToHeaders SendTaskHeartbeat where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSStepFunctions.SendTaskHeartbeat" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.0" :: ByteString)])
+
+instance ToJSON SendTaskHeartbeat where
+        toJSON SendTaskHeartbeat'{..}
+          = object
+              (catMaybes [Just ("taskToken" .= _sthTaskToken)])
+
+instance ToPath SendTaskHeartbeat where
+        toPath = const "/"
+
+instance ToQuery SendTaskHeartbeat where
+        toQuery = const mempty
+
+-- | /See:/ 'sendTaskHeartbeatResponse' smart constructor.
+newtype SendTaskHeartbeatResponse = SendTaskHeartbeatResponse'
+    { _sthrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SendTaskHeartbeatResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sthrsResponseStatus' - -- | The response status code.
+sendTaskHeartbeatResponse
+    :: Int -- ^ 'sthrsResponseStatus'
+    -> SendTaskHeartbeatResponse
+sendTaskHeartbeatResponse pResponseStatus_ =
+    SendTaskHeartbeatResponse'
+    { _sthrsResponseStatus = pResponseStatus_
+    }
+
+-- | -- | The response status code.
+sthrsResponseStatus :: Lens' SendTaskHeartbeatResponse Int
+sthrsResponseStatus = lens _sthrsResponseStatus (\ s a -> s{_sthrsResponseStatus = a});
+
+instance NFData SendTaskHeartbeatResponse
diff --git a/gen/Network/AWS/StepFunctions/SendTaskSuccess.hs b/gen/Network/AWS/StepFunctions/SendTaskSuccess.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/SendTaskSuccess.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.SendTaskSuccess
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Used by workers to report that the task identified by the @taskToken@ completed successfully.
+--
+--
+module Network.AWS.StepFunctions.SendTaskSuccess
+    (
+    -- * Creating a Request
+      sendTaskSuccess
+    , SendTaskSuccess
+    -- * Request Lenses
+    , stsTaskToken
+    , stsOutput
+
+    -- * Destructuring the Response
+    , sendTaskSuccessResponse
+    , SendTaskSuccessResponse
+    -- * Response Lenses
+    , stsrsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.Types.Product
+
+-- | /See:/ 'sendTaskSuccess' smart constructor.
+data SendTaskSuccess = SendTaskSuccess'
+    { _stsTaskToken :: !Text
+    , _stsOutput    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SendTaskSuccess' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'stsTaskToken' - The token that represents this task. Task tokens are generated by the service when the tasks are assigned to a worker (see GetActivityTask::taskToken).
+--
+-- * 'stsOutput' - The JSON output of the task.
+sendTaskSuccess
+    :: Text -- ^ 'stsTaskToken'
+    -> Text -- ^ 'stsOutput'
+    -> SendTaskSuccess
+sendTaskSuccess pTaskToken_ pOutput_ =
+    SendTaskSuccess'
+    { _stsTaskToken = pTaskToken_
+    , _stsOutput = pOutput_
+    }
+
+-- | The token that represents this task. Task tokens are generated by the service when the tasks are assigned to a worker (see GetActivityTask::taskToken).
+stsTaskToken :: Lens' SendTaskSuccess Text
+stsTaskToken = lens _stsTaskToken (\ s a -> s{_stsTaskToken = a});
+
+-- | The JSON output of the task.
+stsOutput :: Lens' SendTaskSuccess Text
+stsOutput = lens _stsOutput (\ s a -> s{_stsOutput = a});
+
+instance AWSRequest SendTaskSuccess where
+        type Rs SendTaskSuccess = SendTaskSuccessResponse
+        request = postJSON stepFunctions
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 SendTaskSuccessResponse' <$> (pure (fromEnum s)))
+
+instance Hashable SendTaskSuccess
+
+instance NFData SendTaskSuccess
+
+instance ToHeaders SendTaskSuccess where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSStepFunctions.SendTaskSuccess" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.0" :: ByteString)])
+
+instance ToJSON SendTaskSuccess where
+        toJSON SendTaskSuccess'{..}
+          = object
+              (catMaybes
+                 [Just ("taskToken" .= _stsTaskToken),
+                  Just ("output" .= _stsOutput)])
+
+instance ToPath SendTaskSuccess where
+        toPath = const "/"
+
+instance ToQuery SendTaskSuccess where
+        toQuery = const mempty
+
+-- | /See:/ 'sendTaskSuccessResponse' smart constructor.
+newtype SendTaskSuccessResponse = SendTaskSuccessResponse'
+    { _stsrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SendTaskSuccessResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'stsrsResponseStatus' - -- | The response status code.
+sendTaskSuccessResponse
+    :: Int -- ^ 'stsrsResponseStatus'
+    -> SendTaskSuccessResponse
+sendTaskSuccessResponse pResponseStatus_ =
+    SendTaskSuccessResponse'
+    { _stsrsResponseStatus = pResponseStatus_
+    }
+
+-- | -- | The response status code.
+stsrsResponseStatus :: Lens' SendTaskSuccessResponse Int
+stsrsResponseStatus = lens _stsrsResponseStatus (\ s a -> s{_stsrsResponseStatus = a});
+
+instance NFData SendTaskSuccessResponse
diff --git a/gen/Network/AWS/StepFunctions/StartExecution.hs b/gen/Network/AWS/StepFunctions/StartExecution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/StartExecution.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.StartExecution
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts a state machine execution.
+--
+--
+module Network.AWS.StepFunctions.StartExecution
+    (
+    -- * Creating a Request
+      startExecution
+    , StartExecution
+    -- * Request Lenses
+    , seInput
+    , seName
+    , seStateMachineARN
+
+    -- * Destructuring the Response
+    , startExecutionResponse
+    , StartExecutionResponse
+    -- * Response Lenses
+    , srsResponseStatus
+    , srsExecutionARN
+    , srsStartDate
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.Types.Product
+
+-- | /See:/ 'startExecution' smart constructor.
+data StartExecution = StartExecution'
+    { _seInput           :: !(Maybe Text)
+    , _seName            :: !(Maybe Text)
+    , _seStateMachineARN :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StartExecution' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'seInput' - The JSON input data for the execution.
+--
+-- * 'seName' - The name of the execution. This name must be unique for your AWS account and region.
+--
+-- * 'seStateMachineARN' - The Amazon Resource Name (ARN) of the state machine to execute.
+startExecution
+    :: Text -- ^ 'seStateMachineARN'
+    -> StartExecution
+startExecution pStateMachineARN_ =
+    StartExecution'
+    { _seInput = Nothing
+    , _seName = Nothing
+    , _seStateMachineARN = pStateMachineARN_
+    }
+
+-- | The JSON input data for the execution.
+seInput :: Lens' StartExecution (Maybe Text)
+seInput = lens _seInput (\ s a -> s{_seInput = a});
+
+-- | The name of the execution. This name must be unique for your AWS account and region.
+seName :: Lens' StartExecution (Maybe Text)
+seName = lens _seName (\ s a -> s{_seName = a});
+
+-- | The Amazon Resource Name (ARN) of the state machine to execute.
+seStateMachineARN :: Lens' StartExecution Text
+seStateMachineARN = lens _seStateMachineARN (\ s a -> s{_seStateMachineARN = a});
+
+instance AWSRequest StartExecution where
+        type Rs StartExecution = StartExecutionResponse
+        request = postJSON stepFunctions
+        response
+          = receiveJSON
+              (\ s h x ->
+                 StartExecutionResponse' <$>
+                   (pure (fromEnum s)) <*> (x .:> "executionArn") <*>
+                     (x .:> "startDate"))
+
+instance Hashable StartExecution
+
+instance NFData StartExecution
+
+instance ToHeaders StartExecution where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSStepFunctions.StartExecution" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.0" :: ByteString)])
+
+instance ToJSON StartExecution where
+        toJSON StartExecution'{..}
+          = object
+              (catMaybes
+                 [("input" .=) <$> _seInput, ("name" .=) <$> _seName,
+                  Just ("stateMachineArn" .= _seStateMachineARN)])
+
+instance ToPath StartExecution where
+        toPath = const "/"
+
+instance ToQuery StartExecution where
+        toQuery = const mempty
+
+-- | /See:/ 'startExecutionResponse' smart constructor.
+data StartExecutionResponse = StartExecutionResponse'
+    { _srsResponseStatus :: !Int
+    , _srsExecutionARN   :: !Text
+    , _srsStartDate      :: !POSIX
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StartExecutionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srsResponseStatus' - -- | The response status code.
+--
+-- * 'srsExecutionARN' - The Amazon Resource Name (ARN) that identifies the execution.
+--
+-- * 'srsStartDate' - The date the execution was started.
+startExecutionResponse
+    :: Int -- ^ 'srsResponseStatus'
+    -> Text -- ^ 'srsExecutionARN'
+    -> UTCTime -- ^ 'srsStartDate'
+    -> StartExecutionResponse
+startExecutionResponse pResponseStatus_ pExecutionARN_ pStartDate_ =
+    StartExecutionResponse'
+    { _srsResponseStatus = pResponseStatus_
+    , _srsExecutionARN = pExecutionARN_
+    , _srsStartDate = _Time # pStartDate_
+    }
+
+-- | -- | The response status code.
+srsResponseStatus :: Lens' StartExecutionResponse Int
+srsResponseStatus = lens _srsResponseStatus (\ s a -> s{_srsResponseStatus = a});
+
+-- | The Amazon Resource Name (ARN) that identifies the execution.
+srsExecutionARN :: Lens' StartExecutionResponse Text
+srsExecutionARN = lens _srsExecutionARN (\ s a -> s{_srsExecutionARN = a});
+
+-- | The date the execution was started.
+srsStartDate :: Lens' StartExecutionResponse UTCTime
+srsStartDate = lens _srsStartDate (\ s a -> s{_srsStartDate = a}) . _Time;
+
+instance NFData StartExecutionResponse
diff --git a/gen/Network/AWS/StepFunctions/StopExecution.hs b/gen/Network/AWS/StepFunctions/StopExecution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/StopExecution.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.StopExecution
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops an execution.
+--
+--
+module Network.AWS.StepFunctions.StopExecution
+    (
+    -- * Creating a Request
+      stopExecution
+    , StopExecution
+    -- * Request Lenses
+    , seError
+    , seCause
+    , seExecutionARN
+
+    -- * Destructuring the Response
+    , stopExecutionResponse
+    , StopExecutionResponse
+    -- * Response Lenses
+    , sersResponseStatus
+    , sersStopDate
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.StepFunctions.Types.Product
+
+-- | /See:/ 'stopExecution' smart constructor.
+data StopExecution = StopExecution'
+    { _seError        :: !(Maybe Text)
+    , _seCause        :: !(Maybe Text)
+    , _seExecutionARN :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StopExecution' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'seError' - An arbitrary error code that identifies the cause of the termination.
+--
+-- * 'seCause' - A more detailed explanation of the cause of the termination.
+--
+-- * 'seExecutionARN' - The Amazon Resource Name (ARN) of the execution to stop.
+stopExecution
+    :: Text -- ^ 'seExecutionARN'
+    -> StopExecution
+stopExecution pExecutionARN_ =
+    StopExecution'
+    { _seError = Nothing
+    , _seCause = Nothing
+    , _seExecutionARN = pExecutionARN_
+    }
+
+-- | An arbitrary error code that identifies the cause of the termination.
+seError :: Lens' StopExecution (Maybe Text)
+seError = lens _seError (\ s a -> s{_seError = a});
+
+-- | A more detailed explanation of the cause of the termination.
+seCause :: Lens' StopExecution (Maybe Text)
+seCause = lens _seCause (\ s a -> s{_seCause = a});
+
+-- | The Amazon Resource Name (ARN) of the execution to stop.
+seExecutionARN :: Lens' StopExecution Text
+seExecutionARN = lens _seExecutionARN (\ s a -> s{_seExecutionARN = a});
+
+instance AWSRequest StopExecution where
+        type Rs StopExecution = StopExecutionResponse
+        request = postJSON stepFunctions
+        response
+          = receiveJSON
+              (\ s h x ->
+                 StopExecutionResponse' <$>
+                   (pure (fromEnum s)) <*> (x .:> "stopDate"))
+
+instance Hashable StopExecution
+
+instance NFData StopExecution
+
+instance ToHeaders StopExecution where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSStepFunctions.StopExecution" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.0" :: ByteString)])
+
+instance ToJSON StopExecution where
+        toJSON StopExecution'{..}
+          = object
+              (catMaybes
+                 [("error" .=) <$> _seError,
+                  ("cause" .=) <$> _seCause,
+                  Just ("executionArn" .= _seExecutionARN)])
+
+instance ToPath StopExecution where
+        toPath = const "/"
+
+instance ToQuery StopExecution where
+        toQuery = const mempty
+
+-- | /See:/ 'stopExecutionResponse' smart constructor.
+data StopExecutionResponse = StopExecutionResponse'
+    { _sersResponseStatus :: !Int
+    , _sersStopDate       :: !POSIX
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StopExecutionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sersResponseStatus' - -- | The response status code.
+--
+-- * 'sersStopDate' - The date the execution was stopped.
+stopExecutionResponse
+    :: Int -- ^ 'sersResponseStatus'
+    -> UTCTime -- ^ 'sersStopDate'
+    -> StopExecutionResponse
+stopExecutionResponse pResponseStatus_ pStopDate_ =
+    StopExecutionResponse'
+    { _sersResponseStatus = pResponseStatus_
+    , _sersStopDate = _Time # pStopDate_
+    }
+
+-- | -- | The response status code.
+sersResponseStatus :: Lens' StopExecutionResponse Int
+sersResponseStatus = lens _sersResponseStatus (\ s a -> s{_sersResponseStatus = a});
+
+-- | The date the execution was stopped.
+sersStopDate :: Lens' StopExecutionResponse UTCTime
+sersStopDate = lens _sersStopDate (\ s a -> s{_sersStopDate = a}) . _Time;
+
+instance NFData StopExecutionResponse
diff --git a/gen/Network/AWS/StepFunctions/Types.hs b/gen/Network/AWS/StepFunctions/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/Types.hs
@@ -0,0 +1,357 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.Types
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.StepFunctions.Types
+    (
+    -- * Service Configuration
+      stepFunctions
+
+    -- * Errors
+    , _ExecutionLimitExceeded
+    , _InvalidDefinition
+    , _StateMachineLimitExceeded
+    , _ExecutionAlreadyExists
+    , _StateMachineAlreadyExists
+    , _TaskTimedOut
+    , _InvalidExecutionInput
+    , _InvalidOutput
+    , _InvalidName
+    , _TaskDoesNotExist
+    , _ActivityDoesNotExist
+    , _StateMachineDeleting
+    , _InvalidARN
+    , _InvalidToken
+    , _ActivityWorkerLimitExceeded
+    , _ActivityLimitExceeded
+    , _ExecutionDoesNotExist
+    , _StateMachineDoesNotExist
+
+    -- * ExecutionStatus
+    , ExecutionStatus (..)
+
+    -- * HistoryEventType
+    , HistoryEventType (..)
+
+    -- * StateMachineStatus
+    , StateMachineStatus (..)
+
+    -- * ActivityFailedEventDetails
+    , ActivityFailedEventDetails
+    , activityFailedEventDetails
+    , afedError
+    , afedCause
+
+    -- * ActivityListItem
+    , ActivityListItem
+    , activityListItem
+    , aliActivityARN
+    , aliName
+    , aliCreationDate
+
+    -- * ActivityScheduleFailedEventDetails
+    , ActivityScheduleFailedEventDetails
+    , activityScheduleFailedEventDetails
+    , asfedError
+    , asfedCause
+
+    -- * ActivityScheduledEventDetails
+    , ActivityScheduledEventDetails
+    , activityScheduledEventDetails
+    , asedHeartbeatInSeconds
+    , asedInput
+    , asedTimeoutInSeconds
+    , asedResource
+
+    -- * ActivityStartedEventDetails
+    , ActivityStartedEventDetails
+    , activityStartedEventDetails
+    , asedWorkerName
+
+    -- * ActivitySucceededEventDetails
+    , ActivitySucceededEventDetails
+    , activitySucceededEventDetails
+    , asedOutput
+
+    -- * ActivityTimedOutEventDetails
+    , ActivityTimedOutEventDetails
+    , activityTimedOutEventDetails
+    , atoedError
+    , atoedCause
+
+    -- * ExecutionAbortedEventDetails
+    , ExecutionAbortedEventDetails
+    , executionAbortedEventDetails
+    , eaedError
+    , eaedCause
+
+    -- * ExecutionFailedEventDetails
+    , ExecutionFailedEventDetails
+    , executionFailedEventDetails
+    , efedError
+    , efedCause
+
+    -- * ExecutionListItem
+    , ExecutionListItem
+    , executionListItem
+    , eliStopDate
+    , eliExecutionARN
+    , eliStateMachineARN
+    , eliName
+    , eliStatus
+    , eliStartDate
+
+    -- * ExecutionStartedEventDetails
+    , ExecutionStartedEventDetails
+    , executionStartedEventDetails
+    , esedInput
+    , esedRoleARN
+
+    -- * ExecutionSucceededEventDetails
+    , ExecutionSucceededEventDetails
+    , executionSucceededEventDetails
+    , esedOutput
+
+    -- * ExecutionTimedOutEventDetails
+    , ExecutionTimedOutEventDetails
+    , executionTimedOutEventDetails
+    , etoedError
+    , etoedCause
+
+    -- * HistoryEvent
+    , HistoryEvent
+    , historyEvent
+    , heActivityStartedEventDetails
+    , heLambdaFunctionStartFailedEventDetails
+    , heStateExitedEventDetails
+    , heLambdaFunctionSucceededEventDetails
+    , heActivitySucceededEventDetails
+    , heLambdaFunctionTimedOutEventDetails
+    , heActivityTimedOutEventDetails
+    , heExecutionFailedEventDetails
+    , heExecutionAbortedEventDetails
+    , heExecutionSucceededEventDetails
+    , heLambdaFunctionScheduledEventDetails
+    , heActivityScheduledEventDetails
+    , heExecutionStartedEventDetails
+    , heActivityScheduleFailedEventDetails
+    , heLambdaFunctionScheduleFailedEventDetails
+    , heStateEnteredEventDetails
+    , hePreviousEventId
+    , heActivityFailedEventDetails
+    , heLambdaFunctionFailedEventDetails
+    , heExecutionTimedOutEventDetails
+    , heTimestamp
+    , heType
+    , heId
+
+    -- * LambdaFunctionFailedEventDetails
+    , LambdaFunctionFailedEventDetails
+    , lambdaFunctionFailedEventDetails
+    , lffedError
+    , lffedCause
+
+    -- * LambdaFunctionScheduleFailedEventDetails
+    , LambdaFunctionScheduleFailedEventDetails
+    , lambdaFunctionScheduleFailedEventDetails
+    , lError
+    , lCause
+
+    -- * LambdaFunctionScheduledEventDetails
+    , LambdaFunctionScheduledEventDetails
+    , lambdaFunctionScheduledEventDetails
+    , lfsedInput
+    , lfsedTimeoutInSeconds
+    , lfsedResource
+
+    -- * LambdaFunctionStartFailedEventDetails
+    , LambdaFunctionStartFailedEventDetails
+    , lambdaFunctionStartFailedEventDetails
+    , lfsfedError
+    , lfsfedCause
+
+    -- * LambdaFunctionSucceededEventDetails
+    , LambdaFunctionSucceededEventDetails
+    , lambdaFunctionSucceededEventDetails
+    , lfsedOutput
+
+    -- * LambdaFunctionTimedOutEventDetails
+    , LambdaFunctionTimedOutEventDetails
+    , lambdaFunctionTimedOutEventDetails
+    , lftoedError
+    , lftoedCause
+
+    -- * StateEnteredEventDetails
+    , StateEnteredEventDetails
+    , stateEnteredEventDetails
+    , sInput
+    , sName
+
+    -- * StateExitedEventDetails
+    , StateExitedEventDetails
+    , stateExitedEventDetails
+    , seedOutput
+    , seedName
+
+    -- * StateMachineListItem
+    , StateMachineListItem
+    , stateMachineListItem
+    , smliStateMachineARN
+    , smliName
+    , smliCreationDate
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
+import           Network.AWS.StepFunctions.Types.Product
+import           Network.AWS.StepFunctions.Types.Sum
+
+-- | API version @2016-11-23@ of the Amazon Step Functions SDK configuration.
+stepFunctions :: Service
+stepFunctions =
+    Service
+    { _svcAbbrev = "StepFunctions"
+    , _svcSigner = v4
+    , _svcPrefix = "states"
+    , _svcVersion = "2016-11-23"
+    , _svcEndpoint = defaultEndpoint stepFunctions
+    , _svcTimeout = Just 70
+    , _svcCheck = statusSuccess
+    , _svcError = parseJSONError "StepFunctions"
+    , _svcRetry = retry
+    }
+  where
+    retry =
+        Exponential
+        { _retryBase = 5.0e-2
+        , _retryGrowth = 2
+        , _retryAttempts = 5
+        , _retryCheck = check
+        }
+    check e
+      | has (hasStatus 429) e = Just "too_many_requests"
+      | has (hasCode "ThrottlingException" . hasStatus 400) e =
+          Just "throttling_exception"
+      | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+      | has (hasStatus 504) e = Just "gateway_timeout"
+      | has (hasStatus 502) e = Just "bad_gateway"
+      | has (hasStatus 503) e = Just "service_unavailable"
+      | has (hasStatus 500) e = Just "general_server_error"
+      | has (hasStatus 509) e = Just "limit_exceeded"
+      | otherwise = Nothing
+
+-- | The maximum number of running executions has been reached. Running executions must end or be stopped before a new execution can be started.
+--
+--
+_ExecutionLimitExceeded :: AsError a => Getting (First ServiceError) a ServiceError
+_ExecutionLimitExceeded = _ServiceError . hasCode "ExecutionLimitExceeded"
+
+-- | The provided Amazon States Language definition is invalid.
+--
+--
+_InvalidDefinition :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidDefinition = _ServiceError . hasCode "InvalidDefinition"
+
+-- | The maximum number of state machines has been reached. Existing state machines must be deleted before a new state machine can be created.
+--
+--
+_StateMachineLimitExceeded :: AsError a => Getting (First ServiceError) a ServiceError
+_StateMachineLimitExceeded =
+    _ServiceError . hasCode "StateMachineLimitExceeded"
+
+-- | An execution with the same name already exists.
+--
+--
+_ExecutionAlreadyExists :: AsError a => Getting (First ServiceError) a ServiceError
+_ExecutionAlreadyExists = _ServiceError . hasCode "ExecutionAlreadyExists"
+
+-- | A state machine with the same name but a different definition or role ARN already exists.
+--
+--
+_StateMachineAlreadyExists :: AsError a => Getting (First ServiceError) a ServiceError
+_StateMachineAlreadyExists =
+    _ServiceError . hasCode "StateMachineAlreadyExists"
+
+-- | Prism for TaskTimedOut' errors.
+_TaskTimedOut :: AsError a => Getting (First ServiceError) a ServiceError
+_TaskTimedOut = _ServiceError . hasCode "TaskTimedOut"
+
+-- | The provided JSON input data is invalid.
+--
+--
+_InvalidExecutionInput :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidExecutionInput = _ServiceError . hasCode "InvalidExecutionInput"
+
+-- | The provided JSON output data is invalid.
+--
+--
+_InvalidOutput :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidOutput = _ServiceError . hasCode "InvalidOutput"
+
+-- | The provided name is invalid.
+--
+--
+_InvalidName :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidName = _ServiceError . hasCode "InvalidName"
+
+-- | Prism for TaskDoesNotExist' errors.
+_TaskDoesNotExist :: AsError a => Getting (First ServiceError) a ServiceError
+_TaskDoesNotExist = _ServiceError . hasCode "TaskDoesNotExist"
+
+-- | The specified activity does not exist.
+--
+--
+_ActivityDoesNotExist :: AsError a => Getting (First ServiceError) a ServiceError
+_ActivityDoesNotExist = _ServiceError . hasCode "ActivityDoesNotExist"
+
+-- | The specified state machine is being deleted.
+--
+--
+_StateMachineDeleting :: AsError a => Getting (First ServiceError) a ServiceError
+_StateMachineDeleting = _ServiceError . hasCode "StateMachineDeleting"
+
+-- | The provided Amazon Resource Name (ARN) is invalid.
+--
+--
+_InvalidARN :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidARN = _ServiceError . hasCode "InvalidArn"
+
+-- | The provided token is invalid.
+--
+--
+_InvalidToken :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidToken = _ServiceError . hasCode "InvalidToken"
+
+-- | The maximum number of workers concurrently polling for activity tasks has been reached.
+--
+--
+_ActivityWorkerLimitExceeded :: AsError a => Getting (First ServiceError) a ServiceError
+_ActivityWorkerLimitExceeded =
+    _ServiceError . hasCode "ActivityWorkerLimitExceeded"
+
+-- | The maximum number of activities has been reached. Existing activities must be deleted before a new activity can be created.
+--
+--
+_ActivityLimitExceeded :: AsError a => Getting (First ServiceError) a ServiceError
+_ActivityLimitExceeded = _ServiceError . hasCode "ActivityLimitExceeded"
+
+-- | The specified execution does not exist.
+--
+--
+_ExecutionDoesNotExist :: AsError a => Getting (First ServiceError) a ServiceError
+_ExecutionDoesNotExist = _ServiceError . hasCode "ExecutionDoesNotExist"
+
+-- | The specified state machine does not exist.
+--
+--
+_StateMachineDoesNotExist :: AsError a => Getting (First ServiceError) a ServiceError
+_StateMachineDoesNotExist = _ServiceError . hasCode "StateMachineDoesNotExist"
diff --git a/gen/Network/AWS/StepFunctions/Types/Product.hs b/gen/Network/AWS/StepFunctions/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/Types/Product.hs
@@ -0,0 +1,1210 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.Types.Product
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.StepFunctions.Types.Product where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.StepFunctions.Types.Sum
+
+-- | /See:/ 'activityFailedEventDetails' smart constructor.
+data ActivityFailedEventDetails = ActivityFailedEventDetails'
+    { _afedError :: !(Maybe Text)
+    , _afedCause :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActivityFailedEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'afedError' - The error code of the failure.
+--
+-- * 'afedCause' - A more detailed explanation of the cause of the failure.
+activityFailedEventDetails
+    :: ActivityFailedEventDetails
+activityFailedEventDetails =
+    ActivityFailedEventDetails'
+    { _afedError = Nothing
+    , _afedCause = Nothing
+    }
+
+-- | The error code of the failure.
+afedError :: Lens' ActivityFailedEventDetails (Maybe Text)
+afedError = lens _afedError (\ s a -> s{_afedError = a});
+
+-- | A more detailed explanation of the cause of the failure.
+afedCause :: Lens' ActivityFailedEventDetails (Maybe Text)
+afedCause = lens _afedCause (\ s a -> s{_afedCause = a});
+
+instance FromJSON ActivityFailedEventDetails where
+        parseJSON
+          = withObject "ActivityFailedEventDetails"
+              (\ x ->
+                 ActivityFailedEventDetails' <$>
+                   (x .:? "error") <*> (x .:? "cause"))
+
+instance Hashable ActivityFailedEventDetails
+
+instance NFData ActivityFailedEventDetails
+
+-- | /See:/ 'activityListItem' smart constructor.
+data ActivityListItem = ActivityListItem'
+    { _aliActivityARN  :: !Text
+    , _aliName         :: !Text
+    , _aliCreationDate :: !POSIX
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActivityListItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aliActivityARN' - The Amazon Resource Name (ARN) that identifies the activity.
+--
+-- * 'aliName' - The name of the activity.
+--
+-- * 'aliCreationDate' - The date the activity was created.
+activityListItem
+    :: Text -- ^ 'aliActivityARN'
+    -> Text -- ^ 'aliName'
+    -> UTCTime -- ^ 'aliCreationDate'
+    -> ActivityListItem
+activityListItem pActivityARN_ pName_ pCreationDate_ =
+    ActivityListItem'
+    { _aliActivityARN = pActivityARN_
+    , _aliName = pName_
+    , _aliCreationDate = _Time # pCreationDate_
+    }
+
+-- | The Amazon Resource Name (ARN) that identifies the activity.
+aliActivityARN :: Lens' ActivityListItem Text
+aliActivityARN = lens _aliActivityARN (\ s a -> s{_aliActivityARN = a});
+
+-- | The name of the activity.
+aliName :: Lens' ActivityListItem Text
+aliName = lens _aliName (\ s a -> s{_aliName = a});
+
+-- | The date the activity was created.
+aliCreationDate :: Lens' ActivityListItem UTCTime
+aliCreationDate = lens _aliCreationDate (\ s a -> s{_aliCreationDate = a}) . _Time;
+
+instance FromJSON ActivityListItem where
+        parseJSON
+          = withObject "ActivityListItem"
+              (\ x ->
+                 ActivityListItem' <$>
+                   (x .: "activityArn") <*> (x .: "name") <*>
+                     (x .: "creationDate"))
+
+instance Hashable ActivityListItem
+
+instance NFData ActivityListItem
+
+-- | /See:/ 'activityScheduleFailedEventDetails' smart constructor.
+data ActivityScheduleFailedEventDetails = ActivityScheduleFailedEventDetails'
+    { _asfedError :: !(Maybe Text)
+    , _asfedCause :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActivityScheduleFailedEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asfedError' - The error code of the failure.
+--
+-- * 'asfedCause' - A more detailed explanation of the cause of the failure.
+activityScheduleFailedEventDetails
+    :: ActivityScheduleFailedEventDetails
+activityScheduleFailedEventDetails =
+    ActivityScheduleFailedEventDetails'
+    { _asfedError = Nothing
+    , _asfedCause = Nothing
+    }
+
+-- | The error code of the failure.
+asfedError :: Lens' ActivityScheduleFailedEventDetails (Maybe Text)
+asfedError = lens _asfedError (\ s a -> s{_asfedError = a});
+
+-- | A more detailed explanation of the cause of the failure.
+asfedCause :: Lens' ActivityScheduleFailedEventDetails (Maybe Text)
+asfedCause = lens _asfedCause (\ s a -> s{_asfedCause = a});
+
+instance FromJSON ActivityScheduleFailedEventDetails
+         where
+        parseJSON
+          = withObject "ActivityScheduleFailedEventDetails"
+              (\ x ->
+                 ActivityScheduleFailedEventDetails' <$>
+                   (x .:? "error") <*> (x .:? "cause"))
+
+instance Hashable ActivityScheduleFailedEventDetails
+
+instance NFData ActivityScheduleFailedEventDetails
+
+-- | /See:/ 'activityScheduledEventDetails' smart constructor.
+data ActivityScheduledEventDetails = ActivityScheduledEventDetails'
+    { _asedHeartbeatInSeconds :: !(Maybe Integer)
+    , _asedInput              :: !(Maybe Text)
+    , _asedTimeoutInSeconds   :: !(Maybe Integer)
+    , _asedResource           :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActivityScheduledEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asedHeartbeatInSeconds' - The maximum allowed duration between two heartbeats for the activity task.
+--
+-- * 'asedInput' - The JSON data input to the activity task.
+--
+-- * 'asedTimeoutInSeconds' - The maximum allowed duration of the activity task.
+--
+-- * 'asedResource' - The Amazon Resource Name (ARN) of the scheduled activity.
+activityScheduledEventDetails
+    :: Text -- ^ 'asedResource'
+    -> ActivityScheduledEventDetails
+activityScheduledEventDetails pResource_ =
+    ActivityScheduledEventDetails'
+    { _asedHeartbeatInSeconds = Nothing
+    , _asedInput = Nothing
+    , _asedTimeoutInSeconds = Nothing
+    , _asedResource = pResource_
+    }
+
+-- | The maximum allowed duration between two heartbeats for the activity task.
+asedHeartbeatInSeconds :: Lens' ActivityScheduledEventDetails (Maybe Integer)
+asedHeartbeatInSeconds = lens _asedHeartbeatInSeconds (\ s a -> s{_asedHeartbeatInSeconds = a});
+
+-- | The JSON data input to the activity task.
+asedInput :: Lens' ActivityScheduledEventDetails (Maybe Text)
+asedInput = lens _asedInput (\ s a -> s{_asedInput = a});
+
+-- | The maximum allowed duration of the activity task.
+asedTimeoutInSeconds :: Lens' ActivityScheduledEventDetails (Maybe Integer)
+asedTimeoutInSeconds = lens _asedTimeoutInSeconds (\ s a -> s{_asedTimeoutInSeconds = a});
+
+-- | The Amazon Resource Name (ARN) of the scheduled activity.
+asedResource :: Lens' ActivityScheduledEventDetails Text
+asedResource = lens _asedResource (\ s a -> s{_asedResource = a});
+
+instance FromJSON ActivityScheduledEventDetails where
+        parseJSON
+          = withObject "ActivityScheduledEventDetails"
+              (\ x ->
+                 ActivityScheduledEventDetails' <$>
+                   (x .:? "heartbeatInSeconds") <*> (x .:? "input") <*>
+                     (x .:? "timeoutInSeconds")
+                     <*> (x .: "resource"))
+
+instance Hashable ActivityScheduledEventDetails
+
+instance NFData ActivityScheduledEventDetails
+
+-- | /See:/ 'activityStartedEventDetails' smart constructor.
+newtype ActivityStartedEventDetails = ActivityStartedEventDetails'
+    { _asedWorkerName :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActivityStartedEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asedWorkerName' - The name of the worker that the task was assigned to. These names are provided by the workers when calling 'GetActivityTask' .
+activityStartedEventDetails
+    :: ActivityStartedEventDetails
+activityStartedEventDetails =
+    ActivityStartedEventDetails'
+    { _asedWorkerName = Nothing
+    }
+
+-- | The name of the worker that the task was assigned to. These names are provided by the workers when calling 'GetActivityTask' .
+asedWorkerName :: Lens' ActivityStartedEventDetails (Maybe Text)
+asedWorkerName = lens _asedWorkerName (\ s a -> s{_asedWorkerName = a});
+
+instance FromJSON ActivityStartedEventDetails where
+        parseJSON
+          = withObject "ActivityStartedEventDetails"
+              (\ x ->
+                 ActivityStartedEventDetails' <$>
+                   (x .:? "workerName"))
+
+instance Hashable ActivityStartedEventDetails
+
+instance NFData ActivityStartedEventDetails
+
+-- | /See:/ 'activitySucceededEventDetails' smart constructor.
+newtype ActivitySucceededEventDetails = ActivitySucceededEventDetails'
+    { _asedOutput :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActivitySucceededEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asedOutput' - The JSON data output by the activity task.
+activitySucceededEventDetails
+    :: ActivitySucceededEventDetails
+activitySucceededEventDetails =
+    ActivitySucceededEventDetails'
+    { _asedOutput = Nothing
+    }
+
+-- | The JSON data output by the activity task.
+asedOutput :: Lens' ActivitySucceededEventDetails (Maybe Text)
+asedOutput = lens _asedOutput (\ s a -> s{_asedOutput = a});
+
+instance FromJSON ActivitySucceededEventDetails where
+        parseJSON
+          = withObject "ActivitySucceededEventDetails"
+              (\ x ->
+                 ActivitySucceededEventDetails' <$> (x .:? "output"))
+
+instance Hashable ActivitySucceededEventDetails
+
+instance NFData ActivitySucceededEventDetails
+
+-- | /See:/ 'activityTimedOutEventDetails' smart constructor.
+data ActivityTimedOutEventDetails = ActivityTimedOutEventDetails'
+    { _atoedError :: !(Maybe Text)
+    , _atoedCause :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActivityTimedOutEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'atoedError' - The error code of the failure.
+--
+-- * 'atoedCause' - A more detailed explanation of the cause of the timeout.
+activityTimedOutEventDetails
+    :: ActivityTimedOutEventDetails
+activityTimedOutEventDetails =
+    ActivityTimedOutEventDetails'
+    { _atoedError = Nothing
+    , _atoedCause = Nothing
+    }
+
+-- | The error code of the failure.
+atoedError :: Lens' ActivityTimedOutEventDetails (Maybe Text)
+atoedError = lens _atoedError (\ s a -> s{_atoedError = a});
+
+-- | A more detailed explanation of the cause of the timeout.
+atoedCause :: Lens' ActivityTimedOutEventDetails (Maybe Text)
+atoedCause = lens _atoedCause (\ s a -> s{_atoedCause = a});
+
+instance FromJSON ActivityTimedOutEventDetails where
+        parseJSON
+          = withObject "ActivityTimedOutEventDetails"
+              (\ x ->
+                 ActivityTimedOutEventDetails' <$>
+                   (x .:? "error") <*> (x .:? "cause"))
+
+instance Hashable ActivityTimedOutEventDetails
+
+instance NFData ActivityTimedOutEventDetails
+
+-- | /See:/ 'executionAbortedEventDetails' smart constructor.
+data ExecutionAbortedEventDetails = ExecutionAbortedEventDetails'
+    { _eaedError :: !(Maybe Text)
+    , _eaedCause :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExecutionAbortedEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eaedError' - The error code of the failure.
+--
+-- * 'eaedCause' - A more detailed explanation of the cause of the failure.
+executionAbortedEventDetails
+    :: ExecutionAbortedEventDetails
+executionAbortedEventDetails =
+    ExecutionAbortedEventDetails'
+    { _eaedError = Nothing
+    , _eaedCause = Nothing
+    }
+
+-- | The error code of the failure.
+eaedError :: Lens' ExecutionAbortedEventDetails (Maybe Text)
+eaedError = lens _eaedError (\ s a -> s{_eaedError = a});
+
+-- | A more detailed explanation of the cause of the failure.
+eaedCause :: Lens' ExecutionAbortedEventDetails (Maybe Text)
+eaedCause = lens _eaedCause (\ s a -> s{_eaedCause = a});
+
+instance FromJSON ExecutionAbortedEventDetails where
+        parseJSON
+          = withObject "ExecutionAbortedEventDetails"
+              (\ x ->
+                 ExecutionAbortedEventDetails' <$>
+                   (x .:? "error") <*> (x .:? "cause"))
+
+instance Hashable ExecutionAbortedEventDetails
+
+instance NFData ExecutionAbortedEventDetails
+
+-- | /See:/ 'executionFailedEventDetails' smart constructor.
+data ExecutionFailedEventDetails = ExecutionFailedEventDetails'
+    { _efedError :: !(Maybe Text)
+    , _efedCause :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExecutionFailedEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'efedError' - The error code of the failure.
+--
+-- * 'efedCause' - A more detailed explanation of the cause of the failure.
+executionFailedEventDetails
+    :: ExecutionFailedEventDetails
+executionFailedEventDetails =
+    ExecutionFailedEventDetails'
+    { _efedError = Nothing
+    , _efedCause = Nothing
+    }
+
+-- | The error code of the failure.
+efedError :: Lens' ExecutionFailedEventDetails (Maybe Text)
+efedError = lens _efedError (\ s a -> s{_efedError = a});
+
+-- | A more detailed explanation of the cause of the failure.
+efedCause :: Lens' ExecutionFailedEventDetails (Maybe Text)
+efedCause = lens _efedCause (\ s a -> s{_efedCause = a});
+
+instance FromJSON ExecutionFailedEventDetails where
+        parseJSON
+          = withObject "ExecutionFailedEventDetails"
+              (\ x ->
+                 ExecutionFailedEventDetails' <$>
+                   (x .:? "error") <*> (x .:? "cause"))
+
+instance Hashable ExecutionFailedEventDetails
+
+instance NFData ExecutionFailedEventDetails
+
+-- | /See:/ 'executionListItem' smart constructor.
+data ExecutionListItem = ExecutionListItem'
+    { _eliStopDate        :: !(Maybe POSIX)
+    , _eliExecutionARN    :: !Text
+    , _eliStateMachineARN :: !Text
+    , _eliName            :: !Text
+    , _eliStatus          :: !ExecutionStatus
+    , _eliStartDate       :: !POSIX
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExecutionListItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eliStopDate' - If the execution already ended, the date the execution stopped.
+--
+-- * 'eliExecutionARN' - The Amazon Resource Name (ARN) that identifies the execution.
+--
+-- * 'eliStateMachineARN' - The Amazon Resource Name (ARN) of the executed state machine.
+--
+-- * 'eliName' - The name of the execution.
+--
+-- * 'eliStatus' - The current status of the execution.
+--
+-- * 'eliStartDate' - The date the execution started.
+executionListItem
+    :: Text -- ^ 'eliExecutionARN'
+    -> Text -- ^ 'eliStateMachineARN'
+    -> Text -- ^ 'eliName'
+    -> ExecutionStatus -- ^ 'eliStatus'
+    -> UTCTime -- ^ 'eliStartDate'
+    -> ExecutionListItem
+executionListItem pExecutionARN_ pStateMachineARN_ pName_ pStatus_ pStartDate_ =
+    ExecutionListItem'
+    { _eliStopDate = Nothing
+    , _eliExecutionARN = pExecutionARN_
+    , _eliStateMachineARN = pStateMachineARN_
+    , _eliName = pName_
+    , _eliStatus = pStatus_
+    , _eliStartDate = _Time # pStartDate_
+    }
+
+-- | If the execution already ended, the date the execution stopped.
+eliStopDate :: Lens' ExecutionListItem (Maybe UTCTime)
+eliStopDate = lens _eliStopDate (\ s a -> s{_eliStopDate = a}) . mapping _Time;
+
+-- | The Amazon Resource Name (ARN) that identifies the execution.
+eliExecutionARN :: Lens' ExecutionListItem Text
+eliExecutionARN = lens _eliExecutionARN (\ s a -> s{_eliExecutionARN = a});
+
+-- | The Amazon Resource Name (ARN) of the executed state machine.
+eliStateMachineARN :: Lens' ExecutionListItem Text
+eliStateMachineARN = lens _eliStateMachineARN (\ s a -> s{_eliStateMachineARN = a});
+
+-- | The name of the execution.
+eliName :: Lens' ExecutionListItem Text
+eliName = lens _eliName (\ s a -> s{_eliName = a});
+
+-- | The current status of the execution.
+eliStatus :: Lens' ExecutionListItem ExecutionStatus
+eliStatus = lens _eliStatus (\ s a -> s{_eliStatus = a});
+
+-- | The date the execution started.
+eliStartDate :: Lens' ExecutionListItem UTCTime
+eliStartDate = lens _eliStartDate (\ s a -> s{_eliStartDate = a}) . _Time;
+
+instance FromJSON ExecutionListItem where
+        parseJSON
+          = withObject "ExecutionListItem"
+              (\ x ->
+                 ExecutionListItem' <$>
+                   (x .:? "stopDate") <*> (x .: "executionArn") <*>
+                     (x .: "stateMachineArn")
+                     <*> (x .: "name")
+                     <*> (x .: "status")
+                     <*> (x .: "startDate"))
+
+instance Hashable ExecutionListItem
+
+instance NFData ExecutionListItem
+
+-- | /See:/ 'executionStartedEventDetails' smart constructor.
+data ExecutionStartedEventDetails = ExecutionStartedEventDetails'
+    { _esedInput   :: !(Maybe Text)
+    , _esedRoleARN :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExecutionStartedEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'esedInput' - The JSON data input to the execution.
+--
+-- * 'esedRoleARN' - The Amazon Resource Name (ARN) of the IAM role used for executing AWS Lambda tasks.
+executionStartedEventDetails
+    :: ExecutionStartedEventDetails
+executionStartedEventDetails =
+    ExecutionStartedEventDetails'
+    { _esedInput = Nothing
+    , _esedRoleARN = Nothing
+    }
+
+-- | The JSON data input to the execution.
+esedInput :: Lens' ExecutionStartedEventDetails (Maybe Text)
+esedInput = lens _esedInput (\ s a -> s{_esedInput = a});
+
+-- | The Amazon Resource Name (ARN) of the IAM role used for executing AWS Lambda tasks.
+esedRoleARN :: Lens' ExecutionStartedEventDetails (Maybe Text)
+esedRoleARN = lens _esedRoleARN (\ s a -> s{_esedRoleARN = a});
+
+instance FromJSON ExecutionStartedEventDetails where
+        parseJSON
+          = withObject "ExecutionStartedEventDetails"
+              (\ x ->
+                 ExecutionStartedEventDetails' <$>
+                   (x .:? "input") <*> (x .:? "roleArn"))
+
+instance Hashable ExecutionStartedEventDetails
+
+instance NFData ExecutionStartedEventDetails
+
+-- | /See:/ 'executionSucceededEventDetails' smart constructor.
+newtype ExecutionSucceededEventDetails = ExecutionSucceededEventDetails'
+    { _esedOutput :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExecutionSucceededEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'esedOutput' - The JSON data output by the execution.
+executionSucceededEventDetails
+    :: ExecutionSucceededEventDetails
+executionSucceededEventDetails =
+    ExecutionSucceededEventDetails'
+    { _esedOutput = Nothing
+    }
+
+-- | The JSON data output by the execution.
+esedOutput :: Lens' ExecutionSucceededEventDetails (Maybe Text)
+esedOutput = lens _esedOutput (\ s a -> s{_esedOutput = a});
+
+instance FromJSON ExecutionSucceededEventDetails
+         where
+        parseJSON
+          = withObject "ExecutionSucceededEventDetails"
+              (\ x ->
+                 ExecutionSucceededEventDetails' <$> (x .:? "output"))
+
+instance Hashable ExecutionSucceededEventDetails
+
+instance NFData ExecutionSucceededEventDetails
+
+-- | /See:/ 'executionTimedOutEventDetails' smart constructor.
+data ExecutionTimedOutEventDetails = ExecutionTimedOutEventDetails'
+    { _etoedError :: !(Maybe Text)
+    , _etoedCause :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExecutionTimedOutEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'etoedError' - The error code of the failure.
+--
+-- * 'etoedCause' - A more detailed explanation of the cause of the timeout.
+executionTimedOutEventDetails
+    :: ExecutionTimedOutEventDetails
+executionTimedOutEventDetails =
+    ExecutionTimedOutEventDetails'
+    { _etoedError = Nothing
+    , _etoedCause = Nothing
+    }
+
+-- | The error code of the failure.
+etoedError :: Lens' ExecutionTimedOutEventDetails (Maybe Text)
+etoedError = lens _etoedError (\ s a -> s{_etoedError = a});
+
+-- | A more detailed explanation of the cause of the timeout.
+etoedCause :: Lens' ExecutionTimedOutEventDetails (Maybe Text)
+etoedCause = lens _etoedCause (\ s a -> s{_etoedCause = a});
+
+instance FromJSON ExecutionTimedOutEventDetails where
+        parseJSON
+          = withObject "ExecutionTimedOutEventDetails"
+              (\ x ->
+                 ExecutionTimedOutEventDetails' <$>
+                   (x .:? "error") <*> (x .:? "cause"))
+
+instance Hashable ExecutionTimedOutEventDetails
+
+instance NFData ExecutionTimedOutEventDetails
+
+-- | /See:/ 'historyEvent' smart constructor.
+data HistoryEvent = HistoryEvent'
+    { _heActivityStartedEventDetails              :: !(Maybe ActivityStartedEventDetails)
+    , _heLambdaFunctionStartFailedEventDetails    :: !(Maybe LambdaFunctionStartFailedEventDetails)
+    , _heStateExitedEventDetails                  :: !(Maybe StateExitedEventDetails)
+    , _heLambdaFunctionSucceededEventDetails      :: !(Maybe LambdaFunctionSucceededEventDetails)
+    , _heActivitySucceededEventDetails            :: !(Maybe ActivitySucceededEventDetails)
+    , _heLambdaFunctionTimedOutEventDetails       :: !(Maybe LambdaFunctionTimedOutEventDetails)
+    , _heActivityTimedOutEventDetails             :: !(Maybe ActivityTimedOutEventDetails)
+    , _heExecutionFailedEventDetails              :: !(Maybe ExecutionFailedEventDetails)
+    , _heExecutionAbortedEventDetails             :: !(Maybe ExecutionAbortedEventDetails)
+    , _heExecutionSucceededEventDetails           :: !(Maybe ExecutionSucceededEventDetails)
+    , _heLambdaFunctionScheduledEventDetails      :: !(Maybe LambdaFunctionScheduledEventDetails)
+    , _heActivityScheduledEventDetails            :: !(Maybe ActivityScheduledEventDetails)
+    , _heExecutionStartedEventDetails             :: !(Maybe ExecutionStartedEventDetails)
+    , _heActivityScheduleFailedEventDetails       :: !(Maybe ActivityScheduleFailedEventDetails)
+    , _heLambdaFunctionScheduleFailedEventDetails :: !(Maybe LambdaFunctionScheduleFailedEventDetails)
+    , _heStateEnteredEventDetails                 :: !(Maybe StateEnteredEventDetails)
+    , _hePreviousEventId                          :: !(Maybe Integer)
+    , _heActivityFailedEventDetails               :: !(Maybe ActivityFailedEventDetails)
+    , _heLambdaFunctionFailedEventDetails         :: !(Maybe LambdaFunctionFailedEventDetails)
+    , _heExecutionTimedOutEventDetails            :: !(Maybe ExecutionTimedOutEventDetails)
+    , _heTimestamp                                :: !POSIX
+    , _heType                                     :: !HistoryEventType
+    , _heId                                       :: !Integer
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HistoryEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'heActivityStartedEventDetails' - Undocumented member.
+--
+-- * 'heLambdaFunctionStartFailedEventDetails' - Undocumented member.
+--
+-- * 'heStateExitedEventDetails' - Undocumented member.
+--
+-- * 'heLambdaFunctionSucceededEventDetails' - Undocumented member.
+--
+-- * 'heActivitySucceededEventDetails' - Undocumented member.
+--
+-- * 'heLambdaFunctionTimedOutEventDetails' - Undocumented member.
+--
+-- * 'heActivityTimedOutEventDetails' - Undocumented member.
+--
+-- * 'heExecutionFailedEventDetails' - Undocumented member.
+--
+-- * 'heExecutionAbortedEventDetails' - Undocumented member.
+--
+-- * 'heExecutionSucceededEventDetails' - Undocumented member.
+--
+-- * 'heLambdaFunctionScheduledEventDetails' - Undocumented member.
+--
+-- * 'heActivityScheduledEventDetails' - Undocumented member.
+--
+-- * 'heExecutionStartedEventDetails' - Undocumented member.
+--
+-- * 'heActivityScheduleFailedEventDetails' - Undocumented member.
+--
+-- * 'heLambdaFunctionScheduleFailedEventDetails' - Undocumented member.
+--
+-- * 'heStateEnteredEventDetails' - Undocumented member.
+--
+-- * 'hePreviousEventId' - The id of the previous event.
+--
+-- * 'heActivityFailedEventDetails' - Undocumented member.
+--
+-- * 'heLambdaFunctionFailedEventDetails' - Undocumented member.
+--
+-- * 'heExecutionTimedOutEventDetails' - Undocumented member.
+--
+-- * 'heTimestamp' - The date the event occured.
+--
+-- * 'heType' - The type of the event.
+--
+-- * 'heId' - The id of the event. Events are numbered sequentially, starting at one.
+historyEvent
+    :: UTCTime -- ^ 'heTimestamp'
+    -> HistoryEventType -- ^ 'heType'
+    -> Integer -- ^ 'heId'
+    -> HistoryEvent
+historyEvent pTimestamp_ pType_ pId_ =
+    HistoryEvent'
+    { _heActivityStartedEventDetails = Nothing
+    , _heLambdaFunctionStartFailedEventDetails = Nothing
+    , _heStateExitedEventDetails = Nothing
+    , _heLambdaFunctionSucceededEventDetails = Nothing
+    , _heActivitySucceededEventDetails = Nothing
+    , _heLambdaFunctionTimedOutEventDetails = Nothing
+    , _heActivityTimedOutEventDetails = Nothing
+    , _heExecutionFailedEventDetails = Nothing
+    , _heExecutionAbortedEventDetails = Nothing
+    , _heExecutionSucceededEventDetails = Nothing
+    , _heLambdaFunctionScheduledEventDetails = Nothing
+    , _heActivityScheduledEventDetails = Nothing
+    , _heExecutionStartedEventDetails = Nothing
+    , _heActivityScheduleFailedEventDetails = Nothing
+    , _heLambdaFunctionScheduleFailedEventDetails = Nothing
+    , _heStateEnteredEventDetails = Nothing
+    , _hePreviousEventId = Nothing
+    , _heActivityFailedEventDetails = Nothing
+    , _heLambdaFunctionFailedEventDetails = Nothing
+    , _heExecutionTimedOutEventDetails = Nothing
+    , _heTimestamp = _Time # pTimestamp_
+    , _heType = pType_
+    , _heId = pId_
+    }
+
+-- | Undocumented member.
+heActivityStartedEventDetails :: Lens' HistoryEvent (Maybe ActivityStartedEventDetails)
+heActivityStartedEventDetails = lens _heActivityStartedEventDetails (\ s a -> s{_heActivityStartedEventDetails = a});
+
+-- | Undocumented member.
+heLambdaFunctionStartFailedEventDetails :: Lens' HistoryEvent (Maybe LambdaFunctionStartFailedEventDetails)
+heLambdaFunctionStartFailedEventDetails = lens _heLambdaFunctionStartFailedEventDetails (\ s a -> s{_heLambdaFunctionStartFailedEventDetails = a});
+
+-- | Undocumented member.
+heStateExitedEventDetails :: Lens' HistoryEvent (Maybe StateExitedEventDetails)
+heStateExitedEventDetails = lens _heStateExitedEventDetails (\ s a -> s{_heStateExitedEventDetails = a});
+
+-- | Undocumented member.
+heLambdaFunctionSucceededEventDetails :: Lens' HistoryEvent (Maybe LambdaFunctionSucceededEventDetails)
+heLambdaFunctionSucceededEventDetails = lens _heLambdaFunctionSucceededEventDetails (\ s a -> s{_heLambdaFunctionSucceededEventDetails = a});
+
+-- | Undocumented member.
+heActivitySucceededEventDetails :: Lens' HistoryEvent (Maybe ActivitySucceededEventDetails)
+heActivitySucceededEventDetails = lens _heActivitySucceededEventDetails (\ s a -> s{_heActivitySucceededEventDetails = a});
+
+-- | Undocumented member.
+heLambdaFunctionTimedOutEventDetails :: Lens' HistoryEvent (Maybe LambdaFunctionTimedOutEventDetails)
+heLambdaFunctionTimedOutEventDetails = lens _heLambdaFunctionTimedOutEventDetails (\ s a -> s{_heLambdaFunctionTimedOutEventDetails = a});
+
+-- | Undocumented member.
+heActivityTimedOutEventDetails :: Lens' HistoryEvent (Maybe ActivityTimedOutEventDetails)
+heActivityTimedOutEventDetails = lens _heActivityTimedOutEventDetails (\ s a -> s{_heActivityTimedOutEventDetails = a});
+
+-- | Undocumented member.
+heExecutionFailedEventDetails :: Lens' HistoryEvent (Maybe ExecutionFailedEventDetails)
+heExecutionFailedEventDetails = lens _heExecutionFailedEventDetails (\ s a -> s{_heExecutionFailedEventDetails = a});
+
+-- | Undocumented member.
+heExecutionAbortedEventDetails :: Lens' HistoryEvent (Maybe ExecutionAbortedEventDetails)
+heExecutionAbortedEventDetails = lens _heExecutionAbortedEventDetails (\ s a -> s{_heExecutionAbortedEventDetails = a});
+
+-- | Undocumented member.
+heExecutionSucceededEventDetails :: Lens' HistoryEvent (Maybe ExecutionSucceededEventDetails)
+heExecutionSucceededEventDetails = lens _heExecutionSucceededEventDetails (\ s a -> s{_heExecutionSucceededEventDetails = a});
+
+-- | Undocumented member.
+heLambdaFunctionScheduledEventDetails :: Lens' HistoryEvent (Maybe LambdaFunctionScheduledEventDetails)
+heLambdaFunctionScheduledEventDetails = lens _heLambdaFunctionScheduledEventDetails (\ s a -> s{_heLambdaFunctionScheduledEventDetails = a});
+
+-- | Undocumented member.
+heActivityScheduledEventDetails :: Lens' HistoryEvent (Maybe ActivityScheduledEventDetails)
+heActivityScheduledEventDetails = lens _heActivityScheduledEventDetails (\ s a -> s{_heActivityScheduledEventDetails = a});
+
+-- | Undocumented member.
+heExecutionStartedEventDetails :: Lens' HistoryEvent (Maybe ExecutionStartedEventDetails)
+heExecutionStartedEventDetails = lens _heExecutionStartedEventDetails (\ s a -> s{_heExecutionStartedEventDetails = a});
+
+-- | Undocumented member.
+heActivityScheduleFailedEventDetails :: Lens' HistoryEvent (Maybe ActivityScheduleFailedEventDetails)
+heActivityScheduleFailedEventDetails = lens _heActivityScheduleFailedEventDetails (\ s a -> s{_heActivityScheduleFailedEventDetails = a});
+
+-- | Undocumented member.
+heLambdaFunctionScheduleFailedEventDetails :: Lens' HistoryEvent (Maybe LambdaFunctionScheduleFailedEventDetails)
+heLambdaFunctionScheduleFailedEventDetails = lens _heLambdaFunctionScheduleFailedEventDetails (\ s a -> s{_heLambdaFunctionScheduleFailedEventDetails = a});
+
+-- | Undocumented member.
+heStateEnteredEventDetails :: Lens' HistoryEvent (Maybe StateEnteredEventDetails)
+heStateEnteredEventDetails = lens _heStateEnteredEventDetails (\ s a -> s{_heStateEnteredEventDetails = a});
+
+-- | The id of the previous event.
+hePreviousEventId :: Lens' HistoryEvent (Maybe Integer)
+hePreviousEventId = lens _hePreviousEventId (\ s a -> s{_hePreviousEventId = a});
+
+-- | Undocumented member.
+heActivityFailedEventDetails :: Lens' HistoryEvent (Maybe ActivityFailedEventDetails)
+heActivityFailedEventDetails = lens _heActivityFailedEventDetails (\ s a -> s{_heActivityFailedEventDetails = a});
+
+-- | Undocumented member.
+heLambdaFunctionFailedEventDetails :: Lens' HistoryEvent (Maybe LambdaFunctionFailedEventDetails)
+heLambdaFunctionFailedEventDetails = lens _heLambdaFunctionFailedEventDetails (\ s a -> s{_heLambdaFunctionFailedEventDetails = a});
+
+-- | Undocumented member.
+heExecutionTimedOutEventDetails :: Lens' HistoryEvent (Maybe ExecutionTimedOutEventDetails)
+heExecutionTimedOutEventDetails = lens _heExecutionTimedOutEventDetails (\ s a -> s{_heExecutionTimedOutEventDetails = a});
+
+-- | The date the event occured.
+heTimestamp :: Lens' HistoryEvent UTCTime
+heTimestamp = lens _heTimestamp (\ s a -> s{_heTimestamp = a}) . _Time;
+
+-- | The type of the event.
+heType :: Lens' HistoryEvent HistoryEventType
+heType = lens _heType (\ s a -> s{_heType = a});
+
+-- | The id of the event. Events are numbered sequentially, starting at one.
+heId :: Lens' HistoryEvent Integer
+heId = lens _heId (\ s a -> s{_heId = a});
+
+instance FromJSON HistoryEvent where
+        parseJSON
+          = withObject "HistoryEvent"
+              (\ x ->
+                 HistoryEvent' <$>
+                   (x .:? "activityStartedEventDetails") <*>
+                     (x .:? "lambdaFunctionStartFailedEventDetails")
+                     <*> (x .:? "stateExitedEventDetails")
+                     <*> (x .:? "lambdaFunctionSucceededEventDetails")
+                     <*> (x .:? "activitySucceededEventDetails")
+                     <*> (x .:? "lambdaFunctionTimedOutEventDetails")
+                     <*> (x .:? "activityTimedOutEventDetails")
+                     <*> (x .:? "executionFailedEventDetails")
+                     <*> (x .:? "executionAbortedEventDetails")
+                     <*> (x .:? "executionSucceededEventDetails")
+                     <*> (x .:? "lambdaFunctionScheduledEventDetails")
+                     <*> (x .:? "activityScheduledEventDetails")
+                     <*> (x .:? "executionStartedEventDetails")
+                     <*> (x .:? "activityScheduleFailedEventDetails")
+                     <*>
+                     (x .:? "lambdaFunctionScheduleFailedEventDetails")
+                     <*> (x .:? "stateEnteredEventDetails")
+                     <*> (x .:? "previousEventId")
+                     <*> (x .:? "activityFailedEventDetails")
+                     <*> (x .:? "lambdaFunctionFailedEventDetails")
+                     <*> (x .:? "executionTimedOutEventDetails")
+                     <*> (x .: "timestamp")
+                     <*> (x .: "type")
+                     <*> (x .: "id"))
+
+instance Hashable HistoryEvent
+
+instance NFData HistoryEvent
+
+-- | /See:/ 'lambdaFunctionFailedEventDetails' smart constructor.
+data LambdaFunctionFailedEventDetails = LambdaFunctionFailedEventDetails'
+    { _lffedError :: !(Maybe Text)
+    , _lffedCause :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LambdaFunctionFailedEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lffedError' - The error code of the failure.
+--
+-- * 'lffedCause' - A more detailed explanation of the cause of the failure.
+lambdaFunctionFailedEventDetails
+    :: LambdaFunctionFailedEventDetails
+lambdaFunctionFailedEventDetails =
+    LambdaFunctionFailedEventDetails'
+    { _lffedError = Nothing
+    , _lffedCause = Nothing
+    }
+
+-- | The error code of the failure.
+lffedError :: Lens' LambdaFunctionFailedEventDetails (Maybe Text)
+lffedError = lens _lffedError (\ s a -> s{_lffedError = a});
+
+-- | A more detailed explanation of the cause of the failure.
+lffedCause :: Lens' LambdaFunctionFailedEventDetails (Maybe Text)
+lffedCause = lens _lffedCause (\ s a -> s{_lffedCause = a});
+
+instance FromJSON LambdaFunctionFailedEventDetails
+         where
+        parseJSON
+          = withObject "LambdaFunctionFailedEventDetails"
+              (\ x ->
+                 LambdaFunctionFailedEventDetails' <$>
+                   (x .:? "error") <*> (x .:? "cause"))
+
+instance Hashable LambdaFunctionFailedEventDetails
+
+instance NFData LambdaFunctionFailedEventDetails
+
+-- | /See:/ 'lambdaFunctionScheduleFailedEventDetails' smart constructor.
+data LambdaFunctionScheduleFailedEventDetails = LambdaFunctionScheduleFailedEventDetails'
+    { _lError :: !(Maybe Text)
+    , _lCause :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LambdaFunctionScheduleFailedEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lError' - The error code of the failure.
+--
+-- * 'lCause' - A more detailed explanation of the cause of the failure.
+lambdaFunctionScheduleFailedEventDetails
+    :: LambdaFunctionScheduleFailedEventDetails
+lambdaFunctionScheduleFailedEventDetails =
+    LambdaFunctionScheduleFailedEventDetails'
+    { _lError = Nothing
+    , _lCause = Nothing
+    }
+
+-- | The error code of the failure.
+lError :: Lens' LambdaFunctionScheduleFailedEventDetails (Maybe Text)
+lError = lens _lError (\ s a -> s{_lError = a});
+
+-- | A more detailed explanation of the cause of the failure.
+lCause :: Lens' LambdaFunctionScheduleFailedEventDetails (Maybe Text)
+lCause = lens _lCause (\ s a -> s{_lCause = a});
+
+instance FromJSON
+         LambdaFunctionScheduleFailedEventDetails where
+        parseJSON
+          = withObject
+              "LambdaFunctionScheduleFailedEventDetails"
+              (\ x ->
+                 LambdaFunctionScheduleFailedEventDetails' <$>
+                   (x .:? "error") <*> (x .:? "cause"))
+
+instance Hashable
+         LambdaFunctionScheduleFailedEventDetails
+
+instance NFData
+         LambdaFunctionScheduleFailedEventDetails
+
+-- | /See:/ 'lambdaFunctionScheduledEventDetails' smart constructor.
+data LambdaFunctionScheduledEventDetails = LambdaFunctionScheduledEventDetails'
+    { _lfsedInput            :: !(Maybe Text)
+    , _lfsedTimeoutInSeconds :: !(Maybe Integer)
+    , _lfsedResource         :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LambdaFunctionScheduledEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lfsedInput' - The JSON data input to the lambda function.
+--
+-- * 'lfsedTimeoutInSeconds' - The maximum allowed duration of the lambda function.
+--
+-- * 'lfsedResource' - The Amazon Resource Name (ARN) of the scheduled lambda function.
+lambdaFunctionScheduledEventDetails
+    :: Text -- ^ 'lfsedResource'
+    -> LambdaFunctionScheduledEventDetails
+lambdaFunctionScheduledEventDetails pResource_ =
+    LambdaFunctionScheduledEventDetails'
+    { _lfsedInput = Nothing
+    , _lfsedTimeoutInSeconds = Nothing
+    , _lfsedResource = pResource_
+    }
+
+-- | The JSON data input to the lambda function.
+lfsedInput :: Lens' LambdaFunctionScheduledEventDetails (Maybe Text)
+lfsedInput = lens _lfsedInput (\ s a -> s{_lfsedInput = a});
+
+-- | The maximum allowed duration of the lambda function.
+lfsedTimeoutInSeconds :: Lens' LambdaFunctionScheduledEventDetails (Maybe Integer)
+lfsedTimeoutInSeconds = lens _lfsedTimeoutInSeconds (\ s a -> s{_lfsedTimeoutInSeconds = a});
+
+-- | The Amazon Resource Name (ARN) of the scheduled lambda function.
+lfsedResource :: Lens' LambdaFunctionScheduledEventDetails Text
+lfsedResource = lens _lfsedResource (\ s a -> s{_lfsedResource = a});
+
+instance FromJSON LambdaFunctionScheduledEventDetails
+         where
+        parseJSON
+          = withObject "LambdaFunctionScheduledEventDetails"
+              (\ x ->
+                 LambdaFunctionScheduledEventDetails' <$>
+                   (x .:? "input") <*> (x .:? "timeoutInSeconds") <*>
+                     (x .: "resource"))
+
+instance Hashable LambdaFunctionScheduledEventDetails
+
+instance NFData LambdaFunctionScheduledEventDetails
+
+-- | /See:/ 'lambdaFunctionStartFailedEventDetails' smart constructor.
+data LambdaFunctionStartFailedEventDetails = LambdaFunctionStartFailedEventDetails'
+    { _lfsfedError :: !(Maybe Text)
+    , _lfsfedCause :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LambdaFunctionStartFailedEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lfsfedError' - The error code of the failure.
+--
+-- * 'lfsfedCause' - A more detailed explanation of the cause of the failure.
+lambdaFunctionStartFailedEventDetails
+    :: LambdaFunctionStartFailedEventDetails
+lambdaFunctionStartFailedEventDetails =
+    LambdaFunctionStartFailedEventDetails'
+    { _lfsfedError = Nothing
+    , _lfsfedCause = Nothing
+    }
+
+-- | The error code of the failure.
+lfsfedError :: Lens' LambdaFunctionStartFailedEventDetails (Maybe Text)
+lfsfedError = lens _lfsfedError (\ s a -> s{_lfsfedError = a});
+
+-- | A more detailed explanation of the cause of the failure.
+lfsfedCause :: Lens' LambdaFunctionStartFailedEventDetails (Maybe Text)
+lfsfedCause = lens _lfsfedCause (\ s a -> s{_lfsfedCause = a});
+
+instance FromJSON
+         LambdaFunctionStartFailedEventDetails where
+        parseJSON
+          = withObject "LambdaFunctionStartFailedEventDetails"
+              (\ x ->
+                 LambdaFunctionStartFailedEventDetails' <$>
+                   (x .:? "error") <*> (x .:? "cause"))
+
+instance Hashable
+         LambdaFunctionStartFailedEventDetails
+
+instance NFData LambdaFunctionStartFailedEventDetails
+
+-- | /See:/ 'lambdaFunctionSucceededEventDetails' smart constructor.
+newtype LambdaFunctionSucceededEventDetails = LambdaFunctionSucceededEventDetails'
+    { _lfsedOutput :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LambdaFunctionSucceededEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lfsedOutput' - The JSON data output by the lambda function.
+lambdaFunctionSucceededEventDetails
+    :: LambdaFunctionSucceededEventDetails
+lambdaFunctionSucceededEventDetails =
+    LambdaFunctionSucceededEventDetails'
+    { _lfsedOutput = Nothing
+    }
+
+-- | The JSON data output by the lambda function.
+lfsedOutput :: Lens' LambdaFunctionSucceededEventDetails (Maybe Text)
+lfsedOutput = lens _lfsedOutput (\ s a -> s{_lfsedOutput = a});
+
+instance FromJSON LambdaFunctionSucceededEventDetails
+         where
+        parseJSON
+          = withObject "LambdaFunctionSucceededEventDetails"
+              (\ x ->
+                 LambdaFunctionSucceededEventDetails' <$>
+                   (x .:? "output"))
+
+instance Hashable LambdaFunctionSucceededEventDetails
+
+instance NFData LambdaFunctionSucceededEventDetails
+
+-- | /See:/ 'lambdaFunctionTimedOutEventDetails' smart constructor.
+data LambdaFunctionTimedOutEventDetails = LambdaFunctionTimedOutEventDetails'
+    { _lftoedError :: !(Maybe Text)
+    , _lftoedCause :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LambdaFunctionTimedOutEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lftoedError' - The error code of the failure.
+--
+-- * 'lftoedCause' - A more detailed explanation of the cause of the timeout.
+lambdaFunctionTimedOutEventDetails
+    :: LambdaFunctionTimedOutEventDetails
+lambdaFunctionTimedOutEventDetails =
+    LambdaFunctionTimedOutEventDetails'
+    { _lftoedError = Nothing
+    , _lftoedCause = Nothing
+    }
+
+-- | The error code of the failure.
+lftoedError :: Lens' LambdaFunctionTimedOutEventDetails (Maybe Text)
+lftoedError = lens _lftoedError (\ s a -> s{_lftoedError = a});
+
+-- | A more detailed explanation of the cause of the timeout.
+lftoedCause :: Lens' LambdaFunctionTimedOutEventDetails (Maybe Text)
+lftoedCause = lens _lftoedCause (\ s a -> s{_lftoedCause = a});
+
+instance FromJSON LambdaFunctionTimedOutEventDetails
+         where
+        parseJSON
+          = withObject "LambdaFunctionTimedOutEventDetails"
+              (\ x ->
+                 LambdaFunctionTimedOutEventDetails' <$>
+                   (x .:? "error") <*> (x .:? "cause"))
+
+instance Hashable LambdaFunctionTimedOutEventDetails
+
+instance NFData LambdaFunctionTimedOutEventDetails
+
+-- | /See:/ 'stateEnteredEventDetails' smart constructor.
+data StateEnteredEventDetails = StateEnteredEventDetails'
+    { _sInput :: !(Maybe Text)
+    , _sName  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StateEnteredEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sInput' - The JSON input data to the state.
+--
+-- * 'sName' - The name of the state.
+stateEnteredEventDetails
+    :: Text -- ^ 'sName'
+    -> StateEnteredEventDetails
+stateEnteredEventDetails pName_ =
+    StateEnteredEventDetails'
+    { _sInput = Nothing
+    , _sName = pName_
+    }
+
+-- | The JSON input data to the state.
+sInput :: Lens' StateEnteredEventDetails (Maybe Text)
+sInput = lens _sInput (\ s a -> s{_sInput = a});
+
+-- | The name of the state.
+sName :: Lens' StateEnteredEventDetails Text
+sName = lens _sName (\ s a -> s{_sName = a});
+
+instance FromJSON StateEnteredEventDetails where
+        parseJSON
+          = withObject "StateEnteredEventDetails"
+              (\ x ->
+                 StateEnteredEventDetails' <$>
+                   (x .:? "input") <*> (x .: "name"))
+
+instance Hashable StateEnteredEventDetails
+
+instance NFData StateEnteredEventDetails
+
+-- | /See:/ 'stateExitedEventDetails' smart constructor.
+data StateExitedEventDetails = StateExitedEventDetails'
+    { _seedOutput :: !(Maybe Text)
+    , _seedName   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StateExitedEventDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'seedOutput' - The JSON output data of the state.
+--
+-- * 'seedName' - The name of the state.
+stateExitedEventDetails
+    :: Text -- ^ 'seedName'
+    -> StateExitedEventDetails
+stateExitedEventDetails pName_ =
+    StateExitedEventDetails'
+    { _seedOutput = Nothing
+    , _seedName = pName_
+    }
+
+-- | The JSON output data of the state.
+seedOutput :: Lens' StateExitedEventDetails (Maybe Text)
+seedOutput = lens _seedOutput (\ s a -> s{_seedOutput = a});
+
+-- | The name of the state.
+seedName :: Lens' StateExitedEventDetails Text
+seedName = lens _seedName (\ s a -> s{_seedName = a});
+
+instance FromJSON StateExitedEventDetails where
+        parseJSON
+          = withObject "StateExitedEventDetails"
+              (\ x ->
+                 StateExitedEventDetails' <$>
+                   (x .:? "output") <*> (x .: "name"))
+
+instance Hashable StateExitedEventDetails
+
+instance NFData StateExitedEventDetails
+
+-- | /See:/ 'stateMachineListItem' smart constructor.
+data StateMachineListItem = StateMachineListItem'
+    { _smliStateMachineARN :: !Text
+    , _smliName            :: !Text
+    , _smliCreationDate    :: !POSIX
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StateMachineListItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'smliStateMachineARN' - The Amazon Resource Name (ARN) that identifies the state machine.
+--
+-- * 'smliName' - The name of the state machine.
+--
+-- * 'smliCreationDate' - The date the state machine was created.
+stateMachineListItem
+    :: Text -- ^ 'smliStateMachineARN'
+    -> Text -- ^ 'smliName'
+    -> UTCTime -- ^ 'smliCreationDate'
+    -> StateMachineListItem
+stateMachineListItem pStateMachineARN_ pName_ pCreationDate_ =
+    StateMachineListItem'
+    { _smliStateMachineARN = pStateMachineARN_
+    , _smliName = pName_
+    , _smliCreationDate = _Time # pCreationDate_
+    }
+
+-- | The Amazon Resource Name (ARN) that identifies the state machine.
+smliStateMachineARN :: Lens' StateMachineListItem Text
+smliStateMachineARN = lens _smliStateMachineARN (\ s a -> s{_smliStateMachineARN = a});
+
+-- | The name of the state machine.
+smliName :: Lens' StateMachineListItem Text
+smliName = lens _smliName (\ s a -> s{_smliName = a});
+
+-- | The date the state machine was created.
+smliCreationDate :: Lens' StateMachineListItem UTCTime
+smliCreationDate = lens _smliCreationDate (\ s a -> s{_smliCreationDate = a}) . _Time;
+
+instance FromJSON StateMachineListItem where
+        parseJSON
+          = withObject "StateMachineListItem"
+              (\ x ->
+                 StateMachineListItem' <$>
+                   (x .: "stateMachineArn") <*> (x .: "name") <*>
+                     (x .: "creationDate"))
+
+instance Hashable StateMachineListItem
+
+instance NFData StateMachineListItem
diff --git a/gen/Network/AWS/StepFunctions/Types/Sum.hs b/gen/Network/AWS/StepFunctions/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/Types/Sum.hs
@@ -0,0 +1,197 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.Types.Sum
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.StepFunctions.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data ExecutionStatus
+    = Aborted
+    | Failed
+    | Running
+    | Succeeded
+    | TimedOut
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText ExecutionStatus where
+    parser = takeLowerText >>= \case
+        "aborted" -> pure Aborted
+        "failed" -> pure Failed
+        "running" -> pure Running
+        "succeeded" -> pure Succeeded
+        "timed_out" -> pure TimedOut
+        e -> fromTextError $ "Failure parsing ExecutionStatus from value: '" <> e
+           <> "'. Accepted values: aborted, failed, running, succeeded, timed_out"
+
+instance ToText ExecutionStatus where
+    toText = \case
+        Aborted -> "ABORTED"
+        Failed -> "FAILED"
+        Running -> "RUNNING"
+        Succeeded -> "SUCCEEDED"
+        TimedOut -> "TIMED_OUT"
+
+instance Hashable     ExecutionStatus
+instance NFData       ExecutionStatus
+instance ToByteString ExecutionStatus
+instance ToQuery      ExecutionStatus
+instance ToHeader     ExecutionStatus
+
+instance ToJSON ExecutionStatus where
+    toJSON = toJSONText
+
+instance FromJSON ExecutionStatus where
+    parseJSON = parseJSONText "ExecutionStatus"
+
+data HistoryEventType
+    = ActivityFailed
+    | ActivityScheduleFailed
+    | ActivityScheduled
+    | ActivityStarted
+    | ActivitySucceeded
+    | ActivityTimedOut
+    | ChoiceStateEntered
+    | ChoiceStateExited
+    | ExecutionAborted
+    | ExecutionFailed
+    | ExecutionStarted
+    | ExecutionSucceeded
+    | ExecutionTimedOut
+    | FailStateEntered
+    | LambdaFunctionFailed
+    | LambdaFunctionScheduleFailed
+    | LambdaFunctionScheduled
+    | LambdaFunctionStartFailed
+    | LambdaFunctionStarted
+    | LambdaFunctionSucceeded
+    | LambdaFunctionTimedOut
+    | ParallelStateEntered
+    | ParallelStateExited
+    | PassStateEntered
+    | PassStateExited
+    | SucceedStateEntered
+    | SucceedStateExited
+    | TaskStateEntered
+    | TaskStateExited
+    | WaitStateEntered
+    | WaitStateExited
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText HistoryEventType where
+    parser = takeLowerText >>= \case
+        "activityfailed" -> pure ActivityFailed
+        "activityschedulefailed" -> pure ActivityScheduleFailed
+        "activityscheduled" -> pure ActivityScheduled
+        "activitystarted" -> pure ActivityStarted
+        "activitysucceeded" -> pure ActivitySucceeded
+        "activitytimedout" -> pure ActivityTimedOut
+        "choicestateentered" -> pure ChoiceStateEntered
+        "choicestateexited" -> pure ChoiceStateExited
+        "executionaborted" -> pure ExecutionAborted
+        "executionfailed" -> pure ExecutionFailed
+        "executionstarted" -> pure ExecutionStarted
+        "executionsucceeded" -> pure ExecutionSucceeded
+        "executiontimedout" -> pure ExecutionTimedOut
+        "failstateentered" -> pure FailStateEntered
+        "lambdafunctionfailed" -> pure LambdaFunctionFailed
+        "lambdafunctionschedulefailed" -> pure LambdaFunctionScheduleFailed
+        "lambdafunctionscheduled" -> pure LambdaFunctionScheduled
+        "lambdafunctionstartfailed" -> pure LambdaFunctionStartFailed
+        "lambdafunctionstarted" -> pure LambdaFunctionStarted
+        "lambdafunctionsucceeded" -> pure LambdaFunctionSucceeded
+        "lambdafunctiontimedout" -> pure LambdaFunctionTimedOut
+        "parallelstateentered" -> pure ParallelStateEntered
+        "parallelstateexited" -> pure ParallelStateExited
+        "passstateentered" -> pure PassStateEntered
+        "passstateexited" -> pure PassStateExited
+        "succeedstateentered" -> pure SucceedStateEntered
+        "succeedstateexited" -> pure SucceedStateExited
+        "taskstateentered" -> pure TaskStateEntered
+        "taskstateexited" -> pure TaskStateExited
+        "waitstateentered" -> pure WaitStateEntered
+        "waitstateexited" -> pure WaitStateExited
+        e -> fromTextError $ "Failure parsing HistoryEventType from value: '" <> e
+           <> "'. Accepted values: activityfailed, activityschedulefailed, activityscheduled, activitystarted, activitysucceeded, activitytimedout, choicestateentered, choicestateexited, executionaborted, executionfailed, executionstarted, executionsucceeded, executiontimedout, failstateentered, lambdafunctionfailed, lambdafunctionschedulefailed, lambdafunctionscheduled, lambdafunctionstartfailed, lambdafunctionstarted, lambdafunctionsucceeded, lambdafunctiontimedout, parallelstateentered, parallelstateexited, passstateentered, passstateexited, succeedstateentered, succeedstateexited, taskstateentered, taskstateexited, waitstateentered, waitstateexited"
+
+instance ToText HistoryEventType where
+    toText = \case
+        ActivityFailed -> "ActivityFailed"
+        ActivityScheduleFailed -> "ActivityScheduleFailed"
+        ActivityScheduled -> "ActivityScheduled"
+        ActivityStarted -> "ActivityStarted"
+        ActivitySucceeded -> "ActivitySucceeded"
+        ActivityTimedOut -> "ActivityTimedOut"
+        ChoiceStateEntered -> "ChoiceStateEntered"
+        ChoiceStateExited -> "ChoiceStateExited"
+        ExecutionAborted -> "ExecutionAborted"
+        ExecutionFailed -> "ExecutionFailed"
+        ExecutionStarted -> "ExecutionStarted"
+        ExecutionSucceeded -> "ExecutionSucceeded"
+        ExecutionTimedOut -> "ExecutionTimedOut"
+        FailStateEntered -> "FailStateEntered"
+        LambdaFunctionFailed -> "LambdaFunctionFailed"
+        LambdaFunctionScheduleFailed -> "LambdaFunctionScheduleFailed"
+        LambdaFunctionScheduled -> "LambdaFunctionScheduled"
+        LambdaFunctionStartFailed -> "LambdaFunctionStartFailed"
+        LambdaFunctionStarted -> "LambdaFunctionStarted"
+        LambdaFunctionSucceeded -> "LambdaFunctionSucceeded"
+        LambdaFunctionTimedOut -> "LambdaFunctionTimedOut"
+        ParallelStateEntered -> "ParallelStateEntered"
+        ParallelStateExited -> "ParallelStateExited"
+        PassStateEntered -> "PassStateEntered"
+        PassStateExited -> "PassStateExited"
+        SucceedStateEntered -> "SucceedStateEntered"
+        SucceedStateExited -> "SucceedStateExited"
+        TaskStateEntered -> "TaskStateEntered"
+        TaskStateExited -> "TaskStateExited"
+        WaitStateEntered -> "WaitStateEntered"
+        WaitStateExited -> "WaitStateExited"
+
+instance Hashable     HistoryEventType
+instance NFData       HistoryEventType
+instance ToByteString HistoryEventType
+instance ToQuery      HistoryEventType
+instance ToHeader     HistoryEventType
+
+instance FromJSON HistoryEventType where
+    parseJSON = parseJSONText "HistoryEventType"
+
+data StateMachineStatus
+    = Active
+    | Deleting
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText StateMachineStatus where
+    parser = takeLowerText >>= \case
+        "active" -> pure Active
+        "deleting" -> pure Deleting
+        e -> fromTextError $ "Failure parsing StateMachineStatus from value: '" <> e
+           <> "'. Accepted values: active, deleting"
+
+instance ToText StateMachineStatus where
+    toText = \case
+        Active -> "ACTIVE"
+        Deleting -> "DELETING"
+
+instance Hashable     StateMachineStatus
+instance NFData       StateMachineStatus
+instance ToByteString StateMachineStatus
+instance ToQuery      StateMachineStatus
+instance ToHeader     StateMachineStatus
+
+instance FromJSON StateMachineStatus where
+    parseJSON = parseJSONText "StateMachineStatus"
diff --git a/gen/Network/AWS/StepFunctions/Waiters.hs b/gen/Network/AWS/StepFunctions/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/StepFunctions/Waiters.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.StepFunctions.Waiters
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.StepFunctions.Waiters where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.StepFunctions.Types
+import           Network.AWS.Waiter
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,21 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Main (main) where
+
+import Test.Tasty
+import Test.AWS.StepFunctions
+import Test.AWS.StepFunctions.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "StepFunctions"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/Gen/StepFunctions.hs b/test/Test/AWS/Gen/StepFunctions.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/StepFunctions.hs
@@ -0,0 +1,345 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-orphans        #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.AWS.Gen.StepFunctions
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.Gen.StepFunctions where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.StepFunctions
+import Test.AWS.StepFunctions.Internal
+
+-- 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"
+--         [ requestDeleteActivity $
+--             deleteActivity
+--
+--         , requestDescribeStateMachine $
+--             describeStateMachine
+--
+--         , requestStopExecution $
+--             stopExecution
+--
+--         , requestDescribeActivity $
+--             describeActivity
+--
+--         , requestListStateMachines $
+--             listStateMachines
+--
+--         , requestListExecutions $
+--             listExecutions
+--
+--         , requestDeleteStateMachine $
+--             deleteStateMachine
+--
+--         , requestGetActivityTask $
+--             getActivityTask
+--
+--         , requestCreateActivity $
+--             createActivity
+--
+--         , requestListActivities $
+--             listActivities
+--
+--         , requestSendTaskHeartbeat $
+--             sendTaskHeartbeat
+--
+--         , requestSendTaskFailure $
+--             sendTaskFailure
+--
+--         , requestDescribeExecution $
+--             describeExecution
+--
+--         , requestSendTaskSuccess $
+--             sendTaskSuccess
+--
+--         , requestStartExecution $
+--             startExecution
+--
+--         , requestGetExecutionHistory $
+--             getExecutionHistory
+--
+--         , requestCreateStateMachine $
+--             createStateMachine
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseDeleteActivity $
+--             deleteActivityResponse
+--
+--         , responseDescribeStateMachine $
+--             describeStateMachineResponse
+--
+--         , responseStopExecution $
+--             stopExecutionResponse
+--
+--         , responseDescribeActivity $
+--             describeActivityResponse
+--
+--         , responseListStateMachines $
+--             listStateMachinesResponse
+--
+--         , responseListExecutions $
+--             listExecutionsResponse
+--
+--         , responseDeleteStateMachine $
+--             deleteStateMachineResponse
+--
+--         , responseGetActivityTask $
+--             getActivityTaskResponse
+--
+--         , responseCreateActivity $
+--             createActivityResponse
+--
+--         , responseListActivities $
+--             listActivitiesResponse
+--
+--         , responseSendTaskHeartbeat $
+--             sendTaskHeartbeatResponse
+--
+--         , responseSendTaskFailure $
+--             sendTaskFailureResponse
+--
+--         , responseDescribeExecution $
+--             describeExecutionResponse
+--
+--         , responseSendTaskSuccess $
+--             sendTaskSuccessResponse
+--
+--         , responseStartExecution $
+--             startExecutionResponse
+--
+--         , responseGetExecutionHistory $
+--             getExecutionHistoryResponse
+--
+--         , responseCreateStateMachine $
+--             createStateMachineResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestDeleteActivity :: DeleteActivity -> TestTree
+requestDeleteActivity = req
+    "DeleteActivity"
+    "fixture/DeleteActivity.yaml"
+
+requestDescribeStateMachine :: DescribeStateMachine -> TestTree
+requestDescribeStateMachine = req
+    "DescribeStateMachine"
+    "fixture/DescribeStateMachine.yaml"
+
+requestStopExecution :: StopExecution -> TestTree
+requestStopExecution = req
+    "StopExecution"
+    "fixture/StopExecution.yaml"
+
+requestDescribeActivity :: DescribeActivity -> TestTree
+requestDescribeActivity = req
+    "DescribeActivity"
+    "fixture/DescribeActivity.yaml"
+
+requestListStateMachines :: ListStateMachines -> TestTree
+requestListStateMachines = req
+    "ListStateMachines"
+    "fixture/ListStateMachines.yaml"
+
+requestListExecutions :: ListExecutions -> TestTree
+requestListExecutions = req
+    "ListExecutions"
+    "fixture/ListExecutions.yaml"
+
+requestDeleteStateMachine :: DeleteStateMachine -> TestTree
+requestDeleteStateMachine = req
+    "DeleteStateMachine"
+    "fixture/DeleteStateMachine.yaml"
+
+requestGetActivityTask :: GetActivityTask -> TestTree
+requestGetActivityTask = req
+    "GetActivityTask"
+    "fixture/GetActivityTask.yaml"
+
+requestCreateActivity :: CreateActivity -> TestTree
+requestCreateActivity = req
+    "CreateActivity"
+    "fixture/CreateActivity.yaml"
+
+requestListActivities :: ListActivities -> TestTree
+requestListActivities = req
+    "ListActivities"
+    "fixture/ListActivities.yaml"
+
+requestSendTaskHeartbeat :: SendTaskHeartbeat -> TestTree
+requestSendTaskHeartbeat = req
+    "SendTaskHeartbeat"
+    "fixture/SendTaskHeartbeat.yaml"
+
+requestSendTaskFailure :: SendTaskFailure -> TestTree
+requestSendTaskFailure = req
+    "SendTaskFailure"
+    "fixture/SendTaskFailure.yaml"
+
+requestDescribeExecution :: DescribeExecution -> TestTree
+requestDescribeExecution = req
+    "DescribeExecution"
+    "fixture/DescribeExecution.yaml"
+
+requestSendTaskSuccess :: SendTaskSuccess -> TestTree
+requestSendTaskSuccess = req
+    "SendTaskSuccess"
+    "fixture/SendTaskSuccess.yaml"
+
+requestStartExecution :: StartExecution -> TestTree
+requestStartExecution = req
+    "StartExecution"
+    "fixture/StartExecution.yaml"
+
+requestGetExecutionHistory :: GetExecutionHistory -> TestTree
+requestGetExecutionHistory = req
+    "GetExecutionHistory"
+    "fixture/GetExecutionHistory.yaml"
+
+requestCreateStateMachine :: CreateStateMachine -> TestTree
+requestCreateStateMachine = req
+    "CreateStateMachine"
+    "fixture/CreateStateMachine.yaml"
+
+-- Responses
+
+responseDeleteActivity :: DeleteActivityResponse -> TestTree
+responseDeleteActivity = res
+    "DeleteActivityResponse"
+    "fixture/DeleteActivityResponse.proto"
+    stepFunctions
+    (Proxy :: Proxy DeleteActivity)
+
+responseDescribeStateMachine :: DescribeStateMachineResponse -> TestTree
+responseDescribeStateMachine = res
+    "DescribeStateMachineResponse"
+    "fixture/DescribeStateMachineResponse.proto"
+    stepFunctions
+    (Proxy :: Proxy DescribeStateMachine)
+
+responseStopExecution :: StopExecutionResponse -> TestTree
+responseStopExecution = res
+    "StopExecutionResponse"
+    "fixture/StopExecutionResponse.proto"
+    stepFunctions
+    (Proxy :: Proxy StopExecution)
+
+responseDescribeActivity :: DescribeActivityResponse -> TestTree
+responseDescribeActivity = res
+    "DescribeActivityResponse"
+    "fixture/DescribeActivityResponse.proto"
+    stepFunctions
+    (Proxy :: Proxy DescribeActivity)
+
+responseListStateMachines :: ListStateMachinesResponse -> TestTree
+responseListStateMachines = res
+    "ListStateMachinesResponse"
+    "fixture/ListStateMachinesResponse.proto"
+    stepFunctions
+    (Proxy :: Proxy ListStateMachines)
+
+responseListExecutions :: ListExecutionsResponse -> TestTree
+responseListExecutions = res
+    "ListExecutionsResponse"
+    "fixture/ListExecutionsResponse.proto"
+    stepFunctions
+    (Proxy :: Proxy ListExecutions)
+
+responseDeleteStateMachine :: DeleteStateMachineResponse -> TestTree
+responseDeleteStateMachine = res
+    "DeleteStateMachineResponse"
+    "fixture/DeleteStateMachineResponse.proto"
+    stepFunctions
+    (Proxy :: Proxy DeleteStateMachine)
+
+responseGetActivityTask :: GetActivityTaskResponse -> TestTree
+responseGetActivityTask = res
+    "GetActivityTaskResponse"
+    "fixture/GetActivityTaskResponse.proto"
+    stepFunctions
+    (Proxy :: Proxy GetActivityTask)
+
+responseCreateActivity :: CreateActivityResponse -> TestTree
+responseCreateActivity = res
+    "CreateActivityResponse"
+    "fixture/CreateActivityResponse.proto"
+    stepFunctions
+    (Proxy :: Proxy CreateActivity)
+
+responseListActivities :: ListActivitiesResponse -> TestTree
+responseListActivities = res
+    "ListActivitiesResponse"
+    "fixture/ListActivitiesResponse.proto"
+    stepFunctions
+    (Proxy :: Proxy ListActivities)
+
+responseSendTaskHeartbeat :: SendTaskHeartbeatResponse -> TestTree
+responseSendTaskHeartbeat = res
+    "SendTaskHeartbeatResponse"
+    "fixture/SendTaskHeartbeatResponse.proto"
+    stepFunctions
+    (Proxy :: Proxy SendTaskHeartbeat)
+
+responseSendTaskFailure :: SendTaskFailureResponse -> TestTree
+responseSendTaskFailure = res
+    "SendTaskFailureResponse"
+    "fixture/SendTaskFailureResponse.proto"
+    stepFunctions
+    (Proxy :: Proxy SendTaskFailure)
+
+responseDescribeExecution :: DescribeExecutionResponse -> TestTree
+responseDescribeExecution = res
+    "DescribeExecutionResponse"
+    "fixture/DescribeExecutionResponse.proto"
+    stepFunctions
+    (Proxy :: Proxy DescribeExecution)
+
+responseSendTaskSuccess :: SendTaskSuccessResponse -> TestTree
+responseSendTaskSuccess = res
+    "SendTaskSuccessResponse"
+    "fixture/SendTaskSuccessResponse.proto"
+    stepFunctions
+    (Proxy :: Proxy SendTaskSuccess)
+
+responseStartExecution :: StartExecutionResponse -> TestTree
+responseStartExecution = res
+    "StartExecutionResponse"
+    "fixture/StartExecutionResponse.proto"
+    stepFunctions
+    (Proxy :: Proxy StartExecution)
+
+responseGetExecutionHistory :: GetExecutionHistoryResponse -> TestTree
+responseGetExecutionHistory = res
+    "GetExecutionHistoryResponse"
+    "fixture/GetExecutionHistoryResponse.proto"
+    stepFunctions
+    (Proxy :: Proxy GetExecutionHistory)
+
+responseCreateStateMachine :: CreateStateMachineResponse -> TestTree
+responseCreateStateMachine = res
+    "CreateStateMachineResponse"
+    "fixture/CreateStateMachineResponse.proto"
+    stepFunctions
+    (Proxy :: Proxy CreateStateMachine)
diff --git a/test/Test/AWS/StepFunctions.hs b/test/Test/AWS/StepFunctions.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/StepFunctions.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.AWS.StepFunctions
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.StepFunctions
+    ( tests
+    , fixtures
+    ) where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/StepFunctions/Internal.hs b/test/Test/AWS/StepFunctions/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/StepFunctions/Internal.hs
@@ -0,0 +1,9 @@
+-- |
+-- Module      : Test.AWS.StepFunctions.Internal
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.StepFunctions.Internal where
