diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,373 @@
+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.
+
+Exhibit B - "Incompatible With Secondary Licenses" Notice
+---------------------------------------------------------
+
+  This Source Code Form is "Incompatible With Secondary Licenses", as
+  defined by the Mozilla Public License, v. 2.0.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,132 @@
+# Amazon CodePipeline SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`1.0.0`
+
+
+## Description
+
+AWS CodePipeline __Overview__
+
+This is the AWS CodePipeline API Reference. This guide provides
+descriptions of the actions and data types for AWS CodePipeline. Some
+functionality for your pipeline is only configurable through the API.
+For additional information, see the
+<http://docs.aws.amazon.com/pipelines/latest/userguide/welcome.html AWS CodePipeline User Guide>.
+
+You can use the AWS CodePipeline API to work with pipelines, stages,
+actions, gates, and transitions, as described below.
+
+/Pipelines/ are models of automated release processes. Each pipeline is
+uniquely named, and consists of actions, gates, and stages.
+
+You can work with pipelines by calling:
+
+-   CreatePipeline, which creates a uniquely-named pipeline.
+-   DeletePipeline, which deletes the specified pipeline.
+-   GetPipeline, which returns information about a pipeline structure.
+-   GetPipelineState, which returns information about the current state
+    of the stages and actions of a pipeline.
+-   ListPipelines, which gets a summary of all of the pipelines
+    associated with your account.
+-   StartPipelineExecution, which runs the the most recent revision of
+    an artifact through the pipeline.
+-   UpdatePipeline, which updates a pipeline with edits or changes to
+    the structure of the pipeline.
+
+Pipelines include /stages/, which are which are logical groupings of
+gates and actions. Each stage contains one or more actions that must
+complete before the next stage begins. A stage will result in success or
+failure. If a stage fails, then the pipeline stops at that stage and
+will remain stopped until either a new version of an artifact appears in
+the source location, or a user takes action to re-run the most recent
+artifact through the pipeline. You can call GetPipelineState, which
+displays the status of a pipeline, including the status of stages in the
+pipeline, or GetPipeline, which returns the entire structure of the
+pipeline, including the stages of that pipeline.
+
+Pipeline stages include /actions/, which are categorized into categories
+such as source or build actions performed within a stage of a pipeline.
+For example, you can use a source action to import artifacts into a
+pipeline from a source such as Amazon S3. Like stages, you do not work
+with actions directly in most cases, but you do define and interact with
+actions when working with pipeline operations such as CreatePipeline and
+GetPipelineState.
+
+Pipelines also include /transitions/, which allow the transition of
+artifacts from one stage to the next in a pipeline after the actions in
+one stage complete.
+
+You can work with transitions by calling:
+
+-   DisableStageTransition, which prevents artifacts from transitioning
+    to the next stage in a pipeline.
+-   EnableStageTransition, which enables transition of artifacts between
+    stages in a pipeline.
+
+__Using the API to integrate with AWS CodePipeline__
+
+For third-party integrators or developers who want to create their own
+integrations with AWS CodePipeline, the expected sequence varies from
+the standard API user. In order to integrate with AWS CodePipeline,
+developers will need to work with the following items:
+
+-   Jobs, which are instances of an action. For example, a job for a
+    source action might import a revision of an artifact from a source.
+
+    You can work with jobs by calling:
+
+    -   AcknowledgeJob, which confirms whether a job worker has received
+        the specified job,
+    -   PollForJobs, which determines whether there are any jobs to act
+        upon,
+    -   PutJobFailureResult, which provides details of a job failure,
+        and
+    -   PutJobSuccessResult, which provides details of a job success.
+-   Third party jobs, which are instances of an action created by a
+    partner action and integrated into AWS CodePipeline. Partner actions
+    are created by members of the AWS Partner Network.
+
+    You can work with third party jobs by calling:
+
+    -   AcknowledgeThirdPartyJob, which confirms whether a job worker
+        has received the specified job,
+    -   PollForThirdPartyJobs, which determines whether there are any
+        jobs to act upon,
+    -   PutThirdPartyJobFailureResult, which provides details of a job
+        failure, and
+    -   PutThirdPartyJobSuccessResult, which provides details of a job
+        success.
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-codepipeline)
+and the [AWS API Reference](http://docs.aws.amazon.com/codepipeline/latest/APIReference/Welcome.html).
+
+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 and sending requests.
+
+Use of lenses is required for constructing and manipulating types.
+This is due to the amount 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).
+
+## 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-codepipeline` 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-codepipeline.cabal b/amazonka-codepipeline.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-codepipeline.cabal
@@ -0,0 +1,194 @@
+name:                  amazonka-codepipeline
+version:               1.0.0
+synopsis:              Amazon CodePipeline SDK.
+homepage:              https://github.com/brendanhay/amazonka
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2013-2015 Brendan Hay
+category:              Network, AWS, Cloud, Distributed Computing
+build-type:            Simple
+extra-source-files:    README.md
+cabal-version:         >= 1.10
+
+description:
+    AWS CodePipeline __Overview__
+
+    This is the AWS CodePipeline API Reference. This guide provides
+    descriptions of the actions and data types for AWS CodePipeline. Some
+    functionality for your pipeline is only configurable through the API.
+    For additional information, see the
+    <http://docs.aws.amazon.com/pipelines/latest/userguide/welcome.html AWS CodePipeline User Guide>.
+
+    You can use the AWS CodePipeline API to work with pipelines, stages,
+    actions, gates, and transitions, as described below.
+
+    /Pipelines/ are models of automated release processes. Each pipeline is
+    uniquely named, and consists of actions, gates, and stages.
+
+    You can work with pipelines by calling:
+
+    -   CreatePipeline, which creates a uniquely-named pipeline.
+    -   DeletePipeline, which deletes the specified pipeline.
+    -   GetPipeline, which returns information about a pipeline structure.
+    -   GetPipelineState, which returns information about the current state
+        of the stages and actions of a pipeline.
+    -   ListPipelines, which gets a summary of all of the pipelines
+        associated with your account.
+    -   StartPipelineExecution, which runs the the most recent revision of
+        an artifact through the pipeline.
+    -   UpdatePipeline, which updates a pipeline with edits or changes to
+        the structure of the pipeline.
+
+    Pipelines include /stages/, which are which are logical groupings of
+    gates and actions. Each stage contains one or more actions that must
+    complete before the next stage begins. A stage will result in success or
+    failure. If a stage fails, then the pipeline stops at that stage and
+    will remain stopped until either a new version of an artifact appears in
+    the source location, or a user takes action to re-run the most recent
+    artifact through the pipeline. You can call GetPipelineState, which
+    displays the status of a pipeline, including the status of stages in the
+    pipeline, or GetPipeline, which returns the entire structure of the
+    pipeline, including the stages of that pipeline.
+
+    Pipeline stages include /actions/, which are categorized into categories
+    such as source or build actions performed within a stage of a pipeline.
+    For example, you can use a source action to import artifacts into a
+    pipeline from a source such as Amazon S3. Like stages, you do not work
+    with actions directly in most cases, but you do define and interact with
+    actions when working with pipeline operations such as CreatePipeline and
+    GetPipelineState.
+
+    Pipelines also include /transitions/, which allow the transition of
+    artifacts from one stage to the next in a pipeline after the actions in
+    one stage complete.
+
+    You can work with transitions by calling:
+
+    -   DisableStageTransition, which prevents artifacts from transitioning
+        to the next stage in a pipeline.
+    -   EnableStageTransition, which enables transition of artifacts between
+        stages in a pipeline.
+
+    __Using the API to integrate with AWS CodePipeline__
+
+    For third-party integrators or developers who want to create their own
+    integrations with AWS CodePipeline, the expected sequence varies from
+    the standard API user. In order to integrate with AWS CodePipeline,
+    developers will need to work with the following items:
+
+    -   Jobs, which are instances of an action. For example, a job for a
+        source action might import a revision of an artifact from a source.
+
+        You can work with jobs by calling:
+
+        -   AcknowledgeJob, which confirms whether a job worker has received
+            the specified job,
+        -   PollForJobs, which determines whether there are any jobs to act
+            upon,
+        -   PutJobFailureResult, which provides details of a job failure,
+            and
+        -   PutJobSuccessResult, which provides details of a job success.
+    -   Third party jobs, which are instances of an action created by a
+        partner action and integrated into AWS CodePipeline. Partner actions
+        are created by members of the AWS Partner Network.
+
+        You can work with third party jobs by calling:
+
+        -   AcknowledgeThirdPartyJob, which confirms whether a job worker
+            has received the specified job,
+        -   PollForThirdPartyJobs, which determines whether there are any
+            jobs to act upon,
+        -   PutThirdPartyJobFailureResult, which provides details of a job
+            failure, and
+        -   PutThirdPartyJobSuccessResult, which provides details of a job
+            success.
+    .
+    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 and sending requests.
+    .
+    Use of lenses is required for constructing and manipulating types.
+    This is due to the amount 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.CodePipeline" and the <http://docs.aws.amazon.com/codepipeline/latest/APIReference/Welcome.html AWS API Reference>
+    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.CodePipeline
+        , Network.AWS.CodePipeline.AcknowledgeJob
+        , Network.AWS.CodePipeline.AcknowledgeThirdPartyJob
+        , Network.AWS.CodePipeline.CreateCustomActionType
+        , Network.AWS.CodePipeline.CreatePipeline
+        , Network.AWS.CodePipeline.DeleteCustomActionType
+        , Network.AWS.CodePipeline.DeletePipeline
+        , Network.AWS.CodePipeline.DisableStageTransition
+        , Network.AWS.CodePipeline.EnableStageTransition
+        , Network.AWS.CodePipeline.GetJobDetails
+        , Network.AWS.CodePipeline.GetPipeline
+        , Network.AWS.CodePipeline.GetPipelineState
+        , Network.AWS.CodePipeline.GetThirdPartyJobDetails
+        , Network.AWS.CodePipeline.ListActionTypes
+        , Network.AWS.CodePipeline.ListPipelines
+        , Network.AWS.CodePipeline.PollForJobs
+        , Network.AWS.CodePipeline.PollForThirdPartyJobs
+        , Network.AWS.CodePipeline.PutActionRevision
+        , Network.AWS.CodePipeline.PutJobFailureResult
+        , Network.AWS.CodePipeline.PutJobSuccessResult
+        , Network.AWS.CodePipeline.PutThirdPartyJobFailureResult
+        , Network.AWS.CodePipeline.PutThirdPartyJobSuccessResult
+        , Network.AWS.CodePipeline.StartPipelineExecution
+        , Network.AWS.CodePipeline.Types
+        , Network.AWS.CodePipeline.UpdatePipeline
+        , Network.AWS.CodePipeline.Waiters
+
+    other-modules:
+          Network.AWS.CodePipeline.Types.Product
+        , Network.AWS.CodePipeline.Types.Sum
+
+    build-depends:
+          amazonka-core == 1.0.0.*
+        , base          >= 4.7     && < 5
+
+test-suite amazonka-codepipeline-test
+    type:              exitcode-stdio-1.0
+    default-language:  Haskell2010
+    hs-source-dirs:    test
+    main-is:           Main.hs
+
+    ghc-options:       -Wall -threaded
+
+    -- This is not comprehensive if modules have manually been added.
+    -- It exists to ensure cabal 'somewhat' detects test module changes.
+    other-modules:
+          Test.AWS.CodePipeline
+        , Test.AWS.Gen.CodePipeline
+        , Test.AWS.CodePipeline.Internal
+
+    build-depends:
+          amazonka-core == 1.0.0
+        , amazonka-test == 1.0.0
+        , amazonka-codepipeline == 1.0.0
+        , base
+        , bytestring
+        , lens
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/gen/Network/AWS/CodePipeline.hs b/gen/Network/AWS/CodePipeline.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline.hs
@@ -0,0 +1,596 @@
+{-# 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.CodePipeline
+-- Copyright   : (c) 2013-2015 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 CodePipeline __Overview__
+--
+-- This is the AWS CodePipeline API Reference. This guide provides
+-- descriptions of the actions and data types for AWS CodePipeline. Some
+-- functionality for your pipeline is only configurable through the API.
+-- For additional information, see the
+-- <http://docs.aws.amazon.com/pipelines/latest/userguide/welcome.html AWS CodePipeline User Guide>.
+--
+-- You can use the AWS CodePipeline API to work with pipelines, stages,
+-- actions, gates, and transitions, as described below.
+--
+-- /Pipelines/ are models of automated release processes. Each pipeline is
+-- uniquely named, and consists of actions, gates, and stages.
+--
+-- You can work with pipelines by calling:
+--
+-- -   CreatePipeline, which creates a uniquely-named pipeline.
+-- -   DeletePipeline, which deletes the specified pipeline.
+-- -   GetPipeline, which returns information about a pipeline structure.
+-- -   GetPipelineState, which returns information about the current state
+--     of the stages and actions of a pipeline.
+-- -   ListPipelines, which gets a summary of all of the pipelines
+--     associated with your account.
+-- -   StartPipelineExecution, which runs the the most recent revision of
+--     an artifact through the pipeline.
+-- -   UpdatePipeline, which updates a pipeline with edits or changes to
+--     the structure of the pipeline.
+--
+-- Pipelines include /stages/, which are which are logical groupings of
+-- gates and actions. Each stage contains one or more actions that must
+-- complete before the next stage begins. A stage will result in success or
+-- failure. If a stage fails, then the pipeline stops at that stage and
+-- will remain stopped until either a new version of an artifact appears in
+-- the source location, or a user takes action to re-run the most recent
+-- artifact through the pipeline. You can call GetPipelineState, which
+-- displays the status of a pipeline, including the status of stages in the
+-- pipeline, or GetPipeline, which returns the entire structure of the
+-- pipeline, including the stages of that pipeline.
+--
+-- Pipeline stages include /actions/, which are categorized into categories
+-- such as source or build actions performed within a stage of a pipeline.
+-- For example, you can use a source action to import artifacts into a
+-- pipeline from a source such as Amazon S3. Like stages, you do not work
+-- with actions directly in most cases, but you do define and interact with
+-- actions when working with pipeline operations such as CreatePipeline and
+-- GetPipelineState.
+--
+-- Pipelines also include /transitions/, which allow the transition of
+-- artifacts from one stage to the next in a pipeline after the actions in
+-- one stage complete.
+--
+-- You can work with transitions by calling:
+--
+-- -   DisableStageTransition, which prevents artifacts from transitioning
+--     to the next stage in a pipeline.
+-- -   EnableStageTransition, which enables transition of artifacts between
+--     stages in a pipeline.
+--
+-- __Using the API to integrate with AWS CodePipeline__
+--
+-- For third-party integrators or developers who want to create their own
+-- integrations with AWS CodePipeline, the expected sequence varies from
+-- the standard API user. In order to integrate with AWS CodePipeline,
+-- developers will need to work with the following items:
+--
+-- -   Jobs, which are instances of an action. For example, a job for a
+--     source action might import a revision of an artifact from a source.
+--
+--     You can work with jobs by calling:
+--
+--     -   AcknowledgeJob, which confirms whether a job worker has received
+--         the specified job,
+--     -   PollForJobs, which determines whether there are any jobs to act
+--         upon,
+--     -   PutJobFailureResult, which provides details of a job failure,
+--         and
+--     -   PutJobSuccessResult, which provides details of a job success.
+-- -   Third party jobs, which are instances of an action created by a
+--     partner action and integrated into AWS CodePipeline. Partner actions
+--     are created by members of the AWS Partner Network.
+--
+--     You can work with third party jobs by calling:
+--
+--     -   AcknowledgeThirdPartyJob, which confirms whether a job worker
+--         has received the specified job,
+--     -   PollForThirdPartyJobs, which determines whether there are any
+--         jobs to act upon,
+--     -   PutThirdPartyJobFailureResult, which provides details of a job
+--         failure, and
+--     -   PutThirdPartyJobSuccessResult, which provides details of a job
+--         success.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/Welcome.html AWS API Reference>
+module Network.AWS.CodePipeline
+    (
+    -- * Service
+      CodePipeline
+
+    -- * Errors
+    -- $errors
+
+    -- ** ValidationException
+    , _ValidationException
+
+    -- ** InvalidClientTokenException
+    , _InvalidClientTokenException
+
+    -- ** InvalidNonceException
+    , _InvalidNonceException
+
+    -- ** ActionNotFoundException
+    , _ActionNotFoundException
+
+    -- ** InvalidBlockerDeclarationException
+    , _InvalidBlockerDeclarationException
+
+    -- ** InvalidJobStateException
+    , _InvalidJobStateException
+
+    -- ** InvalidJobException
+    , _InvalidJobException
+
+    -- ** PipelineVersionNotFoundException
+    , _PipelineVersionNotFoundException
+
+    -- ** ActionTypeNotFoundException
+    , _ActionTypeNotFoundException
+
+    -- ** InvalidNextTokenException
+    , _InvalidNextTokenException
+
+    -- ** InvalidStageDeclarationException
+    , _InvalidStageDeclarationException
+
+    -- ** InvalidActionDeclarationException
+    , _InvalidActionDeclarationException
+
+    -- ** StageNotFoundException
+    , _StageNotFoundException
+
+    -- ** JobNotFoundException
+    , _JobNotFoundException
+
+    -- ** InvalidStructureException
+    , _InvalidStructureException
+
+    -- ** PipelineNotFoundException
+    , _PipelineNotFoundException
+
+    -- ** PipelineNameInUseException
+    , _PipelineNameInUseException
+
+    -- ** LimitExceededException
+    , _LimitExceededException
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** GetPipeline
+    , module Network.AWS.CodePipeline.GetPipeline
+
+    -- ** PutJobFailureResult
+    , module Network.AWS.CodePipeline.PutJobFailureResult
+
+    -- ** AcknowledgeThirdPartyJob
+    , module Network.AWS.CodePipeline.AcknowledgeThirdPartyJob
+
+    -- ** PutThirdPartyJobFailureResult
+    , module Network.AWS.CodePipeline.PutThirdPartyJobFailureResult
+
+    -- ** PollForThirdPartyJobs
+    , module Network.AWS.CodePipeline.PollForThirdPartyJobs
+
+    -- ** PollForJobs
+    , module Network.AWS.CodePipeline.PollForJobs
+
+    -- ** StartPipelineExecution
+    , module Network.AWS.CodePipeline.StartPipelineExecution
+
+    -- ** UpdatePipeline
+    , module Network.AWS.CodePipeline.UpdatePipeline
+
+    -- ** DeletePipeline
+    , module Network.AWS.CodePipeline.DeletePipeline
+
+    -- ** GetPipelineState
+    , module Network.AWS.CodePipeline.GetPipelineState
+
+    -- ** GetJobDetails
+    , module Network.AWS.CodePipeline.GetJobDetails
+
+    -- ** ListPipelines
+    , module Network.AWS.CodePipeline.ListPipelines
+
+    -- ** DeleteCustomActionType
+    , module Network.AWS.CodePipeline.DeleteCustomActionType
+
+    -- ** PutActionRevision
+    , module Network.AWS.CodePipeline.PutActionRevision
+
+    -- ** PutJobSuccessResult
+    , module Network.AWS.CodePipeline.PutJobSuccessResult
+
+    -- ** ListActionTypes
+    , module Network.AWS.CodePipeline.ListActionTypes
+
+    -- ** DisableStageTransition
+    , module Network.AWS.CodePipeline.DisableStageTransition
+
+    -- ** AcknowledgeJob
+    , module Network.AWS.CodePipeline.AcknowledgeJob
+
+    -- ** EnableStageTransition
+    , module Network.AWS.CodePipeline.EnableStageTransition
+
+    -- ** GetThirdPartyJobDetails
+    , module Network.AWS.CodePipeline.GetThirdPartyJobDetails
+
+    -- ** CreatePipeline
+    , module Network.AWS.CodePipeline.CreatePipeline
+
+    -- ** CreateCustomActionType
+    , module Network.AWS.CodePipeline.CreateCustomActionType
+
+    -- ** PutThirdPartyJobSuccessResult
+    , module Network.AWS.CodePipeline.PutThirdPartyJobSuccessResult
+
+    -- * Types
+
+    -- ** ActionCategory
+    , ActionCategory (..)
+
+    -- ** ActionConfigurationPropertyType
+    , ActionConfigurationPropertyType (..)
+
+    -- ** ActionExecutionStatus
+    , ActionExecutionStatus (..)
+
+    -- ** ActionOwner
+    , ActionOwner (..)
+
+    -- ** ArtifactLocationType
+    , ArtifactLocationType (..)
+
+    -- ** ArtifactStoreType
+    , ArtifactStoreType (..)
+
+    -- ** BlockerType
+    , BlockerType (..)
+
+    -- ** FailureType
+    , FailureType (..)
+
+    -- ** JobStatus
+    , JobStatus (..)
+
+    -- ** StageTransitionType
+    , StageTransitionType (..)
+
+    -- ** AWSSessionCredentials
+    , AWSSessionCredentials
+    , awsSessionCredentials
+    , ascAccessKeyId
+    , ascSecretAccessKey
+    , ascSessionToken
+
+    -- ** ActionConfiguration
+    , ActionConfiguration
+    , actionConfiguration
+    , acConfiguration
+
+    -- ** ActionConfigurationProperty
+    , ActionConfigurationProperty
+    , actionConfigurationProperty
+    , acpQueryable
+    , acpType
+    , acpDescription
+    , acpName
+    , acpRequired
+    , acpKey
+    , acpSecret
+
+    -- ** ActionContext
+    , ActionContext
+    , actionContext
+    , acName
+
+    -- ** ActionDeclaration
+    , ActionDeclaration
+    , actionDeclaration
+    , adOutputArtifacts
+    , adRunOrder
+    , adConfiguration
+    , adInputArtifacts
+    , adRoleARN
+    , adName
+    , adActionTypeId
+
+    -- ** ActionExecution
+    , ActionExecution
+    , actionExecution
+    , aeSummary
+    , aeStatus
+    , aeLastStatusChange
+    , aeExternalExecutionURL
+    , aePercentComplete
+    , aeErrorDetails
+    , aeExternalExecutionId
+
+    -- ** ActionRevision
+    , ActionRevision
+    , actionRevision
+    , arRevisionChangeId
+    , arRevisionId
+    , arCreated
+
+    -- ** ActionState
+    , ActionState
+    , actionState
+    , asEntityURL
+    , asRevisionURL
+    , asActionName
+    , asCurrentRevision
+    , asLatestExecution
+
+    -- ** ActionType
+    , ActionType
+    , actionType
+    , atSettings
+    , atActionConfigurationProperties
+    , atId
+    , atInputArtifactDetails
+    , atOutputArtifactDetails
+
+    -- ** ActionTypeId
+    , ActionTypeId
+    , actionTypeId
+    , atiCategory
+    , atiOwner
+    , atiProvider
+    , atiVersion
+
+    -- ** ActionTypeSettings
+    , ActionTypeSettings
+    , actionTypeSettings
+    , atsThirdPartyConfigurationURL
+    , atsExecutionURLTemplate
+    , atsEntityURLTemplate
+    , atsRevisionURLTemplate
+
+    -- ** Artifact
+    , Artifact
+    , artifact
+    , aLocation
+    , aName
+    , aRevision
+
+    -- ** ArtifactDetails
+    , ArtifactDetails
+    , artifactDetails
+    , adMinimumCount
+    , adMaximumCount
+
+    -- ** ArtifactLocation
+    , ArtifactLocation
+    , artifactLocation
+    , alS3Location
+    , alType
+
+    -- ** ArtifactStore
+    , ArtifactStore
+    , artifactStore
+    , asType
+    , asLocation
+
+    -- ** BlockerDeclaration
+    , BlockerDeclaration
+    , blockerDeclaration
+    , bdName
+    , bdType
+
+    -- ** CurrentRevision
+    , CurrentRevision
+    , currentRevision
+    , crRevision
+    , crChangeIdentifier
+
+    -- ** ErrorDetails
+    , ErrorDetails
+    , errorDetails
+    , edCode
+    , edMessage
+
+    -- ** ExecutionDetails
+    , ExecutionDetails
+    , executionDetails
+    , edSummary
+    , edPercentComplete
+    , edExternalExecutionId
+
+    -- ** FailureDetails
+    , FailureDetails
+    , failureDetails
+    , fdExternalExecutionId
+    , fdMessage
+    , fdType
+
+    -- ** InputArtifact
+    , InputArtifact
+    , inputArtifact
+    , iaName
+
+    -- ** Job
+    , Job
+    , job
+    , jData
+    , jAccountId
+    , jId
+    , jNonce
+
+    -- ** JobData
+    , JobData
+    , jobData
+    , jdContinuationToken
+    , jdOutputArtifacts
+    , jdArtifactCredentials
+    , jdPipelineContext
+    , jdActionTypeId
+    , jdInputArtifacts
+    , jdActionConfiguration
+
+    -- ** JobDetails
+    , JobDetails
+    , jobDetails
+    , jdData
+    , jdAccountId
+    , jdId
+
+    -- ** OutputArtifact
+    , OutputArtifact
+    , outputArtifact
+    , oaName
+
+    -- ** PipelineContext
+    , PipelineContext
+    , pipelineContext
+    , pcStage
+    , pcPipelineName
+    , pcAction
+
+    -- ** PipelineDeclaration
+    , PipelineDeclaration
+    , pipelineDeclaration
+    , pdVersion
+    , pdName
+    , pdRoleARN
+    , pdArtifactStore
+    , pdStages
+
+    -- ** PipelineSummary
+    , PipelineSummary
+    , pipelineSummary
+    , psCreated
+    , psName
+    , psVersion
+    , psUpdated
+
+    -- ** S3ArtifactLocation
+    , S3ArtifactLocation
+    , s3ArtifactLocation
+    , salBucketName
+    , salObjectKey
+
+    -- ** StageContext
+    , StageContext
+    , stageContext
+    , scName
+
+    -- ** StageDeclaration
+    , StageDeclaration
+    , stageDeclaration
+    , sdBlockers
+    , sdName
+    , sdActions
+
+    -- ** StageState
+    , StageState
+    , stageState
+    , ssInboundTransitionState
+    , ssActionStates
+    , ssStageName
+
+    -- ** ThirdPartyJob
+    , ThirdPartyJob
+    , thirdPartyJob
+    , tpjClientId
+    , tpjJobId
+
+    -- ** ThirdPartyJobData
+    , ThirdPartyJobData
+    , thirdPartyJobData
+    , tpjdContinuationToken
+    , tpjdOutputArtifacts
+    , tpjdArtifactCredentials
+    , tpjdPipelineContext
+    , tpjdActionTypeId
+    , tpjdInputArtifacts
+    , tpjdActionConfiguration
+
+    -- ** ThirdPartyJobDetails
+    , ThirdPartyJobDetails
+    , thirdPartyJobDetails
+    , tpjdData
+    , tpjdId
+    , tpjdNonce
+
+    -- ** TransitionState
+    , TransitionState
+    , transitionState
+    , tsEnabled
+    , tsDisabledReason
+    , tsLastChangedAt
+    , tsLastChangedBy
+    ) where
+
+import           Network.AWS.CodePipeline.AcknowledgeJob
+import           Network.AWS.CodePipeline.AcknowledgeThirdPartyJob
+import           Network.AWS.CodePipeline.CreateCustomActionType
+import           Network.AWS.CodePipeline.CreatePipeline
+import           Network.AWS.CodePipeline.DeleteCustomActionType
+import           Network.AWS.CodePipeline.DeletePipeline
+import           Network.AWS.CodePipeline.DisableStageTransition
+import           Network.AWS.CodePipeline.EnableStageTransition
+import           Network.AWS.CodePipeline.GetJobDetails
+import           Network.AWS.CodePipeline.GetPipeline
+import           Network.AWS.CodePipeline.GetPipelineState
+import           Network.AWS.CodePipeline.GetThirdPartyJobDetails
+import           Network.AWS.CodePipeline.ListActionTypes
+import           Network.AWS.CodePipeline.ListPipelines
+import           Network.AWS.CodePipeline.PollForJobs
+import           Network.AWS.CodePipeline.PollForThirdPartyJobs
+import           Network.AWS.CodePipeline.PutActionRevision
+import           Network.AWS.CodePipeline.PutJobFailureResult
+import           Network.AWS.CodePipeline.PutJobSuccessResult
+import           Network.AWS.CodePipeline.PutThirdPartyJobFailureResult
+import           Network.AWS.CodePipeline.PutThirdPartyJobSuccessResult
+import           Network.AWS.CodePipeline.StartPipelineExecution
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.UpdatePipeline
+import           Network.AWS.CodePipeline.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 'CodePipeline'.
+-}
+
+{- $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/CodePipeline/AcknowledgeJob.hs b/gen/Network/AWS/CodePipeline/AcknowledgeJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/AcknowledgeJob.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.CodePipeline.AcknowledgeJob
+-- Copyright   : (c) 2013-2015 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 information about a specified job and whether that job has been
+-- received by the job worker. Only used for custom actions.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_AcknowledgeJob.html AWS API Reference> for AcknowledgeJob.
+module Network.AWS.CodePipeline.AcknowledgeJob
+    (
+    -- * Creating a Request
+      acknowledgeJob
+    , AcknowledgeJob
+    -- * Request Lenses
+    , ajJobId
+    , ajNonce
+
+    -- * Destructuring the Response
+    , acknowledgeJobResponse
+    , AcknowledgeJobResponse
+    -- * Response Lenses
+    , ajrsStatus
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of an acknowledge job action.
+--
+-- /See:/ 'acknowledgeJob' smart constructor.
+data AcknowledgeJob = AcknowledgeJob'
+    { _ajJobId :: !Text
+    , _ajNonce :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AcknowledgeJob' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ajJobId'
+--
+-- * 'ajNonce'
+acknowledgeJob
+    :: Text -- ^ 'ajJobId'
+    -> Text -- ^ 'ajNonce'
+    -> AcknowledgeJob
+acknowledgeJob pJobId_ pNonce_ =
+    AcknowledgeJob'
+    { _ajJobId = pJobId_
+    , _ajNonce = pNonce_
+    }
+
+-- | The unique system-generated ID of the job for which you want to confirm
+-- receipt.
+ajJobId :: Lens' AcknowledgeJob Text
+ajJobId = lens _ajJobId (\ s a -> s{_ajJobId = a});
+
+-- | A system-generated random number that AWS CodePipeline uses to ensure
+-- that the job is being worked on by only one job worker. This number must
+-- be returned in the response.
+ajNonce :: Lens' AcknowledgeJob Text
+ajNonce = lens _ajNonce (\ s a -> s{_ajNonce = a});
+
+instance AWSRequest AcknowledgeJob where
+        type Sv AcknowledgeJob = CodePipeline
+        type Rs AcknowledgeJob = AcknowledgeJobResponse
+        request = postJSON
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 AcknowledgeJobResponse' <$> (pure (fromEnum s)))
+
+instance ToHeaders AcknowledgeJob where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.AcknowledgeJob" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON AcknowledgeJob where
+        toJSON AcknowledgeJob'{..}
+          = object ["jobId" .= _ajJobId, "nonce" .= _ajNonce]
+
+instance ToPath AcknowledgeJob where
+        toPath = const "/"
+
+instance ToQuery AcknowledgeJob where
+        toQuery = const mempty
+
+-- | Represents the output of an acknowledge job action.
+--
+-- /See:/ 'acknowledgeJobResponse' smart constructor.
+newtype AcknowledgeJobResponse = AcknowledgeJobResponse'
+    { _ajrsStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AcknowledgeJobResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ajrsStatus'
+acknowledgeJobResponse
+    :: Int -- ^ 'ajrsStatus'
+    -> AcknowledgeJobResponse
+acknowledgeJobResponse pStatus_ =
+    AcknowledgeJobResponse'
+    { _ajrsStatus = pStatus_
+    }
+
+-- | The response status code.
+ajrsStatus :: Lens' AcknowledgeJobResponse Int
+ajrsStatus = lens _ajrsStatus (\ s a -> s{_ajrsStatus = a});
diff --git a/gen/Network/AWS/CodePipeline/AcknowledgeThirdPartyJob.hs b/gen/Network/AWS/CodePipeline/AcknowledgeThirdPartyJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/AcknowledgeThirdPartyJob.hs
@@ -0,0 +1,149 @@
+{-# 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.CodePipeline.AcknowledgeThirdPartyJob
+-- Copyright   : (c) 2013-2015 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)
+--
+-- Confirms a job worker has received the specified job. Only used for
+-- partner actions.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_AcknowledgeThirdPartyJob.html AWS API Reference> for AcknowledgeThirdPartyJob.
+module Network.AWS.CodePipeline.AcknowledgeThirdPartyJob
+    (
+    -- * Creating a Request
+      acknowledgeThirdPartyJob
+    , AcknowledgeThirdPartyJob
+    -- * Request Lenses
+    , atpjJobId
+    , atpjNonce
+    , atpjClientToken
+
+    -- * Destructuring the Response
+    , acknowledgeThirdPartyJobResponse
+    , AcknowledgeThirdPartyJobResponse
+    -- * Response Lenses
+    , atpjrsStatus
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of an acknowledge third party job action.
+--
+-- /See:/ 'acknowledgeThirdPartyJob' smart constructor.
+data AcknowledgeThirdPartyJob = AcknowledgeThirdPartyJob'
+    { _atpjJobId       :: !Text
+    , _atpjNonce       :: !Text
+    , _atpjClientToken :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AcknowledgeThirdPartyJob' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'atpjJobId'
+--
+-- * 'atpjNonce'
+--
+-- * 'atpjClientToken'
+acknowledgeThirdPartyJob
+    :: Text -- ^ 'atpjJobId'
+    -> Text -- ^ 'atpjNonce'
+    -> Text -- ^ 'atpjClientToken'
+    -> AcknowledgeThirdPartyJob
+acknowledgeThirdPartyJob pJobId_ pNonce_ pClientToken_ =
+    AcknowledgeThirdPartyJob'
+    { _atpjJobId = pJobId_
+    , _atpjNonce = pNonce_
+    , _atpjClientToken = pClientToken_
+    }
+
+-- | The unique system-generated ID of the job.
+atpjJobId :: Lens' AcknowledgeThirdPartyJob Text
+atpjJobId = lens _atpjJobId (\ s a -> s{_atpjJobId = a});
+
+-- | A system-generated random number that AWS CodePipeline uses to ensure
+-- that the job is being worked on by only one job worker. This number must
+-- be returned in the response.
+atpjNonce :: Lens' AcknowledgeThirdPartyJob Text
+atpjNonce = lens _atpjNonce (\ s a -> s{_atpjNonce = a});
+
+-- | The clientToken portion of the clientId and clientToken pair used to
+-- verify that the calling entity is allowed access to the job and its
+-- details.
+atpjClientToken :: Lens' AcknowledgeThirdPartyJob Text
+atpjClientToken = lens _atpjClientToken (\ s a -> s{_atpjClientToken = a});
+
+instance AWSRequest AcknowledgeThirdPartyJob where
+        type Sv AcknowledgeThirdPartyJob = CodePipeline
+        type Rs AcknowledgeThirdPartyJob =
+             AcknowledgeThirdPartyJobResponse
+        request = postJSON
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 AcknowledgeThirdPartyJobResponse' <$>
+                   (pure (fromEnum s)))
+
+instance ToHeaders AcknowledgeThirdPartyJob where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.AcknowledgeThirdPartyJob" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON AcknowledgeThirdPartyJob where
+        toJSON AcknowledgeThirdPartyJob'{..}
+          = object
+              ["jobId" .= _atpjJobId, "nonce" .= _atpjNonce,
+               "clientToken" .= _atpjClientToken]
+
+instance ToPath AcknowledgeThirdPartyJob where
+        toPath = const "/"
+
+instance ToQuery AcknowledgeThirdPartyJob where
+        toQuery = const mempty
+
+-- | Represents the output of an acknowledge third party job action.
+--
+-- /See:/ 'acknowledgeThirdPartyJobResponse' smart constructor.
+newtype AcknowledgeThirdPartyJobResponse = AcknowledgeThirdPartyJobResponse'
+    { _atpjrsStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AcknowledgeThirdPartyJobResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'atpjrsStatus'
+acknowledgeThirdPartyJobResponse
+    :: Int -- ^ 'atpjrsStatus'
+    -> AcknowledgeThirdPartyJobResponse
+acknowledgeThirdPartyJobResponse pStatus_ =
+    AcknowledgeThirdPartyJobResponse'
+    { _atpjrsStatus = pStatus_
+    }
+
+-- | The response status code.
+atpjrsStatus :: Lens' AcknowledgeThirdPartyJobResponse Int
+atpjrsStatus = lens _atpjrsStatus (\ s a -> s{_atpjrsStatus = a});
diff --git a/gen/Network/AWS/CodePipeline/CreateCustomActionType.hs b/gen/Network/AWS/CodePipeline/CreateCustomActionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/CreateCustomActionType.hs
@@ -0,0 +1,205 @@
+{-# 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.CodePipeline.CreateCustomActionType
+-- Copyright   : (c) 2013-2015 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 new custom action that can be used in all pipelines associated
+-- with the AWS account. Only used for custom actions.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_CreateCustomActionType.html AWS API Reference> for CreateCustomActionType.
+module Network.AWS.CodePipeline.CreateCustomActionType
+    (
+    -- * Creating a Request
+      createCustomActionType
+    , CreateCustomActionType
+    -- * Request Lenses
+    , ccatSettings
+    , ccatConfigurationProperties
+    , ccatCategory
+    , ccatProvider
+    , ccatVersion
+    , ccatInputArtifactDetails
+    , ccatOutputArtifactDetails
+
+    -- * Destructuring the Response
+    , createCustomActionTypeResponse
+    , CreateCustomActionTypeResponse
+    -- * Response Lenses
+    , ccatrsStatus
+    , ccatrsActionType
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a create custom action operation.
+--
+-- /See:/ 'createCustomActionType' smart constructor.
+data CreateCustomActionType = CreateCustomActionType'
+    { _ccatSettings                :: !(Maybe ActionTypeSettings)
+    , _ccatConfigurationProperties :: !(Maybe [ActionConfigurationProperty])
+    , _ccatCategory                :: !ActionCategory
+    , _ccatProvider                :: !Text
+    , _ccatVersion                 :: !Text
+    , _ccatInputArtifactDetails    :: !ArtifactDetails
+    , _ccatOutputArtifactDetails   :: !ArtifactDetails
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateCustomActionType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccatSettings'
+--
+-- * 'ccatConfigurationProperties'
+--
+-- * 'ccatCategory'
+--
+-- * 'ccatProvider'
+--
+-- * 'ccatVersion'
+--
+-- * 'ccatInputArtifactDetails'
+--
+-- * 'ccatOutputArtifactDetails'
+createCustomActionType
+    :: ActionCategory -- ^ 'ccatCategory'
+    -> Text -- ^ 'ccatProvider'
+    -> Text -- ^ 'ccatVersion'
+    -> ArtifactDetails -- ^ 'ccatInputArtifactDetails'
+    -> ArtifactDetails -- ^ 'ccatOutputArtifactDetails'
+    -> CreateCustomActionType
+createCustomActionType pCategory_ pProvider_ pVersion_ pInputArtifactDetails_ pOutputArtifactDetails_ =
+    CreateCustomActionType'
+    { _ccatSettings = Nothing
+    , _ccatConfigurationProperties = Nothing
+    , _ccatCategory = pCategory_
+    , _ccatProvider = pProvider_
+    , _ccatVersion = pVersion_
+    , _ccatInputArtifactDetails = pInputArtifactDetails_
+    , _ccatOutputArtifactDetails = pOutputArtifactDetails_
+    }
+
+-- | Undocumented member.
+ccatSettings :: Lens' CreateCustomActionType (Maybe ActionTypeSettings)
+ccatSettings = lens _ccatSettings (\ s a -> s{_ccatSettings = a});
+
+-- | The configuration properties for the custom action.
+ccatConfigurationProperties :: Lens' CreateCustomActionType [ActionConfigurationProperty]
+ccatConfigurationProperties = lens _ccatConfigurationProperties (\ s a -> s{_ccatConfigurationProperties = a}) . _Default . _Coerce;
+
+-- | The category of the custom action, such as a source action or a build
+-- action.
+ccatCategory :: Lens' CreateCustomActionType ActionCategory
+ccatCategory = lens _ccatCategory (\ s a -> s{_ccatCategory = a});
+
+-- | The provider of the service used in the custom action, such as AWS
+-- CodeDeploy.
+ccatProvider :: Lens' CreateCustomActionType Text
+ccatProvider = lens _ccatProvider (\ s a -> s{_ccatProvider = a});
+
+-- | The version number of the custom action.
+--
+-- A newly-created custom action is always assigned a version number of
+-- '1'. This is required.
+ccatVersion :: Lens' CreateCustomActionType Text
+ccatVersion = lens _ccatVersion (\ s a -> s{_ccatVersion = a});
+
+-- | Undocumented member.
+ccatInputArtifactDetails :: Lens' CreateCustomActionType ArtifactDetails
+ccatInputArtifactDetails = lens _ccatInputArtifactDetails (\ s a -> s{_ccatInputArtifactDetails = a});
+
+-- | Undocumented member.
+ccatOutputArtifactDetails :: Lens' CreateCustomActionType ArtifactDetails
+ccatOutputArtifactDetails = lens _ccatOutputArtifactDetails (\ s a -> s{_ccatOutputArtifactDetails = a});
+
+instance AWSRequest CreateCustomActionType where
+        type Sv CreateCustomActionType = CodePipeline
+        type Rs CreateCustomActionType =
+             CreateCustomActionTypeResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateCustomActionTypeResponse' <$>
+                   (pure (fromEnum s)) <*> (x .:> "actionType"))
+
+instance ToHeaders CreateCustomActionType where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.CreateCustomActionType" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateCustomActionType where
+        toJSON CreateCustomActionType'{..}
+          = object
+              ["settings" .= _ccatSettings,
+               "configurationProperties" .=
+                 _ccatConfigurationProperties,
+               "category" .= _ccatCategory,
+               "provider" .= _ccatProvider,
+               "version" .= _ccatVersion,
+               "inputArtifactDetails" .= _ccatInputArtifactDetails,
+               "outputArtifactDetails" .=
+                 _ccatOutputArtifactDetails]
+
+instance ToPath CreateCustomActionType where
+        toPath = const "/"
+
+instance ToQuery CreateCustomActionType where
+        toQuery = const mempty
+
+-- | Represents the output of a create custom action operation.
+--
+-- /See:/ 'createCustomActionTypeResponse' smart constructor.
+data CreateCustomActionTypeResponse = CreateCustomActionTypeResponse'
+    { _ccatrsStatus     :: !Int
+    , _ccatrsActionType :: !ActionType
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateCustomActionTypeResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccatrsStatus'
+--
+-- * 'ccatrsActionType'
+createCustomActionTypeResponse
+    :: Int -- ^ 'ccatrsStatus'
+    -> ActionType -- ^ 'ccatrsActionType'
+    -> CreateCustomActionTypeResponse
+createCustomActionTypeResponse pStatus_ pActionType_ =
+    CreateCustomActionTypeResponse'
+    { _ccatrsStatus = pStatus_
+    , _ccatrsActionType = pActionType_
+    }
+
+-- | The response status code.
+ccatrsStatus :: Lens' CreateCustomActionTypeResponse Int
+ccatrsStatus = lens _ccatrsStatus (\ s a -> s{_ccatrsStatus = a});
+
+-- | Undocumented member.
+ccatrsActionType :: Lens' CreateCustomActionTypeResponse ActionType
+ccatrsActionType = lens _ccatrsActionType (\ s a -> s{_ccatrsActionType = a});
diff --git a/gen/Network/AWS/CodePipeline/CreatePipeline.hs b/gen/Network/AWS/CodePipeline/CreatePipeline.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/CreatePipeline.hs
@@ -0,0 +1,130 @@
+{-# 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.CodePipeline.CreatePipeline
+-- Copyright   : (c) 2013-2015 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 pipeline.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_CreatePipeline.html AWS API Reference> for CreatePipeline.
+module Network.AWS.CodePipeline.CreatePipeline
+    (
+    -- * Creating a Request
+      createPipeline
+    , CreatePipeline
+    -- * Request Lenses
+    , cpPipeline
+
+    -- * Destructuring the Response
+    , createPipelineResponse
+    , CreatePipelineResponse
+    -- * Response Lenses
+    , cprsPipeline
+    , cprsStatus
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a create pipeline action.
+--
+-- /See:/ 'createPipeline' smart constructor.
+newtype CreatePipeline = CreatePipeline'
+    { _cpPipeline :: PipelineDeclaration
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreatePipeline' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpPipeline'
+createPipeline
+    :: PipelineDeclaration -- ^ 'cpPipeline'
+    -> CreatePipeline
+createPipeline pPipeline_ =
+    CreatePipeline'
+    { _cpPipeline = pPipeline_
+    }
+
+-- | Undocumented member.
+cpPipeline :: Lens' CreatePipeline PipelineDeclaration
+cpPipeline = lens _cpPipeline (\ s a -> s{_cpPipeline = a});
+
+instance AWSRequest CreatePipeline where
+        type Sv CreatePipeline = CodePipeline
+        type Rs CreatePipeline = CreatePipelineResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreatePipelineResponse' <$>
+                   (x .?> "pipeline") <*> (pure (fromEnum s)))
+
+instance ToHeaders CreatePipeline where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.CreatePipeline" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreatePipeline where
+        toJSON CreatePipeline'{..}
+          = object ["pipeline" .= _cpPipeline]
+
+instance ToPath CreatePipeline where
+        toPath = const "/"
+
+instance ToQuery CreatePipeline where
+        toQuery = const mempty
+
+-- | Represents the output of a create pipeline action.
+--
+-- /See:/ 'createPipelineResponse' smart constructor.
+data CreatePipelineResponse = CreatePipelineResponse'
+    { _cprsPipeline :: !(Maybe PipelineDeclaration)
+    , _cprsStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreatePipelineResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cprsPipeline'
+--
+-- * 'cprsStatus'
+createPipelineResponse
+    :: Int -- ^ 'cprsStatus'
+    -> CreatePipelineResponse
+createPipelineResponse pStatus_ =
+    CreatePipelineResponse'
+    { _cprsPipeline = Nothing
+    , _cprsStatus = pStatus_
+    }
+
+-- | Undocumented member.
+cprsPipeline :: Lens' CreatePipelineResponse (Maybe PipelineDeclaration)
+cprsPipeline = lens _cprsPipeline (\ s a -> s{_cprsPipeline = a});
+
+-- | The response status code.
+cprsStatus :: Lens' CreatePipelineResponse Int
+cprsStatus = lens _cprsStatus (\ s a -> s{_cprsStatus = a});
diff --git a/gen/Network/AWS/CodePipeline/DeleteCustomActionType.hs b/gen/Network/AWS/CodePipeline/DeleteCustomActionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/DeleteCustomActionType.hs
@@ -0,0 +1,135 @@
+{-# 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.CodePipeline.DeleteCustomActionType
+-- Copyright   : (c) 2013-2015 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)
+--
+-- Marks a custom action as deleted. PollForJobs for the custom action will
+-- fail after the action is marked for deletion. Only used for custom
+-- actions.
+--
+-- You cannot recreate a custom action after it has been deleted unless you
+-- increase the version number of the action.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_DeleteCustomActionType.html AWS API Reference> for DeleteCustomActionType.
+module Network.AWS.CodePipeline.DeleteCustomActionType
+    (
+    -- * Creating a Request
+      deleteCustomActionType
+    , DeleteCustomActionType
+    -- * Request Lenses
+    , dcatCategory
+    , dcatProvider
+    , dcatVersion
+
+    -- * Destructuring the Response
+    , deleteCustomActionTypeResponse
+    , DeleteCustomActionTypeResponse
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a delete custom action operation. The custom
+-- action will be marked as deleted.
+--
+-- /See:/ 'deleteCustomActionType' smart constructor.
+data DeleteCustomActionType = DeleteCustomActionType'
+    { _dcatCategory :: !ActionCategory
+    , _dcatProvider :: !Text
+    , _dcatVersion  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteCustomActionType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcatCategory'
+--
+-- * 'dcatProvider'
+--
+-- * 'dcatVersion'
+deleteCustomActionType
+    :: ActionCategory -- ^ 'dcatCategory'
+    -> Text -- ^ 'dcatProvider'
+    -> Text -- ^ 'dcatVersion'
+    -> DeleteCustomActionType
+deleteCustomActionType pCategory_ pProvider_ pVersion_ =
+    DeleteCustomActionType'
+    { _dcatCategory = pCategory_
+    , _dcatProvider = pProvider_
+    , _dcatVersion = pVersion_
+    }
+
+-- | The category of the custom action that you want to delete, such as
+-- source or deploy.
+dcatCategory :: Lens' DeleteCustomActionType ActionCategory
+dcatCategory = lens _dcatCategory (\ s a -> s{_dcatCategory = a});
+
+-- | The provider of the service used in the custom action, such as AWS
+-- CodeDeploy.
+dcatProvider :: Lens' DeleteCustomActionType Text
+dcatProvider = lens _dcatProvider (\ s a -> s{_dcatProvider = a});
+
+-- | The version of the custom action to delete.
+dcatVersion :: Lens' DeleteCustomActionType Text
+dcatVersion = lens _dcatVersion (\ s a -> s{_dcatVersion = a});
+
+instance AWSRequest DeleteCustomActionType where
+        type Sv DeleteCustomActionType = CodePipeline
+        type Rs DeleteCustomActionType =
+             DeleteCustomActionTypeResponse
+        request = postJSON
+        response
+          = receiveNull DeleteCustomActionTypeResponse'
+
+instance ToHeaders DeleteCustomActionType where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.DeleteCustomActionType" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteCustomActionType where
+        toJSON DeleteCustomActionType'{..}
+          = object
+              ["category" .= _dcatCategory,
+               "provider" .= _dcatProvider,
+               "version" .= _dcatVersion]
+
+instance ToPath DeleteCustomActionType where
+        toPath = const "/"
+
+instance ToQuery DeleteCustomActionType where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteCustomActionTypeResponse' smart constructor.
+data DeleteCustomActionTypeResponse =
+    DeleteCustomActionTypeResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteCustomActionTypeResponse' with the minimum fields required to make a request.
+--
+deleteCustomActionTypeResponse
+    :: DeleteCustomActionTypeResponse
+deleteCustomActionTypeResponse = DeleteCustomActionTypeResponse'
diff --git a/gen/Network/AWS/CodePipeline/DeletePipeline.hs b/gen/Network/AWS/CodePipeline/DeletePipeline.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/DeletePipeline.hs
@@ -0,0 +1,102 @@
+{-# 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.CodePipeline.DeletePipeline
+-- Copyright   : (c) 2013-2015 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 the specified pipeline.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_DeletePipeline.html AWS API Reference> for DeletePipeline.
+module Network.AWS.CodePipeline.DeletePipeline
+    (
+    -- * Creating a Request
+      deletePipeline
+    , DeletePipeline
+    -- * Request Lenses
+    , dpName
+
+    -- * Destructuring the Response
+    , deletePipelineResponse
+    , DeletePipelineResponse
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a delete pipeline action.
+--
+-- /See:/ 'deletePipeline' smart constructor.
+newtype DeletePipeline = DeletePipeline'
+    { _dpName :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeletePipeline' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dpName'
+deletePipeline
+    :: Text -- ^ 'dpName'
+    -> DeletePipeline
+deletePipeline pName_ =
+    DeletePipeline'
+    { _dpName = pName_
+    }
+
+-- | The name of the pipeline to be deleted.
+dpName :: Lens' DeletePipeline Text
+dpName = lens _dpName (\ s a -> s{_dpName = a});
+
+instance AWSRequest DeletePipeline where
+        type Sv DeletePipeline = CodePipeline
+        type Rs DeletePipeline = DeletePipelineResponse
+        request = postJSON
+        response = receiveNull DeletePipelineResponse'
+
+instance ToHeaders DeletePipeline where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.DeletePipeline" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeletePipeline where
+        toJSON DeletePipeline'{..}
+          = object ["name" .= _dpName]
+
+instance ToPath DeletePipeline where
+        toPath = const "/"
+
+instance ToQuery DeletePipeline where
+        toQuery = const mempty
+
+-- | /See:/ 'deletePipelineResponse' smart constructor.
+data DeletePipelineResponse =
+    DeletePipelineResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeletePipelineResponse' with the minimum fields required to make a request.
+--
+deletePipelineResponse
+    :: DeletePipelineResponse
+deletePipelineResponse = DeletePipelineResponse'
diff --git a/gen/Network/AWS/CodePipeline/DisableStageTransition.hs b/gen/Network/AWS/CodePipeline/DisableStageTransition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/DisableStageTransition.hs
@@ -0,0 +1,146 @@
+{-# 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.CodePipeline.DisableStageTransition
+-- Copyright   : (c) 2013-2015 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)
+--
+-- Prevents artifacts in a pipeline from transitioning to the next stage in
+-- the pipeline.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_DisableStageTransition.html AWS API Reference> for DisableStageTransition.
+module Network.AWS.CodePipeline.DisableStageTransition
+    (
+    -- * Creating a Request
+      disableStageTransition
+    , DisableStageTransition
+    -- * Request Lenses
+    , dstPipelineName
+    , dstStageName
+    , dstTransitionType
+    , dstReason
+
+    -- * Destructuring the Response
+    , disableStageTransitionResponse
+    , DisableStageTransitionResponse
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a disable stage transition input action.
+--
+-- /See:/ 'disableStageTransition' smart constructor.
+data DisableStageTransition = DisableStageTransition'
+    { _dstPipelineName   :: !Text
+    , _dstStageName      :: !Text
+    , _dstTransitionType :: !StageTransitionType
+    , _dstReason         :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DisableStageTransition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dstPipelineName'
+--
+-- * 'dstStageName'
+--
+-- * 'dstTransitionType'
+--
+-- * 'dstReason'
+disableStageTransition
+    :: Text -- ^ 'dstPipelineName'
+    -> Text -- ^ 'dstStageName'
+    -> StageTransitionType -- ^ 'dstTransitionType'
+    -> Text -- ^ 'dstReason'
+    -> DisableStageTransition
+disableStageTransition pPipelineName_ pStageName_ pTransitionType_ pReason_ =
+    DisableStageTransition'
+    { _dstPipelineName = pPipelineName_
+    , _dstStageName = pStageName_
+    , _dstTransitionType = pTransitionType_
+    , _dstReason = pReason_
+    }
+
+-- | The name of the pipeline in which you want to disable the flow of
+-- artifacts from one stage to another.
+dstPipelineName :: Lens' DisableStageTransition Text
+dstPipelineName = lens _dstPipelineName (\ s a -> s{_dstPipelineName = a});
+
+-- | The name of the stage where you want to disable the inbound or outbound
+-- transition of artifacts.
+dstStageName :: Lens' DisableStageTransition Text
+dstStageName = lens _dstStageName (\ s a -> s{_dstStageName = a});
+
+-- | Specifies whether artifacts will be prevented from transitioning into
+-- the stage and being processed by the actions in that stage (inbound), or
+-- prevented from transitioning from the stage after they have been
+-- processed by the actions in that stage (outbound).
+dstTransitionType :: Lens' DisableStageTransition StageTransitionType
+dstTransitionType = lens _dstTransitionType (\ s a -> s{_dstTransitionType = a});
+
+-- | The reason given to the user why a stage is disabled, such as waiting
+-- for manual approval or manual tests. This message is displayed in the
+-- pipeline console UI.
+dstReason :: Lens' DisableStageTransition Text
+dstReason = lens _dstReason (\ s a -> s{_dstReason = a});
+
+instance AWSRequest DisableStageTransition where
+        type Sv DisableStageTransition = CodePipeline
+        type Rs DisableStageTransition =
+             DisableStageTransitionResponse
+        request = postJSON
+        response
+          = receiveNull DisableStageTransitionResponse'
+
+instance ToHeaders DisableStageTransition where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.DisableStageTransition" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DisableStageTransition where
+        toJSON DisableStageTransition'{..}
+          = object
+              ["pipelineName" .= _dstPipelineName,
+               "stageName" .= _dstStageName,
+               "transitionType" .= _dstTransitionType,
+               "reason" .= _dstReason]
+
+instance ToPath DisableStageTransition where
+        toPath = const "/"
+
+instance ToQuery DisableStageTransition where
+        toQuery = const mempty
+
+-- | /See:/ 'disableStageTransitionResponse' smart constructor.
+data DisableStageTransitionResponse =
+    DisableStageTransitionResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DisableStageTransitionResponse' with the minimum fields required to make a request.
+--
+disableStageTransitionResponse
+    :: DisableStageTransitionResponse
+disableStageTransitionResponse = DisableStageTransitionResponse'
diff --git a/gen/Network/AWS/CodePipeline/EnableStageTransition.hs b/gen/Network/AWS/CodePipeline/EnableStageTransition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/EnableStageTransition.hs
@@ -0,0 +1,132 @@
+{-# 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.CodePipeline.EnableStageTransition
+-- Copyright   : (c) 2013-2015 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)
+--
+-- Enables artifacts in a pipeline to transition to a stage in a pipeline.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_EnableStageTransition.html AWS API Reference> for EnableStageTransition.
+module Network.AWS.CodePipeline.EnableStageTransition
+    (
+    -- * Creating a Request
+      enableStageTransition
+    , EnableStageTransition
+    -- * Request Lenses
+    , estPipelineName
+    , estStageName
+    , estTransitionType
+
+    -- * Destructuring the Response
+    , enableStageTransitionResponse
+    , EnableStageTransitionResponse
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of an enable stage transition action.
+--
+-- /See:/ 'enableStageTransition' smart constructor.
+data EnableStageTransition = EnableStageTransition'
+    { _estPipelineName   :: !Text
+    , _estStageName      :: !Text
+    , _estTransitionType :: !StageTransitionType
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnableStageTransition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'estPipelineName'
+--
+-- * 'estStageName'
+--
+-- * 'estTransitionType'
+enableStageTransition
+    :: Text -- ^ 'estPipelineName'
+    -> Text -- ^ 'estStageName'
+    -> StageTransitionType -- ^ 'estTransitionType'
+    -> EnableStageTransition
+enableStageTransition pPipelineName_ pStageName_ pTransitionType_ =
+    EnableStageTransition'
+    { _estPipelineName = pPipelineName_
+    , _estStageName = pStageName_
+    , _estTransitionType = pTransitionType_
+    }
+
+-- | The name of the pipeline in which you want to enable the flow of
+-- artifacts from one stage to another.
+estPipelineName :: Lens' EnableStageTransition Text
+estPipelineName = lens _estPipelineName (\ s a -> s{_estPipelineName = a});
+
+-- | The name of the stage where you want to enable the transition of
+-- artifacts, either into the stage (inbound) or from that stage to the
+-- next stage (outbound).
+estStageName :: Lens' EnableStageTransition Text
+estStageName = lens _estStageName (\ s a -> s{_estStageName = a});
+
+-- | Specifies whether artifacts will be allowed to enter the stage and be
+-- processed by the actions in that stage (inbound) or whether
+-- already-processed artifacts will be allowed to transition to the next
+-- stage (outbound).
+estTransitionType :: Lens' EnableStageTransition StageTransitionType
+estTransitionType = lens _estTransitionType (\ s a -> s{_estTransitionType = a});
+
+instance AWSRequest EnableStageTransition where
+        type Sv EnableStageTransition = CodePipeline
+        type Rs EnableStageTransition =
+             EnableStageTransitionResponse
+        request = postJSON
+        response = receiveNull EnableStageTransitionResponse'
+
+instance ToHeaders EnableStageTransition where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.EnableStageTransition" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON EnableStageTransition where
+        toJSON EnableStageTransition'{..}
+          = object
+              ["pipelineName" .= _estPipelineName,
+               "stageName" .= _estStageName,
+               "transitionType" .= _estTransitionType]
+
+instance ToPath EnableStageTransition where
+        toPath = const "/"
+
+instance ToQuery EnableStageTransition where
+        toQuery = const mempty
+
+-- | /See:/ 'enableStageTransitionResponse' smart constructor.
+data EnableStageTransitionResponse =
+    EnableStageTransitionResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnableStageTransitionResponse' with the minimum fields required to make a request.
+--
+enableStageTransitionResponse
+    :: EnableStageTransitionResponse
+enableStageTransitionResponse = EnableStageTransitionResponse'
diff --git a/gen/Network/AWS/CodePipeline/GetJobDetails.hs b/gen/Network/AWS/CodePipeline/GetJobDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/GetJobDetails.hs
@@ -0,0 +1,139 @@
+{-# 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.CodePipeline.GetJobDetails
+-- Copyright   : (c) 2013-2015 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 information about a job. Only used for custom actions.
+--
+-- When this API is called, AWS CodePipeline returns temporary credentials
+-- for the Amazon S3 bucket used to store artifacts for the pipeline, if
+-- the action requires access to that Amazon S3 bucket for input or output
+-- artifacts. Additionally, this API returns any secret values defined for
+-- the action.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_GetJobDetails.html AWS API Reference> for GetJobDetails.
+module Network.AWS.CodePipeline.GetJobDetails
+    (
+    -- * Creating a Request
+      getJobDetails
+    , GetJobDetails
+    -- * Request Lenses
+    , gjdJobId
+
+    -- * Destructuring the Response
+    , getJobDetailsResponse
+    , GetJobDetailsResponse
+    -- * Response Lenses
+    , gjdrsJobDetails
+    , gjdrsStatus
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a get job details action.
+--
+-- /See:/ 'getJobDetails' smart constructor.
+newtype GetJobDetails = GetJobDetails'
+    { _gjdJobId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetJobDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gjdJobId'
+getJobDetails
+    :: Text -- ^ 'gjdJobId'
+    -> GetJobDetails
+getJobDetails pJobId_ =
+    GetJobDetails'
+    { _gjdJobId = pJobId_
+    }
+
+-- | The unique system-generated ID for the job.
+gjdJobId :: Lens' GetJobDetails Text
+gjdJobId = lens _gjdJobId (\ s a -> s{_gjdJobId = a});
+
+instance AWSRequest GetJobDetails where
+        type Sv GetJobDetails = CodePipeline
+        type Rs GetJobDetails = GetJobDetailsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetJobDetailsResponse' <$>
+                   (x .?> "jobDetails") <*> (pure (fromEnum s)))
+
+instance ToHeaders GetJobDetails where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.GetJobDetails" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetJobDetails where
+        toJSON GetJobDetails'{..}
+          = object ["jobId" .= _gjdJobId]
+
+instance ToPath GetJobDetails where
+        toPath = const "/"
+
+instance ToQuery GetJobDetails where
+        toQuery = const mempty
+
+-- | Represents the output of a get job details action.
+--
+-- /See:/ 'getJobDetailsResponse' smart constructor.
+data GetJobDetailsResponse = GetJobDetailsResponse'
+    { _gjdrsJobDetails :: !(Maybe JobDetails)
+    , _gjdrsStatus     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetJobDetailsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gjdrsJobDetails'
+--
+-- * 'gjdrsStatus'
+getJobDetailsResponse
+    :: Int -- ^ 'gjdrsStatus'
+    -> GetJobDetailsResponse
+getJobDetailsResponse pStatus_ =
+    GetJobDetailsResponse'
+    { _gjdrsJobDetails = Nothing
+    , _gjdrsStatus = pStatus_
+    }
+
+-- | The details of the job.
+--
+-- If AWSSessionCredentials is used, a long-running job can call
+-- GetJobDetails again to obtain new credentials.
+gjdrsJobDetails :: Lens' GetJobDetailsResponse (Maybe JobDetails)
+gjdrsJobDetails = lens _gjdrsJobDetails (\ s a -> s{_gjdrsJobDetails = a});
+
+-- | The response status code.
+gjdrsStatus :: Lens' GetJobDetailsResponse Int
+gjdrsStatus = lens _gjdrsStatus (\ s a -> s{_gjdrsStatus = a});
diff --git a/gen/Network/AWS/CodePipeline/GetPipeline.hs b/gen/Network/AWS/CodePipeline/GetPipeline.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/GetPipeline.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.CodePipeline.GetPipeline
+-- Copyright   : (c) 2013-2015 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 metadata, structure, stages, and actions of a pipeline. Can
+-- be used to return the entire structure of a pipeline in JSON format,
+-- which can then be modified and used to update the pipeline structure
+-- with UpdatePipeline.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_GetPipeline.html AWS API Reference> for GetPipeline.
+module Network.AWS.CodePipeline.GetPipeline
+    (
+    -- * Creating a Request
+      getPipeline
+    , GetPipeline
+    -- * Request Lenses
+    , gpVersion
+    , gpName
+
+    -- * Destructuring the Response
+    , getPipelineResponse
+    , GetPipelineResponse
+    -- * Response Lenses
+    , gprsPipeline
+    , gprsStatus
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a get pipeline action.
+--
+-- /See:/ 'getPipeline' smart constructor.
+data GetPipeline = GetPipeline'
+    { _gpVersion :: !(Maybe Nat)
+    , _gpName    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetPipeline' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gpVersion'
+--
+-- * 'gpName'
+getPipeline
+    :: Text -- ^ 'gpName'
+    -> GetPipeline
+getPipeline pName_ =
+    GetPipeline'
+    { _gpVersion = Nothing
+    , _gpName = pName_
+    }
+
+-- | The version number of the pipeline. If you do not specify a version,
+-- defaults to the most current version.
+gpVersion :: Lens' GetPipeline (Maybe Natural)
+gpVersion = lens _gpVersion (\ s a -> s{_gpVersion = a}) . mapping _Nat;
+
+-- | The name of the pipeline for which you want to get information. Pipeline
+-- names must be unique under an Amazon Web Services (AWS) user account.
+gpName :: Lens' GetPipeline Text
+gpName = lens _gpName (\ s a -> s{_gpName = a});
+
+instance AWSRequest GetPipeline where
+        type Sv GetPipeline = CodePipeline
+        type Rs GetPipeline = GetPipelineResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetPipelineResponse' <$>
+                   (x .?> "pipeline") <*> (pure (fromEnum s)))
+
+instance ToHeaders GetPipeline where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.GetPipeline" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetPipeline where
+        toJSON GetPipeline'{..}
+          = object ["version" .= _gpVersion, "name" .= _gpName]
+
+instance ToPath GetPipeline where
+        toPath = const "/"
+
+instance ToQuery GetPipeline where
+        toQuery = const mempty
+
+-- | Represents the output of a get pipeline action.
+--
+-- /See:/ 'getPipelineResponse' smart constructor.
+data GetPipelineResponse = GetPipelineResponse'
+    { _gprsPipeline :: !(Maybe PipelineDeclaration)
+    , _gprsStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetPipelineResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gprsPipeline'
+--
+-- * 'gprsStatus'
+getPipelineResponse
+    :: Int -- ^ 'gprsStatus'
+    -> GetPipelineResponse
+getPipelineResponse pStatus_ =
+    GetPipelineResponse'
+    { _gprsPipeline = Nothing
+    , _gprsStatus = pStatus_
+    }
+
+-- | Undocumented member.
+gprsPipeline :: Lens' GetPipelineResponse (Maybe PipelineDeclaration)
+gprsPipeline = lens _gprsPipeline (\ s a -> s{_gprsPipeline = a});
+
+-- | The response status code.
+gprsStatus :: Lens' GetPipelineResponse Int
+gprsStatus = lens _gprsStatus (\ s a -> s{_gprsStatus = a});
diff --git a/gen/Network/AWS/CodePipeline/GetPipelineState.hs b/gen/Network/AWS/CodePipeline/GetPipelineState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/GetPipelineState.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.CodePipeline.GetPipelineState
+-- Copyright   : (c) 2013-2015 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 information about the state of a pipeline, including the stages,
+-- actions, and details about the last run of the pipeline.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_GetPipelineState.html AWS API Reference> for GetPipelineState.
+module Network.AWS.CodePipeline.GetPipelineState
+    (
+    -- * Creating a Request
+      getPipelineState
+    , GetPipelineState
+    -- * Request Lenses
+    , gpsName
+
+    -- * Destructuring the Response
+    , getPipelineStateResponse
+    , GetPipelineStateResponse
+    -- * Response Lenses
+    , gpsrsPipelineName
+    , gpsrsPipelineVersion
+    , gpsrsCreated
+    , gpsrsStageStates
+    , gpsrsUpdated
+    , gpsrsStatus
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a get pipeline state action.
+--
+-- /See:/ 'getPipelineState' smart constructor.
+newtype GetPipelineState = GetPipelineState'
+    { _gpsName :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetPipelineState' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gpsName'
+getPipelineState
+    :: Text -- ^ 'gpsName'
+    -> GetPipelineState
+getPipelineState pName_ =
+    GetPipelineState'
+    { _gpsName = pName_
+    }
+
+-- | The name of the pipeline about which you want to get information.
+gpsName :: Lens' GetPipelineState Text
+gpsName = lens _gpsName (\ s a -> s{_gpsName = a});
+
+instance AWSRequest GetPipelineState where
+        type Sv GetPipelineState = CodePipeline
+        type Rs GetPipelineState = GetPipelineStateResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetPipelineStateResponse' <$>
+                   (x .?> "pipelineName") <*> (x .?> "pipelineVersion")
+                     <*> (x .?> "created")
+                     <*> (x .?> "stageStates" .!@ mempty)
+                     <*> (x .?> "updated")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders GetPipelineState where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.GetPipelineState" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetPipelineState where
+        toJSON GetPipelineState'{..}
+          = object ["name" .= _gpsName]
+
+instance ToPath GetPipelineState where
+        toPath = const "/"
+
+instance ToQuery GetPipelineState where
+        toQuery = const mempty
+
+-- | Represents the output of a get pipeline state action.
+--
+-- /See:/ 'getPipelineStateResponse' smart constructor.
+data GetPipelineStateResponse = GetPipelineStateResponse'
+    { _gpsrsPipelineName    :: !(Maybe Text)
+    , _gpsrsPipelineVersion :: !(Maybe Nat)
+    , _gpsrsCreated         :: !(Maybe POSIX)
+    , _gpsrsStageStates     :: !(Maybe [StageState])
+    , _gpsrsUpdated         :: !(Maybe POSIX)
+    , _gpsrsStatus          :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetPipelineStateResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gpsrsPipelineName'
+--
+-- * 'gpsrsPipelineVersion'
+--
+-- * 'gpsrsCreated'
+--
+-- * 'gpsrsStageStates'
+--
+-- * 'gpsrsUpdated'
+--
+-- * 'gpsrsStatus'
+getPipelineStateResponse
+    :: Int -- ^ 'gpsrsStatus'
+    -> GetPipelineStateResponse
+getPipelineStateResponse pStatus_ =
+    GetPipelineStateResponse'
+    { _gpsrsPipelineName = Nothing
+    , _gpsrsPipelineVersion = Nothing
+    , _gpsrsCreated = Nothing
+    , _gpsrsStageStates = Nothing
+    , _gpsrsUpdated = Nothing
+    , _gpsrsStatus = pStatus_
+    }
+
+-- | The name of the pipeline for which you want to get the state.
+gpsrsPipelineName :: Lens' GetPipelineStateResponse (Maybe Text)
+gpsrsPipelineName = lens _gpsrsPipelineName (\ s a -> s{_gpsrsPipelineName = a});
+
+-- | The version number of the pipeline.
+--
+-- A newly-created pipeline is always assigned a version number of '1'.
+gpsrsPipelineVersion :: Lens' GetPipelineStateResponse (Maybe Natural)
+gpsrsPipelineVersion = lens _gpsrsPipelineVersion (\ s a -> s{_gpsrsPipelineVersion = a}) . mapping _Nat;
+
+-- | The date and time the pipeline was created, in timestamp format.
+gpsrsCreated :: Lens' GetPipelineStateResponse (Maybe UTCTime)
+gpsrsCreated = lens _gpsrsCreated (\ s a -> s{_gpsrsCreated = a}) . mapping _Time;
+
+-- | A list of the pipeline stage output information, including stage name,
+-- state, most recent run details, whether the stage is disabled, and other
+-- data.
+gpsrsStageStates :: Lens' GetPipelineStateResponse [StageState]
+gpsrsStageStates = lens _gpsrsStageStates (\ s a -> s{_gpsrsStageStates = a}) . _Default . _Coerce;
+
+-- | The date and time the pipeline was last updated, in timestamp format.
+gpsrsUpdated :: Lens' GetPipelineStateResponse (Maybe UTCTime)
+gpsrsUpdated = lens _gpsrsUpdated (\ s a -> s{_gpsrsUpdated = a}) . mapping _Time;
+
+-- | The response status code.
+gpsrsStatus :: Lens' GetPipelineStateResponse Int
+gpsrsStatus = lens _gpsrsStatus (\ s a -> s{_gpsrsStatus = a});
diff --git a/gen/Network/AWS/CodePipeline/GetThirdPartyJobDetails.hs b/gen/Network/AWS/CodePipeline/GetThirdPartyJobDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/GetThirdPartyJobDetails.hs
@@ -0,0 +1,153 @@
+{-# 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.CodePipeline.GetThirdPartyJobDetails
+-- Copyright   : (c) 2013-2015 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)
+--
+-- Requests the details of a job for a third party action. Only used for
+-- partner actions.
+--
+-- When this API is called, AWS CodePipeline returns temporary credentials
+-- for the Amazon S3 bucket used to store artifacts for the pipeline, if
+-- the action requires access to that Amazon S3 bucket for input or output
+-- artifacts. Additionally, this API returns any secret values defined for
+-- the action.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_GetThirdPartyJobDetails.html AWS API Reference> for GetThirdPartyJobDetails.
+module Network.AWS.CodePipeline.GetThirdPartyJobDetails
+    (
+    -- * Creating a Request
+      getThirdPartyJobDetails
+    , GetThirdPartyJobDetails
+    -- * Request Lenses
+    , gtpjdJobId
+    , gtpjdClientToken
+
+    -- * Destructuring the Response
+    , getThirdPartyJobDetailsResponse
+    , GetThirdPartyJobDetailsResponse
+    -- * Response Lenses
+    , gtpjdrsJobDetails
+    , gtpjdrsStatus
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a get third party job details action.
+--
+-- /See:/ 'getThirdPartyJobDetails' smart constructor.
+data GetThirdPartyJobDetails = GetThirdPartyJobDetails'
+    { _gtpjdJobId       :: !Text
+    , _gtpjdClientToken :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetThirdPartyJobDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtpjdJobId'
+--
+-- * 'gtpjdClientToken'
+getThirdPartyJobDetails
+    :: Text -- ^ 'gtpjdJobId'
+    -> Text -- ^ 'gtpjdClientToken'
+    -> GetThirdPartyJobDetails
+getThirdPartyJobDetails pJobId_ pClientToken_ =
+    GetThirdPartyJobDetails'
+    { _gtpjdJobId = pJobId_
+    , _gtpjdClientToken = pClientToken_
+    }
+
+-- | The unique system-generated ID used for identifying the job.
+gtpjdJobId :: Lens' GetThirdPartyJobDetails Text
+gtpjdJobId = lens _gtpjdJobId (\ s a -> s{_gtpjdJobId = a});
+
+-- | The clientToken portion of the clientId and clientToken pair used to
+-- verify that the calling entity is allowed access to the job and its
+-- details.
+gtpjdClientToken :: Lens' GetThirdPartyJobDetails Text
+gtpjdClientToken = lens _gtpjdClientToken (\ s a -> s{_gtpjdClientToken = a});
+
+instance AWSRequest GetThirdPartyJobDetails where
+        type Sv GetThirdPartyJobDetails = CodePipeline
+        type Rs GetThirdPartyJobDetails =
+             GetThirdPartyJobDetailsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetThirdPartyJobDetailsResponse' <$>
+                   (x .?> "jobDetails") <*> (pure (fromEnum s)))
+
+instance ToHeaders GetThirdPartyJobDetails where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.GetThirdPartyJobDetails" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetThirdPartyJobDetails where
+        toJSON GetThirdPartyJobDetails'{..}
+          = object
+              ["jobId" .= _gtpjdJobId,
+               "clientToken" .= _gtpjdClientToken]
+
+instance ToPath GetThirdPartyJobDetails where
+        toPath = const "/"
+
+instance ToQuery GetThirdPartyJobDetails where
+        toQuery = const mempty
+
+-- | Represents the output of a get third party job details action.
+--
+-- /See:/ 'getThirdPartyJobDetailsResponse' smart constructor.
+data GetThirdPartyJobDetailsResponse = GetThirdPartyJobDetailsResponse'
+    { _gtpjdrsJobDetails :: !(Maybe ThirdPartyJobDetails)
+    , _gtpjdrsStatus     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetThirdPartyJobDetailsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtpjdrsJobDetails'
+--
+-- * 'gtpjdrsStatus'
+getThirdPartyJobDetailsResponse
+    :: Int -- ^ 'gtpjdrsStatus'
+    -> GetThirdPartyJobDetailsResponse
+getThirdPartyJobDetailsResponse pStatus_ =
+    GetThirdPartyJobDetailsResponse'
+    { _gtpjdrsJobDetails = Nothing
+    , _gtpjdrsStatus = pStatus_
+    }
+
+-- | The details of the job, including any protected values defined for the
+-- job.
+gtpjdrsJobDetails :: Lens' GetThirdPartyJobDetailsResponse (Maybe ThirdPartyJobDetails)
+gtpjdrsJobDetails = lens _gtpjdrsJobDetails (\ s a -> s{_gtpjdrsJobDetails = a});
+
+-- | The response status code.
+gtpjdrsStatus :: Lens' GetThirdPartyJobDetailsResponse Int
+gtpjdrsStatus = lens _gtpjdrsStatus (\ s a -> s{_gtpjdrsStatus = a});
diff --git a/gen/Network/AWS/CodePipeline/ListActionTypes.hs b/gen/Network/AWS/CodePipeline/ListActionTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/ListActionTypes.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.CodePipeline.ListActionTypes
+-- Copyright   : (c) 2013-2015 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)
+--
+-- Gets a summary of all AWS CodePipeline action types associated with your
+-- account.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_ListActionTypes.html AWS API Reference> for ListActionTypes.
+module Network.AWS.CodePipeline.ListActionTypes
+    (
+    -- * Creating a Request
+      listActionTypes
+    , ListActionTypes
+    -- * Request Lenses
+    , latActionOwnerFilter
+    , latNextToken
+
+    -- * Destructuring the Response
+    , listActionTypesResponse
+    , ListActionTypesResponse
+    -- * Response Lenses
+    , latrsNextToken
+    , latrsStatus
+    , latrsActionTypes
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a list action types action.
+--
+-- /See:/ 'listActionTypes' smart constructor.
+data ListActionTypes = ListActionTypes'
+    { _latActionOwnerFilter :: !(Maybe ActionOwner)
+    , _latNextToken         :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListActionTypes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'latActionOwnerFilter'
+--
+-- * 'latNextToken'
+listActionTypes
+    :: ListActionTypes
+listActionTypes =
+    ListActionTypes'
+    { _latActionOwnerFilter = Nothing
+    , _latNextToken = Nothing
+    }
+
+-- | Filters the list of action types to those created by a specified entity.
+latActionOwnerFilter :: Lens' ListActionTypes (Maybe ActionOwner)
+latActionOwnerFilter = lens _latActionOwnerFilter (\ s a -> s{_latActionOwnerFilter = a});
+
+-- | An identifier that was returned from the previous list action types
+-- call, which can be used to return the next set of action types in the
+-- list.
+latNextToken :: Lens' ListActionTypes (Maybe Text)
+latNextToken = lens _latNextToken (\ s a -> s{_latNextToken = a});
+
+instance AWSRequest ListActionTypes where
+        type Sv ListActionTypes = CodePipeline
+        type Rs ListActionTypes = ListActionTypesResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListActionTypesResponse' <$>
+                   (x .?> "nextToken") <*> (pure (fromEnum s)) <*>
+                     (x .?> "actionTypes" .!@ mempty))
+
+instance ToHeaders ListActionTypes where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.ListActionTypes" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ListActionTypes where
+        toJSON ListActionTypes'{..}
+          = object
+              ["actionOwnerFilter" .= _latActionOwnerFilter,
+               "nextToken" .= _latNextToken]
+
+instance ToPath ListActionTypes where
+        toPath = const "/"
+
+instance ToQuery ListActionTypes where
+        toQuery = const mempty
+
+-- | Represents the output of a list action types action.
+--
+-- /See:/ 'listActionTypesResponse' smart constructor.
+data ListActionTypesResponse = ListActionTypesResponse'
+    { _latrsNextToken   :: !(Maybe Text)
+    , _latrsStatus      :: !Int
+    , _latrsActionTypes :: ![ActionType]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListActionTypesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'latrsNextToken'
+--
+-- * 'latrsStatus'
+--
+-- * 'latrsActionTypes'
+listActionTypesResponse
+    :: Int -- ^ 'latrsStatus'
+    -> ListActionTypesResponse
+listActionTypesResponse pStatus_ =
+    ListActionTypesResponse'
+    { _latrsNextToken = Nothing
+    , _latrsStatus = pStatus_
+    , _latrsActionTypes = mempty
+    }
+
+-- | If the amount of returned information is significantly large, an
+-- identifier is also returned which can be used in a subsequent list
+-- action types call to return the next set of action types in the list.
+latrsNextToken :: Lens' ListActionTypesResponse (Maybe Text)
+latrsNextToken = lens _latrsNextToken (\ s a -> s{_latrsNextToken = a});
+
+-- | The response status code.
+latrsStatus :: Lens' ListActionTypesResponse Int
+latrsStatus = lens _latrsStatus (\ s a -> s{_latrsStatus = a});
+
+-- | Provides details of the action types.
+latrsActionTypes :: Lens' ListActionTypesResponse [ActionType]
+latrsActionTypes = lens _latrsActionTypes (\ s a -> s{_latrsActionTypes = a}) . _Coerce;
diff --git a/gen/Network/AWS/CodePipeline/ListPipelines.hs b/gen/Network/AWS/CodePipeline/ListPipelines.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/ListPipelines.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.CodePipeline.ListPipelines
+-- Copyright   : (c) 2013-2015 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)
+--
+-- Gets a summary of all of the pipelines associated with your account.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_ListPipelines.html AWS API Reference> for ListPipelines.
+module Network.AWS.CodePipeline.ListPipelines
+    (
+    -- * Creating a Request
+      listPipelines
+    , ListPipelines
+    -- * Request Lenses
+    , lpNextToken
+
+    -- * Destructuring the Response
+    , listPipelinesResponse
+    , ListPipelinesResponse
+    -- * Response Lenses
+    , lprsPipelines
+    , lprsNextToken
+    , lprsStatus
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a list pipelines action.
+--
+-- /See:/ 'listPipelines' smart constructor.
+newtype ListPipelines = ListPipelines'
+    { _lpNextToken :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListPipelines' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lpNextToken'
+listPipelines
+    :: ListPipelines
+listPipelines =
+    ListPipelines'
+    { _lpNextToken = Nothing
+    }
+
+-- | An identifier that was returned from the previous list pipelines call,
+-- which can be used to return the next set of pipelines in the list.
+lpNextToken :: Lens' ListPipelines (Maybe Text)
+lpNextToken = lens _lpNextToken (\ s a -> s{_lpNextToken = a});
+
+instance AWSRequest ListPipelines where
+        type Sv ListPipelines = CodePipeline
+        type Rs ListPipelines = ListPipelinesResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListPipelinesResponse' <$>
+                   (x .?> "pipelines" .!@ mempty) <*>
+                     (x .?> "nextToken")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders ListPipelines where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.ListPipelines" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ListPipelines where
+        toJSON ListPipelines'{..}
+          = object ["nextToken" .= _lpNextToken]
+
+instance ToPath ListPipelines where
+        toPath = const "/"
+
+instance ToQuery ListPipelines where
+        toQuery = const mempty
+
+-- | Represents the output of a list pipelines action.
+--
+-- /See:/ 'listPipelinesResponse' smart constructor.
+data ListPipelinesResponse = ListPipelinesResponse'
+    { _lprsPipelines :: !(Maybe [PipelineSummary])
+    , _lprsNextToken :: !(Maybe Text)
+    , _lprsStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListPipelinesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lprsPipelines'
+--
+-- * 'lprsNextToken'
+--
+-- * 'lprsStatus'
+listPipelinesResponse
+    :: Int -- ^ 'lprsStatus'
+    -> ListPipelinesResponse
+listPipelinesResponse pStatus_ =
+    ListPipelinesResponse'
+    { _lprsPipelines = Nothing
+    , _lprsNextToken = Nothing
+    , _lprsStatus = pStatus_
+    }
+
+-- | The list of pipelines.
+lprsPipelines :: Lens' ListPipelinesResponse [PipelineSummary]
+lprsPipelines = lens _lprsPipelines (\ s a -> s{_lprsPipelines = a}) . _Default . _Coerce;
+
+-- | If the amount of returned information is significantly large, an
+-- identifier is also returned which can be used in a subsequent list
+-- pipelines call to return the next set of pipelines in the list.
+lprsNextToken :: Lens' ListPipelinesResponse (Maybe Text)
+lprsNextToken = lens _lprsNextToken (\ s a -> s{_lprsNextToken = a});
+
+-- | The response status code.
+lprsStatus :: Lens' ListPipelinesResponse Int
+lprsStatus = lens _lprsStatus (\ s a -> s{_lprsStatus = a});
diff --git a/gen/Network/AWS/CodePipeline/PollForJobs.hs b/gen/Network/AWS/CodePipeline/PollForJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/PollForJobs.hs
@@ -0,0 +1,160 @@
+{-# 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.CodePipeline.PollForJobs
+-- Copyright   : (c) 2013-2015 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 information about any jobs for AWS CodePipeline to act upon.
+--
+-- When this API is called, AWS CodePipeline returns temporary credentials
+-- for the Amazon S3 bucket used to store artifacts for the pipeline, if
+-- the action requires access to that Amazon S3 bucket for input or output
+-- artifacts. Additionally, this API returns any secret values defined for
+-- the action.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PollForJobs.html AWS API Reference> for PollForJobs.
+module Network.AWS.CodePipeline.PollForJobs
+    (
+    -- * Creating a Request
+      pollForJobs
+    , PollForJobs
+    -- * Request Lenses
+    , pfjMaxBatchSize
+    , pfjQueryParam
+    , pfjActionTypeId
+
+    -- * Destructuring the Response
+    , pollForJobsResponse
+    , PollForJobsResponse
+    -- * Response Lenses
+    , pfjrsJobs
+    , pfjrsStatus
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a poll for jobs action.
+--
+-- /See:/ 'pollForJobs' smart constructor.
+data PollForJobs = PollForJobs'
+    { _pfjMaxBatchSize :: !(Maybe Nat)
+    , _pfjQueryParam   :: !(Maybe (Map Text Text))
+    , _pfjActionTypeId :: !ActionTypeId
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PollForJobs' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pfjMaxBatchSize'
+--
+-- * 'pfjQueryParam'
+--
+-- * 'pfjActionTypeId'
+pollForJobs
+    :: ActionTypeId -- ^ 'pfjActionTypeId'
+    -> PollForJobs
+pollForJobs pActionTypeId_ =
+    PollForJobs'
+    { _pfjMaxBatchSize = Nothing
+    , _pfjQueryParam = Nothing
+    , _pfjActionTypeId = pActionTypeId_
+    }
+
+-- | The maximum number of jobs to return in a poll for jobs call.
+pfjMaxBatchSize :: Lens' PollForJobs (Maybe Natural)
+pfjMaxBatchSize = lens _pfjMaxBatchSize (\ s a -> s{_pfjMaxBatchSize = a}) . mapping _Nat;
+
+-- | A map of property names and values. For an action type with no queryable
+-- properties, this value must be null or an empty map. For an action type
+-- with a queryable property, you must supply that property as a key in the
+-- map. Only jobs whose action configuration matches the mapped value will
+-- be returned.
+pfjQueryParam :: Lens' PollForJobs (HashMap Text Text)
+pfjQueryParam = lens _pfjQueryParam (\ s a -> s{_pfjQueryParam = a}) . _Default . _Map;
+
+-- | Undocumented member.
+pfjActionTypeId :: Lens' PollForJobs ActionTypeId
+pfjActionTypeId = lens _pfjActionTypeId (\ s a -> s{_pfjActionTypeId = a});
+
+instance AWSRequest PollForJobs where
+        type Sv PollForJobs = CodePipeline
+        type Rs PollForJobs = PollForJobsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 PollForJobsResponse' <$>
+                   (x .?> "jobs" .!@ mempty) <*> (pure (fromEnum s)))
+
+instance ToHeaders PollForJobs where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.PollForJobs" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PollForJobs where
+        toJSON PollForJobs'{..}
+          = object
+              ["maxBatchSize" .= _pfjMaxBatchSize,
+               "queryParam" .= _pfjQueryParam,
+               "actionTypeId" .= _pfjActionTypeId]
+
+instance ToPath PollForJobs where
+        toPath = const "/"
+
+instance ToQuery PollForJobs where
+        toQuery = const mempty
+
+-- | Represents the output of a poll for jobs action.
+--
+-- /See:/ 'pollForJobsResponse' smart constructor.
+data PollForJobsResponse = PollForJobsResponse'
+    { _pfjrsJobs   :: !(Maybe [Job])
+    , _pfjrsStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PollForJobsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pfjrsJobs'
+--
+-- * 'pfjrsStatus'
+pollForJobsResponse
+    :: Int -- ^ 'pfjrsStatus'
+    -> PollForJobsResponse
+pollForJobsResponse pStatus_ =
+    PollForJobsResponse'
+    { _pfjrsJobs = Nothing
+    , _pfjrsStatus = pStatus_
+    }
+
+-- | Information about the jobs to take action on.
+pfjrsJobs :: Lens' PollForJobsResponse [Job]
+pfjrsJobs = lens _pfjrsJobs (\ s a -> s{_pfjrsJobs = a}) . _Default . _Coerce;
+
+-- | The response status code.
+pfjrsStatus :: Lens' PollForJobsResponse Int
+pfjrsStatus = lens _pfjrsStatus (\ s a -> s{_pfjrsStatus = a});
diff --git a/gen/Network/AWS/CodePipeline/PollForThirdPartyJobs.hs b/gen/Network/AWS/CodePipeline/PollForThirdPartyJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/PollForThirdPartyJobs.hs
@@ -0,0 +1,148 @@
+{-# 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.CodePipeline.PollForThirdPartyJobs
+-- Copyright   : (c) 2013-2015 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)
+--
+-- Determines whether there are any third party jobs for a job worker to
+-- act on. Only used for partner actions.
+--
+-- When this API is called, AWS CodePipeline returns temporary credentials
+-- for the Amazon S3 bucket used to store artifacts for the pipeline, if
+-- the action requires access to that Amazon S3 bucket for input or output
+-- artifacts.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PollForThirdPartyJobs.html AWS API Reference> for PollForThirdPartyJobs.
+module Network.AWS.CodePipeline.PollForThirdPartyJobs
+    (
+    -- * Creating a Request
+      pollForThirdPartyJobs
+    , PollForThirdPartyJobs
+    -- * Request Lenses
+    , pftpjMaxBatchSize
+    , pftpjActionTypeId
+
+    -- * Destructuring the Response
+    , pollForThirdPartyJobsResponse
+    , PollForThirdPartyJobsResponse
+    -- * Response Lenses
+    , pftpjrsJobs
+    , pftpjrsStatus
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a poll for third party jobs action.
+--
+-- /See:/ 'pollForThirdPartyJobs' smart constructor.
+data PollForThirdPartyJobs = PollForThirdPartyJobs'
+    { _pftpjMaxBatchSize :: !(Maybe Nat)
+    , _pftpjActionTypeId :: !ActionTypeId
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PollForThirdPartyJobs' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pftpjMaxBatchSize'
+--
+-- * 'pftpjActionTypeId'
+pollForThirdPartyJobs
+    :: ActionTypeId -- ^ 'pftpjActionTypeId'
+    -> PollForThirdPartyJobs
+pollForThirdPartyJobs pActionTypeId_ =
+    PollForThirdPartyJobs'
+    { _pftpjMaxBatchSize = Nothing
+    , _pftpjActionTypeId = pActionTypeId_
+    }
+
+-- | The maximum number of jobs to return in a poll for jobs call.
+pftpjMaxBatchSize :: Lens' PollForThirdPartyJobs (Maybe Natural)
+pftpjMaxBatchSize = lens _pftpjMaxBatchSize (\ s a -> s{_pftpjMaxBatchSize = a}) . mapping _Nat;
+
+-- | Undocumented member.
+pftpjActionTypeId :: Lens' PollForThirdPartyJobs ActionTypeId
+pftpjActionTypeId = lens _pftpjActionTypeId (\ s a -> s{_pftpjActionTypeId = a});
+
+instance AWSRequest PollForThirdPartyJobs where
+        type Sv PollForThirdPartyJobs = CodePipeline
+        type Rs PollForThirdPartyJobs =
+             PollForThirdPartyJobsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 PollForThirdPartyJobsResponse' <$>
+                   (x .?> "jobs" .!@ mempty) <*> (pure (fromEnum s)))
+
+instance ToHeaders PollForThirdPartyJobs where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.PollForThirdPartyJobs" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PollForThirdPartyJobs where
+        toJSON PollForThirdPartyJobs'{..}
+          = object
+              ["maxBatchSize" .= _pftpjMaxBatchSize,
+               "actionTypeId" .= _pftpjActionTypeId]
+
+instance ToPath PollForThirdPartyJobs where
+        toPath = const "/"
+
+instance ToQuery PollForThirdPartyJobs where
+        toQuery = const mempty
+
+-- | Represents the output of a poll for third party jobs action.
+--
+-- /See:/ 'pollForThirdPartyJobsResponse' smart constructor.
+data PollForThirdPartyJobsResponse = PollForThirdPartyJobsResponse'
+    { _pftpjrsJobs   :: !(Maybe [ThirdPartyJob])
+    , _pftpjrsStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PollForThirdPartyJobsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pftpjrsJobs'
+--
+-- * 'pftpjrsStatus'
+pollForThirdPartyJobsResponse
+    :: Int -- ^ 'pftpjrsStatus'
+    -> PollForThirdPartyJobsResponse
+pollForThirdPartyJobsResponse pStatus_ =
+    PollForThirdPartyJobsResponse'
+    { _pftpjrsJobs = Nothing
+    , _pftpjrsStatus = pStatus_
+    }
+
+-- | Information about the jobs to take action on.
+pftpjrsJobs :: Lens' PollForThirdPartyJobsResponse [ThirdPartyJob]
+pftpjrsJobs = lens _pftpjrsJobs (\ s a -> s{_pftpjrsJobs = a}) . _Default . _Coerce;
+
+-- | The response status code.
+pftpjrsStatus :: Lens' PollForThirdPartyJobsResponse Int
+pftpjrsStatus = lens _pftpjrsStatus (\ s a -> s{_pftpjrsStatus = a});
diff --git a/gen/Network/AWS/CodePipeline/PutActionRevision.hs b/gen/Network/AWS/CodePipeline/PutActionRevision.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/PutActionRevision.hs
@@ -0,0 +1,179 @@
+{-# 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.CodePipeline.PutActionRevision
+-- Copyright   : (c) 2013-2015 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)
+--
+-- Provides information to AWS CodePipeline about new revisions to a
+-- source.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PutActionRevision.html AWS API Reference> for PutActionRevision.
+module Network.AWS.CodePipeline.PutActionRevision
+    (
+    -- * Creating a Request
+      putActionRevision
+    , PutActionRevision
+    -- * Request Lenses
+    , parPipelineName
+    , parStageName
+    , parActionName
+    , parActionRevision
+
+    -- * Destructuring the Response
+    , putActionRevisionResponse
+    , PutActionRevisionResponse
+    -- * Response Lenses
+    , parrsNewRevision
+    , parrsPipelineExecutionId
+    , parrsStatus
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a put action revision action.
+--
+-- /See:/ 'putActionRevision' smart constructor.
+data PutActionRevision = PutActionRevision'
+    { _parPipelineName   :: !Text
+    , _parStageName      :: !Text
+    , _parActionName     :: !Text
+    , _parActionRevision :: !ActionRevision
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutActionRevision' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'parPipelineName'
+--
+-- * 'parStageName'
+--
+-- * 'parActionName'
+--
+-- * 'parActionRevision'
+putActionRevision
+    :: Text -- ^ 'parPipelineName'
+    -> Text -- ^ 'parStageName'
+    -> Text -- ^ 'parActionName'
+    -> ActionRevision -- ^ 'parActionRevision'
+    -> PutActionRevision
+putActionRevision pPipelineName_ pStageName_ pActionName_ pActionRevision_ =
+    PutActionRevision'
+    { _parPipelineName = pPipelineName_
+    , _parStageName = pStageName_
+    , _parActionName = pActionName_
+    , _parActionRevision = pActionRevision_
+    }
+
+-- | The name of the pipeline that will start processing the revision to the
+-- source.
+parPipelineName :: Lens' PutActionRevision Text
+parPipelineName = lens _parPipelineName (\ s a -> s{_parPipelineName = a});
+
+-- | The name of the stage that contains the action that will act upon the
+-- revision.
+parStageName :: Lens' PutActionRevision Text
+parStageName = lens _parStageName (\ s a -> s{_parStageName = a});
+
+-- | The name of the action that will process the revision.
+parActionName :: Lens' PutActionRevision Text
+parActionName = lens _parActionName (\ s a -> s{_parActionName = a});
+
+-- | Undocumented member.
+parActionRevision :: Lens' PutActionRevision ActionRevision
+parActionRevision = lens _parActionRevision (\ s a -> s{_parActionRevision = a});
+
+instance AWSRequest PutActionRevision where
+        type Sv PutActionRevision = CodePipeline
+        type Rs PutActionRevision = PutActionRevisionResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 PutActionRevisionResponse' <$>
+                   (x .?> "newRevision") <*>
+                     (x .?> "pipelineExecutionId")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders PutActionRevision where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.PutActionRevision" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PutActionRevision where
+        toJSON PutActionRevision'{..}
+          = object
+              ["pipelineName" .= _parPipelineName,
+               "stageName" .= _parStageName,
+               "actionName" .= _parActionName,
+               "actionRevision" .= _parActionRevision]
+
+instance ToPath PutActionRevision where
+        toPath = const "/"
+
+instance ToQuery PutActionRevision where
+        toQuery = const mempty
+
+-- | Represents the output of a put action revision action.
+--
+-- /See:/ 'putActionRevisionResponse' smart constructor.
+data PutActionRevisionResponse = PutActionRevisionResponse'
+    { _parrsNewRevision         :: !(Maybe Bool)
+    , _parrsPipelineExecutionId :: !(Maybe Text)
+    , _parrsStatus              :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutActionRevisionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'parrsNewRevision'
+--
+-- * 'parrsPipelineExecutionId'
+--
+-- * 'parrsStatus'
+putActionRevisionResponse
+    :: Int -- ^ 'parrsStatus'
+    -> PutActionRevisionResponse
+putActionRevisionResponse pStatus_ =
+    PutActionRevisionResponse'
+    { _parrsNewRevision = Nothing
+    , _parrsPipelineExecutionId = Nothing
+    , _parrsStatus = pStatus_
+    }
+
+-- | The new revision number or ID for the revision after the action
+-- completes.
+parrsNewRevision :: Lens' PutActionRevisionResponse (Maybe Bool)
+parrsNewRevision = lens _parrsNewRevision (\ s a -> s{_parrsNewRevision = a});
+
+-- | The ID of the current workflow state of the pipeline.
+parrsPipelineExecutionId :: Lens' PutActionRevisionResponse (Maybe Text)
+parrsPipelineExecutionId = lens _parrsPipelineExecutionId (\ s a -> s{_parrsPipelineExecutionId = a});
+
+-- | The response status code.
+parrsStatus :: Lens' PutActionRevisionResponse Int
+parrsStatus = lens _parrsStatus (\ s a -> s{_parrsStatus = a});
diff --git a/gen/Network/AWS/CodePipeline/PutJobFailureResult.hs b/gen/Network/AWS/CodePipeline/PutJobFailureResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/PutJobFailureResult.hs
@@ -0,0 +1,117 @@
+{-# 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.CodePipeline.PutJobFailureResult
+-- Copyright   : (c) 2013-2015 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)
+--
+-- Represents the failure of a job as returned to the pipeline by a job
+-- worker. Only used for custom actions.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PutJobFailureResult.html AWS API Reference> for PutJobFailureResult.
+module Network.AWS.CodePipeline.PutJobFailureResult
+    (
+    -- * Creating a Request
+      putJobFailureResult
+    , PutJobFailureResult
+    -- * Request Lenses
+    , pjfrJobId
+    , pjfrFailureDetails
+
+    -- * Destructuring the Response
+    , putJobFailureResultResponse
+    , PutJobFailureResultResponse
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a put job failure result action.
+--
+-- /See:/ 'putJobFailureResult' smart constructor.
+data PutJobFailureResult = PutJobFailureResult'
+    { _pjfrJobId          :: !Text
+    , _pjfrFailureDetails :: !FailureDetails
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutJobFailureResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pjfrJobId'
+--
+-- * 'pjfrFailureDetails'
+putJobFailureResult
+    :: Text -- ^ 'pjfrJobId'
+    -> FailureDetails -- ^ 'pjfrFailureDetails'
+    -> PutJobFailureResult
+putJobFailureResult pJobId_ pFailureDetails_ =
+    PutJobFailureResult'
+    { _pjfrJobId = pJobId_
+    , _pjfrFailureDetails = pFailureDetails_
+    }
+
+-- | The unique system-generated ID of the job that failed. This is the same
+-- ID returned from PollForJobs.
+pjfrJobId :: Lens' PutJobFailureResult Text
+pjfrJobId = lens _pjfrJobId (\ s a -> s{_pjfrJobId = a});
+
+-- | The details about the failure of a job.
+pjfrFailureDetails :: Lens' PutJobFailureResult FailureDetails
+pjfrFailureDetails = lens _pjfrFailureDetails (\ s a -> s{_pjfrFailureDetails = a});
+
+instance AWSRequest PutJobFailureResult where
+        type Sv PutJobFailureResult = CodePipeline
+        type Rs PutJobFailureResult =
+             PutJobFailureResultResponse
+        request = postJSON
+        response = receiveNull PutJobFailureResultResponse'
+
+instance ToHeaders PutJobFailureResult where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.PutJobFailureResult" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PutJobFailureResult where
+        toJSON PutJobFailureResult'{..}
+          = object
+              ["jobId" .= _pjfrJobId,
+               "failureDetails" .= _pjfrFailureDetails]
+
+instance ToPath PutJobFailureResult where
+        toPath = const "/"
+
+instance ToQuery PutJobFailureResult where
+        toQuery = const mempty
+
+-- | /See:/ 'putJobFailureResultResponse' smart constructor.
+data PutJobFailureResultResponse =
+    PutJobFailureResultResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutJobFailureResultResponse' with the minimum fields required to make a request.
+--
+putJobFailureResultResponse
+    :: PutJobFailureResultResponse
+putJobFailureResultResponse = PutJobFailureResultResponse'
diff --git a/gen/Network/AWS/CodePipeline/PutJobSuccessResult.hs b/gen/Network/AWS/CodePipeline/PutJobSuccessResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/PutJobSuccessResult.hs
@@ -0,0 +1,139 @@
+{-# 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.CodePipeline.PutJobSuccessResult
+-- Copyright   : (c) 2013-2015 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)
+--
+-- Represents the success of a job as returned to the pipeline by a job
+-- worker. Only used for custom actions.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PutJobSuccessResult.html AWS API Reference> for PutJobSuccessResult.
+module Network.AWS.CodePipeline.PutJobSuccessResult
+    (
+    -- * Creating a Request
+      putJobSuccessResult
+    , PutJobSuccessResult
+    -- * Request Lenses
+    , pjsrContinuationToken
+    , pjsrExecutionDetails
+    , pjsrCurrentRevision
+    , pjsrJobId
+
+    -- * Destructuring the Response
+    , putJobSuccessResultResponse
+    , PutJobSuccessResultResponse
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a put job success result action.
+--
+-- /See:/ 'putJobSuccessResult' smart constructor.
+data PutJobSuccessResult = PutJobSuccessResult'
+    { _pjsrContinuationToken :: !(Maybe Text)
+    , _pjsrExecutionDetails  :: !(Maybe ExecutionDetails)
+    , _pjsrCurrentRevision   :: !(Maybe CurrentRevision)
+    , _pjsrJobId             :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutJobSuccessResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pjsrContinuationToken'
+--
+-- * 'pjsrExecutionDetails'
+--
+-- * 'pjsrCurrentRevision'
+--
+-- * 'pjsrJobId'
+putJobSuccessResult
+    :: Text -- ^ 'pjsrJobId'
+    -> PutJobSuccessResult
+putJobSuccessResult pJobId_ =
+    PutJobSuccessResult'
+    { _pjsrContinuationToken = Nothing
+    , _pjsrExecutionDetails = Nothing
+    , _pjsrCurrentRevision = Nothing
+    , _pjsrJobId = pJobId_
+    }
+
+-- | A system-generated token, such as a AWS CodeDeploy deployment ID, that
+-- the successful job used to complete a job asynchronously.
+pjsrContinuationToken :: Lens' PutJobSuccessResult (Maybe Text)
+pjsrContinuationToken = lens _pjsrContinuationToken (\ s a -> s{_pjsrContinuationToken = a});
+
+-- | The execution details of the successful job, such as the actions taken
+-- by the job worker.
+pjsrExecutionDetails :: Lens' PutJobSuccessResult (Maybe ExecutionDetails)
+pjsrExecutionDetails = lens _pjsrExecutionDetails (\ s a -> s{_pjsrExecutionDetails = a});
+
+-- | The ID of the current revision of the artifact successfully worked upon
+-- by the job.
+pjsrCurrentRevision :: Lens' PutJobSuccessResult (Maybe CurrentRevision)
+pjsrCurrentRevision = lens _pjsrCurrentRevision (\ s a -> s{_pjsrCurrentRevision = a});
+
+-- | The unique system-generated ID of the job that succeeded. This is the
+-- same ID returned from PollForJobs.
+pjsrJobId :: Lens' PutJobSuccessResult Text
+pjsrJobId = lens _pjsrJobId (\ s a -> s{_pjsrJobId = a});
+
+instance AWSRequest PutJobSuccessResult where
+        type Sv PutJobSuccessResult = CodePipeline
+        type Rs PutJobSuccessResult =
+             PutJobSuccessResultResponse
+        request = postJSON
+        response = receiveNull PutJobSuccessResultResponse'
+
+instance ToHeaders PutJobSuccessResult where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.PutJobSuccessResult" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PutJobSuccessResult where
+        toJSON PutJobSuccessResult'{..}
+          = object
+              ["continuationToken" .= _pjsrContinuationToken,
+               "executionDetails" .= _pjsrExecutionDetails,
+               "currentRevision" .= _pjsrCurrentRevision,
+               "jobId" .= _pjsrJobId]
+
+instance ToPath PutJobSuccessResult where
+        toPath = const "/"
+
+instance ToQuery PutJobSuccessResult where
+        toQuery = const mempty
+
+-- | /See:/ 'putJobSuccessResultResponse' smart constructor.
+data PutJobSuccessResultResponse =
+    PutJobSuccessResultResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutJobSuccessResultResponse' with the minimum fields required to make a request.
+--
+putJobSuccessResultResponse
+    :: PutJobSuccessResultResponse
+putJobSuccessResultResponse = PutJobSuccessResultResponse'
diff --git a/gen/Network/AWS/CodePipeline/PutThirdPartyJobFailureResult.hs b/gen/Network/AWS/CodePipeline/PutThirdPartyJobFailureResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/PutThirdPartyJobFailureResult.hs
@@ -0,0 +1,133 @@
+{-# 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.CodePipeline.PutThirdPartyJobFailureResult
+-- Copyright   : (c) 2013-2015 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)
+--
+-- Represents the failure of a third party job as returned to the pipeline
+-- by a job worker. Only used for partner actions.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PutThirdPartyJobFailureResult.html AWS API Reference> for PutThirdPartyJobFailureResult.
+module Network.AWS.CodePipeline.PutThirdPartyJobFailureResult
+    (
+    -- * Creating a Request
+      putThirdPartyJobFailureResult
+    , PutThirdPartyJobFailureResult
+    -- * Request Lenses
+    , ptpjfrJobId
+    , ptpjfrClientToken
+    , ptpjfrFailureDetails
+
+    -- * Destructuring the Response
+    , putThirdPartyJobFailureResultResponse
+    , PutThirdPartyJobFailureResultResponse
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a third party job failure result action.
+--
+-- /See:/ 'putThirdPartyJobFailureResult' smart constructor.
+data PutThirdPartyJobFailureResult = PutThirdPartyJobFailureResult'
+    { _ptpjfrJobId          :: !Text
+    , _ptpjfrClientToken    :: !Text
+    , _ptpjfrFailureDetails :: !FailureDetails
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutThirdPartyJobFailureResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ptpjfrJobId'
+--
+-- * 'ptpjfrClientToken'
+--
+-- * 'ptpjfrFailureDetails'
+putThirdPartyJobFailureResult
+    :: Text -- ^ 'ptpjfrJobId'
+    -> Text -- ^ 'ptpjfrClientToken'
+    -> FailureDetails -- ^ 'ptpjfrFailureDetails'
+    -> PutThirdPartyJobFailureResult
+putThirdPartyJobFailureResult pJobId_ pClientToken_ pFailureDetails_ =
+    PutThirdPartyJobFailureResult'
+    { _ptpjfrJobId = pJobId_
+    , _ptpjfrClientToken = pClientToken_
+    , _ptpjfrFailureDetails = pFailureDetails_
+    }
+
+-- | The ID of the job that failed. This is the same ID returned from
+-- PollForThirdPartyJobs.
+ptpjfrJobId :: Lens' PutThirdPartyJobFailureResult Text
+ptpjfrJobId = lens _ptpjfrJobId (\ s a -> s{_ptpjfrJobId = a});
+
+-- | The clientToken portion of the clientId and clientToken pair used to
+-- verify that the calling entity is allowed access to the job and its
+-- details.
+ptpjfrClientToken :: Lens' PutThirdPartyJobFailureResult Text
+ptpjfrClientToken = lens _ptpjfrClientToken (\ s a -> s{_ptpjfrClientToken = a});
+
+-- | Undocumented member.
+ptpjfrFailureDetails :: Lens' PutThirdPartyJobFailureResult FailureDetails
+ptpjfrFailureDetails = lens _ptpjfrFailureDetails (\ s a -> s{_ptpjfrFailureDetails = a});
+
+instance AWSRequest PutThirdPartyJobFailureResult
+         where
+        type Sv PutThirdPartyJobFailureResult = CodePipeline
+        type Rs PutThirdPartyJobFailureResult =
+             PutThirdPartyJobFailureResultResponse
+        request = postJSON
+        response
+          = receiveNull PutThirdPartyJobFailureResultResponse'
+
+instance ToHeaders PutThirdPartyJobFailureResult
+         where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.PutThirdPartyJobFailureResult"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PutThirdPartyJobFailureResult where
+        toJSON PutThirdPartyJobFailureResult'{..}
+          = object
+              ["jobId" .= _ptpjfrJobId,
+               "clientToken" .= _ptpjfrClientToken,
+               "failureDetails" .= _ptpjfrFailureDetails]
+
+instance ToPath PutThirdPartyJobFailureResult where
+        toPath = const "/"
+
+instance ToQuery PutThirdPartyJobFailureResult where
+        toQuery = const mempty
+
+-- | /See:/ 'putThirdPartyJobFailureResultResponse' smart constructor.
+data PutThirdPartyJobFailureResultResponse =
+    PutThirdPartyJobFailureResultResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutThirdPartyJobFailureResultResponse' with the minimum fields required to make a request.
+--
+putThirdPartyJobFailureResultResponse
+    :: PutThirdPartyJobFailureResultResponse
+putThirdPartyJobFailureResultResponse = PutThirdPartyJobFailureResultResponse'
diff --git a/gen/Network/AWS/CodePipeline/PutThirdPartyJobSuccessResult.hs b/gen/Network/AWS/CodePipeline/PutThirdPartyJobSuccessResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/PutThirdPartyJobSuccessResult.hs
@@ -0,0 +1,153 @@
+{-# 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.CodePipeline.PutThirdPartyJobSuccessResult
+-- Copyright   : (c) 2013-2015 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)
+--
+-- Represents the success of a third party job as returned to the pipeline
+-- by a job worker. Only used for partner actions.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PutThirdPartyJobSuccessResult.html AWS API Reference> for PutThirdPartyJobSuccessResult.
+module Network.AWS.CodePipeline.PutThirdPartyJobSuccessResult
+    (
+    -- * Creating a Request
+      putThirdPartyJobSuccessResult
+    , PutThirdPartyJobSuccessResult
+    -- * Request Lenses
+    , ptpjsrContinuationToken
+    , ptpjsrExecutionDetails
+    , ptpjsrCurrentRevision
+    , ptpjsrJobId
+    , ptpjsrClientToken
+
+    -- * Destructuring the Response
+    , putThirdPartyJobSuccessResultResponse
+    , PutThirdPartyJobSuccessResultResponse
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a put third party job success result action.
+--
+-- /See:/ 'putThirdPartyJobSuccessResult' smart constructor.
+data PutThirdPartyJobSuccessResult = PutThirdPartyJobSuccessResult'
+    { _ptpjsrContinuationToken :: !(Maybe Text)
+    , _ptpjsrExecutionDetails  :: !(Maybe ExecutionDetails)
+    , _ptpjsrCurrentRevision   :: !(Maybe CurrentRevision)
+    , _ptpjsrJobId             :: !Text
+    , _ptpjsrClientToken       :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutThirdPartyJobSuccessResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ptpjsrContinuationToken'
+--
+-- * 'ptpjsrExecutionDetails'
+--
+-- * 'ptpjsrCurrentRevision'
+--
+-- * 'ptpjsrJobId'
+--
+-- * 'ptpjsrClientToken'
+putThirdPartyJobSuccessResult
+    :: Text -- ^ 'ptpjsrJobId'
+    -> Text -- ^ 'ptpjsrClientToken'
+    -> PutThirdPartyJobSuccessResult
+putThirdPartyJobSuccessResult pJobId_ pClientToken_ =
+    PutThirdPartyJobSuccessResult'
+    { _ptpjsrContinuationToken = Nothing
+    , _ptpjsrExecutionDetails = Nothing
+    , _ptpjsrCurrentRevision = Nothing
+    , _ptpjsrJobId = pJobId_
+    , _ptpjsrClientToken = pClientToken_
+    }
+
+-- | A system-generated token, such as a AWS CodeDeploy deployment ID, that a
+-- job uses in order to continue the job asynchronously.
+ptpjsrContinuationToken :: Lens' PutThirdPartyJobSuccessResult (Maybe Text)
+ptpjsrContinuationToken = lens _ptpjsrContinuationToken (\ s a -> s{_ptpjsrContinuationToken = a});
+
+-- | Undocumented member.
+ptpjsrExecutionDetails :: Lens' PutThirdPartyJobSuccessResult (Maybe ExecutionDetails)
+ptpjsrExecutionDetails = lens _ptpjsrExecutionDetails (\ s a -> s{_ptpjsrExecutionDetails = a});
+
+-- | Undocumented member.
+ptpjsrCurrentRevision :: Lens' PutThirdPartyJobSuccessResult (Maybe CurrentRevision)
+ptpjsrCurrentRevision = lens _ptpjsrCurrentRevision (\ s a -> s{_ptpjsrCurrentRevision = a});
+
+-- | The ID of the job that successfully completed. This is the same ID
+-- returned from PollForThirdPartyJobs.
+ptpjsrJobId :: Lens' PutThirdPartyJobSuccessResult Text
+ptpjsrJobId = lens _ptpjsrJobId (\ s a -> s{_ptpjsrJobId = a});
+
+-- | The clientToken portion of the clientId and clientToken pair used to
+-- verify that the calling entity is allowed access to the job and its
+-- details.
+ptpjsrClientToken :: Lens' PutThirdPartyJobSuccessResult Text
+ptpjsrClientToken = lens _ptpjsrClientToken (\ s a -> s{_ptpjsrClientToken = a});
+
+instance AWSRequest PutThirdPartyJobSuccessResult
+         where
+        type Sv PutThirdPartyJobSuccessResult = CodePipeline
+        type Rs PutThirdPartyJobSuccessResult =
+             PutThirdPartyJobSuccessResultResponse
+        request = postJSON
+        response
+          = receiveNull PutThirdPartyJobSuccessResultResponse'
+
+instance ToHeaders PutThirdPartyJobSuccessResult
+         where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.PutThirdPartyJobSuccessResult"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PutThirdPartyJobSuccessResult where
+        toJSON PutThirdPartyJobSuccessResult'{..}
+          = object
+              ["continuationToken" .= _ptpjsrContinuationToken,
+               "executionDetails" .= _ptpjsrExecutionDetails,
+               "currentRevision" .= _ptpjsrCurrentRevision,
+               "jobId" .= _ptpjsrJobId,
+               "clientToken" .= _ptpjsrClientToken]
+
+instance ToPath PutThirdPartyJobSuccessResult where
+        toPath = const "/"
+
+instance ToQuery PutThirdPartyJobSuccessResult where
+        toQuery = const mempty
+
+-- | /See:/ 'putThirdPartyJobSuccessResultResponse' smart constructor.
+data PutThirdPartyJobSuccessResultResponse =
+    PutThirdPartyJobSuccessResultResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutThirdPartyJobSuccessResultResponse' with the minimum fields required to make a request.
+--
+putThirdPartyJobSuccessResultResponse
+    :: PutThirdPartyJobSuccessResultResponse
+putThirdPartyJobSuccessResultResponse = PutThirdPartyJobSuccessResultResponse'
diff --git a/gen/Network/AWS/CodePipeline/StartPipelineExecution.hs b/gen/Network/AWS/CodePipeline/StartPipelineExecution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/StartPipelineExecution.hs
@@ -0,0 +1,133 @@
+{-# 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.CodePipeline.StartPipelineExecution
+-- Copyright   : (c) 2013-2015 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 the specified pipeline. Specifically, it begins processing the
+-- latest commit to the source location specified as part of the pipeline.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_StartPipelineExecution.html AWS API Reference> for StartPipelineExecution.
+module Network.AWS.CodePipeline.StartPipelineExecution
+    (
+    -- * Creating a Request
+      startPipelineExecution
+    , StartPipelineExecution
+    -- * Request Lenses
+    , speName
+
+    -- * Destructuring the Response
+    , startPipelineExecutionResponse
+    , StartPipelineExecutionResponse
+    -- * Response Lenses
+    , spersPipelineExecutionId
+    , spersStatus
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of a start pipeline execution action.
+--
+-- /See:/ 'startPipelineExecution' smart constructor.
+newtype StartPipelineExecution = StartPipelineExecution'
+    { _speName :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StartPipelineExecution' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'speName'
+startPipelineExecution
+    :: Text -- ^ 'speName'
+    -> StartPipelineExecution
+startPipelineExecution pName_ =
+    StartPipelineExecution'
+    { _speName = pName_
+    }
+
+-- | The name of the pipeline to start.
+speName :: Lens' StartPipelineExecution Text
+speName = lens _speName (\ s a -> s{_speName = a});
+
+instance AWSRequest StartPipelineExecution where
+        type Sv StartPipelineExecution = CodePipeline
+        type Rs StartPipelineExecution =
+             StartPipelineExecutionResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 StartPipelineExecutionResponse' <$>
+                   (x .?> "pipelineExecutionId") <*>
+                     (pure (fromEnum s)))
+
+instance ToHeaders StartPipelineExecution where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.StartPipelineExecution" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON StartPipelineExecution where
+        toJSON StartPipelineExecution'{..}
+          = object ["name" .= _speName]
+
+instance ToPath StartPipelineExecution where
+        toPath = const "/"
+
+instance ToQuery StartPipelineExecution where
+        toQuery = const mempty
+
+-- | Represents the output of a start pipeline execution action.
+--
+-- /See:/ 'startPipelineExecutionResponse' smart constructor.
+data StartPipelineExecutionResponse = StartPipelineExecutionResponse'
+    { _spersPipelineExecutionId :: !(Maybe Text)
+    , _spersStatus              :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StartPipelineExecutionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'spersPipelineExecutionId'
+--
+-- * 'spersStatus'
+startPipelineExecutionResponse
+    :: Int -- ^ 'spersStatus'
+    -> StartPipelineExecutionResponse
+startPipelineExecutionResponse pStatus_ =
+    StartPipelineExecutionResponse'
+    { _spersPipelineExecutionId = Nothing
+    , _spersStatus = pStatus_
+    }
+
+-- | The unique system-generated ID of the pipeline that was started.
+spersPipelineExecutionId :: Lens' StartPipelineExecutionResponse (Maybe Text)
+spersPipelineExecutionId = lens _spersPipelineExecutionId (\ s a -> s{_spersPipelineExecutionId = a});
+
+-- | The response status code.
+spersStatus :: Lens' StartPipelineExecutionResponse Int
+spersStatus = lens _spersStatus (\ s a -> s{_spersStatus = a});
diff --git a/gen/Network/AWS/CodePipeline/Types.hs b/gen/Network/AWS/CodePipeline/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/Types.hs
@@ -0,0 +1,459 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.CodePipeline.Types
+-- Copyright   : (c) 2013-2015 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.CodePipeline.Types
+    (
+    -- * Service
+      CodePipeline
+
+    -- * Errors
+    , _ValidationException
+    , _InvalidClientTokenException
+    , _InvalidNonceException
+    , _ActionNotFoundException
+    , _InvalidBlockerDeclarationException
+    , _InvalidJobStateException
+    , _InvalidJobException
+    , _PipelineVersionNotFoundException
+    , _ActionTypeNotFoundException
+    , _InvalidNextTokenException
+    , _InvalidStageDeclarationException
+    , _InvalidActionDeclarationException
+    , _StageNotFoundException
+    , _JobNotFoundException
+    , _InvalidStructureException
+    , _PipelineNotFoundException
+    , _PipelineNameInUseException
+    , _LimitExceededException
+
+    -- * ActionCategory
+    , ActionCategory (..)
+
+    -- * ActionConfigurationPropertyType
+    , ActionConfigurationPropertyType (..)
+
+    -- * ActionExecutionStatus
+    , ActionExecutionStatus (..)
+
+    -- * ActionOwner
+    , ActionOwner (..)
+
+    -- * ArtifactLocationType
+    , ArtifactLocationType (..)
+
+    -- * ArtifactStoreType
+    , ArtifactStoreType (..)
+
+    -- * BlockerType
+    , BlockerType (..)
+
+    -- * FailureType
+    , FailureType (..)
+
+    -- * JobStatus
+    , JobStatus (..)
+
+    -- * StageTransitionType
+    , StageTransitionType (..)
+
+    -- * AWSSessionCredentials
+    , AWSSessionCredentials
+    , awsSessionCredentials
+    , ascAccessKeyId
+    , ascSecretAccessKey
+    , ascSessionToken
+
+    -- * ActionConfiguration
+    , ActionConfiguration
+    , actionConfiguration
+    , acConfiguration
+
+    -- * ActionConfigurationProperty
+    , ActionConfigurationProperty
+    , actionConfigurationProperty
+    , acpQueryable
+    , acpType
+    , acpDescription
+    , acpName
+    , acpRequired
+    , acpKey
+    , acpSecret
+
+    -- * ActionContext
+    , ActionContext
+    , actionContext
+    , acName
+
+    -- * ActionDeclaration
+    , ActionDeclaration
+    , actionDeclaration
+    , adOutputArtifacts
+    , adRunOrder
+    , adConfiguration
+    , adInputArtifacts
+    , adRoleARN
+    , adName
+    , adActionTypeId
+
+    -- * ActionExecution
+    , ActionExecution
+    , actionExecution
+    , aeSummary
+    , aeStatus
+    , aeLastStatusChange
+    , aeExternalExecutionURL
+    , aePercentComplete
+    , aeErrorDetails
+    , aeExternalExecutionId
+
+    -- * ActionRevision
+    , ActionRevision
+    , actionRevision
+    , arRevisionChangeId
+    , arRevisionId
+    , arCreated
+
+    -- * ActionState
+    , ActionState
+    , actionState
+    , asEntityURL
+    , asRevisionURL
+    , asActionName
+    , asCurrentRevision
+    , asLatestExecution
+
+    -- * ActionType
+    , ActionType
+    , actionType
+    , atSettings
+    , atActionConfigurationProperties
+    , atId
+    , atInputArtifactDetails
+    , atOutputArtifactDetails
+
+    -- * ActionTypeId
+    , ActionTypeId
+    , actionTypeId
+    , atiCategory
+    , atiOwner
+    , atiProvider
+    , atiVersion
+
+    -- * ActionTypeSettings
+    , ActionTypeSettings
+    , actionTypeSettings
+    , atsThirdPartyConfigurationURL
+    , atsExecutionURLTemplate
+    , atsEntityURLTemplate
+    , atsRevisionURLTemplate
+
+    -- * Artifact
+    , Artifact
+    , artifact
+    , aLocation
+    , aName
+    , aRevision
+
+    -- * ArtifactDetails
+    , ArtifactDetails
+    , artifactDetails
+    , adMinimumCount
+    , adMaximumCount
+
+    -- * ArtifactLocation
+    , ArtifactLocation
+    , artifactLocation
+    , alS3Location
+    , alType
+
+    -- * ArtifactStore
+    , ArtifactStore
+    , artifactStore
+    , asType
+    , asLocation
+
+    -- * BlockerDeclaration
+    , BlockerDeclaration
+    , blockerDeclaration
+    , bdName
+    , bdType
+
+    -- * CurrentRevision
+    , CurrentRevision
+    , currentRevision
+    , crRevision
+    , crChangeIdentifier
+
+    -- * ErrorDetails
+    , ErrorDetails
+    , errorDetails
+    , edCode
+    , edMessage
+
+    -- * ExecutionDetails
+    , ExecutionDetails
+    , executionDetails
+    , edSummary
+    , edPercentComplete
+    , edExternalExecutionId
+
+    -- * FailureDetails
+    , FailureDetails
+    , failureDetails
+    , fdExternalExecutionId
+    , fdMessage
+    , fdType
+
+    -- * InputArtifact
+    , InputArtifact
+    , inputArtifact
+    , iaName
+
+    -- * Job
+    , Job
+    , job
+    , jData
+    , jAccountId
+    , jId
+    , jNonce
+
+    -- * JobData
+    , JobData
+    , jobData
+    , jdContinuationToken
+    , jdOutputArtifacts
+    , jdArtifactCredentials
+    , jdPipelineContext
+    , jdActionTypeId
+    , jdInputArtifacts
+    , jdActionConfiguration
+
+    -- * JobDetails
+    , JobDetails
+    , jobDetails
+    , jdData
+    , jdAccountId
+    , jdId
+
+    -- * OutputArtifact
+    , OutputArtifact
+    , outputArtifact
+    , oaName
+
+    -- * PipelineContext
+    , PipelineContext
+    , pipelineContext
+    , pcStage
+    , pcPipelineName
+    , pcAction
+
+    -- * PipelineDeclaration
+    , PipelineDeclaration
+    , pipelineDeclaration
+    , pdVersion
+    , pdName
+    , pdRoleARN
+    , pdArtifactStore
+    , pdStages
+
+    -- * PipelineSummary
+    , PipelineSummary
+    , pipelineSummary
+    , psCreated
+    , psName
+    , psVersion
+    , psUpdated
+
+    -- * S3ArtifactLocation
+    , S3ArtifactLocation
+    , s3ArtifactLocation
+    , salBucketName
+    , salObjectKey
+
+    -- * StageContext
+    , StageContext
+    , stageContext
+    , scName
+
+    -- * StageDeclaration
+    , StageDeclaration
+    , stageDeclaration
+    , sdBlockers
+    , sdName
+    , sdActions
+
+    -- * StageState
+    , StageState
+    , stageState
+    , ssInboundTransitionState
+    , ssActionStates
+    , ssStageName
+
+    -- * ThirdPartyJob
+    , ThirdPartyJob
+    , thirdPartyJob
+    , tpjClientId
+    , tpjJobId
+
+    -- * ThirdPartyJobData
+    , ThirdPartyJobData
+    , thirdPartyJobData
+    , tpjdContinuationToken
+    , tpjdOutputArtifacts
+    , tpjdArtifactCredentials
+    , tpjdPipelineContext
+    , tpjdActionTypeId
+    , tpjdInputArtifacts
+    , tpjdActionConfiguration
+
+    -- * ThirdPartyJobDetails
+    , ThirdPartyJobDetails
+    , thirdPartyJobDetails
+    , tpjdData
+    , tpjdId
+    , tpjdNonce
+
+    -- * TransitionState
+    , TransitionState
+    , transitionState
+    , tsEnabled
+    , tsDisabledReason
+    , tsLastChangedAt
+    , tsLastChangedBy
+    ) where
+
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.CodePipeline.Types.Sum
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
+
+-- | Version @2015-07-09@ of the Amazon CodePipeline SDK.
+data CodePipeline
+
+instance AWSService CodePipeline where
+    type Sg CodePipeline = V4
+    service = const svc
+      where
+        svc =
+            Service
+            { _svcAbbrev = "CodePipeline"
+            , _svcPrefix = "codepipeline"
+            , _svcVersion = "2015-07-09"
+            , _svcEndpoint = defaultEndpoint svc
+            , _svcTimeout = Just 70
+            , _svcStatus = statusSuccess
+            , _svcError = parseJSONError
+            , _svcRetry = retry
+            }
+        retry =
+            Exponential
+            { _retryBase = 5.0e-2
+            , _retryGrowth = 2
+            , _retryAttempts = 5
+            , _retryCheck = check
+            }
+        check e
+          | has (hasCode "ThrottlingException" . hasStatus 400) e =
+              Just "throttling_exception"
+          | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+          | 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 validation was specified in an invalid format.
+_ValidationException :: AsError a => Getting (First ServiceError) a ServiceError
+_ValidationException = _ServiceError . hasCode "ValidationException"
+
+-- | The client token was specified in an invalid format
+_InvalidClientTokenException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidClientTokenException =
+    _ServiceError . hasCode "InvalidClientTokenException"
+
+-- | The specified nonce was specified in an invalid format.
+_InvalidNonceException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidNonceException = _ServiceError . hasCode "InvalidNonceException"
+
+-- | The specified action cannot be found.
+_ActionNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_ActionNotFoundException = _ServiceError . hasCode "ActionNotFoundException"
+
+-- | The specified gate declaration was specified in an invalid format.
+_InvalidBlockerDeclarationException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidBlockerDeclarationException =
+    _ServiceError . hasCode "InvalidBlockerDeclarationException"
+
+-- | The specified job state was specified in an invalid format.
+_InvalidJobStateException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidJobStateException = _ServiceError . hasCode "InvalidJobStateException"
+
+-- | The specified job was specified in an invalid format or cannot be found.
+_InvalidJobException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidJobException = _ServiceError . hasCode "InvalidJobException"
+
+-- | The specified pipeline version was specified in an invalid format or
+-- cannot be found.
+_PipelineVersionNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_PipelineVersionNotFoundException =
+    _ServiceError . hasCode "PipelineVersionNotFoundException"
+
+-- | The specified action type cannot be found.
+_ActionTypeNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_ActionTypeNotFoundException =
+    _ServiceError . hasCode "ActionTypeNotFoundException"
+
+-- | The next token was specified in an invalid format. Make sure that the
+-- next token you provided is the token returned by a previous call.
+_InvalidNextTokenException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidNextTokenException =
+    _ServiceError . hasCode "InvalidNextTokenException"
+
+-- | The specified stage declaration was specified in an invalid format.
+_InvalidStageDeclarationException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidStageDeclarationException =
+    _ServiceError . hasCode "InvalidStageDeclarationException"
+
+-- | The specified action declaration was specified in an invalid format.
+_InvalidActionDeclarationException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidActionDeclarationException =
+    _ServiceError . hasCode "InvalidActionDeclarationException"
+
+-- | The specified stage was specified in an invalid format or cannot be
+-- found.
+_StageNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_StageNotFoundException = _ServiceError . hasCode "StageNotFoundException"
+
+-- | The specified job was specified in an invalid format or cannot be found.
+_JobNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_JobNotFoundException = _ServiceError . hasCode "JobNotFoundException"
+
+-- | The specified structure was specified in an invalid format.
+_InvalidStructureException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidStructureException =
+    _ServiceError . hasCode "InvalidStructureException"
+
+-- | The specified pipeline was specified in an invalid format or cannot be
+-- found.
+_PipelineNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_PipelineNotFoundException =
+    _ServiceError . hasCode "PipelineNotFoundException"
+
+-- | The specified pipeline name is already in use.
+_PipelineNameInUseException :: AsError a => Getting (First ServiceError) a ServiceError
+_PipelineNameInUseException =
+    _ServiceError . hasCode "PipelineNameInUseException"
+
+-- | The number of pipelines associated with the AWS account has exceeded the
+-- limit allowed for the account.
+_LimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_LimitExceededException = _ServiceError . hasCode "LimitExceededException"
diff --git a/gen/Network/AWS/CodePipeline/Types/Product.hs b/gen/Network/AWS/CodePipeline/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/Types/Product.hs
@@ -0,0 +1,2039 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.CodePipeline.Types.Product
+-- Copyright   : (c) 2013-2015 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.CodePipeline.Types.Product where
+
+import           Network.AWS.CodePipeline.Types.Sum
+import           Network.AWS.Prelude
+
+-- | Represents an AWS session credentials object. These credentials are
+-- temporary credentials that are issued by AWS Secure Token Service (STS).
+-- They can be used to access input and output artifacts in the Amazon S3
+-- bucket used to store artifact for the pipeline in AWS CodePipeline.
+--
+-- /See:/ 'awsSessionCredentials' smart constructor.
+data AWSSessionCredentials = AWSSessionCredentials'
+    { _ascAccessKeyId     :: !Text
+    , _ascSecretAccessKey :: !Text
+    , _ascSessionToken    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AWSSessionCredentials' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ascAccessKeyId'
+--
+-- * 'ascSecretAccessKey'
+--
+-- * 'ascSessionToken'
+awsSessionCredentials
+    :: Text -- ^ 'ascAccessKeyId'
+    -> Text -- ^ 'ascSecretAccessKey'
+    -> Text -- ^ 'ascSessionToken'
+    -> AWSSessionCredentials
+awsSessionCredentials pAccessKeyId_ pSecretAccessKey_ pSessionToken_ =
+    AWSSessionCredentials'
+    { _ascAccessKeyId = pAccessKeyId_
+    , _ascSecretAccessKey = pSecretAccessKey_
+    , _ascSessionToken = pSessionToken_
+    }
+
+-- | The access key for the session.
+ascAccessKeyId :: Lens' AWSSessionCredentials Text
+ascAccessKeyId = lens _ascAccessKeyId (\ s a -> s{_ascAccessKeyId = a});
+
+-- | The secret access key for the session.
+ascSecretAccessKey :: Lens' AWSSessionCredentials Text
+ascSecretAccessKey = lens _ascSecretAccessKey (\ s a -> s{_ascSecretAccessKey = a});
+
+-- | The token for the session.
+ascSessionToken :: Lens' AWSSessionCredentials Text
+ascSessionToken = lens _ascSessionToken (\ s a -> s{_ascSessionToken = a});
+
+instance FromJSON AWSSessionCredentials where
+        parseJSON
+          = withObject "AWSSessionCredentials"
+              (\ x ->
+                 AWSSessionCredentials' <$>
+                   (x .: "accessKeyId") <*> (x .: "secretAccessKey") <*>
+                     (x .: "sessionToken"))
+
+-- | Represents information about an action configuration.
+--
+-- /See:/ 'actionConfiguration' smart constructor.
+newtype ActionConfiguration = ActionConfiguration'
+    { _acConfiguration :: Maybe (Map Text Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActionConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acConfiguration'
+actionConfiguration
+    :: ActionConfiguration
+actionConfiguration =
+    ActionConfiguration'
+    { _acConfiguration = Nothing
+    }
+
+-- | The configuration data for the action.
+acConfiguration :: Lens' ActionConfiguration (HashMap Text Text)
+acConfiguration = lens _acConfiguration (\ s a -> s{_acConfiguration = a}) . _Default . _Map;
+
+instance FromJSON ActionConfiguration where
+        parseJSON
+          = withObject "ActionConfiguration"
+              (\ x ->
+                 ActionConfiguration' <$>
+                   (x .:? "configuration" .!= mempty))
+
+-- | Represents information about an action configuration property.
+--
+-- /See:/ 'actionConfigurationProperty' smart constructor.
+data ActionConfigurationProperty = ActionConfigurationProperty'
+    { _acpQueryable   :: !(Maybe Bool)
+    , _acpType        :: !(Maybe ActionConfigurationPropertyType)
+    , _acpDescription :: !(Maybe Text)
+    , _acpName        :: !Text
+    , _acpRequired    :: !Bool
+    , _acpKey         :: !Bool
+    , _acpSecret      :: !Bool
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActionConfigurationProperty' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acpQueryable'
+--
+-- * 'acpType'
+--
+-- * 'acpDescription'
+--
+-- * 'acpName'
+--
+-- * 'acpRequired'
+--
+-- * 'acpKey'
+--
+-- * 'acpSecret'
+actionConfigurationProperty
+    :: Text -- ^ 'acpName'
+    -> Bool -- ^ 'acpRequired'
+    -> Bool -- ^ 'acpKey'
+    -> Bool -- ^ 'acpSecret'
+    -> ActionConfigurationProperty
+actionConfigurationProperty pName_ pRequired_ pKey_ pSecret_ =
+    ActionConfigurationProperty'
+    { _acpQueryable = Nothing
+    , _acpType = Nothing
+    , _acpDescription = Nothing
+    , _acpName = pName_
+    , _acpRequired = pRequired_
+    , _acpKey = pKey_
+    , _acpSecret = pSecret_
+    }
+
+-- | Indicates that the proprety will be used in conjunction with
+-- PollForJobs. When creating a custom action, an action can have up to one
+-- queryable property. If it has one, that property must be both required
+-- and not secret.
+--
+-- If you create a pipeline with a custom action type, and that custom
+-- action contains a queryable property, the value for that configuration
+-- property is subject to additional restrictions. The value must be less
+-- than or equal to twenty (20) characters. The value can contain only
+-- alphanumeric characters, underscores, and hyphens.
+acpQueryable :: Lens' ActionConfigurationProperty (Maybe Bool)
+acpQueryable = lens _acpQueryable (\ s a -> s{_acpQueryable = a});
+
+-- | The type of the configuration property.
+acpType :: Lens' ActionConfigurationProperty (Maybe ActionConfigurationPropertyType)
+acpType = lens _acpType (\ s a -> s{_acpType = a});
+
+-- | The description of the action configuration property that will be
+-- displayed to users.
+acpDescription :: Lens' ActionConfigurationProperty (Maybe Text)
+acpDescription = lens _acpDescription (\ s a -> s{_acpDescription = a});
+
+-- | The name of the action configuration property.
+acpName :: Lens' ActionConfigurationProperty Text
+acpName = lens _acpName (\ s a -> s{_acpName = a});
+
+-- | Whether the configuration property is a required value.
+acpRequired :: Lens' ActionConfigurationProperty Bool
+acpRequired = lens _acpRequired (\ s a -> s{_acpRequired = a});
+
+-- | Whether the configuration property is a key.
+acpKey :: Lens' ActionConfigurationProperty Bool
+acpKey = lens _acpKey (\ s a -> s{_acpKey = a});
+
+-- | Whether the configuration property is secret. Secrets are hidden from
+-- all calls except for GetJobDetails, GetThirdPartyJobDetails,
+-- PollForJobs, and PollForThirdPartyJobs.
+--
+-- When updating a pipeline, passing * * * * * without changing any other
+-- values of the action will preserve the prior value of the secret.
+acpSecret :: Lens' ActionConfigurationProperty Bool
+acpSecret = lens _acpSecret (\ s a -> s{_acpSecret = a});
+
+instance FromJSON ActionConfigurationProperty where
+        parseJSON
+          = withObject "ActionConfigurationProperty"
+              (\ x ->
+                 ActionConfigurationProperty' <$>
+                   (x .:? "queryable") <*> (x .:? "type") <*>
+                     (x .:? "description")
+                     <*> (x .: "name")
+                     <*> (x .: "required")
+                     <*> (x .: "key")
+                     <*> (x .: "secret"))
+
+instance ToJSON ActionConfigurationProperty where
+        toJSON ActionConfigurationProperty'{..}
+          = object
+              ["queryable" .= _acpQueryable, "type" .= _acpType,
+               "description" .= _acpDescription, "name" .= _acpName,
+               "required" .= _acpRequired, "key" .= _acpKey,
+               "secret" .= _acpSecret]
+
+-- | Represents the context of an action within the stage of a pipeline to a
+-- job worker.
+--
+-- /See:/ 'actionContext' smart constructor.
+newtype ActionContext = ActionContext'
+    { _acName :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActionContext' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acName'
+actionContext
+    :: ActionContext
+actionContext =
+    ActionContext'
+    { _acName = Nothing
+    }
+
+-- | The name of the action within the context of a job.
+acName :: Lens' ActionContext (Maybe Text)
+acName = lens _acName (\ s a -> s{_acName = a});
+
+instance FromJSON ActionContext where
+        parseJSON
+          = withObject "ActionContext"
+              (\ x -> ActionContext' <$> (x .:? "name"))
+
+-- | Represents information about an action declaration.
+--
+-- /See:/ 'actionDeclaration' smart constructor.
+data ActionDeclaration = ActionDeclaration'
+    { _adOutputArtifacts :: !(Maybe [OutputArtifact])
+    , _adRunOrder        :: !(Maybe Nat)
+    , _adConfiguration   :: !(Maybe (Map Text Text))
+    , _adInputArtifacts  :: !(Maybe [InputArtifact])
+    , _adRoleARN         :: !(Maybe Text)
+    , _adName            :: !Text
+    , _adActionTypeId    :: !ActionTypeId
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActionDeclaration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'adOutputArtifacts'
+--
+-- * 'adRunOrder'
+--
+-- * 'adConfiguration'
+--
+-- * 'adInputArtifacts'
+--
+-- * 'adRoleARN'
+--
+-- * 'adName'
+--
+-- * 'adActionTypeId'
+actionDeclaration
+    :: Text -- ^ 'adName'
+    -> ActionTypeId -- ^ 'adActionTypeId'
+    -> ActionDeclaration
+actionDeclaration pName_ pActionTypeId_ =
+    ActionDeclaration'
+    { _adOutputArtifacts = Nothing
+    , _adRunOrder = Nothing
+    , _adConfiguration = Nothing
+    , _adInputArtifacts = Nothing
+    , _adRoleARN = Nothing
+    , _adName = pName_
+    , _adActionTypeId = pActionTypeId_
+    }
+
+-- | The name or ID of the result of the action declaration, such as a test
+-- or build artifact.
+adOutputArtifacts :: Lens' ActionDeclaration [OutputArtifact]
+adOutputArtifacts = lens _adOutputArtifacts (\ s a -> s{_adOutputArtifacts = a}) . _Default . _Coerce;
+
+-- | The order in which actions are run.
+adRunOrder :: Lens' ActionDeclaration (Maybe Natural)
+adRunOrder = lens _adRunOrder (\ s a -> s{_adRunOrder = a}) . mapping _Nat;
+
+-- | The action declaration\'s configuration.
+adConfiguration :: Lens' ActionDeclaration (HashMap Text Text)
+adConfiguration = lens _adConfiguration (\ s a -> s{_adConfiguration = a}) . _Default . _Map;
+
+-- | The name or ID of the artifact consumed by the action, such as a test or
+-- build artifact.
+adInputArtifacts :: Lens' ActionDeclaration [InputArtifact]
+adInputArtifacts = lens _adInputArtifacts (\ s a -> s{_adInputArtifacts = a}) . _Default . _Coerce;
+
+-- | The ARN of the IAM service role that will perform the declared action.
+-- This is assumed through the roleArn for the pipeline.
+adRoleARN :: Lens' ActionDeclaration (Maybe Text)
+adRoleARN = lens _adRoleARN (\ s a -> s{_adRoleARN = a});
+
+-- | The action declaration\'s name.
+adName :: Lens' ActionDeclaration Text
+adName = lens _adName (\ s a -> s{_adName = a});
+
+-- | The configuration information for the action type.
+adActionTypeId :: Lens' ActionDeclaration ActionTypeId
+adActionTypeId = lens _adActionTypeId (\ s a -> s{_adActionTypeId = a});
+
+instance FromJSON ActionDeclaration where
+        parseJSON
+          = withObject "ActionDeclaration"
+              (\ x ->
+                 ActionDeclaration' <$>
+                   (x .:? "outputArtifacts" .!= mempty) <*>
+                     (x .:? "runOrder")
+                     <*> (x .:? "configuration" .!= mempty)
+                     <*> (x .:? "inputArtifacts" .!= mempty)
+                     <*> (x .:? "roleArn")
+                     <*> (x .: "name")
+                     <*> (x .: "actionTypeId"))
+
+instance ToJSON ActionDeclaration where
+        toJSON ActionDeclaration'{..}
+          = object
+              ["outputArtifacts" .= _adOutputArtifacts,
+               "runOrder" .= _adRunOrder,
+               "configuration" .= _adConfiguration,
+               "inputArtifacts" .= _adInputArtifacts,
+               "roleArn" .= _adRoleARN, "name" .= _adName,
+               "actionTypeId" .= _adActionTypeId]
+
+-- | Represents information about how an action runs.
+--
+-- /See:/ 'actionExecution' smart constructor.
+data ActionExecution = ActionExecution'
+    { _aeSummary              :: !(Maybe Text)
+    , _aeStatus               :: !(Maybe ActionExecutionStatus)
+    , _aeLastStatusChange     :: !(Maybe POSIX)
+    , _aeExternalExecutionURL :: !(Maybe Text)
+    , _aePercentComplete      :: !(Maybe Nat)
+    , _aeErrorDetails         :: !(Maybe ErrorDetails)
+    , _aeExternalExecutionId  :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActionExecution' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aeSummary'
+--
+-- * 'aeStatus'
+--
+-- * 'aeLastStatusChange'
+--
+-- * 'aeExternalExecutionURL'
+--
+-- * 'aePercentComplete'
+--
+-- * 'aeErrorDetails'
+--
+-- * 'aeExternalExecutionId'
+actionExecution
+    :: ActionExecution
+actionExecution =
+    ActionExecution'
+    { _aeSummary = Nothing
+    , _aeStatus = Nothing
+    , _aeLastStatusChange = Nothing
+    , _aeExternalExecutionURL = Nothing
+    , _aePercentComplete = Nothing
+    , _aeErrorDetails = Nothing
+    , _aeExternalExecutionId = Nothing
+    }
+
+-- | A summary of the run of the action.
+aeSummary :: Lens' ActionExecution (Maybe Text)
+aeSummary = lens _aeSummary (\ s a -> s{_aeSummary = a});
+
+-- | The status of the action, or for a completed action, the last status of
+-- the action.
+aeStatus :: Lens' ActionExecution (Maybe ActionExecutionStatus)
+aeStatus = lens _aeStatus (\ s a -> s{_aeStatus = a});
+
+-- | The last status change of the action.
+aeLastStatusChange :: Lens' ActionExecution (Maybe UTCTime)
+aeLastStatusChange = lens _aeLastStatusChange (\ s a -> s{_aeLastStatusChange = a}) . mapping _Time;
+
+-- | The URL of a resource external to AWS that will be used when running the
+-- action, for example an external repository URL.
+aeExternalExecutionURL :: Lens' ActionExecution (Maybe Text)
+aeExternalExecutionURL = lens _aeExternalExecutionURL (\ s a -> s{_aeExternalExecutionURL = a});
+
+-- | A percentage of completeness of the action as it runs.
+aePercentComplete :: Lens' ActionExecution (Maybe Natural)
+aePercentComplete = lens _aePercentComplete (\ s a -> s{_aePercentComplete = a}) . mapping _Nat;
+
+-- | The details of an error returned by a URL external to AWS.
+aeErrorDetails :: Lens' ActionExecution (Maybe ErrorDetails)
+aeErrorDetails = lens _aeErrorDetails (\ s a -> s{_aeErrorDetails = a});
+
+-- | The external ID of the run of the action.
+aeExternalExecutionId :: Lens' ActionExecution (Maybe Text)
+aeExternalExecutionId = lens _aeExternalExecutionId (\ s a -> s{_aeExternalExecutionId = a});
+
+instance FromJSON ActionExecution where
+        parseJSON
+          = withObject "ActionExecution"
+              (\ x ->
+                 ActionExecution' <$>
+                   (x .:? "summary") <*> (x .:? "status") <*>
+                     (x .:? "lastStatusChange")
+                     <*> (x .:? "externalExecutionUrl")
+                     <*> (x .:? "percentComplete")
+                     <*> (x .:? "errorDetails")
+                     <*> (x .:? "externalExecutionId"))
+
+-- | Represents information about the version (or revision) of an action.
+--
+-- /See:/ 'actionRevision' smart constructor.
+data ActionRevision = ActionRevision'
+    { _arRevisionChangeId :: !(Maybe Text)
+    , _arRevisionId       :: !Text
+    , _arCreated          :: !POSIX
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActionRevision' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'arRevisionChangeId'
+--
+-- * 'arRevisionId'
+--
+-- * 'arCreated'
+actionRevision
+    :: Text -- ^ 'arRevisionId'
+    -> UTCTime -- ^ 'arCreated'
+    -> ActionRevision
+actionRevision pRevisionId_ pCreated_ =
+    ActionRevision'
+    { _arRevisionChangeId = Nothing
+    , _arRevisionId = pRevisionId_
+    , _arCreated = _Time # pCreated_
+    }
+
+-- | The unique identifier of the change that set the state to this revision,
+-- for example a deployment ID or timestamp.
+arRevisionChangeId :: Lens' ActionRevision (Maybe Text)
+arRevisionChangeId = lens _arRevisionChangeId (\ s a -> s{_arRevisionChangeId = a});
+
+-- | The system-generated unique ID that identifies the revision number of
+-- the action.
+arRevisionId :: Lens' ActionRevision Text
+arRevisionId = lens _arRevisionId (\ s a -> s{_arRevisionId = a});
+
+-- | The date and time when the most recent version of the action was
+-- created, in timestamp format.
+arCreated :: Lens' ActionRevision UTCTime
+arCreated = lens _arCreated (\ s a -> s{_arCreated = a}) . _Time;
+
+instance FromJSON ActionRevision where
+        parseJSON
+          = withObject "ActionRevision"
+              (\ x ->
+                 ActionRevision' <$>
+                   (x .:? "revisionChangeId") <*> (x .: "revisionId")
+                     <*> (x .: "created"))
+
+instance ToJSON ActionRevision where
+        toJSON ActionRevision'{..}
+          = object
+              ["revisionChangeId" .= _arRevisionChangeId,
+               "revisionId" .= _arRevisionId,
+               "created" .= _arCreated]
+
+-- | Represents information about the state of an action.
+--
+-- /See:/ 'actionState' smart constructor.
+data ActionState = ActionState'
+    { _asEntityURL       :: !(Maybe Text)
+    , _asRevisionURL     :: !(Maybe Text)
+    , _asActionName      :: !(Maybe Text)
+    , _asCurrentRevision :: !(Maybe ActionRevision)
+    , _asLatestExecution :: !(Maybe ActionExecution)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActionState' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asEntityURL'
+--
+-- * 'asRevisionURL'
+--
+-- * 'asActionName'
+--
+-- * 'asCurrentRevision'
+--
+-- * 'asLatestExecution'
+actionState
+    :: ActionState
+actionState =
+    ActionState'
+    { _asEntityURL = Nothing
+    , _asRevisionURL = Nothing
+    , _asActionName = Nothing
+    , _asCurrentRevision = Nothing
+    , _asLatestExecution = Nothing
+    }
+
+-- | A URL link for more information about the state of the action, such as a
+-- deployment group details page.
+asEntityURL :: Lens' ActionState (Maybe Text)
+asEntityURL = lens _asEntityURL (\ s a -> s{_asEntityURL = a});
+
+-- | A URL link for more information about the revision, such as a commit
+-- details page.
+asRevisionURL :: Lens' ActionState (Maybe Text)
+asRevisionURL = lens _asRevisionURL (\ s a -> s{_asRevisionURL = a});
+
+-- | The name of the action.
+asActionName :: Lens' ActionState (Maybe Text)
+asActionName = lens _asActionName (\ s a -> s{_asActionName = a});
+
+-- | Undocumented member.
+asCurrentRevision :: Lens' ActionState (Maybe ActionRevision)
+asCurrentRevision = lens _asCurrentRevision (\ s a -> s{_asCurrentRevision = a});
+
+-- | Undocumented member.
+asLatestExecution :: Lens' ActionState (Maybe ActionExecution)
+asLatestExecution = lens _asLatestExecution (\ s a -> s{_asLatestExecution = a});
+
+instance FromJSON ActionState where
+        parseJSON
+          = withObject "ActionState"
+              (\ x ->
+                 ActionState' <$>
+                   (x .:? "entityUrl") <*> (x .:? "revisionUrl") <*>
+                     (x .:? "actionName")
+                     <*> (x .:? "currentRevision")
+                     <*> (x .:? "latestExecution"))
+
+-- | Returns information about the details of an action type.
+--
+-- /See:/ 'actionType' smart constructor.
+data ActionType = ActionType'
+    { _atSettings                      :: !(Maybe ActionTypeSettings)
+    , _atActionConfigurationProperties :: !(Maybe [ActionConfigurationProperty])
+    , _atId                            :: !ActionTypeId
+    , _atInputArtifactDetails          :: !ArtifactDetails
+    , _atOutputArtifactDetails         :: !ArtifactDetails
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActionType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'atSettings'
+--
+-- * 'atActionConfigurationProperties'
+--
+-- * 'atId'
+--
+-- * 'atInputArtifactDetails'
+--
+-- * 'atOutputArtifactDetails'
+actionType
+    :: ActionTypeId -- ^ 'atId'
+    -> ArtifactDetails -- ^ 'atInputArtifactDetails'
+    -> ArtifactDetails -- ^ 'atOutputArtifactDetails'
+    -> ActionType
+actionType pId_ pInputArtifactDetails_ pOutputArtifactDetails_ =
+    ActionType'
+    { _atSettings = Nothing
+    , _atActionConfigurationProperties = Nothing
+    , _atId = pId_
+    , _atInputArtifactDetails = pInputArtifactDetails_
+    , _atOutputArtifactDetails = pOutputArtifactDetails_
+    }
+
+-- | The settings for the action type.
+atSettings :: Lens' ActionType (Maybe ActionTypeSettings)
+atSettings = lens _atSettings (\ s a -> s{_atSettings = a});
+
+-- | The configuration properties for the action type.
+atActionConfigurationProperties :: Lens' ActionType [ActionConfigurationProperty]
+atActionConfigurationProperties = lens _atActionConfigurationProperties (\ s a -> s{_atActionConfigurationProperties = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+atId :: Lens' ActionType ActionTypeId
+atId = lens _atId (\ s a -> s{_atId = a});
+
+-- | The details of the input artifact for the action, such as its commit ID.
+atInputArtifactDetails :: Lens' ActionType ArtifactDetails
+atInputArtifactDetails = lens _atInputArtifactDetails (\ s a -> s{_atInputArtifactDetails = a});
+
+-- | The details of the output artifact of the action, such as its commit ID.
+atOutputArtifactDetails :: Lens' ActionType ArtifactDetails
+atOutputArtifactDetails = lens _atOutputArtifactDetails (\ s a -> s{_atOutputArtifactDetails = a});
+
+instance FromJSON ActionType where
+        parseJSON
+          = withObject "ActionType"
+              (\ x ->
+                 ActionType' <$>
+                   (x .:? "settings") <*>
+                     (x .:? "actionConfigurationProperties" .!= mempty)
+                     <*> (x .: "id")
+                     <*> (x .: "inputArtifactDetails")
+                     <*> (x .: "outputArtifactDetails"))
+
+-- | Represents information about an action type.
+--
+-- /See:/ 'actionTypeId' smart constructor.
+data ActionTypeId = ActionTypeId'
+    { _atiCategory :: !ActionCategory
+    , _atiOwner    :: !ActionOwner
+    , _atiProvider :: !Text
+    , _atiVersion  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActionTypeId' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'atiCategory'
+--
+-- * 'atiOwner'
+--
+-- * 'atiProvider'
+--
+-- * 'atiVersion'
+actionTypeId
+    :: ActionCategory -- ^ 'atiCategory'
+    -> ActionOwner -- ^ 'atiOwner'
+    -> Text -- ^ 'atiProvider'
+    -> Text -- ^ 'atiVersion'
+    -> ActionTypeId
+actionTypeId pCategory_ pOwner_ pProvider_ pVersion_ =
+    ActionTypeId'
+    { _atiCategory = pCategory_
+    , _atiOwner = pOwner_
+    , _atiProvider = pProvider_
+    , _atiVersion = pVersion_
+    }
+
+-- | A category defines what kind of action can be taken in the stage, and
+-- constrains the provider type for the action. Valid categories are
+-- limited to one of the values below.
+atiCategory :: Lens' ActionTypeId ActionCategory
+atiCategory = lens _atiCategory (\ s a -> s{_atiCategory = a});
+
+-- | The creator of the action being called.
+atiOwner :: Lens' ActionTypeId ActionOwner
+atiOwner = lens _atiOwner (\ s a -> s{_atiOwner = a});
+
+-- | The provider of the service being called by the action. Valid providers
+-- are determined by the action category. For example, an action in the
+-- Deploy category type might have a provider of AWS CodeDeploy, which
+-- would be specified as CodeDeploy.
+atiProvider :: Lens' ActionTypeId Text
+atiProvider = lens _atiProvider (\ s a -> s{_atiProvider = a});
+
+-- | A string that identifies the action type.
+atiVersion :: Lens' ActionTypeId Text
+atiVersion = lens _atiVersion (\ s a -> s{_atiVersion = a});
+
+instance FromJSON ActionTypeId where
+        parseJSON
+          = withObject "ActionTypeId"
+              (\ x ->
+                 ActionTypeId' <$>
+                   (x .: "category") <*> (x .: "owner") <*>
+                     (x .: "provider")
+                     <*> (x .: "version"))
+
+instance ToJSON ActionTypeId where
+        toJSON ActionTypeId'{..}
+          = object
+              ["category" .= _atiCategory, "owner" .= _atiOwner,
+               "provider" .= _atiProvider, "version" .= _atiVersion]
+
+-- | Returns information about the settings for an action type.
+--
+-- /See:/ 'actionTypeSettings' smart constructor.
+data ActionTypeSettings = ActionTypeSettings'
+    { _atsThirdPartyConfigurationURL :: !(Maybe Text)
+    , _atsExecutionURLTemplate       :: !(Maybe Text)
+    , _atsEntityURLTemplate          :: !(Maybe Text)
+    , _atsRevisionURLTemplate        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActionTypeSettings' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'atsThirdPartyConfigurationURL'
+--
+-- * 'atsExecutionURLTemplate'
+--
+-- * 'atsEntityURLTemplate'
+--
+-- * 'atsRevisionURLTemplate'
+actionTypeSettings
+    :: ActionTypeSettings
+actionTypeSettings =
+    ActionTypeSettings'
+    { _atsThirdPartyConfigurationURL = Nothing
+    , _atsExecutionURLTemplate = Nothing
+    , _atsEntityURLTemplate = Nothing
+    , _atsRevisionURLTemplate = Nothing
+    }
+
+-- | The URL of a sign-up page where users can sign up for an external
+-- service and perform initial configuration of the action provided by that
+-- service.
+atsThirdPartyConfigurationURL :: Lens' ActionTypeSettings (Maybe Text)
+atsThirdPartyConfigurationURL = lens _atsThirdPartyConfigurationURL (\ s a -> s{_atsThirdPartyConfigurationURL = a});
+
+-- | The URL returned to the AWS CodePipeline console that contains a link to
+-- the top-level landing page for the external system, such as console page
+-- for AWS CodeDeploy. This link is shown on the pipeline view page in the
+-- AWS CodePipeline console and provides a link to the execution entity of
+-- the external action.
+atsExecutionURLTemplate :: Lens' ActionTypeSettings (Maybe Text)
+atsExecutionURLTemplate = lens _atsExecutionURLTemplate (\ s a -> s{_atsExecutionURLTemplate = a});
+
+-- | The URL returned to the AWS CodePipeline console that provides a deep
+-- link to the resources of the external system, such as the configuration
+-- page for an AWS CodeDeploy deployment group. This link is provided as
+-- part of the action display within the pipeline.
+atsEntityURLTemplate :: Lens' ActionTypeSettings (Maybe Text)
+atsEntityURLTemplate = lens _atsEntityURLTemplate (\ s a -> s{_atsEntityURLTemplate = a});
+
+-- | The URL returned to the AWS CodePipeline console that contains a link to
+-- the page where customers can update or change the configuration of the
+-- external action.
+atsRevisionURLTemplate :: Lens' ActionTypeSettings (Maybe Text)
+atsRevisionURLTemplate = lens _atsRevisionURLTemplate (\ s a -> s{_atsRevisionURLTemplate = a});
+
+instance FromJSON ActionTypeSettings where
+        parseJSON
+          = withObject "ActionTypeSettings"
+              (\ x ->
+                 ActionTypeSettings' <$>
+                   (x .:? "thirdPartyConfigurationUrl") <*>
+                     (x .:? "executionUrlTemplate")
+                     <*> (x .:? "entityUrlTemplate")
+                     <*> (x .:? "revisionUrlTemplate"))
+
+instance ToJSON ActionTypeSettings where
+        toJSON ActionTypeSettings'{..}
+          = object
+              ["thirdPartyConfigurationUrl" .=
+                 _atsThirdPartyConfigurationURL,
+               "executionUrlTemplate" .= _atsExecutionURLTemplate,
+               "entityUrlTemplate" .= _atsEntityURLTemplate,
+               "revisionUrlTemplate" .= _atsRevisionURLTemplate]
+
+-- | Represents information about an artifact that will be worked upon by
+-- actions in the pipeline.
+--
+-- /See:/ 'artifact' smart constructor.
+data Artifact = Artifact'
+    { _aLocation :: !(Maybe ArtifactLocation)
+    , _aName     :: !(Maybe Text)
+    , _aRevision :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Artifact' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aLocation'
+--
+-- * 'aName'
+--
+-- * 'aRevision'
+artifact
+    :: Artifact
+artifact =
+    Artifact'
+    { _aLocation = Nothing
+    , _aName = Nothing
+    , _aRevision = Nothing
+    }
+
+-- | The location of an artifact.
+aLocation :: Lens' Artifact (Maybe ArtifactLocation)
+aLocation = lens _aLocation (\ s a -> s{_aLocation = a});
+
+-- | The artifact\'s name.
+aName :: Lens' Artifact (Maybe Text)
+aName = lens _aName (\ s a -> s{_aName = a});
+
+-- | The artifact\'s revision ID. Depending on the type of object, this could
+-- be a commit ID (GitHub) or a revision ID (Amazon S3).
+aRevision :: Lens' Artifact (Maybe Text)
+aRevision = lens _aRevision (\ s a -> s{_aRevision = a});
+
+instance FromJSON Artifact where
+        parseJSON
+          = withObject "Artifact"
+              (\ x ->
+                 Artifact' <$>
+                   (x .:? "location") <*> (x .:? "name") <*>
+                     (x .:? "revision"))
+
+-- | Returns information about the details of an artifact.
+--
+-- /See:/ 'artifactDetails' smart constructor.
+data ArtifactDetails = ArtifactDetails'
+    { _adMinimumCount :: !Nat
+    , _adMaximumCount :: !Nat
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ArtifactDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'adMinimumCount'
+--
+-- * 'adMaximumCount'
+artifactDetails
+    :: Natural -- ^ 'adMinimumCount'
+    -> Natural -- ^ 'adMaximumCount'
+    -> ArtifactDetails
+artifactDetails pMinimumCount_ pMaximumCount_ =
+    ArtifactDetails'
+    { _adMinimumCount = _Nat # pMinimumCount_
+    , _adMaximumCount = _Nat # pMaximumCount_
+    }
+
+-- | The minimum number of artifacts allowed for the action type.
+adMinimumCount :: Lens' ArtifactDetails Natural
+adMinimumCount = lens _adMinimumCount (\ s a -> s{_adMinimumCount = a}) . _Nat;
+
+-- | The maximum number of artifacts allowed for the action type.
+adMaximumCount :: Lens' ArtifactDetails Natural
+adMaximumCount = lens _adMaximumCount (\ s a -> s{_adMaximumCount = a}) . _Nat;
+
+instance FromJSON ArtifactDetails where
+        parseJSON
+          = withObject "ArtifactDetails"
+              (\ x ->
+                 ArtifactDetails' <$>
+                   (x .: "minimumCount") <*> (x .: "maximumCount"))
+
+instance ToJSON ArtifactDetails where
+        toJSON ArtifactDetails'{..}
+          = object
+              ["minimumCount" .= _adMinimumCount,
+               "maximumCount" .= _adMaximumCount]
+
+-- | Represents information about the location of an artifact.
+--
+-- /See:/ 'artifactLocation' smart constructor.
+data ArtifactLocation = ArtifactLocation'
+    { _alS3Location :: !(Maybe S3ArtifactLocation)
+    , _alType       :: !(Maybe ArtifactLocationType)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ArtifactLocation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'alS3Location'
+--
+-- * 'alType'
+artifactLocation
+    :: ArtifactLocation
+artifactLocation =
+    ArtifactLocation'
+    { _alS3Location = Nothing
+    , _alType = Nothing
+    }
+
+-- | The Amazon S3 bucket that contains the artifact.
+alS3Location :: Lens' ArtifactLocation (Maybe S3ArtifactLocation)
+alS3Location = lens _alS3Location (\ s a -> s{_alS3Location = a});
+
+-- | The type of artifact in the location.
+alType :: Lens' ArtifactLocation (Maybe ArtifactLocationType)
+alType = lens _alType (\ s a -> s{_alType = a});
+
+instance FromJSON ArtifactLocation where
+        parseJSON
+          = withObject "ArtifactLocation"
+              (\ x ->
+                 ArtifactLocation' <$>
+                   (x .:? "s3Location") <*> (x .:? "type"))
+
+-- | The Amazon S3 location where artifacts are stored for the pipeline. If
+-- this Amazon S3 bucket is created manually, it must meet the requirements
+-- for AWS CodePipeline. For more information, see the Concepts.
+--
+-- /See:/ 'artifactStore' smart constructor.
+data ArtifactStore = ArtifactStore'
+    { _asType     :: !ArtifactStoreType
+    , _asLocation :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ArtifactStore' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asType'
+--
+-- * 'asLocation'
+artifactStore
+    :: ArtifactStoreType -- ^ 'asType'
+    -> Text -- ^ 'asLocation'
+    -> ArtifactStore
+artifactStore pType_ pLocation_ =
+    ArtifactStore'
+    { _asType = pType_
+    , _asLocation = pLocation_
+    }
+
+-- | The type of the artifact store, such as S3.
+asType :: Lens' ArtifactStore ArtifactStoreType
+asType = lens _asType (\ s a -> s{_asType = a});
+
+-- | The location for storing the artifacts for a pipeline, such as an S3
+-- bucket or folder.
+asLocation :: Lens' ArtifactStore Text
+asLocation = lens _asLocation (\ s a -> s{_asLocation = a});
+
+instance FromJSON ArtifactStore where
+        parseJSON
+          = withObject "ArtifactStore"
+              (\ x ->
+                 ArtifactStore' <$>
+                   (x .: "type") <*> (x .: "location"))
+
+instance ToJSON ArtifactStore where
+        toJSON ArtifactStore'{..}
+          = object
+              ["type" .= _asType, "location" .= _asLocation]
+
+-- | Represents information about a gate declaration.
+--
+-- /See:/ 'blockerDeclaration' smart constructor.
+data BlockerDeclaration = BlockerDeclaration'
+    { _bdName :: !Text
+    , _bdType :: !BlockerType
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BlockerDeclaration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bdName'
+--
+-- * 'bdType'
+blockerDeclaration
+    :: Text -- ^ 'bdName'
+    -> BlockerType -- ^ 'bdType'
+    -> BlockerDeclaration
+blockerDeclaration pName_ pType_ =
+    BlockerDeclaration'
+    { _bdName = pName_
+    , _bdType = pType_
+    }
+
+-- | The name of the gate declaration.
+bdName :: Lens' BlockerDeclaration Text
+bdName = lens _bdName (\ s a -> s{_bdName = a});
+
+-- | The type of the gate declaration.
+bdType :: Lens' BlockerDeclaration BlockerType
+bdType = lens _bdType (\ s a -> s{_bdType = a});
+
+instance FromJSON BlockerDeclaration where
+        parseJSON
+          = withObject "BlockerDeclaration"
+              (\ x ->
+                 BlockerDeclaration' <$>
+                   (x .: "name") <*> (x .: "type"))
+
+instance ToJSON BlockerDeclaration where
+        toJSON BlockerDeclaration'{..}
+          = object ["name" .= _bdName, "type" .= _bdType]
+
+-- | Represents information about a current revision.
+--
+-- /See:/ 'currentRevision' smart constructor.
+data CurrentRevision = CurrentRevision'
+    { _crRevision         :: !Text
+    , _crChangeIdentifier :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CurrentRevision' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crRevision'
+--
+-- * 'crChangeIdentifier'
+currentRevision
+    :: Text -- ^ 'crRevision'
+    -> Text -- ^ 'crChangeIdentifier'
+    -> CurrentRevision
+currentRevision pRevision_ pChangeIdentifier_ =
+    CurrentRevision'
+    { _crRevision = pRevision_
+    , _crChangeIdentifier = pChangeIdentifier_
+    }
+
+-- | The revision ID of the current version of an artifact.
+crRevision :: Lens' CurrentRevision Text
+crRevision = lens _crRevision (\ s a -> s{_crRevision = a});
+
+-- | The change identifier for the current revision.
+crChangeIdentifier :: Lens' CurrentRevision Text
+crChangeIdentifier = lens _crChangeIdentifier (\ s a -> s{_crChangeIdentifier = a});
+
+instance ToJSON CurrentRevision where
+        toJSON CurrentRevision'{..}
+          = object
+              ["revision" .= _crRevision,
+               "changeIdentifier" .= _crChangeIdentifier]
+
+-- | Represents information about an error in AWS CodePipeline.
+--
+-- /See:/ 'errorDetails' smart constructor.
+data ErrorDetails = ErrorDetails'
+    { _edCode    :: !(Maybe Text)
+    , _edMessage :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ErrorDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edCode'
+--
+-- * 'edMessage'
+errorDetails
+    :: ErrorDetails
+errorDetails =
+    ErrorDetails'
+    { _edCode = Nothing
+    , _edMessage = Nothing
+    }
+
+-- | The system ID or error number code of the error.
+edCode :: Lens' ErrorDetails (Maybe Text)
+edCode = lens _edCode (\ s a -> s{_edCode = a});
+
+-- | The text of the error message.
+edMessage :: Lens' ErrorDetails (Maybe Text)
+edMessage = lens _edMessage (\ s a -> s{_edMessage = a});
+
+instance FromJSON ErrorDetails where
+        parseJSON
+          = withObject "ErrorDetails"
+              (\ x ->
+                 ErrorDetails' <$>
+                   (x .:? "code") <*> (x .:? "message"))
+
+-- | The details of the actions taken and results produced on an artifact as
+-- it passes through stages in the pipeline.
+--
+-- /See:/ 'executionDetails' smart constructor.
+data ExecutionDetails = ExecutionDetails'
+    { _edSummary             :: !(Maybe Text)
+    , _edPercentComplete     :: !(Maybe Nat)
+    , _edExternalExecutionId :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExecutionDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edSummary'
+--
+-- * 'edPercentComplete'
+--
+-- * 'edExternalExecutionId'
+executionDetails
+    :: ExecutionDetails
+executionDetails =
+    ExecutionDetails'
+    { _edSummary = Nothing
+    , _edPercentComplete = Nothing
+    , _edExternalExecutionId = Nothing
+    }
+
+-- | The summary of the current status of the actions.
+edSummary :: Lens' ExecutionDetails (Maybe Text)
+edSummary = lens _edSummary (\ s a -> s{_edSummary = a});
+
+-- | The percentage of work completed on the action, represented on a scale
+-- of zero to one hundred percent.
+edPercentComplete :: Lens' ExecutionDetails (Maybe Natural)
+edPercentComplete = lens _edPercentComplete (\ s a -> s{_edPercentComplete = a}) . mapping _Nat;
+
+-- | The system-generated unique ID of this action used to identify this job
+-- worker in any external systems, such as AWS CodeDeploy.
+edExternalExecutionId :: Lens' ExecutionDetails (Maybe Text)
+edExternalExecutionId = lens _edExternalExecutionId (\ s a -> s{_edExternalExecutionId = a});
+
+instance ToJSON ExecutionDetails where
+        toJSON ExecutionDetails'{..}
+          = object
+              ["summary" .= _edSummary,
+               "percentComplete" .= _edPercentComplete,
+               "externalExecutionId" .= _edExternalExecutionId]
+
+-- | Represents information about failure details.
+--
+-- /See:/ 'failureDetails' smart constructor.
+data FailureDetails = FailureDetails'
+    { _fdExternalExecutionId :: !(Maybe Text)
+    , _fdMessage             :: !(Maybe Text)
+    , _fdType                :: !FailureType
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FailureDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fdExternalExecutionId'
+--
+-- * 'fdMessage'
+--
+-- * 'fdType'
+failureDetails
+    :: FailureType -- ^ 'fdType'
+    -> FailureDetails
+failureDetails pType_ =
+    FailureDetails'
+    { _fdExternalExecutionId = Nothing
+    , _fdMessage = Nothing
+    , _fdType = pType_
+    }
+
+-- | The external ID of the run of the action that failed.
+fdExternalExecutionId :: Lens' FailureDetails (Maybe Text)
+fdExternalExecutionId = lens _fdExternalExecutionId (\ s a -> s{_fdExternalExecutionId = a});
+
+-- | The message about the failure.
+fdMessage :: Lens' FailureDetails (Maybe Text)
+fdMessage = lens _fdMessage (\ s a -> s{_fdMessage = a});
+
+-- | The type of the failure.
+fdType :: Lens' FailureDetails FailureType
+fdType = lens _fdType (\ s a -> s{_fdType = a});
+
+instance ToJSON FailureDetails where
+        toJSON FailureDetails'{..}
+          = object
+              ["externalExecutionId" .= _fdExternalExecutionId,
+               "message" .= _fdMessage, "type" .= _fdType]
+
+-- | Represents information about an artifact to be worked on, such as a test
+-- or build artifact.
+--
+-- /See:/ 'inputArtifact' smart constructor.
+newtype InputArtifact = InputArtifact'
+    { _iaName :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InputArtifact' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iaName'
+inputArtifact
+    :: Text -- ^ 'iaName'
+    -> InputArtifact
+inputArtifact pName_ =
+    InputArtifact'
+    { _iaName = pName_
+    }
+
+-- | The name of the artifact to be worked on, for example, \"My App\".
+--
+-- The input artifact of an action must exactly match the output artifact
+-- declared in a preceding action, but the input artifact does not have to
+-- be the next action in strict sequence from the action that provided the
+-- output artifact. Actions in parallel can declare different output
+-- artifacts, which are in turn consumed by different following actions.
+iaName :: Lens' InputArtifact Text
+iaName = lens _iaName (\ s a -> s{_iaName = a});
+
+instance FromJSON InputArtifact where
+        parseJSON
+          = withObject "InputArtifact"
+              (\ x -> InputArtifact' <$> (x .: "name"))
+
+instance ToJSON InputArtifact where
+        toJSON InputArtifact'{..}
+          = object ["name" .= _iaName]
+
+-- | Represents information about a job.
+--
+-- /See:/ 'job' smart constructor.
+data Job = Job'
+    { _jData      :: !(Maybe JobData)
+    , _jAccountId :: !(Maybe Text)
+    , _jId        :: !(Maybe Text)
+    , _jNonce     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Job' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jData'
+--
+-- * 'jAccountId'
+--
+-- * 'jId'
+--
+-- * 'jNonce'
+job
+    :: Job
+job =
+    Job'
+    { _jData = Nothing
+    , _jAccountId = Nothing
+    , _jId = Nothing
+    , _jNonce = Nothing
+    }
+
+-- | Additional data about a job.
+jData :: Lens' Job (Maybe JobData)
+jData = lens _jData (\ s a -> s{_jData = a});
+
+-- | The ID of the AWS account to use when performing the job.
+jAccountId :: Lens' Job (Maybe Text)
+jAccountId = lens _jAccountId (\ s a -> s{_jAccountId = a});
+
+-- | The unique system-generated ID of the job.
+jId :: Lens' Job (Maybe Text)
+jId = lens _jId (\ s a -> s{_jId = a});
+
+-- | A system-generated random number that AWS CodePipeline uses to ensure
+-- that the job is being worked on by only one job worker. This number must
+-- be returned in the response.
+jNonce :: Lens' Job (Maybe Text)
+jNonce = lens _jNonce (\ s a -> s{_jNonce = a});
+
+instance FromJSON Job where
+        parseJSON
+          = withObject "Job"
+              (\ x ->
+                 Job' <$>
+                   (x .:? "data") <*> (x .:? "accountId") <*>
+                     (x .:? "id")
+                     <*> (x .:? "nonce"))
+
+-- | Represents additional information about a job required for a job worker
+-- to complete the job.
+--
+-- /See:/ 'jobData' smart constructor.
+data JobData = JobData'
+    { _jdContinuationToken   :: !(Maybe Text)
+    , _jdOutputArtifacts     :: !(Maybe [Artifact])
+    , _jdArtifactCredentials :: !(Maybe (Sensitive AWSSessionCredentials))
+    , _jdPipelineContext     :: !(Maybe PipelineContext)
+    , _jdActionTypeId        :: !(Maybe ActionTypeId)
+    , _jdInputArtifacts      :: !(Maybe [Artifact])
+    , _jdActionConfiguration :: !(Maybe ActionConfiguration)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jdContinuationToken'
+--
+-- * 'jdOutputArtifacts'
+--
+-- * 'jdArtifactCredentials'
+--
+-- * 'jdPipelineContext'
+--
+-- * 'jdActionTypeId'
+--
+-- * 'jdInputArtifacts'
+--
+-- * 'jdActionConfiguration'
+jobData
+    :: JobData
+jobData =
+    JobData'
+    { _jdContinuationToken = Nothing
+    , _jdOutputArtifacts = Nothing
+    , _jdArtifactCredentials = Nothing
+    , _jdPipelineContext = Nothing
+    , _jdActionTypeId = Nothing
+    , _jdInputArtifacts = Nothing
+    , _jdActionConfiguration = Nothing
+    }
+
+-- | A system-generated token, such as a AWS CodeDeploy deployment ID, that a
+-- job requires in order to continue the job asynchronously.
+jdContinuationToken :: Lens' JobData (Maybe Text)
+jdContinuationToken = lens _jdContinuationToken (\ s a -> s{_jdContinuationToken = a});
+
+-- | The output of the job.
+jdOutputArtifacts :: Lens' JobData [Artifact]
+jdOutputArtifacts = lens _jdOutputArtifacts (\ s a -> s{_jdOutputArtifacts = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+jdArtifactCredentials :: Lens' JobData (Maybe AWSSessionCredentials)
+jdArtifactCredentials = lens _jdArtifactCredentials (\ s a -> s{_jdArtifactCredentials = a}) . mapping _Sensitive;
+
+-- | Undocumented member.
+jdPipelineContext :: Lens' JobData (Maybe PipelineContext)
+jdPipelineContext = lens _jdPipelineContext (\ s a -> s{_jdPipelineContext = a});
+
+-- | Undocumented member.
+jdActionTypeId :: Lens' JobData (Maybe ActionTypeId)
+jdActionTypeId = lens _jdActionTypeId (\ s a -> s{_jdActionTypeId = a});
+
+-- | The artifact supplied to the job.
+jdInputArtifacts :: Lens' JobData [Artifact]
+jdInputArtifacts = lens _jdInputArtifacts (\ s a -> s{_jdInputArtifacts = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+jdActionConfiguration :: Lens' JobData (Maybe ActionConfiguration)
+jdActionConfiguration = lens _jdActionConfiguration (\ s a -> s{_jdActionConfiguration = a});
+
+instance FromJSON JobData where
+        parseJSON
+          = withObject "JobData"
+              (\ x ->
+                 JobData' <$>
+                   (x .:? "continuationToken") <*>
+                     (x .:? "outputArtifacts" .!= mempty)
+                     <*> (x .:? "artifactCredentials")
+                     <*> (x .:? "pipelineContext")
+                     <*> (x .:? "actionTypeId")
+                     <*> (x .:? "inputArtifacts" .!= mempty)
+                     <*> (x .:? "actionConfiguration"))
+
+-- | Represents information about the details of a job.
+--
+-- /See:/ 'jobDetails' smart constructor.
+data JobDetails = JobDetails'
+    { _jdData      :: !(Maybe JobData)
+    , _jdAccountId :: !(Maybe Text)
+    , _jdId        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jdData'
+--
+-- * 'jdAccountId'
+--
+-- * 'jdId'
+jobDetails
+    :: JobDetails
+jobDetails =
+    JobDetails'
+    { _jdData = Nothing
+    , _jdAccountId = Nothing
+    , _jdId = Nothing
+    }
+
+-- | Undocumented member.
+jdData :: Lens' JobDetails (Maybe JobData)
+jdData = lens _jdData (\ s a -> s{_jdData = a});
+
+-- | The AWS account ID associated with the job.
+jdAccountId :: Lens' JobDetails (Maybe Text)
+jdAccountId = lens _jdAccountId (\ s a -> s{_jdAccountId = a});
+
+-- | The unique system-generated ID of the job.
+jdId :: Lens' JobDetails (Maybe Text)
+jdId = lens _jdId (\ s a -> s{_jdId = a});
+
+instance FromJSON JobDetails where
+        parseJSON
+          = withObject "JobDetails"
+              (\ x ->
+                 JobDetails' <$>
+                   (x .:? "data") <*> (x .:? "accountId") <*>
+                     (x .:? "id"))
+
+-- | Represents information about the output of an action.
+--
+-- /See:/ 'outputArtifact' smart constructor.
+newtype OutputArtifact = OutputArtifact'
+    { _oaName :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OutputArtifact' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oaName'
+outputArtifact
+    :: Text -- ^ 'oaName'
+    -> OutputArtifact
+outputArtifact pName_ =
+    OutputArtifact'
+    { _oaName = pName_
+    }
+
+-- | The name of the output of an artifact, such as \"My App\".
+--
+-- The input artifact of an action must exactly match the output artifact
+-- declared in a preceding action, but the input artifact does not have to
+-- be the next action in strict sequence from the action that provided the
+-- output artifact. Actions in parallel can declare different output
+-- artifacts, which are in turn consumed by different following actions.
+--
+-- Output artifact names must be unique within a pipeline.
+oaName :: Lens' OutputArtifact Text
+oaName = lens _oaName (\ s a -> s{_oaName = a});
+
+instance FromJSON OutputArtifact where
+        parseJSON
+          = withObject "OutputArtifact"
+              (\ x -> OutputArtifact' <$> (x .: "name"))
+
+instance ToJSON OutputArtifact where
+        toJSON OutputArtifact'{..}
+          = object ["name" .= _oaName]
+
+-- | Represents information about a pipeline to a job worker.
+--
+-- /See:/ 'pipelineContext' smart constructor.
+data PipelineContext = PipelineContext'
+    { _pcStage        :: !(Maybe StageContext)
+    , _pcPipelineName :: !(Maybe Text)
+    , _pcAction       :: !(Maybe ActionContext)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PipelineContext' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pcStage'
+--
+-- * 'pcPipelineName'
+--
+-- * 'pcAction'
+pipelineContext
+    :: PipelineContext
+pipelineContext =
+    PipelineContext'
+    { _pcStage = Nothing
+    , _pcPipelineName = Nothing
+    , _pcAction = Nothing
+    }
+
+-- | The stage of the pipeline.
+pcStage :: Lens' PipelineContext (Maybe StageContext)
+pcStage = lens _pcStage (\ s a -> s{_pcStage = a});
+
+-- | The name of the pipeline. This is a user-specified value. Pipeline names
+-- must be unique across all pipeline names under an Amazon Web Services
+-- account.
+pcPipelineName :: Lens' PipelineContext (Maybe Text)
+pcPipelineName = lens _pcPipelineName (\ s a -> s{_pcPipelineName = a});
+
+-- | Undocumented member.
+pcAction :: Lens' PipelineContext (Maybe ActionContext)
+pcAction = lens _pcAction (\ s a -> s{_pcAction = a});
+
+instance FromJSON PipelineContext where
+        parseJSON
+          = withObject "PipelineContext"
+              (\ x ->
+                 PipelineContext' <$>
+                   (x .:? "stage") <*> (x .:? "pipelineName") <*>
+                     (x .:? "action"))
+
+-- | Represents the structure of actions and stages to be performed in the
+-- pipeline.
+--
+-- /See:/ 'pipelineDeclaration' smart constructor.
+data PipelineDeclaration = PipelineDeclaration'
+    { _pdVersion       :: !(Maybe Nat)
+    , _pdName          :: !Text
+    , _pdRoleARN       :: !Text
+    , _pdArtifactStore :: !ArtifactStore
+    , _pdStages        :: ![StageDeclaration]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PipelineDeclaration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdVersion'
+--
+-- * 'pdName'
+--
+-- * 'pdRoleARN'
+--
+-- * 'pdArtifactStore'
+--
+-- * 'pdStages'
+pipelineDeclaration
+    :: Text -- ^ 'pdName'
+    -> Text -- ^ 'pdRoleARN'
+    -> ArtifactStore -- ^ 'pdArtifactStore'
+    -> PipelineDeclaration
+pipelineDeclaration pName_ pRoleARN_ pArtifactStore_ =
+    PipelineDeclaration'
+    { _pdVersion = Nothing
+    , _pdName = pName_
+    , _pdRoleARN = pRoleARN_
+    , _pdArtifactStore = pArtifactStore_
+    , _pdStages = mempty
+    }
+
+-- | The version number of the pipeline. A new pipeline always has a version
+-- number of 1. This number is automatically incremented when a pipeline is
+-- updated.
+pdVersion :: Lens' PipelineDeclaration (Maybe Natural)
+pdVersion = lens _pdVersion (\ s a -> s{_pdVersion = a}) . mapping _Nat;
+
+-- | The name of the action to be performed.
+pdName :: Lens' PipelineDeclaration Text
+pdName = lens _pdName (\ s a -> s{_pdName = a});
+
+-- | The Amazon Resource Name (ARN) for AWS CodePipeline to use to either
+-- perform actions with no actionRoleArn, or to use to assume roles for
+-- actions with an actionRoleArn.
+pdRoleARN :: Lens' PipelineDeclaration Text
+pdRoleARN = lens _pdRoleARN (\ s a -> s{_pdRoleARN = a});
+
+-- | Undocumented member.
+pdArtifactStore :: Lens' PipelineDeclaration ArtifactStore
+pdArtifactStore = lens _pdArtifactStore (\ s a -> s{_pdArtifactStore = a});
+
+-- | The stage in which to perform the action.
+pdStages :: Lens' PipelineDeclaration [StageDeclaration]
+pdStages = lens _pdStages (\ s a -> s{_pdStages = a}) . _Coerce;
+
+instance FromJSON PipelineDeclaration where
+        parseJSON
+          = withObject "PipelineDeclaration"
+              (\ x ->
+                 PipelineDeclaration' <$>
+                   (x .:? "version") <*> (x .: "name") <*>
+                     (x .: "roleArn")
+                     <*> (x .: "artifactStore")
+                     <*> (x .:? "stages" .!= mempty))
+
+instance ToJSON PipelineDeclaration where
+        toJSON PipelineDeclaration'{..}
+          = object
+              ["version" .= _pdVersion, "name" .= _pdName,
+               "roleArn" .= _pdRoleARN,
+               "artifactStore" .= _pdArtifactStore,
+               "stages" .= _pdStages]
+
+-- | Returns a summary of a pipeline.
+--
+-- /See:/ 'pipelineSummary' smart constructor.
+data PipelineSummary = PipelineSummary'
+    { _psCreated :: !(Maybe POSIX)
+    , _psName    :: !(Maybe Text)
+    , _psVersion :: !(Maybe Nat)
+    , _psUpdated :: !(Maybe POSIX)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PipelineSummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'psCreated'
+--
+-- * 'psName'
+--
+-- * 'psVersion'
+--
+-- * 'psUpdated'
+pipelineSummary
+    :: PipelineSummary
+pipelineSummary =
+    PipelineSummary'
+    { _psCreated = Nothing
+    , _psName = Nothing
+    , _psVersion = Nothing
+    , _psUpdated = Nothing
+    }
+
+-- | The date and time the pipeline was created, in timestamp format.
+psCreated :: Lens' PipelineSummary (Maybe UTCTime)
+psCreated = lens _psCreated (\ s a -> s{_psCreated = a}) . mapping _Time;
+
+-- | The name of the pipeline.
+psName :: Lens' PipelineSummary (Maybe Text)
+psName = lens _psName (\ s a -> s{_psName = a});
+
+-- | The version number of the pipeline.
+psVersion :: Lens' PipelineSummary (Maybe Natural)
+psVersion = lens _psVersion (\ s a -> s{_psVersion = a}) . mapping _Nat;
+
+-- | The date and time of the last update to the pipeline, in timestamp
+-- format.
+psUpdated :: Lens' PipelineSummary (Maybe UTCTime)
+psUpdated = lens _psUpdated (\ s a -> s{_psUpdated = a}) . mapping _Time;
+
+instance FromJSON PipelineSummary where
+        parseJSON
+          = withObject "PipelineSummary"
+              (\ x ->
+                 PipelineSummary' <$>
+                   (x .:? "created") <*> (x .:? "name") <*>
+                     (x .:? "version")
+                     <*> (x .:? "updated"))
+
+-- | The location of the Amazon S3 bucket that contains a revision.
+--
+-- /See:/ 's3ArtifactLocation' smart constructor.
+data S3ArtifactLocation = S3ArtifactLocation'
+    { _salBucketName :: !Text
+    , _salObjectKey  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'S3ArtifactLocation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'salBucketName'
+--
+-- * 'salObjectKey'
+s3ArtifactLocation
+    :: Text -- ^ 'salBucketName'
+    -> Text -- ^ 'salObjectKey'
+    -> S3ArtifactLocation
+s3ArtifactLocation pBucketName_ pObjectKey_ =
+    S3ArtifactLocation'
+    { _salBucketName = pBucketName_
+    , _salObjectKey = pObjectKey_
+    }
+
+-- | The name of the Amazon S3 bucket.
+salBucketName :: Lens' S3ArtifactLocation Text
+salBucketName = lens _salBucketName (\ s a -> s{_salBucketName = a});
+
+-- | The key of the object in the Amazon S3 bucket, which uniquely identifies
+-- the object in the bucket.
+salObjectKey :: Lens' S3ArtifactLocation Text
+salObjectKey = lens _salObjectKey (\ s a -> s{_salObjectKey = a});
+
+instance FromJSON S3ArtifactLocation where
+        parseJSON
+          = withObject "S3ArtifactLocation"
+              (\ x ->
+                 S3ArtifactLocation' <$>
+                   (x .: "bucketName") <*> (x .: "objectKey"))
+
+-- | Represents information about a stage to a job worker.
+--
+-- /See:/ 'stageContext' smart constructor.
+newtype StageContext = StageContext'
+    { _scName :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StageContext' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scName'
+stageContext
+    :: StageContext
+stageContext =
+    StageContext'
+    { _scName = Nothing
+    }
+
+-- | The name of the stage.
+scName :: Lens' StageContext (Maybe Text)
+scName = lens _scName (\ s a -> s{_scName = a});
+
+instance FromJSON StageContext where
+        parseJSON
+          = withObject "StageContext"
+              (\ x -> StageContext' <$> (x .:? "name"))
+
+-- | Represents information about a stage and its definition.
+--
+-- /See:/ 'stageDeclaration' smart constructor.
+data StageDeclaration = StageDeclaration'
+    { _sdBlockers :: !(Maybe [BlockerDeclaration])
+    , _sdName     :: !Text
+    , _sdActions  :: ![ActionDeclaration]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StageDeclaration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdBlockers'
+--
+-- * 'sdName'
+--
+-- * 'sdActions'
+stageDeclaration
+    :: Text -- ^ 'sdName'
+    -> StageDeclaration
+stageDeclaration pName_ =
+    StageDeclaration'
+    { _sdBlockers = Nothing
+    , _sdName = pName_
+    , _sdActions = mempty
+    }
+
+-- | The gates included in a stage.
+sdBlockers :: Lens' StageDeclaration [BlockerDeclaration]
+sdBlockers = lens _sdBlockers (\ s a -> s{_sdBlockers = a}) . _Default . _Coerce;
+
+-- | The name of the stage.
+sdName :: Lens' StageDeclaration Text
+sdName = lens _sdName (\ s a -> s{_sdName = a});
+
+-- | The actions included in a stage.
+sdActions :: Lens' StageDeclaration [ActionDeclaration]
+sdActions = lens _sdActions (\ s a -> s{_sdActions = a}) . _Coerce;
+
+instance FromJSON StageDeclaration where
+        parseJSON
+          = withObject "StageDeclaration"
+              (\ x ->
+                 StageDeclaration' <$>
+                   (x .:? "blockers" .!= mempty) <*> (x .: "name") <*>
+                     (x .:? "actions" .!= mempty))
+
+instance ToJSON StageDeclaration where
+        toJSON StageDeclaration'{..}
+          = object
+              ["blockers" .= _sdBlockers, "name" .= _sdName,
+               "actions" .= _sdActions]
+
+-- | Represents information about the state of the stage.
+--
+-- /See:/ 'stageState' smart constructor.
+data StageState = StageState'
+    { _ssInboundTransitionState :: !(Maybe TransitionState)
+    , _ssActionStates           :: !(Maybe [ActionState])
+    , _ssStageName              :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StageState' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssInboundTransitionState'
+--
+-- * 'ssActionStates'
+--
+-- * 'ssStageName'
+stageState
+    :: StageState
+stageState =
+    StageState'
+    { _ssInboundTransitionState = Nothing
+    , _ssActionStates = Nothing
+    , _ssStageName = Nothing
+    }
+
+-- | The state of the inbound transition, which is either enabled or
+-- disabled.
+ssInboundTransitionState :: Lens' StageState (Maybe TransitionState)
+ssInboundTransitionState = lens _ssInboundTransitionState (\ s a -> s{_ssInboundTransitionState = a});
+
+-- | The state of the stage.
+ssActionStates :: Lens' StageState [ActionState]
+ssActionStates = lens _ssActionStates (\ s a -> s{_ssActionStates = a}) . _Default . _Coerce;
+
+-- | The name of the stage.
+ssStageName :: Lens' StageState (Maybe Text)
+ssStageName = lens _ssStageName (\ s a -> s{_ssStageName = a});
+
+instance FromJSON StageState where
+        parseJSON
+          = withObject "StageState"
+              (\ x ->
+                 StageState' <$>
+                   (x .:? "inboundTransitionState") <*>
+                     (x .:? "actionStates" .!= mempty)
+                     <*> (x .:? "stageName"))
+
+-- | A response to a PollForThirdPartyJobs request returned by AWS
+-- CodePipeline when there is a job to be worked upon by a partner action.
+--
+-- /See:/ 'thirdPartyJob' smart constructor.
+data ThirdPartyJob = ThirdPartyJob'
+    { _tpjClientId :: !(Maybe Text)
+    , _tpjJobId    :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ThirdPartyJob' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpjClientId'
+--
+-- * 'tpjJobId'
+thirdPartyJob
+    :: ThirdPartyJob
+thirdPartyJob =
+    ThirdPartyJob'
+    { _tpjClientId = Nothing
+    , _tpjJobId = Nothing
+    }
+
+-- | The clientToken portion of the clientId and clientToken pair used to
+-- verify that the calling entity is allowed access to the job and its
+-- details.
+tpjClientId :: Lens' ThirdPartyJob (Maybe Text)
+tpjClientId = lens _tpjClientId (\ s a -> s{_tpjClientId = a});
+
+-- | The identifier used to identify the job in AWS CodePipeline.
+tpjJobId :: Lens' ThirdPartyJob (Maybe Text)
+tpjJobId = lens _tpjJobId (\ s a -> s{_tpjJobId = a});
+
+instance FromJSON ThirdPartyJob where
+        parseJSON
+          = withObject "ThirdPartyJob"
+              (\ x ->
+                 ThirdPartyJob' <$>
+                   (x .:? "clientId") <*> (x .:? "jobId"))
+
+-- | Represents information about the job data for a partner action.
+--
+-- /See:/ 'thirdPartyJobData' smart constructor.
+data ThirdPartyJobData = ThirdPartyJobData'
+    { _tpjdContinuationToken   :: !(Maybe Text)
+    , _tpjdOutputArtifacts     :: !(Maybe [Artifact])
+    , _tpjdArtifactCredentials :: !(Maybe (Sensitive AWSSessionCredentials))
+    , _tpjdPipelineContext     :: !(Maybe PipelineContext)
+    , _tpjdActionTypeId        :: !(Maybe ActionTypeId)
+    , _tpjdInputArtifacts      :: !(Maybe [Artifact])
+    , _tpjdActionConfiguration :: !(Maybe ActionConfiguration)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ThirdPartyJobData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpjdContinuationToken'
+--
+-- * 'tpjdOutputArtifacts'
+--
+-- * 'tpjdArtifactCredentials'
+--
+-- * 'tpjdPipelineContext'
+--
+-- * 'tpjdActionTypeId'
+--
+-- * 'tpjdInputArtifacts'
+--
+-- * 'tpjdActionConfiguration'
+thirdPartyJobData
+    :: ThirdPartyJobData
+thirdPartyJobData =
+    ThirdPartyJobData'
+    { _tpjdContinuationToken = Nothing
+    , _tpjdOutputArtifacts = Nothing
+    , _tpjdArtifactCredentials = Nothing
+    , _tpjdPipelineContext = Nothing
+    , _tpjdActionTypeId = Nothing
+    , _tpjdInputArtifacts = Nothing
+    , _tpjdActionConfiguration = Nothing
+    }
+
+-- | A system-generated token, such as a AWS CodeDeploy deployment ID, that a
+-- job requires in order to continue the job asynchronously.
+tpjdContinuationToken :: Lens' ThirdPartyJobData (Maybe Text)
+tpjdContinuationToken = lens _tpjdContinuationToken (\ s a -> s{_tpjdContinuationToken = a});
+
+-- | The name of the artifact that will be the result of the action, if any.
+-- This name might be system-generated, such as \"MyBuiltApp\", or might be
+-- defined by the user when the action is created.
+tpjdOutputArtifacts :: Lens' ThirdPartyJobData [Artifact]
+tpjdOutputArtifacts = lens _tpjdOutputArtifacts (\ s a -> s{_tpjdOutputArtifacts = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+tpjdArtifactCredentials :: Lens' ThirdPartyJobData (Maybe AWSSessionCredentials)
+tpjdArtifactCredentials = lens _tpjdArtifactCredentials (\ s a -> s{_tpjdArtifactCredentials = a}) . mapping _Sensitive;
+
+-- | Undocumented member.
+tpjdPipelineContext :: Lens' ThirdPartyJobData (Maybe PipelineContext)
+tpjdPipelineContext = lens _tpjdPipelineContext (\ s a -> s{_tpjdPipelineContext = a});
+
+-- | Undocumented member.
+tpjdActionTypeId :: Lens' ThirdPartyJobData (Maybe ActionTypeId)
+tpjdActionTypeId = lens _tpjdActionTypeId (\ s a -> s{_tpjdActionTypeId = a});
+
+-- | The name of the artifact that will be worked upon by the action, if any.
+-- This name might be system-generated, such as \"MyApp\", or might be
+-- defined by the user when the action is created. The input artifact name
+-- must match the name of an output artifact generated by an action in an
+-- earlier action or stage of the pipeline.
+tpjdInputArtifacts :: Lens' ThirdPartyJobData [Artifact]
+tpjdInputArtifacts = lens _tpjdInputArtifacts (\ s a -> s{_tpjdInputArtifacts = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+tpjdActionConfiguration :: Lens' ThirdPartyJobData (Maybe ActionConfiguration)
+tpjdActionConfiguration = lens _tpjdActionConfiguration (\ s a -> s{_tpjdActionConfiguration = a});
+
+instance FromJSON ThirdPartyJobData where
+        parseJSON
+          = withObject "ThirdPartyJobData"
+              (\ x ->
+                 ThirdPartyJobData' <$>
+                   (x .:? "continuationToken") <*>
+                     (x .:? "outputArtifacts" .!= mempty)
+                     <*> (x .:? "artifactCredentials")
+                     <*> (x .:? "pipelineContext")
+                     <*> (x .:? "actionTypeId")
+                     <*> (x .:? "inputArtifacts" .!= mempty)
+                     <*> (x .:? "actionConfiguration"))
+
+-- | The details of a job sent in response to a GetThirdPartyJobDetails
+-- request.
+--
+-- /See:/ 'thirdPartyJobDetails' smart constructor.
+data ThirdPartyJobDetails = ThirdPartyJobDetails'
+    { _tpjdData  :: !(Maybe ThirdPartyJobData)
+    , _tpjdId    :: !(Maybe Text)
+    , _tpjdNonce :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ThirdPartyJobDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpjdData'
+--
+-- * 'tpjdId'
+--
+-- * 'tpjdNonce'
+thirdPartyJobDetails
+    :: ThirdPartyJobDetails
+thirdPartyJobDetails =
+    ThirdPartyJobDetails'
+    { _tpjdData = Nothing
+    , _tpjdId = Nothing
+    , _tpjdNonce = Nothing
+    }
+
+-- | The data to be returned by the third party job worker.
+tpjdData :: Lens' ThirdPartyJobDetails (Maybe ThirdPartyJobData)
+tpjdData = lens _tpjdData (\ s a -> s{_tpjdData = a});
+
+-- | The identifier used to identify the job details in AWS CodePipeline.
+tpjdId :: Lens' ThirdPartyJobDetails (Maybe Text)
+tpjdId = lens _tpjdId (\ s a -> s{_tpjdId = a});
+
+-- | A system-generated random number that AWS CodePipeline uses to ensure
+-- that the job is being worked on by only one job worker. This number must
+-- be returned in the response.
+tpjdNonce :: Lens' ThirdPartyJobDetails (Maybe Text)
+tpjdNonce = lens _tpjdNonce (\ s a -> s{_tpjdNonce = a});
+
+instance FromJSON ThirdPartyJobDetails where
+        parseJSON
+          = withObject "ThirdPartyJobDetails"
+              (\ x ->
+                 ThirdPartyJobDetails' <$>
+                   (x .:? "data") <*> (x .:? "id") <*> (x .:? "nonce"))
+
+-- | Represents information about the state of transitions between one stage
+-- and another stage.
+--
+-- /See:/ 'transitionState' smart constructor.
+data TransitionState = TransitionState'
+    { _tsEnabled        :: !(Maybe Bool)
+    , _tsDisabledReason :: !(Maybe Text)
+    , _tsLastChangedAt  :: !(Maybe POSIX)
+    , _tsLastChangedBy  :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TransitionState' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tsEnabled'
+--
+-- * 'tsDisabledReason'
+--
+-- * 'tsLastChangedAt'
+--
+-- * 'tsLastChangedBy'
+transitionState
+    :: TransitionState
+transitionState =
+    TransitionState'
+    { _tsEnabled = Nothing
+    , _tsDisabledReason = Nothing
+    , _tsLastChangedAt = Nothing
+    , _tsLastChangedBy = Nothing
+    }
+
+-- | Whether the transition between stages is enabled (true) or disabled
+-- (false).
+tsEnabled :: Lens' TransitionState (Maybe Bool)
+tsEnabled = lens _tsEnabled (\ s a -> s{_tsEnabled = a});
+
+-- | The user-specified reason why the transition between two stages of a
+-- pipeline was disabled.
+tsDisabledReason :: Lens' TransitionState (Maybe Text)
+tsDisabledReason = lens _tsDisabledReason (\ s a -> s{_tsDisabledReason = a});
+
+-- | The timestamp when the transition state was last changed.
+tsLastChangedAt :: Lens' TransitionState (Maybe UTCTime)
+tsLastChangedAt = lens _tsLastChangedAt (\ s a -> s{_tsLastChangedAt = a}) . mapping _Time;
+
+-- | The ID of the user who last changed the transition state.
+tsLastChangedBy :: Lens' TransitionState (Maybe Text)
+tsLastChangedBy = lens _tsLastChangedBy (\ s a -> s{_tsLastChangedBy = a});
+
+instance FromJSON TransitionState where
+        parseJSON
+          = withObject "TransitionState"
+              (\ x ->
+                 TransitionState' <$>
+                   (x .:? "enabled") <*> (x .:? "disabledReason") <*>
+                     (x .:? "lastChangedAt")
+                     <*> (x .:? "lastChangedBy"))
diff --git a/gen/Network/AWS/CodePipeline/Types/Sum.hs b/gen/Network/AWS/CodePipeline/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/Types/Sum.hs
@@ -0,0 +1,321 @@
+{-# 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.CodePipeline.Types.Sum
+-- Copyright   : (c) 2013-2015 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.CodePipeline.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data ActionCategory
+    = Build
+    | Deploy
+    | Invoke
+    | Source
+    | Test
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ActionCategory where
+    parser = takeLowerText >>= \case
+        "build" -> pure Build
+        "deploy" -> pure Deploy
+        "invoke" -> pure Invoke
+        "source" -> pure Source
+        "test" -> pure Test
+        e -> fromTextError $ "Failure parsing ActionCategory from value: '" <> e
+           <> "'. Accepted values: build, deploy, invoke, source, test"
+
+instance ToText ActionCategory where
+    toText = \case
+        Build -> "build"
+        Deploy -> "deploy"
+        Invoke -> "invoke"
+        Source -> "source"
+        Test -> "test"
+
+instance Hashable     ActionCategory
+instance ToByteString ActionCategory
+instance ToQuery      ActionCategory
+instance ToHeader     ActionCategory
+
+instance ToJSON ActionCategory where
+    toJSON = toJSONText
+
+instance FromJSON ActionCategory where
+    parseJSON = parseJSONText "ActionCategory"
+
+data ActionConfigurationPropertyType
+    = Boolean
+    | Number
+    | String
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ActionConfigurationPropertyType where
+    parser = takeLowerText >>= \case
+        "boolean" -> pure Boolean
+        "number" -> pure Number
+        "string" -> pure String
+        e -> fromTextError $ "Failure parsing ActionConfigurationPropertyType from value: '" <> e
+           <> "'. Accepted values: boolean, number, string"
+
+instance ToText ActionConfigurationPropertyType where
+    toText = \case
+        Boolean -> "boolean"
+        Number -> "number"
+        String -> "string"
+
+instance Hashable     ActionConfigurationPropertyType
+instance ToByteString ActionConfigurationPropertyType
+instance ToQuery      ActionConfigurationPropertyType
+instance ToHeader     ActionConfigurationPropertyType
+
+instance ToJSON ActionConfigurationPropertyType where
+    toJSON = toJSONText
+
+instance FromJSON ActionConfigurationPropertyType where
+    parseJSON = parseJSONText "ActionConfigurationPropertyType"
+
+data ActionExecutionStatus
+    = Failed
+    | InProgress
+    | Succeeded
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ActionExecutionStatus where
+    parser = takeLowerText >>= \case
+        "failed" -> pure Failed
+        "inprogress" -> pure InProgress
+        "succeeded" -> pure Succeeded
+        e -> fromTextError $ "Failure parsing ActionExecutionStatus from value: '" <> e
+           <> "'. Accepted values: failed, inprogress, succeeded"
+
+instance ToText ActionExecutionStatus where
+    toText = \case
+        Failed -> "failed"
+        InProgress -> "inprogress"
+        Succeeded -> "succeeded"
+
+instance Hashable     ActionExecutionStatus
+instance ToByteString ActionExecutionStatus
+instance ToQuery      ActionExecutionStatus
+instance ToHeader     ActionExecutionStatus
+
+instance FromJSON ActionExecutionStatus where
+    parseJSON = parseJSONText "ActionExecutionStatus"
+
+data ActionOwner
+    = AWS
+    | Custom
+    | ThirdParty
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ActionOwner where
+    parser = takeLowerText >>= \case
+        "aws" -> pure AWS
+        "custom" -> pure Custom
+        "thirdparty" -> pure ThirdParty
+        e -> fromTextError $ "Failure parsing ActionOwner from value: '" <> e
+           <> "'. Accepted values: aws, custom, thirdparty"
+
+instance ToText ActionOwner where
+    toText = \case
+        AWS -> "aws"
+        Custom -> "custom"
+        ThirdParty -> "thirdparty"
+
+instance Hashable     ActionOwner
+instance ToByteString ActionOwner
+instance ToQuery      ActionOwner
+instance ToHeader     ActionOwner
+
+instance ToJSON ActionOwner where
+    toJSON = toJSONText
+
+instance FromJSON ActionOwner where
+    parseJSON = parseJSONText "ActionOwner"
+
+data ArtifactLocationType =
+    ALTS3
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ArtifactLocationType where
+    parser = takeLowerText >>= \case
+        "s3" -> pure ALTS3
+        e -> fromTextError $ "Failure parsing ArtifactLocationType from value: '" <> e
+           <> "'. Accepted values: s3"
+
+instance ToText ArtifactLocationType where
+    toText = \case
+        ALTS3 -> "s3"
+
+instance Hashable     ArtifactLocationType
+instance ToByteString ArtifactLocationType
+instance ToQuery      ArtifactLocationType
+instance ToHeader     ArtifactLocationType
+
+instance FromJSON ArtifactLocationType where
+    parseJSON = parseJSONText "ArtifactLocationType"
+
+data ArtifactStoreType =
+    S3
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ArtifactStoreType where
+    parser = takeLowerText >>= \case
+        "s3" -> pure S3
+        e -> fromTextError $ "Failure parsing ArtifactStoreType from value: '" <> e
+           <> "'. Accepted values: s3"
+
+instance ToText ArtifactStoreType where
+    toText = \case
+        S3 -> "s3"
+
+instance Hashable     ArtifactStoreType
+instance ToByteString ArtifactStoreType
+instance ToQuery      ArtifactStoreType
+instance ToHeader     ArtifactStoreType
+
+instance ToJSON ArtifactStoreType where
+    toJSON = toJSONText
+
+instance FromJSON ArtifactStoreType where
+    parseJSON = parseJSONText "ArtifactStoreType"
+
+data BlockerType =
+    Schedule
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText BlockerType where
+    parser = takeLowerText >>= \case
+        "schedule" -> pure Schedule
+        e -> fromTextError $ "Failure parsing BlockerType from value: '" <> e
+           <> "'. Accepted values: schedule"
+
+instance ToText BlockerType where
+    toText = \case
+        Schedule -> "schedule"
+
+instance Hashable     BlockerType
+instance ToByteString BlockerType
+instance ToQuery      BlockerType
+instance ToHeader     BlockerType
+
+instance ToJSON BlockerType where
+    toJSON = toJSONText
+
+instance FromJSON BlockerType where
+    parseJSON = parseJSONText "BlockerType"
+
+data FailureType
+    = ConfigurationError
+    | JobFailed
+    | PermissionError
+    | RevisionOutOfSync
+    | RevisionUnavailable
+    | SystemUnavailable
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText FailureType where
+    parser = takeLowerText >>= \case
+        "configurationerror" -> pure ConfigurationError
+        "jobfailed" -> pure JobFailed
+        "permissionerror" -> pure PermissionError
+        "revisionoutofsync" -> pure RevisionOutOfSync
+        "revisionunavailable" -> pure RevisionUnavailable
+        "systemunavailable" -> pure SystemUnavailable
+        e -> fromTextError $ "Failure parsing FailureType from value: '" <> e
+           <> "'. Accepted values: configurationerror, jobfailed, permissionerror, revisionoutofsync, revisionunavailable, systemunavailable"
+
+instance ToText FailureType where
+    toText = \case
+        ConfigurationError -> "configurationerror"
+        JobFailed -> "jobfailed"
+        PermissionError -> "permissionerror"
+        RevisionOutOfSync -> "revisionoutofsync"
+        RevisionUnavailable -> "revisionunavailable"
+        SystemUnavailable -> "systemunavailable"
+
+instance Hashable     FailureType
+instance ToByteString FailureType
+instance ToQuery      FailureType
+instance ToHeader     FailureType
+
+instance ToJSON FailureType where
+    toJSON = toJSONText
+
+data JobStatus
+    = JSCreated
+    | JSDispatched
+    | JSFailed
+    | JSInProgress
+    | JSQueued
+    | JSSucceeded
+    | JSTimedOut
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText JobStatus where
+    parser = takeLowerText >>= \case
+        "created" -> pure JSCreated
+        "dispatched" -> pure JSDispatched
+        "failed" -> pure JSFailed
+        "inprogress" -> pure JSInProgress
+        "queued" -> pure JSQueued
+        "succeeded" -> pure JSSucceeded
+        "timedout" -> pure JSTimedOut
+        e -> fromTextError $ "Failure parsing JobStatus from value: '" <> e
+           <> "'. Accepted values: created, dispatched, failed, inprogress, queued, succeeded, timedout"
+
+instance ToText JobStatus where
+    toText = \case
+        JSCreated -> "created"
+        JSDispatched -> "dispatched"
+        JSFailed -> "failed"
+        JSInProgress -> "inprogress"
+        JSQueued -> "queued"
+        JSSucceeded -> "succeeded"
+        JSTimedOut -> "timedout"
+
+instance Hashable     JobStatus
+instance ToByteString JobStatus
+instance ToQuery      JobStatus
+instance ToHeader     JobStatus
+
+instance FromJSON JobStatus where
+    parseJSON = parseJSONText "JobStatus"
+
+data StageTransitionType
+    = Inbound
+    | Outbound
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText StageTransitionType where
+    parser = takeLowerText >>= \case
+        "inbound" -> pure Inbound
+        "outbound" -> pure Outbound
+        e -> fromTextError $ "Failure parsing StageTransitionType from value: '" <> e
+           <> "'. Accepted values: inbound, outbound"
+
+instance ToText StageTransitionType where
+    toText = \case
+        Inbound -> "inbound"
+        Outbound -> "outbound"
+
+instance Hashable     StageTransitionType
+instance ToByteString StageTransitionType
+instance ToQuery      StageTransitionType
+instance ToHeader     StageTransitionType
+
+instance ToJSON StageTransitionType where
+    toJSON = toJSONText
diff --git a/gen/Network/AWS/CodePipeline/UpdatePipeline.hs b/gen/Network/AWS/CodePipeline/UpdatePipeline.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/UpdatePipeline.hs
@@ -0,0 +1,133 @@
+{-# 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.CodePipeline.UpdatePipeline
+-- Copyright   : (c) 2013-2015 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)
+--
+-- Updates a specified pipeline with edits or changes to its structure. Use
+-- a JSON file with the pipeline structure in conjunction with
+-- UpdatePipeline to provide the full structure of the pipeline. Updating
+-- the pipeline increases the version number of the pipeline by 1.
+--
+-- /See:/ <http://docs.aws.amazon.com/codepipeline/latest/APIReference/API_UpdatePipeline.html AWS API Reference> for UpdatePipeline.
+module Network.AWS.CodePipeline.UpdatePipeline
+    (
+    -- * Creating a Request
+      updatePipeline
+    , UpdatePipeline
+    -- * Request Lenses
+    , upPipeline
+
+    -- * Destructuring the Response
+    , updatePipelineResponse
+    , UpdatePipelineResponse
+    -- * Response Lenses
+    , uprsPipeline
+    , uprsStatus
+    ) where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.CodePipeline.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input of an update pipeline action.
+--
+-- /See:/ 'updatePipeline' smart constructor.
+newtype UpdatePipeline = UpdatePipeline'
+    { _upPipeline :: PipelineDeclaration
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdatePipeline' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'upPipeline'
+updatePipeline
+    :: PipelineDeclaration -- ^ 'upPipeline'
+    -> UpdatePipeline
+updatePipeline pPipeline_ =
+    UpdatePipeline'
+    { _upPipeline = pPipeline_
+    }
+
+-- | The name of the pipeline to be updated.
+upPipeline :: Lens' UpdatePipeline PipelineDeclaration
+upPipeline = lens _upPipeline (\ s a -> s{_upPipeline = a});
+
+instance AWSRequest UpdatePipeline where
+        type Sv UpdatePipeline = CodePipeline
+        type Rs UpdatePipeline = UpdatePipelineResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdatePipelineResponse' <$>
+                   (x .?> "pipeline") <*> (pure (fromEnum s)))
+
+instance ToHeaders UpdatePipeline where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("CodePipeline_20150709.UpdatePipeline" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdatePipeline where
+        toJSON UpdatePipeline'{..}
+          = object ["pipeline" .= _upPipeline]
+
+instance ToPath UpdatePipeline where
+        toPath = const "/"
+
+instance ToQuery UpdatePipeline where
+        toQuery = const mempty
+
+-- | Represents the output of an update pipeline action.
+--
+-- /See:/ 'updatePipelineResponse' smart constructor.
+data UpdatePipelineResponse = UpdatePipelineResponse'
+    { _uprsPipeline :: !(Maybe PipelineDeclaration)
+    , _uprsStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdatePipelineResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uprsPipeline'
+--
+-- * 'uprsStatus'
+updatePipelineResponse
+    :: Int -- ^ 'uprsStatus'
+    -> UpdatePipelineResponse
+updatePipelineResponse pStatus_ =
+    UpdatePipelineResponse'
+    { _uprsPipeline = Nothing
+    , _uprsStatus = pStatus_
+    }
+
+-- | The structure of the updated pipeline.
+uprsPipeline :: Lens' UpdatePipelineResponse (Maybe PipelineDeclaration)
+uprsPipeline = lens _uprsPipeline (\ s a -> s{_uprsPipeline = a});
+
+-- | The response status code.
+uprsStatus :: Lens' UpdatePipelineResponse Int
+uprsStatus = lens _uprsStatus (\ s a -> s{_uprsStatus = a});
diff --git a/gen/Network/AWS/CodePipeline/Waiters.hs b/gen/Network/AWS/CodePipeline/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CodePipeline/Waiters.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.CodePipeline.Waiters
+-- Copyright   : (c) 2013-2015 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.CodePipeline.Waiters where
+
+import           Network.AWS.CodePipeline.Types
+import           Network.AWS.Prelude
+import           Network.AWS.Waiter
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-2015 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.CodePipeline
+import Test.AWS.CodePipeline.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "CodePipeline"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/CodePipeline.hs b/test/Test/AWS/CodePipeline.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/CodePipeline.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Module      : Test.AWS.CodePipeline
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+module Test.AWS.CodePipeline
+    ( tests
+    , fixtures
+    ) where
+
+import           Network.AWS.CodePipeline
+import           Test.AWS.Gen.CodePipeline
+import           Test.Tasty
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/CodePipeline/Internal.hs b/test/Test/AWS/CodePipeline/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/CodePipeline/Internal.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Test.AWS.CodePipeline.Internal
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+module Test.AWS.CodePipeline.Internal where
+
+import           Test.AWS.Prelude
diff --git a/test/Test/AWS/Gen/CodePipeline.hs b/test/Test/AWS/Gen/CodePipeline.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/CodePipeline.hs
@@ -0,0 +1,430 @@
+{-# 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.CodePipeline
+-- Copyright   : (c) 2013-2015 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.CodePipeline where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.CodePipeline
+import Test.AWS.CodePipeline.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"
+--         [ testGetPipeline $
+--             getPipeline
+--
+--         , testPutJobFailureResult $
+--             putJobFailureResult
+--
+--         , testAcknowledgeThirdPartyJob $
+--             acknowledgeThirdPartyJob
+--
+--         , testPutThirdPartyJobFailureResult $
+--             putThirdPartyJobFailureResult
+--
+--         , testPollForThirdPartyJobs $
+--             pollForThirdPartyJobs
+--
+--         , testPollForJobs $
+--             pollForJobs
+--
+--         , testStartPipelineExecution $
+--             startPipelineExecution
+--
+--         , testUpdatePipeline $
+--             updatePipeline
+--
+--         , testDeletePipeline $
+--             deletePipeline
+--
+--         , testGetPipelineState $
+--             getPipelineState
+--
+--         , testGetJobDetails $
+--             getJobDetails
+--
+--         , testListPipelines $
+--             listPipelines
+--
+--         , testDeleteCustomActionType $
+--             deleteCustomActionType
+--
+--         , testPutActionRevision $
+--             putActionRevision
+--
+--         , testPutJobSuccessResult $
+--             putJobSuccessResult
+--
+--         , testListActionTypes $
+--             listActionTypes
+--
+--         , testDisableStageTransition $
+--             disableStageTransition
+--
+--         , testAcknowledgeJob $
+--             acknowledgeJob
+--
+--         , testEnableStageTransition $
+--             enableStageTransition
+--
+--         , testGetThirdPartyJobDetails $
+--             getThirdPartyJobDetails
+--
+--         , testCreatePipeline $
+--             createPipeline
+--
+--         , testCreateCustomActionType $
+--             createCustomActionType
+--
+--         , testPutThirdPartyJobSuccessResult $
+--             putThirdPartyJobSuccessResult
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testGetPipelineResponse $
+--             getPipelineResponse
+--
+--         , testPutJobFailureResultResponse $
+--             putJobFailureResultResponse
+--
+--         , testAcknowledgeThirdPartyJobResponse $
+--             acknowledgeThirdPartyJobResponse
+--
+--         , testPutThirdPartyJobFailureResultResponse $
+--             putThirdPartyJobFailureResultResponse
+--
+--         , testPollForThirdPartyJobsResponse $
+--             pollForThirdPartyJobsResponse
+--
+--         , testPollForJobsResponse $
+--             pollForJobsResponse
+--
+--         , testStartPipelineExecutionResponse $
+--             startPipelineExecutionResponse
+--
+--         , testUpdatePipelineResponse $
+--             updatePipelineResponse
+--
+--         , testDeletePipelineResponse $
+--             deletePipelineResponse
+--
+--         , testGetPipelineStateResponse $
+--             getPipelineStateResponse
+--
+--         , testGetJobDetailsResponse $
+--             getJobDetailsResponse
+--
+--         , testListPipelinesResponse $
+--             listPipelinesResponse
+--
+--         , testDeleteCustomActionTypeResponse $
+--             deleteCustomActionTypeResponse
+--
+--         , testPutActionRevisionResponse $
+--             putActionRevisionResponse
+--
+--         , testPutJobSuccessResultResponse $
+--             putJobSuccessResultResponse
+--
+--         , testListActionTypesResponse $
+--             listActionTypesResponse
+--
+--         , testDisableStageTransitionResponse $
+--             disableStageTransitionResponse
+--
+--         , testAcknowledgeJobResponse $
+--             acknowledgeJobResponse
+--
+--         , testEnableStageTransitionResponse $
+--             enableStageTransitionResponse
+--
+--         , testGetThirdPartyJobDetailsResponse $
+--             getThirdPartyJobDetailsResponse
+--
+--         , testCreatePipelineResponse $
+--             createPipelineResponse
+--
+--         , testCreateCustomActionTypeResponse $
+--             createCustomActionTypeResponse
+--
+--         , testPutThirdPartyJobSuccessResultResponse $
+--             putThirdPartyJobSuccessResultResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testGetPipeline :: GetPipeline -> TestTree
+testGetPipeline = req
+    "GetPipeline"
+    "fixture/GetPipeline"
+
+testPutJobFailureResult :: PutJobFailureResult -> TestTree
+testPutJobFailureResult = req
+    "PutJobFailureResult"
+    "fixture/PutJobFailureResult"
+
+testAcknowledgeThirdPartyJob :: AcknowledgeThirdPartyJob -> TestTree
+testAcknowledgeThirdPartyJob = req
+    "AcknowledgeThirdPartyJob"
+    "fixture/AcknowledgeThirdPartyJob"
+
+testPutThirdPartyJobFailureResult :: PutThirdPartyJobFailureResult -> TestTree
+testPutThirdPartyJobFailureResult = req
+    "PutThirdPartyJobFailureResult"
+    "fixture/PutThirdPartyJobFailureResult"
+
+testPollForThirdPartyJobs :: PollForThirdPartyJobs -> TestTree
+testPollForThirdPartyJobs = req
+    "PollForThirdPartyJobs"
+    "fixture/PollForThirdPartyJobs"
+
+testPollForJobs :: PollForJobs -> TestTree
+testPollForJobs = req
+    "PollForJobs"
+    "fixture/PollForJobs"
+
+testStartPipelineExecution :: StartPipelineExecution -> TestTree
+testStartPipelineExecution = req
+    "StartPipelineExecution"
+    "fixture/StartPipelineExecution"
+
+testUpdatePipeline :: UpdatePipeline -> TestTree
+testUpdatePipeline = req
+    "UpdatePipeline"
+    "fixture/UpdatePipeline"
+
+testDeletePipeline :: DeletePipeline -> TestTree
+testDeletePipeline = req
+    "DeletePipeline"
+    "fixture/DeletePipeline"
+
+testGetPipelineState :: GetPipelineState -> TestTree
+testGetPipelineState = req
+    "GetPipelineState"
+    "fixture/GetPipelineState"
+
+testGetJobDetails :: GetJobDetails -> TestTree
+testGetJobDetails = req
+    "GetJobDetails"
+    "fixture/GetJobDetails"
+
+testListPipelines :: ListPipelines -> TestTree
+testListPipelines = req
+    "ListPipelines"
+    "fixture/ListPipelines"
+
+testDeleteCustomActionType :: DeleteCustomActionType -> TestTree
+testDeleteCustomActionType = req
+    "DeleteCustomActionType"
+    "fixture/DeleteCustomActionType"
+
+testPutActionRevision :: PutActionRevision -> TestTree
+testPutActionRevision = req
+    "PutActionRevision"
+    "fixture/PutActionRevision"
+
+testPutJobSuccessResult :: PutJobSuccessResult -> TestTree
+testPutJobSuccessResult = req
+    "PutJobSuccessResult"
+    "fixture/PutJobSuccessResult"
+
+testListActionTypes :: ListActionTypes -> TestTree
+testListActionTypes = req
+    "ListActionTypes"
+    "fixture/ListActionTypes"
+
+testDisableStageTransition :: DisableStageTransition -> TestTree
+testDisableStageTransition = req
+    "DisableStageTransition"
+    "fixture/DisableStageTransition"
+
+testAcknowledgeJob :: AcknowledgeJob -> TestTree
+testAcknowledgeJob = req
+    "AcknowledgeJob"
+    "fixture/AcknowledgeJob"
+
+testEnableStageTransition :: EnableStageTransition -> TestTree
+testEnableStageTransition = req
+    "EnableStageTransition"
+    "fixture/EnableStageTransition"
+
+testGetThirdPartyJobDetails :: GetThirdPartyJobDetails -> TestTree
+testGetThirdPartyJobDetails = req
+    "GetThirdPartyJobDetails"
+    "fixture/GetThirdPartyJobDetails"
+
+testCreatePipeline :: CreatePipeline -> TestTree
+testCreatePipeline = req
+    "CreatePipeline"
+    "fixture/CreatePipeline"
+
+testCreateCustomActionType :: CreateCustomActionType -> TestTree
+testCreateCustomActionType = req
+    "CreateCustomActionType"
+    "fixture/CreateCustomActionType"
+
+testPutThirdPartyJobSuccessResult :: PutThirdPartyJobSuccessResult -> TestTree
+testPutThirdPartyJobSuccessResult = req
+    "PutThirdPartyJobSuccessResult"
+    "fixture/PutThirdPartyJobSuccessResult"
+
+-- Responses
+
+testGetPipelineResponse :: GetPipelineResponse -> TestTree
+testGetPipelineResponse = res
+    "GetPipelineResponse"
+    "fixture/GetPipelineResponse"
+    (Proxy :: Proxy GetPipeline)
+
+testPutJobFailureResultResponse :: PutJobFailureResultResponse -> TestTree
+testPutJobFailureResultResponse = res
+    "PutJobFailureResultResponse"
+    "fixture/PutJobFailureResultResponse"
+    (Proxy :: Proxy PutJobFailureResult)
+
+testAcknowledgeThirdPartyJobResponse :: AcknowledgeThirdPartyJobResponse -> TestTree
+testAcknowledgeThirdPartyJobResponse = res
+    "AcknowledgeThirdPartyJobResponse"
+    "fixture/AcknowledgeThirdPartyJobResponse"
+    (Proxy :: Proxy AcknowledgeThirdPartyJob)
+
+testPutThirdPartyJobFailureResultResponse :: PutThirdPartyJobFailureResultResponse -> TestTree
+testPutThirdPartyJobFailureResultResponse = res
+    "PutThirdPartyJobFailureResultResponse"
+    "fixture/PutThirdPartyJobFailureResultResponse"
+    (Proxy :: Proxy PutThirdPartyJobFailureResult)
+
+testPollForThirdPartyJobsResponse :: PollForThirdPartyJobsResponse -> TestTree
+testPollForThirdPartyJobsResponse = res
+    "PollForThirdPartyJobsResponse"
+    "fixture/PollForThirdPartyJobsResponse"
+    (Proxy :: Proxy PollForThirdPartyJobs)
+
+testPollForJobsResponse :: PollForJobsResponse -> TestTree
+testPollForJobsResponse = res
+    "PollForJobsResponse"
+    "fixture/PollForJobsResponse"
+    (Proxy :: Proxy PollForJobs)
+
+testStartPipelineExecutionResponse :: StartPipelineExecutionResponse -> TestTree
+testStartPipelineExecutionResponse = res
+    "StartPipelineExecutionResponse"
+    "fixture/StartPipelineExecutionResponse"
+    (Proxy :: Proxy StartPipelineExecution)
+
+testUpdatePipelineResponse :: UpdatePipelineResponse -> TestTree
+testUpdatePipelineResponse = res
+    "UpdatePipelineResponse"
+    "fixture/UpdatePipelineResponse"
+    (Proxy :: Proxy UpdatePipeline)
+
+testDeletePipelineResponse :: DeletePipelineResponse -> TestTree
+testDeletePipelineResponse = res
+    "DeletePipelineResponse"
+    "fixture/DeletePipelineResponse"
+    (Proxy :: Proxy DeletePipeline)
+
+testGetPipelineStateResponse :: GetPipelineStateResponse -> TestTree
+testGetPipelineStateResponse = res
+    "GetPipelineStateResponse"
+    "fixture/GetPipelineStateResponse"
+    (Proxy :: Proxy GetPipelineState)
+
+testGetJobDetailsResponse :: GetJobDetailsResponse -> TestTree
+testGetJobDetailsResponse = res
+    "GetJobDetailsResponse"
+    "fixture/GetJobDetailsResponse"
+    (Proxy :: Proxy GetJobDetails)
+
+testListPipelinesResponse :: ListPipelinesResponse -> TestTree
+testListPipelinesResponse = res
+    "ListPipelinesResponse"
+    "fixture/ListPipelinesResponse"
+    (Proxy :: Proxy ListPipelines)
+
+testDeleteCustomActionTypeResponse :: DeleteCustomActionTypeResponse -> TestTree
+testDeleteCustomActionTypeResponse = res
+    "DeleteCustomActionTypeResponse"
+    "fixture/DeleteCustomActionTypeResponse"
+    (Proxy :: Proxy DeleteCustomActionType)
+
+testPutActionRevisionResponse :: PutActionRevisionResponse -> TestTree
+testPutActionRevisionResponse = res
+    "PutActionRevisionResponse"
+    "fixture/PutActionRevisionResponse"
+    (Proxy :: Proxy PutActionRevision)
+
+testPutJobSuccessResultResponse :: PutJobSuccessResultResponse -> TestTree
+testPutJobSuccessResultResponse = res
+    "PutJobSuccessResultResponse"
+    "fixture/PutJobSuccessResultResponse"
+    (Proxy :: Proxy PutJobSuccessResult)
+
+testListActionTypesResponse :: ListActionTypesResponse -> TestTree
+testListActionTypesResponse = res
+    "ListActionTypesResponse"
+    "fixture/ListActionTypesResponse"
+    (Proxy :: Proxy ListActionTypes)
+
+testDisableStageTransitionResponse :: DisableStageTransitionResponse -> TestTree
+testDisableStageTransitionResponse = res
+    "DisableStageTransitionResponse"
+    "fixture/DisableStageTransitionResponse"
+    (Proxy :: Proxy DisableStageTransition)
+
+testAcknowledgeJobResponse :: AcknowledgeJobResponse -> TestTree
+testAcknowledgeJobResponse = res
+    "AcknowledgeJobResponse"
+    "fixture/AcknowledgeJobResponse"
+    (Proxy :: Proxy AcknowledgeJob)
+
+testEnableStageTransitionResponse :: EnableStageTransitionResponse -> TestTree
+testEnableStageTransitionResponse = res
+    "EnableStageTransitionResponse"
+    "fixture/EnableStageTransitionResponse"
+    (Proxy :: Proxy EnableStageTransition)
+
+testGetThirdPartyJobDetailsResponse :: GetThirdPartyJobDetailsResponse -> TestTree
+testGetThirdPartyJobDetailsResponse = res
+    "GetThirdPartyJobDetailsResponse"
+    "fixture/GetThirdPartyJobDetailsResponse"
+    (Proxy :: Proxy GetThirdPartyJobDetails)
+
+testCreatePipelineResponse :: CreatePipelineResponse -> TestTree
+testCreatePipelineResponse = res
+    "CreatePipelineResponse"
+    "fixture/CreatePipelineResponse"
+    (Proxy :: Proxy CreatePipeline)
+
+testCreateCustomActionTypeResponse :: CreateCustomActionTypeResponse -> TestTree
+testCreateCustomActionTypeResponse = res
+    "CreateCustomActionTypeResponse"
+    "fixture/CreateCustomActionTypeResponse"
+    (Proxy :: Proxy CreateCustomActionType)
+
+testPutThirdPartyJobSuccessResultResponse :: PutThirdPartyJobSuccessResultResponse -> TestTree
+testPutThirdPartyJobSuccessResultResponse = res
+    "PutThirdPartyJobSuccessResultResponse"
+    "fixture/PutThirdPartyJobSuccessResultResponse"
+    (Proxy :: Proxy PutThirdPartyJobSuccessResult)
