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-30@ 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.KinesisVideoArchivedMedia](http://hackage.haskell.org/package/amazonka-kinesis-video-archived-media/docs/Network-AWS-KinesisVideoArchivedMedia.html)
+See [Amazonka.KinesisVideoArchivedMedia](http://hackage.haskell.org/package/amazonka-kinesis-video-archived-media/docs/Amazonka-KinesisVideoArchivedMedia.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-kinesis-video-archived-media.cabal b/amazonka-kinesis-video-archived-media.cabal
--- a/amazonka-kinesis-video-archived-media.cabal
+++ b/amazonka-kinesis-video-archived-media.cabal
@@ -1,87 +1,114 @@
-name:                  amazonka-kinesis-video-archived-media
-version:               1.6.1
-synopsis:              Amazon Kinesis Video Streams Archived Media 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-kinesis-video-archived-media
+version:            2.0
+synopsis:           Amazon Kinesis Video Streams Archived Media 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.KinesisVideoArchivedMedia" or <https://aws.amazon.com/documentation/ the AWS documentation>
-    to get started.
+  Derived from API version @2017-09-30@ 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.KinesisVideoArchivedMedia.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.KinesisVideoArchivedMedia" 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-kinesis-video-archived-media
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-kinesis-video-archived-media
 
 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.KinesisVideoArchivedMedia
-        , Network.AWS.KinesisVideoArchivedMedia.GetMediaForFragmentList
-        , Network.AWS.KinesisVideoArchivedMedia.ListFragments
-        , Network.AWS.KinesisVideoArchivedMedia.Types
-        , Network.AWS.KinesisVideoArchivedMedia.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.KinesisVideoArchivedMedia.Types.Product
-        , Network.AWS.KinesisVideoArchivedMedia.Types.Sum
+  exposed-modules:
+    Amazonka.KinesisVideoArchivedMedia
+    Amazonka.KinesisVideoArchivedMedia.GetClip
+    Amazonka.KinesisVideoArchivedMedia.GetDASHStreamingSessionURL
+    Amazonka.KinesisVideoArchivedMedia.GetHLSStreamingSessionURL
+    Amazonka.KinesisVideoArchivedMedia.GetImages
+    Amazonka.KinesisVideoArchivedMedia.GetMediaForFragmentList
+    Amazonka.KinesisVideoArchivedMedia.Lens
+    Amazonka.KinesisVideoArchivedMedia.ListFragments
+    Amazonka.KinesisVideoArchivedMedia.Types
+    Amazonka.KinesisVideoArchivedMedia.Types.ClipFragmentSelector
+    Amazonka.KinesisVideoArchivedMedia.Types.ClipFragmentSelectorType
+    Amazonka.KinesisVideoArchivedMedia.Types.ClipTimestampRange
+    Amazonka.KinesisVideoArchivedMedia.Types.ContainerFormat
+    Amazonka.KinesisVideoArchivedMedia.Types.DASHDisplayFragmentNumber
+    Amazonka.KinesisVideoArchivedMedia.Types.DASHDisplayFragmentTimestamp
+    Amazonka.KinesisVideoArchivedMedia.Types.DASHFragmentSelector
+    Amazonka.KinesisVideoArchivedMedia.Types.DASHFragmentSelectorType
+    Amazonka.KinesisVideoArchivedMedia.Types.DASHPlaybackMode
+    Amazonka.KinesisVideoArchivedMedia.Types.DASHTimestampRange
+    Amazonka.KinesisVideoArchivedMedia.Types.Format
+    Amazonka.KinesisVideoArchivedMedia.Types.FormatConfigKey
+    Amazonka.KinesisVideoArchivedMedia.Types.Fragment
+    Amazonka.KinesisVideoArchivedMedia.Types.FragmentSelector
+    Amazonka.KinesisVideoArchivedMedia.Types.FragmentSelectorType
+    Amazonka.KinesisVideoArchivedMedia.Types.HLSDiscontinuityMode
+    Amazonka.KinesisVideoArchivedMedia.Types.HLSDisplayFragmentTimestamp
+    Amazonka.KinesisVideoArchivedMedia.Types.HLSFragmentSelector
+    Amazonka.KinesisVideoArchivedMedia.Types.HLSFragmentSelectorType
+    Amazonka.KinesisVideoArchivedMedia.Types.HLSPlaybackMode
+    Amazonka.KinesisVideoArchivedMedia.Types.HLSTimestampRange
+    Amazonka.KinesisVideoArchivedMedia.Types.Image
+    Amazonka.KinesisVideoArchivedMedia.Types.ImageError
+    Amazonka.KinesisVideoArchivedMedia.Types.ImageSelectorType
+    Amazonka.KinesisVideoArchivedMedia.Types.TimestampRange
+    Amazonka.KinesisVideoArchivedMedia.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-kinesis-video-archived-media-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.KinesisVideoArchivedMedia
-        , Test.AWS.Gen.KinesisVideoArchivedMedia
-        , Test.AWS.KinesisVideoArchivedMedia.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.KinesisVideoArchivedMedia
+    Test.Amazonka.KinesisVideoArchivedMedia
+    Test.Amazonka.KinesisVideoArchivedMedia.Internal
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , amazonka-test == 1.6.1.*
-        , amazonka-kinesis-video-archived-media
-        , base
-        , bytestring
-        , tasty
-        , tasty-hunit
-        , text
-        , time
-        , unordered-containers
+  build-depends:
+    , amazonka-core                          >=2.0 && <2.1
+    , amazonka-kinesis-video-archived-media
+    , amazonka-test                          >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/GetClip.yaml b/fixture/GetClip.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetClip.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kinesisvideo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kinesisvideo.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetClipResponse.proto b/fixture/GetClipResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetClipResponse.proto
diff --git a/fixture/GetDASHStreamingSessionURL.yaml b/fixture/GetDASHStreamingSessionURL.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDASHStreamingSessionURL.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kinesisvideo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kinesisvideo.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDASHStreamingSessionURLResponse.proto b/fixture/GetDASHStreamingSessionURLResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDASHStreamingSessionURLResponse.proto
diff --git a/fixture/GetHLSStreamingSessionURL.yaml b/fixture/GetHLSStreamingSessionURL.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetHLSStreamingSessionURL.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kinesisvideo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kinesisvideo.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetHLSStreamingSessionURLResponse.proto b/fixture/GetHLSStreamingSessionURLResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetHLSStreamingSessionURLResponse.proto
diff --git a/fixture/GetImages.yaml b/fixture/GetImages.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetImages.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kinesisvideo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kinesisvideo.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetImagesResponse.proto b/fixture/GetImagesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetImagesResponse.proto
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia.hs b/gen/Amazonka/KinesisVideoArchivedMedia.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia.hs
@@ -0,0 +1,213 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.KinesisVideoArchivedMedia
+-- 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-30@ of the AWS service descriptions, licensed under Apache 2.0.
+module Amazonka.KinesisVideoArchivedMedia
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** ClientLimitExceededException
+    _ClientLimitExceededException,
+
+    -- ** InvalidArgumentException
+    _InvalidArgumentException,
+
+    -- ** InvalidCodecPrivateDataException
+    _InvalidCodecPrivateDataException,
+
+    -- ** InvalidMediaFrameException
+    _InvalidMediaFrameException,
+
+    -- ** MissingCodecPrivateDataException
+    _MissingCodecPrivateDataException,
+
+    -- ** NoDataRetentionException
+    _NoDataRetentionException,
+
+    -- ** NotAuthorizedException
+    _NotAuthorizedException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** UnsupportedStreamMediaTypeException
+    _UnsupportedStreamMediaTypeException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** GetClip
+    GetClip (GetClip'),
+    newGetClip,
+    GetClipResponse (GetClipResponse'),
+    newGetClipResponse,
+
+    -- ** GetDASHStreamingSessionURL
+    GetDASHStreamingSessionURL (GetDASHStreamingSessionURL'),
+    newGetDASHStreamingSessionURL,
+    GetDASHStreamingSessionURLResponse (GetDASHStreamingSessionURLResponse'),
+    newGetDASHStreamingSessionURLResponse,
+
+    -- ** GetHLSStreamingSessionURL
+    GetHLSStreamingSessionURL (GetHLSStreamingSessionURL'),
+    newGetHLSStreamingSessionURL,
+    GetHLSStreamingSessionURLResponse (GetHLSStreamingSessionURLResponse'),
+    newGetHLSStreamingSessionURLResponse,
+
+    -- ** GetImages (Paginated)
+    GetImages (GetImages'),
+    newGetImages,
+    GetImagesResponse (GetImagesResponse'),
+    newGetImagesResponse,
+
+    -- ** GetMediaForFragmentList
+    GetMediaForFragmentList (GetMediaForFragmentList'),
+    newGetMediaForFragmentList,
+    GetMediaForFragmentListResponse (GetMediaForFragmentListResponse'),
+    newGetMediaForFragmentListResponse,
+
+    -- ** ListFragments (Paginated)
+    ListFragments (ListFragments'),
+    newListFragments,
+    ListFragmentsResponse (ListFragmentsResponse'),
+    newListFragmentsResponse,
+
+    -- * Types
+
+    -- ** ClipFragmentSelectorType
+    ClipFragmentSelectorType (..),
+
+    -- ** ContainerFormat
+    ContainerFormat (..),
+
+    -- ** DASHDisplayFragmentNumber
+    DASHDisplayFragmentNumber (..),
+
+    -- ** DASHDisplayFragmentTimestamp
+    DASHDisplayFragmentTimestamp (..),
+
+    -- ** DASHFragmentSelectorType
+    DASHFragmentSelectorType (..),
+
+    -- ** DASHPlaybackMode
+    DASHPlaybackMode (..),
+
+    -- ** Format
+    Format (..),
+
+    -- ** FormatConfigKey
+    FormatConfigKey (..),
+
+    -- ** FragmentSelectorType
+    FragmentSelectorType (..),
+
+    -- ** HLSDiscontinuityMode
+    HLSDiscontinuityMode (..),
+
+    -- ** HLSDisplayFragmentTimestamp
+    HLSDisplayFragmentTimestamp (..),
+
+    -- ** HLSFragmentSelectorType
+    HLSFragmentSelectorType (..),
+
+    -- ** HLSPlaybackMode
+    HLSPlaybackMode (..),
+
+    -- ** ImageError
+    ImageError (..),
+
+    -- ** ImageSelectorType
+    ImageSelectorType (..),
+
+    -- ** ClipFragmentSelector
+    ClipFragmentSelector (ClipFragmentSelector'),
+    newClipFragmentSelector,
+
+    -- ** ClipTimestampRange
+    ClipTimestampRange (ClipTimestampRange'),
+    newClipTimestampRange,
+
+    -- ** DASHFragmentSelector
+    DASHFragmentSelector (DASHFragmentSelector'),
+    newDASHFragmentSelector,
+
+    -- ** DASHTimestampRange
+    DASHTimestampRange (DASHTimestampRange'),
+    newDASHTimestampRange,
+
+    -- ** Fragment
+    Fragment (Fragment'),
+    newFragment,
+
+    -- ** FragmentSelector
+    FragmentSelector (FragmentSelector'),
+    newFragmentSelector,
+
+    -- ** HLSFragmentSelector
+    HLSFragmentSelector (HLSFragmentSelector'),
+    newHLSFragmentSelector,
+
+    -- ** HLSTimestampRange
+    HLSTimestampRange (HLSTimestampRange'),
+    newHLSTimestampRange,
+
+    -- ** Image
+    Image (Image'),
+    newImage,
+
+    -- ** TimestampRange
+    TimestampRange (TimestampRange'),
+    newTimestampRange,
+  )
+where
+
+import Amazonka.KinesisVideoArchivedMedia.GetClip
+import Amazonka.KinesisVideoArchivedMedia.GetDASHStreamingSessionURL
+import Amazonka.KinesisVideoArchivedMedia.GetHLSStreamingSessionURL
+import Amazonka.KinesisVideoArchivedMedia.GetImages
+import Amazonka.KinesisVideoArchivedMedia.GetMediaForFragmentList
+import Amazonka.KinesisVideoArchivedMedia.Lens
+import Amazonka.KinesisVideoArchivedMedia.ListFragments
+import Amazonka.KinesisVideoArchivedMedia.Types
+import Amazonka.KinesisVideoArchivedMedia.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 'KinesisVideoArchivedMedia'.
+
+-- $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/KinesisVideoArchivedMedia/GetClip.hs b/gen/Amazonka/KinesisVideoArchivedMedia/GetClip.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/GetClip.hs
@@ -0,0 +1,261 @@
+{-# 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.KinesisVideoArchivedMedia.GetClip
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Downloads an MP4 file (clip) containing the archived, on-demand media
+-- from the specified video stream over the specified time range.
+--
+-- Both the StreamName and the StreamARN parameters are optional, but you
+-- must specify either the StreamName or the StreamARN when invoking this
+-- API operation.
+--
+-- As a prerequisite to using GetCLip API, you must obtain an endpoint
+-- using @GetDataEndpoint@, specifying GET_CLIP for the @APIName@
+-- parameter.
+--
+-- An Amazon Kinesis video stream has the following requirements for
+-- providing data through MP4:
+--
+-- -   The media must contain h.264 or h.265 encoded video and, optionally,
+--     AAC or G.711 encoded audio. Specifically, the codec ID of track 1
+--     should be @V_MPEG\/ISO\/AVC@ (for h.264) or V_MPEGH\/ISO\/HEVC (for
+--     H.265). Optionally, the codec ID of track 2 should be @A_AAC@ (for
+--     AAC) or A_MS\/ACM (for G.711).
+--
+-- -   Data retention must be greater than 0.
+--
+-- -   The video track of each fragment must contain codec private data in
+--     the Advanced Video Coding (AVC) for H.264 format and HEVC for H.265
+--     format. For more information, see
+--     <https://www.iso.org/standard/55980.html MPEG-4 specification ISO\/IEC 14496-15>.
+--     For information about adapting stream data to a given format, see
+--     <http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-reference-nal.html NAL Adaptation Flags>.
+--
+-- -   The audio track (if present) of each fragment must contain codec
+--     private data in the AAC format
+--     (<https://www.iso.org/standard/43345.html AAC specification ISO\/IEC 13818-7>)
+--     or the
+--     <http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html MS Wave format>.
+--
+-- You can monitor the amount of outgoing data by monitoring the
+-- @GetClip.OutgoingBytes@ Amazon CloudWatch metric. For information about
+-- using CloudWatch to monitor Kinesis Video Streams, see
+-- <http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/monitoring.html Monitoring Kinesis Video Streams>.
+-- For pricing information, see
+-- <https://aws.amazon.com/kinesis/video-streams/pricing/ Amazon Kinesis Video Streams Pricing>
+-- and <https://aws.amazon.com/pricing/ AWS Pricing>. Charges for outgoing
+-- AWS data apply.
+module Amazonka.KinesisVideoArchivedMedia.GetClip
+  ( -- * Creating a Request
+    GetClip (..),
+    newGetClip,
+
+    -- * Request Lenses
+    getClip_streamARN,
+    getClip_streamName,
+    getClip_clipFragmentSelector,
+
+    -- * Destructuring the Response
+    GetClipResponse (..),
+    newGetClipResponse,
+
+    -- * Response Lenses
+    getClipResponse_contentType,
+    getClipResponse_httpStatus,
+    getClipResponse_payload,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KinesisVideoArchivedMedia.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetClip' smart constructor.
+data GetClip = GetClip'
+  { -- | The Amazon Resource Name (ARN) of the stream for which to retrieve the
+    -- media clip.
+    --
+    -- You must specify either the StreamName or the StreamARN.
+    streamARN :: Prelude.Maybe Prelude.Text,
+    -- | The name of the stream for which to retrieve the media clip.
+    --
+    -- You must specify either the StreamName or the StreamARN.
+    streamName :: Prelude.Maybe Prelude.Text,
+    -- | The time range of the requested clip and the source of the timestamps.
+    clipFragmentSelector :: ClipFragmentSelector
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetClip' 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:
+--
+-- 'streamARN', 'getClip_streamARN' - The Amazon Resource Name (ARN) of the stream for which to retrieve the
+-- media clip.
+--
+-- You must specify either the StreamName or the StreamARN.
+--
+-- 'streamName', 'getClip_streamName' - The name of the stream for which to retrieve the media clip.
+--
+-- You must specify either the StreamName or the StreamARN.
+--
+-- 'clipFragmentSelector', 'getClip_clipFragmentSelector' - The time range of the requested clip and the source of the timestamps.
+newGetClip ::
+  -- | 'clipFragmentSelector'
+  ClipFragmentSelector ->
+  GetClip
+newGetClip pClipFragmentSelector_ =
+  GetClip'
+    { streamARN = Prelude.Nothing,
+      streamName = Prelude.Nothing,
+      clipFragmentSelector = pClipFragmentSelector_
+    }
+
+-- | The Amazon Resource Name (ARN) of the stream for which to retrieve the
+-- media clip.
+--
+-- You must specify either the StreamName or the StreamARN.
+getClip_streamARN :: Lens.Lens' GetClip (Prelude.Maybe Prelude.Text)
+getClip_streamARN = Lens.lens (\GetClip' {streamARN} -> streamARN) (\s@GetClip' {} a -> s {streamARN = a} :: GetClip)
+
+-- | The name of the stream for which to retrieve the media clip.
+--
+-- You must specify either the StreamName or the StreamARN.
+getClip_streamName :: Lens.Lens' GetClip (Prelude.Maybe Prelude.Text)
+getClip_streamName = Lens.lens (\GetClip' {streamName} -> streamName) (\s@GetClip' {} a -> s {streamName = a} :: GetClip)
+
+-- | The time range of the requested clip and the source of the timestamps.
+getClip_clipFragmentSelector :: Lens.Lens' GetClip ClipFragmentSelector
+getClip_clipFragmentSelector = Lens.lens (\GetClip' {clipFragmentSelector} -> clipFragmentSelector) (\s@GetClip' {} a -> s {clipFragmentSelector = a} :: GetClip)
+
+instance Core.AWSRequest GetClip where
+  type AWSResponse GetClip = GetClipResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveBody
+      ( \s h x ->
+          GetClipResponse'
+            Prelude.<$> (h Data..#? "Content-Type")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (Prelude.pure x)
+      )
+
+instance Prelude.Hashable GetClip where
+  hashWithSalt _salt GetClip' {..} =
+    _salt
+      `Prelude.hashWithSalt` streamARN
+      `Prelude.hashWithSalt` streamName
+      `Prelude.hashWithSalt` clipFragmentSelector
+
+instance Prelude.NFData GetClip where
+  rnf GetClip' {..} =
+    Prelude.rnf streamARN
+      `Prelude.seq` Prelude.rnf streamName
+      `Prelude.seq` Prelude.rnf clipFragmentSelector
+
+instance Data.ToHeaders GetClip where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON GetClip where
+  toJSON GetClip' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("StreamARN" Data..=) Prelude.<$> streamARN,
+            ("StreamName" Data..=) Prelude.<$> streamName,
+            Prelude.Just
+              ( "ClipFragmentSelector"
+                  Data..= clipFragmentSelector
+              )
+          ]
+      )
+
+instance Data.ToPath GetClip where
+  toPath = Prelude.const "/getClip"
+
+instance Data.ToQuery GetClip where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetClipResponse' smart constructor.
+data GetClipResponse = GetClipResponse'
+  { -- | The content type of the media in the requested clip.
+    contentType :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Traditional MP4 file that contains the media clip from the specified
+    -- video stream. The output will contain the first 100 MB or the first 200
+    -- fragments from the specified start timestamp. For more information, see
+    -- <https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/limits.html Kinesis Video Streams Limits>.
+    payload :: Data.ResponseBody
+  }
+  deriving (Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetClipResponse' 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:
+--
+-- 'contentType', 'getClipResponse_contentType' - The content type of the media in the requested clip.
+--
+-- 'httpStatus', 'getClipResponse_httpStatus' - The response's http status code.
+--
+-- 'payload', 'getClipResponse_payload' - Traditional MP4 file that contains the media clip from the specified
+-- video stream. The output will contain the first 100 MB or the first 200
+-- fragments from the specified start timestamp. For more information, see
+-- <https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/limits.html Kinesis Video Streams Limits>.
+newGetClipResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'payload'
+  Data.ResponseBody ->
+  GetClipResponse
+newGetClipResponse pHttpStatus_ pPayload_ =
+  GetClipResponse'
+    { contentType = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      payload = pPayload_
+    }
+
+-- | The content type of the media in the requested clip.
+getClipResponse_contentType :: Lens.Lens' GetClipResponse (Prelude.Maybe Prelude.Text)
+getClipResponse_contentType = Lens.lens (\GetClipResponse' {contentType} -> contentType) (\s@GetClipResponse' {} a -> s {contentType = a} :: GetClipResponse)
+
+-- | The response's http status code.
+getClipResponse_httpStatus :: Lens.Lens' GetClipResponse Prelude.Int
+getClipResponse_httpStatus = Lens.lens (\GetClipResponse' {httpStatus} -> httpStatus) (\s@GetClipResponse' {} a -> s {httpStatus = a} :: GetClipResponse)
+
+-- | Traditional MP4 file that contains the media clip from the specified
+-- video stream. The output will contain the first 100 MB or the first 200
+-- fragments from the specified start timestamp. For more information, see
+-- <https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/limits.html Kinesis Video Streams Limits>.
+getClipResponse_payload :: Lens.Lens' GetClipResponse Data.ResponseBody
+getClipResponse_payload = Lens.lens (\GetClipResponse' {payload} -> payload) (\s@GetClipResponse' {} a -> s {payload = a} :: GetClipResponse)
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/GetDASHStreamingSessionURL.hs b/gen/Amazonka/KinesisVideoArchivedMedia/GetDASHStreamingSessionURL.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/GetDASHStreamingSessionURL.hs
@@ -0,0 +1,731 @@
+{-# 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.KinesisVideoArchivedMedia.GetDASHStreamingSessionURL
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves an MPEG Dynamic Adaptive Streaming over HTTP (DASH) URL for
+-- the stream. You can then open the URL in a media player to view the
+-- stream contents.
+--
+-- Both the @StreamName@ and the @StreamARN@ parameters are optional, but
+-- you must specify either the @StreamName@ or the @StreamARN@ when
+-- invoking this API operation.
+--
+-- An Amazon Kinesis video stream has the following requirements for
+-- providing data through MPEG-DASH:
+--
+-- -   The media must contain h.264 or h.265 encoded video and, optionally,
+--     AAC or G.711 encoded audio. Specifically, the codec ID of track 1
+--     should be @V_MPEG\/ISO\/AVC@ (for h.264) or V_MPEGH\/ISO\/HEVC (for
+--     H.265). Optionally, the codec ID of track 2 should be @A_AAC@ (for
+--     AAC) or A_MS\/ACM (for G.711).
+--
+-- -   Data retention must be greater than 0.
+--
+-- -   The video track of each fragment must contain codec private data in
+--     the Advanced Video Coding (AVC) for H.264 format and HEVC for H.265
+--     format. For more information, see
+--     <https://www.iso.org/standard/55980.html MPEG-4 specification ISO\/IEC 14496-15>.
+--     For information about adapting stream data to a given format, see
+--     <http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-reference-nal.html NAL Adaptation Flags>.
+--
+-- -   The audio track (if present) of each fragment must contain codec
+--     private data in the AAC format
+--     (<https://www.iso.org/standard/43345.html AAC specification ISO\/IEC 13818-7>)
+--     or the
+--     <http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html MS Wave format>.
+--
+-- The following procedure shows how to use MPEG-DASH with Kinesis Video
+-- Streams:
+--
+-- 1.  Get an endpoint using
+--     <http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_GetDataEndpoint.html GetDataEndpoint>,
+--     specifying @GET_DASH_STREAMING_SESSION_URL@ for the @APIName@
+--     parameter.
+--
+-- 2.  Retrieve the MPEG-DASH URL using @GetDASHStreamingSessionURL@.
+--     Kinesis Video Streams creates an MPEG-DASH streaming session to be
+--     used for accessing content in a stream using the MPEG-DASH protocol.
+--     @GetDASHStreamingSessionURL@ returns an authenticated URL (that
+--     includes an encrypted session token) for the session\'s MPEG-DASH
+--     /manifest/ (the root resource needed for streaming with MPEG-DASH).
+--
+--     Don\'t share or store this token where an unauthorized entity can
+--     access it. The token provides access to the content of the stream.
+--     Safeguard the token with the same measures that you use with your
+--     AWS credentials.
+--
+--     The media that is made available through the manifest consists only
+--     of the requested stream, time range, and format. No other media data
+--     (such as frames outside the requested window or alternate bitrates)
+--     is made available.
+--
+-- 3.  Provide the URL (containing the encrypted session token) for the
+--     MPEG-DASH manifest to a media player that supports the MPEG-DASH
+--     protocol. Kinesis Video Streams makes the initialization fragment
+--     and media fragments available through the manifest URL. The
+--     initialization fragment contains the codec private data for the
+--     stream, and other data needed to set up the video or audio decoder
+--     and renderer. The media fragments contain encoded video frames or
+--     encoded audio samples.
+--
+-- 4.  The media player receives the authenticated URL and requests stream
+--     metadata and media data normally. When the media player requests
+--     data, it calls the following actions:
+--
+--     -   __GetDASHManifest:__ Retrieves an MPEG DASH manifest, which
+--         contains the metadata for the media that you want to playback.
+--
+--     -   __GetMP4InitFragment:__ Retrieves the MP4 initialization
+--         fragment. The media player typically loads the initialization
+--         fragment before loading any media fragments. This fragment
+--         contains the \"@fytp@\" and \"@moov@\" MP4 atoms, and the child
+--         atoms that are needed to initialize the media player decoder.
+--
+--         The initialization fragment does not correspond to a fragment in
+--         a Kinesis video stream. It contains only the codec private data
+--         for the stream and respective track, which the media player
+--         needs to decode the media frames.
+--
+--     -   __GetMP4MediaFragment:__ Retrieves MP4 media fragments. These
+--         fragments contain the \"@moof@\" and \"@mdat@\" MP4 atoms and
+--         their child atoms, containing the encoded fragment\'s media
+--         frames and their timestamps.
+--
+--         After the first media fragment is made available in a streaming
+--         session, any fragments that don\'t contain the same codec
+--         private data cause an error to be returned when those different
+--         media fragments are loaded. Therefore, the codec private data
+--         should not change between fragments in a session. This also
+--         means that the session fails if the fragments in a stream change
+--         from having only video to having both audio and video.
+--
+--         Data retrieved with this action is billable. See
+--         <https://aws.amazon.com/kinesis/video-streams/pricing/ Pricing>
+--         for details.
+--
+-- For restrictions that apply to MPEG-DASH sessions, see
+-- <http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/limits.html Kinesis Video Streams Limits>.
+--
+-- You can monitor the amount of data that the media player consumes by
+-- monitoring the @GetMP4MediaFragment.OutgoingBytes@ Amazon CloudWatch
+-- metric. For information about using CloudWatch to monitor Kinesis Video
+-- Streams, see
+-- <http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/monitoring.html Monitoring Kinesis Video Streams>.
+-- For pricing information, see
+-- <https://aws.amazon.com/kinesis/video-streams/pricing/ Amazon Kinesis Video Streams Pricing>
+-- and <https://aws.amazon.com/pricing/ AWS Pricing>. Charges for both HLS
+-- sessions and outgoing AWS data apply.
+--
+-- For more information about HLS, see
+-- <https://developer.apple.com/streaming/ HTTP Live Streaming> on the
+-- <https://developer.apple.com Apple Developer site>.
+--
+-- If an error is thrown after invoking a Kinesis Video Streams archived
+-- media API, in addition to the HTTP status code and the response body, it
+-- includes the following pieces of information:
+--
+-- -   @x-amz-ErrorType@ HTTP header – contains a more specific error type
+--     in addition to what the HTTP status code provides.
+--
+-- -   @x-amz-RequestId@ HTTP header – if you want to report an issue to
+--     AWS, the support team can better diagnose the problem if given the
+--     Request Id.
+--
+-- Both the HTTP status code and the ErrorType header can be utilized to
+-- make programmatic decisions about whether errors are retry-able and
+-- under what conditions, as well as provide information on what actions
+-- the client programmer might need to take in order to successfully try
+-- again.
+--
+-- For more information, see the __Errors__ section at the bottom of this
+-- topic, as well as
+-- <https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/CommonErrors.html Common Errors>.
+module Amazonka.KinesisVideoArchivedMedia.GetDASHStreamingSessionURL
+  ( -- * Creating a Request
+    GetDASHStreamingSessionURL (..),
+    newGetDASHStreamingSessionURL,
+
+    -- * Request Lenses
+    getDASHStreamingSessionURL_dASHFragmentSelector,
+    getDASHStreamingSessionURL_displayFragmentNumber,
+    getDASHStreamingSessionURL_displayFragmentTimestamp,
+    getDASHStreamingSessionURL_expires,
+    getDASHStreamingSessionURL_maxManifestFragmentResults,
+    getDASHStreamingSessionURL_playbackMode,
+    getDASHStreamingSessionURL_streamARN,
+    getDASHStreamingSessionURL_streamName,
+
+    -- * Destructuring the Response
+    GetDASHStreamingSessionURLResponse (..),
+    newGetDASHStreamingSessionURLResponse,
+
+    -- * Response Lenses
+    getDASHStreamingSessionURLResponse_dASHStreamingSessionURL,
+    getDASHStreamingSessionURLResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KinesisVideoArchivedMedia.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDASHStreamingSessionURL' smart constructor.
+data GetDASHStreamingSessionURL = GetDASHStreamingSessionURL'
+  { -- | The time range of the requested fragment and the source of the
+    -- timestamps.
+    --
+    -- This parameter is required if @PlaybackMode@ is @ON_DEMAND@ or
+    -- @LIVE_REPLAY@. This parameter is optional if PlaybackMode is @LIVE@. If
+    -- @PlaybackMode@ is @LIVE@, the @FragmentSelectorType@ can be set, but the
+    -- @TimestampRange@ should not be set. If @PlaybackMode@ is @ON_DEMAND@ or
+    -- @LIVE_REPLAY@, both @FragmentSelectorType@ and @TimestampRange@ must be
+    -- set.
+    dASHFragmentSelector :: Prelude.Maybe DASHFragmentSelector,
+    -- | Fragments are identified in the manifest file based on their sequence
+    -- number in the session. If DisplayFragmentNumber is set to @ALWAYS@, the
+    -- Kinesis Video Streams fragment number is added to each S element in the
+    -- manifest file with the attribute name “kvs:fn”. These fragment numbers
+    -- can be used for logging or for use with other APIs (e.g. @GetMedia@ and
+    -- @GetMediaForFragmentList@). A custom MPEG-DASH media player is necessary
+    -- to leverage these this custom attribute.
+    --
+    -- The default value is @NEVER@.
+    displayFragmentNumber :: Prelude.Maybe DASHDisplayFragmentNumber,
+    -- | Per the MPEG-DASH specification, the wall-clock time of fragments in the
+    -- manifest file can be derived using attributes in the manifest itself.
+    -- However, typically, MPEG-DASH compatible media players do not properly
+    -- handle gaps in the media timeline. Kinesis Video Streams adjusts the
+    -- media timeline in the manifest file to enable playback of media with
+    -- discontinuities. Therefore, the wall-clock time derived from the
+    -- manifest file may be inaccurate. If DisplayFragmentTimestamp is set to
+    -- @ALWAYS@, the accurate fragment timestamp is added to each S element in
+    -- the manifest file with the attribute name “kvs:ts”. A custom MPEG-DASH
+    -- media player is necessary to leverage this custom attribute.
+    --
+    -- The default value is @NEVER@. When DASHFragmentSelector is
+    -- @SERVER_TIMESTAMP@, the timestamps will be the server start timestamps.
+    -- Similarly, when DASHFragmentSelector is @PRODUCER_TIMESTAMP@, the
+    -- timestamps will be the producer start timestamps.
+    displayFragmentTimestamp :: Prelude.Maybe DASHDisplayFragmentTimestamp,
+    -- | The time in seconds until the requested session expires. This value can
+    -- be between 300 (5 minutes) and 43200 (12 hours).
+    --
+    -- When a session expires, no new calls to @GetDashManifest@,
+    -- @GetMP4InitFragment@, or @GetMP4MediaFragment@ can be made for that
+    -- session.
+    --
+    -- The default is 300 (5 minutes).
+    expires :: Prelude.Maybe Prelude.Natural,
+    -- | The maximum number of fragments that are returned in the MPEG-DASH
+    -- manifest.
+    --
+    -- When the @PlaybackMode@ is @LIVE@, the most recent fragments are
+    -- returned up to this value. When the @PlaybackMode@ is @ON_DEMAND@, the
+    -- oldest fragments are returned, up to this maximum number.
+    --
+    -- When there are a higher number of fragments available in a live
+    -- MPEG-DASH manifest, video players often buffer content before starting
+    -- playback. Increasing the buffer size increases the playback latency, but
+    -- it decreases the likelihood that rebuffering will occur during playback.
+    -- We recommend that a live MPEG-DASH manifest have a minimum of 3
+    -- fragments and a maximum of 10 fragments.
+    --
+    -- The default is 5 fragments if @PlaybackMode@ is @LIVE@ or @LIVE_REPLAY@,
+    -- and 1,000 if @PlaybackMode@ is @ON_DEMAND@.
+    --
+    -- The maximum value of 1,000 fragments corresponds to more than 16 minutes
+    -- of video on streams with 1-second fragments, and more than 2 1\/2 hours
+    -- of video on streams with 10-second fragments.
+    maxManifestFragmentResults :: Prelude.Maybe Prelude.Natural,
+    -- | Whether to retrieve live, live replay, or archived, on-demand data.
+    --
+    -- Features of the three types of sessions include the following:
+    --
+    -- -   __@LIVE@__ : For sessions of this type, the MPEG-DASH manifest is
+    --     continually updated with the latest fragments as they become
+    --     available. We recommend that the media player retrieve a new
+    --     manifest on a one-second interval. When this type of session is
+    --     played in a media player, the user interface typically displays a
+    --     \"live\" notification, with no scrubber control for choosing the
+    --     position in the playback window to display.
+    --
+    --     In @LIVE@ mode, the newest available fragments are included in an
+    --     MPEG-DASH manifest, even if there is a gap between fragments (that
+    --     is, if a fragment is missing). A gap like this might cause a media
+    --     player to halt or cause a jump in playback. In this mode, fragments
+    --     are not added to the MPEG-DASH manifest if they are older than the
+    --     newest fragment in the playlist. If the missing fragment becomes
+    --     available after a subsequent fragment is added to the manifest, the
+    --     older fragment is not added, and the gap is not filled.
+    --
+    -- -   __@LIVE_REPLAY@__ : For sessions of this type, the MPEG-DASH
+    --     manifest is updated similarly to how it is updated for @LIVE@ mode
+    --     except that it starts by including fragments from a given start
+    --     time. Instead of fragments being added as they are ingested,
+    --     fragments are added as the duration of the next fragment elapses.
+    --     For example, if the fragments in the session are two seconds long,
+    --     then a new fragment is added to the manifest every two seconds. This
+    --     mode is useful to be able to start playback from when an event is
+    --     detected and continue live streaming media that has not yet been
+    --     ingested as of the time of the session creation. This mode is also
+    --     useful to stream previously archived media without being limited by
+    --     the 1,000 fragment limit in the @ON_DEMAND@ mode.
+    --
+    -- -   __@ON_DEMAND@__ : For sessions of this type, the MPEG-DASH manifest
+    --     contains all the fragments for the session, up to the number that is
+    --     specified in @MaxManifestFragmentResults@. The manifest must be
+    --     retrieved only once for each session. When this type of session is
+    --     played in a media player, the user interface typically displays a
+    --     scrubber control for choosing the position in the playback window to
+    --     display.
+    --
+    -- In all playback modes, if @FragmentSelectorType@ is
+    -- @PRODUCER_TIMESTAMP@, and if there are multiple fragments with the same
+    -- start timestamp, the fragment that has the larger fragment number (that
+    -- is, the newer fragment) is included in the MPEG-DASH manifest. The other
+    -- fragments are not included. Fragments that have different timestamps but
+    -- have overlapping durations are still included in the MPEG-DASH manifest.
+    -- This can lead to unexpected behavior in the media player.
+    --
+    -- The default is @LIVE@.
+    playbackMode :: Prelude.Maybe DASHPlaybackMode,
+    -- | The Amazon Resource Name (ARN) of the stream for which to retrieve the
+    -- MPEG-DASH manifest URL.
+    --
+    -- You must specify either the @StreamName@ or the @StreamARN@.
+    streamARN :: Prelude.Maybe Prelude.Text,
+    -- | The name of the stream for which to retrieve the MPEG-DASH manifest URL.
+    --
+    -- You must specify either the @StreamName@ or the @StreamARN@.
+    streamName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDASHStreamingSessionURL' 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:
+--
+-- 'dASHFragmentSelector', 'getDASHStreamingSessionURL_dASHFragmentSelector' - The time range of the requested fragment and the source of the
+-- timestamps.
+--
+-- This parameter is required if @PlaybackMode@ is @ON_DEMAND@ or
+-- @LIVE_REPLAY@. This parameter is optional if PlaybackMode is @LIVE@. If
+-- @PlaybackMode@ is @LIVE@, the @FragmentSelectorType@ can be set, but the
+-- @TimestampRange@ should not be set. If @PlaybackMode@ is @ON_DEMAND@ or
+-- @LIVE_REPLAY@, both @FragmentSelectorType@ and @TimestampRange@ must be
+-- set.
+--
+-- 'displayFragmentNumber', 'getDASHStreamingSessionURL_displayFragmentNumber' - Fragments are identified in the manifest file based on their sequence
+-- number in the session. If DisplayFragmentNumber is set to @ALWAYS@, the
+-- Kinesis Video Streams fragment number is added to each S element in the
+-- manifest file with the attribute name “kvs:fn”. These fragment numbers
+-- can be used for logging or for use with other APIs (e.g. @GetMedia@ and
+-- @GetMediaForFragmentList@). A custom MPEG-DASH media player is necessary
+-- to leverage these this custom attribute.
+--
+-- The default value is @NEVER@.
+--
+-- 'displayFragmentTimestamp', 'getDASHStreamingSessionURL_displayFragmentTimestamp' - Per the MPEG-DASH specification, the wall-clock time of fragments in the
+-- manifest file can be derived using attributes in the manifest itself.
+-- However, typically, MPEG-DASH compatible media players do not properly
+-- handle gaps in the media timeline. Kinesis Video Streams adjusts the
+-- media timeline in the manifest file to enable playback of media with
+-- discontinuities. Therefore, the wall-clock time derived from the
+-- manifest file may be inaccurate. If DisplayFragmentTimestamp is set to
+-- @ALWAYS@, the accurate fragment timestamp is added to each S element in
+-- the manifest file with the attribute name “kvs:ts”. A custom MPEG-DASH
+-- media player is necessary to leverage this custom attribute.
+--
+-- The default value is @NEVER@. When DASHFragmentSelector is
+-- @SERVER_TIMESTAMP@, the timestamps will be the server start timestamps.
+-- Similarly, when DASHFragmentSelector is @PRODUCER_TIMESTAMP@, the
+-- timestamps will be the producer start timestamps.
+--
+-- 'expires', 'getDASHStreamingSessionURL_expires' - The time in seconds until the requested session expires. This value can
+-- be between 300 (5 minutes) and 43200 (12 hours).
+--
+-- When a session expires, no new calls to @GetDashManifest@,
+-- @GetMP4InitFragment@, or @GetMP4MediaFragment@ can be made for that
+-- session.
+--
+-- The default is 300 (5 minutes).
+--
+-- 'maxManifestFragmentResults', 'getDASHStreamingSessionURL_maxManifestFragmentResults' - The maximum number of fragments that are returned in the MPEG-DASH
+-- manifest.
+--
+-- When the @PlaybackMode@ is @LIVE@, the most recent fragments are
+-- returned up to this value. When the @PlaybackMode@ is @ON_DEMAND@, the
+-- oldest fragments are returned, up to this maximum number.
+--
+-- When there are a higher number of fragments available in a live
+-- MPEG-DASH manifest, video players often buffer content before starting
+-- playback. Increasing the buffer size increases the playback latency, but
+-- it decreases the likelihood that rebuffering will occur during playback.
+-- We recommend that a live MPEG-DASH manifest have a minimum of 3
+-- fragments and a maximum of 10 fragments.
+--
+-- The default is 5 fragments if @PlaybackMode@ is @LIVE@ or @LIVE_REPLAY@,
+-- and 1,000 if @PlaybackMode@ is @ON_DEMAND@.
+--
+-- The maximum value of 1,000 fragments corresponds to more than 16 minutes
+-- of video on streams with 1-second fragments, and more than 2 1\/2 hours
+-- of video on streams with 10-second fragments.
+--
+-- 'playbackMode', 'getDASHStreamingSessionURL_playbackMode' - Whether to retrieve live, live replay, or archived, on-demand data.
+--
+-- Features of the three types of sessions include the following:
+--
+-- -   __@LIVE@__ : For sessions of this type, the MPEG-DASH manifest is
+--     continually updated with the latest fragments as they become
+--     available. We recommend that the media player retrieve a new
+--     manifest on a one-second interval. When this type of session is
+--     played in a media player, the user interface typically displays a
+--     \"live\" notification, with no scrubber control for choosing the
+--     position in the playback window to display.
+--
+--     In @LIVE@ mode, the newest available fragments are included in an
+--     MPEG-DASH manifest, even if there is a gap between fragments (that
+--     is, if a fragment is missing). A gap like this might cause a media
+--     player to halt or cause a jump in playback. In this mode, fragments
+--     are not added to the MPEG-DASH manifest if they are older than the
+--     newest fragment in the playlist. If the missing fragment becomes
+--     available after a subsequent fragment is added to the manifest, the
+--     older fragment is not added, and the gap is not filled.
+--
+-- -   __@LIVE_REPLAY@__ : For sessions of this type, the MPEG-DASH
+--     manifest is updated similarly to how it is updated for @LIVE@ mode
+--     except that it starts by including fragments from a given start
+--     time. Instead of fragments being added as they are ingested,
+--     fragments are added as the duration of the next fragment elapses.
+--     For example, if the fragments in the session are two seconds long,
+--     then a new fragment is added to the manifest every two seconds. This
+--     mode is useful to be able to start playback from when an event is
+--     detected and continue live streaming media that has not yet been
+--     ingested as of the time of the session creation. This mode is also
+--     useful to stream previously archived media without being limited by
+--     the 1,000 fragment limit in the @ON_DEMAND@ mode.
+--
+-- -   __@ON_DEMAND@__ : For sessions of this type, the MPEG-DASH manifest
+--     contains all the fragments for the session, up to the number that is
+--     specified in @MaxManifestFragmentResults@. The manifest must be
+--     retrieved only once for each session. When this type of session is
+--     played in a media player, the user interface typically displays a
+--     scrubber control for choosing the position in the playback window to
+--     display.
+--
+-- In all playback modes, if @FragmentSelectorType@ is
+-- @PRODUCER_TIMESTAMP@, and if there are multiple fragments with the same
+-- start timestamp, the fragment that has the larger fragment number (that
+-- is, the newer fragment) is included in the MPEG-DASH manifest. The other
+-- fragments are not included. Fragments that have different timestamps but
+-- have overlapping durations are still included in the MPEG-DASH manifest.
+-- This can lead to unexpected behavior in the media player.
+--
+-- The default is @LIVE@.
+--
+-- 'streamARN', 'getDASHStreamingSessionURL_streamARN' - The Amazon Resource Name (ARN) of the stream for which to retrieve the
+-- MPEG-DASH manifest URL.
+--
+-- You must specify either the @StreamName@ or the @StreamARN@.
+--
+-- 'streamName', 'getDASHStreamingSessionURL_streamName' - The name of the stream for which to retrieve the MPEG-DASH manifest URL.
+--
+-- You must specify either the @StreamName@ or the @StreamARN@.
+newGetDASHStreamingSessionURL ::
+  GetDASHStreamingSessionURL
+newGetDASHStreamingSessionURL =
+  GetDASHStreamingSessionURL'
+    { dASHFragmentSelector =
+        Prelude.Nothing,
+      displayFragmentNumber = Prelude.Nothing,
+      displayFragmentTimestamp = Prelude.Nothing,
+      expires = Prelude.Nothing,
+      maxManifestFragmentResults = Prelude.Nothing,
+      playbackMode = Prelude.Nothing,
+      streamARN = Prelude.Nothing,
+      streamName = Prelude.Nothing
+    }
+
+-- | The time range of the requested fragment and the source of the
+-- timestamps.
+--
+-- This parameter is required if @PlaybackMode@ is @ON_DEMAND@ or
+-- @LIVE_REPLAY@. This parameter is optional if PlaybackMode is @LIVE@. If
+-- @PlaybackMode@ is @LIVE@, the @FragmentSelectorType@ can be set, but the
+-- @TimestampRange@ should not be set. If @PlaybackMode@ is @ON_DEMAND@ or
+-- @LIVE_REPLAY@, both @FragmentSelectorType@ and @TimestampRange@ must be
+-- set.
+getDASHStreamingSessionURL_dASHFragmentSelector :: Lens.Lens' GetDASHStreamingSessionURL (Prelude.Maybe DASHFragmentSelector)
+getDASHStreamingSessionURL_dASHFragmentSelector = Lens.lens (\GetDASHStreamingSessionURL' {dASHFragmentSelector} -> dASHFragmentSelector) (\s@GetDASHStreamingSessionURL' {} a -> s {dASHFragmentSelector = a} :: GetDASHStreamingSessionURL)
+
+-- | Fragments are identified in the manifest file based on their sequence
+-- number in the session. If DisplayFragmentNumber is set to @ALWAYS@, the
+-- Kinesis Video Streams fragment number is added to each S element in the
+-- manifest file with the attribute name “kvs:fn”. These fragment numbers
+-- can be used for logging or for use with other APIs (e.g. @GetMedia@ and
+-- @GetMediaForFragmentList@). A custom MPEG-DASH media player is necessary
+-- to leverage these this custom attribute.
+--
+-- The default value is @NEVER@.
+getDASHStreamingSessionURL_displayFragmentNumber :: Lens.Lens' GetDASHStreamingSessionURL (Prelude.Maybe DASHDisplayFragmentNumber)
+getDASHStreamingSessionURL_displayFragmentNumber = Lens.lens (\GetDASHStreamingSessionURL' {displayFragmentNumber} -> displayFragmentNumber) (\s@GetDASHStreamingSessionURL' {} a -> s {displayFragmentNumber = a} :: GetDASHStreamingSessionURL)
+
+-- | Per the MPEG-DASH specification, the wall-clock time of fragments in the
+-- manifest file can be derived using attributes in the manifest itself.
+-- However, typically, MPEG-DASH compatible media players do not properly
+-- handle gaps in the media timeline. Kinesis Video Streams adjusts the
+-- media timeline in the manifest file to enable playback of media with
+-- discontinuities. Therefore, the wall-clock time derived from the
+-- manifest file may be inaccurate. If DisplayFragmentTimestamp is set to
+-- @ALWAYS@, the accurate fragment timestamp is added to each S element in
+-- the manifest file with the attribute name “kvs:ts”. A custom MPEG-DASH
+-- media player is necessary to leverage this custom attribute.
+--
+-- The default value is @NEVER@. When DASHFragmentSelector is
+-- @SERVER_TIMESTAMP@, the timestamps will be the server start timestamps.
+-- Similarly, when DASHFragmentSelector is @PRODUCER_TIMESTAMP@, the
+-- timestamps will be the producer start timestamps.
+getDASHStreamingSessionURL_displayFragmentTimestamp :: Lens.Lens' GetDASHStreamingSessionURL (Prelude.Maybe DASHDisplayFragmentTimestamp)
+getDASHStreamingSessionURL_displayFragmentTimestamp = Lens.lens (\GetDASHStreamingSessionURL' {displayFragmentTimestamp} -> displayFragmentTimestamp) (\s@GetDASHStreamingSessionURL' {} a -> s {displayFragmentTimestamp = a} :: GetDASHStreamingSessionURL)
+
+-- | The time in seconds until the requested session expires. This value can
+-- be between 300 (5 minutes) and 43200 (12 hours).
+--
+-- When a session expires, no new calls to @GetDashManifest@,
+-- @GetMP4InitFragment@, or @GetMP4MediaFragment@ can be made for that
+-- session.
+--
+-- The default is 300 (5 minutes).
+getDASHStreamingSessionURL_expires :: Lens.Lens' GetDASHStreamingSessionURL (Prelude.Maybe Prelude.Natural)
+getDASHStreamingSessionURL_expires = Lens.lens (\GetDASHStreamingSessionURL' {expires} -> expires) (\s@GetDASHStreamingSessionURL' {} a -> s {expires = a} :: GetDASHStreamingSessionURL)
+
+-- | The maximum number of fragments that are returned in the MPEG-DASH
+-- manifest.
+--
+-- When the @PlaybackMode@ is @LIVE@, the most recent fragments are
+-- returned up to this value. When the @PlaybackMode@ is @ON_DEMAND@, the
+-- oldest fragments are returned, up to this maximum number.
+--
+-- When there are a higher number of fragments available in a live
+-- MPEG-DASH manifest, video players often buffer content before starting
+-- playback. Increasing the buffer size increases the playback latency, but
+-- it decreases the likelihood that rebuffering will occur during playback.
+-- We recommend that a live MPEG-DASH manifest have a minimum of 3
+-- fragments and a maximum of 10 fragments.
+--
+-- The default is 5 fragments if @PlaybackMode@ is @LIVE@ or @LIVE_REPLAY@,
+-- and 1,000 if @PlaybackMode@ is @ON_DEMAND@.
+--
+-- The maximum value of 1,000 fragments corresponds to more than 16 minutes
+-- of video on streams with 1-second fragments, and more than 2 1\/2 hours
+-- of video on streams with 10-second fragments.
+getDASHStreamingSessionURL_maxManifestFragmentResults :: Lens.Lens' GetDASHStreamingSessionURL (Prelude.Maybe Prelude.Natural)
+getDASHStreamingSessionURL_maxManifestFragmentResults = Lens.lens (\GetDASHStreamingSessionURL' {maxManifestFragmentResults} -> maxManifestFragmentResults) (\s@GetDASHStreamingSessionURL' {} a -> s {maxManifestFragmentResults = a} :: GetDASHStreamingSessionURL)
+
+-- | Whether to retrieve live, live replay, or archived, on-demand data.
+--
+-- Features of the three types of sessions include the following:
+--
+-- -   __@LIVE@__ : For sessions of this type, the MPEG-DASH manifest is
+--     continually updated with the latest fragments as they become
+--     available. We recommend that the media player retrieve a new
+--     manifest on a one-second interval. When this type of session is
+--     played in a media player, the user interface typically displays a
+--     \"live\" notification, with no scrubber control for choosing the
+--     position in the playback window to display.
+--
+--     In @LIVE@ mode, the newest available fragments are included in an
+--     MPEG-DASH manifest, even if there is a gap between fragments (that
+--     is, if a fragment is missing). A gap like this might cause a media
+--     player to halt or cause a jump in playback. In this mode, fragments
+--     are not added to the MPEG-DASH manifest if they are older than the
+--     newest fragment in the playlist. If the missing fragment becomes
+--     available after a subsequent fragment is added to the manifest, the
+--     older fragment is not added, and the gap is not filled.
+--
+-- -   __@LIVE_REPLAY@__ : For sessions of this type, the MPEG-DASH
+--     manifest is updated similarly to how it is updated for @LIVE@ mode
+--     except that it starts by including fragments from a given start
+--     time. Instead of fragments being added as they are ingested,
+--     fragments are added as the duration of the next fragment elapses.
+--     For example, if the fragments in the session are two seconds long,
+--     then a new fragment is added to the manifest every two seconds. This
+--     mode is useful to be able to start playback from when an event is
+--     detected and continue live streaming media that has not yet been
+--     ingested as of the time of the session creation. This mode is also
+--     useful to stream previously archived media without being limited by
+--     the 1,000 fragment limit in the @ON_DEMAND@ mode.
+--
+-- -   __@ON_DEMAND@__ : For sessions of this type, the MPEG-DASH manifest
+--     contains all the fragments for the session, up to the number that is
+--     specified in @MaxManifestFragmentResults@. The manifest must be
+--     retrieved only once for each session. When this type of session is
+--     played in a media player, the user interface typically displays a
+--     scrubber control for choosing the position in the playback window to
+--     display.
+--
+-- In all playback modes, if @FragmentSelectorType@ is
+-- @PRODUCER_TIMESTAMP@, and if there are multiple fragments with the same
+-- start timestamp, the fragment that has the larger fragment number (that
+-- is, the newer fragment) is included in the MPEG-DASH manifest. The other
+-- fragments are not included. Fragments that have different timestamps but
+-- have overlapping durations are still included in the MPEG-DASH manifest.
+-- This can lead to unexpected behavior in the media player.
+--
+-- The default is @LIVE@.
+getDASHStreamingSessionURL_playbackMode :: Lens.Lens' GetDASHStreamingSessionURL (Prelude.Maybe DASHPlaybackMode)
+getDASHStreamingSessionURL_playbackMode = Lens.lens (\GetDASHStreamingSessionURL' {playbackMode} -> playbackMode) (\s@GetDASHStreamingSessionURL' {} a -> s {playbackMode = a} :: GetDASHStreamingSessionURL)
+
+-- | The Amazon Resource Name (ARN) of the stream for which to retrieve the
+-- MPEG-DASH manifest URL.
+--
+-- You must specify either the @StreamName@ or the @StreamARN@.
+getDASHStreamingSessionURL_streamARN :: Lens.Lens' GetDASHStreamingSessionURL (Prelude.Maybe Prelude.Text)
+getDASHStreamingSessionURL_streamARN = Lens.lens (\GetDASHStreamingSessionURL' {streamARN} -> streamARN) (\s@GetDASHStreamingSessionURL' {} a -> s {streamARN = a} :: GetDASHStreamingSessionURL)
+
+-- | The name of the stream for which to retrieve the MPEG-DASH manifest URL.
+--
+-- You must specify either the @StreamName@ or the @StreamARN@.
+getDASHStreamingSessionURL_streamName :: Lens.Lens' GetDASHStreamingSessionURL (Prelude.Maybe Prelude.Text)
+getDASHStreamingSessionURL_streamName = Lens.lens (\GetDASHStreamingSessionURL' {streamName} -> streamName) (\s@GetDASHStreamingSessionURL' {} a -> s {streamName = a} :: GetDASHStreamingSessionURL)
+
+instance Core.AWSRequest GetDASHStreamingSessionURL where
+  type
+    AWSResponse GetDASHStreamingSessionURL =
+      GetDASHStreamingSessionURLResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDASHStreamingSessionURLResponse'
+            Prelude.<$> (x Data..?> "DASHStreamingSessionURL")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDASHStreamingSessionURL where
+  hashWithSalt _salt GetDASHStreamingSessionURL' {..} =
+    _salt
+      `Prelude.hashWithSalt` dASHFragmentSelector
+      `Prelude.hashWithSalt` displayFragmentNumber
+      `Prelude.hashWithSalt` displayFragmentTimestamp
+      `Prelude.hashWithSalt` expires
+      `Prelude.hashWithSalt` maxManifestFragmentResults
+      `Prelude.hashWithSalt` playbackMode
+      `Prelude.hashWithSalt` streamARN
+      `Prelude.hashWithSalt` streamName
+
+instance Prelude.NFData GetDASHStreamingSessionURL where
+  rnf GetDASHStreamingSessionURL' {..} =
+    Prelude.rnf dASHFragmentSelector
+      `Prelude.seq` Prelude.rnf displayFragmentNumber
+      `Prelude.seq` Prelude.rnf displayFragmentTimestamp
+      `Prelude.seq` Prelude.rnf expires
+      `Prelude.seq` Prelude.rnf maxManifestFragmentResults
+      `Prelude.seq` Prelude.rnf playbackMode
+      `Prelude.seq` Prelude.rnf streamARN
+      `Prelude.seq` Prelude.rnf streamName
+
+instance Data.ToHeaders GetDASHStreamingSessionURL where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON GetDASHStreamingSessionURL where
+  toJSON GetDASHStreamingSessionURL' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DASHFragmentSelector" Data..=)
+              Prelude.<$> dASHFragmentSelector,
+            ("DisplayFragmentNumber" Data..=)
+              Prelude.<$> displayFragmentNumber,
+            ("DisplayFragmentTimestamp" Data..=)
+              Prelude.<$> displayFragmentTimestamp,
+            ("Expires" Data..=) Prelude.<$> expires,
+            ("MaxManifestFragmentResults" Data..=)
+              Prelude.<$> maxManifestFragmentResults,
+            ("PlaybackMode" Data..=) Prelude.<$> playbackMode,
+            ("StreamARN" Data..=) Prelude.<$> streamARN,
+            ("StreamName" Data..=) Prelude.<$> streamName
+          ]
+      )
+
+instance Data.ToPath GetDASHStreamingSessionURL where
+  toPath = Prelude.const "/getDASHStreamingSessionURL"
+
+instance Data.ToQuery GetDASHStreamingSessionURL where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDASHStreamingSessionURLResponse' smart constructor.
+data GetDASHStreamingSessionURLResponse = GetDASHStreamingSessionURLResponse'
+  { -- | The URL (containing the session token) that a media player can use to
+    -- retrieve the MPEG-DASH manifest.
+    dASHStreamingSessionURL :: 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 'GetDASHStreamingSessionURLResponse' 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:
+--
+-- 'dASHStreamingSessionURL', 'getDASHStreamingSessionURLResponse_dASHStreamingSessionURL' - The URL (containing the session token) that a media player can use to
+-- retrieve the MPEG-DASH manifest.
+--
+-- 'httpStatus', 'getDASHStreamingSessionURLResponse_httpStatus' - The response's http status code.
+newGetDASHStreamingSessionURLResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDASHStreamingSessionURLResponse
+newGetDASHStreamingSessionURLResponse pHttpStatus_ =
+  GetDASHStreamingSessionURLResponse'
+    { dASHStreamingSessionURL =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The URL (containing the session token) that a media player can use to
+-- retrieve the MPEG-DASH manifest.
+getDASHStreamingSessionURLResponse_dASHStreamingSessionURL :: Lens.Lens' GetDASHStreamingSessionURLResponse (Prelude.Maybe Prelude.Text)
+getDASHStreamingSessionURLResponse_dASHStreamingSessionURL = Lens.lens (\GetDASHStreamingSessionURLResponse' {dASHStreamingSessionURL} -> dASHStreamingSessionURL) (\s@GetDASHStreamingSessionURLResponse' {} a -> s {dASHStreamingSessionURL = a} :: GetDASHStreamingSessionURLResponse)
+
+-- | The response's http status code.
+getDASHStreamingSessionURLResponse_httpStatus :: Lens.Lens' GetDASHStreamingSessionURLResponse Prelude.Int
+getDASHStreamingSessionURLResponse_httpStatus = Lens.lens (\GetDASHStreamingSessionURLResponse' {httpStatus} -> httpStatus) (\s@GetDASHStreamingSessionURLResponse' {} a -> s {httpStatus = a} :: GetDASHStreamingSessionURLResponse)
+
+instance
+  Prelude.NFData
+    GetDASHStreamingSessionURLResponse
+  where
+  rnf GetDASHStreamingSessionURLResponse' {..} =
+    Prelude.rnf dASHStreamingSessionURL
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/GetHLSStreamingSessionURL.hs b/gen/Amazonka/KinesisVideoArchivedMedia/GetHLSStreamingSessionURL.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/GetHLSStreamingSessionURL.hs
@@ -0,0 +1,874 @@
+{-# 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.KinesisVideoArchivedMedia.GetHLSStreamingSessionURL
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves an HTTP Live Streaming (HLS) URL for the stream. You can then
+-- open the URL in a browser or media player to view the stream contents.
+--
+-- Both the @StreamName@ and the @StreamARN@ parameters are optional, but
+-- you must specify either the @StreamName@ or the @StreamARN@ when
+-- invoking this API operation.
+--
+-- An Amazon Kinesis video stream has the following requirements for
+-- providing data through HLS:
+--
+-- -   The media must contain h.264 or h.265 encoded video and, optionally,
+--     AAC encoded audio. Specifically, the codec ID of track 1 should be
+--     @V_MPEG\/ISO\/AVC@ (for h.264) or @V_MPEG\/ISO\/HEVC@ (for h.265).
+--     Optionally, the codec ID of track 2 should be @A_AAC@.
+--
+-- -   Data retention must be greater than 0.
+--
+-- -   The video track of each fragment must contain codec private data in
+--     the Advanced Video Coding (AVC) for H.264 format or HEVC for H.265
+--     format
+--     (<https://www.iso.org/standard/55980.html MPEG-4 specification ISO\/IEC 14496-15>).
+--     For information about adapting stream data to a given format, see
+--     <http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-reference-nal.html NAL Adaptation Flags>.
+--
+-- -   The audio track (if present) of each fragment must contain codec
+--     private data in the AAC format
+--     (<https://www.iso.org/standard/43345.html AAC specification ISO\/IEC 13818-7>).
+--
+-- Kinesis Video Streams HLS sessions contain fragments in the fragmented
+-- MPEG-4 form (also called fMP4 or CMAF) or the MPEG-2 form (also called
+-- TS chunks, which the HLS specification also supports). For more
+-- information about HLS fragment types, see the
+-- <https://tools.ietf.org/html/draft-pantos-http-live-streaming-23 HLS specification>.
+--
+-- The following procedure shows how to use HLS with Kinesis Video Streams:
+--
+-- 1.  Get an endpoint using
+--     <http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_GetDataEndpoint.html GetDataEndpoint>,
+--     specifying @GET_HLS_STREAMING_SESSION_URL@ for the @APIName@
+--     parameter.
+--
+-- 2.  Retrieve the HLS URL using @GetHLSStreamingSessionURL@. Kinesis
+--     Video Streams creates an HLS streaming session to be used for
+--     accessing content in a stream using the HLS protocol.
+--     @GetHLSStreamingSessionURL@ returns an authenticated URL (that
+--     includes an encrypted session token) for the session\'s HLS /master
+--     playlist/ (the root resource needed for streaming with HLS).
+--
+--     Don\'t share or store this token where an unauthorized entity could
+--     access it. The token provides access to the content of the stream.
+--     Safeguard the token with the same measures that you would use with
+--     your AWS credentials.
+--
+--     The media that is made available through the playlist consists only
+--     of the requested stream, time range, and format. No other media data
+--     (such as frames outside the requested window or alternate bitrates)
+--     is made available.
+--
+-- 3.  Provide the URL (containing the encrypted session token) for the HLS
+--     master playlist to a media player that supports the HLS protocol.
+--     Kinesis Video Streams makes the HLS media playlist, initialization
+--     fragment, and media fragments available through the master playlist
+--     URL. The initialization fragment contains the codec private data for
+--     the stream, and other data needed to set up the video or audio
+--     decoder and renderer. The media fragments contain H.264-encoded
+--     video frames or AAC-encoded audio samples.
+--
+-- 4.  The media player receives the authenticated URL and requests stream
+--     metadata and media data normally. When the media player requests
+--     data, it calls the following actions:
+--
+--     -   __GetHLSMasterPlaylist:__ Retrieves an HLS master playlist,
+--         which contains a URL for the @GetHLSMediaPlaylist@ action for
+--         each track, and additional metadata for the media player,
+--         including estimated bitrate and resolution.
+--
+--     -   __GetHLSMediaPlaylist:__ Retrieves an HLS media playlist, which
+--         contains a URL to access the MP4 initialization fragment with
+--         the @GetMP4InitFragment@ action, and URLs to access the MP4
+--         media fragments with the @GetMP4MediaFragment@ actions. The HLS
+--         media playlist also contains metadata about the stream that the
+--         player needs to play it, such as whether the @PlaybackMode@ is
+--         @LIVE@ or @ON_DEMAND@. The HLS media playlist is typically
+--         static for sessions with a @PlaybackType@ of @ON_DEMAND@. The
+--         HLS media playlist is continually updated with new fragments for
+--         sessions with a @PlaybackType@ of @LIVE@. There is a distinct
+--         HLS media playlist for the video track and the audio track (if
+--         applicable) that contains MP4 media URLs for the specific track.
+--
+--     -   __GetMP4InitFragment:__ Retrieves the MP4 initialization
+--         fragment. The media player typically loads the initialization
+--         fragment before loading any media fragments. This fragment
+--         contains the \"@fytp@\" and \"@moov@\" MP4 atoms, and the child
+--         atoms that are needed to initialize the media player decoder.
+--
+--         The initialization fragment does not correspond to a fragment in
+--         a Kinesis video stream. It contains only the codec private data
+--         for the stream and respective track, which the media player
+--         needs to decode the media frames.
+--
+--     -   __GetMP4MediaFragment:__ Retrieves MP4 media fragments. These
+--         fragments contain the \"@moof@\" and \"@mdat@\" MP4 atoms and
+--         their child atoms, containing the encoded fragment\'s media
+--         frames and their timestamps.
+--
+--         After the first media fragment is made available in a streaming
+--         session, any fragments that don\'t contain the same codec
+--         private data cause an error to be returned when those different
+--         media fragments are loaded. Therefore, the codec private data
+--         should not change between fragments in a session. This also
+--         means that the session fails if the fragments in a stream change
+--         from having only video to having both audio and video.
+--
+--         Data retrieved with this action is billable. See
+--         <https://aws.amazon.com/kinesis/video-streams/pricing/ Pricing>
+--         for details.
+--
+--     -   __GetTSFragment:__ Retrieves MPEG TS fragments containing both
+--         initialization and media data for all tracks in the stream.
+--
+--         If the @ContainerFormat@ is @MPEG_TS@, this API is used instead
+--         of @GetMP4InitFragment@ and @GetMP4MediaFragment@ to retrieve
+--         stream media.
+--
+--         Data retrieved with this action is billable. For more
+--         information, see
+--         <https://aws.amazon.com/kinesis/video-streams/pricing/ Kinesis Video Streams pricing>.
+--
+-- A streaming session URL must not be shared between players. The service
+-- might throttle a session if multiple media players are sharing it. For
+-- connection limits, see
+-- <http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/limits.html Kinesis Video Streams Limits>.
+--
+-- You can monitor the amount of data that the media player consumes by
+-- monitoring the @GetMP4MediaFragment.OutgoingBytes@ Amazon CloudWatch
+-- metric. For information about using CloudWatch to monitor Kinesis Video
+-- Streams, see
+-- <http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/monitoring.html Monitoring Kinesis Video Streams>.
+-- For pricing information, see
+-- <https://aws.amazon.com/kinesis/video-streams/pricing/ Amazon Kinesis Video Streams Pricing>
+-- and <https://aws.amazon.com/pricing/ AWS Pricing>. Charges for both HLS
+-- sessions and outgoing AWS data apply.
+--
+-- For more information about HLS, see
+-- <https://developer.apple.com/streaming/ HTTP Live Streaming> on the
+-- <https://developer.apple.com Apple Developer site>.
+--
+-- If an error is thrown after invoking a Kinesis Video Streams archived
+-- media API, in addition to the HTTP status code and the response body, it
+-- includes the following pieces of information:
+--
+-- -   @x-amz-ErrorType@ HTTP header – contains a more specific error type
+--     in addition to what the HTTP status code provides.
+--
+-- -   @x-amz-RequestId@ HTTP header – if you want to report an issue to
+--     AWS, the support team can better diagnose the problem if given the
+--     Request Id.
+--
+-- Both the HTTP status code and the ErrorType header can be utilized to
+-- make programmatic decisions about whether errors are retry-able and
+-- under what conditions, as well as provide information on what actions
+-- the client programmer might need to take in order to successfully try
+-- again.
+--
+-- For more information, see the __Errors__ section at the bottom of this
+-- topic, as well as
+-- <https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/CommonErrors.html Common Errors>.
+module Amazonka.KinesisVideoArchivedMedia.GetHLSStreamingSessionURL
+  ( -- * Creating a Request
+    GetHLSStreamingSessionURL (..),
+    newGetHLSStreamingSessionURL,
+
+    -- * Request Lenses
+    getHLSStreamingSessionURL_containerFormat,
+    getHLSStreamingSessionURL_discontinuityMode,
+    getHLSStreamingSessionURL_displayFragmentTimestamp,
+    getHLSStreamingSessionURL_expires,
+    getHLSStreamingSessionURL_hLSFragmentSelector,
+    getHLSStreamingSessionURL_maxMediaPlaylistFragmentResults,
+    getHLSStreamingSessionURL_playbackMode,
+    getHLSStreamingSessionURL_streamARN,
+    getHLSStreamingSessionURL_streamName,
+
+    -- * Destructuring the Response
+    GetHLSStreamingSessionURLResponse (..),
+    newGetHLSStreamingSessionURLResponse,
+
+    -- * Response Lenses
+    getHLSStreamingSessionURLResponse_hLSStreamingSessionURL,
+    getHLSStreamingSessionURLResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KinesisVideoArchivedMedia.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetHLSStreamingSessionURL' smart constructor.
+data GetHLSStreamingSessionURL = GetHLSStreamingSessionURL'
+  { -- | Specifies which format should be used for packaging the media.
+    -- Specifying the @FRAGMENTED_MP4@ container format packages the media into
+    -- MP4 fragments (fMP4 or CMAF). This is the recommended packaging because
+    -- there is minimal packaging overhead. The other container format option
+    -- is @MPEG_TS@. HLS has supported MPEG TS chunks since it was released and
+    -- is sometimes the only supported packaging on older HLS players. MPEG TS
+    -- typically has a 5-25 percent packaging overhead. This means MPEG TS
+    -- typically requires 5-25 percent more bandwidth and cost than fMP4.
+    --
+    -- The default is @FRAGMENTED_MP4@.
+    containerFormat :: Prelude.Maybe ContainerFormat,
+    -- | Specifies when flags marking discontinuities between fragments are added
+    -- to the media playlists.
+    --
+    -- Media players typically build a timeline of media content to play, based
+    -- on the timestamps of each fragment. This means that if there is any
+    -- overlap or gap between fragments (as is typical if HLSFragmentSelector
+    -- is set to @SERVER_TIMESTAMP@), the media player timeline will also have
+    -- small gaps between fragments in some places, and will overwrite frames
+    -- in other places. Gaps in the media player timeline can cause playback to
+    -- stall and overlaps can cause playback to be jittery. When there are
+    -- discontinuity flags between fragments, the media player is expected to
+    -- reset the timeline, resulting in the next fragment being played
+    -- immediately after the previous fragment.
+    --
+    -- The following modes are supported:
+    --
+    -- -   @ALWAYS@: a discontinuity marker is placed between every fragment in
+    --     the HLS media playlist. It is recommended to use a value of @ALWAYS@
+    --     if the fragment timestamps are not accurate.
+    --
+    -- -   @NEVER@: no discontinuity markers are placed anywhere. It is
+    --     recommended to use a value of @NEVER@ to ensure the media player
+    --     timeline most accurately maps to the producer timestamps.
+    --
+    -- -   @ON_DISCONTINUITY@: a discontinuity marker is placed between
+    --     fragments that have a gap or overlap of more than 50 milliseconds.
+    --     For most playback scenarios, it is recommended to use a value of
+    --     @ON_DISCONTINUITY@ so that the media player timeline is only reset
+    --     when there is a significant issue with the media timeline (e.g. a
+    --     missing fragment).
+    --
+    -- The default is @ALWAYS@ when HLSFragmentSelector is set to
+    -- @SERVER_TIMESTAMP@, and @NEVER@ when it is set to @PRODUCER_TIMESTAMP@.
+    discontinuityMode :: Prelude.Maybe HLSDiscontinuityMode,
+    -- | Specifies when the fragment start timestamps should be included in the
+    -- HLS media playlist. Typically, media players report the playhead
+    -- position as a time relative to the start of the first fragment in the
+    -- playback session. However, when the start timestamps are included in the
+    -- HLS media playlist, some media players might report the current playhead
+    -- as an absolute time based on the fragment timestamps. This can be useful
+    -- for creating a playback experience that shows viewers the wall-clock
+    -- time of the media.
+    --
+    -- The default is @NEVER@. When HLSFragmentSelector is @SERVER_TIMESTAMP@,
+    -- the timestamps will be the server start timestamps. Similarly, when
+    -- HLSFragmentSelector is @PRODUCER_TIMESTAMP@, the timestamps will be the
+    -- producer start timestamps.
+    displayFragmentTimestamp :: Prelude.Maybe HLSDisplayFragmentTimestamp,
+    -- | The time in seconds until the requested session expires. This value can
+    -- be between 300 (5 minutes) and 43200 (12 hours).
+    --
+    -- When a session expires, no new calls to @GetHLSMasterPlaylist@,
+    -- @GetHLSMediaPlaylist@, @GetMP4InitFragment@, @GetMP4MediaFragment@, or
+    -- @GetTSFragment@ can be made for that session.
+    --
+    -- The default is 300 (5 minutes).
+    expires :: Prelude.Maybe Prelude.Natural,
+    -- | The time range of the requested fragment and the source of the
+    -- timestamps.
+    --
+    -- This parameter is required if @PlaybackMode@ is @ON_DEMAND@ or
+    -- @LIVE_REPLAY@. This parameter is optional if PlaybackMode is @LIVE@. If
+    -- @PlaybackMode@ is @LIVE@, the @FragmentSelectorType@ can be set, but the
+    -- @TimestampRange@ should not be set. If @PlaybackMode@ is @ON_DEMAND@ or
+    -- @LIVE_REPLAY@, both @FragmentSelectorType@ and @TimestampRange@ must be
+    -- set.
+    hLSFragmentSelector :: Prelude.Maybe HLSFragmentSelector,
+    -- | The maximum number of fragments that are returned in the HLS media
+    -- playlists.
+    --
+    -- When the @PlaybackMode@ is @LIVE@, the most recent fragments are
+    -- returned up to this value. When the @PlaybackMode@ is @ON_DEMAND@, the
+    -- oldest fragments are returned, up to this maximum number.
+    --
+    -- When there are a higher number of fragments available in a live HLS
+    -- media playlist, video players often buffer content before starting
+    -- playback. Increasing the buffer size increases the playback latency, but
+    -- it decreases the likelihood that rebuffering will occur during playback.
+    -- We recommend that a live HLS media playlist have a minimum of 3
+    -- fragments and a maximum of 10 fragments.
+    --
+    -- The default is 5 fragments if @PlaybackMode@ is @LIVE@ or @LIVE_REPLAY@,
+    -- and 1,000 if @PlaybackMode@ is @ON_DEMAND@.
+    --
+    -- The maximum value of 5,000 fragments corresponds to more than 80 minutes
+    -- of video on streams with 1-second fragments, and more than 13 hours of
+    -- video on streams with 10-second fragments.
+    maxMediaPlaylistFragmentResults :: Prelude.Maybe Prelude.Natural,
+    -- | Whether to retrieve live, live replay, or archived, on-demand data.
+    --
+    -- Features of the three types of sessions include the following:
+    --
+    -- -   __@LIVE@__ : For sessions of this type, the HLS media playlist is
+    --     continually updated with the latest fragments as they become
+    --     available. We recommend that the media player retrieve a new
+    --     playlist on a one-second interval. When this type of session is
+    --     played in a media player, the user interface typically displays a
+    --     \"live\" notification, with no scrubber control for choosing the
+    --     position in the playback window to display.
+    --
+    --     In @LIVE@ mode, the newest available fragments are included in an
+    --     HLS media playlist, even if there is a gap between fragments (that
+    --     is, if a fragment is missing). A gap like this might cause a media
+    --     player to halt or cause a jump in playback. In this mode, fragments
+    --     are not added to the HLS media playlist if they are older than the
+    --     newest fragment in the playlist. If the missing fragment becomes
+    --     available after a subsequent fragment is added to the playlist, the
+    --     older fragment is not added, and the gap is not filled.
+    --
+    -- -   __@LIVE_REPLAY@__ : For sessions of this type, the HLS media
+    --     playlist is updated similarly to how it is updated for @LIVE@ mode
+    --     except that it starts by including fragments from a given start
+    --     time. Instead of fragments being added as they are ingested,
+    --     fragments are added as the duration of the next fragment elapses.
+    --     For example, if the fragments in the session are two seconds long,
+    --     then a new fragment is added to the media playlist every two
+    --     seconds. This mode is useful to be able to start playback from when
+    --     an event is detected and continue live streaming media that has not
+    --     yet been ingested as of the time of the session creation. This mode
+    --     is also useful to stream previously archived media without being
+    --     limited by the 1,000 fragment limit in the @ON_DEMAND@ mode.
+    --
+    -- -   __@ON_DEMAND@__ : For sessions of this type, the HLS media playlist
+    --     contains all the fragments for the session, up to the number that is
+    --     specified in @MaxMediaPlaylistFragmentResults@. The playlist must be
+    --     retrieved only once for each session. When this type of session is
+    --     played in a media player, the user interface typically displays a
+    --     scrubber control for choosing the position in the playback window to
+    --     display.
+    --
+    -- In all playback modes, if @FragmentSelectorType@ is
+    -- @PRODUCER_TIMESTAMP@, and if there are multiple fragments with the same
+    -- start timestamp, the fragment that has the largest fragment number (that
+    -- is, the newest fragment) is included in the HLS media playlist. The
+    -- other fragments are not included. Fragments that have different
+    -- timestamps but have overlapping durations are still included in the HLS
+    -- media playlist. This can lead to unexpected behavior in the media
+    -- player.
+    --
+    -- The default is @LIVE@.
+    playbackMode :: Prelude.Maybe HLSPlaybackMode,
+    -- | The Amazon Resource Name (ARN) of the stream for which to retrieve the
+    -- HLS master playlist URL.
+    --
+    -- You must specify either the @StreamName@ or the @StreamARN@.
+    streamARN :: Prelude.Maybe Prelude.Text,
+    -- | The name of the stream for which to retrieve the HLS master playlist
+    -- URL.
+    --
+    -- You must specify either the @StreamName@ or the @StreamARN@.
+    streamName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetHLSStreamingSessionURL' 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:
+--
+-- 'containerFormat', 'getHLSStreamingSessionURL_containerFormat' - Specifies which format should be used for packaging the media.
+-- Specifying the @FRAGMENTED_MP4@ container format packages the media into
+-- MP4 fragments (fMP4 or CMAF). This is the recommended packaging because
+-- there is minimal packaging overhead. The other container format option
+-- is @MPEG_TS@. HLS has supported MPEG TS chunks since it was released and
+-- is sometimes the only supported packaging on older HLS players. MPEG TS
+-- typically has a 5-25 percent packaging overhead. This means MPEG TS
+-- typically requires 5-25 percent more bandwidth and cost than fMP4.
+--
+-- The default is @FRAGMENTED_MP4@.
+--
+-- 'discontinuityMode', 'getHLSStreamingSessionURL_discontinuityMode' - Specifies when flags marking discontinuities between fragments are added
+-- to the media playlists.
+--
+-- Media players typically build a timeline of media content to play, based
+-- on the timestamps of each fragment. This means that if there is any
+-- overlap or gap between fragments (as is typical if HLSFragmentSelector
+-- is set to @SERVER_TIMESTAMP@), the media player timeline will also have
+-- small gaps between fragments in some places, and will overwrite frames
+-- in other places. Gaps in the media player timeline can cause playback to
+-- stall and overlaps can cause playback to be jittery. When there are
+-- discontinuity flags between fragments, the media player is expected to
+-- reset the timeline, resulting in the next fragment being played
+-- immediately after the previous fragment.
+--
+-- The following modes are supported:
+--
+-- -   @ALWAYS@: a discontinuity marker is placed between every fragment in
+--     the HLS media playlist. It is recommended to use a value of @ALWAYS@
+--     if the fragment timestamps are not accurate.
+--
+-- -   @NEVER@: no discontinuity markers are placed anywhere. It is
+--     recommended to use a value of @NEVER@ to ensure the media player
+--     timeline most accurately maps to the producer timestamps.
+--
+-- -   @ON_DISCONTINUITY@: a discontinuity marker is placed between
+--     fragments that have a gap or overlap of more than 50 milliseconds.
+--     For most playback scenarios, it is recommended to use a value of
+--     @ON_DISCONTINUITY@ so that the media player timeline is only reset
+--     when there is a significant issue with the media timeline (e.g. a
+--     missing fragment).
+--
+-- The default is @ALWAYS@ when HLSFragmentSelector is set to
+-- @SERVER_TIMESTAMP@, and @NEVER@ when it is set to @PRODUCER_TIMESTAMP@.
+--
+-- 'displayFragmentTimestamp', 'getHLSStreamingSessionURL_displayFragmentTimestamp' - Specifies when the fragment start timestamps should be included in the
+-- HLS media playlist. Typically, media players report the playhead
+-- position as a time relative to the start of the first fragment in the
+-- playback session. However, when the start timestamps are included in the
+-- HLS media playlist, some media players might report the current playhead
+-- as an absolute time based on the fragment timestamps. This can be useful
+-- for creating a playback experience that shows viewers the wall-clock
+-- time of the media.
+--
+-- The default is @NEVER@. When HLSFragmentSelector is @SERVER_TIMESTAMP@,
+-- the timestamps will be the server start timestamps. Similarly, when
+-- HLSFragmentSelector is @PRODUCER_TIMESTAMP@, the timestamps will be the
+-- producer start timestamps.
+--
+-- 'expires', 'getHLSStreamingSessionURL_expires' - The time in seconds until the requested session expires. This value can
+-- be between 300 (5 minutes) and 43200 (12 hours).
+--
+-- When a session expires, no new calls to @GetHLSMasterPlaylist@,
+-- @GetHLSMediaPlaylist@, @GetMP4InitFragment@, @GetMP4MediaFragment@, or
+-- @GetTSFragment@ can be made for that session.
+--
+-- The default is 300 (5 minutes).
+--
+-- 'hLSFragmentSelector', 'getHLSStreamingSessionURL_hLSFragmentSelector' - The time range of the requested fragment and the source of the
+-- timestamps.
+--
+-- This parameter is required if @PlaybackMode@ is @ON_DEMAND@ or
+-- @LIVE_REPLAY@. This parameter is optional if PlaybackMode is @LIVE@. If
+-- @PlaybackMode@ is @LIVE@, the @FragmentSelectorType@ can be set, but the
+-- @TimestampRange@ should not be set. If @PlaybackMode@ is @ON_DEMAND@ or
+-- @LIVE_REPLAY@, both @FragmentSelectorType@ and @TimestampRange@ must be
+-- set.
+--
+-- 'maxMediaPlaylistFragmentResults', 'getHLSStreamingSessionURL_maxMediaPlaylistFragmentResults' - The maximum number of fragments that are returned in the HLS media
+-- playlists.
+--
+-- When the @PlaybackMode@ is @LIVE@, the most recent fragments are
+-- returned up to this value. When the @PlaybackMode@ is @ON_DEMAND@, the
+-- oldest fragments are returned, up to this maximum number.
+--
+-- When there are a higher number of fragments available in a live HLS
+-- media playlist, video players often buffer content before starting
+-- playback. Increasing the buffer size increases the playback latency, but
+-- it decreases the likelihood that rebuffering will occur during playback.
+-- We recommend that a live HLS media playlist have a minimum of 3
+-- fragments and a maximum of 10 fragments.
+--
+-- The default is 5 fragments if @PlaybackMode@ is @LIVE@ or @LIVE_REPLAY@,
+-- and 1,000 if @PlaybackMode@ is @ON_DEMAND@.
+--
+-- The maximum value of 5,000 fragments corresponds to more than 80 minutes
+-- of video on streams with 1-second fragments, and more than 13 hours of
+-- video on streams with 10-second fragments.
+--
+-- 'playbackMode', 'getHLSStreamingSessionURL_playbackMode' - Whether to retrieve live, live replay, or archived, on-demand data.
+--
+-- Features of the three types of sessions include the following:
+--
+-- -   __@LIVE@__ : For sessions of this type, the HLS media playlist is
+--     continually updated with the latest fragments as they become
+--     available. We recommend that the media player retrieve a new
+--     playlist on a one-second interval. When this type of session is
+--     played in a media player, the user interface typically displays a
+--     \"live\" notification, with no scrubber control for choosing the
+--     position in the playback window to display.
+--
+--     In @LIVE@ mode, the newest available fragments are included in an
+--     HLS media playlist, even if there is a gap between fragments (that
+--     is, if a fragment is missing). A gap like this might cause a media
+--     player to halt or cause a jump in playback. In this mode, fragments
+--     are not added to the HLS media playlist if they are older than the
+--     newest fragment in the playlist. If the missing fragment becomes
+--     available after a subsequent fragment is added to the playlist, the
+--     older fragment is not added, and the gap is not filled.
+--
+-- -   __@LIVE_REPLAY@__ : For sessions of this type, the HLS media
+--     playlist is updated similarly to how it is updated for @LIVE@ mode
+--     except that it starts by including fragments from a given start
+--     time. Instead of fragments being added as they are ingested,
+--     fragments are added as the duration of the next fragment elapses.
+--     For example, if the fragments in the session are two seconds long,
+--     then a new fragment is added to the media playlist every two
+--     seconds. This mode is useful to be able to start playback from when
+--     an event is detected and continue live streaming media that has not
+--     yet been ingested as of the time of the session creation. This mode
+--     is also useful to stream previously archived media without being
+--     limited by the 1,000 fragment limit in the @ON_DEMAND@ mode.
+--
+-- -   __@ON_DEMAND@__ : For sessions of this type, the HLS media playlist
+--     contains all the fragments for the session, up to the number that is
+--     specified in @MaxMediaPlaylistFragmentResults@. The playlist must be
+--     retrieved only once for each session. When this type of session is
+--     played in a media player, the user interface typically displays a
+--     scrubber control for choosing the position in the playback window to
+--     display.
+--
+-- In all playback modes, if @FragmentSelectorType@ is
+-- @PRODUCER_TIMESTAMP@, and if there are multiple fragments with the same
+-- start timestamp, the fragment that has the largest fragment number (that
+-- is, the newest fragment) is included in the HLS media playlist. The
+-- other fragments are not included. Fragments that have different
+-- timestamps but have overlapping durations are still included in the HLS
+-- media playlist. This can lead to unexpected behavior in the media
+-- player.
+--
+-- The default is @LIVE@.
+--
+-- 'streamARN', 'getHLSStreamingSessionURL_streamARN' - The Amazon Resource Name (ARN) of the stream for which to retrieve the
+-- HLS master playlist URL.
+--
+-- You must specify either the @StreamName@ or the @StreamARN@.
+--
+-- 'streamName', 'getHLSStreamingSessionURL_streamName' - The name of the stream for which to retrieve the HLS master playlist
+-- URL.
+--
+-- You must specify either the @StreamName@ or the @StreamARN@.
+newGetHLSStreamingSessionURL ::
+  GetHLSStreamingSessionURL
+newGetHLSStreamingSessionURL =
+  GetHLSStreamingSessionURL'
+    { containerFormat =
+        Prelude.Nothing,
+      discontinuityMode = Prelude.Nothing,
+      displayFragmentTimestamp = Prelude.Nothing,
+      expires = Prelude.Nothing,
+      hLSFragmentSelector = Prelude.Nothing,
+      maxMediaPlaylistFragmentResults =
+        Prelude.Nothing,
+      playbackMode = Prelude.Nothing,
+      streamARN = Prelude.Nothing,
+      streamName = Prelude.Nothing
+    }
+
+-- | Specifies which format should be used for packaging the media.
+-- Specifying the @FRAGMENTED_MP4@ container format packages the media into
+-- MP4 fragments (fMP4 or CMAF). This is the recommended packaging because
+-- there is minimal packaging overhead. The other container format option
+-- is @MPEG_TS@. HLS has supported MPEG TS chunks since it was released and
+-- is sometimes the only supported packaging on older HLS players. MPEG TS
+-- typically has a 5-25 percent packaging overhead. This means MPEG TS
+-- typically requires 5-25 percent more bandwidth and cost than fMP4.
+--
+-- The default is @FRAGMENTED_MP4@.
+getHLSStreamingSessionURL_containerFormat :: Lens.Lens' GetHLSStreamingSessionURL (Prelude.Maybe ContainerFormat)
+getHLSStreamingSessionURL_containerFormat = Lens.lens (\GetHLSStreamingSessionURL' {containerFormat} -> containerFormat) (\s@GetHLSStreamingSessionURL' {} a -> s {containerFormat = a} :: GetHLSStreamingSessionURL)
+
+-- | Specifies when flags marking discontinuities between fragments are added
+-- to the media playlists.
+--
+-- Media players typically build a timeline of media content to play, based
+-- on the timestamps of each fragment. This means that if there is any
+-- overlap or gap between fragments (as is typical if HLSFragmentSelector
+-- is set to @SERVER_TIMESTAMP@), the media player timeline will also have
+-- small gaps between fragments in some places, and will overwrite frames
+-- in other places. Gaps in the media player timeline can cause playback to
+-- stall and overlaps can cause playback to be jittery. When there are
+-- discontinuity flags between fragments, the media player is expected to
+-- reset the timeline, resulting in the next fragment being played
+-- immediately after the previous fragment.
+--
+-- The following modes are supported:
+--
+-- -   @ALWAYS@: a discontinuity marker is placed between every fragment in
+--     the HLS media playlist. It is recommended to use a value of @ALWAYS@
+--     if the fragment timestamps are not accurate.
+--
+-- -   @NEVER@: no discontinuity markers are placed anywhere. It is
+--     recommended to use a value of @NEVER@ to ensure the media player
+--     timeline most accurately maps to the producer timestamps.
+--
+-- -   @ON_DISCONTINUITY@: a discontinuity marker is placed between
+--     fragments that have a gap or overlap of more than 50 milliseconds.
+--     For most playback scenarios, it is recommended to use a value of
+--     @ON_DISCONTINUITY@ so that the media player timeline is only reset
+--     when there is a significant issue with the media timeline (e.g. a
+--     missing fragment).
+--
+-- The default is @ALWAYS@ when HLSFragmentSelector is set to
+-- @SERVER_TIMESTAMP@, and @NEVER@ when it is set to @PRODUCER_TIMESTAMP@.
+getHLSStreamingSessionURL_discontinuityMode :: Lens.Lens' GetHLSStreamingSessionURL (Prelude.Maybe HLSDiscontinuityMode)
+getHLSStreamingSessionURL_discontinuityMode = Lens.lens (\GetHLSStreamingSessionURL' {discontinuityMode} -> discontinuityMode) (\s@GetHLSStreamingSessionURL' {} a -> s {discontinuityMode = a} :: GetHLSStreamingSessionURL)
+
+-- | Specifies when the fragment start timestamps should be included in the
+-- HLS media playlist. Typically, media players report the playhead
+-- position as a time relative to the start of the first fragment in the
+-- playback session. However, when the start timestamps are included in the
+-- HLS media playlist, some media players might report the current playhead
+-- as an absolute time based on the fragment timestamps. This can be useful
+-- for creating a playback experience that shows viewers the wall-clock
+-- time of the media.
+--
+-- The default is @NEVER@. When HLSFragmentSelector is @SERVER_TIMESTAMP@,
+-- the timestamps will be the server start timestamps. Similarly, when
+-- HLSFragmentSelector is @PRODUCER_TIMESTAMP@, the timestamps will be the
+-- producer start timestamps.
+getHLSStreamingSessionURL_displayFragmentTimestamp :: Lens.Lens' GetHLSStreamingSessionURL (Prelude.Maybe HLSDisplayFragmentTimestamp)
+getHLSStreamingSessionURL_displayFragmentTimestamp = Lens.lens (\GetHLSStreamingSessionURL' {displayFragmentTimestamp} -> displayFragmentTimestamp) (\s@GetHLSStreamingSessionURL' {} a -> s {displayFragmentTimestamp = a} :: GetHLSStreamingSessionURL)
+
+-- | The time in seconds until the requested session expires. This value can
+-- be between 300 (5 minutes) and 43200 (12 hours).
+--
+-- When a session expires, no new calls to @GetHLSMasterPlaylist@,
+-- @GetHLSMediaPlaylist@, @GetMP4InitFragment@, @GetMP4MediaFragment@, or
+-- @GetTSFragment@ can be made for that session.
+--
+-- The default is 300 (5 minutes).
+getHLSStreamingSessionURL_expires :: Lens.Lens' GetHLSStreamingSessionURL (Prelude.Maybe Prelude.Natural)
+getHLSStreamingSessionURL_expires = Lens.lens (\GetHLSStreamingSessionURL' {expires} -> expires) (\s@GetHLSStreamingSessionURL' {} a -> s {expires = a} :: GetHLSStreamingSessionURL)
+
+-- | The time range of the requested fragment and the source of the
+-- timestamps.
+--
+-- This parameter is required if @PlaybackMode@ is @ON_DEMAND@ or
+-- @LIVE_REPLAY@. This parameter is optional if PlaybackMode is @LIVE@. If
+-- @PlaybackMode@ is @LIVE@, the @FragmentSelectorType@ can be set, but the
+-- @TimestampRange@ should not be set. If @PlaybackMode@ is @ON_DEMAND@ or
+-- @LIVE_REPLAY@, both @FragmentSelectorType@ and @TimestampRange@ must be
+-- set.
+getHLSStreamingSessionURL_hLSFragmentSelector :: Lens.Lens' GetHLSStreamingSessionURL (Prelude.Maybe HLSFragmentSelector)
+getHLSStreamingSessionURL_hLSFragmentSelector = Lens.lens (\GetHLSStreamingSessionURL' {hLSFragmentSelector} -> hLSFragmentSelector) (\s@GetHLSStreamingSessionURL' {} a -> s {hLSFragmentSelector = a} :: GetHLSStreamingSessionURL)
+
+-- | The maximum number of fragments that are returned in the HLS media
+-- playlists.
+--
+-- When the @PlaybackMode@ is @LIVE@, the most recent fragments are
+-- returned up to this value. When the @PlaybackMode@ is @ON_DEMAND@, the
+-- oldest fragments are returned, up to this maximum number.
+--
+-- When there are a higher number of fragments available in a live HLS
+-- media playlist, video players often buffer content before starting
+-- playback. Increasing the buffer size increases the playback latency, but
+-- it decreases the likelihood that rebuffering will occur during playback.
+-- We recommend that a live HLS media playlist have a minimum of 3
+-- fragments and a maximum of 10 fragments.
+--
+-- The default is 5 fragments if @PlaybackMode@ is @LIVE@ or @LIVE_REPLAY@,
+-- and 1,000 if @PlaybackMode@ is @ON_DEMAND@.
+--
+-- The maximum value of 5,000 fragments corresponds to more than 80 minutes
+-- of video on streams with 1-second fragments, and more than 13 hours of
+-- video on streams with 10-second fragments.
+getHLSStreamingSessionURL_maxMediaPlaylistFragmentResults :: Lens.Lens' GetHLSStreamingSessionURL (Prelude.Maybe Prelude.Natural)
+getHLSStreamingSessionURL_maxMediaPlaylistFragmentResults = Lens.lens (\GetHLSStreamingSessionURL' {maxMediaPlaylistFragmentResults} -> maxMediaPlaylistFragmentResults) (\s@GetHLSStreamingSessionURL' {} a -> s {maxMediaPlaylistFragmentResults = a} :: GetHLSStreamingSessionURL)
+
+-- | Whether to retrieve live, live replay, or archived, on-demand data.
+--
+-- Features of the three types of sessions include the following:
+--
+-- -   __@LIVE@__ : For sessions of this type, the HLS media playlist is
+--     continually updated with the latest fragments as they become
+--     available. We recommend that the media player retrieve a new
+--     playlist on a one-second interval. When this type of session is
+--     played in a media player, the user interface typically displays a
+--     \"live\" notification, with no scrubber control for choosing the
+--     position in the playback window to display.
+--
+--     In @LIVE@ mode, the newest available fragments are included in an
+--     HLS media playlist, even if there is a gap between fragments (that
+--     is, if a fragment is missing). A gap like this might cause a media
+--     player to halt or cause a jump in playback. In this mode, fragments
+--     are not added to the HLS media playlist if they are older than the
+--     newest fragment in the playlist. If the missing fragment becomes
+--     available after a subsequent fragment is added to the playlist, the
+--     older fragment is not added, and the gap is not filled.
+--
+-- -   __@LIVE_REPLAY@__ : For sessions of this type, the HLS media
+--     playlist is updated similarly to how it is updated for @LIVE@ mode
+--     except that it starts by including fragments from a given start
+--     time. Instead of fragments being added as they are ingested,
+--     fragments are added as the duration of the next fragment elapses.
+--     For example, if the fragments in the session are two seconds long,
+--     then a new fragment is added to the media playlist every two
+--     seconds. This mode is useful to be able to start playback from when
+--     an event is detected and continue live streaming media that has not
+--     yet been ingested as of the time of the session creation. This mode
+--     is also useful to stream previously archived media without being
+--     limited by the 1,000 fragment limit in the @ON_DEMAND@ mode.
+--
+-- -   __@ON_DEMAND@__ : For sessions of this type, the HLS media playlist
+--     contains all the fragments for the session, up to the number that is
+--     specified in @MaxMediaPlaylistFragmentResults@. The playlist must be
+--     retrieved only once for each session. When this type of session is
+--     played in a media player, the user interface typically displays a
+--     scrubber control for choosing the position in the playback window to
+--     display.
+--
+-- In all playback modes, if @FragmentSelectorType@ is
+-- @PRODUCER_TIMESTAMP@, and if there are multiple fragments with the same
+-- start timestamp, the fragment that has the largest fragment number (that
+-- is, the newest fragment) is included in the HLS media playlist. The
+-- other fragments are not included. Fragments that have different
+-- timestamps but have overlapping durations are still included in the HLS
+-- media playlist. This can lead to unexpected behavior in the media
+-- player.
+--
+-- The default is @LIVE@.
+getHLSStreamingSessionURL_playbackMode :: Lens.Lens' GetHLSStreamingSessionURL (Prelude.Maybe HLSPlaybackMode)
+getHLSStreamingSessionURL_playbackMode = Lens.lens (\GetHLSStreamingSessionURL' {playbackMode} -> playbackMode) (\s@GetHLSStreamingSessionURL' {} a -> s {playbackMode = a} :: GetHLSStreamingSessionURL)
+
+-- | The Amazon Resource Name (ARN) of the stream for which to retrieve the
+-- HLS master playlist URL.
+--
+-- You must specify either the @StreamName@ or the @StreamARN@.
+getHLSStreamingSessionURL_streamARN :: Lens.Lens' GetHLSStreamingSessionURL (Prelude.Maybe Prelude.Text)
+getHLSStreamingSessionURL_streamARN = Lens.lens (\GetHLSStreamingSessionURL' {streamARN} -> streamARN) (\s@GetHLSStreamingSessionURL' {} a -> s {streamARN = a} :: GetHLSStreamingSessionURL)
+
+-- | The name of the stream for which to retrieve the HLS master playlist
+-- URL.
+--
+-- You must specify either the @StreamName@ or the @StreamARN@.
+getHLSStreamingSessionURL_streamName :: Lens.Lens' GetHLSStreamingSessionURL (Prelude.Maybe Prelude.Text)
+getHLSStreamingSessionURL_streamName = Lens.lens (\GetHLSStreamingSessionURL' {streamName} -> streamName) (\s@GetHLSStreamingSessionURL' {} a -> s {streamName = a} :: GetHLSStreamingSessionURL)
+
+instance Core.AWSRequest GetHLSStreamingSessionURL where
+  type
+    AWSResponse GetHLSStreamingSessionURL =
+      GetHLSStreamingSessionURLResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetHLSStreamingSessionURLResponse'
+            Prelude.<$> (x Data..?> "HLSStreamingSessionURL")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetHLSStreamingSessionURL where
+  hashWithSalt _salt GetHLSStreamingSessionURL' {..} =
+    _salt
+      `Prelude.hashWithSalt` containerFormat
+      `Prelude.hashWithSalt` discontinuityMode
+      `Prelude.hashWithSalt` displayFragmentTimestamp
+      `Prelude.hashWithSalt` expires
+      `Prelude.hashWithSalt` hLSFragmentSelector
+      `Prelude.hashWithSalt` maxMediaPlaylistFragmentResults
+      `Prelude.hashWithSalt` playbackMode
+      `Prelude.hashWithSalt` streamARN
+      `Prelude.hashWithSalt` streamName
+
+instance Prelude.NFData GetHLSStreamingSessionURL where
+  rnf GetHLSStreamingSessionURL' {..} =
+    Prelude.rnf containerFormat
+      `Prelude.seq` Prelude.rnf discontinuityMode
+      `Prelude.seq` Prelude.rnf displayFragmentTimestamp
+      `Prelude.seq` Prelude.rnf expires
+      `Prelude.seq` Prelude.rnf hLSFragmentSelector
+      `Prelude.seq` Prelude.rnf maxMediaPlaylistFragmentResults
+      `Prelude.seq` Prelude.rnf playbackMode
+      `Prelude.seq` Prelude.rnf streamARN
+      `Prelude.seq` Prelude.rnf streamName
+
+instance Data.ToHeaders GetHLSStreamingSessionURL where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON GetHLSStreamingSessionURL where
+  toJSON GetHLSStreamingSessionURL' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ContainerFormat" Data..=)
+              Prelude.<$> containerFormat,
+            ("DiscontinuityMode" Data..=)
+              Prelude.<$> discontinuityMode,
+            ("DisplayFragmentTimestamp" Data..=)
+              Prelude.<$> displayFragmentTimestamp,
+            ("Expires" Data..=) Prelude.<$> expires,
+            ("HLSFragmentSelector" Data..=)
+              Prelude.<$> hLSFragmentSelector,
+            ("MaxMediaPlaylistFragmentResults" Data..=)
+              Prelude.<$> maxMediaPlaylistFragmentResults,
+            ("PlaybackMode" Data..=) Prelude.<$> playbackMode,
+            ("StreamARN" Data..=) Prelude.<$> streamARN,
+            ("StreamName" Data..=) Prelude.<$> streamName
+          ]
+      )
+
+instance Data.ToPath GetHLSStreamingSessionURL where
+  toPath = Prelude.const "/getHLSStreamingSessionURL"
+
+instance Data.ToQuery GetHLSStreamingSessionURL where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetHLSStreamingSessionURLResponse' smart constructor.
+data GetHLSStreamingSessionURLResponse = GetHLSStreamingSessionURLResponse'
+  { -- | The URL (containing the session token) that a media player can use to
+    -- retrieve the HLS master playlist.
+    hLSStreamingSessionURL :: 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 'GetHLSStreamingSessionURLResponse' 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:
+--
+-- 'hLSStreamingSessionURL', 'getHLSStreamingSessionURLResponse_hLSStreamingSessionURL' - The URL (containing the session token) that a media player can use to
+-- retrieve the HLS master playlist.
+--
+-- 'httpStatus', 'getHLSStreamingSessionURLResponse_httpStatus' - The response's http status code.
+newGetHLSStreamingSessionURLResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetHLSStreamingSessionURLResponse
+newGetHLSStreamingSessionURLResponse pHttpStatus_ =
+  GetHLSStreamingSessionURLResponse'
+    { hLSStreamingSessionURL =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The URL (containing the session token) that a media player can use to
+-- retrieve the HLS master playlist.
+getHLSStreamingSessionURLResponse_hLSStreamingSessionURL :: Lens.Lens' GetHLSStreamingSessionURLResponse (Prelude.Maybe Prelude.Text)
+getHLSStreamingSessionURLResponse_hLSStreamingSessionURL = Lens.lens (\GetHLSStreamingSessionURLResponse' {hLSStreamingSessionURL} -> hLSStreamingSessionURL) (\s@GetHLSStreamingSessionURLResponse' {} a -> s {hLSStreamingSessionURL = a} :: GetHLSStreamingSessionURLResponse)
+
+-- | The response's http status code.
+getHLSStreamingSessionURLResponse_httpStatus :: Lens.Lens' GetHLSStreamingSessionURLResponse Prelude.Int
+getHLSStreamingSessionURLResponse_httpStatus = Lens.lens (\GetHLSStreamingSessionURLResponse' {httpStatus} -> httpStatus) (\s@GetHLSStreamingSessionURLResponse' {} a -> s {httpStatus = a} :: GetHLSStreamingSessionURLResponse)
+
+instance
+  Prelude.NFData
+    GetHLSStreamingSessionURLResponse
+  where
+  rnf GetHLSStreamingSessionURLResponse' {..} =
+    Prelude.rnf hLSStreamingSessionURL
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/GetImages.hs b/gen/Amazonka/KinesisVideoArchivedMedia/GetImages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/GetImages.hs
@@ -0,0 +1,468 @@
+{-# 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.KinesisVideoArchivedMedia.GetImages
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of Images corresponding to each timestamp for a given
+-- time range, sampling interval, and image format configuration.
+--
+-- This operation returns paginated results.
+module Amazonka.KinesisVideoArchivedMedia.GetImages
+  ( -- * Creating a Request
+    GetImages (..),
+    newGetImages,
+
+    -- * Request Lenses
+    getImages_formatConfig,
+    getImages_heightPixels,
+    getImages_maxResults,
+    getImages_nextToken,
+    getImages_streamARN,
+    getImages_streamName,
+    getImages_widthPixels,
+    getImages_imageSelectorType,
+    getImages_startTimestamp,
+    getImages_endTimestamp,
+    getImages_samplingInterval,
+    getImages_format,
+
+    -- * Destructuring the Response
+    GetImagesResponse (..),
+    newGetImagesResponse,
+
+    -- * Response Lenses
+    getImagesResponse_images,
+    getImagesResponse_nextToken,
+    getImagesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KinesisVideoArchivedMedia.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetImages' smart constructor.
+data GetImages = GetImages'
+  { -- | The list of a key-value pair structure that contains extra parameters
+    -- that can be applied when the image is generated. The @FormatConfig@ key
+    -- is the @JPEGQuality@, which indicates the JPEG quality key to be used to
+    -- generate the image. The @FormatConfig@ value accepts ints from 1 to 100.
+    -- If the value is 1, the image will be generated with less quality and the
+    -- best compression. If the value is 100, the image will be generated with
+    -- the best quality and less compression. If no value is provided, the
+    -- default value of the @JPEGQuality@ key will be set to 80.
+    formatConfig :: Prelude.Maybe (Prelude.HashMap FormatConfigKey Prelude.Text),
+    -- | The height of the output image that is used in conjunction with the
+    -- @WidthPixels@ parameter. When both @HeightPixels@ and @WidthPixels@
+    -- parameters are provided, the image will be stretched to fit the
+    -- specified aspect ratio. If only the @HeightPixels@ parameter is
+    -- provided, its original aspect ratio will be used to calculate the
+    -- @WidthPixels@ ratio. If neither parameter is provided, the original
+    -- image size will be returned.
+    heightPixels :: Prelude.Maybe Prelude.Natural,
+    -- | The maximum number of images to be returned by the API.
+    --
+    -- The default limit is 100 images per API response. The additional results
+    -- will be paginated.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token that specifies where to start paginating the next set of Images.
+    -- This is the @GetImages:NextToken@ from a previously truncated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the stream from which to retrieve the
+    -- images. You must specify either the @StreamName@ or the @StreamARN@.
+    streamARN :: Prelude.Maybe Prelude.Text,
+    -- | The name of the stream from which to retrieve the images. You must
+    -- specify either the @StreamName@ or the @StreamARN@.
+    streamName :: Prelude.Maybe Prelude.Text,
+    -- | The width of the output image that is used in conjunction with the
+    -- @HeightPixels@ parameter. When both @WidthPixels@ and @HeightPixels@
+    -- parameters are provided, the image will be stretched to fit the
+    -- specified aspect ratio. If only the @WidthPixels@ parameter is provided
+    -- or if only the @HeightPixels@ is provided, a @ValidationException@ will
+    -- be thrown. If neither parameter is provided, the original image size
+    -- from the stream will be returned.
+    widthPixels :: Prelude.Maybe Prelude.Natural,
+    -- | The origin of the Server or Producer timestamps to use to generate the
+    -- images.
+    imageSelectorType :: ImageSelectorType,
+    -- | The starting point from which the images should be generated. This
+    -- @StartTimestamp@ must be within an inclusive range of timestamps for an
+    -- image to be returned.
+    startTimestamp :: Data.POSIX,
+    -- | The end timestamp for the range of images to be generated.
+    endTimestamp :: Data.POSIX,
+    -- | The time interval in milliseconds (ms) at which the images need to be
+    -- generated from the stream. The minimum value that can be provided is
+    -- 3000 ms. If the timestamp range is less than the sampling interval, the
+    -- Image from the @startTimestamp@ will be returned if available.
+    --
+    -- The minimum value of 3000 ms is a soft limit. If needed, a lower
+    -- sampling frequency can be requested.
+    samplingInterval :: Prelude.Natural,
+    -- | The format that will be used to encode the image.
+    format :: Format
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetImages' 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:
+--
+-- 'formatConfig', 'getImages_formatConfig' - The list of a key-value pair structure that contains extra parameters
+-- that can be applied when the image is generated. The @FormatConfig@ key
+-- is the @JPEGQuality@, which indicates the JPEG quality key to be used to
+-- generate the image. The @FormatConfig@ value accepts ints from 1 to 100.
+-- If the value is 1, the image will be generated with less quality and the
+-- best compression. If the value is 100, the image will be generated with
+-- the best quality and less compression. If no value is provided, the
+-- default value of the @JPEGQuality@ key will be set to 80.
+--
+-- 'heightPixels', 'getImages_heightPixels' - The height of the output image that is used in conjunction with the
+-- @WidthPixels@ parameter. When both @HeightPixels@ and @WidthPixels@
+-- parameters are provided, the image will be stretched to fit the
+-- specified aspect ratio. If only the @HeightPixels@ parameter is
+-- provided, its original aspect ratio will be used to calculate the
+-- @WidthPixels@ ratio. If neither parameter is provided, the original
+-- image size will be returned.
+--
+-- 'maxResults', 'getImages_maxResults' - The maximum number of images to be returned by the API.
+--
+-- The default limit is 100 images per API response. The additional results
+-- will be paginated.
+--
+-- 'nextToken', 'getImages_nextToken' - A token that specifies where to start paginating the next set of Images.
+-- This is the @GetImages:NextToken@ from a previously truncated response.
+--
+-- 'streamARN', 'getImages_streamARN' - The Amazon Resource Name (ARN) of the stream from which to retrieve the
+-- images. You must specify either the @StreamName@ or the @StreamARN@.
+--
+-- 'streamName', 'getImages_streamName' - The name of the stream from which to retrieve the images. You must
+-- specify either the @StreamName@ or the @StreamARN@.
+--
+-- 'widthPixels', 'getImages_widthPixels' - The width of the output image that is used in conjunction with the
+-- @HeightPixels@ parameter. When both @WidthPixels@ and @HeightPixels@
+-- parameters are provided, the image will be stretched to fit the
+-- specified aspect ratio. If only the @WidthPixels@ parameter is provided
+-- or if only the @HeightPixels@ is provided, a @ValidationException@ will
+-- be thrown. If neither parameter is provided, the original image size
+-- from the stream will be returned.
+--
+-- 'imageSelectorType', 'getImages_imageSelectorType' - The origin of the Server or Producer timestamps to use to generate the
+-- images.
+--
+-- 'startTimestamp', 'getImages_startTimestamp' - The starting point from which the images should be generated. This
+-- @StartTimestamp@ must be within an inclusive range of timestamps for an
+-- image to be returned.
+--
+-- 'endTimestamp', 'getImages_endTimestamp' - The end timestamp for the range of images to be generated.
+--
+-- 'samplingInterval', 'getImages_samplingInterval' - The time interval in milliseconds (ms) at which the images need to be
+-- generated from the stream. The minimum value that can be provided is
+-- 3000 ms. If the timestamp range is less than the sampling interval, the
+-- Image from the @startTimestamp@ will be returned if available.
+--
+-- The minimum value of 3000 ms is a soft limit. If needed, a lower
+-- sampling frequency can be requested.
+--
+-- 'format', 'getImages_format' - The format that will be used to encode the image.
+newGetImages ::
+  -- | 'imageSelectorType'
+  ImageSelectorType ->
+  -- | 'startTimestamp'
+  Prelude.UTCTime ->
+  -- | 'endTimestamp'
+  Prelude.UTCTime ->
+  -- | 'samplingInterval'
+  Prelude.Natural ->
+  -- | 'format'
+  Format ->
+  GetImages
+newGetImages
+  pImageSelectorType_
+  pStartTimestamp_
+  pEndTimestamp_
+  pSamplingInterval_
+  pFormat_ =
+    GetImages'
+      { formatConfig = Prelude.Nothing,
+        heightPixels = Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        streamARN = Prelude.Nothing,
+        streamName = Prelude.Nothing,
+        widthPixels = Prelude.Nothing,
+        imageSelectorType = pImageSelectorType_,
+        startTimestamp = Data._Time Lens.# pStartTimestamp_,
+        endTimestamp = Data._Time Lens.# pEndTimestamp_,
+        samplingInterval = pSamplingInterval_,
+        format = pFormat_
+      }
+
+-- | The list of a key-value pair structure that contains extra parameters
+-- that can be applied when the image is generated. The @FormatConfig@ key
+-- is the @JPEGQuality@, which indicates the JPEG quality key to be used to
+-- generate the image. The @FormatConfig@ value accepts ints from 1 to 100.
+-- If the value is 1, the image will be generated with less quality and the
+-- best compression. If the value is 100, the image will be generated with
+-- the best quality and less compression. If no value is provided, the
+-- default value of the @JPEGQuality@ key will be set to 80.
+getImages_formatConfig :: Lens.Lens' GetImages (Prelude.Maybe (Prelude.HashMap FormatConfigKey Prelude.Text))
+getImages_formatConfig = Lens.lens (\GetImages' {formatConfig} -> formatConfig) (\s@GetImages' {} a -> s {formatConfig = a} :: GetImages) Prelude.. Lens.mapping Lens.coerced
+
+-- | The height of the output image that is used in conjunction with the
+-- @WidthPixels@ parameter. When both @HeightPixels@ and @WidthPixels@
+-- parameters are provided, the image will be stretched to fit the
+-- specified aspect ratio. If only the @HeightPixels@ parameter is
+-- provided, its original aspect ratio will be used to calculate the
+-- @WidthPixels@ ratio. If neither parameter is provided, the original
+-- image size will be returned.
+getImages_heightPixels :: Lens.Lens' GetImages (Prelude.Maybe Prelude.Natural)
+getImages_heightPixels = Lens.lens (\GetImages' {heightPixels} -> heightPixels) (\s@GetImages' {} a -> s {heightPixels = a} :: GetImages)
+
+-- | The maximum number of images to be returned by the API.
+--
+-- The default limit is 100 images per API response. The additional results
+-- will be paginated.
+getImages_maxResults :: Lens.Lens' GetImages (Prelude.Maybe Prelude.Natural)
+getImages_maxResults = Lens.lens (\GetImages' {maxResults} -> maxResults) (\s@GetImages' {} a -> s {maxResults = a} :: GetImages)
+
+-- | A token that specifies where to start paginating the next set of Images.
+-- This is the @GetImages:NextToken@ from a previously truncated response.
+getImages_nextToken :: Lens.Lens' GetImages (Prelude.Maybe Prelude.Text)
+getImages_nextToken = Lens.lens (\GetImages' {nextToken} -> nextToken) (\s@GetImages' {} a -> s {nextToken = a} :: GetImages)
+
+-- | The Amazon Resource Name (ARN) of the stream from which to retrieve the
+-- images. You must specify either the @StreamName@ or the @StreamARN@.
+getImages_streamARN :: Lens.Lens' GetImages (Prelude.Maybe Prelude.Text)
+getImages_streamARN = Lens.lens (\GetImages' {streamARN} -> streamARN) (\s@GetImages' {} a -> s {streamARN = a} :: GetImages)
+
+-- | The name of the stream from which to retrieve the images. You must
+-- specify either the @StreamName@ or the @StreamARN@.
+getImages_streamName :: Lens.Lens' GetImages (Prelude.Maybe Prelude.Text)
+getImages_streamName = Lens.lens (\GetImages' {streamName} -> streamName) (\s@GetImages' {} a -> s {streamName = a} :: GetImages)
+
+-- | The width of the output image that is used in conjunction with the
+-- @HeightPixels@ parameter. When both @WidthPixels@ and @HeightPixels@
+-- parameters are provided, the image will be stretched to fit the
+-- specified aspect ratio. If only the @WidthPixels@ parameter is provided
+-- or if only the @HeightPixels@ is provided, a @ValidationException@ will
+-- be thrown. If neither parameter is provided, the original image size
+-- from the stream will be returned.
+getImages_widthPixels :: Lens.Lens' GetImages (Prelude.Maybe Prelude.Natural)
+getImages_widthPixels = Lens.lens (\GetImages' {widthPixels} -> widthPixels) (\s@GetImages' {} a -> s {widthPixels = a} :: GetImages)
+
+-- | The origin of the Server or Producer timestamps to use to generate the
+-- images.
+getImages_imageSelectorType :: Lens.Lens' GetImages ImageSelectorType
+getImages_imageSelectorType = Lens.lens (\GetImages' {imageSelectorType} -> imageSelectorType) (\s@GetImages' {} a -> s {imageSelectorType = a} :: GetImages)
+
+-- | The starting point from which the images should be generated. This
+-- @StartTimestamp@ must be within an inclusive range of timestamps for an
+-- image to be returned.
+getImages_startTimestamp :: Lens.Lens' GetImages Prelude.UTCTime
+getImages_startTimestamp = Lens.lens (\GetImages' {startTimestamp} -> startTimestamp) (\s@GetImages' {} a -> s {startTimestamp = a} :: GetImages) Prelude.. Data._Time
+
+-- | The end timestamp for the range of images to be generated.
+getImages_endTimestamp :: Lens.Lens' GetImages Prelude.UTCTime
+getImages_endTimestamp = Lens.lens (\GetImages' {endTimestamp} -> endTimestamp) (\s@GetImages' {} a -> s {endTimestamp = a} :: GetImages) Prelude.. Data._Time
+
+-- | The time interval in milliseconds (ms) at which the images need to be
+-- generated from the stream. The minimum value that can be provided is
+-- 3000 ms. If the timestamp range is less than the sampling interval, the
+-- Image from the @startTimestamp@ will be returned if available.
+--
+-- The minimum value of 3000 ms is a soft limit. If needed, a lower
+-- sampling frequency can be requested.
+getImages_samplingInterval :: Lens.Lens' GetImages Prelude.Natural
+getImages_samplingInterval = Lens.lens (\GetImages' {samplingInterval} -> samplingInterval) (\s@GetImages' {} a -> s {samplingInterval = a} :: GetImages)
+
+-- | The format that will be used to encode the image.
+getImages_format :: Lens.Lens' GetImages Format
+getImages_format = Lens.lens (\GetImages' {format} -> format) (\s@GetImages' {} a -> s {format = a} :: GetImages)
+
+instance Core.AWSPager GetImages where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getImagesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getImagesResponse_images
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getImages_nextToken
+          Lens..~ rs
+          Lens.^? getImagesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetImages where
+  type AWSResponse GetImages = GetImagesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetImagesResponse'
+            Prelude.<$> (x Data..?> "Images" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetImages where
+  hashWithSalt _salt GetImages' {..} =
+    _salt
+      `Prelude.hashWithSalt` formatConfig
+      `Prelude.hashWithSalt` heightPixels
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` streamARN
+      `Prelude.hashWithSalt` streamName
+      `Prelude.hashWithSalt` widthPixels
+      `Prelude.hashWithSalt` imageSelectorType
+      `Prelude.hashWithSalt` startTimestamp
+      `Prelude.hashWithSalt` endTimestamp
+      `Prelude.hashWithSalt` samplingInterval
+      `Prelude.hashWithSalt` format
+
+instance Prelude.NFData GetImages where
+  rnf GetImages' {..} =
+    Prelude.rnf formatConfig
+      `Prelude.seq` Prelude.rnf heightPixels
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf streamARN
+      `Prelude.seq` Prelude.rnf streamName
+      `Prelude.seq` Prelude.rnf widthPixels
+      `Prelude.seq` Prelude.rnf imageSelectorType
+      `Prelude.seq` Prelude.rnf startTimestamp
+      `Prelude.seq` Prelude.rnf endTimestamp
+      `Prelude.seq` Prelude.rnf samplingInterval
+      `Prelude.seq` Prelude.rnf format
+
+instance Data.ToHeaders GetImages where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON GetImages where
+  toJSON GetImages' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FormatConfig" Data..=) Prelude.<$> formatConfig,
+            ("HeightPixels" Data..=) Prelude.<$> heightPixels,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("StreamARN" Data..=) Prelude.<$> streamARN,
+            ("StreamName" Data..=) Prelude.<$> streamName,
+            ("WidthPixels" Data..=) Prelude.<$> widthPixels,
+            Prelude.Just
+              ("ImageSelectorType" Data..= imageSelectorType),
+            Prelude.Just
+              ("StartTimestamp" Data..= startTimestamp),
+            Prelude.Just ("EndTimestamp" Data..= endTimestamp),
+            Prelude.Just
+              ("SamplingInterval" Data..= samplingInterval),
+            Prelude.Just ("Format" Data..= format)
+          ]
+      )
+
+instance Data.ToPath GetImages where
+  toPath = Prelude.const "/getImages"
+
+instance Data.ToQuery GetImages where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetImagesResponse' smart constructor.
+data GetImagesResponse = GetImagesResponse'
+  { -- | The list of images generated from the video stream. If there is no media
+    -- available for the given timestamp, the @NO_MEDIA@ error will be listed
+    -- in the output. If an error occurs while the image is being generated,
+    -- the @MEDIA_ERROR@ will be listed in the output as the cause of the
+    -- missing image.
+    images :: Prelude.Maybe [Image],
+    -- | The encrypted token that was used in the request to get more images.
+    nextToken :: 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 'GetImagesResponse' 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:
+--
+-- 'images', 'getImagesResponse_images' - The list of images generated from the video stream. If there is no media
+-- available for the given timestamp, the @NO_MEDIA@ error will be listed
+-- in the output. If an error occurs while the image is being generated,
+-- the @MEDIA_ERROR@ will be listed in the output as the cause of the
+-- missing image.
+--
+-- 'nextToken', 'getImagesResponse_nextToken' - The encrypted token that was used in the request to get more images.
+--
+-- 'httpStatus', 'getImagesResponse_httpStatus' - The response's http status code.
+newGetImagesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetImagesResponse
+newGetImagesResponse pHttpStatus_ =
+  GetImagesResponse'
+    { images = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of images generated from the video stream. If there is no media
+-- available for the given timestamp, the @NO_MEDIA@ error will be listed
+-- in the output. If an error occurs while the image is being generated,
+-- the @MEDIA_ERROR@ will be listed in the output as the cause of the
+-- missing image.
+getImagesResponse_images :: Lens.Lens' GetImagesResponse (Prelude.Maybe [Image])
+getImagesResponse_images = Lens.lens (\GetImagesResponse' {images} -> images) (\s@GetImagesResponse' {} a -> s {images = a} :: GetImagesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The encrypted token that was used in the request to get more images.
+getImagesResponse_nextToken :: Lens.Lens' GetImagesResponse (Prelude.Maybe Prelude.Text)
+getImagesResponse_nextToken = Lens.lens (\GetImagesResponse' {nextToken} -> nextToken) (\s@GetImagesResponse' {} a -> s {nextToken = a} :: GetImagesResponse)
+
+-- | The response's http status code.
+getImagesResponse_httpStatus :: Lens.Lens' GetImagesResponse Prelude.Int
+getImagesResponse_httpStatus = Lens.lens (\GetImagesResponse' {httpStatus} -> httpStatus) (\s@GetImagesResponse' {} a -> s {httpStatus = a} :: GetImagesResponse)
+
+instance Prelude.NFData GetImagesResponse where
+  rnf GetImagesResponse' {..} =
+    Prelude.rnf images
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/GetMediaForFragmentList.hs b/gen/Amazonka/KinesisVideoArchivedMedia/GetMediaForFragmentList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/GetMediaForFragmentList.hs
@@ -0,0 +1,314 @@
+{-# 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.KinesisVideoArchivedMedia.GetMediaForFragmentList
+-- 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 media for a list of fragments (specified by fragment number) from
+-- the archived data in an Amazon Kinesis video stream.
+--
+-- You must first call the @GetDataEndpoint@ API to get an endpoint. Then
+-- send the @GetMediaForFragmentList@ requests to this endpoint using the
+-- <https://docs.aws.amazon.com/cli/latest/reference/ --endpoint-url parameter>.
+--
+-- For limits, see
+-- <http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/limits.html Kinesis Video Streams Limits>.
+--
+-- If an error is thrown after invoking a Kinesis Video Streams archived
+-- media API, in addition to the HTTP status code and the response body, it
+-- includes the following pieces of information:
+--
+-- -   @x-amz-ErrorType@ HTTP header – contains a more specific error type
+--     in addition to what the HTTP status code provides.
+--
+-- -   @x-amz-RequestId@ HTTP header – if you want to report an issue to
+--     AWS, the support team can better diagnose the problem if given the
+--     Request Id.
+--
+-- Both the HTTP status code and the ErrorType header can be utilized to
+-- make programmatic decisions about whether errors are retry-able and
+-- under what conditions, as well as provide information on what actions
+-- the client programmer might need to take in order to successfully try
+-- again.
+--
+-- For more information, see the __Errors__ section at the bottom of this
+-- topic, as well as
+-- <https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/CommonErrors.html Common Errors>.
+module Amazonka.KinesisVideoArchivedMedia.GetMediaForFragmentList
+  ( -- * Creating a Request
+    GetMediaForFragmentList (..),
+    newGetMediaForFragmentList,
+
+    -- * Request Lenses
+    getMediaForFragmentList_streamARN,
+    getMediaForFragmentList_streamName,
+    getMediaForFragmentList_fragments,
+
+    -- * Destructuring the Response
+    GetMediaForFragmentListResponse (..),
+    newGetMediaForFragmentListResponse,
+
+    -- * Response Lenses
+    getMediaForFragmentListResponse_contentType,
+    getMediaForFragmentListResponse_httpStatus,
+    getMediaForFragmentListResponse_payload,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KinesisVideoArchivedMedia.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetMediaForFragmentList' smart constructor.
+data GetMediaForFragmentList = GetMediaForFragmentList'
+  { -- | The Amazon Resource Name (ARN) of the stream from which to retrieve
+    -- fragment media. Specify either this parameter or the @StreamName@
+    -- parameter.
+    streamARN :: Prelude.Maybe Prelude.Text,
+    -- | The name of the stream from which to retrieve fragment media. Specify
+    -- either this parameter or the @StreamARN@ parameter.
+    streamName :: Prelude.Maybe Prelude.Text,
+    -- | A list of the numbers of fragments for which to retrieve media. You
+    -- retrieve these values with ListFragments.
+    fragments :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMediaForFragmentList' 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:
+--
+-- 'streamARN', 'getMediaForFragmentList_streamARN' - The Amazon Resource Name (ARN) of the stream from which to retrieve
+-- fragment media. Specify either this parameter or the @StreamName@
+-- parameter.
+--
+-- 'streamName', 'getMediaForFragmentList_streamName' - The name of the stream from which to retrieve fragment media. Specify
+-- either this parameter or the @StreamARN@ parameter.
+--
+-- 'fragments', 'getMediaForFragmentList_fragments' - A list of the numbers of fragments for which to retrieve media. You
+-- retrieve these values with ListFragments.
+newGetMediaForFragmentList ::
+  -- | 'fragments'
+  Prelude.NonEmpty Prelude.Text ->
+  GetMediaForFragmentList
+newGetMediaForFragmentList pFragments_ =
+  GetMediaForFragmentList'
+    { streamARN =
+        Prelude.Nothing,
+      streamName = Prelude.Nothing,
+      fragments = Lens.coerced Lens.# pFragments_
+    }
+
+-- | The Amazon Resource Name (ARN) of the stream from which to retrieve
+-- fragment media. Specify either this parameter or the @StreamName@
+-- parameter.
+getMediaForFragmentList_streamARN :: Lens.Lens' GetMediaForFragmentList (Prelude.Maybe Prelude.Text)
+getMediaForFragmentList_streamARN = Lens.lens (\GetMediaForFragmentList' {streamARN} -> streamARN) (\s@GetMediaForFragmentList' {} a -> s {streamARN = a} :: GetMediaForFragmentList)
+
+-- | The name of the stream from which to retrieve fragment media. Specify
+-- either this parameter or the @StreamARN@ parameter.
+getMediaForFragmentList_streamName :: Lens.Lens' GetMediaForFragmentList (Prelude.Maybe Prelude.Text)
+getMediaForFragmentList_streamName = Lens.lens (\GetMediaForFragmentList' {streamName} -> streamName) (\s@GetMediaForFragmentList' {} a -> s {streamName = a} :: GetMediaForFragmentList)
+
+-- | A list of the numbers of fragments for which to retrieve media. You
+-- retrieve these values with ListFragments.
+getMediaForFragmentList_fragments :: Lens.Lens' GetMediaForFragmentList (Prelude.NonEmpty Prelude.Text)
+getMediaForFragmentList_fragments = Lens.lens (\GetMediaForFragmentList' {fragments} -> fragments) (\s@GetMediaForFragmentList' {} a -> s {fragments = a} :: GetMediaForFragmentList) Prelude.. Lens.coerced
+
+instance Core.AWSRequest GetMediaForFragmentList where
+  type
+    AWSResponse GetMediaForFragmentList =
+      GetMediaForFragmentListResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveBody
+      ( \s h x ->
+          GetMediaForFragmentListResponse'
+            Prelude.<$> (h Data..#? "Content-Type")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (Prelude.pure x)
+      )
+
+instance Prelude.Hashable GetMediaForFragmentList where
+  hashWithSalt _salt GetMediaForFragmentList' {..} =
+    _salt
+      `Prelude.hashWithSalt` streamARN
+      `Prelude.hashWithSalt` streamName
+      `Prelude.hashWithSalt` fragments
+
+instance Prelude.NFData GetMediaForFragmentList where
+  rnf GetMediaForFragmentList' {..} =
+    Prelude.rnf streamARN
+      `Prelude.seq` Prelude.rnf streamName
+      `Prelude.seq` Prelude.rnf fragments
+
+instance Data.ToHeaders GetMediaForFragmentList where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON GetMediaForFragmentList where
+  toJSON GetMediaForFragmentList' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("StreamARN" Data..=) Prelude.<$> streamARN,
+            ("StreamName" Data..=) Prelude.<$> streamName,
+            Prelude.Just ("Fragments" Data..= fragments)
+          ]
+      )
+
+instance Data.ToPath GetMediaForFragmentList where
+  toPath = Prelude.const "/getMediaForFragmentList"
+
+instance Data.ToQuery GetMediaForFragmentList where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetMediaForFragmentListResponse' smart constructor.
+data GetMediaForFragmentListResponse = GetMediaForFragmentListResponse'
+  { -- | The content type of the requested media.
+    contentType :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The payload that Kinesis Video Streams returns is a sequence of chunks
+    -- from the specified stream. For information about the chunks, see
+    -- <http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_PutMedia.html PutMedia>.
+    -- The chunks that Kinesis Video Streams returns in the
+    -- @GetMediaForFragmentList@ call also include the following additional
+    -- Matroska (MKV) tags:
+    --
+    -- -   AWS_KINESISVIDEO_FRAGMENT_NUMBER - Fragment number returned in the
+    --     chunk.
+    --
+    -- -   AWS_KINESISVIDEO_SERVER_SIDE_TIMESTAMP - Server-side timestamp of
+    --     the fragment.
+    --
+    -- -   AWS_KINESISVIDEO_PRODUCER_SIDE_TIMESTAMP - Producer-side timestamp
+    --     of the fragment.
+    --
+    -- The following tags will be included if an exception occurs:
+    --
+    -- -   AWS_KINESISVIDEO_FRAGMENT_NUMBER - The number of the fragment that
+    --     threw the exception
+    --
+    -- -   AWS_KINESISVIDEO_EXCEPTION_ERROR_CODE - The integer code of the
+    --     exception
+    --
+    -- -   AWS_KINESISVIDEO_EXCEPTION_MESSAGE - A text description of the
+    --     exception
+    payload :: Data.ResponseBody
+  }
+  deriving (Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMediaForFragmentListResponse' 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:
+--
+-- 'contentType', 'getMediaForFragmentListResponse_contentType' - The content type of the requested media.
+--
+-- 'httpStatus', 'getMediaForFragmentListResponse_httpStatus' - The response's http status code.
+--
+-- 'payload', 'getMediaForFragmentListResponse_payload' - The payload that Kinesis Video Streams returns is a sequence of chunks
+-- from the specified stream. For information about the chunks, see
+-- <http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_PutMedia.html PutMedia>.
+-- The chunks that Kinesis Video Streams returns in the
+-- @GetMediaForFragmentList@ call also include the following additional
+-- Matroska (MKV) tags:
+--
+-- -   AWS_KINESISVIDEO_FRAGMENT_NUMBER - Fragment number returned in the
+--     chunk.
+--
+-- -   AWS_KINESISVIDEO_SERVER_SIDE_TIMESTAMP - Server-side timestamp of
+--     the fragment.
+--
+-- -   AWS_KINESISVIDEO_PRODUCER_SIDE_TIMESTAMP - Producer-side timestamp
+--     of the fragment.
+--
+-- The following tags will be included if an exception occurs:
+--
+-- -   AWS_KINESISVIDEO_FRAGMENT_NUMBER - The number of the fragment that
+--     threw the exception
+--
+-- -   AWS_KINESISVIDEO_EXCEPTION_ERROR_CODE - The integer code of the
+--     exception
+--
+-- -   AWS_KINESISVIDEO_EXCEPTION_MESSAGE - A text description of the
+--     exception
+newGetMediaForFragmentListResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'payload'
+  Data.ResponseBody ->
+  GetMediaForFragmentListResponse
+newGetMediaForFragmentListResponse
+  pHttpStatus_
+  pPayload_ =
+    GetMediaForFragmentListResponse'
+      { contentType =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        payload = pPayload_
+      }
+
+-- | The content type of the requested media.
+getMediaForFragmentListResponse_contentType :: Lens.Lens' GetMediaForFragmentListResponse (Prelude.Maybe Prelude.Text)
+getMediaForFragmentListResponse_contentType = Lens.lens (\GetMediaForFragmentListResponse' {contentType} -> contentType) (\s@GetMediaForFragmentListResponse' {} a -> s {contentType = a} :: GetMediaForFragmentListResponse)
+
+-- | The response's http status code.
+getMediaForFragmentListResponse_httpStatus :: Lens.Lens' GetMediaForFragmentListResponse Prelude.Int
+getMediaForFragmentListResponse_httpStatus = Lens.lens (\GetMediaForFragmentListResponse' {httpStatus} -> httpStatus) (\s@GetMediaForFragmentListResponse' {} a -> s {httpStatus = a} :: GetMediaForFragmentListResponse)
+
+-- | The payload that Kinesis Video Streams returns is a sequence of chunks
+-- from the specified stream. For information about the chunks, see
+-- <http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_PutMedia.html PutMedia>.
+-- The chunks that Kinesis Video Streams returns in the
+-- @GetMediaForFragmentList@ call also include the following additional
+-- Matroska (MKV) tags:
+--
+-- -   AWS_KINESISVIDEO_FRAGMENT_NUMBER - Fragment number returned in the
+--     chunk.
+--
+-- -   AWS_KINESISVIDEO_SERVER_SIDE_TIMESTAMP - Server-side timestamp of
+--     the fragment.
+--
+-- -   AWS_KINESISVIDEO_PRODUCER_SIDE_TIMESTAMP - Producer-side timestamp
+--     of the fragment.
+--
+-- The following tags will be included if an exception occurs:
+--
+-- -   AWS_KINESISVIDEO_FRAGMENT_NUMBER - The number of the fragment that
+--     threw the exception
+--
+-- -   AWS_KINESISVIDEO_EXCEPTION_ERROR_CODE - The integer code of the
+--     exception
+--
+-- -   AWS_KINESISVIDEO_EXCEPTION_MESSAGE - A text description of the
+--     exception
+getMediaForFragmentListResponse_payload :: Lens.Lens' GetMediaForFragmentListResponse Data.ResponseBody
+getMediaForFragmentListResponse_payload = Lens.lens (\GetMediaForFragmentListResponse' {payload} -> payload) (\s@GetMediaForFragmentListResponse' {} a -> s {payload = a} :: GetMediaForFragmentListResponse)
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Lens.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Lens.hs
@@ -0,0 +1,148 @@
+{-# 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.KinesisVideoArchivedMedia.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.KinesisVideoArchivedMedia.Lens
+  ( -- * Operations
+
+    -- ** GetClip
+    getClip_streamARN,
+    getClip_streamName,
+    getClip_clipFragmentSelector,
+    getClipResponse_contentType,
+    getClipResponse_httpStatus,
+    getClipResponse_payload,
+
+    -- ** GetDASHStreamingSessionURL
+    getDASHStreamingSessionURL_dASHFragmentSelector,
+    getDASHStreamingSessionURL_displayFragmentNumber,
+    getDASHStreamingSessionURL_displayFragmentTimestamp,
+    getDASHStreamingSessionURL_expires,
+    getDASHStreamingSessionURL_maxManifestFragmentResults,
+    getDASHStreamingSessionURL_playbackMode,
+    getDASHStreamingSessionURL_streamARN,
+    getDASHStreamingSessionURL_streamName,
+    getDASHStreamingSessionURLResponse_dASHStreamingSessionURL,
+    getDASHStreamingSessionURLResponse_httpStatus,
+
+    -- ** GetHLSStreamingSessionURL
+    getHLSStreamingSessionURL_containerFormat,
+    getHLSStreamingSessionURL_discontinuityMode,
+    getHLSStreamingSessionURL_displayFragmentTimestamp,
+    getHLSStreamingSessionURL_expires,
+    getHLSStreamingSessionURL_hLSFragmentSelector,
+    getHLSStreamingSessionURL_maxMediaPlaylistFragmentResults,
+    getHLSStreamingSessionURL_playbackMode,
+    getHLSStreamingSessionURL_streamARN,
+    getHLSStreamingSessionURL_streamName,
+    getHLSStreamingSessionURLResponse_hLSStreamingSessionURL,
+    getHLSStreamingSessionURLResponse_httpStatus,
+
+    -- ** GetImages
+    getImages_formatConfig,
+    getImages_heightPixels,
+    getImages_maxResults,
+    getImages_nextToken,
+    getImages_streamARN,
+    getImages_streamName,
+    getImages_widthPixels,
+    getImages_imageSelectorType,
+    getImages_startTimestamp,
+    getImages_endTimestamp,
+    getImages_samplingInterval,
+    getImages_format,
+    getImagesResponse_images,
+    getImagesResponse_nextToken,
+    getImagesResponse_httpStatus,
+
+    -- ** GetMediaForFragmentList
+    getMediaForFragmentList_streamARN,
+    getMediaForFragmentList_streamName,
+    getMediaForFragmentList_fragments,
+    getMediaForFragmentListResponse_contentType,
+    getMediaForFragmentListResponse_httpStatus,
+    getMediaForFragmentListResponse_payload,
+
+    -- ** ListFragments
+    listFragments_fragmentSelector,
+    listFragments_maxResults,
+    listFragments_nextToken,
+    listFragments_streamARN,
+    listFragments_streamName,
+    listFragmentsResponse_fragments,
+    listFragmentsResponse_nextToken,
+    listFragmentsResponse_httpStatus,
+
+    -- * Types
+
+    -- ** ClipFragmentSelector
+    clipFragmentSelector_fragmentSelectorType,
+    clipFragmentSelector_timestampRange,
+
+    -- ** ClipTimestampRange
+    clipTimestampRange_startTimestamp,
+    clipTimestampRange_endTimestamp,
+
+    -- ** DASHFragmentSelector
+    dASHFragmentSelector_fragmentSelectorType,
+    dASHFragmentSelector_timestampRange,
+
+    -- ** DASHTimestampRange
+    dASHTimestampRange_endTimestamp,
+    dASHTimestampRange_startTimestamp,
+
+    -- ** Fragment
+    fragment_fragmentLengthInMilliseconds,
+    fragment_fragmentNumber,
+    fragment_fragmentSizeInBytes,
+    fragment_producerTimestamp,
+    fragment_serverTimestamp,
+
+    -- ** FragmentSelector
+    fragmentSelector_fragmentSelectorType,
+    fragmentSelector_timestampRange,
+
+    -- ** HLSFragmentSelector
+    hLSFragmentSelector_fragmentSelectorType,
+    hLSFragmentSelector_timestampRange,
+
+    -- ** HLSTimestampRange
+    hLSTimestampRange_endTimestamp,
+    hLSTimestampRange_startTimestamp,
+
+    -- ** Image
+    image_error,
+    image_imageContent,
+    image_timeStamp,
+
+    -- ** TimestampRange
+    timestampRange_startTimestamp,
+    timestampRange_endTimestamp,
+  )
+where
+
+import Amazonka.KinesisVideoArchivedMedia.GetClip
+import Amazonka.KinesisVideoArchivedMedia.GetDASHStreamingSessionURL
+import Amazonka.KinesisVideoArchivedMedia.GetHLSStreamingSessionURL
+import Amazonka.KinesisVideoArchivedMedia.GetImages
+import Amazonka.KinesisVideoArchivedMedia.GetMediaForFragmentList
+import Amazonka.KinesisVideoArchivedMedia.ListFragments
+import Amazonka.KinesisVideoArchivedMedia.Types.ClipFragmentSelector
+import Amazonka.KinesisVideoArchivedMedia.Types.ClipTimestampRange
+import Amazonka.KinesisVideoArchivedMedia.Types.DASHFragmentSelector
+import Amazonka.KinesisVideoArchivedMedia.Types.DASHTimestampRange
+import Amazonka.KinesisVideoArchivedMedia.Types.Fragment
+import Amazonka.KinesisVideoArchivedMedia.Types.FragmentSelector
+import Amazonka.KinesisVideoArchivedMedia.Types.HLSFragmentSelector
+import Amazonka.KinesisVideoArchivedMedia.Types.HLSTimestampRange
+import Amazonka.KinesisVideoArchivedMedia.Types.Image
+import Amazonka.KinesisVideoArchivedMedia.Types.TimestampRange
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/ListFragments.hs b/gen/Amazonka/KinesisVideoArchivedMedia/ListFragments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/ListFragments.hs
@@ -0,0 +1,312 @@
+{-# 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.KinesisVideoArchivedMedia.ListFragments
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of Fragment objects from the specified stream and
+-- timestamp range within the archived data.
+--
+-- Listing fragments is eventually consistent. This means that even if the
+-- producer receives an acknowledgment that a fragment is persisted, the
+-- result might not be returned immediately from a request to
+-- @ListFragments@. However, results are typically available in less than
+-- one second.
+--
+-- You must first call the @GetDataEndpoint@ API to get an endpoint. Then
+-- send the @ListFragments@ requests to this endpoint using the
+-- <https://docs.aws.amazon.com/cli/latest/reference/ --endpoint-url parameter>.
+--
+-- If an error is thrown after invoking a Kinesis Video Streams archived
+-- media API, in addition to the HTTP status code and the response body, it
+-- includes the following pieces of information:
+--
+-- -   @x-amz-ErrorType@ HTTP header – contains a more specific error type
+--     in addition to what the HTTP status code provides.
+--
+-- -   @x-amz-RequestId@ HTTP header – if you want to report an issue to
+--     AWS, the support team can better diagnose the problem if given the
+--     Request Id.
+--
+-- Both the HTTP status code and the ErrorType header can be utilized to
+-- make programmatic decisions about whether errors are retry-able and
+-- under what conditions, as well as provide information on what actions
+-- the client programmer might need to take in order to successfully try
+-- again.
+--
+-- For more information, see the __Errors__ section at the bottom of this
+-- topic, as well as
+-- <https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/CommonErrors.html Common Errors>.
+--
+-- This operation returns paginated results.
+module Amazonka.KinesisVideoArchivedMedia.ListFragments
+  ( -- * Creating a Request
+    ListFragments (..),
+    newListFragments,
+
+    -- * Request Lenses
+    listFragments_fragmentSelector,
+    listFragments_maxResults,
+    listFragments_nextToken,
+    listFragments_streamARN,
+    listFragments_streamName,
+
+    -- * Destructuring the Response
+    ListFragmentsResponse (..),
+    newListFragmentsResponse,
+
+    -- * Response Lenses
+    listFragmentsResponse_fragments,
+    listFragmentsResponse_nextToken,
+    listFragmentsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KinesisVideoArchivedMedia.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListFragments' smart constructor.
+data ListFragments = ListFragments'
+  { -- | Describes the timestamp range and timestamp origin for the range of
+    -- fragments to return.
+    fragmentSelector :: Prelude.Maybe FragmentSelector,
+    -- | The total number of fragments to return. If the total number of
+    -- fragments available is more than the value specified in @max-results@,
+    -- then a ListFragmentsOutput$NextToken is provided in the output that you
+    -- can use to resume pagination.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token to specify where to start paginating. This is the
+    -- ListFragmentsOutput$NextToken from a previously truncated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the stream from which to retrieve a
+    -- fragment list. Specify either this parameter or the @StreamName@
+    -- parameter.
+    streamARN :: Prelude.Maybe Prelude.Text,
+    -- | The name of the stream from which to retrieve a fragment list. Specify
+    -- either this parameter or the @StreamARN@ parameter.
+    streamName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListFragments' 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:
+--
+-- 'fragmentSelector', 'listFragments_fragmentSelector' - Describes the timestamp range and timestamp origin for the range of
+-- fragments to return.
+--
+-- 'maxResults', 'listFragments_maxResults' - The total number of fragments to return. If the total number of
+-- fragments available is more than the value specified in @max-results@,
+-- then a ListFragmentsOutput$NextToken is provided in the output that you
+-- can use to resume pagination.
+--
+-- 'nextToken', 'listFragments_nextToken' - A token to specify where to start paginating. This is the
+-- ListFragmentsOutput$NextToken from a previously truncated response.
+--
+-- 'streamARN', 'listFragments_streamARN' - The Amazon Resource Name (ARN) of the stream from which to retrieve a
+-- fragment list. Specify either this parameter or the @StreamName@
+-- parameter.
+--
+-- 'streamName', 'listFragments_streamName' - The name of the stream from which to retrieve a fragment list. Specify
+-- either this parameter or the @StreamARN@ parameter.
+newListFragments ::
+  ListFragments
+newListFragments =
+  ListFragments'
+    { fragmentSelector = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      streamARN = Prelude.Nothing,
+      streamName = Prelude.Nothing
+    }
+
+-- | Describes the timestamp range and timestamp origin for the range of
+-- fragments to return.
+listFragments_fragmentSelector :: Lens.Lens' ListFragments (Prelude.Maybe FragmentSelector)
+listFragments_fragmentSelector = Lens.lens (\ListFragments' {fragmentSelector} -> fragmentSelector) (\s@ListFragments' {} a -> s {fragmentSelector = a} :: ListFragments)
+
+-- | The total number of fragments to return. If the total number of
+-- fragments available is more than the value specified in @max-results@,
+-- then a ListFragmentsOutput$NextToken is provided in the output that you
+-- can use to resume pagination.
+listFragments_maxResults :: Lens.Lens' ListFragments (Prelude.Maybe Prelude.Natural)
+listFragments_maxResults = Lens.lens (\ListFragments' {maxResults} -> maxResults) (\s@ListFragments' {} a -> s {maxResults = a} :: ListFragments)
+
+-- | A token to specify where to start paginating. This is the
+-- ListFragmentsOutput$NextToken from a previously truncated response.
+listFragments_nextToken :: Lens.Lens' ListFragments (Prelude.Maybe Prelude.Text)
+listFragments_nextToken = Lens.lens (\ListFragments' {nextToken} -> nextToken) (\s@ListFragments' {} a -> s {nextToken = a} :: ListFragments)
+
+-- | The Amazon Resource Name (ARN) of the stream from which to retrieve a
+-- fragment list. Specify either this parameter or the @StreamName@
+-- parameter.
+listFragments_streamARN :: Lens.Lens' ListFragments (Prelude.Maybe Prelude.Text)
+listFragments_streamARN = Lens.lens (\ListFragments' {streamARN} -> streamARN) (\s@ListFragments' {} a -> s {streamARN = a} :: ListFragments)
+
+-- | The name of the stream from which to retrieve a fragment list. Specify
+-- either this parameter or the @StreamARN@ parameter.
+listFragments_streamName :: Lens.Lens' ListFragments (Prelude.Maybe Prelude.Text)
+listFragments_streamName = Lens.lens (\ListFragments' {streamName} -> streamName) (\s@ListFragments' {} a -> s {streamName = a} :: ListFragments)
+
+instance Core.AWSPager ListFragments where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listFragmentsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listFragmentsResponse_fragments
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listFragments_nextToken
+          Lens..~ rs
+          Lens.^? listFragmentsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListFragments where
+  type
+    AWSResponse ListFragments =
+      ListFragmentsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListFragmentsResponse'
+            Prelude.<$> (x Data..?> "Fragments" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListFragments where
+  hashWithSalt _salt ListFragments' {..} =
+    _salt
+      `Prelude.hashWithSalt` fragmentSelector
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` streamARN
+      `Prelude.hashWithSalt` streamName
+
+instance Prelude.NFData ListFragments where
+  rnf ListFragments' {..} =
+    Prelude.rnf fragmentSelector
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf streamARN
+      `Prelude.seq` Prelude.rnf streamName
+
+instance Data.ToHeaders ListFragments where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON ListFragments where
+  toJSON ListFragments' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FragmentSelector" Data..=)
+              Prelude.<$> fragmentSelector,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("StreamARN" Data..=) Prelude.<$> streamARN,
+            ("StreamName" Data..=) Prelude.<$> streamName
+          ]
+      )
+
+instance Data.ToPath ListFragments where
+  toPath = Prelude.const "/listFragments"
+
+instance Data.ToQuery ListFragments where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListFragmentsResponse' smart constructor.
+data ListFragmentsResponse = ListFragmentsResponse'
+  { -- | A list of archived Fragment objects from the stream that meet the
+    -- selector criteria. Results are in no specific order, even across pages.
+    fragments :: Prelude.Maybe [Fragment],
+    -- | If the returned list is truncated, the operation returns this token to
+    -- use to retrieve the next page of results. This value is @null@ when
+    -- there are no more results to return.
+    nextToken :: 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 'ListFragmentsResponse' 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:
+--
+-- 'fragments', 'listFragmentsResponse_fragments' - A list of archived Fragment objects from the stream that meet the
+-- selector criteria. Results are in no specific order, even across pages.
+--
+-- 'nextToken', 'listFragmentsResponse_nextToken' - If the returned list is truncated, the operation returns this token to
+-- use to retrieve the next page of results. This value is @null@ when
+-- there are no more results to return.
+--
+-- 'httpStatus', 'listFragmentsResponse_httpStatus' - The response's http status code.
+newListFragmentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListFragmentsResponse
+newListFragmentsResponse pHttpStatus_ =
+  ListFragmentsResponse'
+    { fragments = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of archived Fragment objects from the stream that meet the
+-- selector criteria. Results are in no specific order, even across pages.
+listFragmentsResponse_fragments :: Lens.Lens' ListFragmentsResponse (Prelude.Maybe [Fragment])
+listFragmentsResponse_fragments = Lens.lens (\ListFragmentsResponse' {fragments} -> fragments) (\s@ListFragmentsResponse' {} a -> s {fragments = a} :: ListFragmentsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the returned list is truncated, the operation returns this token to
+-- use to retrieve the next page of results. This value is @null@ when
+-- there are no more results to return.
+listFragmentsResponse_nextToken :: Lens.Lens' ListFragmentsResponse (Prelude.Maybe Prelude.Text)
+listFragmentsResponse_nextToken = Lens.lens (\ListFragmentsResponse' {nextToken} -> nextToken) (\s@ListFragmentsResponse' {} a -> s {nextToken = a} :: ListFragmentsResponse)
+
+-- | The response's http status code.
+listFragmentsResponse_httpStatus :: Lens.Lens' ListFragmentsResponse Prelude.Int
+listFragmentsResponse_httpStatus = Lens.lens (\ListFragmentsResponse' {httpStatus} -> httpStatus) (\s@ListFragmentsResponse' {} a -> s {httpStatus = a} :: ListFragmentsResponse)
+
+instance Prelude.NFData ListFragmentsResponse where
+  rnf ListFragmentsResponse' {..} =
+    Prelude.rnf fragments
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types.hs
@@ -0,0 +1,334 @@
+{-# 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.KinesisVideoArchivedMedia.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.KinesisVideoArchivedMedia.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _ClientLimitExceededException,
+    _InvalidArgumentException,
+    _InvalidCodecPrivateDataException,
+    _InvalidMediaFrameException,
+    _MissingCodecPrivateDataException,
+    _NoDataRetentionException,
+    _NotAuthorizedException,
+    _ResourceNotFoundException,
+    _UnsupportedStreamMediaTypeException,
+
+    -- * ClipFragmentSelectorType
+    ClipFragmentSelectorType (..),
+
+    -- * ContainerFormat
+    ContainerFormat (..),
+
+    -- * DASHDisplayFragmentNumber
+    DASHDisplayFragmentNumber (..),
+
+    -- * DASHDisplayFragmentTimestamp
+    DASHDisplayFragmentTimestamp (..),
+
+    -- * DASHFragmentSelectorType
+    DASHFragmentSelectorType (..),
+
+    -- * DASHPlaybackMode
+    DASHPlaybackMode (..),
+
+    -- * Format
+    Format (..),
+
+    -- * FormatConfigKey
+    FormatConfigKey (..),
+
+    -- * FragmentSelectorType
+    FragmentSelectorType (..),
+
+    -- * HLSDiscontinuityMode
+    HLSDiscontinuityMode (..),
+
+    -- * HLSDisplayFragmentTimestamp
+    HLSDisplayFragmentTimestamp (..),
+
+    -- * HLSFragmentSelectorType
+    HLSFragmentSelectorType (..),
+
+    -- * HLSPlaybackMode
+    HLSPlaybackMode (..),
+
+    -- * ImageError
+    ImageError (..),
+
+    -- * ImageSelectorType
+    ImageSelectorType (..),
+
+    -- * ClipFragmentSelector
+    ClipFragmentSelector (..),
+    newClipFragmentSelector,
+    clipFragmentSelector_fragmentSelectorType,
+    clipFragmentSelector_timestampRange,
+
+    -- * ClipTimestampRange
+    ClipTimestampRange (..),
+    newClipTimestampRange,
+    clipTimestampRange_startTimestamp,
+    clipTimestampRange_endTimestamp,
+
+    -- * DASHFragmentSelector
+    DASHFragmentSelector (..),
+    newDASHFragmentSelector,
+    dASHFragmentSelector_fragmentSelectorType,
+    dASHFragmentSelector_timestampRange,
+
+    -- * DASHTimestampRange
+    DASHTimestampRange (..),
+    newDASHTimestampRange,
+    dASHTimestampRange_endTimestamp,
+    dASHTimestampRange_startTimestamp,
+
+    -- * Fragment
+    Fragment (..),
+    newFragment,
+    fragment_fragmentLengthInMilliseconds,
+    fragment_fragmentNumber,
+    fragment_fragmentSizeInBytes,
+    fragment_producerTimestamp,
+    fragment_serverTimestamp,
+
+    -- * FragmentSelector
+    FragmentSelector (..),
+    newFragmentSelector,
+    fragmentSelector_fragmentSelectorType,
+    fragmentSelector_timestampRange,
+
+    -- * HLSFragmentSelector
+    HLSFragmentSelector (..),
+    newHLSFragmentSelector,
+    hLSFragmentSelector_fragmentSelectorType,
+    hLSFragmentSelector_timestampRange,
+
+    -- * HLSTimestampRange
+    HLSTimestampRange (..),
+    newHLSTimestampRange,
+    hLSTimestampRange_endTimestamp,
+    hLSTimestampRange_startTimestamp,
+
+    -- * Image
+    Image (..),
+    newImage,
+    image_error,
+    image_imageContent,
+    image_timeStamp,
+
+    -- * TimestampRange
+    TimestampRange (..),
+    newTimestampRange,
+    timestampRange_startTimestamp,
+    timestampRange_endTimestamp,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.KinesisVideoArchivedMedia.Types.ClipFragmentSelector
+import Amazonka.KinesisVideoArchivedMedia.Types.ClipFragmentSelectorType
+import Amazonka.KinesisVideoArchivedMedia.Types.ClipTimestampRange
+import Amazonka.KinesisVideoArchivedMedia.Types.ContainerFormat
+import Amazonka.KinesisVideoArchivedMedia.Types.DASHDisplayFragmentNumber
+import Amazonka.KinesisVideoArchivedMedia.Types.DASHDisplayFragmentTimestamp
+import Amazonka.KinesisVideoArchivedMedia.Types.DASHFragmentSelector
+import Amazonka.KinesisVideoArchivedMedia.Types.DASHFragmentSelectorType
+import Amazonka.KinesisVideoArchivedMedia.Types.DASHPlaybackMode
+import Amazonka.KinesisVideoArchivedMedia.Types.DASHTimestampRange
+import Amazonka.KinesisVideoArchivedMedia.Types.Format
+import Amazonka.KinesisVideoArchivedMedia.Types.FormatConfigKey
+import Amazonka.KinesisVideoArchivedMedia.Types.Fragment
+import Amazonka.KinesisVideoArchivedMedia.Types.FragmentSelector
+import Amazonka.KinesisVideoArchivedMedia.Types.FragmentSelectorType
+import Amazonka.KinesisVideoArchivedMedia.Types.HLSDiscontinuityMode
+import Amazonka.KinesisVideoArchivedMedia.Types.HLSDisplayFragmentTimestamp
+import Amazonka.KinesisVideoArchivedMedia.Types.HLSFragmentSelector
+import Amazonka.KinesisVideoArchivedMedia.Types.HLSFragmentSelectorType
+import Amazonka.KinesisVideoArchivedMedia.Types.HLSPlaybackMode
+import Amazonka.KinesisVideoArchivedMedia.Types.HLSTimestampRange
+import Amazonka.KinesisVideoArchivedMedia.Types.Image
+import Amazonka.KinesisVideoArchivedMedia.Types.ImageError
+import Amazonka.KinesisVideoArchivedMedia.Types.ImageSelectorType
+import Amazonka.KinesisVideoArchivedMedia.Types.TimestampRange
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2017-09-30@ of the Amazon Kinesis Video Streams Archived Media SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev =
+        "KinesisVideoArchivedMedia",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "kinesisvideo",
+      Core.signingName = "kinesisvideo",
+      Core.version = "2017-09-30",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error =
+        Core.parseJSONError "KinesisVideoArchivedMedia",
+      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
+
+-- | Kinesis Video Streams has throttled the request because you have
+-- exceeded a limit. Try making the call later. For information about
+-- limits, see
+-- <http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/limits.html Kinesis Video Streams Limits>.
+_ClientLimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ClientLimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ClientLimitExceededException"
+    Prelude.. Core.hasStatus 400
+
+-- | A specified parameter exceeds its restrictions, is not supported, or
+-- can\'t be used.
+_InvalidArgumentException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidArgumentException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidArgumentException"
+    Prelude.. Core.hasStatus 400
+
+-- | The codec private data in at least one of the tracks of the video stream
+-- is not valid for this operation.
+_InvalidCodecPrivateDataException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidCodecPrivateDataException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidCodecPrivateDataException"
+    Prelude.. Core.hasStatus 400
+
+-- | One or more frames in the requested clip could not be parsed based on
+-- the specified codec.
+_InvalidMediaFrameException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidMediaFrameException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidMediaFrameException"
+    Prelude.. Core.hasStatus 400
+
+-- | No codec private data was found in at least one of tracks of the video
+-- stream.
+_MissingCodecPrivateDataException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_MissingCodecPrivateDataException =
+  Core._MatchServiceError
+    defaultService
+    "MissingCodecPrivateDataException"
+    Prelude.. Core.hasStatus 400
+
+-- | A streaming session was requested for a stream that does not retain data
+-- (that is, has a @DataRetentionInHours@ of 0).
+_NoDataRetentionException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NoDataRetentionException =
+  Core._MatchServiceError
+    defaultService
+    "NoDataRetentionException"
+    Prelude.. Core.hasStatus 400
+
+-- | Status Code: 403, The caller is not authorized to perform an operation
+-- on the given stream, or the token has expired.
+_NotAuthorizedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NotAuthorizedException =
+  Core._MatchServiceError
+    defaultService
+    "NotAuthorizedException"
+    Prelude.. Core.hasStatus 401
+
+-- | @GetMedia@ throws this error when Kinesis Video Streams can\'t find the
+-- stream that you specified.
+--
+-- @GetHLSStreamingSessionURL@ and @GetDASHStreamingSessionURL@ throw this
+-- error if a session with a @PlaybackMode@ of @ON_DEMAND@ or
+-- @LIVE_REPLAY@is requested for a stream that has no fragments within the
+-- requested time range, or if a session with a @PlaybackMode@ of @LIVE@ is
+-- requested for a stream that has no fragments within the last 30 seconds.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The type of the media (for example, h.264 or h.265 video or ACC or G.711
+-- audio) could not be determined from the codec IDs of the tracks in the
+-- first fragment for a playback session. The codec ID for track 1 should
+-- be @V_MPEG\/ISO\/AVC@ and, optionally, the codec ID for track 2 should
+-- be @A_AAC@.
+_UnsupportedStreamMediaTypeException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnsupportedStreamMediaTypeException =
+  Core._MatchServiceError
+    defaultService
+    "UnsupportedStreamMediaTypeException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/ClipFragmentSelector.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/ClipFragmentSelector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/ClipFragmentSelector.hs
@@ -0,0 +1,105 @@
+{-# 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.KinesisVideoArchivedMedia.Types.ClipFragmentSelector
+-- 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.KinesisVideoArchivedMedia.Types.ClipFragmentSelector where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KinesisVideoArchivedMedia.Types.ClipFragmentSelectorType
+import Amazonka.KinesisVideoArchivedMedia.Types.ClipTimestampRange
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the timestamp range and timestamp origin of a range of
+-- fragments.
+--
+-- Fragments that have duplicate producer timestamps are deduplicated. This
+-- means that if producers are producing a stream of fragments with
+-- producer timestamps that are approximately equal to the true clock time,
+-- the clip will contain all of the fragments within the requested
+-- timestamp range. If some fragments are ingested within the same time
+-- range and very different points in time, only the oldest ingested
+-- collection of fragments are returned.
+--
+-- /See:/ 'newClipFragmentSelector' smart constructor.
+data ClipFragmentSelector = ClipFragmentSelector'
+  { -- | The origin of the timestamps to use (Server or Producer).
+    fragmentSelectorType :: ClipFragmentSelectorType,
+    -- | The range of timestamps to return.
+    timestampRange :: ClipTimestampRange
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClipFragmentSelector' 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:
+--
+-- 'fragmentSelectorType', 'clipFragmentSelector_fragmentSelectorType' - The origin of the timestamps to use (Server or Producer).
+--
+-- 'timestampRange', 'clipFragmentSelector_timestampRange' - The range of timestamps to return.
+newClipFragmentSelector ::
+  -- | 'fragmentSelectorType'
+  ClipFragmentSelectorType ->
+  -- | 'timestampRange'
+  ClipTimestampRange ->
+  ClipFragmentSelector
+newClipFragmentSelector
+  pFragmentSelectorType_
+  pTimestampRange_ =
+    ClipFragmentSelector'
+      { fragmentSelectorType =
+          pFragmentSelectorType_,
+        timestampRange = pTimestampRange_
+      }
+
+-- | The origin of the timestamps to use (Server or Producer).
+clipFragmentSelector_fragmentSelectorType :: Lens.Lens' ClipFragmentSelector ClipFragmentSelectorType
+clipFragmentSelector_fragmentSelectorType = Lens.lens (\ClipFragmentSelector' {fragmentSelectorType} -> fragmentSelectorType) (\s@ClipFragmentSelector' {} a -> s {fragmentSelectorType = a} :: ClipFragmentSelector)
+
+-- | The range of timestamps to return.
+clipFragmentSelector_timestampRange :: Lens.Lens' ClipFragmentSelector ClipTimestampRange
+clipFragmentSelector_timestampRange = Lens.lens (\ClipFragmentSelector' {timestampRange} -> timestampRange) (\s@ClipFragmentSelector' {} a -> s {timestampRange = a} :: ClipFragmentSelector)
+
+instance Prelude.Hashable ClipFragmentSelector where
+  hashWithSalt _salt ClipFragmentSelector' {..} =
+    _salt
+      `Prelude.hashWithSalt` fragmentSelectorType
+      `Prelude.hashWithSalt` timestampRange
+
+instance Prelude.NFData ClipFragmentSelector where
+  rnf ClipFragmentSelector' {..} =
+    Prelude.rnf fragmentSelectorType
+      `Prelude.seq` Prelude.rnf timestampRange
+
+instance Data.ToJSON ClipFragmentSelector where
+  toJSON ClipFragmentSelector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "FragmentSelectorType"
+                  Data..= fragmentSelectorType
+              ),
+            Prelude.Just
+              ("TimestampRange" Data..= timestampRange)
+          ]
+      )
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/ClipFragmentSelectorType.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/ClipFragmentSelectorType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/ClipFragmentSelectorType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.KinesisVideoArchivedMedia.Types.ClipFragmentSelectorType
+-- 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.KinesisVideoArchivedMedia.Types.ClipFragmentSelectorType
+  ( ClipFragmentSelectorType
+      ( ..,
+        ClipFragmentSelectorType_PRODUCER_TIMESTAMP,
+        ClipFragmentSelectorType_SERVER_TIMESTAMP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ClipFragmentSelectorType = ClipFragmentSelectorType'
+  { fromClipFragmentSelectorType ::
+      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 ClipFragmentSelectorType_PRODUCER_TIMESTAMP :: ClipFragmentSelectorType
+pattern ClipFragmentSelectorType_PRODUCER_TIMESTAMP = ClipFragmentSelectorType' "PRODUCER_TIMESTAMP"
+
+pattern ClipFragmentSelectorType_SERVER_TIMESTAMP :: ClipFragmentSelectorType
+pattern ClipFragmentSelectorType_SERVER_TIMESTAMP = ClipFragmentSelectorType' "SERVER_TIMESTAMP"
+
+{-# COMPLETE
+  ClipFragmentSelectorType_PRODUCER_TIMESTAMP,
+  ClipFragmentSelectorType_SERVER_TIMESTAMP,
+  ClipFragmentSelectorType'
+  #-}
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/ClipTimestampRange.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/ClipTimestampRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/ClipTimestampRange.hs
@@ -0,0 +1,137 @@
+{-# 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.KinesisVideoArchivedMedia.Types.ClipTimestampRange
+-- 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.KinesisVideoArchivedMedia.Types.ClipTimestampRange where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The range of timestamps for which to return fragments.
+--
+-- /See:/ 'newClipTimestampRange' smart constructor.
+data ClipTimestampRange = ClipTimestampRange'
+  { -- | The starting timestamp in the range of timestamps for which to return
+    -- fragments.
+    --
+    -- Only fragments that start exactly at or after @StartTimestamp@ are
+    -- included in the session. Fragments that start before @StartTimestamp@
+    -- and continue past it aren\'t included in the session. If
+    -- @FragmentSelectorType@ is @SERVER_TIMESTAMP@, the @StartTimestamp@ must
+    -- be later than the stream head.
+    startTimestamp :: Data.POSIX,
+    -- | The end of the timestamp range for the requested media.
+    --
+    -- This value must be within 24 hours of the specified @StartTimestamp@,
+    -- and it must be later than the @StartTimestamp@ value. If
+    -- @FragmentSelectorType@ for the request is @SERVER_TIMESTAMP@, this value
+    -- must be in the past.
+    --
+    -- This value is inclusive. The @EndTimestamp@ is compared to the
+    -- (starting) timestamp of the fragment. Fragments that start before the
+    -- @EndTimestamp@ value and continue past it are included in the session.
+    endTimestamp :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClipTimestampRange' 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:
+--
+-- 'startTimestamp', 'clipTimestampRange_startTimestamp' - The starting timestamp in the range of timestamps for which to return
+-- fragments.
+--
+-- Only fragments that start exactly at or after @StartTimestamp@ are
+-- included in the session. Fragments that start before @StartTimestamp@
+-- and continue past it aren\'t included in the session. If
+-- @FragmentSelectorType@ is @SERVER_TIMESTAMP@, the @StartTimestamp@ must
+-- be later than the stream head.
+--
+-- 'endTimestamp', 'clipTimestampRange_endTimestamp' - The end of the timestamp range for the requested media.
+--
+-- This value must be within 24 hours of the specified @StartTimestamp@,
+-- and it must be later than the @StartTimestamp@ value. If
+-- @FragmentSelectorType@ for the request is @SERVER_TIMESTAMP@, this value
+-- must be in the past.
+--
+-- This value is inclusive. The @EndTimestamp@ is compared to the
+-- (starting) timestamp of the fragment. Fragments that start before the
+-- @EndTimestamp@ value and continue past it are included in the session.
+newClipTimestampRange ::
+  -- | 'startTimestamp'
+  Prelude.UTCTime ->
+  -- | 'endTimestamp'
+  Prelude.UTCTime ->
+  ClipTimestampRange
+newClipTimestampRange pStartTimestamp_ pEndTimestamp_ =
+  ClipTimestampRange'
+    { startTimestamp =
+        Data._Time Lens.# pStartTimestamp_,
+      endTimestamp = Data._Time Lens.# pEndTimestamp_
+    }
+
+-- | The starting timestamp in the range of timestamps for which to return
+-- fragments.
+--
+-- Only fragments that start exactly at or after @StartTimestamp@ are
+-- included in the session. Fragments that start before @StartTimestamp@
+-- and continue past it aren\'t included in the session. If
+-- @FragmentSelectorType@ is @SERVER_TIMESTAMP@, the @StartTimestamp@ must
+-- be later than the stream head.
+clipTimestampRange_startTimestamp :: Lens.Lens' ClipTimestampRange Prelude.UTCTime
+clipTimestampRange_startTimestamp = Lens.lens (\ClipTimestampRange' {startTimestamp} -> startTimestamp) (\s@ClipTimestampRange' {} a -> s {startTimestamp = a} :: ClipTimestampRange) Prelude.. Data._Time
+
+-- | The end of the timestamp range for the requested media.
+--
+-- This value must be within 24 hours of the specified @StartTimestamp@,
+-- and it must be later than the @StartTimestamp@ value. If
+-- @FragmentSelectorType@ for the request is @SERVER_TIMESTAMP@, this value
+-- must be in the past.
+--
+-- This value is inclusive. The @EndTimestamp@ is compared to the
+-- (starting) timestamp of the fragment. Fragments that start before the
+-- @EndTimestamp@ value and continue past it are included in the session.
+clipTimestampRange_endTimestamp :: Lens.Lens' ClipTimestampRange Prelude.UTCTime
+clipTimestampRange_endTimestamp = Lens.lens (\ClipTimestampRange' {endTimestamp} -> endTimestamp) (\s@ClipTimestampRange' {} a -> s {endTimestamp = a} :: ClipTimestampRange) Prelude.. Data._Time
+
+instance Prelude.Hashable ClipTimestampRange where
+  hashWithSalt _salt ClipTimestampRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` startTimestamp
+      `Prelude.hashWithSalt` endTimestamp
+
+instance Prelude.NFData ClipTimestampRange where
+  rnf ClipTimestampRange' {..} =
+    Prelude.rnf startTimestamp
+      `Prelude.seq` Prelude.rnf endTimestamp
+
+instance Data.ToJSON ClipTimestampRange where
+  toJSON ClipTimestampRange' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("StartTimestamp" Data..= startTimestamp),
+            Prelude.Just ("EndTimestamp" Data..= endTimestamp)
+          ]
+      )
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/ContainerFormat.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/ContainerFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/ContainerFormat.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.KinesisVideoArchivedMedia.Types.ContainerFormat
+-- 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.KinesisVideoArchivedMedia.Types.ContainerFormat
+  ( ContainerFormat
+      ( ..,
+        ContainerFormat_FRAGMENTED_MP4,
+        ContainerFormat_MPEG_TS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ContainerFormat = ContainerFormat'
+  { fromContainerFormat ::
+      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 ContainerFormat_FRAGMENTED_MP4 :: ContainerFormat
+pattern ContainerFormat_FRAGMENTED_MP4 = ContainerFormat' "FRAGMENTED_MP4"
+
+pattern ContainerFormat_MPEG_TS :: ContainerFormat
+pattern ContainerFormat_MPEG_TS = ContainerFormat' "MPEG_TS"
+
+{-# COMPLETE
+  ContainerFormat_FRAGMENTED_MP4,
+  ContainerFormat_MPEG_TS,
+  ContainerFormat'
+  #-}
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHDisplayFragmentNumber.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHDisplayFragmentNumber.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHDisplayFragmentNumber.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.KinesisVideoArchivedMedia.Types.DASHDisplayFragmentNumber
+-- 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.KinesisVideoArchivedMedia.Types.DASHDisplayFragmentNumber
+  ( DASHDisplayFragmentNumber
+      ( ..,
+        DASHDisplayFragmentNumber_ALWAYS,
+        DASHDisplayFragmentNumber_NEVER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DASHDisplayFragmentNumber = DASHDisplayFragmentNumber'
+  { fromDASHDisplayFragmentNumber ::
+      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 DASHDisplayFragmentNumber_ALWAYS :: DASHDisplayFragmentNumber
+pattern DASHDisplayFragmentNumber_ALWAYS = DASHDisplayFragmentNumber' "ALWAYS"
+
+pattern DASHDisplayFragmentNumber_NEVER :: DASHDisplayFragmentNumber
+pattern DASHDisplayFragmentNumber_NEVER = DASHDisplayFragmentNumber' "NEVER"
+
+{-# COMPLETE
+  DASHDisplayFragmentNumber_ALWAYS,
+  DASHDisplayFragmentNumber_NEVER,
+  DASHDisplayFragmentNumber'
+  #-}
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHDisplayFragmentTimestamp.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHDisplayFragmentTimestamp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHDisplayFragmentTimestamp.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.KinesisVideoArchivedMedia.Types.DASHDisplayFragmentTimestamp
+-- 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.KinesisVideoArchivedMedia.Types.DASHDisplayFragmentTimestamp
+  ( DASHDisplayFragmentTimestamp
+      ( ..,
+        DASHDisplayFragmentTimestamp_ALWAYS,
+        DASHDisplayFragmentTimestamp_NEVER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DASHDisplayFragmentTimestamp = DASHDisplayFragmentTimestamp'
+  { fromDASHDisplayFragmentTimestamp ::
+      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 DASHDisplayFragmentTimestamp_ALWAYS :: DASHDisplayFragmentTimestamp
+pattern DASHDisplayFragmentTimestamp_ALWAYS = DASHDisplayFragmentTimestamp' "ALWAYS"
+
+pattern DASHDisplayFragmentTimestamp_NEVER :: DASHDisplayFragmentTimestamp
+pattern DASHDisplayFragmentTimestamp_NEVER = DASHDisplayFragmentTimestamp' "NEVER"
+
+{-# COMPLETE
+  DASHDisplayFragmentTimestamp_ALWAYS,
+  DASHDisplayFragmentTimestamp_NEVER,
+  DASHDisplayFragmentTimestamp'
+  #-}
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHFragmentSelector.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHFragmentSelector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHFragmentSelector.hs
@@ -0,0 +1,179 @@
+{-# 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.KinesisVideoArchivedMedia.Types.DASHFragmentSelector
+-- 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.KinesisVideoArchivedMedia.Types.DASHFragmentSelector where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KinesisVideoArchivedMedia.Types.DASHFragmentSelectorType
+import Amazonka.KinesisVideoArchivedMedia.Types.DASHTimestampRange
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the range of timestamps for the requested media, and the source
+-- of the timestamps.
+--
+-- /See:/ 'newDASHFragmentSelector' smart constructor.
+data DASHFragmentSelector = DASHFragmentSelector'
+  { -- | The source of the timestamps for the requested media.
+    --
+    -- When @FragmentSelectorType@ is set to @PRODUCER_TIMESTAMP@ and
+    -- GetDASHStreamingSessionURLInput$PlaybackMode is @ON_DEMAND@ or
+    -- @LIVE_REPLAY@, the first fragment ingested with a producer timestamp
+    -- within the specified FragmentSelector$TimestampRange is included in the
+    -- media playlist. In addition, the fragments with producer timestamps
+    -- within the @TimestampRange@ ingested immediately following the first
+    -- fragment (up to the
+    -- GetDASHStreamingSessionURLInput$MaxManifestFragmentResults value) are
+    -- included.
+    --
+    -- Fragments that have duplicate producer timestamps are deduplicated. This
+    -- means that if producers are producing a stream of fragments with
+    -- producer timestamps that are approximately equal to the true clock time,
+    -- the MPEG-DASH manifest will contain all of the fragments within the
+    -- requested timestamp range. If some fragments are ingested within the
+    -- same time range and very different points in time, only the oldest
+    -- ingested collection of fragments are returned.
+    --
+    -- When @FragmentSelectorType@ is set to @PRODUCER_TIMESTAMP@ and
+    -- GetDASHStreamingSessionURLInput$PlaybackMode is @LIVE@, the producer
+    -- timestamps are used in the MP4 fragments and for deduplication. But the
+    -- most recently ingested fragments based on server timestamps are included
+    -- in the MPEG-DASH manifest. This means that even if fragments ingested in
+    -- the past have producer timestamps with values now, they are not included
+    -- in the HLS media playlist.
+    --
+    -- The default is @SERVER_TIMESTAMP@.
+    fragmentSelectorType :: Prelude.Maybe DASHFragmentSelectorType,
+    -- | The start and end of the timestamp range for the requested media.
+    --
+    -- This value should not be present if @PlaybackType@ is @LIVE@.
+    timestampRange :: Prelude.Maybe DASHTimestampRange
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DASHFragmentSelector' 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:
+--
+-- 'fragmentSelectorType', 'dASHFragmentSelector_fragmentSelectorType' - The source of the timestamps for the requested media.
+--
+-- When @FragmentSelectorType@ is set to @PRODUCER_TIMESTAMP@ and
+-- GetDASHStreamingSessionURLInput$PlaybackMode is @ON_DEMAND@ or
+-- @LIVE_REPLAY@, the first fragment ingested with a producer timestamp
+-- within the specified FragmentSelector$TimestampRange is included in the
+-- media playlist. In addition, the fragments with producer timestamps
+-- within the @TimestampRange@ ingested immediately following the first
+-- fragment (up to the
+-- GetDASHStreamingSessionURLInput$MaxManifestFragmentResults value) are
+-- included.
+--
+-- Fragments that have duplicate producer timestamps are deduplicated. This
+-- means that if producers are producing a stream of fragments with
+-- producer timestamps that are approximately equal to the true clock time,
+-- the MPEG-DASH manifest will contain all of the fragments within the
+-- requested timestamp range. If some fragments are ingested within the
+-- same time range and very different points in time, only the oldest
+-- ingested collection of fragments are returned.
+--
+-- When @FragmentSelectorType@ is set to @PRODUCER_TIMESTAMP@ and
+-- GetDASHStreamingSessionURLInput$PlaybackMode is @LIVE@, the producer
+-- timestamps are used in the MP4 fragments and for deduplication. But the
+-- most recently ingested fragments based on server timestamps are included
+-- in the MPEG-DASH manifest. This means that even if fragments ingested in
+-- the past have producer timestamps with values now, they are not included
+-- in the HLS media playlist.
+--
+-- The default is @SERVER_TIMESTAMP@.
+--
+-- 'timestampRange', 'dASHFragmentSelector_timestampRange' - The start and end of the timestamp range for the requested media.
+--
+-- This value should not be present if @PlaybackType@ is @LIVE@.
+newDASHFragmentSelector ::
+  DASHFragmentSelector
+newDASHFragmentSelector =
+  DASHFragmentSelector'
+    { fragmentSelectorType =
+        Prelude.Nothing,
+      timestampRange = Prelude.Nothing
+    }
+
+-- | The source of the timestamps for the requested media.
+--
+-- When @FragmentSelectorType@ is set to @PRODUCER_TIMESTAMP@ and
+-- GetDASHStreamingSessionURLInput$PlaybackMode is @ON_DEMAND@ or
+-- @LIVE_REPLAY@, the first fragment ingested with a producer timestamp
+-- within the specified FragmentSelector$TimestampRange is included in the
+-- media playlist. In addition, the fragments with producer timestamps
+-- within the @TimestampRange@ ingested immediately following the first
+-- fragment (up to the
+-- GetDASHStreamingSessionURLInput$MaxManifestFragmentResults value) are
+-- included.
+--
+-- Fragments that have duplicate producer timestamps are deduplicated. This
+-- means that if producers are producing a stream of fragments with
+-- producer timestamps that are approximately equal to the true clock time,
+-- the MPEG-DASH manifest will contain all of the fragments within the
+-- requested timestamp range. If some fragments are ingested within the
+-- same time range and very different points in time, only the oldest
+-- ingested collection of fragments are returned.
+--
+-- When @FragmentSelectorType@ is set to @PRODUCER_TIMESTAMP@ and
+-- GetDASHStreamingSessionURLInput$PlaybackMode is @LIVE@, the producer
+-- timestamps are used in the MP4 fragments and for deduplication. But the
+-- most recently ingested fragments based on server timestamps are included
+-- in the MPEG-DASH manifest. This means that even if fragments ingested in
+-- the past have producer timestamps with values now, they are not included
+-- in the HLS media playlist.
+--
+-- The default is @SERVER_TIMESTAMP@.
+dASHFragmentSelector_fragmentSelectorType :: Lens.Lens' DASHFragmentSelector (Prelude.Maybe DASHFragmentSelectorType)
+dASHFragmentSelector_fragmentSelectorType = Lens.lens (\DASHFragmentSelector' {fragmentSelectorType} -> fragmentSelectorType) (\s@DASHFragmentSelector' {} a -> s {fragmentSelectorType = a} :: DASHFragmentSelector)
+
+-- | The start and end of the timestamp range for the requested media.
+--
+-- This value should not be present if @PlaybackType@ is @LIVE@.
+dASHFragmentSelector_timestampRange :: Lens.Lens' DASHFragmentSelector (Prelude.Maybe DASHTimestampRange)
+dASHFragmentSelector_timestampRange = Lens.lens (\DASHFragmentSelector' {timestampRange} -> timestampRange) (\s@DASHFragmentSelector' {} a -> s {timestampRange = a} :: DASHFragmentSelector)
+
+instance Prelude.Hashable DASHFragmentSelector where
+  hashWithSalt _salt DASHFragmentSelector' {..} =
+    _salt
+      `Prelude.hashWithSalt` fragmentSelectorType
+      `Prelude.hashWithSalt` timestampRange
+
+instance Prelude.NFData DASHFragmentSelector where
+  rnf DASHFragmentSelector' {..} =
+    Prelude.rnf fragmentSelectorType
+      `Prelude.seq` Prelude.rnf timestampRange
+
+instance Data.ToJSON DASHFragmentSelector where
+  toJSON DASHFragmentSelector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FragmentSelectorType" Data..=)
+              Prelude.<$> fragmentSelectorType,
+            ("TimestampRange" Data..=)
+              Prelude.<$> timestampRange
+          ]
+      )
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHFragmentSelectorType.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHFragmentSelectorType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHFragmentSelectorType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.KinesisVideoArchivedMedia.Types.DASHFragmentSelectorType
+-- 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.KinesisVideoArchivedMedia.Types.DASHFragmentSelectorType
+  ( DASHFragmentSelectorType
+      ( ..,
+        DASHFragmentSelectorType_PRODUCER_TIMESTAMP,
+        DASHFragmentSelectorType_SERVER_TIMESTAMP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DASHFragmentSelectorType = DASHFragmentSelectorType'
+  { fromDASHFragmentSelectorType ::
+      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 DASHFragmentSelectorType_PRODUCER_TIMESTAMP :: DASHFragmentSelectorType
+pattern DASHFragmentSelectorType_PRODUCER_TIMESTAMP = DASHFragmentSelectorType' "PRODUCER_TIMESTAMP"
+
+pattern DASHFragmentSelectorType_SERVER_TIMESTAMP :: DASHFragmentSelectorType
+pattern DASHFragmentSelectorType_SERVER_TIMESTAMP = DASHFragmentSelectorType' "SERVER_TIMESTAMP"
+
+{-# COMPLETE
+  DASHFragmentSelectorType_PRODUCER_TIMESTAMP,
+  DASHFragmentSelectorType_SERVER_TIMESTAMP,
+  DASHFragmentSelectorType'
+  #-}
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHPlaybackMode.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHPlaybackMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHPlaybackMode.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.KinesisVideoArchivedMedia.Types.DASHPlaybackMode
+-- 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.KinesisVideoArchivedMedia.Types.DASHPlaybackMode
+  ( DASHPlaybackMode
+      ( ..,
+        DASHPlaybackMode_LIVE,
+        DASHPlaybackMode_LIVE_REPLAY,
+        DASHPlaybackMode_ON_DEMAND
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DASHPlaybackMode = DASHPlaybackMode'
+  { fromDASHPlaybackMode ::
+      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 DASHPlaybackMode_LIVE :: DASHPlaybackMode
+pattern DASHPlaybackMode_LIVE = DASHPlaybackMode' "LIVE"
+
+pattern DASHPlaybackMode_LIVE_REPLAY :: DASHPlaybackMode
+pattern DASHPlaybackMode_LIVE_REPLAY = DASHPlaybackMode' "LIVE_REPLAY"
+
+pattern DASHPlaybackMode_ON_DEMAND :: DASHPlaybackMode
+pattern DASHPlaybackMode_ON_DEMAND = DASHPlaybackMode' "ON_DEMAND"
+
+{-# COMPLETE
+  DASHPlaybackMode_LIVE,
+  DASHPlaybackMode_LIVE_REPLAY,
+  DASHPlaybackMode_ON_DEMAND,
+  DASHPlaybackMode'
+  #-}
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHTimestampRange.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHTimestampRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/DASHTimestampRange.hs
@@ -0,0 +1,160 @@
+{-# 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.KinesisVideoArchivedMedia.Types.DASHTimestampRange
+-- 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.KinesisVideoArchivedMedia.Types.DASHTimestampRange where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The start and end of the timestamp range for the requested media.
+--
+-- This value should not be present if @PlaybackType@ is @LIVE@.
+--
+-- The values in @DASHimestampRange@ are inclusive. Fragments that start
+-- exactly at or after the start time are included in the session.
+-- Fragments that start before the start time and continue past it are not
+-- included in the session.
+--
+-- /See:/ 'newDASHTimestampRange' smart constructor.
+data DASHTimestampRange = DASHTimestampRange'
+  { -- | The end of the timestamp range for the requested media. This value must
+    -- be within 24 hours of the specified @StartTimestamp@, and it must be
+    -- later than the @StartTimestamp@ value.
+    --
+    -- If @FragmentSelectorType@ for the request is @SERVER_TIMESTAMP@, this
+    -- value must be in the past.
+    --
+    -- The @EndTimestamp@ value is required for @ON_DEMAND@ mode, but optional
+    -- for @LIVE_REPLAY@ mode. If the @EndTimestamp@ is not set for
+    -- @LIVE_REPLAY@ mode then the session will continue to include newly
+    -- ingested fragments until the session expires.
+    --
+    -- This value is inclusive. The @EndTimestamp@ is compared to the
+    -- (starting) timestamp of the fragment. Fragments that start before the
+    -- @EndTimestamp@ value and continue past it are included in the session.
+    endTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The start of the timestamp range for the requested media.
+    --
+    -- If the @DASHTimestampRange@ value is specified, the @StartTimestamp@
+    -- value is required.
+    --
+    -- Only fragments that start exactly at or after @StartTimestamp@ are
+    -- included in the session. Fragments that start before @StartTimestamp@
+    -- and continue past it aren\'t included in the session. If
+    -- @FragmentSelectorType@ is @SERVER_TIMESTAMP@, the @StartTimestamp@ must
+    -- be later than the stream head.
+    startTimestamp :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DASHTimestampRange' 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:
+--
+-- 'endTimestamp', 'dASHTimestampRange_endTimestamp' - The end of the timestamp range for the requested media. This value must
+-- be within 24 hours of the specified @StartTimestamp@, and it must be
+-- later than the @StartTimestamp@ value.
+--
+-- If @FragmentSelectorType@ for the request is @SERVER_TIMESTAMP@, this
+-- value must be in the past.
+--
+-- The @EndTimestamp@ value is required for @ON_DEMAND@ mode, but optional
+-- for @LIVE_REPLAY@ mode. If the @EndTimestamp@ is not set for
+-- @LIVE_REPLAY@ mode then the session will continue to include newly
+-- ingested fragments until the session expires.
+--
+-- This value is inclusive. The @EndTimestamp@ is compared to the
+-- (starting) timestamp of the fragment. Fragments that start before the
+-- @EndTimestamp@ value and continue past it are included in the session.
+--
+-- 'startTimestamp', 'dASHTimestampRange_startTimestamp' - The start of the timestamp range for the requested media.
+--
+-- If the @DASHTimestampRange@ value is specified, the @StartTimestamp@
+-- value is required.
+--
+-- Only fragments that start exactly at or after @StartTimestamp@ are
+-- included in the session. Fragments that start before @StartTimestamp@
+-- and continue past it aren\'t included in the session. If
+-- @FragmentSelectorType@ is @SERVER_TIMESTAMP@, the @StartTimestamp@ must
+-- be later than the stream head.
+newDASHTimestampRange ::
+  DASHTimestampRange
+newDASHTimestampRange =
+  DASHTimestampRange'
+    { endTimestamp = Prelude.Nothing,
+      startTimestamp = Prelude.Nothing
+    }
+
+-- | The end of the timestamp range for the requested media. This value must
+-- be within 24 hours of the specified @StartTimestamp@, and it must be
+-- later than the @StartTimestamp@ value.
+--
+-- If @FragmentSelectorType@ for the request is @SERVER_TIMESTAMP@, this
+-- value must be in the past.
+--
+-- The @EndTimestamp@ value is required for @ON_DEMAND@ mode, but optional
+-- for @LIVE_REPLAY@ mode. If the @EndTimestamp@ is not set for
+-- @LIVE_REPLAY@ mode then the session will continue to include newly
+-- ingested fragments until the session expires.
+--
+-- This value is inclusive. The @EndTimestamp@ is compared to the
+-- (starting) timestamp of the fragment. Fragments that start before the
+-- @EndTimestamp@ value and continue past it are included in the session.
+dASHTimestampRange_endTimestamp :: Lens.Lens' DASHTimestampRange (Prelude.Maybe Prelude.UTCTime)
+dASHTimestampRange_endTimestamp = Lens.lens (\DASHTimestampRange' {endTimestamp} -> endTimestamp) (\s@DASHTimestampRange' {} a -> s {endTimestamp = a} :: DASHTimestampRange) Prelude.. Lens.mapping Data._Time
+
+-- | The start of the timestamp range for the requested media.
+--
+-- If the @DASHTimestampRange@ value is specified, the @StartTimestamp@
+-- value is required.
+--
+-- Only fragments that start exactly at or after @StartTimestamp@ are
+-- included in the session. Fragments that start before @StartTimestamp@
+-- and continue past it aren\'t included in the session. If
+-- @FragmentSelectorType@ is @SERVER_TIMESTAMP@, the @StartTimestamp@ must
+-- be later than the stream head.
+dASHTimestampRange_startTimestamp :: Lens.Lens' DASHTimestampRange (Prelude.Maybe Prelude.UTCTime)
+dASHTimestampRange_startTimestamp = Lens.lens (\DASHTimestampRange' {startTimestamp} -> startTimestamp) (\s@DASHTimestampRange' {} a -> s {startTimestamp = a} :: DASHTimestampRange) Prelude.. Lens.mapping Data._Time
+
+instance Prelude.Hashable DASHTimestampRange where
+  hashWithSalt _salt DASHTimestampRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` endTimestamp
+      `Prelude.hashWithSalt` startTimestamp
+
+instance Prelude.NFData DASHTimestampRange where
+  rnf DASHTimestampRange' {..} =
+    Prelude.rnf endTimestamp
+      `Prelude.seq` Prelude.rnf startTimestamp
+
+instance Data.ToJSON DASHTimestampRange where
+  toJSON DASHTimestampRange' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EndTimestamp" Data..=) Prelude.<$> endTimestamp,
+            ("StartTimestamp" Data..=)
+              Prelude.<$> startTimestamp
+          ]
+      )
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/Format.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/Format.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/Format.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.KinesisVideoArchivedMedia.Types.Format
+-- 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.KinesisVideoArchivedMedia.Types.Format
+  ( Format
+      ( ..,
+        Format_JPEG,
+        Format_PNG
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Format = Format' {fromFormat :: 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 Format_JPEG :: Format
+pattern Format_JPEG = Format' "JPEG"
+
+pattern Format_PNG :: Format
+pattern Format_PNG = Format' "PNG"
+
+{-# COMPLETE
+  Format_JPEG,
+  Format_PNG,
+  Format'
+  #-}
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/FormatConfigKey.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/FormatConfigKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/FormatConfigKey.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.KinesisVideoArchivedMedia.Types.FormatConfigKey
+-- 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.KinesisVideoArchivedMedia.Types.FormatConfigKey
+  ( FormatConfigKey
+      ( ..,
+        FormatConfigKey_JPEGQuality
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FormatConfigKey = FormatConfigKey'
+  { fromFormatConfigKey ::
+      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 FormatConfigKey_JPEGQuality :: FormatConfigKey
+pattern FormatConfigKey_JPEGQuality = FormatConfigKey' "JPEGQuality"
+
+{-# COMPLETE
+  FormatConfigKey_JPEGQuality,
+  FormatConfigKey'
+  #-}
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/Fragment.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/Fragment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/Fragment.hs
@@ -0,0 +1,127 @@
+{-# 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.KinesisVideoArchivedMedia.Types.Fragment
+-- 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.KinesisVideoArchivedMedia.Types.Fragment 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
+
+-- | Represents a segment of video or other time-delimited data.
+--
+-- /See:/ 'newFragment' smart constructor.
+data Fragment = Fragment'
+  { -- | The playback duration or other time value associated with the fragment.
+    fragmentLengthInMilliseconds :: Prelude.Maybe Prelude.Integer,
+    -- | The unique identifier of the fragment. This value monotonically
+    -- increases based on the ingestion order.
+    fragmentNumber :: Prelude.Maybe Prelude.Text,
+    -- | The total fragment size, including information about the fragment and
+    -- contained media data.
+    fragmentSizeInBytes :: Prelude.Maybe Prelude.Integer,
+    -- | The timestamp from the producer corresponding to the fragment.
+    producerTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The timestamp from the AWS server corresponding to the fragment.
+    serverTimestamp :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Fragment' 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:
+--
+-- 'fragmentLengthInMilliseconds', 'fragment_fragmentLengthInMilliseconds' - The playback duration or other time value associated with the fragment.
+--
+-- 'fragmentNumber', 'fragment_fragmentNumber' - The unique identifier of the fragment. This value monotonically
+-- increases based on the ingestion order.
+--
+-- 'fragmentSizeInBytes', 'fragment_fragmentSizeInBytes' - The total fragment size, including information about the fragment and
+-- contained media data.
+--
+-- 'producerTimestamp', 'fragment_producerTimestamp' - The timestamp from the producer corresponding to the fragment.
+--
+-- 'serverTimestamp', 'fragment_serverTimestamp' - The timestamp from the AWS server corresponding to the fragment.
+newFragment ::
+  Fragment
+newFragment =
+  Fragment'
+    { fragmentLengthInMilliseconds =
+        Prelude.Nothing,
+      fragmentNumber = Prelude.Nothing,
+      fragmentSizeInBytes = Prelude.Nothing,
+      producerTimestamp = Prelude.Nothing,
+      serverTimestamp = Prelude.Nothing
+    }
+
+-- | The playback duration or other time value associated with the fragment.
+fragment_fragmentLengthInMilliseconds :: Lens.Lens' Fragment (Prelude.Maybe Prelude.Integer)
+fragment_fragmentLengthInMilliseconds = Lens.lens (\Fragment' {fragmentLengthInMilliseconds} -> fragmentLengthInMilliseconds) (\s@Fragment' {} a -> s {fragmentLengthInMilliseconds = a} :: Fragment)
+
+-- | The unique identifier of the fragment. This value monotonically
+-- increases based on the ingestion order.
+fragment_fragmentNumber :: Lens.Lens' Fragment (Prelude.Maybe Prelude.Text)
+fragment_fragmentNumber = Lens.lens (\Fragment' {fragmentNumber} -> fragmentNumber) (\s@Fragment' {} a -> s {fragmentNumber = a} :: Fragment)
+
+-- | The total fragment size, including information about the fragment and
+-- contained media data.
+fragment_fragmentSizeInBytes :: Lens.Lens' Fragment (Prelude.Maybe Prelude.Integer)
+fragment_fragmentSizeInBytes = Lens.lens (\Fragment' {fragmentSizeInBytes} -> fragmentSizeInBytes) (\s@Fragment' {} a -> s {fragmentSizeInBytes = a} :: Fragment)
+
+-- | The timestamp from the producer corresponding to the fragment.
+fragment_producerTimestamp :: Lens.Lens' Fragment (Prelude.Maybe Prelude.UTCTime)
+fragment_producerTimestamp = Lens.lens (\Fragment' {producerTimestamp} -> producerTimestamp) (\s@Fragment' {} a -> s {producerTimestamp = a} :: Fragment) Prelude.. Lens.mapping Data._Time
+
+-- | The timestamp from the AWS server corresponding to the fragment.
+fragment_serverTimestamp :: Lens.Lens' Fragment (Prelude.Maybe Prelude.UTCTime)
+fragment_serverTimestamp = Lens.lens (\Fragment' {serverTimestamp} -> serverTimestamp) (\s@Fragment' {} a -> s {serverTimestamp = a} :: Fragment) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON Fragment where
+  parseJSON =
+    Data.withObject
+      "Fragment"
+      ( \x ->
+          Fragment'
+            Prelude.<$> (x Data..:? "FragmentLengthInMilliseconds")
+            Prelude.<*> (x Data..:? "FragmentNumber")
+            Prelude.<*> (x Data..:? "FragmentSizeInBytes")
+            Prelude.<*> (x Data..:? "ProducerTimestamp")
+            Prelude.<*> (x Data..:? "ServerTimestamp")
+      )
+
+instance Prelude.Hashable Fragment where
+  hashWithSalt _salt Fragment' {..} =
+    _salt
+      `Prelude.hashWithSalt` fragmentLengthInMilliseconds
+      `Prelude.hashWithSalt` fragmentNumber
+      `Prelude.hashWithSalt` fragmentSizeInBytes
+      `Prelude.hashWithSalt` producerTimestamp
+      `Prelude.hashWithSalt` serverTimestamp
+
+instance Prelude.NFData Fragment where
+  rnf Fragment' {..} =
+    Prelude.rnf fragmentLengthInMilliseconds
+      `Prelude.seq` Prelude.rnf fragmentNumber
+      `Prelude.seq` Prelude.rnf fragmentSizeInBytes
+      `Prelude.seq` Prelude.rnf producerTimestamp
+      `Prelude.seq` Prelude.rnf serverTimestamp
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/FragmentSelector.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/FragmentSelector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/FragmentSelector.hs
@@ -0,0 +1,114 @@
+{-# 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.KinesisVideoArchivedMedia.Types.FragmentSelector
+-- 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.KinesisVideoArchivedMedia.Types.FragmentSelector where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KinesisVideoArchivedMedia.Types.FragmentSelectorType
+import Amazonka.KinesisVideoArchivedMedia.Types.TimestampRange
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the timestamp range and timestamp origin of a range of
+-- fragments.
+--
+-- Only fragments with a start timestamp greater than or equal to the given
+-- start time and less than or equal to the end time are returned. For
+-- example, if a stream contains fragments with the following start
+-- timestamps:
+--
+-- -   00:00:00
+--
+-- -   00:00:02
+--
+-- -   00:00:04
+--
+-- -   00:00:06
+--
+-- A fragment selector range with a start time of 00:00:01 and end time of
+-- 00:00:04 would return the fragments with start times of 00:00:02 and
+-- 00:00:04.
+--
+-- /See:/ 'newFragmentSelector' smart constructor.
+data FragmentSelector = FragmentSelector'
+  { -- | The origin of the timestamps to use (Server or Producer).
+    fragmentSelectorType :: FragmentSelectorType,
+    -- | The range of timestamps to return.
+    timestampRange :: TimestampRange
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FragmentSelector' 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:
+--
+-- 'fragmentSelectorType', 'fragmentSelector_fragmentSelectorType' - The origin of the timestamps to use (Server or Producer).
+--
+-- 'timestampRange', 'fragmentSelector_timestampRange' - The range of timestamps to return.
+newFragmentSelector ::
+  -- | 'fragmentSelectorType'
+  FragmentSelectorType ->
+  -- | 'timestampRange'
+  TimestampRange ->
+  FragmentSelector
+newFragmentSelector
+  pFragmentSelectorType_
+  pTimestampRange_ =
+    FragmentSelector'
+      { fragmentSelectorType =
+          pFragmentSelectorType_,
+        timestampRange = pTimestampRange_
+      }
+
+-- | The origin of the timestamps to use (Server or Producer).
+fragmentSelector_fragmentSelectorType :: Lens.Lens' FragmentSelector FragmentSelectorType
+fragmentSelector_fragmentSelectorType = Lens.lens (\FragmentSelector' {fragmentSelectorType} -> fragmentSelectorType) (\s@FragmentSelector' {} a -> s {fragmentSelectorType = a} :: FragmentSelector)
+
+-- | The range of timestamps to return.
+fragmentSelector_timestampRange :: Lens.Lens' FragmentSelector TimestampRange
+fragmentSelector_timestampRange = Lens.lens (\FragmentSelector' {timestampRange} -> timestampRange) (\s@FragmentSelector' {} a -> s {timestampRange = a} :: FragmentSelector)
+
+instance Prelude.Hashable FragmentSelector where
+  hashWithSalt _salt FragmentSelector' {..} =
+    _salt
+      `Prelude.hashWithSalt` fragmentSelectorType
+      `Prelude.hashWithSalt` timestampRange
+
+instance Prelude.NFData FragmentSelector where
+  rnf FragmentSelector' {..} =
+    Prelude.rnf fragmentSelectorType
+      `Prelude.seq` Prelude.rnf timestampRange
+
+instance Data.ToJSON FragmentSelector where
+  toJSON FragmentSelector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "FragmentSelectorType"
+                  Data..= fragmentSelectorType
+              ),
+            Prelude.Just
+              ("TimestampRange" Data..= timestampRange)
+          ]
+      )
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/FragmentSelectorType.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/FragmentSelectorType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/FragmentSelectorType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.KinesisVideoArchivedMedia.Types.FragmentSelectorType
+-- 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.KinesisVideoArchivedMedia.Types.FragmentSelectorType
+  ( FragmentSelectorType
+      ( ..,
+        FragmentSelectorType_PRODUCER_TIMESTAMP,
+        FragmentSelectorType_SERVER_TIMESTAMP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FragmentSelectorType = FragmentSelectorType'
+  { fromFragmentSelectorType ::
+      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 FragmentSelectorType_PRODUCER_TIMESTAMP :: FragmentSelectorType
+pattern FragmentSelectorType_PRODUCER_TIMESTAMP = FragmentSelectorType' "PRODUCER_TIMESTAMP"
+
+pattern FragmentSelectorType_SERVER_TIMESTAMP :: FragmentSelectorType
+pattern FragmentSelectorType_SERVER_TIMESTAMP = FragmentSelectorType' "SERVER_TIMESTAMP"
+
+{-# COMPLETE
+  FragmentSelectorType_PRODUCER_TIMESTAMP,
+  FragmentSelectorType_SERVER_TIMESTAMP,
+  FragmentSelectorType'
+  #-}
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSDiscontinuityMode.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSDiscontinuityMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSDiscontinuityMode.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.KinesisVideoArchivedMedia.Types.HLSDiscontinuityMode
+-- 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.KinesisVideoArchivedMedia.Types.HLSDiscontinuityMode
+  ( HLSDiscontinuityMode
+      ( ..,
+        HLSDiscontinuityMode_ALWAYS,
+        HLSDiscontinuityMode_NEVER,
+        HLSDiscontinuityMode_ON_DISCONTINUITY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype HLSDiscontinuityMode = HLSDiscontinuityMode'
+  { fromHLSDiscontinuityMode ::
+      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 HLSDiscontinuityMode_ALWAYS :: HLSDiscontinuityMode
+pattern HLSDiscontinuityMode_ALWAYS = HLSDiscontinuityMode' "ALWAYS"
+
+pattern HLSDiscontinuityMode_NEVER :: HLSDiscontinuityMode
+pattern HLSDiscontinuityMode_NEVER = HLSDiscontinuityMode' "NEVER"
+
+pattern HLSDiscontinuityMode_ON_DISCONTINUITY :: HLSDiscontinuityMode
+pattern HLSDiscontinuityMode_ON_DISCONTINUITY = HLSDiscontinuityMode' "ON_DISCONTINUITY"
+
+{-# COMPLETE
+  HLSDiscontinuityMode_ALWAYS,
+  HLSDiscontinuityMode_NEVER,
+  HLSDiscontinuityMode_ON_DISCONTINUITY,
+  HLSDiscontinuityMode'
+  #-}
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSDisplayFragmentTimestamp.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSDisplayFragmentTimestamp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSDisplayFragmentTimestamp.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.KinesisVideoArchivedMedia.Types.HLSDisplayFragmentTimestamp
+-- 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.KinesisVideoArchivedMedia.Types.HLSDisplayFragmentTimestamp
+  ( HLSDisplayFragmentTimestamp
+      ( ..,
+        HLSDisplayFragmentTimestamp_ALWAYS,
+        HLSDisplayFragmentTimestamp_NEVER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype HLSDisplayFragmentTimestamp = HLSDisplayFragmentTimestamp'
+  { fromHLSDisplayFragmentTimestamp ::
+      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 HLSDisplayFragmentTimestamp_ALWAYS :: HLSDisplayFragmentTimestamp
+pattern HLSDisplayFragmentTimestamp_ALWAYS = HLSDisplayFragmentTimestamp' "ALWAYS"
+
+pattern HLSDisplayFragmentTimestamp_NEVER :: HLSDisplayFragmentTimestamp
+pattern HLSDisplayFragmentTimestamp_NEVER = HLSDisplayFragmentTimestamp' "NEVER"
+
+{-# COMPLETE
+  HLSDisplayFragmentTimestamp_ALWAYS,
+  HLSDisplayFragmentTimestamp_NEVER,
+  HLSDisplayFragmentTimestamp'
+  #-}
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSFragmentSelector.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSFragmentSelector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSFragmentSelector.hs
@@ -0,0 +1,179 @@
+{-# 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.KinesisVideoArchivedMedia.Types.HLSFragmentSelector
+-- 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.KinesisVideoArchivedMedia.Types.HLSFragmentSelector where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KinesisVideoArchivedMedia.Types.HLSFragmentSelectorType
+import Amazonka.KinesisVideoArchivedMedia.Types.HLSTimestampRange
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the range of timestamps for the requested media, and the source
+-- of the timestamps.
+--
+-- /See:/ 'newHLSFragmentSelector' smart constructor.
+data HLSFragmentSelector = HLSFragmentSelector'
+  { -- | The source of the timestamps for the requested media.
+    --
+    -- When @FragmentSelectorType@ is set to @PRODUCER_TIMESTAMP@ and
+    -- GetHLSStreamingSessionURLInput$PlaybackMode is @ON_DEMAND@ or
+    -- @LIVE_REPLAY@, the first fragment ingested with a producer timestamp
+    -- within the specified FragmentSelector$TimestampRange is included in the
+    -- media playlist. In addition, the fragments with producer timestamps
+    -- within the @TimestampRange@ ingested immediately following the first
+    -- fragment (up to the
+    -- GetHLSStreamingSessionURLInput$MaxMediaPlaylistFragmentResults value)
+    -- are included.
+    --
+    -- Fragments that have duplicate producer timestamps are deduplicated. This
+    -- means that if producers are producing a stream of fragments with
+    -- producer timestamps that are approximately equal to the true clock time,
+    -- the HLS media playlists will contain all of the fragments within the
+    -- requested timestamp range. If some fragments are ingested within the
+    -- same time range and very different points in time, only the oldest
+    -- ingested collection of fragments are returned.
+    --
+    -- When @FragmentSelectorType@ is set to @PRODUCER_TIMESTAMP@ and
+    -- GetHLSStreamingSessionURLInput$PlaybackMode is @LIVE@, the producer
+    -- timestamps are used in the MP4 fragments and for deduplication. But the
+    -- most recently ingested fragments based on server timestamps are included
+    -- in the HLS media playlist. This means that even if fragments ingested in
+    -- the past have producer timestamps with values now, they are not included
+    -- in the HLS media playlist.
+    --
+    -- The default is @SERVER_TIMESTAMP@.
+    fragmentSelectorType :: Prelude.Maybe HLSFragmentSelectorType,
+    -- | The start and end of the timestamp range for the requested media.
+    --
+    -- This value should not be present if @PlaybackType@ is @LIVE@.
+    timestampRange :: Prelude.Maybe HLSTimestampRange
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HLSFragmentSelector' 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:
+--
+-- 'fragmentSelectorType', 'hLSFragmentSelector_fragmentSelectorType' - The source of the timestamps for the requested media.
+--
+-- When @FragmentSelectorType@ is set to @PRODUCER_TIMESTAMP@ and
+-- GetHLSStreamingSessionURLInput$PlaybackMode is @ON_DEMAND@ or
+-- @LIVE_REPLAY@, the first fragment ingested with a producer timestamp
+-- within the specified FragmentSelector$TimestampRange is included in the
+-- media playlist. In addition, the fragments with producer timestamps
+-- within the @TimestampRange@ ingested immediately following the first
+-- fragment (up to the
+-- GetHLSStreamingSessionURLInput$MaxMediaPlaylistFragmentResults value)
+-- are included.
+--
+-- Fragments that have duplicate producer timestamps are deduplicated. This
+-- means that if producers are producing a stream of fragments with
+-- producer timestamps that are approximately equal to the true clock time,
+-- the HLS media playlists will contain all of the fragments within the
+-- requested timestamp range. If some fragments are ingested within the
+-- same time range and very different points in time, only the oldest
+-- ingested collection of fragments are returned.
+--
+-- When @FragmentSelectorType@ is set to @PRODUCER_TIMESTAMP@ and
+-- GetHLSStreamingSessionURLInput$PlaybackMode is @LIVE@, the producer
+-- timestamps are used in the MP4 fragments and for deduplication. But the
+-- most recently ingested fragments based on server timestamps are included
+-- in the HLS media playlist. This means that even if fragments ingested in
+-- the past have producer timestamps with values now, they are not included
+-- in the HLS media playlist.
+--
+-- The default is @SERVER_TIMESTAMP@.
+--
+-- 'timestampRange', 'hLSFragmentSelector_timestampRange' - The start and end of the timestamp range for the requested media.
+--
+-- This value should not be present if @PlaybackType@ is @LIVE@.
+newHLSFragmentSelector ::
+  HLSFragmentSelector
+newHLSFragmentSelector =
+  HLSFragmentSelector'
+    { fragmentSelectorType =
+        Prelude.Nothing,
+      timestampRange = Prelude.Nothing
+    }
+
+-- | The source of the timestamps for the requested media.
+--
+-- When @FragmentSelectorType@ is set to @PRODUCER_TIMESTAMP@ and
+-- GetHLSStreamingSessionURLInput$PlaybackMode is @ON_DEMAND@ or
+-- @LIVE_REPLAY@, the first fragment ingested with a producer timestamp
+-- within the specified FragmentSelector$TimestampRange is included in the
+-- media playlist. In addition, the fragments with producer timestamps
+-- within the @TimestampRange@ ingested immediately following the first
+-- fragment (up to the
+-- GetHLSStreamingSessionURLInput$MaxMediaPlaylistFragmentResults value)
+-- are included.
+--
+-- Fragments that have duplicate producer timestamps are deduplicated. This
+-- means that if producers are producing a stream of fragments with
+-- producer timestamps that are approximately equal to the true clock time,
+-- the HLS media playlists will contain all of the fragments within the
+-- requested timestamp range. If some fragments are ingested within the
+-- same time range and very different points in time, only the oldest
+-- ingested collection of fragments are returned.
+--
+-- When @FragmentSelectorType@ is set to @PRODUCER_TIMESTAMP@ and
+-- GetHLSStreamingSessionURLInput$PlaybackMode is @LIVE@, the producer
+-- timestamps are used in the MP4 fragments and for deduplication. But the
+-- most recently ingested fragments based on server timestamps are included
+-- in the HLS media playlist. This means that even if fragments ingested in
+-- the past have producer timestamps with values now, they are not included
+-- in the HLS media playlist.
+--
+-- The default is @SERVER_TIMESTAMP@.
+hLSFragmentSelector_fragmentSelectorType :: Lens.Lens' HLSFragmentSelector (Prelude.Maybe HLSFragmentSelectorType)
+hLSFragmentSelector_fragmentSelectorType = Lens.lens (\HLSFragmentSelector' {fragmentSelectorType} -> fragmentSelectorType) (\s@HLSFragmentSelector' {} a -> s {fragmentSelectorType = a} :: HLSFragmentSelector)
+
+-- | The start and end of the timestamp range for the requested media.
+--
+-- This value should not be present if @PlaybackType@ is @LIVE@.
+hLSFragmentSelector_timestampRange :: Lens.Lens' HLSFragmentSelector (Prelude.Maybe HLSTimestampRange)
+hLSFragmentSelector_timestampRange = Lens.lens (\HLSFragmentSelector' {timestampRange} -> timestampRange) (\s@HLSFragmentSelector' {} a -> s {timestampRange = a} :: HLSFragmentSelector)
+
+instance Prelude.Hashable HLSFragmentSelector where
+  hashWithSalt _salt HLSFragmentSelector' {..} =
+    _salt
+      `Prelude.hashWithSalt` fragmentSelectorType
+      `Prelude.hashWithSalt` timestampRange
+
+instance Prelude.NFData HLSFragmentSelector where
+  rnf HLSFragmentSelector' {..} =
+    Prelude.rnf fragmentSelectorType
+      `Prelude.seq` Prelude.rnf timestampRange
+
+instance Data.ToJSON HLSFragmentSelector where
+  toJSON HLSFragmentSelector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FragmentSelectorType" Data..=)
+              Prelude.<$> fragmentSelectorType,
+            ("TimestampRange" Data..=)
+              Prelude.<$> timestampRange
+          ]
+      )
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSFragmentSelectorType.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSFragmentSelectorType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSFragmentSelectorType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.KinesisVideoArchivedMedia.Types.HLSFragmentSelectorType
+-- 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.KinesisVideoArchivedMedia.Types.HLSFragmentSelectorType
+  ( HLSFragmentSelectorType
+      ( ..,
+        HLSFragmentSelectorType_PRODUCER_TIMESTAMP,
+        HLSFragmentSelectorType_SERVER_TIMESTAMP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype HLSFragmentSelectorType = HLSFragmentSelectorType'
+  { fromHLSFragmentSelectorType ::
+      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 HLSFragmentSelectorType_PRODUCER_TIMESTAMP :: HLSFragmentSelectorType
+pattern HLSFragmentSelectorType_PRODUCER_TIMESTAMP = HLSFragmentSelectorType' "PRODUCER_TIMESTAMP"
+
+pattern HLSFragmentSelectorType_SERVER_TIMESTAMP :: HLSFragmentSelectorType
+pattern HLSFragmentSelectorType_SERVER_TIMESTAMP = HLSFragmentSelectorType' "SERVER_TIMESTAMP"
+
+{-# COMPLETE
+  HLSFragmentSelectorType_PRODUCER_TIMESTAMP,
+  HLSFragmentSelectorType_SERVER_TIMESTAMP,
+  HLSFragmentSelectorType'
+  #-}
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSPlaybackMode.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSPlaybackMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSPlaybackMode.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.KinesisVideoArchivedMedia.Types.HLSPlaybackMode
+-- 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.KinesisVideoArchivedMedia.Types.HLSPlaybackMode
+  ( HLSPlaybackMode
+      ( ..,
+        HLSPlaybackMode_LIVE,
+        HLSPlaybackMode_LIVE_REPLAY,
+        HLSPlaybackMode_ON_DEMAND
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype HLSPlaybackMode = HLSPlaybackMode'
+  { fromHLSPlaybackMode ::
+      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 HLSPlaybackMode_LIVE :: HLSPlaybackMode
+pattern HLSPlaybackMode_LIVE = HLSPlaybackMode' "LIVE"
+
+pattern HLSPlaybackMode_LIVE_REPLAY :: HLSPlaybackMode
+pattern HLSPlaybackMode_LIVE_REPLAY = HLSPlaybackMode' "LIVE_REPLAY"
+
+pattern HLSPlaybackMode_ON_DEMAND :: HLSPlaybackMode
+pattern HLSPlaybackMode_ON_DEMAND = HLSPlaybackMode' "ON_DEMAND"
+
+{-# COMPLETE
+  HLSPlaybackMode_LIVE,
+  HLSPlaybackMode_LIVE_REPLAY,
+  HLSPlaybackMode_ON_DEMAND,
+  HLSPlaybackMode'
+  #-}
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSTimestampRange.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSTimestampRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/HLSTimestampRange.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.KinesisVideoArchivedMedia.Types.HLSTimestampRange
+-- 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.KinesisVideoArchivedMedia.Types.HLSTimestampRange where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The start and end of the timestamp range for the requested media.
+--
+-- This value should not be present if @PlaybackType@ is @LIVE@.
+--
+-- /See:/ 'newHLSTimestampRange' smart constructor.
+data HLSTimestampRange = HLSTimestampRange'
+  { -- | The end of the timestamp range for the requested media. This value must
+    -- be within 24 hours of the specified @StartTimestamp@, and it must be
+    -- later than the @StartTimestamp@ value.
+    --
+    -- If @FragmentSelectorType@ for the request is @SERVER_TIMESTAMP@, this
+    -- value must be in the past.
+    --
+    -- The @EndTimestamp@ value is required for @ON_DEMAND@ mode, but optional
+    -- for @LIVE_REPLAY@ mode. If the @EndTimestamp@ is not set for
+    -- @LIVE_REPLAY@ mode then the session will continue to include newly
+    -- ingested fragments until the session expires.
+    --
+    -- This value is inclusive. The @EndTimestamp@ is compared to the
+    -- (starting) timestamp of the fragment. Fragments that start before the
+    -- @EndTimestamp@ value and continue past it are included in the session.
+    endTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The start of the timestamp range for the requested media.
+    --
+    -- If the @HLSTimestampRange@ value is specified, the @StartTimestamp@
+    -- value is required.
+    --
+    -- Only fragments that start exactly at or after @StartTimestamp@ are
+    -- included in the session. Fragments that start before @StartTimestamp@
+    -- and continue past it aren\'t included in the session. If
+    -- @FragmentSelectorType@ is @SERVER_TIMESTAMP@, the @StartTimestamp@ must
+    -- be later than the stream head.
+    startTimestamp :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HLSTimestampRange' 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:
+--
+-- 'endTimestamp', 'hLSTimestampRange_endTimestamp' - The end of the timestamp range for the requested media. This value must
+-- be within 24 hours of the specified @StartTimestamp@, and it must be
+-- later than the @StartTimestamp@ value.
+--
+-- If @FragmentSelectorType@ for the request is @SERVER_TIMESTAMP@, this
+-- value must be in the past.
+--
+-- The @EndTimestamp@ value is required for @ON_DEMAND@ mode, but optional
+-- for @LIVE_REPLAY@ mode. If the @EndTimestamp@ is not set for
+-- @LIVE_REPLAY@ mode then the session will continue to include newly
+-- ingested fragments until the session expires.
+--
+-- This value is inclusive. The @EndTimestamp@ is compared to the
+-- (starting) timestamp of the fragment. Fragments that start before the
+-- @EndTimestamp@ value and continue past it are included in the session.
+--
+-- 'startTimestamp', 'hLSTimestampRange_startTimestamp' - The start of the timestamp range for the requested media.
+--
+-- If the @HLSTimestampRange@ value is specified, the @StartTimestamp@
+-- value is required.
+--
+-- Only fragments that start exactly at or after @StartTimestamp@ are
+-- included in the session. Fragments that start before @StartTimestamp@
+-- and continue past it aren\'t included in the session. If
+-- @FragmentSelectorType@ is @SERVER_TIMESTAMP@, the @StartTimestamp@ must
+-- be later than the stream head.
+newHLSTimestampRange ::
+  HLSTimestampRange
+newHLSTimestampRange =
+  HLSTimestampRange'
+    { endTimestamp = Prelude.Nothing,
+      startTimestamp = Prelude.Nothing
+    }
+
+-- | The end of the timestamp range for the requested media. This value must
+-- be within 24 hours of the specified @StartTimestamp@, and it must be
+-- later than the @StartTimestamp@ value.
+--
+-- If @FragmentSelectorType@ for the request is @SERVER_TIMESTAMP@, this
+-- value must be in the past.
+--
+-- The @EndTimestamp@ value is required for @ON_DEMAND@ mode, but optional
+-- for @LIVE_REPLAY@ mode. If the @EndTimestamp@ is not set for
+-- @LIVE_REPLAY@ mode then the session will continue to include newly
+-- ingested fragments until the session expires.
+--
+-- This value is inclusive. The @EndTimestamp@ is compared to the
+-- (starting) timestamp of the fragment. Fragments that start before the
+-- @EndTimestamp@ value and continue past it are included in the session.
+hLSTimestampRange_endTimestamp :: Lens.Lens' HLSTimestampRange (Prelude.Maybe Prelude.UTCTime)
+hLSTimestampRange_endTimestamp = Lens.lens (\HLSTimestampRange' {endTimestamp} -> endTimestamp) (\s@HLSTimestampRange' {} a -> s {endTimestamp = a} :: HLSTimestampRange) Prelude.. Lens.mapping Data._Time
+
+-- | The start of the timestamp range for the requested media.
+--
+-- If the @HLSTimestampRange@ value is specified, the @StartTimestamp@
+-- value is required.
+--
+-- Only fragments that start exactly at or after @StartTimestamp@ are
+-- included in the session. Fragments that start before @StartTimestamp@
+-- and continue past it aren\'t included in the session. If
+-- @FragmentSelectorType@ is @SERVER_TIMESTAMP@, the @StartTimestamp@ must
+-- be later than the stream head.
+hLSTimestampRange_startTimestamp :: Lens.Lens' HLSTimestampRange (Prelude.Maybe Prelude.UTCTime)
+hLSTimestampRange_startTimestamp = Lens.lens (\HLSTimestampRange' {startTimestamp} -> startTimestamp) (\s@HLSTimestampRange' {} a -> s {startTimestamp = a} :: HLSTimestampRange) Prelude.. Lens.mapping Data._Time
+
+instance Prelude.Hashable HLSTimestampRange where
+  hashWithSalt _salt HLSTimestampRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` endTimestamp
+      `Prelude.hashWithSalt` startTimestamp
+
+instance Prelude.NFData HLSTimestampRange where
+  rnf HLSTimestampRange' {..} =
+    Prelude.rnf endTimestamp
+      `Prelude.seq` Prelude.rnf startTimestamp
+
+instance Data.ToJSON HLSTimestampRange where
+  toJSON HLSTimestampRange' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EndTimestamp" Data..=) Prelude.<$> endTimestamp,
+            ("StartTimestamp" Data..=)
+              Prelude.<$> startTimestamp
+          ]
+      )
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/Image.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/Image.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/Image.hs
@@ -0,0 +1,124 @@
+{-# 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.KinesisVideoArchivedMedia.Types.Image
+-- 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.KinesisVideoArchivedMedia.Types.Image where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KinesisVideoArchivedMedia.Types.ImageError
+import qualified Amazonka.Prelude as Prelude
+
+-- | A structure that contains the @Timestamp@, @Error@, and @ImageContent@.
+--
+-- /See:/ 'newImage' smart constructor.
+data Image = Image'
+  { -- | The error message shown when the image for the provided timestamp was
+    -- not extracted due to a non-tryable error. An error will be returned if:
+    --
+    -- -   There is no media that exists for the specified @Timestamp@.
+    --
+    -- -   The media for the specified time does not allow an image to be
+    --     extracted. In this case the media is audio only, or the incorrect
+    --     media has been ingested.
+    error :: Prelude.Maybe ImageError,
+    -- | An attribute of the @Image@ object that is Base64 encoded.
+    imageContent :: Prelude.Maybe Prelude.Text,
+    -- | An attribute of the @Image@ object that is used to extract an image from
+    -- the video stream. This field is used to manage gaps on images or to
+    -- better understand the pagination window.
+    timeStamp :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Image' 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:
+--
+-- 'error', 'image_error' - The error message shown when the image for the provided timestamp was
+-- not extracted due to a non-tryable error. An error will be returned if:
+--
+-- -   There is no media that exists for the specified @Timestamp@.
+--
+-- -   The media for the specified time does not allow an image to be
+--     extracted. In this case the media is audio only, or the incorrect
+--     media has been ingested.
+--
+-- 'imageContent', 'image_imageContent' - An attribute of the @Image@ object that is Base64 encoded.
+--
+-- 'timeStamp', 'image_timeStamp' - An attribute of the @Image@ object that is used to extract an image from
+-- the video stream. This field is used to manage gaps on images or to
+-- better understand the pagination window.
+newImage ::
+  Image
+newImage =
+  Image'
+    { error = Prelude.Nothing,
+      imageContent = Prelude.Nothing,
+      timeStamp = Prelude.Nothing
+    }
+
+-- | The error message shown when the image for the provided timestamp was
+-- not extracted due to a non-tryable error. An error will be returned if:
+--
+-- -   There is no media that exists for the specified @Timestamp@.
+--
+-- -   The media for the specified time does not allow an image to be
+--     extracted. In this case the media is audio only, or the incorrect
+--     media has been ingested.
+image_error :: Lens.Lens' Image (Prelude.Maybe ImageError)
+image_error = Lens.lens (\Image' {error} -> error) (\s@Image' {} a -> s {error = a} :: Image)
+
+-- | An attribute of the @Image@ object that is Base64 encoded.
+image_imageContent :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_imageContent = Lens.lens (\Image' {imageContent} -> imageContent) (\s@Image' {} a -> s {imageContent = a} :: Image)
+
+-- | An attribute of the @Image@ object that is used to extract an image from
+-- the video stream. This field is used to manage gaps on images or to
+-- better understand the pagination window.
+image_timeStamp :: Lens.Lens' Image (Prelude.Maybe Prelude.UTCTime)
+image_timeStamp = Lens.lens (\Image' {timeStamp} -> timeStamp) (\s@Image' {} a -> s {timeStamp = a} :: Image) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON Image where
+  parseJSON =
+    Data.withObject
+      "Image"
+      ( \x ->
+          Image'
+            Prelude.<$> (x Data..:? "Error")
+            Prelude.<*> (x Data..:? "ImageContent")
+            Prelude.<*> (x Data..:? "TimeStamp")
+      )
+
+instance Prelude.Hashable Image where
+  hashWithSalt _salt Image' {..} =
+    _salt
+      `Prelude.hashWithSalt` error
+      `Prelude.hashWithSalt` imageContent
+      `Prelude.hashWithSalt` timeStamp
+
+instance Prelude.NFData Image where
+  rnf Image' {..} =
+    Prelude.rnf error
+      `Prelude.seq` Prelude.rnf imageContent
+      `Prelude.seq` Prelude.rnf timeStamp
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/ImageError.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/ImageError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/ImageError.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.KinesisVideoArchivedMedia.Types.ImageError
+-- 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.KinesisVideoArchivedMedia.Types.ImageError
+  ( ImageError
+      ( ..,
+        ImageError_MEDIA_ERROR,
+        ImageError_NO_MEDIA
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImageError = ImageError'
+  { fromImageError ::
+      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 ImageError_MEDIA_ERROR :: ImageError
+pattern ImageError_MEDIA_ERROR = ImageError' "MEDIA_ERROR"
+
+pattern ImageError_NO_MEDIA :: ImageError
+pattern ImageError_NO_MEDIA = ImageError' "NO_MEDIA"
+
+{-# COMPLETE
+  ImageError_MEDIA_ERROR,
+  ImageError_NO_MEDIA,
+  ImageError'
+  #-}
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/ImageSelectorType.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/ImageSelectorType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/ImageSelectorType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.KinesisVideoArchivedMedia.Types.ImageSelectorType
+-- 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.KinesisVideoArchivedMedia.Types.ImageSelectorType
+  ( ImageSelectorType
+      ( ..,
+        ImageSelectorType_PRODUCER_TIMESTAMP,
+        ImageSelectorType_SERVER_TIMESTAMP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImageSelectorType = ImageSelectorType'
+  { fromImageSelectorType ::
+      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 ImageSelectorType_PRODUCER_TIMESTAMP :: ImageSelectorType
+pattern ImageSelectorType_PRODUCER_TIMESTAMP = ImageSelectorType' "PRODUCER_TIMESTAMP"
+
+pattern ImageSelectorType_SERVER_TIMESTAMP :: ImageSelectorType
+pattern ImageSelectorType_SERVER_TIMESTAMP = ImageSelectorType' "SERVER_TIMESTAMP"
+
+{-# COMPLETE
+  ImageSelectorType_PRODUCER_TIMESTAMP,
+  ImageSelectorType_SERVER_TIMESTAMP,
+  ImageSelectorType'
+  #-}
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Types/TimestampRange.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Types/TimestampRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/Types/TimestampRange.hs
@@ -0,0 +1,95 @@
+{-# 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.KinesisVideoArchivedMedia.Types.TimestampRange
+-- 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.KinesisVideoArchivedMedia.Types.TimestampRange where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The range of timestamps for which to return fragments.
+--
+-- /See:/ 'newTimestampRange' smart constructor.
+data TimestampRange = TimestampRange'
+  { -- | The starting timestamp in the range of timestamps for which to return
+    -- fragments.
+    startTimestamp :: Data.POSIX,
+    -- | The ending timestamp in the range of timestamps for which to return
+    -- fragments.
+    endTimestamp :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TimestampRange' 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:
+--
+-- 'startTimestamp', 'timestampRange_startTimestamp' - The starting timestamp in the range of timestamps for which to return
+-- fragments.
+--
+-- 'endTimestamp', 'timestampRange_endTimestamp' - The ending timestamp in the range of timestamps for which to return
+-- fragments.
+newTimestampRange ::
+  -- | 'startTimestamp'
+  Prelude.UTCTime ->
+  -- | 'endTimestamp'
+  Prelude.UTCTime ->
+  TimestampRange
+newTimestampRange pStartTimestamp_ pEndTimestamp_ =
+  TimestampRange'
+    { startTimestamp =
+        Data._Time Lens.# pStartTimestamp_,
+      endTimestamp = Data._Time Lens.# pEndTimestamp_
+    }
+
+-- | The starting timestamp in the range of timestamps for which to return
+-- fragments.
+timestampRange_startTimestamp :: Lens.Lens' TimestampRange Prelude.UTCTime
+timestampRange_startTimestamp = Lens.lens (\TimestampRange' {startTimestamp} -> startTimestamp) (\s@TimestampRange' {} a -> s {startTimestamp = a} :: TimestampRange) Prelude.. Data._Time
+
+-- | The ending timestamp in the range of timestamps for which to return
+-- fragments.
+timestampRange_endTimestamp :: Lens.Lens' TimestampRange Prelude.UTCTime
+timestampRange_endTimestamp = Lens.lens (\TimestampRange' {endTimestamp} -> endTimestamp) (\s@TimestampRange' {} a -> s {endTimestamp = a} :: TimestampRange) Prelude.. Data._Time
+
+instance Prelude.Hashable TimestampRange where
+  hashWithSalt _salt TimestampRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` startTimestamp
+      `Prelude.hashWithSalt` endTimestamp
+
+instance Prelude.NFData TimestampRange where
+  rnf TimestampRange' {..} =
+    Prelude.rnf startTimestamp
+      `Prelude.seq` Prelude.rnf endTimestamp
+
+instance Data.ToJSON TimestampRange where
+  toJSON TimestampRange' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("StartTimestamp" Data..= startTimestamp),
+            Prelude.Just ("EndTimestamp" Data..= endTimestamp)
+          ]
+      )
diff --git a/gen/Amazonka/KinesisVideoArchivedMedia/Waiters.hs b/gen/Amazonka/KinesisVideoArchivedMedia/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KinesisVideoArchivedMedia/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.KinesisVideoArchivedMedia.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.KinesisVideoArchivedMedia.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KinesisVideoArchivedMedia.Lens
+import Amazonka.KinesisVideoArchivedMedia.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/gen/Network/AWS/KinesisVideoArchivedMedia.hs b/gen/Network/AWS/KinesisVideoArchivedMedia.hs
deleted file mode 100644
--- a/gen/Network/AWS/KinesisVideoArchivedMedia.hs
+++ /dev/null
@@ -1,109 +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.KinesisVideoArchivedMedia
--- 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.KinesisVideoArchivedMedia
-    (
-    -- * Service Configuration
-      kinesisVideoArchivedMedia
-
-    -- * Errors
-    -- $errors
-
-    -- ** InvalidArgumentException
-    , _InvalidArgumentException
-
-    -- ** NotAuthorizedException
-    , _NotAuthorizedException
-
-    -- ** ClientLimitExceededException
-    , _ClientLimitExceededException
-
-    -- ** ResourceNotFoundException
-    , _ResourceNotFoundException
-
-    -- * Waiters
-    -- $waiters
-
-    -- * Operations
-    -- $operations
-
-    -- ** GetMediaForFragmentList
-    , module Network.AWS.KinesisVideoArchivedMedia.GetMediaForFragmentList
-
-    -- ** ListFragments
-    , module Network.AWS.KinesisVideoArchivedMedia.ListFragments
-
-    -- * Types
-
-    -- ** FragmentSelectorType
-    , FragmentSelectorType (..)
-
-    -- ** Fragment
-    , Fragment
-    , fragment
-    , fFragmentLengthInMilliseconds
-    , fServerTimestamp
-    , fFragmentSizeInBytes
-    , fFragmentNumber
-    , fProducerTimestamp
-
-    -- ** FragmentSelector
-    , FragmentSelector
-    , fragmentSelector
-    , fsFragmentSelectorType
-    , fsTimestampRange
-
-    -- ** TimestampRange
-    , TimestampRange
-    , timestampRange
-    , trStartTimestamp
-    , trEndTimestamp
-    ) where
-
-import Network.AWS.KinesisVideoArchivedMedia.GetMediaForFragmentList
-import Network.AWS.KinesisVideoArchivedMedia.ListFragments
-import Network.AWS.KinesisVideoArchivedMedia.Types
-import Network.AWS.KinesisVideoArchivedMedia.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 'KinesisVideoArchivedMedia'.
--}
-
-{- $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/KinesisVideoArchivedMedia/GetMediaForFragmentList.hs b/gen/Network/AWS/KinesisVideoArchivedMedia/GetMediaForFragmentList.hs
deleted file mode 100644
--- a/gen/Network/AWS/KinesisVideoArchivedMedia/GetMediaForFragmentList.hs
+++ /dev/null
@@ -1,157 +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.KinesisVideoArchivedMedia.GetMediaForFragmentList
--- 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 media for a list of fragments (specified by fragment number) from the archived data in a Kinesis video stream.
---
---
--- The following limits apply when using the @GetMediaForFragmentList@ API:
---
---     * A client can call @GetMediaForFragmentList@ up to five times per second per stream.
---
---     * Kinesis Video Streams sends media data at a rate of up to 25 megabytes per second (or 200 megabits per second) during a @GetMediaForFragmentList@ session.
---
---
---
-module Network.AWS.KinesisVideoArchivedMedia.GetMediaForFragmentList
-    (
-    -- * Creating a Request
-      getMediaForFragmentList
-    , GetMediaForFragmentList
-    -- * Request Lenses
-    , gmfflStreamName
-    , gmfflFragments
-
-    -- * Destructuring the Response
-    , getMediaForFragmentListResponse
-    , GetMediaForFragmentListResponse
-    -- * Response Lenses
-    , gmfflrsContentType
-    , gmfflrsResponseStatus
-    , gmfflrsPayload
-    ) where
-
-import Network.AWS.KinesisVideoArchivedMedia.Types
-import Network.AWS.KinesisVideoArchivedMedia.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'getMediaForFragmentList' smart constructor.
-data GetMediaForFragmentList = GetMediaForFragmentList'
-  { _gmfflStreamName :: !Text
-  , _gmfflFragments  :: ![Text]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetMediaForFragmentList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gmfflStreamName' - The name of the stream from which to retrieve fragment media.
---
--- * 'gmfflFragments' - A list of the numbers of fragments for which to retrieve media. You retrieve these values with 'ListFragments' .
-getMediaForFragmentList
-    :: Text -- ^ 'gmfflStreamName'
-    -> GetMediaForFragmentList
-getMediaForFragmentList pStreamName_ =
-  GetMediaForFragmentList'
-    {_gmfflStreamName = pStreamName_, _gmfflFragments = mempty}
-
-
--- | The name of the stream from which to retrieve fragment media.
-gmfflStreamName :: Lens' GetMediaForFragmentList Text
-gmfflStreamName = lens _gmfflStreamName (\ s a -> s{_gmfflStreamName = a})
-
--- | A list of the numbers of fragments for which to retrieve media. You retrieve these values with 'ListFragments' .
-gmfflFragments :: Lens' GetMediaForFragmentList [Text]
-gmfflFragments = lens _gmfflFragments (\ s a -> s{_gmfflFragments = a}) . _Coerce
-
-instance AWSRequest GetMediaForFragmentList where
-        type Rs GetMediaForFragmentList =
-             GetMediaForFragmentListResponse
-        request = postJSON kinesisVideoArchivedMedia
-        response
-          = receiveBody
-              (\ s h x ->
-                 GetMediaForFragmentListResponse' <$>
-                   (h .#? "Content-Type") <*> (pure (fromEnum s)) <*>
-                     (pure x))
-
-instance Hashable GetMediaForFragmentList where
-
-instance NFData GetMediaForFragmentList where
-
-instance ToHeaders GetMediaForFragmentList where
-        toHeaders = const mempty
-
-instance ToJSON GetMediaForFragmentList where
-        toJSON GetMediaForFragmentList'{..}
-          = object
-              (catMaybes
-                 [Just ("StreamName" .= _gmfflStreamName),
-                  Just ("Fragments" .= _gmfflFragments)])
-
-instance ToPath GetMediaForFragmentList where
-        toPath = const "/getMediaForFragmentList"
-
-instance ToQuery GetMediaForFragmentList where
-        toQuery = const mempty
-
--- | /See:/ 'getMediaForFragmentListResponse' smart constructor.
-data GetMediaForFragmentListResponse = GetMediaForFragmentListResponse'
-  { _gmfflrsContentType    :: !(Maybe Text)
-  , _gmfflrsResponseStatus :: !Int
-  , _gmfflrsPayload        :: !RsBody
-  } deriving (Show, Generic)
-
-
--- | Creates a value of 'GetMediaForFragmentListResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gmfflrsContentType' - The content type of the requested media.
---
--- * 'gmfflrsResponseStatus' - -- | The response status code.
---
--- * 'gmfflrsPayload' - The payload that Kinesis Video Streams returns is a sequence of chunks from the specified stream. For information about the chunks, see <docs.aws.amazon.com/acuity/latest/dg/API_dataplane_PutMedia.html PutMedia> . The chunks that Kinesis Video Streams returns in the @GetMediaForFragmentList@ call also include the following additional Matroska (MKV) tags:      * AWS_KINESISVIDEO_FRAGMENT_NUMBER - Fragment number returned in the chunk.     * AWS_KINESISVIDEO_SERVER_SIDE_TIMESTAMP - Server-side time stamp of the fragment.     * AWS_KINESISVIDEO_PRODUCER_SIDE_TIMESTAMP - Producer-side time stamp of the fragment. The following tags will be included if an exception occurs:     * AWS_KINESISVIDEO_FRAGMENT_NUMBER - The number of the fragment that threw the exception     * AWS_KINESISVIDEO_EXCEPTION_ERROR_CODE - The integer code of the exception     * AWS_KINESISVIDEO_EXCEPTION_MESSAGE - A text description of the exception
-getMediaForFragmentListResponse
-    :: Int -- ^ 'gmfflrsResponseStatus'
-    -> RsBody -- ^ 'gmfflrsPayload'
-    -> GetMediaForFragmentListResponse
-getMediaForFragmentListResponse pResponseStatus_ pPayload_ =
-  GetMediaForFragmentListResponse'
-    { _gmfflrsContentType = Nothing
-    , _gmfflrsResponseStatus = pResponseStatus_
-    , _gmfflrsPayload = pPayload_
-    }
-
-
--- | The content type of the requested media.
-gmfflrsContentType :: Lens' GetMediaForFragmentListResponse (Maybe Text)
-gmfflrsContentType = lens _gmfflrsContentType (\ s a -> s{_gmfflrsContentType = a})
-
--- | -- | The response status code.
-gmfflrsResponseStatus :: Lens' GetMediaForFragmentListResponse Int
-gmfflrsResponseStatus = lens _gmfflrsResponseStatus (\ s a -> s{_gmfflrsResponseStatus = a})
-
--- | The payload that Kinesis Video Streams returns is a sequence of chunks from the specified stream. For information about the chunks, see <docs.aws.amazon.com/acuity/latest/dg/API_dataplane_PutMedia.html PutMedia> . The chunks that Kinesis Video Streams returns in the @GetMediaForFragmentList@ call also include the following additional Matroska (MKV) tags:      * AWS_KINESISVIDEO_FRAGMENT_NUMBER - Fragment number returned in the chunk.     * AWS_KINESISVIDEO_SERVER_SIDE_TIMESTAMP - Server-side time stamp of the fragment.     * AWS_KINESISVIDEO_PRODUCER_SIDE_TIMESTAMP - Producer-side time stamp of the fragment. The following tags will be included if an exception occurs:     * AWS_KINESISVIDEO_FRAGMENT_NUMBER - The number of the fragment that threw the exception     * AWS_KINESISVIDEO_EXCEPTION_ERROR_CODE - The integer code of the exception     * AWS_KINESISVIDEO_EXCEPTION_MESSAGE - A text description of the exception
-gmfflrsPayload :: Lens' GetMediaForFragmentListResponse RsBody
-gmfflrsPayload = lens _gmfflrsPayload (\ s a -> s{_gmfflrsPayload = a})
diff --git a/gen/Network/AWS/KinesisVideoArchivedMedia/ListFragments.hs b/gen/Network/AWS/KinesisVideoArchivedMedia/ListFragments.hs
deleted file mode 100644
--- a/gen/Network/AWS/KinesisVideoArchivedMedia/ListFragments.hs
+++ /dev/null
@@ -1,172 +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.KinesisVideoArchivedMedia.ListFragments
--- 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)
---
--- Returns a list of 'Fragment' objects from the specified stream and start location within the archived data.
---
---
-module Network.AWS.KinesisVideoArchivedMedia.ListFragments
-    (
-    -- * Creating a Request
-      listFragments
-    , ListFragments
-    -- * Request Lenses
-    , lfFragmentSelector
-    , lfNextToken
-    , lfMaxResults
-    , lfStreamName
-
-    -- * Destructuring the Response
-    , listFragmentsResponse
-    , ListFragmentsResponse
-    -- * Response Lenses
-    , lfrsNextToken
-    , lfrsFragments
-    , lfrsResponseStatus
-    ) where
-
-import Network.AWS.KinesisVideoArchivedMedia.Types
-import Network.AWS.KinesisVideoArchivedMedia.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'listFragments' smart constructor.
-data ListFragments = ListFragments'
-  { _lfFragmentSelector :: !(Maybe FragmentSelector)
-  , _lfNextToken        :: !(Maybe Text)
-  , _lfMaxResults       :: !(Maybe Nat)
-  , _lfStreamName       :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListFragments' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lfFragmentSelector' - Describes the time stamp range and time stamp origin for the range of fragments to return.
---
--- * 'lfNextToken' - A token to specify where to start paginating. This is the 'ListFragmentsOutput$NextToken' from a previously truncated response.
---
--- * 'lfMaxResults' - The total number of fragments to return. If the total number of fragments available is more than the value specified in @max-results@ , then a 'ListFragmentsOutput$NextToken' is provided in the output that you can use to resume pagination.
---
--- * 'lfStreamName' - The name of the stream from which to retrieve a fragment list.
-listFragments
-    :: Text -- ^ 'lfStreamName'
-    -> ListFragments
-listFragments pStreamName_ =
-  ListFragments'
-    { _lfFragmentSelector = Nothing
-    , _lfNextToken = Nothing
-    , _lfMaxResults = Nothing
-    , _lfStreamName = pStreamName_
-    }
-
-
--- | Describes the time stamp range and time stamp origin for the range of fragments to return.
-lfFragmentSelector :: Lens' ListFragments (Maybe FragmentSelector)
-lfFragmentSelector = lens _lfFragmentSelector (\ s a -> s{_lfFragmentSelector = a})
-
--- | A token to specify where to start paginating. This is the 'ListFragmentsOutput$NextToken' from a previously truncated response.
-lfNextToken :: Lens' ListFragments (Maybe Text)
-lfNextToken = lens _lfNextToken (\ s a -> s{_lfNextToken = a})
-
--- | The total number of fragments to return. If the total number of fragments available is more than the value specified in @max-results@ , then a 'ListFragmentsOutput$NextToken' is provided in the output that you can use to resume pagination.
-lfMaxResults :: Lens' ListFragments (Maybe Natural)
-lfMaxResults = lens _lfMaxResults (\ s a -> s{_lfMaxResults = a}) . mapping _Nat
-
--- | The name of the stream from which to retrieve a fragment list.
-lfStreamName :: Lens' ListFragments Text
-lfStreamName = lens _lfStreamName (\ s a -> s{_lfStreamName = a})
-
-instance AWSRequest ListFragments where
-        type Rs ListFragments = ListFragmentsResponse
-        request = postJSON kinesisVideoArchivedMedia
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ListFragmentsResponse' <$>
-                   (x .?> "NextToken") <*>
-                     (x .?> "Fragments" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ListFragments where
-
-instance NFData ListFragments where
-
-instance ToHeaders ListFragments where
-        toHeaders = const mempty
-
-instance ToJSON ListFragments where
-        toJSON ListFragments'{..}
-          = object
-              (catMaybes
-                 [("FragmentSelector" .=) <$> _lfFragmentSelector,
-                  ("NextToken" .=) <$> _lfNextToken,
-                  ("MaxResults" .=) <$> _lfMaxResults,
-                  Just ("StreamName" .= _lfStreamName)])
-
-instance ToPath ListFragments where
-        toPath = const "/listFragments"
-
-instance ToQuery ListFragments where
-        toQuery = const mempty
-
--- | /See:/ 'listFragmentsResponse' smart constructor.
-data ListFragmentsResponse = ListFragmentsResponse'
-  { _lfrsNextToken      :: !(Maybe Text)
-  , _lfrsFragments      :: !(Maybe [Fragment])
-  , _lfrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListFragmentsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lfrsNextToken' - If the returned list is truncated, the operation returns this token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'lfrsFragments' - A list of fragment numbers that correspond to the time stamp range provided.
---
--- * 'lfrsResponseStatus' - -- | The response status code.
-listFragmentsResponse
-    :: Int -- ^ 'lfrsResponseStatus'
-    -> ListFragmentsResponse
-listFragmentsResponse pResponseStatus_ =
-  ListFragmentsResponse'
-    { _lfrsNextToken = Nothing
-    , _lfrsFragments = Nothing
-    , _lfrsResponseStatus = pResponseStatus_
-    }
-
-
--- | If the returned list is truncated, the operation returns this token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
-lfrsNextToken :: Lens' ListFragmentsResponse (Maybe Text)
-lfrsNextToken = lens _lfrsNextToken (\ s a -> s{_lfrsNextToken = a})
-
--- | A list of fragment numbers that correspond to the time stamp range provided.
-lfrsFragments :: Lens' ListFragmentsResponse [Fragment]
-lfrsFragments = lens _lfrsFragments (\ s a -> s{_lfrsFragments = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-lfrsResponseStatus :: Lens' ListFragmentsResponse Int
-lfrsResponseStatus = lens _lfrsResponseStatus (\ s a -> s{_lfrsResponseStatus = a})
-
-instance NFData ListFragmentsResponse where
diff --git a/gen/Network/AWS/KinesisVideoArchivedMedia/Types.hs b/gen/Network/AWS/KinesisVideoArchivedMedia/Types.hs
deleted file mode 100644
--- a/gen/Network/AWS/KinesisVideoArchivedMedia/Types.hs
+++ /dev/null
@@ -1,128 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.KinesisVideoArchivedMedia.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.KinesisVideoArchivedMedia.Types
-    (
-    -- * Service Configuration
-      kinesisVideoArchivedMedia
-
-    -- * Errors
-    , _InvalidArgumentException
-    , _NotAuthorizedException
-    , _ClientLimitExceededException
-    , _ResourceNotFoundException
-
-    -- * FragmentSelectorType
-    , FragmentSelectorType (..)
-
-    -- * Fragment
-    , Fragment
-    , fragment
-    , fFragmentLengthInMilliseconds
-    , fServerTimestamp
-    , fFragmentSizeInBytes
-    , fFragmentNumber
-    , fProducerTimestamp
-
-    -- * FragmentSelector
-    , FragmentSelector
-    , fragmentSelector
-    , fsFragmentSelectorType
-    , fsTimestampRange
-
-    -- * TimestampRange
-    , TimestampRange
-    , timestampRange
-    , trStartTimestamp
-    , trEndTimestamp
-    ) where
-
-import Network.AWS.KinesisVideoArchivedMedia.Types.Product
-import Network.AWS.KinesisVideoArchivedMedia.Types.Sum
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Sign.V4
-
--- | API version @2017-09-30@ of the Amazon Kinesis Video Streams Archived Media SDK configuration.
-kinesisVideoArchivedMedia :: Service
-kinesisVideoArchivedMedia =
-  Service
-    { _svcAbbrev = "KinesisVideoArchivedMedia"
-    , _svcSigner = v4
-    , _svcPrefix = "kinesisvideo"
-    , _svcVersion = "2017-09-30"
-    , _svcEndpoint = defaultEndpoint kinesisVideoArchivedMedia
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseJSONError "KinesisVideoArchivedMedia"
-    , _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
-
-
--- | A specified parameter exceeds its restrictions, is not supported, or can't be used.
---
---
-_InvalidArgumentException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidArgumentException =
-  _MatchServiceError kinesisVideoArchivedMedia "InvalidArgumentException" .
-  hasStatus 400
-
-
--- | Status Code: 403, The caller is not authorized to perform an operation on the given stream, or the token has expired.
---
---
-_NotAuthorizedException :: AsError a => Getting (First ServiceError) a ServiceError
-_NotAuthorizedException =
-  _MatchServiceError kinesisVideoArchivedMedia "NotAuthorizedException" .
-  hasStatus 401
-
-
--- | Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed client calls. Try making the call later.
---
---
-_ClientLimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
-_ClientLimitExceededException =
-  _MatchServiceError kinesisVideoArchivedMedia "ClientLimitExceededException" .
-  hasStatus 400
-
-
--- | Kinesis Video Streams can't find the stream that you specified.
---
---
-_ResourceNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceNotFoundException =
-  _MatchServiceError kinesisVideoArchivedMedia "ResourceNotFoundException" .
-  hasStatus 404
-
diff --git a/gen/Network/AWS/KinesisVideoArchivedMedia/Types/Product.hs b/gen/Network/AWS/KinesisVideoArchivedMedia/Types/Product.hs
deleted file mode 100644
--- a/gen/Network/AWS/KinesisVideoArchivedMedia/Types/Product.hs
+++ /dev/null
@@ -1,193 +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.KinesisVideoArchivedMedia.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.KinesisVideoArchivedMedia.Types.Product where
-
-import Network.AWS.KinesisVideoArchivedMedia.Types.Sum
-import Network.AWS.Lens
-import Network.AWS.Prelude
-
--- | Represents a segment of video or other time-delimited data.
---
---
---
--- /See:/ 'fragment' smart constructor.
-data Fragment = Fragment'
-  { _fFragmentLengthInMilliseconds :: !(Maybe Integer)
-  , _fServerTimestamp              :: !(Maybe POSIX)
-  , _fFragmentSizeInBytes          :: !(Maybe Integer)
-  , _fFragmentNumber               :: !(Maybe Text)
-  , _fProducerTimestamp            :: !(Maybe POSIX)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Fragment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fFragmentLengthInMilliseconds' - The playback duration or other time value associated with the fragment.
---
--- * 'fServerTimestamp' - The time stamp from the AWS server corresponding to the fragment.
---
--- * 'fFragmentSizeInBytes' - The total fragment size, including information about the fragment and contained media data.
---
--- * 'fFragmentNumber' - The index value of the fragment.
---
--- * 'fProducerTimestamp' - The time stamp from the producer corresponding to the fragment.
-fragment
-    :: Fragment
-fragment =
-  Fragment'
-    { _fFragmentLengthInMilliseconds = Nothing
-    , _fServerTimestamp = Nothing
-    , _fFragmentSizeInBytes = Nothing
-    , _fFragmentNumber = Nothing
-    , _fProducerTimestamp = Nothing
-    }
-
-
--- | The playback duration or other time value associated with the fragment.
-fFragmentLengthInMilliseconds :: Lens' Fragment (Maybe Integer)
-fFragmentLengthInMilliseconds = lens _fFragmentLengthInMilliseconds (\ s a -> s{_fFragmentLengthInMilliseconds = a})
-
--- | The time stamp from the AWS server corresponding to the fragment.
-fServerTimestamp :: Lens' Fragment (Maybe UTCTime)
-fServerTimestamp = lens _fServerTimestamp (\ s a -> s{_fServerTimestamp = a}) . mapping _Time
-
--- | The total fragment size, including information about the fragment and contained media data.
-fFragmentSizeInBytes :: Lens' Fragment (Maybe Integer)
-fFragmentSizeInBytes = lens _fFragmentSizeInBytes (\ s a -> s{_fFragmentSizeInBytes = a})
-
--- | The index value of the fragment.
-fFragmentNumber :: Lens' Fragment (Maybe Text)
-fFragmentNumber = lens _fFragmentNumber (\ s a -> s{_fFragmentNumber = a})
-
--- | The time stamp from the producer corresponding to the fragment.
-fProducerTimestamp :: Lens' Fragment (Maybe UTCTime)
-fProducerTimestamp = lens _fProducerTimestamp (\ s a -> s{_fProducerTimestamp = a}) . mapping _Time
-
-instance FromJSON Fragment where
-        parseJSON
-          = withObject "Fragment"
-              (\ x ->
-                 Fragment' <$>
-                   (x .:? "FragmentLengthInMilliseconds") <*>
-                     (x .:? "ServerTimestamp")
-                     <*> (x .:? "FragmentSizeInBytes")
-                     <*> (x .:? "FragmentNumber")
-                     <*> (x .:? "ProducerTimestamp"))
-
-instance Hashable Fragment where
-
-instance NFData Fragment where
-
--- | Describes the time stamp range and time stamp origin of a range of fragments.
---
---
---
--- /See:/ 'fragmentSelector' smart constructor.
-data FragmentSelector = FragmentSelector'
-  { _fsFragmentSelectorType :: !FragmentSelectorType
-  , _fsTimestampRange       :: !TimestampRange
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'FragmentSelector' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fsFragmentSelectorType' - The origin of the time stamps to use (Server or Producer).
---
--- * 'fsTimestampRange' - The range of time stamps to return.
-fragmentSelector
-    :: FragmentSelectorType -- ^ 'fsFragmentSelectorType'
-    -> TimestampRange -- ^ 'fsTimestampRange'
-    -> FragmentSelector
-fragmentSelector pFragmentSelectorType_ pTimestampRange_ =
-  FragmentSelector'
-    { _fsFragmentSelectorType = pFragmentSelectorType_
-    , _fsTimestampRange = pTimestampRange_
-    }
-
-
--- | The origin of the time stamps to use (Server or Producer).
-fsFragmentSelectorType :: Lens' FragmentSelector FragmentSelectorType
-fsFragmentSelectorType = lens _fsFragmentSelectorType (\ s a -> s{_fsFragmentSelectorType = a})
-
--- | The range of time stamps to return.
-fsTimestampRange :: Lens' FragmentSelector TimestampRange
-fsTimestampRange = lens _fsTimestampRange (\ s a -> s{_fsTimestampRange = a})
-
-instance Hashable FragmentSelector where
-
-instance NFData FragmentSelector where
-
-instance ToJSON FragmentSelector where
-        toJSON FragmentSelector'{..}
-          = object
-              (catMaybes
-                 [Just
-                    ("FragmentSelectorType" .= _fsFragmentSelectorType),
-                  Just ("TimestampRange" .= _fsTimestampRange)])
-
--- | The range of time stamps for which to return fragments.
---
---
---
--- /See:/ 'timestampRange' smart constructor.
-data TimestampRange = TimestampRange'
-  { _trStartTimestamp :: !POSIX
-  , _trEndTimestamp   :: !POSIX
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TimestampRange' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'trStartTimestamp' - The starting time stamp in the range of time stamps for which to return fragments.
---
--- * 'trEndTimestamp' - The ending time stamp in the range of time stamps for which to return fragments.
-timestampRange
-    :: UTCTime -- ^ 'trStartTimestamp'
-    -> UTCTime -- ^ 'trEndTimestamp'
-    -> TimestampRange
-timestampRange pStartTimestamp_ pEndTimestamp_ =
-  TimestampRange'
-    { _trStartTimestamp = _Time # pStartTimestamp_
-    , _trEndTimestamp = _Time # pEndTimestamp_
-    }
-
-
--- | The starting time stamp in the range of time stamps for which to return fragments.
-trStartTimestamp :: Lens' TimestampRange UTCTime
-trStartTimestamp = lens _trStartTimestamp (\ s a -> s{_trStartTimestamp = a}) . _Time
-
--- | The ending time stamp in the range of time stamps for which to return fragments.
-trEndTimestamp :: Lens' TimestampRange UTCTime
-trEndTimestamp = lens _trEndTimestamp (\ s a -> s{_trEndTimestamp = a}) . _Time
-
-instance Hashable TimestampRange where
-
-instance NFData TimestampRange where
-
-instance ToJSON TimestampRange where
-        toJSON TimestampRange'{..}
-          = object
-              (catMaybes
-                 [Just ("StartTimestamp" .= _trStartTimestamp),
-                  Just ("EndTimestamp" .= _trEndTimestamp)])
diff --git a/gen/Network/AWS/KinesisVideoArchivedMedia/Types/Sum.hs b/gen/Network/AWS/KinesisVideoArchivedMedia/Types/Sum.hs
deleted file mode 100644
--- a/gen/Network/AWS/KinesisVideoArchivedMedia/Types/Sum.hs
+++ /dev/null
@@ -1,47 +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.KinesisVideoArchivedMedia.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.KinesisVideoArchivedMedia.Types.Sum where
-
-import Network.AWS.Prelude
-
-data FragmentSelectorType
-  = ProducerTimestamp
-  | ServerTimestamp
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText FragmentSelectorType where
-    parser = takeLowerText >>= \case
-        "producer_timestamp" -> pure ProducerTimestamp
-        "server_timestamp" -> pure ServerTimestamp
-        e -> fromTextError $ "Failure parsing FragmentSelectorType from value: '" <> e
-           <> "'. Accepted values: producer_timestamp, server_timestamp"
-
-instance ToText FragmentSelectorType where
-    toText = \case
-        ProducerTimestamp -> "PRODUCER_TIMESTAMP"
-        ServerTimestamp -> "SERVER_TIMESTAMP"
-
-instance Hashable     FragmentSelectorType
-instance NFData       FragmentSelectorType
-instance ToByteString FragmentSelectorType
-instance ToQuery      FragmentSelectorType
-instance ToHeader     FragmentSelectorType
-
-instance ToJSON FragmentSelectorType where
-    toJSON = toJSONText
diff --git a/gen/Network/AWS/KinesisVideoArchivedMedia/Waiters.hs b/gen/Network/AWS/KinesisVideoArchivedMedia/Waiters.hs
deleted file mode 100644
--- a/gen/Network/AWS/KinesisVideoArchivedMedia/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.KinesisVideoArchivedMedia.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.KinesisVideoArchivedMedia.Waiters where
-
-import Network.AWS.KinesisVideoArchivedMedia.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.KinesisVideoArchivedMedia
+import Test.Amazonka.KinesisVideoArchivedMedia.Internal
 import Test.Tasty
-import Test.AWS.KinesisVideoArchivedMedia
-import Test.AWS.KinesisVideoArchivedMedia.Internal
 
 main :: IO ()
-main = defaultMain $ testGroup "KinesisVideoArchivedMedia"
-    [ testGroup "tests"    tests
-    , testGroup "fixtures" fixtures
-    ]
+main =
+  defaultMain $
+    testGroup
+      "KinesisVideoArchivedMedia"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/AWS/Gen/KinesisVideoArchivedMedia.hs b/test/Test/AWS/Gen/KinesisVideoArchivedMedia.hs
deleted file mode 100644
--- a/test/Test/AWS/Gen/KinesisVideoArchivedMedia.hs
+++ /dev/null
@@ -1,68 +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.KinesisVideoArchivedMedia
--- 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.KinesisVideoArchivedMedia where
-
-import Data.Proxy
-import Network.AWS.KinesisVideoArchivedMedia
-import Test.AWS.Fixture
-import Test.AWS.KinesisVideoArchivedMedia.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"
---         [ requestGetMediaForFragmentList $
---             getMediaForFragmentList
---
---         , requestListFragments $
---             listFragments
---
---           ]
-
---     , testGroup "response"
---         [ responseGetMediaForFragmentList $
---             getMediaForFragmentListResponse
---
---         , responseListFragments $
---             listFragmentsResponse
---
---           ]
---     ]
-
--- Requests
-
-requestGetMediaForFragmentList :: GetMediaForFragmentList -> TestTree
-requestGetMediaForFragmentList = req
-    "GetMediaForFragmentList"
-    "fixture/GetMediaForFragmentList.yaml"
-
-requestListFragments :: ListFragments -> TestTree
-requestListFragments = req
-    "ListFragments"
-    "fixture/ListFragments.yaml"
-
--- Responses
-
-responseListFragments :: ListFragmentsResponse -> TestTree
-responseListFragments = res
-    "ListFragmentsResponse"
-    "fixture/ListFragmentsResponse.proto"
-    kinesisVideoArchivedMedia
-    (Proxy :: Proxy ListFragments)
diff --git a/test/Test/AWS/KinesisVideoArchivedMedia.hs b/test/Test/AWS/KinesisVideoArchivedMedia.hs
deleted file mode 100644
--- a/test/Test/AWS/KinesisVideoArchivedMedia.hs
+++ /dev/null
@@ -1,20 +0,0 @@
--- |
--- Module      : Test.AWS.KinesisVideoArchivedMedia
--- 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.KinesisVideoArchivedMedia
-    ( tests
-    , fixtures
-    ) where
-
-import Test.Tasty (TestTree)
-
-tests :: [TestTree]
-tests = []
-
-fixtures :: [TestTree]
-fixtures = []
diff --git a/test/Test/AWS/KinesisVideoArchivedMedia/Internal.hs b/test/Test/AWS/KinesisVideoArchivedMedia/Internal.hs
deleted file mode 100644
--- a/test/Test/AWS/KinesisVideoArchivedMedia/Internal.hs
+++ /dev/null
@@ -1,9 +0,0 @@
--- |
--- Module      : Test.AWS.KinesisVideoArchivedMedia.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.KinesisVideoArchivedMedia.Internal where
diff --git a/test/Test/Amazonka/Gen/KinesisVideoArchivedMedia.hs b/test/Test/Amazonka/Gen/KinesisVideoArchivedMedia.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/KinesisVideoArchivedMedia.hs
@@ -0,0 +1,142 @@
+{-# 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.KinesisVideoArchivedMedia
+-- 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.KinesisVideoArchivedMedia where
+
+import Amazonka.KinesisVideoArchivedMedia
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.KinesisVideoArchivedMedia.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"
+--         [ requestGetClip $
+--             newGetClip
+--
+--         , requestGetDASHStreamingSessionURL $
+--             newGetDASHStreamingSessionURL
+--
+--         , requestGetHLSStreamingSessionURL $
+--             newGetHLSStreamingSessionURL
+--
+--         , requestGetImages $
+--             newGetImages
+--
+--         , requestGetMediaForFragmentList $
+--             newGetMediaForFragmentList
+--
+--         , requestListFragments $
+--             newListFragments
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseGetClip $
+--             newGetClipResponse
+--
+--         , responseGetDASHStreamingSessionURL $
+--             newGetDASHStreamingSessionURLResponse
+--
+--         , responseGetHLSStreamingSessionURL $
+--             newGetHLSStreamingSessionURLResponse
+--
+--         , responseGetImages $
+--             newGetImagesResponse
+--
+--         , responseGetMediaForFragmentList $
+--             newGetMediaForFragmentListResponse
+--
+--         , responseListFragments $
+--             newListFragmentsResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestGetClip :: GetClip -> TestTree
+requestGetClip =
+  req
+    "GetClip"
+    "fixture/GetClip.yaml"
+
+requestGetDASHStreamingSessionURL :: GetDASHStreamingSessionURL -> TestTree
+requestGetDASHStreamingSessionURL =
+  req
+    "GetDASHStreamingSessionURL"
+    "fixture/GetDASHStreamingSessionURL.yaml"
+
+requestGetHLSStreamingSessionURL :: GetHLSStreamingSessionURL -> TestTree
+requestGetHLSStreamingSessionURL =
+  req
+    "GetHLSStreamingSessionURL"
+    "fixture/GetHLSStreamingSessionURL.yaml"
+
+requestGetImages :: GetImages -> TestTree
+requestGetImages =
+  req
+    "GetImages"
+    "fixture/GetImages.yaml"
+
+requestGetMediaForFragmentList :: GetMediaForFragmentList -> TestTree
+requestGetMediaForFragmentList =
+  req
+    "GetMediaForFragmentList"
+    "fixture/GetMediaForFragmentList.yaml"
+
+requestListFragments :: ListFragments -> TestTree
+requestListFragments =
+  req
+    "ListFragments"
+    "fixture/ListFragments.yaml"
+
+-- Responses
+
+responseGetDASHStreamingSessionURL :: GetDASHStreamingSessionURLResponse -> TestTree
+responseGetDASHStreamingSessionURL =
+  res
+    "GetDASHStreamingSessionURLResponse"
+    "fixture/GetDASHStreamingSessionURLResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDASHStreamingSessionURL)
+
+responseGetHLSStreamingSessionURL :: GetHLSStreamingSessionURLResponse -> TestTree
+responseGetHLSStreamingSessionURL =
+  res
+    "GetHLSStreamingSessionURLResponse"
+    "fixture/GetHLSStreamingSessionURLResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetHLSStreamingSessionURL)
+
+responseGetImages :: GetImagesResponse -> TestTree
+responseGetImages =
+  res
+    "GetImagesResponse"
+    "fixture/GetImagesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetImages)
+
+responseListFragments :: ListFragmentsResponse -> TestTree
+responseListFragments =
+  res
+    "ListFragmentsResponse"
+    "fixture/ListFragmentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListFragments)
diff --git a/test/Test/Amazonka/KinesisVideoArchivedMedia.hs b/test/Test/Amazonka/KinesisVideoArchivedMedia.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/KinesisVideoArchivedMedia.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.KinesisVideoArchivedMedia
+-- 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.KinesisVideoArchivedMedia
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/KinesisVideoArchivedMedia/Internal.hs b/test/Test/Amazonka/KinesisVideoArchivedMedia/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/KinesisVideoArchivedMedia/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.KinesisVideoArchivedMedia.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.KinesisVideoArchivedMedia.Internal where
