diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -7,9 +7,8 @@
 
 
 ## Version
-
-`1.6.1`
-
+ 
+`2.0` - Derived from API version @2017-09-29@ of the AWS service descriptions, licensed under Apache 2.0.
 
 ## Description
 
@@ -26,7 +25,7 @@
 The provided lenses should be compatible with any of the major lens libraries
 [lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
 
-See [Network.AWS.IoTJobsData](http://hackage.haskell.org/package/amazonka-iot-jobs-dataplane/docs/Network-AWS-IoTJobsData.html)
+See [Amazonka.IoTJobsData](http://hackage.haskell.org/package/amazonka-iot-jobs-dataplane/docs/Amazonka-IoTJobsData.html)
 or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
 
 
diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import           Distribution.Simple
-main = defaultMain
diff --git a/amazonka-iot-jobs-dataplane.cabal b/amazonka-iot-jobs-dataplane.cabal
--- a/amazonka-iot-jobs-dataplane.cabal
+++ b/amazonka-iot-jobs-dataplane.cabal
@@ -1,89 +1,91 @@
-name:                  amazonka-iot-jobs-dataplane
-version:               1.6.1
-synopsis:              Amazon IoT Jobs Data Plane SDK.
-homepage:              https://github.com/brendanhay/amazonka
-bug-reports:           https://github.com/brendanhay/amazonka/issues
-license:               MPL-2.0
-license-file:          LICENSE
-author:                Brendan Hay
-maintainer:            Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-copyright:             Copyright (c) 2013-2018 Brendan Hay
-category:              Network, AWS, Cloud, Distributed Computing
-build-type:            Simple
-cabal-version:         >= 1.10
-extra-source-files:    README.md fixture/*.yaml fixture/*.proto src/.gitkeep
+cabal-version:      2.2
+name:               amazonka-iot-jobs-dataplane
+version:            2.0
+synopsis:           Amazon IoT Jobs Data Plane SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
 description:
-    The types from this library are intended to be used with
-    <http://hackage.haskell.org/package/amazonka amazonka>, which provides
-    mechanisms for specifying AuthN/AuthZ information, sending requests,
-    and receiving responses.
-    .
-    Lenses are used for constructing and manipulating types,
-    due to the depth of nesting of AWS types and transparency regarding
-    de/serialisation into more palatable Haskell values.
-    The provided lenses should be compatible with any of the major lens libraries
-    such as <http://hackage.haskell.org/package/lens lens> or
-    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
-    .
-    See "Network.AWS.IoTJobsData" or <https://aws.amazon.com/documentation/ the AWS documentation>
-    to get started.
+  Derived from API version @2017-09-29@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.IoTJobsData.Lens" and are
+  suitable for use with a lens package such as <http://hackage.haskell.org/package/lens lens> or <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+  .
+  See "Amazonka.IoTJobsData" and the <https://aws.amazon.com/documentation/ AWS documentation> to get started.
 
 source-repository head
-    type:              git
-    location:          git://github.com/brendanhay/amazonka.git
-    subdir:            amazonka-iot-jobs-dataplane
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-iot-jobs-dataplane
 
 library
-    default-language:  Haskell2010
-    hs-source-dirs:    src gen
-
-    ghc-options:
-        -Wall
-        -fwarn-incomplete-uni-patterns
-        -fwarn-incomplete-record-updates
-        -funbox-strict-fields
-
-    exposed-modules:
-          Network.AWS.IoTJobsData
-        , Network.AWS.IoTJobsData.DescribeJobExecution
-        , Network.AWS.IoTJobsData.GetPendingJobExecutions
-        , Network.AWS.IoTJobsData.StartNextPendingJobExecution
-        , Network.AWS.IoTJobsData.Types
-        , Network.AWS.IoTJobsData.UpdateJobExecution
-        , Network.AWS.IoTJobsData.Waiters
+  default-language: Haskell2010
+  hs-source-dirs:   src gen
+  ghc-options:
+    -Wall -fwarn-incomplete-uni-patterns
+    -fwarn-incomplete-record-updates -funbox-strict-fields
 
-    other-modules:
-          Network.AWS.IoTJobsData.Types.Product
-        , Network.AWS.IoTJobsData.Types.Sum
+  exposed-modules:
+    Amazonka.IoTJobsData
+    Amazonka.IoTJobsData.DescribeJobExecution
+    Amazonka.IoTJobsData.GetPendingJobExecutions
+    Amazonka.IoTJobsData.Lens
+    Amazonka.IoTJobsData.StartNextPendingJobExecution
+    Amazonka.IoTJobsData.Types
+    Amazonka.IoTJobsData.Types.JobExecution
+    Amazonka.IoTJobsData.Types.JobExecutionState
+    Amazonka.IoTJobsData.Types.JobExecutionStatus
+    Amazonka.IoTJobsData.Types.JobExecutionSummary
+    Amazonka.IoTJobsData.UpdateJobExecution
+    Amazonka.IoTJobsData.Waiters
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , base          >= 4.7     && < 5
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
 
 test-suite amazonka-iot-jobs-dataplane-test
-    type:              exitcode-stdio-1.0
-    default-language:  Haskell2010
-    hs-source-dirs:    test
-    main-is:           Main.hs
-
-    ghc-options:       -Wall -threaded
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
 
-    -- This section is encoded by the template and any modules added by
-    -- hand outside these namespaces will not correctly be added to the
-    -- distribution package.
-    other-modules:
-          Test.AWS.IoTJobsData
-        , Test.AWS.Gen.IoTJobsData
-        , Test.AWS.IoTJobsData.Internal
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.Gen.IoTJobsData
+    Test.Amazonka.IoTJobsData
+    Test.Amazonka.IoTJobsData.Internal
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , amazonka-test == 1.6.1.*
-        , amazonka-iot-jobs-dataplane
-        , base
-        , bytestring
-        , tasty
-        , tasty-hunit
-        , text
-        , time
-        , unordered-containers
+  build-depends:
+    , amazonka-core                >=2.0 && <2.1
+    , amazonka-iot-jobs-dataplane
+    , amazonka-test                >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/gen/Amazonka/IoTJobsData.hs b/gen/Amazonka/IoTJobsData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTJobsData.hs
@@ -0,0 +1,142 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.IoTJobsData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2017-09-29@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- AWS IoT Jobs is a service that allows you to define a set of jobs —
+-- remote operations that are sent to and executed on one or more devices
+-- connected to AWS IoT. For example, you can define a job that instructs a
+-- set of devices to download and install application or firmware updates,
+-- reboot, rotate certificates, or perform remote troubleshooting
+-- operations.
+--
+-- To create a job, you make a job document which is a description of the
+-- remote operations to be performed, and you specify a list of targets
+-- that should perform the operations. The targets can be individual
+-- things, thing groups or both.
+--
+-- AWS IoT Jobs sends a message to inform the targets that a job is
+-- available. The target starts the execution of the job by downloading the
+-- job document, performing the operations it specifies, and reporting its
+-- progress to AWS IoT. The Jobs service provides commands to track the
+-- progress of a job on a specific target and for all the targets of the
+-- job
+module Amazonka.IoTJobsData
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** CertificateValidationException
+    _CertificateValidationException,
+
+    -- ** InvalidRequestException
+    _InvalidRequestException,
+
+    -- ** InvalidStateTransitionException
+    _InvalidStateTransitionException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceUnavailableException
+    _ServiceUnavailableException,
+
+    -- ** TerminalStateException
+    _TerminalStateException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** DescribeJobExecution
+    DescribeJobExecution (DescribeJobExecution'),
+    newDescribeJobExecution,
+    DescribeJobExecutionResponse (DescribeJobExecutionResponse'),
+    newDescribeJobExecutionResponse,
+
+    -- ** GetPendingJobExecutions
+    GetPendingJobExecutions (GetPendingJobExecutions'),
+    newGetPendingJobExecutions,
+    GetPendingJobExecutionsResponse (GetPendingJobExecutionsResponse'),
+    newGetPendingJobExecutionsResponse,
+
+    -- ** StartNextPendingJobExecution
+    StartNextPendingJobExecution (StartNextPendingJobExecution'),
+    newStartNextPendingJobExecution,
+    StartNextPendingJobExecutionResponse (StartNextPendingJobExecutionResponse'),
+    newStartNextPendingJobExecutionResponse,
+
+    -- ** UpdateJobExecution
+    UpdateJobExecution (UpdateJobExecution'),
+    newUpdateJobExecution,
+    UpdateJobExecutionResponse (UpdateJobExecutionResponse'),
+    newUpdateJobExecutionResponse,
+
+    -- * Types
+
+    -- ** JobExecutionStatus
+    JobExecutionStatus (..),
+
+    -- ** JobExecution
+    JobExecution (JobExecution'),
+    newJobExecution,
+
+    -- ** JobExecutionState
+    JobExecutionState (JobExecutionState'),
+    newJobExecutionState,
+
+    -- ** JobExecutionSummary
+    JobExecutionSummary (JobExecutionSummary'),
+    newJobExecutionSummary,
+  )
+where
+
+import Amazonka.IoTJobsData.DescribeJobExecution
+import Amazonka.IoTJobsData.GetPendingJobExecutions
+import Amazonka.IoTJobsData.Lens
+import Amazonka.IoTJobsData.StartNextPendingJobExecution
+import Amazonka.IoTJobsData.Types
+import Amazonka.IoTJobsData.UpdateJobExecution
+import Amazonka.IoTJobsData.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 'IoTJobsData'.
+
+-- $operations
+-- Some AWS operations return results that are incomplete and require subsequent
+-- requests in order to obtain the entire result set. The process of sending
+-- subsequent requests to continue where a previous request left off is called
+-- pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+-- 1000 objects at a time, and you must send subsequent requests with the
+-- appropriate Marker in order to retrieve the next page of results.
+--
+-- Operations that have an 'AWSPager' instance can transparently perform subsequent
+-- requests, correctly setting Markers and other request facets to iterate through
+-- the entire result set of a truncated API operation. Operations which support
+-- this have an additional note in the documentation.
+--
+-- Many operations have the ability to filter results on the server side. See the
+-- individual operation parameters for details.
+
+-- $waiters
+-- Waiters poll by repeatedly sending a request until some remote success condition
+-- configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+-- determines how many attempts should be made, in addition to delay and retry strategies.
diff --git a/gen/Amazonka/IoTJobsData/DescribeJobExecution.hs b/gen/Amazonka/IoTJobsData/DescribeJobExecution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTJobsData/DescribeJobExecution.hs
@@ -0,0 +1,214 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTJobsData.DescribeJobExecution
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets details of a job execution.
+module Amazonka.IoTJobsData.DescribeJobExecution
+  ( -- * Creating a Request
+    DescribeJobExecution (..),
+    newDescribeJobExecution,
+
+    -- * Request Lenses
+    describeJobExecution_executionNumber,
+    describeJobExecution_includeJobDocument,
+    describeJobExecution_jobId,
+    describeJobExecution_thingName,
+
+    -- * Destructuring the Response
+    DescribeJobExecutionResponse (..),
+    newDescribeJobExecutionResponse,
+
+    -- * Response Lenses
+    describeJobExecutionResponse_execution,
+    describeJobExecutionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTJobsData.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeJobExecution' smart constructor.
+data DescribeJobExecution = DescribeJobExecution'
+  { -- | Optional. A number that identifies a particular job execution on a
+    -- particular device. If not specified, the latest job execution is
+    -- returned.
+    executionNumber :: Prelude.Maybe Prelude.Integer,
+    -- | Optional. When set to true, the response contains the job document. The
+    -- default is false.
+    includeJobDocument :: Prelude.Maybe Prelude.Bool,
+    -- | The unique identifier assigned to this job when it was created.
+    jobId :: Prelude.Text,
+    -- | The thing name associated with the device the job execution is running
+    -- on.
+    thingName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeJobExecution' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'executionNumber', 'describeJobExecution_executionNumber' - Optional. A number that identifies a particular job execution on a
+-- particular device. If not specified, the latest job execution is
+-- returned.
+--
+-- 'includeJobDocument', 'describeJobExecution_includeJobDocument' - Optional. When set to true, the response contains the job document. The
+-- default is false.
+--
+-- 'jobId', 'describeJobExecution_jobId' - The unique identifier assigned to this job when it was created.
+--
+-- 'thingName', 'describeJobExecution_thingName' - The thing name associated with the device the job execution is running
+-- on.
+newDescribeJobExecution ::
+  -- | 'jobId'
+  Prelude.Text ->
+  -- | 'thingName'
+  Prelude.Text ->
+  DescribeJobExecution
+newDescribeJobExecution pJobId_ pThingName_ =
+  DescribeJobExecution'
+    { executionNumber =
+        Prelude.Nothing,
+      includeJobDocument = Prelude.Nothing,
+      jobId = pJobId_,
+      thingName = pThingName_
+    }
+
+-- | Optional. A number that identifies a particular job execution on a
+-- particular device. If not specified, the latest job execution is
+-- returned.
+describeJobExecution_executionNumber :: Lens.Lens' DescribeJobExecution (Prelude.Maybe Prelude.Integer)
+describeJobExecution_executionNumber = Lens.lens (\DescribeJobExecution' {executionNumber} -> executionNumber) (\s@DescribeJobExecution' {} a -> s {executionNumber = a} :: DescribeJobExecution)
+
+-- | Optional. When set to true, the response contains the job document. The
+-- default is false.
+describeJobExecution_includeJobDocument :: Lens.Lens' DescribeJobExecution (Prelude.Maybe Prelude.Bool)
+describeJobExecution_includeJobDocument = Lens.lens (\DescribeJobExecution' {includeJobDocument} -> includeJobDocument) (\s@DescribeJobExecution' {} a -> s {includeJobDocument = a} :: DescribeJobExecution)
+
+-- | The unique identifier assigned to this job when it was created.
+describeJobExecution_jobId :: Lens.Lens' DescribeJobExecution Prelude.Text
+describeJobExecution_jobId = Lens.lens (\DescribeJobExecution' {jobId} -> jobId) (\s@DescribeJobExecution' {} a -> s {jobId = a} :: DescribeJobExecution)
+
+-- | The thing name associated with the device the job execution is running
+-- on.
+describeJobExecution_thingName :: Lens.Lens' DescribeJobExecution Prelude.Text
+describeJobExecution_thingName = Lens.lens (\DescribeJobExecution' {thingName} -> thingName) (\s@DescribeJobExecution' {} a -> s {thingName = a} :: DescribeJobExecution)
+
+instance Core.AWSRequest DescribeJobExecution where
+  type
+    AWSResponse DescribeJobExecution =
+      DescribeJobExecutionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeJobExecutionResponse'
+            Prelude.<$> (x Data..?> "execution")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeJobExecution where
+  hashWithSalt _salt DescribeJobExecution' {..} =
+    _salt
+      `Prelude.hashWithSalt` executionNumber
+      `Prelude.hashWithSalt` includeJobDocument
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` thingName
+
+instance Prelude.NFData DescribeJobExecution where
+  rnf DescribeJobExecution' {..} =
+    Prelude.rnf executionNumber
+      `Prelude.seq` Prelude.rnf includeJobDocument
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf thingName
+
+instance Data.ToHeaders DescribeJobExecution where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeJobExecution where
+  toPath DescribeJobExecution' {..} =
+    Prelude.mconcat
+      [ "/things/",
+        Data.toBS thingName,
+        "/jobs/",
+        Data.toBS jobId
+      ]
+
+instance Data.ToQuery DescribeJobExecution where
+  toQuery DescribeJobExecution' {..} =
+    Prelude.mconcat
+      [ "executionNumber" Data.=: executionNumber,
+        "includeJobDocument" Data.=: includeJobDocument
+      ]
+
+-- | /See:/ 'newDescribeJobExecutionResponse' smart constructor.
+data DescribeJobExecutionResponse = DescribeJobExecutionResponse'
+  { -- | Contains data about a job execution.
+    execution :: Prelude.Maybe JobExecution,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeJobExecutionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'execution', 'describeJobExecutionResponse_execution' - Contains data about a job execution.
+--
+-- 'httpStatus', 'describeJobExecutionResponse_httpStatus' - The response's http status code.
+newDescribeJobExecutionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeJobExecutionResponse
+newDescribeJobExecutionResponse pHttpStatus_ =
+  DescribeJobExecutionResponse'
+    { execution =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Contains data about a job execution.
+describeJobExecutionResponse_execution :: Lens.Lens' DescribeJobExecutionResponse (Prelude.Maybe JobExecution)
+describeJobExecutionResponse_execution = Lens.lens (\DescribeJobExecutionResponse' {execution} -> execution) (\s@DescribeJobExecutionResponse' {} a -> s {execution = a} :: DescribeJobExecutionResponse)
+
+-- | The response's http status code.
+describeJobExecutionResponse_httpStatus :: Lens.Lens' DescribeJobExecutionResponse Prelude.Int
+describeJobExecutionResponse_httpStatus = Lens.lens (\DescribeJobExecutionResponse' {httpStatus} -> httpStatus) (\s@DescribeJobExecutionResponse' {} a -> s {httpStatus = a} :: DescribeJobExecutionResponse)
+
+instance Prelude.NFData DescribeJobExecutionResponse where
+  rnf DescribeJobExecutionResponse' {..} =
+    Prelude.rnf execution
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTJobsData/GetPendingJobExecutions.hs b/gen/Amazonka/IoTJobsData/GetPendingJobExecutions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTJobsData/GetPendingJobExecutions.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTJobsData.GetPendingJobExecutions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the list of all jobs for a thing that are not in a terminal status.
+module Amazonka.IoTJobsData.GetPendingJobExecutions
+  ( -- * Creating a Request
+    GetPendingJobExecutions (..),
+    newGetPendingJobExecutions,
+
+    -- * Request Lenses
+    getPendingJobExecutions_thingName,
+
+    -- * Destructuring the Response
+    GetPendingJobExecutionsResponse (..),
+    newGetPendingJobExecutionsResponse,
+
+    -- * Response Lenses
+    getPendingJobExecutionsResponse_inProgressJobs,
+    getPendingJobExecutionsResponse_queuedJobs,
+    getPendingJobExecutionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTJobsData.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetPendingJobExecutions' smart constructor.
+data GetPendingJobExecutions = GetPendingJobExecutions'
+  { -- | The name of the thing that is executing the job.
+    thingName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPendingJobExecutions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'thingName', 'getPendingJobExecutions_thingName' - The name of the thing that is executing the job.
+newGetPendingJobExecutions ::
+  -- | 'thingName'
+  Prelude.Text ->
+  GetPendingJobExecutions
+newGetPendingJobExecutions pThingName_ =
+  GetPendingJobExecutions' {thingName = pThingName_}
+
+-- | The name of the thing that is executing the job.
+getPendingJobExecutions_thingName :: Lens.Lens' GetPendingJobExecutions Prelude.Text
+getPendingJobExecutions_thingName = Lens.lens (\GetPendingJobExecutions' {thingName} -> thingName) (\s@GetPendingJobExecutions' {} a -> s {thingName = a} :: GetPendingJobExecutions)
+
+instance Core.AWSRequest GetPendingJobExecutions where
+  type
+    AWSResponse GetPendingJobExecutions =
+      GetPendingJobExecutionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetPendingJobExecutionsResponse'
+            Prelude.<$> (x Data..?> "inProgressJobs" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "queuedJobs" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetPendingJobExecutions where
+  hashWithSalt _salt GetPendingJobExecutions' {..} =
+    _salt `Prelude.hashWithSalt` thingName
+
+instance Prelude.NFData GetPendingJobExecutions where
+  rnf GetPendingJobExecutions' {..} =
+    Prelude.rnf thingName
+
+instance Data.ToHeaders GetPendingJobExecutions where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetPendingJobExecutions where
+  toPath GetPendingJobExecutions' {..} =
+    Prelude.mconcat
+      ["/things/", Data.toBS thingName, "/jobs"]
+
+instance Data.ToQuery GetPendingJobExecutions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetPendingJobExecutionsResponse' smart constructor.
+data GetPendingJobExecutionsResponse = GetPendingJobExecutionsResponse'
+  { -- | A list of JobExecutionSummary objects with status IN_PROGRESS.
+    inProgressJobs :: Prelude.Maybe [JobExecutionSummary],
+    -- | A list of JobExecutionSummary objects with status QUEUED.
+    queuedJobs :: Prelude.Maybe [JobExecutionSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPendingJobExecutionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'inProgressJobs', 'getPendingJobExecutionsResponse_inProgressJobs' - A list of JobExecutionSummary objects with status IN_PROGRESS.
+--
+-- 'queuedJobs', 'getPendingJobExecutionsResponse_queuedJobs' - A list of JobExecutionSummary objects with status QUEUED.
+--
+-- 'httpStatus', 'getPendingJobExecutionsResponse_httpStatus' - The response's http status code.
+newGetPendingJobExecutionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetPendingJobExecutionsResponse
+newGetPendingJobExecutionsResponse pHttpStatus_ =
+  GetPendingJobExecutionsResponse'
+    { inProgressJobs =
+        Prelude.Nothing,
+      queuedJobs = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of JobExecutionSummary objects with status IN_PROGRESS.
+getPendingJobExecutionsResponse_inProgressJobs :: Lens.Lens' GetPendingJobExecutionsResponse (Prelude.Maybe [JobExecutionSummary])
+getPendingJobExecutionsResponse_inProgressJobs = Lens.lens (\GetPendingJobExecutionsResponse' {inProgressJobs} -> inProgressJobs) (\s@GetPendingJobExecutionsResponse' {} a -> s {inProgressJobs = a} :: GetPendingJobExecutionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of JobExecutionSummary objects with status QUEUED.
+getPendingJobExecutionsResponse_queuedJobs :: Lens.Lens' GetPendingJobExecutionsResponse (Prelude.Maybe [JobExecutionSummary])
+getPendingJobExecutionsResponse_queuedJobs = Lens.lens (\GetPendingJobExecutionsResponse' {queuedJobs} -> queuedJobs) (\s@GetPendingJobExecutionsResponse' {} a -> s {queuedJobs = a} :: GetPendingJobExecutionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getPendingJobExecutionsResponse_httpStatus :: Lens.Lens' GetPendingJobExecutionsResponse Prelude.Int
+getPendingJobExecutionsResponse_httpStatus = Lens.lens (\GetPendingJobExecutionsResponse' {httpStatus} -> httpStatus) (\s@GetPendingJobExecutionsResponse' {} a -> s {httpStatus = a} :: GetPendingJobExecutionsResponse)
+
+instance
+  Prelude.NFData
+    GetPendingJobExecutionsResponse
+  where
+  rnf GetPendingJobExecutionsResponse' {..} =
+    Prelude.rnf inProgressJobs
+      `Prelude.seq` Prelude.rnf queuedJobs
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTJobsData/Lens.hs b/gen/Amazonka/IoTJobsData/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTJobsData/Lens.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTJobsData.Lens
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTJobsData.Lens
+  ( -- * Operations
+
+    -- ** DescribeJobExecution
+    describeJobExecution_executionNumber,
+    describeJobExecution_includeJobDocument,
+    describeJobExecution_jobId,
+    describeJobExecution_thingName,
+    describeJobExecutionResponse_execution,
+    describeJobExecutionResponse_httpStatus,
+
+    -- ** GetPendingJobExecutions
+    getPendingJobExecutions_thingName,
+    getPendingJobExecutionsResponse_inProgressJobs,
+    getPendingJobExecutionsResponse_queuedJobs,
+    getPendingJobExecutionsResponse_httpStatus,
+
+    -- ** StartNextPendingJobExecution
+    startNextPendingJobExecution_statusDetails,
+    startNextPendingJobExecution_stepTimeoutInMinutes,
+    startNextPendingJobExecution_thingName,
+    startNextPendingJobExecutionResponse_execution,
+    startNextPendingJobExecutionResponse_httpStatus,
+
+    -- ** UpdateJobExecution
+    updateJobExecution_executionNumber,
+    updateJobExecution_expectedVersion,
+    updateJobExecution_includeJobDocument,
+    updateJobExecution_includeJobExecutionState,
+    updateJobExecution_statusDetails,
+    updateJobExecution_stepTimeoutInMinutes,
+    updateJobExecution_jobId,
+    updateJobExecution_thingName,
+    updateJobExecution_status,
+    updateJobExecutionResponse_executionState,
+    updateJobExecutionResponse_jobDocument,
+    updateJobExecutionResponse_httpStatus,
+
+    -- * Types
+
+    -- ** JobExecution
+    jobExecution_approximateSecondsBeforeTimedOut,
+    jobExecution_executionNumber,
+    jobExecution_jobDocument,
+    jobExecution_jobId,
+    jobExecution_lastUpdatedAt,
+    jobExecution_queuedAt,
+    jobExecution_startedAt,
+    jobExecution_status,
+    jobExecution_statusDetails,
+    jobExecution_thingName,
+    jobExecution_versionNumber,
+
+    -- ** JobExecutionState
+    jobExecutionState_status,
+    jobExecutionState_statusDetails,
+    jobExecutionState_versionNumber,
+
+    -- ** JobExecutionSummary
+    jobExecutionSummary_executionNumber,
+    jobExecutionSummary_jobId,
+    jobExecutionSummary_lastUpdatedAt,
+    jobExecutionSummary_queuedAt,
+    jobExecutionSummary_startedAt,
+    jobExecutionSummary_versionNumber,
+  )
+where
+
+import Amazonka.IoTJobsData.DescribeJobExecution
+import Amazonka.IoTJobsData.GetPendingJobExecutions
+import Amazonka.IoTJobsData.StartNextPendingJobExecution
+import Amazonka.IoTJobsData.Types.JobExecution
+import Amazonka.IoTJobsData.Types.JobExecutionState
+import Amazonka.IoTJobsData.Types.JobExecutionSummary
+import Amazonka.IoTJobsData.UpdateJobExecution
diff --git a/gen/Amazonka/IoTJobsData/StartNextPendingJobExecution.hs b/gen/Amazonka/IoTJobsData/StartNextPendingJobExecution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTJobsData/StartNextPendingJobExecution.hs
@@ -0,0 +1,224 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTJobsData.StartNextPendingJobExecution
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets and starts the next pending (status IN_PROGRESS or QUEUED) job
+-- execution for a thing.
+module Amazonka.IoTJobsData.StartNextPendingJobExecution
+  ( -- * Creating a Request
+    StartNextPendingJobExecution (..),
+    newStartNextPendingJobExecution,
+
+    -- * Request Lenses
+    startNextPendingJobExecution_statusDetails,
+    startNextPendingJobExecution_stepTimeoutInMinutes,
+    startNextPendingJobExecution_thingName,
+
+    -- * Destructuring the Response
+    StartNextPendingJobExecutionResponse (..),
+    newStartNextPendingJobExecutionResponse,
+
+    -- * Response Lenses
+    startNextPendingJobExecutionResponse_execution,
+    startNextPendingJobExecutionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTJobsData.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartNextPendingJobExecution' smart constructor.
+data StartNextPendingJobExecution = StartNextPendingJobExecution'
+  { -- | A collection of name\/value pairs that describe the status of the job
+    -- execution. If not specified, the statusDetails are unchanged.
+    statusDetails :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Specifies the amount of time this device has to finish execution of this
+    -- job. If the job execution status is not set to a terminal state before
+    -- this timer expires, or before the timer is reset (by calling
+    -- @UpdateJobExecution@, setting the status to @IN_PROGRESS@ and specifying
+    -- a new timeout value in field @stepTimeoutInMinutes@) the job execution
+    -- status will be automatically set to @TIMED_OUT@. Note that setting this
+    -- timeout has no effect on that job execution timeout which may have been
+    -- specified when the job was created (@CreateJob@ using field
+    -- @timeoutConfig@).
+    stepTimeoutInMinutes :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the thing associated with the device.
+    thingName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartNextPendingJobExecution' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'statusDetails', 'startNextPendingJobExecution_statusDetails' - A collection of name\/value pairs that describe the status of the job
+-- execution. If not specified, the statusDetails are unchanged.
+--
+-- 'stepTimeoutInMinutes', 'startNextPendingJobExecution_stepTimeoutInMinutes' - Specifies the amount of time this device has to finish execution of this
+-- job. If the job execution status is not set to a terminal state before
+-- this timer expires, or before the timer is reset (by calling
+-- @UpdateJobExecution@, setting the status to @IN_PROGRESS@ and specifying
+-- a new timeout value in field @stepTimeoutInMinutes@) the job execution
+-- status will be automatically set to @TIMED_OUT@. Note that setting this
+-- timeout has no effect on that job execution timeout which may have been
+-- specified when the job was created (@CreateJob@ using field
+-- @timeoutConfig@).
+--
+-- 'thingName', 'startNextPendingJobExecution_thingName' - The name of the thing associated with the device.
+newStartNextPendingJobExecution ::
+  -- | 'thingName'
+  Prelude.Text ->
+  StartNextPendingJobExecution
+newStartNextPendingJobExecution pThingName_ =
+  StartNextPendingJobExecution'
+    { statusDetails =
+        Prelude.Nothing,
+      stepTimeoutInMinutes = Prelude.Nothing,
+      thingName = pThingName_
+    }
+
+-- | A collection of name\/value pairs that describe the status of the job
+-- execution. If not specified, the statusDetails are unchanged.
+startNextPendingJobExecution_statusDetails :: Lens.Lens' StartNextPendingJobExecution (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+startNextPendingJobExecution_statusDetails = Lens.lens (\StartNextPendingJobExecution' {statusDetails} -> statusDetails) (\s@StartNextPendingJobExecution' {} a -> s {statusDetails = a} :: StartNextPendingJobExecution) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the amount of time this device has to finish execution of this
+-- job. If the job execution status is not set to a terminal state before
+-- this timer expires, or before the timer is reset (by calling
+-- @UpdateJobExecution@, setting the status to @IN_PROGRESS@ and specifying
+-- a new timeout value in field @stepTimeoutInMinutes@) the job execution
+-- status will be automatically set to @TIMED_OUT@. Note that setting this
+-- timeout has no effect on that job execution timeout which may have been
+-- specified when the job was created (@CreateJob@ using field
+-- @timeoutConfig@).
+startNextPendingJobExecution_stepTimeoutInMinutes :: Lens.Lens' StartNextPendingJobExecution (Prelude.Maybe Prelude.Integer)
+startNextPendingJobExecution_stepTimeoutInMinutes = Lens.lens (\StartNextPendingJobExecution' {stepTimeoutInMinutes} -> stepTimeoutInMinutes) (\s@StartNextPendingJobExecution' {} a -> s {stepTimeoutInMinutes = a} :: StartNextPendingJobExecution)
+
+-- | The name of the thing associated with the device.
+startNextPendingJobExecution_thingName :: Lens.Lens' StartNextPendingJobExecution Prelude.Text
+startNextPendingJobExecution_thingName = Lens.lens (\StartNextPendingJobExecution' {thingName} -> thingName) (\s@StartNextPendingJobExecution' {} a -> s {thingName = a} :: StartNextPendingJobExecution)
+
+instance Core.AWSRequest StartNextPendingJobExecution where
+  type
+    AWSResponse StartNextPendingJobExecution =
+      StartNextPendingJobExecutionResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartNextPendingJobExecutionResponse'
+            Prelude.<$> (x Data..?> "execution")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    StartNextPendingJobExecution
+  where
+  hashWithSalt _salt StartNextPendingJobExecution' {..} =
+    _salt
+      `Prelude.hashWithSalt` statusDetails
+      `Prelude.hashWithSalt` stepTimeoutInMinutes
+      `Prelude.hashWithSalt` thingName
+
+instance Prelude.NFData StartNextPendingJobExecution where
+  rnf StartNextPendingJobExecution' {..} =
+    Prelude.rnf statusDetails
+      `Prelude.seq` Prelude.rnf stepTimeoutInMinutes
+      `Prelude.seq` Prelude.rnf thingName
+
+instance Data.ToHeaders StartNextPendingJobExecution where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON StartNextPendingJobExecution where
+  toJSON StartNextPendingJobExecution' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("statusDetails" Data..=) Prelude.<$> statusDetails,
+            ("stepTimeoutInMinutes" Data..=)
+              Prelude.<$> stepTimeoutInMinutes
+          ]
+      )
+
+instance Data.ToPath StartNextPendingJobExecution where
+  toPath StartNextPendingJobExecution' {..} =
+    Prelude.mconcat
+      ["/things/", Data.toBS thingName, "/jobs/$next"]
+
+instance Data.ToQuery StartNextPendingJobExecution where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartNextPendingJobExecutionResponse' smart constructor.
+data StartNextPendingJobExecutionResponse = StartNextPendingJobExecutionResponse'
+  { -- | A JobExecution object.
+    execution :: Prelude.Maybe JobExecution,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartNextPendingJobExecutionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'execution', 'startNextPendingJobExecutionResponse_execution' - A JobExecution object.
+--
+-- 'httpStatus', 'startNextPendingJobExecutionResponse_httpStatus' - The response's http status code.
+newStartNextPendingJobExecutionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartNextPendingJobExecutionResponse
+newStartNextPendingJobExecutionResponse pHttpStatus_ =
+  StartNextPendingJobExecutionResponse'
+    { execution =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A JobExecution object.
+startNextPendingJobExecutionResponse_execution :: Lens.Lens' StartNextPendingJobExecutionResponse (Prelude.Maybe JobExecution)
+startNextPendingJobExecutionResponse_execution = Lens.lens (\StartNextPendingJobExecutionResponse' {execution} -> execution) (\s@StartNextPendingJobExecutionResponse' {} a -> s {execution = a} :: StartNextPendingJobExecutionResponse)
+
+-- | The response's http status code.
+startNextPendingJobExecutionResponse_httpStatus :: Lens.Lens' StartNextPendingJobExecutionResponse Prelude.Int
+startNextPendingJobExecutionResponse_httpStatus = Lens.lens (\StartNextPendingJobExecutionResponse' {httpStatus} -> httpStatus) (\s@StartNextPendingJobExecutionResponse' {} a -> s {httpStatus = a} :: StartNextPendingJobExecutionResponse)
+
+instance
+  Prelude.NFData
+    StartNextPendingJobExecutionResponse
+  where
+  rnf StartNextPendingJobExecutionResponse' {..} =
+    Prelude.rnf execution
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTJobsData/Types.hs b/gen/Amazonka/IoTJobsData/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTJobsData/Types.hs
@@ -0,0 +1,205 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTJobsData.Types
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTJobsData.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _CertificateValidationException,
+    _InvalidRequestException,
+    _InvalidStateTransitionException,
+    _ResourceNotFoundException,
+    _ServiceUnavailableException,
+    _TerminalStateException,
+    _ThrottlingException,
+
+    -- * JobExecutionStatus
+    JobExecutionStatus (..),
+
+    -- * JobExecution
+    JobExecution (..),
+    newJobExecution,
+    jobExecution_approximateSecondsBeforeTimedOut,
+    jobExecution_executionNumber,
+    jobExecution_jobDocument,
+    jobExecution_jobId,
+    jobExecution_lastUpdatedAt,
+    jobExecution_queuedAt,
+    jobExecution_startedAt,
+    jobExecution_status,
+    jobExecution_statusDetails,
+    jobExecution_thingName,
+    jobExecution_versionNumber,
+
+    -- * JobExecutionState
+    JobExecutionState (..),
+    newJobExecutionState,
+    jobExecutionState_status,
+    jobExecutionState_statusDetails,
+    jobExecutionState_versionNumber,
+
+    -- * JobExecutionSummary
+    JobExecutionSummary (..),
+    newJobExecutionSummary,
+    jobExecutionSummary_executionNumber,
+    jobExecutionSummary_jobId,
+    jobExecutionSummary_lastUpdatedAt,
+    jobExecutionSummary_queuedAt,
+    jobExecutionSummary_startedAt,
+    jobExecutionSummary_versionNumber,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.IoTJobsData.Types.JobExecution
+import Amazonka.IoTJobsData.Types.JobExecutionState
+import Amazonka.IoTJobsData.Types.JobExecutionStatus
+import Amazonka.IoTJobsData.Types.JobExecutionSummary
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2017-09-29@ of the Amazon IoT Jobs Data Plane SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "IoTJobsData",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "data.jobs.iot",
+      Core.signingName = "iot-jobs-data",
+      Core.version = "2017-09-29",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "IoTJobsData",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | The certificate is invalid.
+_CertificateValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_CertificateValidationException =
+  Core._MatchServiceError
+    defaultService
+    "CertificateValidationException"
+    Prelude.. Core.hasStatus 400
+
+-- | The contents of the request were invalid. For example, this code is
+-- returned when an UpdateJobExecution request contains invalid status
+-- details. The message contains details about the error.
+_InvalidRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidRequestException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidRequestException"
+    Prelude.. Core.hasStatus 400
+
+-- | An update attempted to change the job execution to a state that is
+-- invalid because of the job execution\'s current state (for example, an
+-- attempt to change a request in state SUCCESS to state IN_PROGRESS). In
+-- this case, the body of the error message also contains the
+-- executionState field.
+_InvalidStateTransitionException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidStateTransitionException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidStateTransitionException"
+    Prelude.. Core.hasStatus 409
+
+-- | The specified resource does not exist.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The service is temporarily unavailable.
+_ServiceUnavailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceUnavailableException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceUnavailableException"
+    Prelude.. Core.hasStatus 503
+
+-- | The job is in a terminal state.
+_TerminalStateException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TerminalStateException =
+  Core._MatchServiceError
+    defaultService
+    "TerminalStateException"
+    Prelude.. Core.hasStatus 410
+
+-- | The rate exceeds the limit.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
diff --git a/gen/Amazonka/IoTJobsData/Types/JobExecution.hs b/gen/Amazonka/IoTJobsData/Types/JobExecution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTJobsData/Types/JobExecution.hs
@@ -0,0 +1,224 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTJobsData.Types.JobExecution
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTJobsData.Types.JobExecution where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTJobsData.Types.JobExecutionStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains data about a job execution.
+--
+-- /See:/ 'newJobExecution' smart constructor.
+data JobExecution = JobExecution'
+  { -- | The estimated number of seconds that remain before the job execution
+    -- status will be changed to @TIMED_OUT@.
+    approximateSecondsBeforeTimedOut :: Prelude.Maybe Prelude.Integer,
+    -- | A number that identifies a particular job execution on a particular
+    -- device. It can be used later in commands that return or update job
+    -- execution information.
+    executionNumber :: Prelude.Maybe Prelude.Integer,
+    -- | The content of the job document.
+    jobDocument :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier you assigned to this job when it was created.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the job execution was
+    -- last updated.
+    lastUpdatedAt :: Prelude.Maybe Prelude.Integer,
+    -- | The time, in milliseconds since the epoch, when the job execution was
+    -- enqueued.
+    queuedAt :: Prelude.Maybe Prelude.Integer,
+    -- | The time, in milliseconds since the epoch, when the job execution was
+    -- started.
+    startedAt :: Prelude.Maybe Prelude.Integer,
+    -- | The status of the job execution. Can be one of: \"QUEUED\",
+    -- \"IN_PROGRESS\", \"FAILED\", \"SUCCESS\", \"CANCELED\", \"REJECTED\", or
+    -- \"REMOVED\".
+    status :: Prelude.Maybe JobExecutionStatus,
+    -- | A collection of name\/value pairs that describe the status of the job
+    -- execution.
+    statusDetails :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the thing that is executing the job.
+    thingName :: Prelude.Maybe Prelude.Text,
+    -- | The version of the job execution. Job execution versions are incremented
+    -- each time they are updated by a device.
+    versionNumber :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobExecution' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'approximateSecondsBeforeTimedOut', 'jobExecution_approximateSecondsBeforeTimedOut' - The estimated number of seconds that remain before the job execution
+-- status will be changed to @TIMED_OUT@.
+--
+-- 'executionNumber', 'jobExecution_executionNumber' - A number that identifies a particular job execution on a particular
+-- device. It can be used later in commands that return or update job
+-- execution information.
+--
+-- 'jobDocument', 'jobExecution_jobDocument' - The content of the job document.
+--
+-- 'jobId', 'jobExecution_jobId' - The unique identifier you assigned to this job when it was created.
+--
+-- 'lastUpdatedAt', 'jobExecution_lastUpdatedAt' - The time, in milliseconds since the epoch, when the job execution was
+-- last updated.
+--
+-- 'queuedAt', 'jobExecution_queuedAt' - The time, in milliseconds since the epoch, when the job execution was
+-- enqueued.
+--
+-- 'startedAt', 'jobExecution_startedAt' - The time, in milliseconds since the epoch, when the job execution was
+-- started.
+--
+-- 'status', 'jobExecution_status' - The status of the job execution. Can be one of: \"QUEUED\",
+-- \"IN_PROGRESS\", \"FAILED\", \"SUCCESS\", \"CANCELED\", \"REJECTED\", or
+-- \"REMOVED\".
+--
+-- 'statusDetails', 'jobExecution_statusDetails' - A collection of name\/value pairs that describe the status of the job
+-- execution.
+--
+-- 'thingName', 'jobExecution_thingName' - The name of the thing that is executing the job.
+--
+-- 'versionNumber', 'jobExecution_versionNumber' - The version of the job execution. Job execution versions are incremented
+-- each time they are updated by a device.
+newJobExecution ::
+  JobExecution
+newJobExecution =
+  JobExecution'
+    { approximateSecondsBeforeTimedOut =
+        Prelude.Nothing,
+      executionNumber = Prelude.Nothing,
+      jobDocument = Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      queuedAt = Prelude.Nothing,
+      startedAt = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusDetails = Prelude.Nothing,
+      thingName = Prelude.Nothing,
+      versionNumber = Prelude.Nothing
+    }
+
+-- | The estimated number of seconds that remain before the job execution
+-- status will be changed to @TIMED_OUT@.
+jobExecution_approximateSecondsBeforeTimedOut :: Lens.Lens' JobExecution (Prelude.Maybe Prelude.Integer)
+jobExecution_approximateSecondsBeforeTimedOut = Lens.lens (\JobExecution' {approximateSecondsBeforeTimedOut} -> approximateSecondsBeforeTimedOut) (\s@JobExecution' {} a -> s {approximateSecondsBeforeTimedOut = a} :: JobExecution)
+
+-- | A number that identifies a particular job execution on a particular
+-- device. It can be used later in commands that return or update job
+-- execution information.
+jobExecution_executionNumber :: Lens.Lens' JobExecution (Prelude.Maybe Prelude.Integer)
+jobExecution_executionNumber = Lens.lens (\JobExecution' {executionNumber} -> executionNumber) (\s@JobExecution' {} a -> s {executionNumber = a} :: JobExecution)
+
+-- | The content of the job document.
+jobExecution_jobDocument :: Lens.Lens' JobExecution (Prelude.Maybe Prelude.Text)
+jobExecution_jobDocument = Lens.lens (\JobExecution' {jobDocument} -> jobDocument) (\s@JobExecution' {} a -> s {jobDocument = a} :: JobExecution)
+
+-- | The unique identifier you assigned to this job when it was created.
+jobExecution_jobId :: Lens.Lens' JobExecution (Prelude.Maybe Prelude.Text)
+jobExecution_jobId = Lens.lens (\JobExecution' {jobId} -> jobId) (\s@JobExecution' {} a -> s {jobId = a} :: JobExecution)
+
+-- | The time, in milliseconds since the epoch, when the job execution was
+-- last updated.
+jobExecution_lastUpdatedAt :: Lens.Lens' JobExecution (Prelude.Maybe Prelude.Integer)
+jobExecution_lastUpdatedAt = Lens.lens (\JobExecution' {lastUpdatedAt} -> lastUpdatedAt) (\s@JobExecution' {} a -> s {lastUpdatedAt = a} :: JobExecution)
+
+-- | The time, in milliseconds since the epoch, when the job execution was
+-- enqueued.
+jobExecution_queuedAt :: Lens.Lens' JobExecution (Prelude.Maybe Prelude.Integer)
+jobExecution_queuedAt = Lens.lens (\JobExecution' {queuedAt} -> queuedAt) (\s@JobExecution' {} a -> s {queuedAt = a} :: JobExecution)
+
+-- | The time, in milliseconds since the epoch, when the job execution was
+-- started.
+jobExecution_startedAt :: Lens.Lens' JobExecution (Prelude.Maybe Prelude.Integer)
+jobExecution_startedAt = Lens.lens (\JobExecution' {startedAt} -> startedAt) (\s@JobExecution' {} a -> s {startedAt = a} :: JobExecution)
+
+-- | The status of the job execution. Can be one of: \"QUEUED\",
+-- \"IN_PROGRESS\", \"FAILED\", \"SUCCESS\", \"CANCELED\", \"REJECTED\", or
+-- \"REMOVED\".
+jobExecution_status :: Lens.Lens' JobExecution (Prelude.Maybe JobExecutionStatus)
+jobExecution_status = Lens.lens (\JobExecution' {status} -> status) (\s@JobExecution' {} a -> s {status = a} :: JobExecution)
+
+-- | A collection of name\/value pairs that describe the status of the job
+-- execution.
+jobExecution_statusDetails :: Lens.Lens' JobExecution (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+jobExecution_statusDetails = Lens.lens (\JobExecution' {statusDetails} -> statusDetails) (\s@JobExecution' {} a -> s {statusDetails = a} :: JobExecution) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the thing that is executing the job.
+jobExecution_thingName :: Lens.Lens' JobExecution (Prelude.Maybe Prelude.Text)
+jobExecution_thingName = Lens.lens (\JobExecution' {thingName} -> thingName) (\s@JobExecution' {} a -> s {thingName = a} :: JobExecution)
+
+-- | The version of the job execution. Job execution versions are incremented
+-- each time they are updated by a device.
+jobExecution_versionNumber :: Lens.Lens' JobExecution (Prelude.Maybe Prelude.Integer)
+jobExecution_versionNumber = Lens.lens (\JobExecution' {versionNumber} -> versionNumber) (\s@JobExecution' {} a -> s {versionNumber = a} :: JobExecution)
+
+instance Data.FromJSON JobExecution where
+  parseJSON =
+    Data.withObject
+      "JobExecution"
+      ( \x ->
+          JobExecution'
+            Prelude.<$> (x Data..:? "approximateSecondsBeforeTimedOut")
+            Prelude.<*> (x Data..:? "executionNumber")
+            Prelude.<*> (x Data..:? "jobDocument")
+            Prelude.<*> (x Data..:? "jobId")
+            Prelude.<*> (x Data..:? "lastUpdatedAt")
+            Prelude.<*> (x Data..:? "queuedAt")
+            Prelude.<*> (x Data..:? "startedAt")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "statusDetails" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "thingName")
+            Prelude.<*> (x Data..:? "versionNumber")
+      )
+
+instance Prelude.Hashable JobExecution where
+  hashWithSalt _salt JobExecution' {..} =
+    _salt
+      `Prelude.hashWithSalt` approximateSecondsBeforeTimedOut
+      `Prelude.hashWithSalt` executionNumber
+      `Prelude.hashWithSalt` jobDocument
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` lastUpdatedAt
+      `Prelude.hashWithSalt` queuedAt
+      `Prelude.hashWithSalt` startedAt
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` statusDetails
+      `Prelude.hashWithSalt` thingName
+      `Prelude.hashWithSalt` versionNumber
+
+instance Prelude.NFData JobExecution where
+  rnf JobExecution' {..} =
+    Prelude.rnf approximateSecondsBeforeTimedOut
+      `Prelude.seq` Prelude.rnf executionNumber
+      `Prelude.seq` Prelude.rnf jobDocument
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf queuedAt
+      `Prelude.seq` Prelude.rnf startedAt
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusDetails
+      `Prelude.seq` Prelude.rnf thingName
+      `Prelude.seq` Prelude.rnf versionNumber
diff --git a/gen/Amazonka/IoTJobsData/Types/JobExecutionState.hs b/gen/Amazonka/IoTJobsData/Types/JobExecutionState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTJobsData/Types/JobExecutionState.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTJobsData.Types.JobExecutionState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTJobsData.Types.JobExecutionState where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTJobsData.Types.JobExecutionStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains data about the state of a job execution.
+--
+-- /See:/ 'newJobExecutionState' smart constructor.
+data JobExecutionState = JobExecutionState'
+  { -- | The status of the job execution. Can be one of: \"QUEUED\",
+    -- \"IN_PROGRESS\", \"FAILED\", \"SUCCESS\", \"CANCELED\", \"REJECTED\", or
+    -- \"REMOVED\".
+    status :: Prelude.Maybe JobExecutionStatus,
+    -- | A collection of name\/value pairs that describe the status of the job
+    -- execution.
+    statusDetails :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The version of the job execution. Job execution versions are incremented
+    -- each time they are updated by a device.
+    versionNumber :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobExecutionState' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'status', 'jobExecutionState_status' - The status of the job execution. Can be one of: \"QUEUED\",
+-- \"IN_PROGRESS\", \"FAILED\", \"SUCCESS\", \"CANCELED\", \"REJECTED\", or
+-- \"REMOVED\".
+--
+-- 'statusDetails', 'jobExecutionState_statusDetails' - A collection of name\/value pairs that describe the status of the job
+-- execution.
+--
+-- 'versionNumber', 'jobExecutionState_versionNumber' - The version of the job execution. Job execution versions are incremented
+-- each time they are updated by a device.
+newJobExecutionState ::
+  JobExecutionState
+newJobExecutionState =
+  JobExecutionState'
+    { status = Prelude.Nothing,
+      statusDetails = Prelude.Nothing,
+      versionNumber = Prelude.Nothing
+    }
+
+-- | The status of the job execution. Can be one of: \"QUEUED\",
+-- \"IN_PROGRESS\", \"FAILED\", \"SUCCESS\", \"CANCELED\", \"REJECTED\", or
+-- \"REMOVED\".
+jobExecutionState_status :: Lens.Lens' JobExecutionState (Prelude.Maybe JobExecutionStatus)
+jobExecutionState_status = Lens.lens (\JobExecutionState' {status} -> status) (\s@JobExecutionState' {} a -> s {status = a} :: JobExecutionState)
+
+-- | A collection of name\/value pairs that describe the status of the job
+-- execution.
+jobExecutionState_statusDetails :: Lens.Lens' JobExecutionState (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+jobExecutionState_statusDetails = Lens.lens (\JobExecutionState' {statusDetails} -> statusDetails) (\s@JobExecutionState' {} a -> s {statusDetails = a} :: JobExecutionState) Prelude.. Lens.mapping Lens.coerced
+
+-- | The version of the job execution. Job execution versions are incremented
+-- each time they are updated by a device.
+jobExecutionState_versionNumber :: Lens.Lens' JobExecutionState (Prelude.Maybe Prelude.Integer)
+jobExecutionState_versionNumber = Lens.lens (\JobExecutionState' {versionNumber} -> versionNumber) (\s@JobExecutionState' {} a -> s {versionNumber = a} :: JobExecutionState)
+
+instance Data.FromJSON JobExecutionState where
+  parseJSON =
+    Data.withObject
+      "JobExecutionState"
+      ( \x ->
+          JobExecutionState'
+            Prelude.<$> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "statusDetails" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "versionNumber")
+      )
+
+instance Prelude.Hashable JobExecutionState where
+  hashWithSalt _salt JobExecutionState' {..} =
+    _salt
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` statusDetails
+      `Prelude.hashWithSalt` versionNumber
+
+instance Prelude.NFData JobExecutionState where
+  rnf JobExecutionState' {..} =
+    Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusDetails
+      `Prelude.seq` Prelude.rnf versionNumber
diff --git a/gen/Amazonka/IoTJobsData/Types/JobExecutionStatus.hs b/gen/Amazonka/IoTJobsData/Types/JobExecutionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTJobsData/Types/JobExecutionStatus.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTJobsData.Types.JobExecutionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTJobsData.Types.JobExecutionStatus
+  ( JobExecutionStatus
+      ( ..,
+        JobExecutionStatus_CANCELED,
+        JobExecutionStatus_FAILED,
+        JobExecutionStatus_IN_PROGRESS,
+        JobExecutionStatus_QUEUED,
+        JobExecutionStatus_REJECTED,
+        JobExecutionStatus_REMOVED,
+        JobExecutionStatus_SUCCEEDED,
+        JobExecutionStatus_TIMED_OUT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype JobExecutionStatus = JobExecutionStatus'
+  { fromJobExecutionStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern JobExecutionStatus_CANCELED :: JobExecutionStatus
+pattern JobExecutionStatus_CANCELED = JobExecutionStatus' "CANCELED"
+
+pattern JobExecutionStatus_FAILED :: JobExecutionStatus
+pattern JobExecutionStatus_FAILED = JobExecutionStatus' "FAILED"
+
+pattern JobExecutionStatus_IN_PROGRESS :: JobExecutionStatus
+pattern JobExecutionStatus_IN_PROGRESS = JobExecutionStatus' "IN_PROGRESS"
+
+pattern JobExecutionStatus_QUEUED :: JobExecutionStatus
+pattern JobExecutionStatus_QUEUED = JobExecutionStatus' "QUEUED"
+
+pattern JobExecutionStatus_REJECTED :: JobExecutionStatus
+pattern JobExecutionStatus_REJECTED = JobExecutionStatus' "REJECTED"
+
+pattern JobExecutionStatus_REMOVED :: JobExecutionStatus
+pattern JobExecutionStatus_REMOVED = JobExecutionStatus' "REMOVED"
+
+pattern JobExecutionStatus_SUCCEEDED :: JobExecutionStatus
+pattern JobExecutionStatus_SUCCEEDED = JobExecutionStatus' "SUCCEEDED"
+
+pattern JobExecutionStatus_TIMED_OUT :: JobExecutionStatus
+pattern JobExecutionStatus_TIMED_OUT = JobExecutionStatus' "TIMED_OUT"
+
+{-# COMPLETE
+  JobExecutionStatus_CANCELED,
+  JobExecutionStatus_FAILED,
+  JobExecutionStatus_IN_PROGRESS,
+  JobExecutionStatus_QUEUED,
+  JobExecutionStatus_REJECTED,
+  JobExecutionStatus_REMOVED,
+  JobExecutionStatus_SUCCEEDED,
+  JobExecutionStatus_TIMED_OUT,
+  JobExecutionStatus'
+  #-}
diff --git a/gen/Amazonka/IoTJobsData/Types/JobExecutionSummary.hs b/gen/Amazonka/IoTJobsData/Types/JobExecutionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTJobsData/Types/JobExecutionSummary.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTJobsData.Types.JobExecutionSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTJobsData.Types.JobExecutionSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains a subset of information about a job execution.
+--
+-- /See:/ 'newJobExecutionSummary' smart constructor.
+data JobExecutionSummary = JobExecutionSummary'
+  { -- | A number that identifies a particular job execution on a particular
+    -- device.
+    executionNumber :: Prelude.Maybe Prelude.Integer,
+    -- | The unique identifier you assigned to this job when it was created.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the job execution was
+    -- last updated.
+    lastUpdatedAt :: Prelude.Maybe Prelude.Integer,
+    -- | The time, in milliseconds since the epoch, when the job execution was
+    -- enqueued.
+    queuedAt :: Prelude.Maybe Prelude.Integer,
+    -- | The time, in milliseconds since the epoch, when the job execution
+    -- started.
+    startedAt :: Prelude.Maybe Prelude.Integer,
+    -- | The version of the job execution. Job execution versions are incremented
+    -- each time AWS IoT Jobs receives an update from a device.
+    versionNumber :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobExecutionSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'executionNumber', 'jobExecutionSummary_executionNumber' - A number that identifies a particular job execution on a particular
+-- device.
+--
+-- 'jobId', 'jobExecutionSummary_jobId' - The unique identifier you assigned to this job when it was created.
+--
+-- 'lastUpdatedAt', 'jobExecutionSummary_lastUpdatedAt' - The time, in milliseconds since the epoch, when the job execution was
+-- last updated.
+--
+-- 'queuedAt', 'jobExecutionSummary_queuedAt' - The time, in milliseconds since the epoch, when the job execution was
+-- enqueued.
+--
+-- 'startedAt', 'jobExecutionSummary_startedAt' - The time, in milliseconds since the epoch, when the job execution
+-- started.
+--
+-- 'versionNumber', 'jobExecutionSummary_versionNumber' - The version of the job execution. Job execution versions are incremented
+-- each time AWS IoT Jobs receives an update from a device.
+newJobExecutionSummary ::
+  JobExecutionSummary
+newJobExecutionSummary =
+  JobExecutionSummary'
+    { executionNumber =
+        Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      queuedAt = Prelude.Nothing,
+      startedAt = Prelude.Nothing,
+      versionNumber = Prelude.Nothing
+    }
+
+-- | A number that identifies a particular job execution on a particular
+-- device.
+jobExecutionSummary_executionNumber :: Lens.Lens' JobExecutionSummary (Prelude.Maybe Prelude.Integer)
+jobExecutionSummary_executionNumber = Lens.lens (\JobExecutionSummary' {executionNumber} -> executionNumber) (\s@JobExecutionSummary' {} a -> s {executionNumber = a} :: JobExecutionSummary)
+
+-- | The unique identifier you assigned to this job when it was created.
+jobExecutionSummary_jobId :: Lens.Lens' JobExecutionSummary (Prelude.Maybe Prelude.Text)
+jobExecutionSummary_jobId = Lens.lens (\JobExecutionSummary' {jobId} -> jobId) (\s@JobExecutionSummary' {} a -> s {jobId = a} :: JobExecutionSummary)
+
+-- | The time, in milliseconds since the epoch, when the job execution was
+-- last updated.
+jobExecutionSummary_lastUpdatedAt :: Lens.Lens' JobExecutionSummary (Prelude.Maybe Prelude.Integer)
+jobExecutionSummary_lastUpdatedAt = Lens.lens (\JobExecutionSummary' {lastUpdatedAt} -> lastUpdatedAt) (\s@JobExecutionSummary' {} a -> s {lastUpdatedAt = a} :: JobExecutionSummary)
+
+-- | The time, in milliseconds since the epoch, when the job execution was
+-- enqueued.
+jobExecutionSummary_queuedAt :: Lens.Lens' JobExecutionSummary (Prelude.Maybe Prelude.Integer)
+jobExecutionSummary_queuedAt = Lens.lens (\JobExecutionSummary' {queuedAt} -> queuedAt) (\s@JobExecutionSummary' {} a -> s {queuedAt = a} :: JobExecutionSummary)
+
+-- | The time, in milliseconds since the epoch, when the job execution
+-- started.
+jobExecutionSummary_startedAt :: Lens.Lens' JobExecutionSummary (Prelude.Maybe Prelude.Integer)
+jobExecutionSummary_startedAt = Lens.lens (\JobExecutionSummary' {startedAt} -> startedAt) (\s@JobExecutionSummary' {} a -> s {startedAt = a} :: JobExecutionSummary)
+
+-- | The version of the job execution. Job execution versions are incremented
+-- each time AWS IoT Jobs receives an update from a device.
+jobExecutionSummary_versionNumber :: Lens.Lens' JobExecutionSummary (Prelude.Maybe Prelude.Integer)
+jobExecutionSummary_versionNumber = Lens.lens (\JobExecutionSummary' {versionNumber} -> versionNumber) (\s@JobExecutionSummary' {} a -> s {versionNumber = a} :: JobExecutionSummary)
+
+instance Data.FromJSON JobExecutionSummary where
+  parseJSON =
+    Data.withObject
+      "JobExecutionSummary"
+      ( \x ->
+          JobExecutionSummary'
+            Prelude.<$> (x Data..:? "executionNumber")
+            Prelude.<*> (x Data..:? "jobId")
+            Prelude.<*> (x Data..:? "lastUpdatedAt")
+            Prelude.<*> (x Data..:? "queuedAt")
+            Prelude.<*> (x Data..:? "startedAt")
+            Prelude.<*> (x Data..:? "versionNumber")
+      )
+
+instance Prelude.Hashable JobExecutionSummary where
+  hashWithSalt _salt JobExecutionSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` executionNumber
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` lastUpdatedAt
+      `Prelude.hashWithSalt` queuedAt
+      `Prelude.hashWithSalt` startedAt
+      `Prelude.hashWithSalt` versionNumber
+
+instance Prelude.NFData JobExecutionSummary where
+  rnf JobExecutionSummary' {..} =
+    Prelude.rnf executionNumber
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf queuedAt
+      `Prelude.seq` Prelude.rnf startedAt
+      `Prelude.seq` Prelude.rnf versionNumber
diff --git a/gen/Amazonka/IoTJobsData/UpdateJobExecution.hs b/gen/Amazonka/IoTJobsData/UpdateJobExecution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTJobsData/UpdateJobExecution.hs
@@ -0,0 +1,348 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTJobsData.UpdateJobExecution
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the status of a job execution.
+module Amazonka.IoTJobsData.UpdateJobExecution
+  ( -- * Creating a Request
+    UpdateJobExecution (..),
+    newUpdateJobExecution,
+
+    -- * Request Lenses
+    updateJobExecution_executionNumber,
+    updateJobExecution_expectedVersion,
+    updateJobExecution_includeJobDocument,
+    updateJobExecution_includeJobExecutionState,
+    updateJobExecution_statusDetails,
+    updateJobExecution_stepTimeoutInMinutes,
+    updateJobExecution_jobId,
+    updateJobExecution_thingName,
+    updateJobExecution_status,
+
+    -- * Destructuring the Response
+    UpdateJobExecutionResponse (..),
+    newUpdateJobExecutionResponse,
+
+    -- * Response Lenses
+    updateJobExecutionResponse_executionState,
+    updateJobExecutionResponse_jobDocument,
+    updateJobExecutionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTJobsData.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateJobExecution' smart constructor.
+data UpdateJobExecution = UpdateJobExecution'
+  { -- | Optional. A number that identifies a particular job execution on a
+    -- particular device.
+    executionNumber :: Prelude.Maybe Prelude.Integer,
+    -- | Optional. The expected current version of the job execution. Each time
+    -- you update the job execution, its version is incremented. If the version
+    -- of the job execution stored in Jobs does not match, the update is
+    -- rejected with a VersionMismatch error, and an ErrorResponse that
+    -- contains the current job execution status data is returned. (This makes
+    -- it unnecessary to perform a separate DescribeJobExecution request in
+    -- order to obtain the job execution status data.)
+    expectedVersion :: Prelude.Maybe Prelude.Integer,
+    -- | Optional. When set to true, the response contains the job document. The
+    -- default is false.
+    includeJobDocument :: Prelude.Maybe Prelude.Bool,
+    -- | Optional. When included and set to true, the response contains the
+    -- JobExecutionState data. The default is false.
+    includeJobExecutionState :: Prelude.Maybe Prelude.Bool,
+    -- | Optional. A collection of name\/value pairs that describe the status of
+    -- the job execution. If not specified, the statusDetails are unchanged.
+    statusDetails :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Specifies the amount of time this device has to finish execution of this
+    -- job. If the job execution status is not set to a terminal state before
+    -- this timer expires, or before the timer is reset (by again calling
+    -- @UpdateJobExecution@, setting the status to @IN_PROGRESS@ and specifying
+    -- a new timeout value in this field) the job execution status will be
+    -- automatically set to @TIMED_OUT@. Note that setting or resetting this
+    -- timeout has no effect on that job execution timeout which may have been
+    -- specified when the job was created (@CreateJob@ using field
+    -- @timeoutConfig@).
+    stepTimeoutInMinutes :: Prelude.Maybe Prelude.Integer,
+    -- | The unique identifier assigned to this job when it was created.
+    jobId :: Prelude.Text,
+    -- | The name of the thing associated with the device.
+    thingName :: Prelude.Text,
+    -- | The new status for the job execution (IN_PROGRESS, FAILED, SUCCESS, or
+    -- REJECTED). This must be specified on every update.
+    status :: JobExecutionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateJobExecution' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'executionNumber', 'updateJobExecution_executionNumber' - Optional. A number that identifies a particular job execution on a
+-- particular device.
+--
+-- 'expectedVersion', 'updateJobExecution_expectedVersion' - Optional. The expected current version of the job execution. Each time
+-- you update the job execution, its version is incremented. If the version
+-- of the job execution stored in Jobs does not match, the update is
+-- rejected with a VersionMismatch error, and an ErrorResponse that
+-- contains the current job execution status data is returned. (This makes
+-- it unnecessary to perform a separate DescribeJobExecution request in
+-- order to obtain the job execution status data.)
+--
+-- 'includeJobDocument', 'updateJobExecution_includeJobDocument' - Optional. When set to true, the response contains the job document. The
+-- default is false.
+--
+-- 'includeJobExecutionState', 'updateJobExecution_includeJobExecutionState' - Optional. When included and set to true, the response contains the
+-- JobExecutionState data. The default is false.
+--
+-- 'statusDetails', 'updateJobExecution_statusDetails' - Optional. A collection of name\/value pairs that describe the status of
+-- the job execution. If not specified, the statusDetails are unchanged.
+--
+-- 'stepTimeoutInMinutes', 'updateJobExecution_stepTimeoutInMinutes' - Specifies the amount of time this device has to finish execution of this
+-- job. If the job execution status is not set to a terminal state before
+-- this timer expires, or before the timer is reset (by again calling
+-- @UpdateJobExecution@, setting the status to @IN_PROGRESS@ and specifying
+-- a new timeout value in this field) the job execution status will be
+-- automatically set to @TIMED_OUT@. Note that setting or resetting this
+-- timeout has no effect on that job execution timeout which may have been
+-- specified when the job was created (@CreateJob@ using field
+-- @timeoutConfig@).
+--
+-- 'jobId', 'updateJobExecution_jobId' - The unique identifier assigned to this job when it was created.
+--
+-- 'thingName', 'updateJobExecution_thingName' - The name of the thing associated with the device.
+--
+-- 'status', 'updateJobExecution_status' - The new status for the job execution (IN_PROGRESS, FAILED, SUCCESS, or
+-- REJECTED). This must be specified on every update.
+newUpdateJobExecution ::
+  -- | 'jobId'
+  Prelude.Text ->
+  -- | 'thingName'
+  Prelude.Text ->
+  -- | 'status'
+  JobExecutionStatus ->
+  UpdateJobExecution
+newUpdateJobExecution pJobId_ pThingName_ pStatus_ =
+  UpdateJobExecution'
+    { executionNumber =
+        Prelude.Nothing,
+      expectedVersion = Prelude.Nothing,
+      includeJobDocument = Prelude.Nothing,
+      includeJobExecutionState = Prelude.Nothing,
+      statusDetails = Prelude.Nothing,
+      stepTimeoutInMinutes = Prelude.Nothing,
+      jobId = pJobId_,
+      thingName = pThingName_,
+      status = pStatus_
+    }
+
+-- | Optional. A number that identifies a particular job execution on a
+-- particular device.
+updateJobExecution_executionNumber :: Lens.Lens' UpdateJobExecution (Prelude.Maybe Prelude.Integer)
+updateJobExecution_executionNumber = Lens.lens (\UpdateJobExecution' {executionNumber} -> executionNumber) (\s@UpdateJobExecution' {} a -> s {executionNumber = a} :: UpdateJobExecution)
+
+-- | Optional. The expected current version of the job execution. Each time
+-- you update the job execution, its version is incremented. If the version
+-- of the job execution stored in Jobs does not match, the update is
+-- rejected with a VersionMismatch error, and an ErrorResponse that
+-- contains the current job execution status data is returned. (This makes
+-- it unnecessary to perform a separate DescribeJobExecution request in
+-- order to obtain the job execution status data.)
+updateJobExecution_expectedVersion :: Lens.Lens' UpdateJobExecution (Prelude.Maybe Prelude.Integer)
+updateJobExecution_expectedVersion = Lens.lens (\UpdateJobExecution' {expectedVersion} -> expectedVersion) (\s@UpdateJobExecution' {} a -> s {expectedVersion = a} :: UpdateJobExecution)
+
+-- | Optional. When set to true, the response contains the job document. The
+-- default is false.
+updateJobExecution_includeJobDocument :: Lens.Lens' UpdateJobExecution (Prelude.Maybe Prelude.Bool)
+updateJobExecution_includeJobDocument = Lens.lens (\UpdateJobExecution' {includeJobDocument} -> includeJobDocument) (\s@UpdateJobExecution' {} a -> s {includeJobDocument = a} :: UpdateJobExecution)
+
+-- | Optional. When included and set to true, the response contains the
+-- JobExecutionState data. The default is false.
+updateJobExecution_includeJobExecutionState :: Lens.Lens' UpdateJobExecution (Prelude.Maybe Prelude.Bool)
+updateJobExecution_includeJobExecutionState = Lens.lens (\UpdateJobExecution' {includeJobExecutionState} -> includeJobExecutionState) (\s@UpdateJobExecution' {} a -> s {includeJobExecutionState = a} :: UpdateJobExecution)
+
+-- | Optional. A collection of name\/value pairs that describe the status of
+-- the job execution. If not specified, the statusDetails are unchanged.
+updateJobExecution_statusDetails :: Lens.Lens' UpdateJobExecution (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateJobExecution_statusDetails = Lens.lens (\UpdateJobExecution' {statusDetails} -> statusDetails) (\s@UpdateJobExecution' {} a -> s {statusDetails = a} :: UpdateJobExecution) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the amount of time this device has to finish execution of this
+-- job. If the job execution status is not set to a terminal state before
+-- this timer expires, or before the timer is reset (by again calling
+-- @UpdateJobExecution@, setting the status to @IN_PROGRESS@ and specifying
+-- a new timeout value in this field) the job execution status will be
+-- automatically set to @TIMED_OUT@. Note that setting or resetting this
+-- timeout has no effect on that job execution timeout which may have been
+-- specified when the job was created (@CreateJob@ using field
+-- @timeoutConfig@).
+updateJobExecution_stepTimeoutInMinutes :: Lens.Lens' UpdateJobExecution (Prelude.Maybe Prelude.Integer)
+updateJobExecution_stepTimeoutInMinutes = Lens.lens (\UpdateJobExecution' {stepTimeoutInMinutes} -> stepTimeoutInMinutes) (\s@UpdateJobExecution' {} a -> s {stepTimeoutInMinutes = a} :: UpdateJobExecution)
+
+-- | The unique identifier assigned to this job when it was created.
+updateJobExecution_jobId :: Lens.Lens' UpdateJobExecution Prelude.Text
+updateJobExecution_jobId = Lens.lens (\UpdateJobExecution' {jobId} -> jobId) (\s@UpdateJobExecution' {} a -> s {jobId = a} :: UpdateJobExecution)
+
+-- | The name of the thing associated with the device.
+updateJobExecution_thingName :: Lens.Lens' UpdateJobExecution Prelude.Text
+updateJobExecution_thingName = Lens.lens (\UpdateJobExecution' {thingName} -> thingName) (\s@UpdateJobExecution' {} a -> s {thingName = a} :: UpdateJobExecution)
+
+-- | The new status for the job execution (IN_PROGRESS, FAILED, SUCCESS, or
+-- REJECTED). This must be specified on every update.
+updateJobExecution_status :: Lens.Lens' UpdateJobExecution JobExecutionStatus
+updateJobExecution_status = Lens.lens (\UpdateJobExecution' {status} -> status) (\s@UpdateJobExecution' {} a -> s {status = a} :: UpdateJobExecution)
+
+instance Core.AWSRequest UpdateJobExecution where
+  type
+    AWSResponse UpdateJobExecution =
+      UpdateJobExecutionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateJobExecutionResponse'
+            Prelude.<$> (x Data..?> "executionState")
+            Prelude.<*> (x Data..?> "jobDocument")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateJobExecution where
+  hashWithSalt _salt UpdateJobExecution' {..} =
+    _salt
+      `Prelude.hashWithSalt` executionNumber
+      `Prelude.hashWithSalt` expectedVersion
+      `Prelude.hashWithSalt` includeJobDocument
+      `Prelude.hashWithSalt` includeJobExecutionState
+      `Prelude.hashWithSalt` statusDetails
+      `Prelude.hashWithSalt` stepTimeoutInMinutes
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` thingName
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData UpdateJobExecution where
+  rnf UpdateJobExecution' {..} =
+    Prelude.rnf executionNumber
+      `Prelude.seq` Prelude.rnf expectedVersion
+      `Prelude.seq` Prelude.rnf includeJobDocument
+      `Prelude.seq` Prelude.rnf includeJobExecutionState
+      `Prelude.seq` Prelude.rnf statusDetails
+      `Prelude.seq` Prelude.rnf stepTimeoutInMinutes
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf thingName
+      `Prelude.seq` Prelude.rnf status
+
+instance Data.ToHeaders UpdateJobExecution where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON UpdateJobExecution where
+  toJSON UpdateJobExecution' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("executionNumber" Data..=)
+              Prelude.<$> executionNumber,
+            ("expectedVersion" Data..=)
+              Prelude.<$> expectedVersion,
+            ("includeJobDocument" Data..=)
+              Prelude.<$> includeJobDocument,
+            ("includeJobExecutionState" Data..=)
+              Prelude.<$> includeJobExecutionState,
+            ("statusDetails" Data..=) Prelude.<$> statusDetails,
+            ("stepTimeoutInMinutes" Data..=)
+              Prelude.<$> stepTimeoutInMinutes,
+            Prelude.Just ("status" Data..= status)
+          ]
+      )
+
+instance Data.ToPath UpdateJobExecution where
+  toPath UpdateJobExecution' {..} =
+    Prelude.mconcat
+      [ "/things/",
+        Data.toBS thingName,
+        "/jobs/",
+        Data.toBS jobId
+      ]
+
+instance Data.ToQuery UpdateJobExecution where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateJobExecutionResponse' smart constructor.
+data UpdateJobExecutionResponse = UpdateJobExecutionResponse'
+  { -- | A JobExecutionState object.
+    executionState :: Prelude.Maybe JobExecutionState,
+    -- | The contents of the Job Documents.
+    jobDocument :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateJobExecutionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'executionState', 'updateJobExecutionResponse_executionState' - A JobExecutionState object.
+--
+-- 'jobDocument', 'updateJobExecutionResponse_jobDocument' - The contents of the Job Documents.
+--
+-- 'httpStatus', 'updateJobExecutionResponse_httpStatus' - The response's http status code.
+newUpdateJobExecutionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateJobExecutionResponse
+newUpdateJobExecutionResponse pHttpStatus_ =
+  UpdateJobExecutionResponse'
+    { executionState =
+        Prelude.Nothing,
+      jobDocument = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A JobExecutionState object.
+updateJobExecutionResponse_executionState :: Lens.Lens' UpdateJobExecutionResponse (Prelude.Maybe JobExecutionState)
+updateJobExecutionResponse_executionState = Lens.lens (\UpdateJobExecutionResponse' {executionState} -> executionState) (\s@UpdateJobExecutionResponse' {} a -> s {executionState = a} :: UpdateJobExecutionResponse)
+
+-- | The contents of the Job Documents.
+updateJobExecutionResponse_jobDocument :: Lens.Lens' UpdateJobExecutionResponse (Prelude.Maybe Prelude.Text)
+updateJobExecutionResponse_jobDocument = Lens.lens (\UpdateJobExecutionResponse' {jobDocument} -> jobDocument) (\s@UpdateJobExecutionResponse' {} a -> s {jobDocument = a} :: UpdateJobExecutionResponse)
+
+-- | The response's http status code.
+updateJobExecutionResponse_httpStatus :: Lens.Lens' UpdateJobExecutionResponse Prelude.Int
+updateJobExecutionResponse_httpStatus = Lens.lens (\UpdateJobExecutionResponse' {httpStatus} -> httpStatus) (\s@UpdateJobExecutionResponse' {} a -> s {httpStatus = a} :: UpdateJobExecutionResponse)
+
+instance Prelude.NFData UpdateJobExecutionResponse where
+  rnf UpdateJobExecutionResponse' {..} =
+    Prelude.rnf executionState
+      `Prelude.seq` Prelude.rnf jobDocument
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTJobsData/Waiters.hs b/gen/Amazonka/IoTJobsData/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTJobsData/Waiters.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTJobsData.Waiters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTJobsData.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTJobsData.Lens
+import Amazonka.IoTJobsData.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/gen/Network/AWS/IoTJobsData.hs b/gen/Network/AWS/IoTJobsData.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTJobsData.hs
+++ /dev/null
@@ -1,140 +0,0 @@
-{-# 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.IoTJobsData
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- AWS IoT Jobs is a service that allows you to define a set of jobs — remote operations that are sent to and executed on one or more devices connected to AWS IoT. For example, you can define a job that instructs a set of devices to download and install application or firmware updates, reboot, rotate certificates, or perform remote troubleshooting operations.
---
---
--- To create a job, you make a job document which is a description of the remote operations to be performed, and you specify a list of targets that should perform the operations. The targets can be individual things, thing groups or both.
---
--- AWS IoT Jobs sends a message to inform the targets that a job is available. The target starts the execution of the job by downloading the job document, performing the operations it specifies, and reporting its progress to AWS IoT. The Jobs service provides commands to track the progress of a job on a specific target and for all the targets of the job
---
-module Network.AWS.IoTJobsData
-    (
-    -- * Service Configuration
-      ioTJobsData
-
-    -- * Errors
-    -- $errors
-
-    -- ** TerminalStateException
-    , _TerminalStateException
-
-    -- ** InvalidRequestException
-    , _InvalidRequestException
-
-    -- ** CertificateValidationException
-    , _CertificateValidationException
-
-    -- ** ThrottlingException
-    , _ThrottlingException
-
-    -- ** ServiceUnavailableException
-    , _ServiceUnavailableException
-
-    -- ** InvalidStateTransitionException
-    , _InvalidStateTransitionException
-
-    -- ** ResourceNotFoundException
-    , _ResourceNotFoundException
-
-    -- * Waiters
-    -- $waiters
-
-    -- * Operations
-    -- $operations
-
-    -- ** UpdateJobExecution
-    , module Network.AWS.IoTJobsData.UpdateJobExecution
-
-    -- ** StartNextPendingJobExecution
-    , module Network.AWS.IoTJobsData.StartNextPendingJobExecution
-
-    -- ** DescribeJobExecution
-    , module Network.AWS.IoTJobsData.DescribeJobExecution
-
-    -- ** GetPendingJobExecutions
-    , module Network.AWS.IoTJobsData.GetPendingJobExecutions
-
-    -- * Types
-
-    -- ** JobExecutionStatus
-    , JobExecutionStatus (..)
-
-    -- ** JobExecution
-    , JobExecution
-    , jobExecution
-    , jeStatus
-    , jeJobId
-    , jeLastUpdatedAt
-    , jeQueuedAt
-    , jeJobDocument
-    , jeStatusDetails
-    , jeExecutionNumber
-    , jeVersionNumber
-    , jeStartedAt
-    , jeThingName
-
-    -- ** JobExecutionState
-    , JobExecutionState
-    , jobExecutionState
-    , jesStatus
-    , jesStatusDetails
-    , jesVersionNumber
-
-    -- ** JobExecutionSummary
-    , JobExecutionSummary
-    , jobExecutionSummary
-    , jJobId
-    , jLastUpdatedAt
-    , jQueuedAt
-    , jExecutionNumber
-    , jVersionNumber
-    , jStartedAt
-    ) where
-
-import Network.AWS.IoTJobsData.DescribeJobExecution
-import Network.AWS.IoTJobsData.GetPendingJobExecutions
-import Network.AWS.IoTJobsData.StartNextPendingJobExecution
-import Network.AWS.IoTJobsData.Types
-import Network.AWS.IoTJobsData.UpdateJobExecution
-import Network.AWS.IoTJobsData.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 'IoTJobsData'.
--}
-
-{- $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/IoTJobsData/DescribeJobExecution.hs b/gen/Network/AWS/IoTJobsData/DescribeJobExecution.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTJobsData/DescribeJobExecution.hs
+++ /dev/null
@@ -1,158 +0,0 @@
-{-# 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.IoTJobsData.DescribeJobExecution
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Gets details of a job execution.
---
---
-module Network.AWS.IoTJobsData.DescribeJobExecution
-    (
-    -- * Creating a Request
-      describeJobExecution
-    , DescribeJobExecution
-    -- * Request Lenses
-    , djeIncludeJobDocument
-    , djeExecutionNumber
-    , djeJobId
-    , djeThingName
-
-    -- * Destructuring the Response
-    , describeJobExecutionResponse
-    , DescribeJobExecutionResponse
-    -- * Response Lenses
-    , djersExecution
-    , djersResponseStatus
-    ) where
-
-import Network.AWS.IoTJobsData.Types
-import Network.AWS.IoTJobsData.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'describeJobExecution' smart constructor.
-data DescribeJobExecution = DescribeJobExecution'
-  { _djeIncludeJobDocument :: !(Maybe Bool)
-  , _djeExecutionNumber    :: !(Maybe Integer)
-  , _djeJobId              :: !Text
-  , _djeThingName          :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeJobExecution' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'djeIncludeJobDocument' - Optional. When set to true, the response contains the job document. The default is false.
---
--- * 'djeExecutionNumber' - Optional. A number that identifies a particular job execution on a particular device. If not specified, the latest job execution is returned.
---
--- * 'djeJobId' - The unique identifier assigned to this job when it was created.
---
--- * 'djeThingName' - The thing name associated with the device the job execution is running on.
-describeJobExecution
-    :: Text -- ^ 'djeJobId'
-    -> Text -- ^ 'djeThingName'
-    -> DescribeJobExecution
-describeJobExecution pJobId_ pThingName_ =
-  DescribeJobExecution'
-    { _djeIncludeJobDocument = Nothing
-    , _djeExecutionNumber = Nothing
-    , _djeJobId = pJobId_
-    , _djeThingName = pThingName_
-    }
-
-
--- | Optional. When set to true, the response contains the job document. The default is false.
-djeIncludeJobDocument :: Lens' DescribeJobExecution (Maybe Bool)
-djeIncludeJobDocument = lens _djeIncludeJobDocument (\ s a -> s{_djeIncludeJobDocument = a})
-
--- | Optional. A number that identifies a particular job execution on a particular device. If not specified, the latest job execution is returned.
-djeExecutionNumber :: Lens' DescribeJobExecution (Maybe Integer)
-djeExecutionNumber = lens _djeExecutionNumber (\ s a -> s{_djeExecutionNumber = a})
-
--- | The unique identifier assigned to this job when it was created.
-djeJobId :: Lens' DescribeJobExecution Text
-djeJobId = lens _djeJobId (\ s a -> s{_djeJobId = a})
-
--- | The thing name associated with the device the job execution is running on.
-djeThingName :: Lens' DescribeJobExecution Text
-djeThingName = lens _djeThingName (\ s a -> s{_djeThingName = a})
-
-instance AWSRequest DescribeJobExecution where
-        type Rs DescribeJobExecution =
-             DescribeJobExecutionResponse
-        request = get ioTJobsData
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeJobExecutionResponse' <$>
-                   (x .?> "execution") <*> (pure (fromEnum s)))
-
-instance Hashable DescribeJobExecution where
-
-instance NFData DescribeJobExecution where
-
-instance ToHeaders DescribeJobExecution where
-        toHeaders = const mempty
-
-instance ToPath DescribeJobExecution where
-        toPath DescribeJobExecution'{..}
-          = mconcat
-              ["/things/", toBS _djeThingName, "/jobs/",
-               toBS _djeJobId]
-
-instance ToQuery DescribeJobExecution where
-        toQuery DescribeJobExecution'{..}
-          = mconcat
-              ["includeJobDocument" =: _djeIncludeJobDocument,
-               "executionNumber" =: _djeExecutionNumber]
-
--- | /See:/ 'describeJobExecutionResponse' smart constructor.
-data DescribeJobExecutionResponse = DescribeJobExecutionResponse'
-  { _djersExecution      :: !(Maybe JobExecution)
-  , _djersResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeJobExecutionResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'djersExecution' - Contains data about a job execution.
---
--- * 'djersResponseStatus' - -- | The response status code.
-describeJobExecutionResponse
-    :: Int -- ^ 'djersResponseStatus'
-    -> DescribeJobExecutionResponse
-describeJobExecutionResponse pResponseStatus_ =
-  DescribeJobExecutionResponse'
-    {_djersExecution = Nothing, _djersResponseStatus = pResponseStatus_}
-
-
--- | Contains data about a job execution.
-djersExecution :: Lens' DescribeJobExecutionResponse (Maybe JobExecution)
-djersExecution = lens _djersExecution (\ s a -> s{_djersExecution = a})
-
--- | -- | The response status code.
-djersResponseStatus :: Lens' DescribeJobExecutionResponse Int
-djersResponseStatus = lens _djersResponseStatus (\ s a -> s{_djersResponseStatus = a})
-
-instance NFData DescribeJobExecutionResponse where
diff --git a/gen/Network/AWS/IoTJobsData/GetPendingJobExecutions.hs b/gen/Network/AWS/IoTJobsData/GetPendingJobExecutions.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTJobsData/GetPendingJobExecutions.hs
+++ /dev/null
@@ -1,136 +0,0 @@
-{-# 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.IoTJobsData.GetPendingJobExecutions
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Gets the list of all jobs for a thing that are not in a terminal status.
---
---
-module Network.AWS.IoTJobsData.GetPendingJobExecutions
-    (
-    -- * Creating a Request
-      getPendingJobExecutions
-    , GetPendingJobExecutions
-    -- * Request Lenses
-    , gpjeThingName
-
-    -- * Destructuring the Response
-    , getPendingJobExecutionsResponse
-    , GetPendingJobExecutionsResponse
-    -- * Response Lenses
-    , gpjersInProgressJobs
-    , gpjersQueuedJobs
-    , gpjersResponseStatus
-    ) where
-
-import Network.AWS.IoTJobsData.Types
-import Network.AWS.IoTJobsData.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'getPendingJobExecutions' smart constructor.
-newtype GetPendingJobExecutions = GetPendingJobExecutions'
-  { _gpjeThingName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetPendingJobExecutions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gpjeThingName' - The name of the thing that is executing the job.
-getPendingJobExecutions
-    :: Text -- ^ 'gpjeThingName'
-    -> GetPendingJobExecutions
-getPendingJobExecutions pThingName_ =
-  GetPendingJobExecutions' {_gpjeThingName = pThingName_}
-
-
--- | The name of the thing that is executing the job.
-gpjeThingName :: Lens' GetPendingJobExecutions Text
-gpjeThingName = lens _gpjeThingName (\ s a -> s{_gpjeThingName = a})
-
-instance AWSRequest GetPendingJobExecutions where
-        type Rs GetPendingJobExecutions =
-             GetPendingJobExecutionsResponse
-        request = get ioTJobsData
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetPendingJobExecutionsResponse' <$>
-                   (x .?> "inProgressJobs" .!@ mempty) <*>
-                     (x .?> "queuedJobs" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable GetPendingJobExecutions where
-
-instance NFData GetPendingJobExecutions where
-
-instance ToHeaders GetPendingJobExecutions where
-        toHeaders = const mempty
-
-instance ToPath GetPendingJobExecutions where
-        toPath GetPendingJobExecutions'{..}
-          = mconcat ["/things/", toBS _gpjeThingName, "/jobs"]
-
-instance ToQuery GetPendingJobExecutions where
-        toQuery = const mempty
-
--- | /See:/ 'getPendingJobExecutionsResponse' smart constructor.
-data GetPendingJobExecutionsResponse = GetPendingJobExecutionsResponse'
-  { _gpjersInProgressJobs :: !(Maybe [JobExecutionSummary])
-  , _gpjersQueuedJobs     :: !(Maybe [JobExecutionSummary])
-  , _gpjersResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetPendingJobExecutionsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gpjersInProgressJobs' - A list of JobExecutionSummary objects with status IN_PROGRESS.
---
--- * 'gpjersQueuedJobs' - A list of JobExecutionSummary objects with status QUEUED.
---
--- * 'gpjersResponseStatus' - -- | The response status code.
-getPendingJobExecutionsResponse
-    :: Int -- ^ 'gpjersResponseStatus'
-    -> GetPendingJobExecutionsResponse
-getPendingJobExecutionsResponse pResponseStatus_ =
-  GetPendingJobExecutionsResponse'
-    { _gpjersInProgressJobs = Nothing
-    , _gpjersQueuedJobs = Nothing
-    , _gpjersResponseStatus = pResponseStatus_
-    }
-
-
--- | A list of JobExecutionSummary objects with status IN_PROGRESS.
-gpjersInProgressJobs :: Lens' GetPendingJobExecutionsResponse [JobExecutionSummary]
-gpjersInProgressJobs = lens _gpjersInProgressJobs (\ s a -> s{_gpjersInProgressJobs = a}) . _Default . _Coerce
-
--- | A list of JobExecutionSummary objects with status QUEUED.
-gpjersQueuedJobs :: Lens' GetPendingJobExecutionsResponse [JobExecutionSummary]
-gpjersQueuedJobs = lens _gpjersQueuedJobs (\ s a -> s{_gpjersQueuedJobs = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-gpjersResponseStatus :: Lens' GetPendingJobExecutionsResponse Int
-gpjersResponseStatus = lens _gpjersResponseStatus (\ s a -> s{_gpjersResponseStatus = a})
-
-instance NFData GetPendingJobExecutionsResponse where
diff --git a/gen/Network/AWS/IoTJobsData/StartNextPendingJobExecution.hs b/gen/Network/AWS/IoTJobsData/StartNextPendingJobExecution.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTJobsData/StartNextPendingJobExecution.hs
+++ /dev/null
@@ -1,141 +0,0 @@
-{-# 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.IoTJobsData.StartNextPendingJobExecution
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Gets and starts the next pending (status IN_PROGRESS or QUEUED) job execution for a thing.
---
---
-module Network.AWS.IoTJobsData.StartNextPendingJobExecution
-    (
-    -- * Creating a Request
-      startNextPendingJobExecution
-    , StartNextPendingJobExecution
-    -- * Request Lenses
-    , snpjeStatusDetails
-    , snpjeThingName
-
-    -- * Destructuring the Response
-    , startNextPendingJobExecutionResponse
-    , StartNextPendingJobExecutionResponse
-    -- * Response Lenses
-    , snpjersExecution
-    , snpjersResponseStatus
-    ) where
-
-import Network.AWS.IoTJobsData.Types
-import Network.AWS.IoTJobsData.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'startNextPendingJobExecution' smart constructor.
-data StartNextPendingJobExecution = StartNextPendingJobExecution'
-  { _snpjeStatusDetails :: !(Maybe (Map Text Text))
-  , _snpjeThingName     :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StartNextPendingJobExecution' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'snpjeStatusDetails' - A collection of name/value pairs that describe the status of the job execution. If not specified, the statusDetails are unchanged.
---
--- * 'snpjeThingName' - The name of the thing associated with the device.
-startNextPendingJobExecution
-    :: Text -- ^ 'snpjeThingName'
-    -> StartNextPendingJobExecution
-startNextPendingJobExecution pThingName_ =
-  StartNextPendingJobExecution'
-    {_snpjeStatusDetails = Nothing, _snpjeThingName = pThingName_}
-
-
--- | A collection of name/value pairs that describe the status of the job execution. If not specified, the statusDetails are unchanged.
-snpjeStatusDetails :: Lens' StartNextPendingJobExecution (HashMap Text Text)
-snpjeStatusDetails = lens _snpjeStatusDetails (\ s a -> s{_snpjeStatusDetails = a}) . _Default . _Map
-
--- | The name of the thing associated with the device.
-snpjeThingName :: Lens' StartNextPendingJobExecution Text
-snpjeThingName = lens _snpjeThingName (\ s a -> s{_snpjeThingName = a})
-
-instance AWSRequest StartNextPendingJobExecution
-         where
-        type Rs StartNextPendingJobExecution =
-             StartNextPendingJobExecutionResponse
-        request = putJSON ioTJobsData
-        response
-          = receiveJSON
-              (\ s h x ->
-                 StartNextPendingJobExecutionResponse' <$>
-                   (x .?> "execution") <*> (pure (fromEnum s)))
-
-instance Hashable StartNextPendingJobExecution where
-
-instance NFData StartNextPendingJobExecution where
-
-instance ToHeaders StartNextPendingJobExecution where
-        toHeaders = const mempty
-
-instance ToJSON StartNextPendingJobExecution where
-        toJSON StartNextPendingJobExecution'{..}
-          = object
-              (catMaybes
-                 [("statusDetails" .=) <$> _snpjeStatusDetails])
-
-instance ToPath StartNextPendingJobExecution where
-        toPath StartNextPendingJobExecution'{..}
-          = mconcat
-              ["/things/", toBS _snpjeThingName, "/jobs/$next"]
-
-instance ToQuery StartNextPendingJobExecution where
-        toQuery = const mempty
-
--- | /See:/ 'startNextPendingJobExecutionResponse' smart constructor.
-data StartNextPendingJobExecutionResponse = StartNextPendingJobExecutionResponse'
-  { _snpjersExecution      :: !(Maybe JobExecution)
-  , _snpjersResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StartNextPendingJobExecutionResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'snpjersExecution' - A JobExecution object.
---
--- * 'snpjersResponseStatus' - -- | The response status code.
-startNextPendingJobExecutionResponse
-    :: Int -- ^ 'snpjersResponseStatus'
-    -> StartNextPendingJobExecutionResponse
-startNextPendingJobExecutionResponse pResponseStatus_ =
-  StartNextPendingJobExecutionResponse'
-    {_snpjersExecution = Nothing, _snpjersResponseStatus = pResponseStatus_}
-
-
--- | A JobExecution object.
-snpjersExecution :: Lens' StartNextPendingJobExecutionResponse (Maybe JobExecution)
-snpjersExecution = lens _snpjersExecution (\ s a -> s{_snpjersExecution = a})
-
--- | -- | The response status code.
-snpjersResponseStatus :: Lens' StartNextPendingJobExecutionResponse Int
-snpjersResponseStatus = lens _snpjersResponseStatus (\ s a -> s{_snpjersResponseStatus = a})
-
-instance NFData StartNextPendingJobExecutionResponse
-         where
diff --git a/gen/Network/AWS/IoTJobsData/Types.hs b/gen/Network/AWS/IoTJobsData/Types.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTJobsData/Types.hs
+++ /dev/null
@@ -1,163 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.IoTJobsData.Types
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.IoTJobsData.Types
-    (
-    -- * Service Configuration
-      ioTJobsData
-
-    -- * Errors
-    , _TerminalStateException
-    , _InvalidRequestException
-    , _CertificateValidationException
-    , _ThrottlingException
-    , _ServiceUnavailableException
-    , _InvalidStateTransitionException
-    , _ResourceNotFoundException
-
-    -- * JobExecutionStatus
-    , JobExecutionStatus (..)
-
-    -- * JobExecution
-    , JobExecution
-    , jobExecution
-    , jeStatus
-    , jeJobId
-    , jeLastUpdatedAt
-    , jeQueuedAt
-    , jeJobDocument
-    , jeStatusDetails
-    , jeExecutionNumber
-    , jeVersionNumber
-    , jeStartedAt
-    , jeThingName
-
-    -- * JobExecutionState
-    , JobExecutionState
-    , jobExecutionState
-    , jesStatus
-    , jesStatusDetails
-    , jesVersionNumber
-
-    -- * JobExecutionSummary
-    , JobExecutionSummary
-    , jobExecutionSummary
-    , jJobId
-    , jLastUpdatedAt
-    , jQueuedAt
-    , jExecutionNumber
-    , jVersionNumber
-    , jStartedAt
-    ) where
-
-import Network.AWS.IoTJobsData.Types.Product
-import Network.AWS.IoTJobsData.Types.Sum
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Sign.V4
-
--- | API version @2017-09-29@ of the Amazon IoT Jobs Data Plane SDK configuration.
-ioTJobsData :: Service
-ioTJobsData =
-  Service
-    { _svcAbbrev = "IoTJobsData"
-    , _svcSigner = v4
-    , _svcPrefix = "data.jobs.iot"
-    , _svcVersion = "2017-09-29"
-    , _svcEndpoint = defaultEndpoint ioTJobsData
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseJSONError "IoTJobsData"
-    , _svcRetry = retry
-    }
-  where
-    retry =
-      Exponential
-        { _retryBase = 5.0e-2
-        , _retryGrowth = 2
-        , _retryAttempts = 5
-        , _retryCheck = check
-        }
-    check e
-      | has (hasCode "ThrottledException" . hasStatus 400) e =
-        Just "throttled_exception"
-      | has (hasStatus 429) e = Just "too_many_requests"
-      | has (hasCode "ThrottlingException" . hasStatus 400) e =
-        Just "throttling_exception"
-      | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
-      | has (hasStatus 504) e = Just "gateway_timeout"
-      | has (hasCode "RequestThrottledException" . hasStatus 400) e =
-        Just "request_throttled_exception"
-      | has (hasStatus 502) e = Just "bad_gateway"
-      | has (hasStatus 503) e = Just "service_unavailable"
-      | has (hasStatus 500) e = Just "general_server_error"
-      | has (hasStatus 509) e = Just "limit_exceeded"
-      | otherwise = Nothing
-
-
--- | The job is in a terminal state.
---
---
-_TerminalStateException :: AsError a => Getting (First ServiceError) a ServiceError
-_TerminalStateException =
-  _MatchServiceError ioTJobsData "TerminalStateException" . hasStatus 410
-
-
--- | The contents of the request were invalid. For example, this code is returned when an UpdateJobExecution request contains invalid status details. The message contains details about the error.
---
---
-_InvalidRequestException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidRequestException =
-  _MatchServiceError ioTJobsData "InvalidRequestException" . hasStatus 400
-
-
--- | The certificate is invalid.
---
---
-_CertificateValidationException :: AsError a => Getting (First ServiceError) a ServiceError
-_CertificateValidationException =
-  _MatchServiceError ioTJobsData "CertificateValidationException" .
-  hasStatus 400
-
-
--- | The rate exceeds the limit.
---
---
-_ThrottlingException :: AsError a => Getting (First ServiceError) a ServiceError
-_ThrottlingException =
-  _MatchServiceError ioTJobsData "ThrottlingException" . hasStatus 429
-
-
--- | The service is temporarily unavailable.
---
---
-_ServiceUnavailableException :: AsError a => Getting (First ServiceError) a ServiceError
-_ServiceUnavailableException =
-  _MatchServiceError ioTJobsData "ServiceUnavailableException" . hasStatus 503
-
-
--- | An update attempted to change the job execution to a state that is invalid because of the job execution's current state (for example, an attempt to change a request in state SUCCESS to state IN_PROGRESS). In this case, the body of the error message also contains the executionState field.
---
---
-_InvalidStateTransitionException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidStateTransitionException =
-  _MatchServiceError ioTJobsData "InvalidStateTransitionException" .
-  hasStatus 409
-
-
--- | The specified resource does not exist.
---
---
-_ResourceNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceNotFoundException =
-  _MatchServiceError ioTJobsData "ResourceNotFoundException" . hasStatus 404
-
diff --git a/gen/Network/AWS/IoTJobsData/Types/Product.hs b/gen/Network/AWS/IoTJobsData/Types/Product.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTJobsData/Types/Product.hs
+++ /dev/null
@@ -1,278 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.IoTJobsData.Types.Product
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.IoTJobsData.Types.Product where
-
-import Network.AWS.IoTJobsData.Types.Sum
-import Network.AWS.Lens
-import Network.AWS.Prelude
-
--- | Contains data about a job execution.
---
---
---
--- /See:/ 'jobExecution' smart constructor.
-data JobExecution = JobExecution'
-  { _jeStatus          :: !(Maybe JobExecutionStatus)
-  , _jeJobId           :: !(Maybe Text)
-  , _jeLastUpdatedAt   :: !(Maybe Integer)
-  , _jeQueuedAt        :: !(Maybe Integer)
-  , _jeJobDocument     :: !(Maybe Text)
-  , _jeStatusDetails   :: !(Maybe (Map Text Text))
-  , _jeExecutionNumber :: !(Maybe Integer)
-  , _jeVersionNumber   :: !(Maybe Integer)
-  , _jeStartedAt       :: !(Maybe Integer)
-  , _jeThingName       :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'JobExecution' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jeStatus' - The status of the job execution. Can be one of: "QUEUED", "IN_PROGRESS", "FAILED", "SUCCESS", "CANCELED", "REJECTED", or "REMOVED".
---
--- * 'jeJobId' - The unique identifier you assigned to this job when it was created.
---
--- * 'jeLastUpdatedAt' - The time, in milliseconds since the epoch, when the job execution was last updated.
---
--- * 'jeQueuedAt' - The time, in milliseconds since the epoch, when the job execution was enqueued.
---
--- * 'jeJobDocument' - The content of the job document.
---
--- * 'jeStatusDetails' - A collection of name/value pairs that describe the status of the job execution.
---
--- * 'jeExecutionNumber' - A number that identifies a particular job execution on a particular device. It can be used later in commands that return or update job execution information.
---
--- * 'jeVersionNumber' - The version of the job execution. Job execution versions are incremented each time they are updated by a device.
---
--- * 'jeStartedAt' - The time, in milliseconds since the epoch, when the job execution was started.
---
--- * 'jeThingName' - The name of the thing that is executing the job.
-jobExecution
-    :: JobExecution
-jobExecution =
-  JobExecution'
-    { _jeStatus = Nothing
-    , _jeJobId = Nothing
-    , _jeLastUpdatedAt = Nothing
-    , _jeQueuedAt = Nothing
-    , _jeJobDocument = Nothing
-    , _jeStatusDetails = Nothing
-    , _jeExecutionNumber = Nothing
-    , _jeVersionNumber = Nothing
-    , _jeStartedAt = Nothing
-    , _jeThingName = Nothing
-    }
-
-
--- | The status of the job execution. Can be one of: "QUEUED", "IN_PROGRESS", "FAILED", "SUCCESS", "CANCELED", "REJECTED", or "REMOVED".
-jeStatus :: Lens' JobExecution (Maybe JobExecutionStatus)
-jeStatus = lens _jeStatus (\ s a -> s{_jeStatus = a})
-
--- | The unique identifier you assigned to this job when it was created.
-jeJobId :: Lens' JobExecution (Maybe Text)
-jeJobId = lens _jeJobId (\ s a -> s{_jeJobId = a})
-
--- | The time, in milliseconds since the epoch, when the job execution was last updated.
-jeLastUpdatedAt :: Lens' JobExecution (Maybe Integer)
-jeLastUpdatedAt = lens _jeLastUpdatedAt (\ s a -> s{_jeLastUpdatedAt = a})
-
--- | The time, in milliseconds since the epoch, when the job execution was enqueued.
-jeQueuedAt :: Lens' JobExecution (Maybe Integer)
-jeQueuedAt = lens _jeQueuedAt (\ s a -> s{_jeQueuedAt = a})
-
--- | The content of the job document.
-jeJobDocument :: Lens' JobExecution (Maybe Text)
-jeJobDocument = lens _jeJobDocument (\ s a -> s{_jeJobDocument = a})
-
--- | A collection of name/value pairs that describe the status of the job execution.
-jeStatusDetails :: Lens' JobExecution (HashMap Text Text)
-jeStatusDetails = lens _jeStatusDetails (\ s a -> s{_jeStatusDetails = a}) . _Default . _Map
-
--- | A number that identifies a particular job execution on a particular device. It can be used later in commands that return or update job execution information.
-jeExecutionNumber :: Lens' JobExecution (Maybe Integer)
-jeExecutionNumber = lens _jeExecutionNumber (\ s a -> s{_jeExecutionNumber = a})
-
--- | The version of the job execution. Job execution versions are incremented each time they are updated by a device.
-jeVersionNumber :: Lens' JobExecution (Maybe Integer)
-jeVersionNumber = lens _jeVersionNumber (\ s a -> s{_jeVersionNumber = a})
-
--- | The time, in milliseconds since the epoch, when the job execution was started.
-jeStartedAt :: Lens' JobExecution (Maybe Integer)
-jeStartedAt = lens _jeStartedAt (\ s a -> s{_jeStartedAt = a})
-
--- | The name of the thing that is executing the job.
-jeThingName :: Lens' JobExecution (Maybe Text)
-jeThingName = lens _jeThingName (\ s a -> s{_jeThingName = a})
-
-instance FromJSON JobExecution where
-        parseJSON
-          = withObject "JobExecution"
-              (\ x ->
-                 JobExecution' <$>
-                   (x .:? "status") <*> (x .:? "jobId") <*>
-                     (x .:? "lastUpdatedAt")
-                     <*> (x .:? "queuedAt")
-                     <*> (x .:? "jobDocument")
-                     <*> (x .:? "statusDetails" .!= mempty)
-                     <*> (x .:? "executionNumber")
-                     <*> (x .:? "versionNumber")
-                     <*> (x .:? "startedAt")
-                     <*> (x .:? "thingName"))
-
-instance Hashable JobExecution where
-
-instance NFData JobExecution where
-
--- | Contains data about the state of a job execution.
---
---
---
--- /See:/ 'jobExecutionState' smart constructor.
-data JobExecutionState = JobExecutionState'
-  { _jesStatus        :: !(Maybe JobExecutionStatus)
-  , _jesStatusDetails :: !(Maybe (Map Text Text))
-  , _jesVersionNumber :: !(Maybe Integer)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'JobExecutionState' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jesStatus' - The status of the job execution. Can be one of: "QUEUED", "IN_PROGRESS", "FAILED", "SUCCESS", "CANCELED", "REJECTED", or "REMOVED".
---
--- * 'jesStatusDetails' - A collection of name/value pairs that describe the status of the job execution.
---
--- * 'jesVersionNumber' - The version of the job execution. Job execution versions are incremented each time they are updated by a device.
-jobExecutionState
-    :: JobExecutionState
-jobExecutionState =
-  JobExecutionState'
-    { _jesStatus = Nothing
-    , _jesStatusDetails = Nothing
-    , _jesVersionNumber = Nothing
-    }
-
-
--- | The status of the job execution. Can be one of: "QUEUED", "IN_PROGRESS", "FAILED", "SUCCESS", "CANCELED", "REJECTED", or "REMOVED".
-jesStatus :: Lens' JobExecutionState (Maybe JobExecutionStatus)
-jesStatus = lens _jesStatus (\ s a -> s{_jesStatus = a})
-
--- | A collection of name/value pairs that describe the status of the job execution.
-jesStatusDetails :: Lens' JobExecutionState (HashMap Text Text)
-jesStatusDetails = lens _jesStatusDetails (\ s a -> s{_jesStatusDetails = a}) . _Default . _Map
-
--- | The version of the job execution. Job execution versions are incremented each time they are updated by a device.
-jesVersionNumber :: Lens' JobExecutionState (Maybe Integer)
-jesVersionNumber = lens _jesVersionNumber (\ s a -> s{_jesVersionNumber = a})
-
-instance FromJSON JobExecutionState where
-        parseJSON
-          = withObject "JobExecutionState"
-              (\ x ->
-                 JobExecutionState' <$>
-                   (x .:? "status") <*>
-                     (x .:? "statusDetails" .!= mempty)
-                     <*> (x .:? "versionNumber"))
-
-instance Hashable JobExecutionState where
-
-instance NFData JobExecutionState where
-
--- | Contains a subset of information about a job execution.
---
---
---
--- /See:/ 'jobExecutionSummary' smart constructor.
-data JobExecutionSummary = JobExecutionSummary'
-  { _jJobId           :: !(Maybe Text)
-  , _jLastUpdatedAt   :: !(Maybe Integer)
-  , _jQueuedAt        :: !(Maybe Integer)
-  , _jExecutionNumber :: !(Maybe Integer)
-  , _jVersionNumber   :: !(Maybe Integer)
-  , _jStartedAt       :: !(Maybe Integer)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'JobExecutionSummary' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jJobId' - The unique identifier you assigned to this job when it was created.
---
--- * 'jLastUpdatedAt' - The time, in milliseconds since the epoch, when the job execution was last updated.
---
--- * 'jQueuedAt' - The time, in milliseconds since the epoch, when the job execution was enqueued.
---
--- * 'jExecutionNumber' - A number that identifies a particular job execution on a particular device.
---
--- * 'jVersionNumber' - The version of the job execution. Job execution versions are incremented each time AWS IoT Jobs receives an update from a device.
---
--- * 'jStartedAt' - The time, in milliseconds since the epoch, when the job execution started.
-jobExecutionSummary
-    :: JobExecutionSummary
-jobExecutionSummary =
-  JobExecutionSummary'
-    { _jJobId = Nothing
-    , _jLastUpdatedAt = Nothing
-    , _jQueuedAt = Nothing
-    , _jExecutionNumber = Nothing
-    , _jVersionNumber = Nothing
-    , _jStartedAt = Nothing
-    }
-
-
--- | The unique identifier you assigned to this job when it was created.
-jJobId :: Lens' JobExecutionSummary (Maybe Text)
-jJobId = lens _jJobId (\ s a -> s{_jJobId = a})
-
--- | The time, in milliseconds since the epoch, when the job execution was last updated.
-jLastUpdatedAt :: Lens' JobExecutionSummary (Maybe Integer)
-jLastUpdatedAt = lens _jLastUpdatedAt (\ s a -> s{_jLastUpdatedAt = a})
-
--- | The time, in milliseconds since the epoch, when the job execution was enqueued.
-jQueuedAt :: Lens' JobExecutionSummary (Maybe Integer)
-jQueuedAt = lens _jQueuedAt (\ s a -> s{_jQueuedAt = a})
-
--- | A number that identifies a particular job execution on a particular device.
-jExecutionNumber :: Lens' JobExecutionSummary (Maybe Integer)
-jExecutionNumber = lens _jExecutionNumber (\ s a -> s{_jExecutionNumber = a})
-
--- | The version of the job execution. Job execution versions are incremented each time AWS IoT Jobs receives an update from a device.
-jVersionNumber :: Lens' JobExecutionSummary (Maybe Integer)
-jVersionNumber = lens _jVersionNumber (\ s a -> s{_jVersionNumber = a})
-
--- | The time, in milliseconds since the epoch, when the job execution started.
-jStartedAt :: Lens' JobExecutionSummary (Maybe Integer)
-jStartedAt = lens _jStartedAt (\ s a -> s{_jStartedAt = a})
-
-instance FromJSON JobExecutionSummary where
-        parseJSON
-          = withObject "JobExecutionSummary"
-              (\ x ->
-                 JobExecutionSummary' <$>
-                   (x .:? "jobId") <*> (x .:? "lastUpdatedAt") <*>
-                     (x .:? "queuedAt")
-                     <*> (x .:? "executionNumber")
-                     <*> (x .:? "versionNumber")
-                     <*> (x .:? "startedAt"))
-
-instance Hashable JobExecutionSummary where
-
-instance NFData JobExecutionSummary where
diff --git a/gen/Network/AWS/IoTJobsData/Types/Sum.hs b/gen/Network/AWS/IoTJobsData/Types/Sum.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTJobsData/Types/Sum.hs
+++ /dev/null
@@ -1,65 +0,0 @@
-{-# 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.IoTJobsData.Types.Sum
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.IoTJobsData.Types.Sum where
-
-import Network.AWS.Prelude
-
-data JobExecutionStatus
-  = Canceled
-  | Failed
-  | InProgress
-  | Queued
-  | Rejected
-  | Removed
-  | Succeeded
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText JobExecutionStatus where
-    parser = takeLowerText >>= \case
-        "canceled" -> pure Canceled
-        "failed" -> pure Failed
-        "in_progress" -> pure InProgress
-        "queued" -> pure Queued
-        "rejected" -> pure Rejected
-        "removed" -> pure Removed
-        "succeeded" -> pure Succeeded
-        e -> fromTextError $ "Failure parsing JobExecutionStatus from value: '" <> e
-           <> "'. Accepted values: canceled, failed, in_progress, queued, rejected, removed, succeeded"
-
-instance ToText JobExecutionStatus where
-    toText = \case
-        Canceled -> "CANCELED"
-        Failed -> "FAILED"
-        InProgress -> "IN_PROGRESS"
-        Queued -> "QUEUED"
-        Rejected -> "REJECTED"
-        Removed -> "REMOVED"
-        Succeeded -> "SUCCEEDED"
-
-instance Hashable     JobExecutionStatus
-instance NFData       JobExecutionStatus
-instance ToByteString JobExecutionStatus
-instance ToQuery      JobExecutionStatus
-instance ToHeader     JobExecutionStatus
-
-instance ToJSON JobExecutionStatus where
-    toJSON = toJSONText
-
-instance FromJSON JobExecutionStatus where
-    parseJSON = parseJSONText "JobExecutionStatus"
diff --git a/gen/Network/AWS/IoTJobsData/UpdateJobExecution.hs b/gen/Network/AWS/IoTJobsData/UpdateJobExecution.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTJobsData/UpdateJobExecution.hs
+++ /dev/null
@@ -1,217 +0,0 @@
-{-# 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.IoTJobsData.UpdateJobExecution
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Updates the status of a job execution.
---
---
-module Network.AWS.IoTJobsData.UpdateJobExecution
-    (
-    -- * Creating a Request
-      updateJobExecution
-    , UpdateJobExecution
-    -- * Request Lenses
-    , ujeIncludeJobDocument
-    , ujeStatusDetails
-    , ujeExecutionNumber
-    , ujeExpectedVersion
-    , ujeIncludeJobExecutionState
-    , ujeJobId
-    , ujeThingName
-    , ujeStatus
-
-    -- * Destructuring the Response
-    , updateJobExecutionResponse
-    , UpdateJobExecutionResponse
-    -- * Response Lenses
-    , ujersJobDocument
-    , ujersExecutionState
-    , ujersResponseStatus
-    ) where
-
-import Network.AWS.IoTJobsData.Types
-import Network.AWS.IoTJobsData.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'updateJobExecution' smart constructor.
-data UpdateJobExecution = UpdateJobExecution'
-  { _ujeIncludeJobDocument       :: !(Maybe Bool)
-  , _ujeStatusDetails            :: !(Maybe (Map Text Text))
-  , _ujeExecutionNumber          :: !(Maybe Integer)
-  , _ujeExpectedVersion          :: !(Maybe Integer)
-  , _ujeIncludeJobExecutionState :: !(Maybe Bool)
-  , _ujeJobId                    :: !Text
-  , _ujeThingName                :: !Text
-  , _ujeStatus                   :: !JobExecutionStatus
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateJobExecution' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ujeIncludeJobDocument' - Optional. When set to true, the response contains the job document. The default is false.
---
--- * 'ujeStatusDetails' - Optional. A collection of name/value pairs that describe the status of the job execution. If not specified, the statusDetails are unchanged.
---
--- * 'ujeExecutionNumber' - Optional. A number that identifies a particular job execution on a particular device.
---
--- * 'ujeExpectedVersion' - Optional. The expected current version of the job execution. Each time you update the job execution, its version is incremented. If the version of the job execution stored in Jobs does not match, the update is rejected with a VersionMismatch error, and an ErrorResponse that contains the current job execution status data is returned. (This makes it unnecessary to perform a separate DescribeJobExecution request in order to obtain the job execution status data.)
---
--- * 'ujeIncludeJobExecutionState' - Optional. When included and set to true, the response contains the JobExecutionState data. The default is false.
---
--- * 'ujeJobId' - The unique identifier assigned to this job when it was created.
---
--- * 'ujeThingName' - The name of the thing associated with the device.
---
--- * 'ujeStatus' - The new status for the job execution (IN_PROGRESS, FAILED, SUCCESS, or REJECTED). This must be specified on every update.
-updateJobExecution
-    :: Text -- ^ 'ujeJobId'
-    -> Text -- ^ 'ujeThingName'
-    -> JobExecutionStatus -- ^ 'ujeStatus'
-    -> UpdateJobExecution
-updateJobExecution pJobId_ pThingName_ pStatus_ =
-  UpdateJobExecution'
-    { _ujeIncludeJobDocument = Nothing
-    , _ujeStatusDetails = Nothing
-    , _ujeExecutionNumber = Nothing
-    , _ujeExpectedVersion = Nothing
-    , _ujeIncludeJobExecutionState = Nothing
-    , _ujeJobId = pJobId_
-    , _ujeThingName = pThingName_
-    , _ujeStatus = pStatus_
-    }
-
-
--- | Optional. When set to true, the response contains the job document. The default is false.
-ujeIncludeJobDocument :: Lens' UpdateJobExecution (Maybe Bool)
-ujeIncludeJobDocument = lens _ujeIncludeJobDocument (\ s a -> s{_ujeIncludeJobDocument = a})
-
--- | Optional. A collection of name/value pairs that describe the status of the job execution. If not specified, the statusDetails are unchanged.
-ujeStatusDetails :: Lens' UpdateJobExecution (HashMap Text Text)
-ujeStatusDetails = lens _ujeStatusDetails (\ s a -> s{_ujeStatusDetails = a}) . _Default . _Map
-
--- | Optional. A number that identifies a particular job execution on a particular device.
-ujeExecutionNumber :: Lens' UpdateJobExecution (Maybe Integer)
-ujeExecutionNumber = lens _ujeExecutionNumber (\ s a -> s{_ujeExecutionNumber = a})
-
--- | Optional. The expected current version of the job execution. Each time you update the job execution, its version is incremented. If the version of the job execution stored in Jobs does not match, the update is rejected with a VersionMismatch error, and an ErrorResponse that contains the current job execution status data is returned. (This makes it unnecessary to perform a separate DescribeJobExecution request in order to obtain the job execution status data.)
-ujeExpectedVersion :: Lens' UpdateJobExecution (Maybe Integer)
-ujeExpectedVersion = lens _ujeExpectedVersion (\ s a -> s{_ujeExpectedVersion = a})
-
--- | Optional. When included and set to true, the response contains the JobExecutionState data. The default is false.
-ujeIncludeJobExecutionState :: Lens' UpdateJobExecution (Maybe Bool)
-ujeIncludeJobExecutionState = lens _ujeIncludeJobExecutionState (\ s a -> s{_ujeIncludeJobExecutionState = a})
-
--- | The unique identifier assigned to this job when it was created.
-ujeJobId :: Lens' UpdateJobExecution Text
-ujeJobId = lens _ujeJobId (\ s a -> s{_ujeJobId = a})
-
--- | The name of the thing associated with the device.
-ujeThingName :: Lens' UpdateJobExecution Text
-ujeThingName = lens _ujeThingName (\ s a -> s{_ujeThingName = a})
-
--- | The new status for the job execution (IN_PROGRESS, FAILED, SUCCESS, or REJECTED). This must be specified on every update.
-ujeStatus :: Lens' UpdateJobExecution JobExecutionStatus
-ujeStatus = lens _ujeStatus (\ s a -> s{_ujeStatus = a})
-
-instance AWSRequest UpdateJobExecution where
-        type Rs UpdateJobExecution =
-             UpdateJobExecutionResponse
-        request = postJSON ioTJobsData
-        response
-          = receiveJSON
-              (\ s h x ->
-                 UpdateJobExecutionResponse' <$>
-                   (x .?> "jobDocument") <*> (x .?> "executionState")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable UpdateJobExecution where
-
-instance NFData UpdateJobExecution where
-
-instance ToHeaders UpdateJobExecution where
-        toHeaders = const mempty
-
-instance ToJSON UpdateJobExecution where
-        toJSON UpdateJobExecution'{..}
-          = object
-              (catMaybes
-                 [("includeJobDocument" .=) <$>
-                    _ujeIncludeJobDocument,
-                  ("statusDetails" .=) <$> _ujeStatusDetails,
-                  ("executionNumber" .=) <$> _ujeExecutionNumber,
-                  ("expectedVersion" .=) <$> _ujeExpectedVersion,
-                  ("includeJobExecutionState" .=) <$>
-                    _ujeIncludeJobExecutionState,
-                  Just ("status" .= _ujeStatus)])
-
-instance ToPath UpdateJobExecution where
-        toPath UpdateJobExecution'{..}
-          = mconcat
-              ["/things/", toBS _ujeThingName, "/jobs/",
-               toBS _ujeJobId]
-
-instance ToQuery UpdateJobExecution where
-        toQuery = const mempty
-
--- | /See:/ 'updateJobExecutionResponse' smart constructor.
-data UpdateJobExecutionResponse = UpdateJobExecutionResponse'
-  { _ujersJobDocument    :: !(Maybe Text)
-  , _ujersExecutionState :: !(Maybe JobExecutionState)
-  , _ujersResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateJobExecutionResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ujersJobDocument' - The contents of the Job Documents.
---
--- * 'ujersExecutionState' - A JobExecutionState object.
---
--- * 'ujersResponseStatus' - -- | The response status code.
-updateJobExecutionResponse
-    :: Int -- ^ 'ujersResponseStatus'
-    -> UpdateJobExecutionResponse
-updateJobExecutionResponse pResponseStatus_ =
-  UpdateJobExecutionResponse'
-    { _ujersJobDocument = Nothing
-    , _ujersExecutionState = Nothing
-    , _ujersResponseStatus = pResponseStatus_
-    }
-
-
--- | The contents of the Job Documents.
-ujersJobDocument :: Lens' UpdateJobExecutionResponse (Maybe Text)
-ujersJobDocument = lens _ujersJobDocument (\ s a -> s{_ujersJobDocument = a})
-
--- | A JobExecutionState object.
-ujersExecutionState :: Lens' UpdateJobExecutionResponse (Maybe JobExecutionState)
-ujersExecutionState = lens _ujersExecutionState (\ s a -> s{_ujersExecutionState = a})
-
--- | -- | The response status code.
-ujersResponseStatus :: Lens' UpdateJobExecutionResponse Int
-ujersResponseStatus = lens _ujersResponseStatus (\ s a -> s{_ujersResponseStatus = a})
-
-instance NFData UpdateJobExecutionResponse where
diff --git a/gen/Network/AWS/IoTJobsData/Waiters.hs b/gen/Network/AWS/IoTJobsData/Waiters.hs
deleted file mode 100644
--- a/gen/Network/AWS/IoTJobsData/Waiters.hs
+++ /dev/null
@@ -1,21 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies      #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.IoTJobsData.Waiters
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.IoTJobsData.Waiters where
-
-import Network.AWS.IoTJobsData.Types
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Waiter
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,20 +2,22 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2018 Brendan Hay
+-- Copyright   : (c) 2013-2023 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Maintainer  : Brendan Hay
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
---
 module Main (main) where
 
+import Test.Amazonka.IoTJobsData
+import Test.Amazonka.IoTJobsData.Internal
 import Test.Tasty
-import Test.AWS.IoTJobsData
-import Test.AWS.IoTJobsData.Internal
 
 main :: IO ()
-main = defaultMain $ testGroup "IoTJobsData"
-    [ testGroup "tests"    tests
-    , testGroup "fixtures" fixtures
-    ]
+main =
+  defaultMain $
+    testGroup
+      "IoTJobsData"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/AWS/Gen/IoTJobsData.hs b/test/Test/AWS/Gen/IoTJobsData.hs
deleted file mode 100644
--- a/test/Test/AWS/Gen/IoTJobsData.hs
+++ /dev/null
@@ -1,111 +0,0 @@
-{-# 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.IoTJobsData
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.Gen.IoTJobsData where
-
-import Data.Proxy
-import Network.AWS.IoTJobsData
-import Test.AWS.Fixture
-import Test.AWS.IoTJobsData.Internal
-import Test.AWS.Prelude
-import Test.Tasty
-
--- Auto-generated: the actual test selection needs to be manually placed into
--- the top-level so that real test data can be incrementally added.
---
--- This commented snippet is what the entire set should look like:
-
--- fixtures :: TestTree
--- fixtures =
---     [ testGroup "request"
---         [ requestUpdateJobExecution $
---             updateJobExecution
---
---         , requestStartNextPendingJobExecution $
---             startNextPendingJobExecution
---
---         , requestDescribeJobExecution $
---             describeJobExecution
---
---         , requestGetPendingJobExecutions $
---             getPendingJobExecutions
---
---           ]
-
---     , testGroup "response"
---         [ responseUpdateJobExecution $
---             updateJobExecutionResponse
---
---         , responseStartNextPendingJobExecution $
---             startNextPendingJobExecutionResponse
---
---         , responseDescribeJobExecution $
---             describeJobExecutionResponse
---
---         , responseGetPendingJobExecutions $
---             getPendingJobExecutionsResponse
---
---           ]
---     ]
-
--- Requests
-
-requestUpdateJobExecution :: UpdateJobExecution -> TestTree
-requestUpdateJobExecution = req
-    "UpdateJobExecution"
-    "fixture/UpdateJobExecution.yaml"
-
-requestStartNextPendingJobExecution :: StartNextPendingJobExecution -> TestTree
-requestStartNextPendingJobExecution = req
-    "StartNextPendingJobExecution"
-    "fixture/StartNextPendingJobExecution.yaml"
-
-requestDescribeJobExecution :: DescribeJobExecution -> TestTree
-requestDescribeJobExecution = req
-    "DescribeJobExecution"
-    "fixture/DescribeJobExecution.yaml"
-
-requestGetPendingJobExecutions :: GetPendingJobExecutions -> TestTree
-requestGetPendingJobExecutions = req
-    "GetPendingJobExecutions"
-    "fixture/GetPendingJobExecutions.yaml"
-
--- Responses
-
-responseUpdateJobExecution :: UpdateJobExecutionResponse -> TestTree
-responseUpdateJobExecution = res
-    "UpdateJobExecutionResponse"
-    "fixture/UpdateJobExecutionResponse.proto"
-    ioTJobsData
-    (Proxy :: Proxy UpdateJobExecution)
-
-responseStartNextPendingJobExecution :: StartNextPendingJobExecutionResponse -> TestTree
-responseStartNextPendingJobExecution = res
-    "StartNextPendingJobExecutionResponse"
-    "fixture/StartNextPendingJobExecutionResponse.proto"
-    ioTJobsData
-    (Proxy :: Proxy StartNextPendingJobExecution)
-
-responseDescribeJobExecution :: DescribeJobExecutionResponse -> TestTree
-responseDescribeJobExecution = res
-    "DescribeJobExecutionResponse"
-    "fixture/DescribeJobExecutionResponse.proto"
-    ioTJobsData
-    (Proxy :: Proxy DescribeJobExecution)
-
-responseGetPendingJobExecutions :: GetPendingJobExecutionsResponse -> TestTree
-responseGetPendingJobExecutions = res
-    "GetPendingJobExecutionsResponse"
-    "fixture/GetPendingJobExecutionsResponse.proto"
-    ioTJobsData
-    (Proxy :: Proxy GetPendingJobExecutions)
diff --git a/test/Test/AWS/IoTJobsData.hs b/test/Test/AWS/IoTJobsData.hs
deleted file mode 100644
--- a/test/Test/AWS/IoTJobsData.hs
+++ /dev/null
@@ -1,20 +0,0 @@
--- |
--- Module      : Test.AWS.IoTJobsData
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.IoTJobsData
-    ( tests
-    , fixtures
-    ) where
-
-import Test.Tasty (TestTree)
-
-tests :: [TestTree]
-tests = []
-
-fixtures :: [TestTree]
-fixtures = []
diff --git a/test/Test/AWS/IoTJobsData/Internal.hs b/test/Test/AWS/IoTJobsData/Internal.hs
deleted file mode 100644
--- a/test/Test/AWS/IoTJobsData/Internal.hs
+++ /dev/null
@@ -1,9 +0,0 @@
--- |
--- Module      : Test.AWS.IoTJobsData.Internal
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.IoTJobsData.Internal where
diff --git a/test/Test/Amazonka/Gen/IoTJobsData.hs b/test/Test/Amazonka/Gen/IoTJobsData.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/IoTJobsData.hs
@@ -0,0 +1,118 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.Amazonka.Gen.IoTJobsData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.Gen.IoTJobsData where
+
+import Amazonka.IoTJobsData
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.IoTJobsData.Internal
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestDescribeJobExecution $
+--             newDescribeJobExecution
+--
+--         , requestGetPendingJobExecutions $
+--             newGetPendingJobExecutions
+--
+--         , requestStartNextPendingJobExecution $
+--             newStartNextPendingJobExecution
+--
+--         , requestUpdateJobExecution $
+--             newUpdateJobExecution
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseDescribeJobExecution $
+--             newDescribeJobExecutionResponse
+--
+--         , responseGetPendingJobExecutions $
+--             newGetPendingJobExecutionsResponse
+--
+--         , responseStartNextPendingJobExecution $
+--             newStartNextPendingJobExecutionResponse
+--
+--         , responseUpdateJobExecution $
+--             newUpdateJobExecutionResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestDescribeJobExecution :: DescribeJobExecution -> TestTree
+requestDescribeJobExecution =
+  req
+    "DescribeJobExecution"
+    "fixture/DescribeJobExecution.yaml"
+
+requestGetPendingJobExecutions :: GetPendingJobExecutions -> TestTree
+requestGetPendingJobExecutions =
+  req
+    "GetPendingJobExecutions"
+    "fixture/GetPendingJobExecutions.yaml"
+
+requestStartNextPendingJobExecution :: StartNextPendingJobExecution -> TestTree
+requestStartNextPendingJobExecution =
+  req
+    "StartNextPendingJobExecution"
+    "fixture/StartNextPendingJobExecution.yaml"
+
+requestUpdateJobExecution :: UpdateJobExecution -> TestTree
+requestUpdateJobExecution =
+  req
+    "UpdateJobExecution"
+    "fixture/UpdateJobExecution.yaml"
+
+-- Responses
+
+responseDescribeJobExecution :: DescribeJobExecutionResponse -> TestTree
+responseDescribeJobExecution =
+  res
+    "DescribeJobExecutionResponse"
+    "fixture/DescribeJobExecutionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeJobExecution)
+
+responseGetPendingJobExecutions :: GetPendingJobExecutionsResponse -> TestTree
+responseGetPendingJobExecutions =
+  res
+    "GetPendingJobExecutionsResponse"
+    "fixture/GetPendingJobExecutionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetPendingJobExecutions)
+
+responseStartNextPendingJobExecution :: StartNextPendingJobExecutionResponse -> TestTree
+responseStartNextPendingJobExecution =
+  res
+    "StartNextPendingJobExecutionResponse"
+    "fixture/StartNextPendingJobExecutionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartNextPendingJobExecution)
+
+responseUpdateJobExecution :: UpdateJobExecutionResponse -> TestTree
+responseUpdateJobExecution =
+  res
+    "UpdateJobExecutionResponse"
+    "fixture/UpdateJobExecutionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateJobExecution)
diff --git a/test/Test/Amazonka/IoTJobsData.hs b/test/Test/Amazonka/IoTJobsData.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/IoTJobsData.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.IoTJobsData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.IoTJobsData
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/IoTJobsData/Internal.hs b/test/Test/Amazonka/IoTJobsData/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/IoTJobsData/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.IoTJobsData.Internal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.IoTJobsData.Internal where
