diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,44 @@
+# Amazon MediaTailor SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2018-04-23@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-mediatailor)
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
+
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information, sending requests,
+and receiving responses.
+
+Lenses are used for constructing and manipulating types,
+due to the depth of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
+
+See [Amazonka.MediaTailor](http://hackage.haskell.org/package/amazonka-mediatailor/docs/Amazonka-MediaTailor.html)
+or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`amazonka-mediatailor` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
+
+Parts of the code are derived from AWS service descriptions, licensed under Apache 2.0.
+Source files subject to this contain an additional licensing clause in their header.
diff --git a/amazonka-mediatailor.cabal b/amazonka-mediatailor.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-mediatailor.cabal
@@ -0,0 +1,175 @@
+cabal-version:      2.2
+name:               amazonka-mediatailor
+version:            2.0
+synopsis:           Amazon MediaTailor SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2018-04-23@ 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.MediaTailor.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.MediaTailor" 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-mediatailor
+
+library
+  default-language: Haskell2010
+  hs-source-dirs:   src gen
+  ghc-options:
+    -Wall -fwarn-incomplete-uni-patterns
+    -fwarn-incomplete-record-updates -funbox-strict-fields
+
+  exposed-modules:
+    Amazonka.MediaTailor
+    Amazonka.MediaTailor.ConfigureLogsForPlaybackConfiguration
+    Amazonka.MediaTailor.CreateChannel
+    Amazonka.MediaTailor.CreateLiveSource
+    Amazonka.MediaTailor.CreatePrefetchSchedule
+    Amazonka.MediaTailor.CreateProgram
+    Amazonka.MediaTailor.CreateSourceLocation
+    Amazonka.MediaTailor.CreateVodSource
+    Amazonka.MediaTailor.DeleteChannel
+    Amazonka.MediaTailor.DeleteChannelPolicy
+    Amazonka.MediaTailor.DeleteLiveSource
+    Amazonka.MediaTailor.DeletePlaybackConfiguration
+    Amazonka.MediaTailor.DeletePrefetchSchedule
+    Amazonka.MediaTailor.DeleteProgram
+    Amazonka.MediaTailor.DeleteSourceLocation
+    Amazonka.MediaTailor.DeleteVodSource
+    Amazonka.MediaTailor.DescribeChannel
+    Amazonka.MediaTailor.DescribeLiveSource
+    Amazonka.MediaTailor.DescribeProgram
+    Amazonka.MediaTailor.DescribeSourceLocation
+    Amazonka.MediaTailor.DescribeVodSource
+    Amazonka.MediaTailor.GetChannelPolicy
+    Amazonka.MediaTailor.GetChannelSchedule
+    Amazonka.MediaTailor.GetPlaybackConfiguration
+    Amazonka.MediaTailor.GetPrefetchSchedule
+    Amazonka.MediaTailor.Lens
+    Amazonka.MediaTailor.ListAlerts
+    Amazonka.MediaTailor.ListChannels
+    Amazonka.MediaTailor.ListLiveSources
+    Amazonka.MediaTailor.ListPlaybackConfigurations
+    Amazonka.MediaTailor.ListPrefetchSchedules
+    Amazonka.MediaTailor.ListSourceLocations
+    Amazonka.MediaTailor.ListTagsForResource
+    Amazonka.MediaTailor.ListVodSources
+    Amazonka.MediaTailor.PutChannelPolicy
+    Amazonka.MediaTailor.PutPlaybackConfiguration
+    Amazonka.MediaTailor.StartChannel
+    Amazonka.MediaTailor.StopChannel
+    Amazonka.MediaTailor.TagResource
+    Amazonka.MediaTailor.Types
+    Amazonka.MediaTailor.Types.AccessConfiguration
+    Amazonka.MediaTailor.Types.AccessType
+    Amazonka.MediaTailor.Types.AdBreak
+    Amazonka.MediaTailor.Types.AdMarkerPassthrough
+    Amazonka.MediaTailor.Types.Alert
+    Amazonka.MediaTailor.Types.AvailMatchingCriteria
+    Amazonka.MediaTailor.Types.AvailSuppression
+    Amazonka.MediaTailor.Types.Bumper
+    Amazonka.MediaTailor.Types.CdnConfiguration
+    Amazonka.MediaTailor.Types.Channel
+    Amazonka.MediaTailor.Types.ChannelState
+    Amazonka.MediaTailor.Types.DashConfiguration
+    Amazonka.MediaTailor.Types.DashConfigurationForPut
+    Amazonka.MediaTailor.Types.DashPlaylistSettings
+    Amazonka.MediaTailor.Types.DefaultSegmentDeliveryConfiguration
+    Amazonka.MediaTailor.Types.HlsConfiguration
+    Amazonka.MediaTailor.Types.HlsPlaylistSettings
+    Amazonka.MediaTailor.Types.HttpConfiguration
+    Amazonka.MediaTailor.Types.HttpPackageConfiguration
+    Amazonka.MediaTailor.Types.LivePreRollConfiguration
+    Amazonka.MediaTailor.Types.LiveSource
+    Amazonka.MediaTailor.Types.LogConfiguration
+    Amazonka.MediaTailor.Types.ManifestProcessingRules
+    Amazonka.MediaTailor.Types.MessageType
+    Amazonka.MediaTailor.Types.Mode
+    Amazonka.MediaTailor.Types.Operator
+    Amazonka.MediaTailor.Types.OriginManifestType
+    Amazonka.MediaTailor.Types.PlaybackConfiguration
+    Amazonka.MediaTailor.Types.PlaybackMode
+    Amazonka.MediaTailor.Types.PrefetchConsumption
+    Amazonka.MediaTailor.Types.PrefetchRetrieval
+    Amazonka.MediaTailor.Types.PrefetchSchedule
+    Amazonka.MediaTailor.Types.RelativePosition
+    Amazonka.MediaTailor.Types.RequestOutputItem
+    Amazonka.MediaTailor.Types.ResponseOutputItem
+    Amazonka.MediaTailor.Types.ScheduleAdBreak
+    Amazonka.MediaTailor.Types.ScheduleConfiguration
+    Amazonka.MediaTailor.Types.ScheduleEntry
+    Amazonka.MediaTailor.Types.ScheduleEntryType
+    Amazonka.MediaTailor.Types.SecretsManagerAccessTokenConfiguration
+    Amazonka.MediaTailor.Types.SegmentationDescriptor
+    Amazonka.MediaTailor.Types.SegmentDeliveryConfiguration
+    Amazonka.MediaTailor.Types.SlateSource
+    Amazonka.MediaTailor.Types.SourceLocation
+    Amazonka.MediaTailor.Types.SpliceInsertMessage
+    Amazonka.MediaTailor.Types.Tier
+    Amazonka.MediaTailor.Types.TimeSignalMessage
+    Amazonka.MediaTailor.Types.Transition
+    Amazonka.MediaTailor.Types.Type
+    Amazonka.MediaTailor.Types.VodSource
+    Amazonka.MediaTailor.UntagResource
+    Amazonka.MediaTailor.UpdateChannel
+    Amazonka.MediaTailor.UpdateLiveSource
+    Amazonka.MediaTailor.UpdateSourceLocation
+    Amazonka.MediaTailor.UpdateVodSource
+    Amazonka.MediaTailor.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-mediatailor-test
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
+
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.Gen.MediaTailor
+    Test.Amazonka.MediaTailor
+    Test.Amazonka.MediaTailor.Internal
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-mediatailor
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/ConfigureLogsForPlaybackConfiguration.yaml b/fixture/ConfigureLogsForPlaybackConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ConfigureLogsForPlaybackConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/ConfigureLogsForPlaybackConfigurationResponse.proto b/fixture/ConfigureLogsForPlaybackConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ConfigureLogsForPlaybackConfigurationResponse.proto
diff --git a/fixture/CreateChannel.yaml b/fixture/CreateChannel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateChannel.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/CreateChannelResponse.proto b/fixture/CreateChannelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateChannelResponse.proto
diff --git a/fixture/CreateLiveSource.yaml b/fixture/CreateLiveSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLiveSource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/CreateLiveSourceResponse.proto b/fixture/CreateLiveSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLiveSourceResponse.proto
diff --git a/fixture/CreatePrefetchSchedule.yaml b/fixture/CreatePrefetchSchedule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePrefetchSchedule.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/CreatePrefetchScheduleResponse.proto b/fixture/CreatePrefetchScheduleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePrefetchScheduleResponse.proto
diff --git a/fixture/CreateProgram.yaml b/fixture/CreateProgram.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateProgram.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/CreateProgramResponse.proto b/fixture/CreateProgramResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateProgramResponse.proto
diff --git a/fixture/CreateSourceLocation.yaml b/fixture/CreateSourceLocation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSourceLocation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/CreateSourceLocationResponse.proto b/fixture/CreateSourceLocationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSourceLocationResponse.proto
diff --git a/fixture/CreateVodSource.yaml b/fixture/CreateVodSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVodSource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/CreateVodSourceResponse.proto b/fixture/CreateVodSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVodSourceResponse.proto
diff --git a/fixture/DeleteChannel.yaml b/fixture/DeleteChannel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteChannel.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/DeleteChannelPolicy.yaml b/fixture/DeleteChannelPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteChannelPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/DeleteChannelPolicyResponse.proto b/fixture/DeleteChannelPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteChannelPolicyResponse.proto
diff --git a/fixture/DeleteChannelResponse.proto b/fixture/DeleteChannelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteChannelResponse.proto
diff --git a/fixture/DeleteLiveSource.yaml b/fixture/DeleteLiveSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLiveSource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/DeleteLiveSourceResponse.proto b/fixture/DeleteLiveSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLiveSourceResponse.proto
diff --git a/fixture/DeletePlaybackConfiguration.yaml b/fixture/DeletePlaybackConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePlaybackConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/DeletePlaybackConfigurationResponse.proto b/fixture/DeletePlaybackConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePlaybackConfigurationResponse.proto
diff --git a/fixture/DeletePrefetchSchedule.yaml b/fixture/DeletePrefetchSchedule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePrefetchSchedule.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/DeletePrefetchScheduleResponse.proto b/fixture/DeletePrefetchScheduleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePrefetchScheduleResponse.proto
diff --git a/fixture/DeleteProgram.yaml b/fixture/DeleteProgram.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteProgram.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/DeleteProgramResponse.proto b/fixture/DeleteProgramResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteProgramResponse.proto
diff --git a/fixture/DeleteSourceLocation.yaml b/fixture/DeleteSourceLocation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSourceLocation.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/DeleteSourceLocationResponse.proto b/fixture/DeleteSourceLocationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSourceLocationResponse.proto
diff --git a/fixture/DeleteVodSource.yaml b/fixture/DeleteVodSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVodSource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/DeleteVodSourceResponse.proto b/fixture/DeleteVodSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVodSourceResponse.proto
diff --git a/fixture/DescribeChannel.yaml b/fixture/DescribeChannel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeChannel.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/DescribeChannelResponse.proto b/fixture/DescribeChannelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeChannelResponse.proto
diff --git a/fixture/DescribeLiveSource.yaml b/fixture/DescribeLiveSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLiveSource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/DescribeLiveSourceResponse.proto b/fixture/DescribeLiveSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLiveSourceResponse.proto
diff --git a/fixture/DescribeProgram.yaml b/fixture/DescribeProgram.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeProgram.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/DescribeProgramResponse.proto b/fixture/DescribeProgramResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeProgramResponse.proto
diff --git a/fixture/DescribeSourceLocation.yaml b/fixture/DescribeSourceLocation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSourceLocation.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/DescribeSourceLocationResponse.proto b/fixture/DescribeSourceLocationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSourceLocationResponse.proto
diff --git a/fixture/DescribeVodSource.yaml b/fixture/DescribeVodSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVodSource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/DescribeVodSourceResponse.proto b/fixture/DescribeVodSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVodSourceResponse.proto
diff --git a/fixture/GetChannelPolicy.yaml b/fixture/GetChannelPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetChannelPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/GetChannelPolicyResponse.proto b/fixture/GetChannelPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetChannelPolicyResponse.proto
diff --git a/fixture/GetChannelSchedule.yaml b/fixture/GetChannelSchedule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetChannelSchedule.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/GetChannelScheduleResponse.proto b/fixture/GetChannelScheduleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetChannelScheduleResponse.proto
diff --git a/fixture/GetPlaybackConfiguration.yaml b/fixture/GetPlaybackConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetPlaybackConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/GetPlaybackConfigurationResponse.proto b/fixture/GetPlaybackConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetPlaybackConfigurationResponse.proto
diff --git a/fixture/GetPrefetchSchedule.yaml b/fixture/GetPrefetchSchedule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetPrefetchSchedule.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/GetPrefetchScheduleResponse.proto b/fixture/GetPrefetchScheduleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetPrefetchScheduleResponse.proto
diff --git a/fixture/ListAlerts.yaml b/fixture/ListAlerts.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAlerts.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/ListAlertsResponse.proto b/fixture/ListAlertsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAlertsResponse.proto
diff --git a/fixture/ListChannels.yaml b/fixture/ListChannels.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListChannels.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/ListChannelsResponse.proto b/fixture/ListChannelsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListChannelsResponse.proto
diff --git a/fixture/ListLiveSources.yaml b/fixture/ListLiveSources.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListLiveSources.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/ListLiveSourcesResponse.proto b/fixture/ListLiveSourcesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListLiveSourcesResponse.proto
diff --git a/fixture/ListPlaybackConfigurations.yaml b/fixture/ListPlaybackConfigurations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListPlaybackConfigurations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/ListPlaybackConfigurationsResponse.proto b/fixture/ListPlaybackConfigurationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListPlaybackConfigurationsResponse.proto
diff --git a/fixture/ListPrefetchSchedules.yaml b/fixture/ListPrefetchSchedules.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListPrefetchSchedules.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/ListPrefetchSchedulesResponse.proto b/fixture/ListPrefetchSchedulesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListPrefetchSchedulesResponse.proto
diff --git a/fixture/ListSourceLocations.yaml b/fixture/ListSourceLocations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSourceLocations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/ListSourceLocationsResponse.proto b/fixture/ListSourceLocationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSourceLocationsResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListTagsForResourceResponse.proto b/fixture/ListTagsForResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResourceResponse.proto
diff --git a/fixture/ListVodSources.yaml b/fixture/ListVodSources.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListVodSources.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/ListVodSourcesResponse.proto b/fixture/ListVodSourcesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListVodSourcesResponse.proto
diff --git a/fixture/PutChannelPolicy.yaml b/fixture/PutChannelPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutChannelPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/PutChannelPolicyResponse.proto b/fixture/PutChannelPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutChannelPolicyResponse.proto
diff --git a/fixture/PutPlaybackConfiguration.yaml b/fixture/PutPlaybackConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutPlaybackConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/PutPlaybackConfigurationResponse.proto b/fixture/PutPlaybackConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutPlaybackConfigurationResponse.proto
diff --git a/fixture/StartChannel.yaml b/fixture/StartChannel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartChannel.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/StartChannelResponse.proto b/fixture/StartChannelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartChannelResponse.proto
diff --git a/fixture/StopChannel.yaml b/fixture/StopChannel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopChannel.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/StopChannelResponse.proto b/fixture/StopChannelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopChannelResponse.proto
diff --git a/fixture/TagResource.yaml b/fixture/TagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UntagResourceResponse.proto b/fixture/UntagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResourceResponse.proto
diff --git a/fixture/UpdateChannel.yaml b/fixture/UpdateChannel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateChannel.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/UpdateChannelResponse.proto b/fixture/UpdateChannelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateChannelResponse.proto
diff --git a/fixture/UpdateLiveSource.yaml b/fixture/UpdateLiveSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLiveSource.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/UpdateLiveSourceResponse.proto b/fixture/UpdateLiveSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLiveSourceResponse.proto
diff --git a/fixture/UpdateSourceLocation.yaml b/fixture/UpdateSourceLocation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSourceLocation.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/UpdateSourceLocationResponse.proto b/fixture/UpdateSourceLocationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSourceLocationResponse.proto
diff --git a/fixture/UpdateVodSource.yaml b/fixture/UpdateVodSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateVodSource.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.mediatailor/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.mediatailor.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/UpdateVodSourceResponse.proto b/fixture/UpdateVodSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateVodSourceResponse.proto
diff --git a/gen/Amazonka/MediaTailor.hs b/gen/Amazonka/MediaTailor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor.hs
@@ -0,0 +1,558 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.MediaTailor
+-- 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 @2018-04-23@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Use the AWS Elemental MediaTailor SDKs and CLI to configure scalable ad
+-- insertion and linear channels. With MediaTailor, you can assemble
+-- existing content into a linear stream and serve targeted ads to viewers
+-- while maintaining broadcast quality in over-the-top (OTT) video
+-- applications. For information about using the service, including
+-- detailed information about the settings covered in this guide, see the
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ AWS Elemental MediaTailor User Guide>.
+--
+-- Through the SDKs and the CLI you manage AWS Elemental MediaTailor
+-- configurations and channels the same as you do through the console. For
+-- example, you specify ad insertion behavior and mapping information for
+-- the origin server and the ad decision server (ADS).
+module Amazonka.MediaTailor
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** BadRequestException
+    _BadRequestException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** ConfigureLogsForPlaybackConfiguration
+    ConfigureLogsForPlaybackConfiguration (ConfigureLogsForPlaybackConfiguration'),
+    newConfigureLogsForPlaybackConfiguration,
+    ConfigureLogsForPlaybackConfigurationResponse (ConfigureLogsForPlaybackConfigurationResponse'),
+    newConfigureLogsForPlaybackConfigurationResponse,
+
+    -- ** CreateChannel
+    CreateChannel (CreateChannel'),
+    newCreateChannel,
+    CreateChannelResponse (CreateChannelResponse'),
+    newCreateChannelResponse,
+
+    -- ** CreateLiveSource
+    CreateLiveSource (CreateLiveSource'),
+    newCreateLiveSource,
+    CreateLiveSourceResponse (CreateLiveSourceResponse'),
+    newCreateLiveSourceResponse,
+
+    -- ** CreatePrefetchSchedule
+    CreatePrefetchSchedule (CreatePrefetchSchedule'),
+    newCreatePrefetchSchedule,
+    CreatePrefetchScheduleResponse (CreatePrefetchScheduleResponse'),
+    newCreatePrefetchScheduleResponse,
+
+    -- ** CreateProgram
+    CreateProgram (CreateProgram'),
+    newCreateProgram,
+    CreateProgramResponse (CreateProgramResponse'),
+    newCreateProgramResponse,
+
+    -- ** CreateSourceLocation
+    CreateSourceLocation (CreateSourceLocation'),
+    newCreateSourceLocation,
+    CreateSourceLocationResponse (CreateSourceLocationResponse'),
+    newCreateSourceLocationResponse,
+
+    -- ** CreateVodSource
+    CreateVodSource (CreateVodSource'),
+    newCreateVodSource,
+    CreateVodSourceResponse (CreateVodSourceResponse'),
+    newCreateVodSourceResponse,
+
+    -- ** DeleteChannel
+    DeleteChannel (DeleteChannel'),
+    newDeleteChannel,
+    DeleteChannelResponse (DeleteChannelResponse'),
+    newDeleteChannelResponse,
+
+    -- ** DeleteChannelPolicy
+    DeleteChannelPolicy (DeleteChannelPolicy'),
+    newDeleteChannelPolicy,
+    DeleteChannelPolicyResponse (DeleteChannelPolicyResponse'),
+    newDeleteChannelPolicyResponse,
+
+    -- ** DeleteLiveSource
+    DeleteLiveSource (DeleteLiveSource'),
+    newDeleteLiveSource,
+    DeleteLiveSourceResponse (DeleteLiveSourceResponse'),
+    newDeleteLiveSourceResponse,
+
+    -- ** DeletePlaybackConfiguration
+    DeletePlaybackConfiguration (DeletePlaybackConfiguration'),
+    newDeletePlaybackConfiguration,
+    DeletePlaybackConfigurationResponse (DeletePlaybackConfigurationResponse'),
+    newDeletePlaybackConfigurationResponse,
+
+    -- ** DeletePrefetchSchedule
+    DeletePrefetchSchedule (DeletePrefetchSchedule'),
+    newDeletePrefetchSchedule,
+    DeletePrefetchScheduleResponse (DeletePrefetchScheduleResponse'),
+    newDeletePrefetchScheduleResponse,
+
+    -- ** DeleteProgram
+    DeleteProgram (DeleteProgram'),
+    newDeleteProgram,
+    DeleteProgramResponse (DeleteProgramResponse'),
+    newDeleteProgramResponse,
+
+    -- ** DeleteSourceLocation
+    DeleteSourceLocation (DeleteSourceLocation'),
+    newDeleteSourceLocation,
+    DeleteSourceLocationResponse (DeleteSourceLocationResponse'),
+    newDeleteSourceLocationResponse,
+
+    -- ** DeleteVodSource
+    DeleteVodSource (DeleteVodSource'),
+    newDeleteVodSource,
+    DeleteVodSourceResponse (DeleteVodSourceResponse'),
+    newDeleteVodSourceResponse,
+
+    -- ** DescribeChannel
+    DescribeChannel (DescribeChannel'),
+    newDescribeChannel,
+    DescribeChannelResponse (DescribeChannelResponse'),
+    newDescribeChannelResponse,
+
+    -- ** DescribeLiveSource
+    DescribeLiveSource (DescribeLiveSource'),
+    newDescribeLiveSource,
+    DescribeLiveSourceResponse (DescribeLiveSourceResponse'),
+    newDescribeLiveSourceResponse,
+
+    -- ** DescribeProgram
+    DescribeProgram (DescribeProgram'),
+    newDescribeProgram,
+    DescribeProgramResponse (DescribeProgramResponse'),
+    newDescribeProgramResponse,
+
+    -- ** DescribeSourceLocation
+    DescribeSourceLocation (DescribeSourceLocation'),
+    newDescribeSourceLocation,
+    DescribeSourceLocationResponse (DescribeSourceLocationResponse'),
+    newDescribeSourceLocationResponse,
+
+    -- ** DescribeVodSource
+    DescribeVodSource (DescribeVodSource'),
+    newDescribeVodSource,
+    DescribeVodSourceResponse (DescribeVodSourceResponse'),
+    newDescribeVodSourceResponse,
+
+    -- ** GetChannelPolicy
+    GetChannelPolicy (GetChannelPolicy'),
+    newGetChannelPolicy,
+    GetChannelPolicyResponse (GetChannelPolicyResponse'),
+    newGetChannelPolicyResponse,
+
+    -- ** GetChannelSchedule (Paginated)
+    GetChannelSchedule (GetChannelSchedule'),
+    newGetChannelSchedule,
+    GetChannelScheduleResponse (GetChannelScheduleResponse'),
+    newGetChannelScheduleResponse,
+
+    -- ** GetPlaybackConfiguration
+    GetPlaybackConfiguration (GetPlaybackConfiguration'),
+    newGetPlaybackConfiguration,
+    GetPlaybackConfigurationResponse (GetPlaybackConfigurationResponse'),
+    newGetPlaybackConfigurationResponse,
+
+    -- ** GetPrefetchSchedule
+    GetPrefetchSchedule (GetPrefetchSchedule'),
+    newGetPrefetchSchedule,
+    GetPrefetchScheduleResponse (GetPrefetchScheduleResponse'),
+    newGetPrefetchScheduleResponse,
+
+    -- ** ListAlerts (Paginated)
+    ListAlerts (ListAlerts'),
+    newListAlerts,
+    ListAlertsResponse (ListAlertsResponse'),
+    newListAlertsResponse,
+
+    -- ** ListChannels (Paginated)
+    ListChannels (ListChannels'),
+    newListChannels,
+    ListChannelsResponse (ListChannelsResponse'),
+    newListChannelsResponse,
+
+    -- ** ListLiveSources (Paginated)
+    ListLiveSources (ListLiveSources'),
+    newListLiveSources,
+    ListLiveSourcesResponse (ListLiveSourcesResponse'),
+    newListLiveSourcesResponse,
+
+    -- ** ListPlaybackConfigurations (Paginated)
+    ListPlaybackConfigurations (ListPlaybackConfigurations'),
+    newListPlaybackConfigurations,
+    ListPlaybackConfigurationsResponse (ListPlaybackConfigurationsResponse'),
+    newListPlaybackConfigurationsResponse,
+
+    -- ** ListPrefetchSchedules (Paginated)
+    ListPrefetchSchedules (ListPrefetchSchedules'),
+    newListPrefetchSchedules,
+    ListPrefetchSchedulesResponse (ListPrefetchSchedulesResponse'),
+    newListPrefetchSchedulesResponse,
+
+    -- ** ListSourceLocations (Paginated)
+    ListSourceLocations (ListSourceLocations'),
+    newListSourceLocations,
+    ListSourceLocationsResponse (ListSourceLocationsResponse'),
+    newListSourceLocationsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ListVodSources (Paginated)
+    ListVodSources (ListVodSources'),
+    newListVodSources,
+    ListVodSourcesResponse (ListVodSourcesResponse'),
+    newListVodSourcesResponse,
+
+    -- ** PutChannelPolicy
+    PutChannelPolicy (PutChannelPolicy'),
+    newPutChannelPolicy,
+    PutChannelPolicyResponse (PutChannelPolicyResponse'),
+    newPutChannelPolicyResponse,
+
+    -- ** PutPlaybackConfiguration
+    PutPlaybackConfiguration (PutPlaybackConfiguration'),
+    newPutPlaybackConfiguration,
+    PutPlaybackConfigurationResponse (PutPlaybackConfigurationResponse'),
+    newPutPlaybackConfigurationResponse,
+
+    -- ** StartChannel
+    StartChannel (StartChannel'),
+    newStartChannel,
+    StartChannelResponse (StartChannelResponse'),
+    newStartChannelResponse,
+
+    -- ** StopChannel
+    StopChannel (StopChannel'),
+    newStopChannel,
+    StopChannelResponse (StopChannelResponse'),
+    newStopChannelResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateChannel
+    UpdateChannel (UpdateChannel'),
+    newUpdateChannel,
+    UpdateChannelResponse (UpdateChannelResponse'),
+    newUpdateChannelResponse,
+
+    -- ** UpdateLiveSource
+    UpdateLiveSource (UpdateLiveSource'),
+    newUpdateLiveSource,
+    UpdateLiveSourceResponse (UpdateLiveSourceResponse'),
+    newUpdateLiveSourceResponse,
+
+    -- ** UpdateSourceLocation
+    UpdateSourceLocation (UpdateSourceLocation'),
+    newUpdateSourceLocation,
+    UpdateSourceLocationResponse (UpdateSourceLocationResponse'),
+    newUpdateSourceLocationResponse,
+
+    -- ** UpdateVodSource
+    UpdateVodSource (UpdateVodSource'),
+    newUpdateVodSource,
+    UpdateVodSourceResponse (UpdateVodSourceResponse'),
+    newUpdateVodSourceResponse,
+
+    -- * Types
+
+    -- ** AccessType
+    AccessType (..),
+
+    -- ** ChannelState
+    ChannelState (..),
+
+    -- ** MessageType
+    MessageType (..),
+
+    -- ** Mode
+    Mode (..),
+
+    -- ** Operator
+    Operator (..),
+
+    -- ** OriginManifestType
+    OriginManifestType (..),
+
+    -- ** PlaybackMode
+    PlaybackMode (..),
+
+    -- ** RelativePosition
+    RelativePosition (..),
+
+    -- ** ScheduleEntryType
+    ScheduleEntryType (..),
+
+    -- ** Tier
+    Tier (..),
+
+    -- ** Type
+    Type (..),
+
+    -- ** AccessConfiguration
+    AccessConfiguration (AccessConfiguration'),
+    newAccessConfiguration,
+
+    -- ** AdBreak
+    AdBreak (AdBreak'),
+    newAdBreak,
+
+    -- ** AdMarkerPassthrough
+    AdMarkerPassthrough (AdMarkerPassthrough'),
+    newAdMarkerPassthrough,
+
+    -- ** Alert
+    Alert (Alert'),
+    newAlert,
+
+    -- ** AvailMatchingCriteria
+    AvailMatchingCriteria (AvailMatchingCriteria'),
+    newAvailMatchingCriteria,
+
+    -- ** AvailSuppression
+    AvailSuppression (AvailSuppression'),
+    newAvailSuppression,
+
+    -- ** Bumper
+    Bumper (Bumper'),
+    newBumper,
+
+    -- ** CdnConfiguration
+    CdnConfiguration (CdnConfiguration'),
+    newCdnConfiguration,
+
+    -- ** Channel
+    Channel (Channel'),
+    newChannel,
+
+    -- ** DashConfiguration
+    DashConfiguration (DashConfiguration'),
+    newDashConfiguration,
+
+    -- ** DashConfigurationForPut
+    DashConfigurationForPut (DashConfigurationForPut'),
+    newDashConfigurationForPut,
+
+    -- ** DashPlaylistSettings
+    DashPlaylistSettings (DashPlaylistSettings'),
+    newDashPlaylistSettings,
+
+    -- ** DefaultSegmentDeliveryConfiguration
+    DefaultSegmentDeliveryConfiguration (DefaultSegmentDeliveryConfiguration'),
+    newDefaultSegmentDeliveryConfiguration,
+
+    -- ** HlsConfiguration
+    HlsConfiguration (HlsConfiguration'),
+    newHlsConfiguration,
+
+    -- ** HlsPlaylistSettings
+    HlsPlaylistSettings (HlsPlaylistSettings'),
+    newHlsPlaylistSettings,
+
+    -- ** HttpConfiguration
+    HttpConfiguration (HttpConfiguration'),
+    newHttpConfiguration,
+
+    -- ** HttpPackageConfiguration
+    HttpPackageConfiguration (HttpPackageConfiguration'),
+    newHttpPackageConfiguration,
+
+    -- ** LivePreRollConfiguration
+    LivePreRollConfiguration (LivePreRollConfiguration'),
+    newLivePreRollConfiguration,
+
+    -- ** LiveSource
+    LiveSource (LiveSource'),
+    newLiveSource,
+
+    -- ** LogConfiguration
+    LogConfiguration (LogConfiguration'),
+    newLogConfiguration,
+
+    -- ** ManifestProcessingRules
+    ManifestProcessingRules (ManifestProcessingRules'),
+    newManifestProcessingRules,
+
+    -- ** PlaybackConfiguration
+    PlaybackConfiguration (PlaybackConfiguration'),
+    newPlaybackConfiguration,
+
+    -- ** PrefetchConsumption
+    PrefetchConsumption (PrefetchConsumption'),
+    newPrefetchConsumption,
+
+    -- ** PrefetchRetrieval
+    PrefetchRetrieval (PrefetchRetrieval'),
+    newPrefetchRetrieval,
+
+    -- ** PrefetchSchedule
+    PrefetchSchedule (PrefetchSchedule'),
+    newPrefetchSchedule,
+
+    -- ** RequestOutputItem
+    RequestOutputItem (RequestOutputItem'),
+    newRequestOutputItem,
+
+    -- ** ResponseOutputItem
+    ResponseOutputItem (ResponseOutputItem'),
+    newResponseOutputItem,
+
+    -- ** ScheduleAdBreak
+    ScheduleAdBreak (ScheduleAdBreak'),
+    newScheduleAdBreak,
+
+    -- ** ScheduleConfiguration
+    ScheduleConfiguration (ScheduleConfiguration'),
+    newScheduleConfiguration,
+
+    -- ** ScheduleEntry
+    ScheduleEntry (ScheduleEntry'),
+    newScheduleEntry,
+
+    -- ** SecretsManagerAccessTokenConfiguration
+    SecretsManagerAccessTokenConfiguration (SecretsManagerAccessTokenConfiguration'),
+    newSecretsManagerAccessTokenConfiguration,
+
+    -- ** SegmentDeliveryConfiguration
+    SegmentDeliveryConfiguration (SegmentDeliveryConfiguration'),
+    newSegmentDeliveryConfiguration,
+
+    -- ** SegmentationDescriptor
+    SegmentationDescriptor (SegmentationDescriptor'),
+    newSegmentationDescriptor,
+
+    -- ** SlateSource
+    SlateSource (SlateSource'),
+    newSlateSource,
+
+    -- ** SourceLocation
+    SourceLocation (SourceLocation'),
+    newSourceLocation,
+
+    -- ** SpliceInsertMessage
+    SpliceInsertMessage (SpliceInsertMessage'),
+    newSpliceInsertMessage,
+
+    -- ** TimeSignalMessage
+    TimeSignalMessage (TimeSignalMessage'),
+    newTimeSignalMessage,
+
+    -- ** Transition
+    Transition (Transition'),
+    newTransition,
+
+    -- ** VodSource
+    VodSource (VodSource'),
+    newVodSource,
+  )
+where
+
+import Amazonka.MediaTailor.ConfigureLogsForPlaybackConfiguration
+import Amazonka.MediaTailor.CreateChannel
+import Amazonka.MediaTailor.CreateLiveSource
+import Amazonka.MediaTailor.CreatePrefetchSchedule
+import Amazonka.MediaTailor.CreateProgram
+import Amazonka.MediaTailor.CreateSourceLocation
+import Amazonka.MediaTailor.CreateVodSource
+import Amazonka.MediaTailor.DeleteChannel
+import Amazonka.MediaTailor.DeleteChannelPolicy
+import Amazonka.MediaTailor.DeleteLiveSource
+import Amazonka.MediaTailor.DeletePlaybackConfiguration
+import Amazonka.MediaTailor.DeletePrefetchSchedule
+import Amazonka.MediaTailor.DeleteProgram
+import Amazonka.MediaTailor.DeleteSourceLocation
+import Amazonka.MediaTailor.DeleteVodSource
+import Amazonka.MediaTailor.DescribeChannel
+import Amazonka.MediaTailor.DescribeLiveSource
+import Amazonka.MediaTailor.DescribeProgram
+import Amazonka.MediaTailor.DescribeSourceLocation
+import Amazonka.MediaTailor.DescribeVodSource
+import Amazonka.MediaTailor.GetChannelPolicy
+import Amazonka.MediaTailor.GetChannelSchedule
+import Amazonka.MediaTailor.GetPlaybackConfiguration
+import Amazonka.MediaTailor.GetPrefetchSchedule
+import Amazonka.MediaTailor.Lens
+import Amazonka.MediaTailor.ListAlerts
+import Amazonka.MediaTailor.ListChannels
+import Amazonka.MediaTailor.ListLiveSources
+import Amazonka.MediaTailor.ListPlaybackConfigurations
+import Amazonka.MediaTailor.ListPrefetchSchedules
+import Amazonka.MediaTailor.ListSourceLocations
+import Amazonka.MediaTailor.ListTagsForResource
+import Amazonka.MediaTailor.ListVodSources
+import Amazonka.MediaTailor.PutChannelPolicy
+import Amazonka.MediaTailor.PutPlaybackConfiguration
+import Amazonka.MediaTailor.StartChannel
+import Amazonka.MediaTailor.StopChannel
+import Amazonka.MediaTailor.TagResource
+import Amazonka.MediaTailor.Types
+import Amazonka.MediaTailor.UntagResource
+import Amazonka.MediaTailor.UpdateChannel
+import Amazonka.MediaTailor.UpdateLiveSource
+import Amazonka.MediaTailor.UpdateSourceLocation
+import Amazonka.MediaTailor.UpdateVodSource
+import Amazonka.MediaTailor.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 'MediaTailor'.
+
+-- $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/MediaTailor/ConfigureLogsForPlaybackConfiguration.hs b/gen/Amazonka/MediaTailor/ConfigureLogsForPlaybackConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/ConfigureLogsForPlaybackConfiguration.hs
@@ -0,0 +1,268 @@
+{-# 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.MediaTailor.ConfigureLogsForPlaybackConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Amazon CloudWatch log settings for a playback configuration.
+module Amazonka.MediaTailor.ConfigureLogsForPlaybackConfiguration
+  ( -- * Creating a Request
+    ConfigureLogsForPlaybackConfiguration (..),
+    newConfigureLogsForPlaybackConfiguration,
+
+    -- * Request Lenses
+    configureLogsForPlaybackConfiguration_percentEnabled,
+    configureLogsForPlaybackConfiguration_playbackConfigurationName,
+
+    -- * Destructuring the Response
+    ConfigureLogsForPlaybackConfigurationResponse (..),
+    newConfigureLogsForPlaybackConfigurationResponse,
+
+    -- * Response Lenses
+    configureLogsForPlaybackConfigurationResponse_playbackConfigurationName,
+    configureLogsForPlaybackConfigurationResponse_httpStatus,
+    configureLogsForPlaybackConfigurationResponse_percentEnabled,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Configures Amazon CloudWatch log settings for a playback configuration.
+--
+-- /See:/ 'newConfigureLogsForPlaybackConfiguration' smart constructor.
+data ConfigureLogsForPlaybackConfiguration = ConfigureLogsForPlaybackConfiguration'
+  { -- | The percentage of session logs that MediaTailor sends to your Cloudwatch
+    -- Logs account. For example, if your playback configuration has 1000
+    -- sessions and percentEnabled is set to @60@, MediaTailor sends logs for
+    -- 600 of the sessions to CloudWatch Logs. MediaTailor decides at random
+    -- which of the playback configuration sessions to send logs for. If you
+    -- want to view logs for a specific session, you can use the
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/debug-log-mode.html debug log mode>.
+    --
+    -- Valid values: @0@ - @100@
+    percentEnabled :: Prelude.Int,
+    -- | The name of the playback configuration.
+    playbackConfigurationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfigureLogsForPlaybackConfiguration' 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:
+--
+-- 'percentEnabled', 'configureLogsForPlaybackConfiguration_percentEnabled' - The percentage of session logs that MediaTailor sends to your Cloudwatch
+-- Logs account. For example, if your playback configuration has 1000
+-- sessions and percentEnabled is set to @60@, MediaTailor sends logs for
+-- 600 of the sessions to CloudWatch Logs. MediaTailor decides at random
+-- which of the playback configuration sessions to send logs for. If you
+-- want to view logs for a specific session, you can use the
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/debug-log-mode.html debug log mode>.
+--
+-- Valid values: @0@ - @100@
+--
+-- 'playbackConfigurationName', 'configureLogsForPlaybackConfiguration_playbackConfigurationName' - The name of the playback configuration.
+newConfigureLogsForPlaybackConfiguration ::
+  -- | 'percentEnabled'
+  Prelude.Int ->
+  -- | 'playbackConfigurationName'
+  Prelude.Text ->
+  ConfigureLogsForPlaybackConfiguration
+newConfigureLogsForPlaybackConfiguration
+  pPercentEnabled_
+  pPlaybackConfigurationName_ =
+    ConfigureLogsForPlaybackConfiguration'
+      { percentEnabled =
+          pPercentEnabled_,
+        playbackConfigurationName =
+          pPlaybackConfigurationName_
+      }
+
+-- | The percentage of session logs that MediaTailor sends to your Cloudwatch
+-- Logs account. For example, if your playback configuration has 1000
+-- sessions and percentEnabled is set to @60@, MediaTailor sends logs for
+-- 600 of the sessions to CloudWatch Logs. MediaTailor decides at random
+-- which of the playback configuration sessions to send logs for. If you
+-- want to view logs for a specific session, you can use the
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/debug-log-mode.html debug log mode>.
+--
+-- Valid values: @0@ - @100@
+configureLogsForPlaybackConfiguration_percentEnabled :: Lens.Lens' ConfigureLogsForPlaybackConfiguration Prelude.Int
+configureLogsForPlaybackConfiguration_percentEnabled = Lens.lens (\ConfigureLogsForPlaybackConfiguration' {percentEnabled} -> percentEnabled) (\s@ConfigureLogsForPlaybackConfiguration' {} a -> s {percentEnabled = a} :: ConfigureLogsForPlaybackConfiguration)
+
+-- | The name of the playback configuration.
+configureLogsForPlaybackConfiguration_playbackConfigurationName :: Lens.Lens' ConfigureLogsForPlaybackConfiguration Prelude.Text
+configureLogsForPlaybackConfiguration_playbackConfigurationName = Lens.lens (\ConfigureLogsForPlaybackConfiguration' {playbackConfigurationName} -> playbackConfigurationName) (\s@ConfigureLogsForPlaybackConfiguration' {} a -> s {playbackConfigurationName = a} :: ConfigureLogsForPlaybackConfiguration)
+
+instance
+  Core.AWSRequest
+    ConfigureLogsForPlaybackConfiguration
+  where
+  type
+    AWSResponse
+      ConfigureLogsForPlaybackConfiguration =
+      ConfigureLogsForPlaybackConfigurationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ConfigureLogsForPlaybackConfigurationResponse'
+            Prelude.<$> (x Data..?> "PlaybackConfigurationName")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "PercentEnabled")
+      )
+
+instance
+  Prelude.Hashable
+    ConfigureLogsForPlaybackConfiguration
+  where
+  hashWithSalt
+    _salt
+    ConfigureLogsForPlaybackConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` percentEnabled
+        `Prelude.hashWithSalt` playbackConfigurationName
+
+instance
+  Prelude.NFData
+    ConfigureLogsForPlaybackConfiguration
+  where
+  rnf ConfigureLogsForPlaybackConfiguration' {..} =
+    Prelude.rnf percentEnabled
+      `Prelude.seq` Prelude.rnf playbackConfigurationName
+
+instance
+  Data.ToHeaders
+    ConfigureLogsForPlaybackConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    ConfigureLogsForPlaybackConfiguration
+  where
+  toJSON ConfigureLogsForPlaybackConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("PercentEnabled" Data..= percentEnabled),
+            Prelude.Just
+              ( "PlaybackConfigurationName"
+                  Data..= playbackConfigurationName
+              )
+          ]
+      )
+
+instance
+  Data.ToPath
+    ConfigureLogsForPlaybackConfiguration
+  where
+  toPath =
+    Prelude.const
+      "/configureLogs/playbackConfiguration"
+
+instance
+  Data.ToQuery
+    ConfigureLogsForPlaybackConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newConfigureLogsForPlaybackConfigurationResponse' smart constructor.
+data ConfigureLogsForPlaybackConfigurationResponse = ConfigureLogsForPlaybackConfigurationResponse'
+  { -- | The name of the playback configuration.
+    playbackConfigurationName :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The percentage of session logs that MediaTailor sends to your Cloudwatch
+    -- Logs account.
+    percentEnabled :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfigureLogsForPlaybackConfigurationResponse' 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:
+--
+-- 'playbackConfigurationName', 'configureLogsForPlaybackConfigurationResponse_playbackConfigurationName' - The name of the playback configuration.
+--
+-- 'httpStatus', 'configureLogsForPlaybackConfigurationResponse_httpStatus' - The response's http status code.
+--
+-- 'percentEnabled', 'configureLogsForPlaybackConfigurationResponse_percentEnabled' - The percentage of session logs that MediaTailor sends to your Cloudwatch
+-- Logs account.
+newConfigureLogsForPlaybackConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'percentEnabled'
+  Prelude.Int ->
+  ConfigureLogsForPlaybackConfigurationResponse
+newConfigureLogsForPlaybackConfigurationResponse
+  pHttpStatus_
+  pPercentEnabled_ =
+    ConfigureLogsForPlaybackConfigurationResponse'
+      { playbackConfigurationName =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        percentEnabled =
+          pPercentEnabled_
+      }
+
+-- | The name of the playback configuration.
+configureLogsForPlaybackConfigurationResponse_playbackConfigurationName :: Lens.Lens' ConfigureLogsForPlaybackConfigurationResponse (Prelude.Maybe Prelude.Text)
+configureLogsForPlaybackConfigurationResponse_playbackConfigurationName = Lens.lens (\ConfigureLogsForPlaybackConfigurationResponse' {playbackConfigurationName} -> playbackConfigurationName) (\s@ConfigureLogsForPlaybackConfigurationResponse' {} a -> s {playbackConfigurationName = a} :: ConfigureLogsForPlaybackConfigurationResponse)
+
+-- | The response's http status code.
+configureLogsForPlaybackConfigurationResponse_httpStatus :: Lens.Lens' ConfigureLogsForPlaybackConfigurationResponse Prelude.Int
+configureLogsForPlaybackConfigurationResponse_httpStatus = Lens.lens (\ConfigureLogsForPlaybackConfigurationResponse' {httpStatus} -> httpStatus) (\s@ConfigureLogsForPlaybackConfigurationResponse' {} a -> s {httpStatus = a} :: ConfigureLogsForPlaybackConfigurationResponse)
+
+-- | The percentage of session logs that MediaTailor sends to your Cloudwatch
+-- Logs account.
+configureLogsForPlaybackConfigurationResponse_percentEnabled :: Lens.Lens' ConfigureLogsForPlaybackConfigurationResponse Prelude.Int
+configureLogsForPlaybackConfigurationResponse_percentEnabled = Lens.lens (\ConfigureLogsForPlaybackConfigurationResponse' {percentEnabled} -> percentEnabled) (\s@ConfigureLogsForPlaybackConfigurationResponse' {} a -> s {percentEnabled = a} :: ConfigureLogsForPlaybackConfigurationResponse)
+
+instance
+  Prelude.NFData
+    ConfigureLogsForPlaybackConfigurationResponse
+  where
+  rnf
+    ConfigureLogsForPlaybackConfigurationResponse' {..} =
+      Prelude.rnf playbackConfigurationName
+        `Prelude.seq` Prelude.rnf httpStatus
+        `Prelude.seq` Prelude.rnf percentEnabled
diff --git a/gen/Amazonka/MediaTailor/CreateChannel.hs b/gen/Amazonka/MediaTailor/CreateChannel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/CreateChannel.hs
@@ -0,0 +1,397 @@
+{-# 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.MediaTailor.CreateChannel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a channel. For information about MediaTailor channels, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-channels.html Working with channels>
+-- in the /MediaTailor User Guide/.
+module Amazonka.MediaTailor.CreateChannel
+  ( -- * Creating a Request
+    CreateChannel (..),
+    newCreateChannel,
+
+    -- * Request Lenses
+    createChannel_fillerSlate,
+    createChannel_tags,
+    createChannel_tier,
+    createChannel_channelName,
+    createChannel_outputs,
+    createChannel_playbackMode,
+
+    -- * Destructuring the Response
+    CreateChannelResponse (..),
+    newCreateChannelResponse,
+
+    -- * Response Lenses
+    createChannelResponse_arn,
+    createChannelResponse_channelName,
+    createChannelResponse_channelState,
+    createChannelResponse_creationTime,
+    createChannelResponse_fillerSlate,
+    createChannelResponse_lastModifiedTime,
+    createChannelResponse_outputs,
+    createChannelResponse_playbackMode,
+    createChannelResponse_tags,
+    createChannelResponse_tier,
+    createChannelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateChannel' smart constructor.
+data CreateChannel = CreateChannel'
+  { -- | The slate used to fill gaps between programs in the schedule. You must
+    -- configure filler slate if your channel uses the @LINEAR@ @PlaybackMode@.
+    -- MediaTailor doesn\'t support filler slate for channels using the @LOOP@
+    -- @PlaybackMode@.
+    fillerSlate :: Prelude.Maybe SlateSource,
+    -- | The tags to assign to the channel. Tags are key-value pairs that you can
+    -- associate with Amazon resources to help with organization, access
+    -- control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The tier of the channel.
+    tier :: Prelude.Maybe Tier,
+    -- | The name of the channel.
+    channelName :: Prelude.Text,
+    -- | The channel\'s output properties.
+    outputs :: [RequestOutputItem],
+    -- | The type of playback mode to use for this channel.
+    --
+    -- @LINEAR@ - The programs in the schedule play once back-to-back in the
+    -- schedule.
+    --
+    -- @LOOP@ - The programs in the schedule play back-to-back in an endless
+    -- loop. When the last program in the schedule stops playing, playback
+    -- loops back to the first program in the schedule.
+    playbackMode :: PlaybackMode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateChannel' 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:
+--
+-- 'fillerSlate', 'createChannel_fillerSlate' - The slate used to fill gaps between programs in the schedule. You must
+-- configure filler slate if your channel uses the @LINEAR@ @PlaybackMode@.
+-- MediaTailor doesn\'t support filler slate for channels using the @LOOP@
+-- @PlaybackMode@.
+--
+-- 'tags', 'createChannel_tags' - The tags to assign to the channel. Tags are key-value pairs that you can
+-- associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'tier', 'createChannel_tier' - The tier of the channel.
+--
+-- 'channelName', 'createChannel_channelName' - The name of the channel.
+--
+-- 'outputs', 'createChannel_outputs' - The channel\'s output properties.
+--
+-- 'playbackMode', 'createChannel_playbackMode' - The type of playback mode to use for this channel.
+--
+-- @LINEAR@ - The programs in the schedule play once back-to-back in the
+-- schedule.
+--
+-- @LOOP@ - The programs in the schedule play back-to-back in an endless
+-- loop. When the last program in the schedule stops playing, playback
+-- loops back to the first program in the schedule.
+newCreateChannel ::
+  -- | 'channelName'
+  Prelude.Text ->
+  -- | 'playbackMode'
+  PlaybackMode ->
+  CreateChannel
+newCreateChannel pChannelName_ pPlaybackMode_ =
+  CreateChannel'
+    { fillerSlate = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      tier = Prelude.Nothing,
+      channelName = pChannelName_,
+      outputs = Prelude.mempty,
+      playbackMode = pPlaybackMode_
+    }
+
+-- | The slate used to fill gaps between programs in the schedule. You must
+-- configure filler slate if your channel uses the @LINEAR@ @PlaybackMode@.
+-- MediaTailor doesn\'t support filler slate for channels using the @LOOP@
+-- @PlaybackMode@.
+createChannel_fillerSlate :: Lens.Lens' CreateChannel (Prelude.Maybe SlateSource)
+createChannel_fillerSlate = Lens.lens (\CreateChannel' {fillerSlate} -> fillerSlate) (\s@CreateChannel' {} a -> s {fillerSlate = a} :: CreateChannel)
+
+-- | The tags to assign to the channel. Tags are key-value pairs that you can
+-- associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+createChannel_tags :: Lens.Lens' CreateChannel (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createChannel_tags = Lens.lens (\CreateChannel' {tags} -> tags) (\s@CreateChannel' {} a -> s {tags = a} :: CreateChannel) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tier of the channel.
+createChannel_tier :: Lens.Lens' CreateChannel (Prelude.Maybe Tier)
+createChannel_tier = Lens.lens (\CreateChannel' {tier} -> tier) (\s@CreateChannel' {} a -> s {tier = a} :: CreateChannel)
+
+-- | The name of the channel.
+createChannel_channelName :: Lens.Lens' CreateChannel Prelude.Text
+createChannel_channelName = Lens.lens (\CreateChannel' {channelName} -> channelName) (\s@CreateChannel' {} a -> s {channelName = a} :: CreateChannel)
+
+-- | The channel\'s output properties.
+createChannel_outputs :: Lens.Lens' CreateChannel [RequestOutputItem]
+createChannel_outputs = Lens.lens (\CreateChannel' {outputs} -> outputs) (\s@CreateChannel' {} a -> s {outputs = a} :: CreateChannel) Prelude.. Lens.coerced
+
+-- | The type of playback mode to use for this channel.
+--
+-- @LINEAR@ - The programs in the schedule play once back-to-back in the
+-- schedule.
+--
+-- @LOOP@ - The programs in the schedule play back-to-back in an endless
+-- loop. When the last program in the schedule stops playing, playback
+-- loops back to the first program in the schedule.
+createChannel_playbackMode :: Lens.Lens' CreateChannel PlaybackMode
+createChannel_playbackMode = Lens.lens (\CreateChannel' {playbackMode} -> playbackMode) (\s@CreateChannel' {} a -> s {playbackMode = a} :: CreateChannel)
+
+instance Core.AWSRequest CreateChannel where
+  type
+    AWSResponse CreateChannel =
+      CreateChannelResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateChannelResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "ChannelName")
+            Prelude.<*> (x Data..?> "ChannelState")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "FillerSlate")
+            Prelude.<*> (x Data..?> "LastModifiedTime")
+            Prelude.<*> (x Data..?> "Outputs" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "PlaybackMode")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Tier")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateChannel where
+  hashWithSalt _salt CreateChannel' {..} =
+    _salt
+      `Prelude.hashWithSalt` fillerSlate
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` tier
+      `Prelude.hashWithSalt` channelName
+      `Prelude.hashWithSalt` outputs
+      `Prelude.hashWithSalt` playbackMode
+
+instance Prelude.NFData CreateChannel where
+  rnf CreateChannel' {..} =
+    Prelude.rnf fillerSlate
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf tier
+      `Prelude.seq` Prelude.rnf channelName
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf playbackMode
+
+instance Data.ToHeaders CreateChannel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateChannel where
+  toJSON CreateChannel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FillerSlate" Data..=) Prelude.<$> fillerSlate,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("Tier" Data..=) Prelude.<$> tier,
+            Prelude.Just ("Outputs" Data..= outputs),
+            Prelude.Just ("PlaybackMode" Data..= playbackMode)
+          ]
+      )
+
+instance Data.ToPath CreateChannel where
+  toPath CreateChannel' {..} =
+    Prelude.mconcat
+      ["/channel/", Data.toBS channelName]
+
+instance Data.ToQuery CreateChannel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateChannelResponse' smart constructor.
+data CreateChannelResponse = CreateChannelResponse'
+  { -- | The Amazon Resource Name (ARN) to assign to the channel.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name to assign to the channel.
+    channelName :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the channel is in a running state or not.
+    channelState :: Prelude.Maybe ChannelState,
+    -- | The timestamp of when the channel was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | Contains information about the slate used to fill gaps between programs
+    -- in the schedule.
+    fillerSlate :: Prelude.Maybe SlateSource,
+    -- | The timestamp of when the channel was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The output properties to assign to the channel.
+    outputs :: Prelude.Maybe [ResponseOutputItem],
+    -- | The playback mode to assign to the channel.
+    playbackMode :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the channel. Tags are key-value pairs that you can
+    -- associate with Amazon resources to help with organization, access
+    -- control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The tier of the channel.
+    tier :: 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 'CreateChannelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'createChannelResponse_arn' - The Amazon Resource Name (ARN) to assign to the channel.
+--
+-- 'channelName', 'createChannelResponse_channelName' - The name to assign to the channel.
+--
+-- 'channelState', 'createChannelResponse_channelState' - Indicates whether the channel is in a running state or not.
+--
+-- 'creationTime', 'createChannelResponse_creationTime' - The timestamp of when the channel was created.
+--
+-- 'fillerSlate', 'createChannelResponse_fillerSlate' - Contains information about the slate used to fill gaps between programs
+-- in the schedule.
+--
+-- 'lastModifiedTime', 'createChannelResponse_lastModifiedTime' - The timestamp of when the channel was last modified.
+--
+-- 'outputs', 'createChannelResponse_outputs' - The output properties to assign to the channel.
+--
+-- 'playbackMode', 'createChannelResponse_playbackMode' - The playback mode to assign to the channel.
+--
+-- 'tags', 'createChannelResponse_tags' - The tags to assign to the channel. Tags are key-value pairs that you can
+-- associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'tier', 'createChannelResponse_tier' - The tier of the channel.
+--
+-- 'httpStatus', 'createChannelResponse_httpStatus' - The response's http status code.
+newCreateChannelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateChannelResponse
+newCreateChannelResponse pHttpStatus_ =
+  CreateChannelResponse'
+    { arn = Prelude.Nothing,
+      channelName = Prelude.Nothing,
+      channelState = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      fillerSlate = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      outputs = Prelude.Nothing,
+      playbackMode = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      tier = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) to assign to the channel.
+createChannelResponse_arn :: Lens.Lens' CreateChannelResponse (Prelude.Maybe Prelude.Text)
+createChannelResponse_arn = Lens.lens (\CreateChannelResponse' {arn} -> arn) (\s@CreateChannelResponse' {} a -> s {arn = a} :: CreateChannelResponse)
+
+-- | The name to assign to the channel.
+createChannelResponse_channelName :: Lens.Lens' CreateChannelResponse (Prelude.Maybe Prelude.Text)
+createChannelResponse_channelName = Lens.lens (\CreateChannelResponse' {channelName} -> channelName) (\s@CreateChannelResponse' {} a -> s {channelName = a} :: CreateChannelResponse)
+
+-- | Indicates whether the channel is in a running state or not.
+createChannelResponse_channelState :: Lens.Lens' CreateChannelResponse (Prelude.Maybe ChannelState)
+createChannelResponse_channelState = Lens.lens (\CreateChannelResponse' {channelState} -> channelState) (\s@CreateChannelResponse' {} a -> s {channelState = a} :: CreateChannelResponse)
+
+-- | The timestamp of when the channel was created.
+createChannelResponse_creationTime :: Lens.Lens' CreateChannelResponse (Prelude.Maybe Prelude.UTCTime)
+createChannelResponse_creationTime = Lens.lens (\CreateChannelResponse' {creationTime} -> creationTime) (\s@CreateChannelResponse' {} a -> s {creationTime = a} :: CreateChannelResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Contains information about the slate used to fill gaps between programs
+-- in the schedule.
+createChannelResponse_fillerSlate :: Lens.Lens' CreateChannelResponse (Prelude.Maybe SlateSource)
+createChannelResponse_fillerSlate = Lens.lens (\CreateChannelResponse' {fillerSlate} -> fillerSlate) (\s@CreateChannelResponse' {} a -> s {fillerSlate = a} :: CreateChannelResponse)
+
+-- | The timestamp of when the channel was last modified.
+createChannelResponse_lastModifiedTime :: Lens.Lens' CreateChannelResponse (Prelude.Maybe Prelude.UTCTime)
+createChannelResponse_lastModifiedTime = Lens.lens (\CreateChannelResponse' {lastModifiedTime} -> lastModifiedTime) (\s@CreateChannelResponse' {} a -> s {lastModifiedTime = a} :: CreateChannelResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The output properties to assign to the channel.
+createChannelResponse_outputs :: Lens.Lens' CreateChannelResponse (Prelude.Maybe [ResponseOutputItem])
+createChannelResponse_outputs = Lens.lens (\CreateChannelResponse' {outputs} -> outputs) (\s@CreateChannelResponse' {} a -> s {outputs = a} :: CreateChannelResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The playback mode to assign to the channel.
+createChannelResponse_playbackMode :: Lens.Lens' CreateChannelResponse (Prelude.Maybe Prelude.Text)
+createChannelResponse_playbackMode = Lens.lens (\CreateChannelResponse' {playbackMode} -> playbackMode) (\s@CreateChannelResponse' {} a -> s {playbackMode = a} :: CreateChannelResponse)
+
+-- | The tags to assign to the channel. Tags are key-value pairs that you can
+-- associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+createChannelResponse_tags :: Lens.Lens' CreateChannelResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createChannelResponse_tags = Lens.lens (\CreateChannelResponse' {tags} -> tags) (\s@CreateChannelResponse' {} a -> s {tags = a} :: CreateChannelResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tier of the channel.
+createChannelResponse_tier :: Lens.Lens' CreateChannelResponse (Prelude.Maybe Prelude.Text)
+createChannelResponse_tier = Lens.lens (\CreateChannelResponse' {tier} -> tier) (\s@CreateChannelResponse' {} a -> s {tier = a} :: CreateChannelResponse)
+
+-- | The response's http status code.
+createChannelResponse_httpStatus :: Lens.Lens' CreateChannelResponse Prelude.Int
+createChannelResponse_httpStatus = Lens.lens (\CreateChannelResponse' {httpStatus} -> httpStatus) (\s@CreateChannelResponse' {} a -> s {httpStatus = a} :: CreateChannelResponse)
+
+instance Prelude.NFData CreateChannelResponse where
+  rnf CreateChannelResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf channelName
+      `Prelude.seq` Prelude.rnf channelState
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf fillerSlate
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf playbackMode
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf tier
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/CreateLiveSource.hs b/gen/Amazonka/MediaTailor/CreateLiveSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/CreateLiveSource.hs
@@ -0,0 +1,311 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaTailor.CreateLiveSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The live source configuration.
+module Amazonka.MediaTailor.CreateLiveSource
+  ( -- * Creating a Request
+    CreateLiveSource (..),
+    newCreateLiveSource,
+
+    -- * Request Lenses
+    createLiveSource_tags,
+    createLiveSource_httpPackageConfigurations,
+    createLiveSource_liveSourceName,
+    createLiveSource_sourceLocationName,
+
+    -- * Destructuring the Response
+    CreateLiveSourceResponse (..),
+    newCreateLiveSourceResponse,
+
+    -- * Response Lenses
+    createLiveSourceResponse_arn,
+    createLiveSourceResponse_creationTime,
+    createLiveSourceResponse_httpPackageConfigurations,
+    createLiveSourceResponse_lastModifiedTime,
+    createLiveSourceResponse_liveSourceName,
+    createLiveSourceResponse_sourceLocationName,
+    createLiveSourceResponse_tags,
+    createLiveSourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateLiveSource' smart constructor.
+data CreateLiveSource = CreateLiveSource'
+  { -- | The tags to assign to the live source. Tags are key-value pairs that you
+    -- can associate with Amazon resources to help with organization, access
+    -- control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A list of HTTP package configuration parameters for this live source.
+    httpPackageConfigurations :: [HttpPackageConfiguration],
+    -- | The name of the live source.
+    liveSourceName :: Prelude.Text,
+    -- | The name of the source location.
+    sourceLocationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLiveSource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'createLiveSource_tags' - The tags to assign to the live source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'httpPackageConfigurations', 'createLiveSource_httpPackageConfigurations' - A list of HTTP package configuration parameters for this live source.
+--
+-- 'liveSourceName', 'createLiveSource_liveSourceName' - The name of the live source.
+--
+-- 'sourceLocationName', 'createLiveSource_sourceLocationName' - The name of the source location.
+newCreateLiveSource ::
+  -- | 'liveSourceName'
+  Prelude.Text ->
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  CreateLiveSource
+newCreateLiveSource
+  pLiveSourceName_
+  pSourceLocationName_ =
+    CreateLiveSource'
+      { tags = Prelude.Nothing,
+        httpPackageConfigurations = Prelude.mempty,
+        liveSourceName = pLiveSourceName_,
+        sourceLocationName = pSourceLocationName_
+      }
+
+-- | The tags to assign to the live source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+createLiveSource_tags :: Lens.Lens' CreateLiveSource (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createLiveSource_tags = Lens.lens (\CreateLiveSource' {tags} -> tags) (\s@CreateLiveSource' {} a -> s {tags = a} :: CreateLiveSource) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of HTTP package configuration parameters for this live source.
+createLiveSource_httpPackageConfigurations :: Lens.Lens' CreateLiveSource [HttpPackageConfiguration]
+createLiveSource_httpPackageConfigurations = Lens.lens (\CreateLiveSource' {httpPackageConfigurations} -> httpPackageConfigurations) (\s@CreateLiveSource' {} a -> s {httpPackageConfigurations = a} :: CreateLiveSource) Prelude.. Lens.coerced
+
+-- | The name of the live source.
+createLiveSource_liveSourceName :: Lens.Lens' CreateLiveSource Prelude.Text
+createLiveSource_liveSourceName = Lens.lens (\CreateLiveSource' {liveSourceName} -> liveSourceName) (\s@CreateLiveSource' {} a -> s {liveSourceName = a} :: CreateLiveSource)
+
+-- | The name of the source location.
+createLiveSource_sourceLocationName :: Lens.Lens' CreateLiveSource Prelude.Text
+createLiveSource_sourceLocationName = Lens.lens (\CreateLiveSource' {sourceLocationName} -> sourceLocationName) (\s@CreateLiveSource' {} a -> s {sourceLocationName = a} :: CreateLiveSource)
+
+instance Core.AWSRequest CreateLiveSource where
+  type
+    AWSResponse CreateLiveSource =
+      CreateLiveSourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateLiveSourceResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> ( x
+                            Data..?> "HttpPackageConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "LastModifiedTime")
+            Prelude.<*> (x Data..?> "LiveSourceName")
+            Prelude.<*> (x Data..?> "SourceLocationName")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateLiveSource where
+  hashWithSalt _salt CreateLiveSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` httpPackageConfigurations
+      `Prelude.hashWithSalt` liveSourceName
+      `Prelude.hashWithSalt` sourceLocationName
+
+instance Prelude.NFData CreateLiveSource where
+  rnf CreateLiveSource' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpPackageConfigurations
+      `Prelude.seq` Prelude.rnf liveSourceName
+      `Prelude.seq` Prelude.rnf sourceLocationName
+
+instance Data.ToHeaders CreateLiveSource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateLiveSource where
+  toJSON CreateLiveSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ( "HttpPackageConfigurations"
+                  Data..= httpPackageConfigurations
+              )
+          ]
+      )
+
+instance Data.ToPath CreateLiveSource where
+  toPath CreateLiveSource' {..} =
+    Prelude.mconcat
+      [ "/sourceLocation/",
+        Data.toBS sourceLocationName,
+        "/liveSource/",
+        Data.toBS liveSourceName
+      ]
+
+instance Data.ToQuery CreateLiveSource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateLiveSourceResponse' smart constructor.
+data CreateLiveSourceResponse = CreateLiveSourceResponse'
+  { -- | The ARN to assign to the live source.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time the live source was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | A list of HTTP package configuration parameters for this live source.
+    httpPackageConfigurations :: Prelude.Maybe [HttpPackageConfiguration],
+    -- | The time the live source was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The name to assign to the live source.
+    liveSourceName :: Prelude.Maybe Prelude.Text,
+    -- | The name to assign to the source location of the live source.
+    sourceLocationName :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the live source. Tags are key-value pairs that you
+    -- can associate with Amazon resources to help with organization, access
+    -- control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLiveSourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'createLiveSourceResponse_arn' - The ARN to assign to the live source.
+--
+-- 'creationTime', 'createLiveSourceResponse_creationTime' - The time the live source was created.
+--
+-- 'httpPackageConfigurations', 'createLiveSourceResponse_httpPackageConfigurations' - A list of HTTP package configuration parameters for this live source.
+--
+-- 'lastModifiedTime', 'createLiveSourceResponse_lastModifiedTime' - The time the live source was last modified.
+--
+-- 'liveSourceName', 'createLiveSourceResponse_liveSourceName' - The name to assign to the live source.
+--
+-- 'sourceLocationName', 'createLiveSourceResponse_sourceLocationName' - The name to assign to the source location of the live source.
+--
+-- 'tags', 'createLiveSourceResponse_tags' - The tags to assign to the live source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'httpStatus', 'createLiveSourceResponse_httpStatus' - The response's http status code.
+newCreateLiveSourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLiveSourceResponse
+newCreateLiveSourceResponse pHttpStatus_ =
+  CreateLiveSourceResponse'
+    { arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      httpPackageConfigurations = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      liveSourceName = Prelude.Nothing,
+      sourceLocationName = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN to assign to the live source.
+createLiveSourceResponse_arn :: Lens.Lens' CreateLiveSourceResponse (Prelude.Maybe Prelude.Text)
+createLiveSourceResponse_arn = Lens.lens (\CreateLiveSourceResponse' {arn} -> arn) (\s@CreateLiveSourceResponse' {} a -> s {arn = a} :: CreateLiveSourceResponse)
+
+-- | The time the live source was created.
+createLiveSourceResponse_creationTime :: Lens.Lens' CreateLiveSourceResponse (Prelude.Maybe Prelude.UTCTime)
+createLiveSourceResponse_creationTime = Lens.lens (\CreateLiveSourceResponse' {creationTime} -> creationTime) (\s@CreateLiveSourceResponse' {} a -> s {creationTime = a} :: CreateLiveSourceResponse) Prelude.. Lens.mapping Data._Time
+
+-- | A list of HTTP package configuration parameters for this live source.
+createLiveSourceResponse_httpPackageConfigurations :: Lens.Lens' CreateLiveSourceResponse (Prelude.Maybe [HttpPackageConfiguration])
+createLiveSourceResponse_httpPackageConfigurations = Lens.lens (\CreateLiveSourceResponse' {httpPackageConfigurations} -> httpPackageConfigurations) (\s@CreateLiveSourceResponse' {} a -> s {httpPackageConfigurations = a} :: CreateLiveSourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time the live source was last modified.
+createLiveSourceResponse_lastModifiedTime :: Lens.Lens' CreateLiveSourceResponse (Prelude.Maybe Prelude.UTCTime)
+createLiveSourceResponse_lastModifiedTime = Lens.lens (\CreateLiveSourceResponse' {lastModifiedTime} -> lastModifiedTime) (\s@CreateLiveSourceResponse' {} a -> s {lastModifiedTime = a} :: CreateLiveSourceResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name to assign to the live source.
+createLiveSourceResponse_liveSourceName :: Lens.Lens' CreateLiveSourceResponse (Prelude.Maybe Prelude.Text)
+createLiveSourceResponse_liveSourceName = Lens.lens (\CreateLiveSourceResponse' {liveSourceName} -> liveSourceName) (\s@CreateLiveSourceResponse' {} a -> s {liveSourceName = a} :: CreateLiveSourceResponse)
+
+-- | The name to assign to the source location of the live source.
+createLiveSourceResponse_sourceLocationName :: Lens.Lens' CreateLiveSourceResponse (Prelude.Maybe Prelude.Text)
+createLiveSourceResponse_sourceLocationName = Lens.lens (\CreateLiveSourceResponse' {sourceLocationName} -> sourceLocationName) (\s@CreateLiveSourceResponse' {} a -> s {sourceLocationName = a} :: CreateLiveSourceResponse)
+
+-- | The tags to assign to the live source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+createLiveSourceResponse_tags :: Lens.Lens' CreateLiveSourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createLiveSourceResponse_tags = Lens.lens (\CreateLiveSourceResponse' {tags} -> tags) (\s@CreateLiveSourceResponse' {} a -> s {tags = a} :: CreateLiveSourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createLiveSourceResponse_httpStatus :: Lens.Lens' CreateLiveSourceResponse Prelude.Int
+createLiveSourceResponse_httpStatus = Lens.lens (\CreateLiveSourceResponse' {httpStatus} -> httpStatus) (\s@CreateLiveSourceResponse' {} a -> s {httpStatus = a} :: CreateLiveSourceResponse)
+
+instance Prelude.NFData CreateLiveSourceResponse where
+  rnf CreateLiveSourceResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf httpPackageConfigurations
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf liveSourceName
+      `Prelude.seq` Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/CreatePrefetchSchedule.hs b/gen/Amazonka/MediaTailor/CreatePrefetchSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/CreatePrefetchSchedule.hs
@@ -0,0 +1,370 @@
+{-# 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.MediaTailor.CreatePrefetchSchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a prefetch schedule for a playback configuration. A prefetch
+-- schedule allows you to tell MediaTailor to fetch and prepare certain ads
+-- before an ad break happens. For more information about ad prefetching,
+-- see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/prefetching-ads.html Using ad prefetching>
+-- in the /MediaTailor User Guide/.
+module Amazonka.MediaTailor.CreatePrefetchSchedule
+  ( -- * Creating a Request
+    CreatePrefetchSchedule (..),
+    newCreatePrefetchSchedule,
+
+    -- * Request Lenses
+    createPrefetchSchedule_streamId,
+    createPrefetchSchedule_consumption,
+    createPrefetchSchedule_name,
+    createPrefetchSchedule_playbackConfigurationName,
+    createPrefetchSchedule_retrieval,
+
+    -- * Destructuring the Response
+    CreatePrefetchScheduleResponse (..),
+    newCreatePrefetchScheduleResponse,
+
+    -- * Response Lenses
+    createPrefetchScheduleResponse_arn,
+    createPrefetchScheduleResponse_consumption,
+    createPrefetchScheduleResponse_name,
+    createPrefetchScheduleResponse_playbackConfigurationName,
+    createPrefetchScheduleResponse_retrieval,
+    createPrefetchScheduleResponse_streamId,
+    createPrefetchScheduleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreatePrefetchSchedule' smart constructor.
+data CreatePrefetchSchedule = CreatePrefetchSchedule'
+  { -- | An optional stream identifier that MediaTailor uses to prefetch ads for
+    -- multiple streams that use the same playback configuration. If @StreamId@
+    -- is specified, MediaTailor returns all of the prefetch schedules with an
+    -- exact match on @StreamId@. If not specified, MediaTailor returns all of
+    -- the prefetch schedules for the playback configuration, regardless of
+    -- @StreamId@.
+    streamId :: Prelude.Maybe Prelude.Text,
+    -- | The configuration settings for MediaTailor\'s /consumption/ of the
+    -- prefetched ads from the ad decision server. Each consumption
+    -- configuration contains an end time and an optional start time that
+    -- define the /consumption window/. Prefetch schedules automatically expire
+    -- no earlier than seven days after the end time.
+    consumption :: PrefetchConsumption,
+    -- | The name to assign to the schedule request.
+    name :: Prelude.Text,
+    -- | The name to assign to the playback configuration.
+    playbackConfigurationName :: Prelude.Text,
+    -- | The configuration settings for retrieval of prefetched ads from the ad
+    -- decision server. Only one set of prefetched ads will be retrieved and
+    -- subsequently consumed for each ad break.
+    retrieval :: PrefetchRetrieval
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreatePrefetchSchedule' 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:
+--
+-- 'streamId', 'createPrefetchSchedule_streamId' - An optional stream identifier that MediaTailor uses to prefetch ads for
+-- multiple streams that use the same playback configuration. If @StreamId@
+-- is specified, MediaTailor returns all of the prefetch schedules with an
+-- exact match on @StreamId@. If not specified, MediaTailor returns all of
+-- the prefetch schedules for the playback configuration, regardless of
+-- @StreamId@.
+--
+-- 'consumption', 'createPrefetchSchedule_consumption' - The configuration settings for MediaTailor\'s /consumption/ of the
+-- prefetched ads from the ad decision server. Each consumption
+-- configuration contains an end time and an optional start time that
+-- define the /consumption window/. Prefetch schedules automatically expire
+-- no earlier than seven days after the end time.
+--
+-- 'name', 'createPrefetchSchedule_name' - The name to assign to the schedule request.
+--
+-- 'playbackConfigurationName', 'createPrefetchSchedule_playbackConfigurationName' - The name to assign to the playback configuration.
+--
+-- 'retrieval', 'createPrefetchSchedule_retrieval' - The configuration settings for retrieval of prefetched ads from the ad
+-- decision server. Only one set of prefetched ads will be retrieved and
+-- subsequently consumed for each ad break.
+newCreatePrefetchSchedule ::
+  -- | 'consumption'
+  PrefetchConsumption ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'playbackConfigurationName'
+  Prelude.Text ->
+  -- | 'retrieval'
+  PrefetchRetrieval ->
+  CreatePrefetchSchedule
+newCreatePrefetchSchedule
+  pConsumption_
+  pName_
+  pPlaybackConfigurationName_
+  pRetrieval_ =
+    CreatePrefetchSchedule'
+      { streamId = Prelude.Nothing,
+        consumption = pConsumption_,
+        name = pName_,
+        playbackConfigurationName =
+          pPlaybackConfigurationName_,
+        retrieval = pRetrieval_
+      }
+
+-- | An optional stream identifier that MediaTailor uses to prefetch ads for
+-- multiple streams that use the same playback configuration. If @StreamId@
+-- is specified, MediaTailor returns all of the prefetch schedules with an
+-- exact match on @StreamId@. If not specified, MediaTailor returns all of
+-- the prefetch schedules for the playback configuration, regardless of
+-- @StreamId@.
+createPrefetchSchedule_streamId :: Lens.Lens' CreatePrefetchSchedule (Prelude.Maybe Prelude.Text)
+createPrefetchSchedule_streamId = Lens.lens (\CreatePrefetchSchedule' {streamId} -> streamId) (\s@CreatePrefetchSchedule' {} a -> s {streamId = a} :: CreatePrefetchSchedule)
+
+-- | The configuration settings for MediaTailor\'s /consumption/ of the
+-- prefetched ads from the ad decision server. Each consumption
+-- configuration contains an end time and an optional start time that
+-- define the /consumption window/. Prefetch schedules automatically expire
+-- no earlier than seven days after the end time.
+createPrefetchSchedule_consumption :: Lens.Lens' CreatePrefetchSchedule PrefetchConsumption
+createPrefetchSchedule_consumption = Lens.lens (\CreatePrefetchSchedule' {consumption} -> consumption) (\s@CreatePrefetchSchedule' {} a -> s {consumption = a} :: CreatePrefetchSchedule)
+
+-- | The name to assign to the schedule request.
+createPrefetchSchedule_name :: Lens.Lens' CreatePrefetchSchedule Prelude.Text
+createPrefetchSchedule_name = Lens.lens (\CreatePrefetchSchedule' {name} -> name) (\s@CreatePrefetchSchedule' {} a -> s {name = a} :: CreatePrefetchSchedule)
+
+-- | The name to assign to the playback configuration.
+createPrefetchSchedule_playbackConfigurationName :: Lens.Lens' CreatePrefetchSchedule Prelude.Text
+createPrefetchSchedule_playbackConfigurationName = Lens.lens (\CreatePrefetchSchedule' {playbackConfigurationName} -> playbackConfigurationName) (\s@CreatePrefetchSchedule' {} a -> s {playbackConfigurationName = a} :: CreatePrefetchSchedule)
+
+-- | The configuration settings for retrieval of prefetched ads from the ad
+-- decision server. Only one set of prefetched ads will be retrieved and
+-- subsequently consumed for each ad break.
+createPrefetchSchedule_retrieval :: Lens.Lens' CreatePrefetchSchedule PrefetchRetrieval
+createPrefetchSchedule_retrieval = Lens.lens (\CreatePrefetchSchedule' {retrieval} -> retrieval) (\s@CreatePrefetchSchedule' {} a -> s {retrieval = a} :: CreatePrefetchSchedule)
+
+instance Core.AWSRequest CreatePrefetchSchedule where
+  type
+    AWSResponse CreatePrefetchSchedule =
+      CreatePrefetchScheduleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreatePrefetchScheduleResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Consumption")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "PlaybackConfigurationName")
+            Prelude.<*> (x Data..?> "Retrieval")
+            Prelude.<*> (x Data..?> "StreamId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreatePrefetchSchedule where
+  hashWithSalt _salt CreatePrefetchSchedule' {..} =
+    _salt
+      `Prelude.hashWithSalt` streamId
+      `Prelude.hashWithSalt` consumption
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` playbackConfigurationName
+      `Prelude.hashWithSalt` retrieval
+
+instance Prelude.NFData CreatePrefetchSchedule where
+  rnf CreatePrefetchSchedule' {..} =
+    Prelude.rnf streamId
+      `Prelude.seq` Prelude.rnf consumption
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf playbackConfigurationName
+      `Prelude.seq` Prelude.rnf retrieval
+
+instance Data.ToHeaders CreatePrefetchSchedule where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreatePrefetchSchedule where
+  toJSON CreatePrefetchSchedule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("StreamId" Data..=) Prelude.<$> streamId,
+            Prelude.Just ("Consumption" Data..= consumption),
+            Prelude.Just ("Retrieval" Data..= retrieval)
+          ]
+      )
+
+instance Data.ToPath CreatePrefetchSchedule where
+  toPath CreatePrefetchSchedule' {..} =
+    Prelude.mconcat
+      [ "/prefetchSchedule/",
+        Data.toBS playbackConfigurationName,
+        "/",
+        Data.toBS name
+      ]
+
+instance Data.ToQuery CreatePrefetchSchedule where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreatePrefetchScheduleResponse' smart constructor.
+data CreatePrefetchScheduleResponse = CreatePrefetchScheduleResponse'
+  { -- | The ARN to assign to the prefetch schedule.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The configuration settings for MediaTailor\'s /consumption/ of the
+    -- prefetched ads from the ad decision server. Each consumption
+    -- configuration contains an end time and an optional start time that
+    -- define the /consumption window/. Prefetch schedules automatically expire
+    -- no earlier than seven days after the end time.
+    consumption :: Prelude.Maybe PrefetchConsumption,
+    -- | The name to assign to the prefetch schedule.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The name to assign to the playback configuration.
+    playbackConfigurationName :: Prelude.Maybe Prelude.Text,
+    -- | The configuration settings for retrieval of prefetched ads from the ad
+    -- decision server. Only one set of prefetched ads will be retrieved and
+    -- subsequently consumed for each ad break.
+    retrieval :: Prelude.Maybe PrefetchRetrieval,
+    -- | An optional stream identifier that MediaTailor uses to prefetch ads for
+    -- multiple streams that use the same playback configuration. If @StreamId@
+    -- is specified, MediaTailor returns all of the prefetch schedules with an
+    -- exact match on @StreamId@. If not specified, MediaTailor returns all of
+    -- the prefetch schedules for the playback configuration, regardless of
+    -- @StreamId@.
+    streamId :: 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 'CreatePrefetchScheduleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'createPrefetchScheduleResponse_arn' - The ARN to assign to the prefetch schedule.
+--
+-- 'consumption', 'createPrefetchScheduleResponse_consumption' - The configuration settings for MediaTailor\'s /consumption/ of the
+-- prefetched ads from the ad decision server. Each consumption
+-- configuration contains an end time and an optional start time that
+-- define the /consumption window/. Prefetch schedules automatically expire
+-- no earlier than seven days after the end time.
+--
+-- 'name', 'createPrefetchScheduleResponse_name' - The name to assign to the prefetch schedule.
+--
+-- 'playbackConfigurationName', 'createPrefetchScheduleResponse_playbackConfigurationName' - The name to assign to the playback configuration.
+--
+-- 'retrieval', 'createPrefetchScheduleResponse_retrieval' - The configuration settings for retrieval of prefetched ads from the ad
+-- decision server. Only one set of prefetched ads will be retrieved and
+-- subsequently consumed for each ad break.
+--
+-- 'streamId', 'createPrefetchScheduleResponse_streamId' - An optional stream identifier that MediaTailor uses to prefetch ads for
+-- multiple streams that use the same playback configuration. If @StreamId@
+-- is specified, MediaTailor returns all of the prefetch schedules with an
+-- exact match on @StreamId@. If not specified, MediaTailor returns all of
+-- the prefetch schedules for the playback configuration, regardless of
+-- @StreamId@.
+--
+-- 'httpStatus', 'createPrefetchScheduleResponse_httpStatus' - The response's http status code.
+newCreatePrefetchScheduleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreatePrefetchScheduleResponse
+newCreatePrefetchScheduleResponse pHttpStatus_ =
+  CreatePrefetchScheduleResponse'
+    { arn =
+        Prelude.Nothing,
+      consumption = Prelude.Nothing,
+      name = Prelude.Nothing,
+      playbackConfigurationName = Prelude.Nothing,
+      retrieval = Prelude.Nothing,
+      streamId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN to assign to the prefetch schedule.
+createPrefetchScheduleResponse_arn :: Lens.Lens' CreatePrefetchScheduleResponse (Prelude.Maybe Prelude.Text)
+createPrefetchScheduleResponse_arn = Lens.lens (\CreatePrefetchScheduleResponse' {arn} -> arn) (\s@CreatePrefetchScheduleResponse' {} a -> s {arn = a} :: CreatePrefetchScheduleResponse)
+
+-- | The configuration settings for MediaTailor\'s /consumption/ of the
+-- prefetched ads from the ad decision server. Each consumption
+-- configuration contains an end time and an optional start time that
+-- define the /consumption window/. Prefetch schedules automatically expire
+-- no earlier than seven days after the end time.
+createPrefetchScheduleResponse_consumption :: Lens.Lens' CreatePrefetchScheduleResponse (Prelude.Maybe PrefetchConsumption)
+createPrefetchScheduleResponse_consumption = Lens.lens (\CreatePrefetchScheduleResponse' {consumption} -> consumption) (\s@CreatePrefetchScheduleResponse' {} a -> s {consumption = a} :: CreatePrefetchScheduleResponse)
+
+-- | The name to assign to the prefetch schedule.
+createPrefetchScheduleResponse_name :: Lens.Lens' CreatePrefetchScheduleResponse (Prelude.Maybe Prelude.Text)
+createPrefetchScheduleResponse_name = Lens.lens (\CreatePrefetchScheduleResponse' {name} -> name) (\s@CreatePrefetchScheduleResponse' {} a -> s {name = a} :: CreatePrefetchScheduleResponse)
+
+-- | The name to assign to the playback configuration.
+createPrefetchScheduleResponse_playbackConfigurationName :: Lens.Lens' CreatePrefetchScheduleResponse (Prelude.Maybe Prelude.Text)
+createPrefetchScheduleResponse_playbackConfigurationName = Lens.lens (\CreatePrefetchScheduleResponse' {playbackConfigurationName} -> playbackConfigurationName) (\s@CreatePrefetchScheduleResponse' {} a -> s {playbackConfigurationName = a} :: CreatePrefetchScheduleResponse)
+
+-- | The configuration settings for retrieval of prefetched ads from the ad
+-- decision server. Only one set of prefetched ads will be retrieved and
+-- subsequently consumed for each ad break.
+createPrefetchScheduleResponse_retrieval :: Lens.Lens' CreatePrefetchScheduleResponse (Prelude.Maybe PrefetchRetrieval)
+createPrefetchScheduleResponse_retrieval = Lens.lens (\CreatePrefetchScheduleResponse' {retrieval} -> retrieval) (\s@CreatePrefetchScheduleResponse' {} a -> s {retrieval = a} :: CreatePrefetchScheduleResponse)
+
+-- | An optional stream identifier that MediaTailor uses to prefetch ads for
+-- multiple streams that use the same playback configuration. If @StreamId@
+-- is specified, MediaTailor returns all of the prefetch schedules with an
+-- exact match on @StreamId@. If not specified, MediaTailor returns all of
+-- the prefetch schedules for the playback configuration, regardless of
+-- @StreamId@.
+createPrefetchScheduleResponse_streamId :: Lens.Lens' CreatePrefetchScheduleResponse (Prelude.Maybe Prelude.Text)
+createPrefetchScheduleResponse_streamId = Lens.lens (\CreatePrefetchScheduleResponse' {streamId} -> streamId) (\s@CreatePrefetchScheduleResponse' {} a -> s {streamId = a} :: CreatePrefetchScheduleResponse)
+
+-- | The response's http status code.
+createPrefetchScheduleResponse_httpStatus :: Lens.Lens' CreatePrefetchScheduleResponse Prelude.Int
+createPrefetchScheduleResponse_httpStatus = Lens.lens (\CreatePrefetchScheduleResponse' {httpStatus} -> httpStatus) (\s@CreatePrefetchScheduleResponse' {} a -> s {httpStatus = a} :: CreatePrefetchScheduleResponse)
+
+instance
+  Prelude.NFData
+    CreatePrefetchScheduleResponse
+  where
+  rnf CreatePrefetchScheduleResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf consumption
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf playbackConfigurationName
+      `Prelude.seq` Prelude.rnf retrieval
+      `Prelude.seq` Prelude.rnf streamId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/CreateProgram.hs b/gen/Amazonka/MediaTailor/CreateProgram.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/CreateProgram.hs
@@ -0,0 +1,363 @@
+{-# 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.MediaTailor.CreateProgram
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a program within a channel. For information about programs, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-programs.html Working with programs>
+-- in the /MediaTailor User Guide/.
+module Amazonka.MediaTailor.CreateProgram
+  ( -- * Creating a Request
+    CreateProgram (..),
+    newCreateProgram,
+
+    -- * Request Lenses
+    createProgram_adBreaks,
+    createProgram_liveSourceName,
+    createProgram_vodSourceName,
+    createProgram_channelName,
+    createProgram_programName,
+    createProgram_scheduleConfiguration,
+    createProgram_sourceLocationName,
+
+    -- * Destructuring the Response
+    CreateProgramResponse (..),
+    newCreateProgramResponse,
+
+    -- * Response Lenses
+    createProgramResponse_adBreaks,
+    createProgramResponse_arn,
+    createProgramResponse_channelName,
+    createProgramResponse_creationTime,
+    createProgramResponse_liveSourceName,
+    createProgramResponse_programName,
+    createProgramResponse_scheduledStartTime,
+    createProgramResponse_sourceLocationName,
+    createProgramResponse_vodSourceName,
+    createProgramResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateProgram' smart constructor.
+data CreateProgram = CreateProgram'
+  { -- | The ad break configuration settings.
+    adBreaks :: Prelude.Maybe [AdBreak],
+    -- | The name of the LiveSource for this Program.
+    liveSourceName :: Prelude.Maybe Prelude.Text,
+    -- | The name that\'s used to refer to a VOD source.
+    vodSourceName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the channel for this Program.
+    channelName :: Prelude.Text,
+    -- | The name of the Program.
+    programName :: Prelude.Text,
+    -- | The schedule configuration settings.
+    scheduleConfiguration :: ScheduleConfiguration,
+    -- | The name of the source location.
+    sourceLocationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateProgram' 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:
+--
+-- 'adBreaks', 'createProgram_adBreaks' - The ad break configuration settings.
+--
+-- 'liveSourceName', 'createProgram_liveSourceName' - The name of the LiveSource for this Program.
+--
+-- 'vodSourceName', 'createProgram_vodSourceName' - The name that\'s used to refer to a VOD source.
+--
+-- 'channelName', 'createProgram_channelName' - The name of the channel for this Program.
+--
+-- 'programName', 'createProgram_programName' - The name of the Program.
+--
+-- 'scheduleConfiguration', 'createProgram_scheduleConfiguration' - The schedule configuration settings.
+--
+-- 'sourceLocationName', 'createProgram_sourceLocationName' - The name of the source location.
+newCreateProgram ::
+  -- | 'channelName'
+  Prelude.Text ->
+  -- | 'programName'
+  Prelude.Text ->
+  -- | 'scheduleConfiguration'
+  ScheduleConfiguration ->
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  CreateProgram
+newCreateProgram
+  pChannelName_
+  pProgramName_
+  pScheduleConfiguration_
+  pSourceLocationName_ =
+    CreateProgram'
+      { adBreaks = Prelude.Nothing,
+        liveSourceName = Prelude.Nothing,
+        vodSourceName = Prelude.Nothing,
+        channelName = pChannelName_,
+        programName = pProgramName_,
+        scheduleConfiguration = pScheduleConfiguration_,
+        sourceLocationName = pSourceLocationName_
+      }
+
+-- | The ad break configuration settings.
+createProgram_adBreaks :: Lens.Lens' CreateProgram (Prelude.Maybe [AdBreak])
+createProgram_adBreaks = Lens.lens (\CreateProgram' {adBreaks} -> adBreaks) (\s@CreateProgram' {} a -> s {adBreaks = a} :: CreateProgram) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the LiveSource for this Program.
+createProgram_liveSourceName :: Lens.Lens' CreateProgram (Prelude.Maybe Prelude.Text)
+createProgram_liveSourceName = Lens.lens (\CreateProgram' {liveSourceName} -> liveSourceName) (\s@CreateProgram' {} a -> s {liveSourceName = a} :: CreateProgram)
+
+-- | The name that\'s used to refer to a VOD source.
+createProgram_vodSourceName :: Lens.Lens' CreateProgram (Prelude.Maybe Prelude.Text)
+createProgram_vodSourceName = Lens.lens (\CreateProgram' {vodSourceName} -> vodSourceName) (\s@CreateProgram' {} a -> s {vodSourceName = a} :: CreateProgram)
+
+-- | The name of the channel for this Program.
+createProgram_channelName :: Lens.Lens' CreateProgram Prelude.Text
+createProgram_channelName = Lens.lens (\CreateProgram' {channelName} -> channelName) (\s@CreateProgram' {} a -> s {channelName = a} :: CreateProgram)
+
+-- | The name of the Program.
+createProgram_programName :: Lens.Lens' CreateProgram Prelude.Text
+createProgram_programName = Lens.lens (\CreateProgram' {programName} -> programName) (\s@CreateProgram' {} a -> s {programName = a} :: CreateProgram)
+
+-- | The schedule configuration settings.
+createProgram_scheduleConfiguration :: Lens.Lens' CreateProgram ScheduleConfiguration
+createProgram_scheduleConfiguration = Lens.lens (\CreateProgram' {scheduleConfiguration} -> scheduleConfiguration) (\s@CreateProgram' {} a -> s {scheduleConfiguration = a} :: CreateProgram)
+
+-- | The name of the source location.
+createProgram_sourceLocationName :: Lens.Lens' CreateProgram Prelude.Text
+createProgram_sourceLocationName = Lens.lens (\CreateProgram' {sourceLocationName} -> sourceLocationName) (\s@CreateProgram' {} a -> s {sourceLocationName = a} :: CreateProgram)
+
+instance Core.AWSRequest CreateProgram where
+  type
+    AWSResponse CreateProgram =
+      CreateProgramResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateProgramResponse'
+            Prelude.<$> (x Data..?> "AdBreaks" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "ChannelName")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "LiveSourceName")
+            Prelude.<*> (x Data..?> "ProgramName")
+            Prelude.<*> (x Data..?> "ScheduledStartTime")
+            Prelude.<*> (x Data..?> "SourceLocationName")
+            Prelude.<*> (x Data..?> "VodSourceName")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateProgram where
+  hashWithSalt _salt CreateProgram' {..} =
+    _salt
+      `Prelude.hashWithSalt` adBreaks
+      `Prelude.hashWithSalt` liveSourceName
+      `Prelude.hashWithSalt` vodSourceName
+      `Prelude.hashWithSalt` channelName
+      `Prelude.hashWithSalt` programName
+      `Prelude.hashWithSalt` scheduleConfiguration
+      `Prelude.hashWithSalt` sourceLocationName
+
+instance Prelude.NFData CreateProgram where
+  rnf CreateProgram' {..} =
+    Prelude.rnf adBreaks
+      `Prelude.seq` Prelude.rnf liveSourceName
+      `Prelude.seq` Prelude.rnf vodSourceName
+      `Prelude.seq` Prelude.rnf channelName
+      `Prelude.seq` Prelude.rnf programName
+      `Prelude.seq` Prelude.rnf scheduleConfiguration
+      `Prelude.seq` Prelude.rnf sourceLocationName
+
+instance Data.ToHeaders CreateProgram where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateProgram where
+  toJSON CreateProgram' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AdBreaks" Data..=) Prelude.<$> adBreaks,
+            ("LiveSourceName" Data..=)
+              Prelude.<$> liveSourceName,
+            ("VodSourceName" Data..=) Prelude.<$> vodSourceName,
+            Prelude.Just
+              ( "ScheduleConfiguration"
+                  Data..= scheduleConfiguration
+              ),
+            Prelude.Just
+              ("SourceLocationName" Data..= sourceLocationName)
+          ]
+      )
+
+instance Data.ToPath CreateProgram where
+  toPath CreateProgram' {..} =
+    Prelude.mconcat
+      [ "/channel/",
+        Data.toBS channelName,
+        "/program/",
+        Data.toBS programName
+      ]
+
+instance Data.ToQuery CreateProgram where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateProgramResponse' smart constructor.
+data CreateProgramResponse = CreateProgramResponse'
+  { -- | The ad break configuration settings.
+    adBreaks :: Prelude.Maybe [AdBreak],
+    -- | The ARN to assign to the program.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name to assign to the channel for this program.
+    channelName :: Prelude.Maybe Prelude.Text,
+    -- | The time the program was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the LiveSource for this Program.
+    liveSourceName :: Prelude.Maybe Prelude.Text,
+    -- | The name to assign to this program.
+    programName :: Prelude.Maybe Prelude.Text,
+    -- | The scheduled start time for this Program.
+    scheduledStartTime :: Prelude.Maybe Data.POSIX,
+    -- | The name to assign to the source location for this program.
+    sourceLocationName :: Prelude.Maybe Prelude.Text,
+    -- | The name that\'s used to refer to a VOD source.
+    vodSourceName :: 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 'CreateProgramResponse' 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:
+--
+-- 'adBreaks', 'createProgramResponse_adBreaks' - The ad break configuration settings.
+--
+-- 'arn', 'createProgramResponse_arn' - The ARN to assign to the program.
+--
+-- 'channelName', 'createProgramResponse_channelName' - The name to assign to the channel for this program.
+--
+-- 'creationTime', 'createProgramResponse_creationTime' - The time the program was created.
+--
+-- 'liveSourceName', 'createProgramResponse_liveSourceName' - The name of the LiveSource for this Program.
+--
+-- 'programName', 'createProgramResponse_programName' - The name to assign to this program.
+--
+-- 'scheduledStartTime', 'createProgramResponse_scheduledStartTime' - The scheduled start time for this Program.
+--
+-- 'sourceLocationName', 'createProgramResponse_sourceLocationName' - The name to assign to the source location for this program.
+--
+-- 'vodSourceName', 'createProgramResponse_vodSourceName' - The name that\'s used to refer to a VOD source.
+--
+-- 'httpStatus', 'createProgramResponse_httpStatus' - The response's http status code.
+newCreateProgramResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateProgramResponse
+newCreateProgramResponse pHttpStatus_ =
+  CreateProgramResponse'
+    { adBreaks = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      channelName = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      liveSourceName = Prelude.Nothing,
+      programName = Prelude.Nothing,
+      scheduledStartTime = Prelude.Nothing,
+      sourceLocationName = Prelude.Nothing,
+      vodSourceName = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ad break configuration settings.
+createProgramResponse_adBreaks :: Lens.Lens' CreateProgramResponse (Prelude.Maybe [AdBreak])
+createProgramResponse_adBreaks = Lens.lens (\CreateProgramResponse' {adBreaks} -> adBreaks) (\s@CreateProgramResponse' {} a -> s {adBreaks = a} :: CreateProgramResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN to assign to the program.
+createProgramResponse_arn :: Lens.Lens' CreateProgramResponse (Prelude.Maybe Prelude.Text)
+createProgramResponse_arn = Lens.lens (\CreateProgramResponse' {arn} -> arn) (\s@CreateProgramResponse' {} a -> s {arn = a} :: CreateProgramResponse)
+
+-- | The name to assign to the channel for this program.
+createProgramResponse_channelName :: Lens.Lens' CreateProgramResponse (Prelude.Maybe Prelude.Text)
+createProgramResponse_channelName = Lens.lens (\CreateProgramResponse' {channelName} -> channelName) (\s@CreateProgramResponse' {} a -> s {channelName = a} :: CreateProgramResponse)
+
+-- | The time the program was created.
+createProgramResponse_creationTime :: Lens.Lens' CreateProgramResponse (Prelude.Maybe Prelude.UTCTime)
+createProgramResponse_creationTime = Lens.lens (\CreateProgramResponse' {creationTime} -> creationTime) (\s@CreateProgramResponse' {} a -> s {creationTime = a} :: CreateProgramResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the LiveSource for this Program.
+createProgramResponse_liveSourceName :: Lens.Lens' CreateProgramResponse (Prelude.Maybe Prelude.Text)
+createProgramResponse_liveSourceName = Lens.lens (\CreateProgramResponse' {liveSourceName} -> liveSourceName) (\s@CreateProgramResponse' {} a -> s {liveSourceName = a} :: CreateProgramResponse)
+
+-- | The name to assign to this program.
+createProgramResponse_programName :: Lens.Lens' CreateProgramResponse (Prelude.Maybe Prelude.Text)
+createProgramResponse_programName = Lens.lens (\CreateProgramResponse' {programName} -> programName) (\s@CreateProgramResponse' {} a -> s {programName = a} :: CreateProgramResponse)
+
+-- | The scheduled start time for this Program.
+createProgramResponse_scheduledStartTime :: Lens.Lens' CreateProgramResponse (Prelude.Maybe Prelude.UTCTime)
+createProgramResponse_scheduledStartTime = Lens.lens (\CreateProgramResponse' {scheduledStartTime} -> scheduledStartTime) (\s@CreateProgramResponse' {} a -> s {scheduledStartTime = a} :: CreateProgramResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name to assign to the source location for this program.
+createProgramResponse_sourceLocationName :: Lens.Lens' CreateProgramResponse (Prelude.Maybe Prelude.Text)
+createProgramResponse_sourceLocationName = Lens.lens (\CreateProgramResponse' {sourceLocationName} -> sourceLocationName) (\s@CreateProgramResponse' {} a -> s {sourceLocationName = a} :: CreateProgramResponse)
+
+-- | The name that\'s used to refer to a VOD source.
+createProgramResponse_vodSourceName :: Lens.Lens' CreateProgramResponse (Prelude.Maybe Prelude.Text)
+createProgramResponse_vodSourceName = Lens.lens (\CreateProgramResponse' {vodSourceName} -> vodSourceName) (\s@CreateProgramResponse' {} a -> s {vodSourceName = a} :: CreateProgramResponse)
+
+-- | The response's http status code.
+createProgramResponse_httpStatus :: Lens.Lens' CreateProgramResponse Prelude.Int
+createProgramResponse_httpStatus = Lens.lens (\CreateProgramResponse' {httpStatus} -> httpStatus) (\s@CreateProgramResponse' {} a -> s {httpStatus = a} :: CreateProgramResponse)
+
+instance Prelude.NFData CreateProgramResponse where
+  rnf CreateProgramResponse' {..} =
+    Prelude.rnf adBreaks
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf channelName
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf liveSourceName
+      `Prelude.seq` Prelude.rnf programName
+      `Prelude.seq` Prelude.rnf scheduledStartTime
+      `Prelude.seq` Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf vodSourceName
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/CreateSourceLocation.hs b/gen/Amazonka/MediaTailor/CreateSourceLocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/CreateSourceLocation.hs
@@ -0,0 +1,382 @@
+{-# 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.MediaTailor.CreateSourceLocation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a source location. A source location is a container for sources.
+-- For more information about source locations, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-source-locations.html Working with source locations>
+-- in the /MediaTailor User Guide/.
+module Amazonka.MediaTailor.CreateSourceLocation
+  ( -- * Creating a Request
+    CreateSourceLocation (..),
+    newCreateSourceLocation,
+
+    -- * Request Lenses
+    createSourceLocation_accessConfiguration,
+    createSourceLocation_defaultSegmentDeliveryConfiguration,
+    createSourceLocation_segmentDeliveryConfigurations,
+    createSourceLocation_tags,
+    createSourceLocation_httpConfiguration,
+    createSourceLocation_sourceLocationName,
+
+    -- * Destructuring the Response
+    CreateSourceLocationResponse (..),
+    newCreateSourceLocationResponse,
+
+    -- * Response Lenses
+    createSourceLocationResponse_accessConfiguration,
+    createSourceLocationResponse_arn,
+    createSourceLocationResponse_creationTime,
+    createSourceLocationResponse_defaultSegmentDeliveryConfiguration,
+    createSourceLocationResponse_httpConfiguration,
+    createSourceLocationResponse_lastModifiedTime,
+    createSourceLocationResponse_segmentDeliveryConfigurations,
+    createSourceLocationResponse_sourceLocationName,
+    createSourceLocationResponse_tags,
+    createSourceLocationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateSourceLocation' smart constructor.
+data CreateSourceLocation = CreateSourceLocation'
+  { -- | Access configuration parameters. Configures the type of authentication
+    -- used to access content from your source location.
+    accessConfiguration :: Prelude.Maybe AccessConfiguration,
+    -- | The optional configuration for the server that serves segments.
+    defaultSegmentDeliveryConfiguration :: Prelude.Maybe DefaultSegmentDeliveryConfiguration,
+    -- | A list of the segment delivery configurations associated with this
+    -- resource.
+    segmentDeliveryConfigurations :: Prelude.Maybe [SegmentDeliveryConfiguration],
+    -- | The tags to assign to the source location. Tags are key-value pairs that
+    -- you can associate with Amazon resources to help with organization,
+    -- access control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The source\'s HTTP package configurations.
+    httpConfiguration :: HttpConfiguration,
+    -- | The name associated with the source location.
+    sourceLocationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSourceLocation' 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:
+--
+-- 'accessConfiguration', 'createSourceLocation_accessConfiguration' - Access configuration parameters. Configures the type of authentication
+-- used to access content from your source location.
+--
+-- 'defaultSegmentDeliveryConfiguration', 'createSourceLocation_defaultSegmentDeliveryConfiguration' - The optional configuration for the server that serves segments.
+--
+-- 'segmentDeliveryConfigurations', 'createSourceLocation_segmentDeliveryConfigurations' - A list of the segment delivery configurations associated with this
+-- resource.
+--
+-- 'tags', 'createSourceLocation_tags' - The tags to assign to the source location. Tags are key-value pairs that
+-- you can associate with Amazon resources to help with organization,
+-- access control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'httpConfiguration', 'createSourceLocation_httpConfiguration' - The source\'s HTTP package configurations.
+--
+-- 'sourceLocationName', 'createSourceLocation_sourceLocationName' - The name associated with the source location.
+newCreateSourceLocation ::
+  -- | 'httpConfiguration'
+  HttpConfiguration ->
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  CreateSourceLocation
+newCreateSourceLocation
+  pHttpConfiguration_
+  pSourceLocationName_ =
+    CreateSourceLocation'
+      { accessConfiguration =
+          Prelude.Nothing,
+        defaultSegmentDeliveryConfiguration =
+          Prelude.Nothing,
+        segmentDeliveryConfigurations = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        httpConfiguration = pHttpConfiguration_,
+        sourceLocationName = pSourceLocationName_
+      }
+
+-- | Access configuration parameters. Configures the type of authentication
+-- used to access content from your source location.
+createSourceLocation_accessConfiguration :: Lens.Lens' CreateSourceLocation (Prelude.Maybe AccessConfiguration)
+createSourceLocation_accessConfiguration = Lens.lens (\CreateSourceLocation' {accessConfiguration} -> accessConfiguration) (\s@CreateSourceLocation' {} a -> s {accessConfiguration = a} :: CreateSourceLocation)
+
+-- | The optional configuration for the server that serves segments.
+createSourceLocation_defaultSegmentDeliveryConfiguration :: Lens.Lens' CreateSourceLocation (Prelude.Maybe DefaultSegmentDeliveryConfiguration)
+createSourceLocation_defaultSegmentDeliveryConfiguration = Lens.lens (\CreateSourceLocation' {defaultSegmentDeliveryConfiguration} -> defaultSegmentDeliveryConfiguration) (\s@CreateSourceLocation' {} a -> s {defaultSegmentDeliveryConfiguration = a} :: CreateSourceLocation)
+
+-- | A list of the segment delivery configurations associated with this
+-- resource.
+createSourceLocation_segmentDeliveryConfigurations :: Lens.Lens' CreateSourceLocation (Prelude.Maybe [SegmentDeliveryConfiguration])
+createSourceLocation_segmentDeliveryConfigurations = Lens.lens (\CreateSourceLocation' {segmentDeliveryConfigurations} -> segmentDeliveryConfigurations) (\s@CreateSourceLocation' {} a -> s {segmentDeliveryConfigurations = a} :: CreateSourceLocation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags to assign to the source location. Tags are key-value pairs that
+-- you can associate with Amazon resources to help with organization,
+-- access control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+createSourceLocation_tags :: Lens.Lens' CreateSourceLocation (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createSourceLocation_tags = Lens.lens (\CreateSourceLocation' {tags} -> tags) (\s@CreateSourceLocation' {} a -> s {tags = a} :: CreateSourceLocation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The source\'s HTTP package configurations.
+createSourceLocation_httpConfiguration :: Lens.Lens' CreateSourceLocation HttpConfiguration
+createSourceLocation_httpConfiguration = Lens.lens (\CreateSourceLocation' {httpConfiguration} -> httpConfiguration) (\s@CreateSourceLocation' {} a -> s {httpConfiguration = a} :: CreateSourceLocation)
+
+-- | The name associated with the source location.
+createSourceLocation_sourceLocationName :: Lens.Lens' CreateSourceLocation Prelude.Text
+createSourceLocation_sourceLocationName = Lens.lens (\CreateSourceLocation' {sourceLocationName} -> sourceLocationName) (\s@CreateSourceLocation' {} a -> s {sourceLocationName = a} :: CreateSourceLocation)
+
+instance Core.AWSRequest CreateSourceLocation where
+  type
+    AWSResponse CreateSourceLocation =
+      CreateSourceLocationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateSourceLocationResponse'
+            Prelude.<$> (x Data..?> "AccessConfiguration")
+            Prelude.<*> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "DefaultSegmentDeliveryConfiguration")
+            Prelude.<*> (x Data..?> "HttpConfiguration")
+            Prelude.<*> (x Data..?> "LastModifiedTime")
+            Prelude.<*> ( x
+                            Data..?> "SegmentDeliveryConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "SourceLocationName")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateSourceLocation where
+  hashWithSalt _salt CreateSourceLocation' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessConfiguration
+      `Prelude.hashWithSalt` defaultSegmentDeliveryConfiguration
+      `Prelude.hashWithSalt` segmentDeliveryConfigurations
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` httpConfiguration
+      `Prelude.hashWithSalt` sourceLocationName
+
+instance Prelude.NFData CreateSourceLocation where
+  rnf CreateSourceLocation' {..} =
+    Prelude.rnf accessConfiguration
+      `Prelude.seq` Prelude.rnf defaultSegmentDeliveryConfiguration
+      `Prelude.seq` Prelude.rnf segmentDeliveryConfigurations
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpConfiguration
+      `Prelude.seq` Prelude.rnf sourceLocationName
+
+instance Data.ToHeaders CreateSourceLocation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateSourceLocation where
+  toJSON CreateSourceLocation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccessConfiguration" Data..=)
+              Prelude.<$> accessConfiguration,
+            ("DefaultSegmentDeliveryConfiguration" Data..=)
+              Prelude.<$> defaultSegmentDeliveryConfiguration,
+            ("SegmentDeliveryConfigurations" Data..=)
+              Prelude.<$> segmentDeliveryConfigurations,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("HttpConfiguration" Data..= httpConfiguration)
+          ]
+      )
+
+instance Data.ToPath CreateSourceLocation where
+  toPath CreateSourceLocation' {..} =
+    Prelude.mconcat
+      ["/sourceLocation/", Data.toBS sourceLocationName]
+
+instance Data.ToQuery CreateSourceLocation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateSourceLocationResponse' smart constructor.
+data CreateSourceLocationResponse = CreateSourceLocationResponse'
+  { -- | Access configuration parameters. Configures the type of authentication
+    -- used to access content from your source location.
+    accessConfiguration :: Prelude.Maybe AccessConfiguration,
+    -- | The ARN to assign to the source location.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time the source location was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The optional configuration for the server that serves segments.
+    defaultSegmentDeliveryConfiguration :: Prelude.Maybe DefaultSegmentDeliveryConfiguration,
+    -- | The source\'s HTTP package configurations.
+    httpConfiguration :: Prelude.Maybe HttpConfiguration,
+    -- | The time the source location was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The segment delivery configurations for the source location. For
+    -- information about MediaTailor configurations, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/configurations.html Working with configurations in AWS Elemental MediaTailor>.
+    segmentDeliveryConfigurations :: Prelude.Maybe [SegmentDeliveryConfiguration],
+    -- | The name to assign to the source location.
+    sourceLocationName :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the source location. Tags are key-value pairs that
+    -- you can associate with Amazon resources to help with organization,
+    -- access control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSourceLocationResponse' 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:
+--
+-- 'accessConfiguration', 'createSourceLocationResponse_accessConfiguration' - Access configuration parameters. Configures the type of authentication
+-- used to access content from your source location.
+--
+-- 'arn', 'createSourceLocationResponse_arn' - The ARN to assign to the source location.
+--
+-- 'creationTime', 'createSourceLocationResponse_creationTime' - The time the source location was created.
+--
+-- 'defaultSegmentDeliveryConfiguration', 'createSourceLocationResponse_defaultSegmentDeliveryConfiguration' - The optional configuration for the server that serves segments.
+--
+-- 'httpConfiguration', 'createSourceLocationResponse_httpConfiguration' - The source\'s HTTP package configurations.
+--
+-- 'lastModifiedTime', 'createSourceLocationResponse_lastModifiedTime' - The time the source location was last modified.
+--
+-- 'segmentDeliveryConfigurations', 'createSourceLocationResponse_segmentDeliveryConfigurations' - The segment delivery configurations for the source location. For
+-- information about MediaTailor configurations, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/configurations.html Working with configurations in AWS Elemental MediaTailor>.
+--
+-- 'sourceLocationName', 'createSourceLocationResponse_sourceLocationName' - The name to assign to the source location.
+--
+-- 'tags', 'createSourceLocationResponse_tags' - The tags to assign to the source location. Tags are key-value pairs that
+-- you can associate with Amazon resources to help with organization,
+-- access control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'httpStatus', 'createSourceLocationResponse_httpStatus' - The response's http status code.
+newCreateSourceLocationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateSourceLocationResponse
+newCreateSourceLocationResponse pHttpStatus_ =
+  CreateSourceLocationResponse'
+    { accessConfiguration =
+        Prelude.Nothing,
+      arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      defaultSegmentDeliveryConfiguration =
+        Prelude.Nothing,
+      httpConfiguration = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      segmentDeliveryConfigurations =
+        Prelude.Nothing,
+      sourceLocationName = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Access configuration parameters. Configures the type of authentication
+-- used to access content from your source location.
+createSourceLocationResponse_accessConfiguration :: Lens.Lens' CreateSourceLocationResponse (Prelude.Maybe AccessConfiguration)
+createSourceLocationResponse_accessConfiguration = Lens.lens (\CreateSourceLocationResponse' {accessConfiguration} -> accessConfiguration) (\s@CreateSourceLocationResponse' {} a -> s {accessConfiguration = a} :: CreateSourceLocationResponse)
+
+-- | The ARN to assign to the source location.
+createSourceLocationResponse_arn :: Lens.Lens' CreateSourceLocationResponse (Prelude.Maybe Prelude.Text)
+createSourceLocationResponse_arn = Lens.lens (\CreateSourceLocationResponse' {arn} -> arn) (\s@CreateSourceLocationResponse' {} a -> s {arn = a} :: CreateSourceLocationResponse)
+
+-- | The time the source location was created.
+createSourceLocationResponse_creationTime :: Lens.Lens' CreateSourceLocationResponse (Prelude.Maybe Prelude.UTCTime)
+createSourceLocationResponse_creationTime = Lens.lens (\CreateSourceLocationResponse' {creationTime} -> creationTime) (\s@CreateSourceLocationResponse' {} a -> s {creationTime = a} :: CreateSourceLocationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The optional configuration for the server that serves segments.
+createSourceLocationResponse_defaultSegmentDeliveryConfiguration :: Lens.Lens' CreateSourceLocationResponse (Prelude.Maybe DefaultSegmentDeliveryConfiguration)
+createSourceLocationResponse_defaultSegmentDeliveryConfiguration = Lens.lens (\CreateSourceLocationResponse' {defaultSegmentDeliveryConfiguration} -> defaultSegmentDeliveryConfiguration) (\s@CreateSourceLocationResponse' {} a -> s {defaultSegmentDeliveryConfiguration = a} :: CreateSourceLocationResponse)
+
+-- | The source\'s HTTP package configurations.
+createSourceLocationResponse_httpConfiguration :: Lens.Lens' CreateSourceLocationResponse (Prelude.Maybe HttpConfiguration)
+createSourceLocationResponse_httpConfiguration = Lens.lens (\CreateSourceLocationResponse' {httpConfiguration} -> httpConfiguration) (\s@CreateSourceLocationResponse' {} a -> s {httpConfiguration = a} :: CreateSourceLocationResponse)
+
+-- | The time the source location was last modified.
+createSourceLocationResponse_lastModifiedTime :: Lens.Lens' CreateSourceLocationResponse (Prelude.Maybe Prelude.UTCTime)
+createSourceLocationResponse_lastModifiedTime = Lens.lens (\CreateSourceLocationResponse' {lastModifiedTime} -> lastModifiedTime) (\s@CreateSourceLocationResponse' {} a -> s {lastModifiedTime = a} :: CreateSourceLocationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The segment delivery configurations for the source location. For
+-- information about MediaTailor configurations, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/configurations.html Working with configurations in AWS Elemental MediaTailor>.
+createSourceLocationResponse_segmentDeliveryConfigurations :: Lens.Lens' CreateSourceLocationResponse (Prelude.Maybe [SegmentDeliveryConfiguration])
+createSourceLocationResponse_segmentDeliveryConfigurations = Lens.lens (\CreateSourceLocationResponse' {segmentDeliveryConfigurations} -> segmentDeliveryConfigurations) (\s@CreateSourceLocationResponse' {} a -> s {segmentDeliveryConfigurations = a} :: CreateSourceLocationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name to assign to the source location.
+createSourceLocationResponse_sourceLocationName :: Lens.Lens' CreateSourceLocationResponse (Prelude.Maybe Prelude.Text)
+createSourceLocationResponse_sourceLocationName = Lens.lens (\CreateSourceLocationResponse' {sourceLocationName} -> sourceLocationName) (\s@CreateSourceLocationResponse' {} a -> s {sourceLocationName = a} :: CreateSourceLocationResponse)
+
+-- | The tags to assign to the source location. Tags are key-value pairs that
+-- you can associate with Amazon resources to help with organization,
+-- access control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+createSourceLocationResponse_tags :: Lens.Lens' CreateSourceLocationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createSourceLocationResponse_tags = Lens.lens (\CreateSourceLocationResponse' {tags} -> tags) (\s@CreateSourceLocationResponse' {} a -> s {tags = a} :: CreateSourceLocationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createSourceLocationResponse_httpStatus :: Lens.Lens' CreateSourceLocationResponse Prelude.Int
+createSourceLocationResponse_httpStatus = Lens.lens (\CreateSourceLocationResponse' {httpStatus} -> httpStatus) (\s@CreateSourceLocationResponse' {} a -> s {httpStatus = a} :: CreateSourceLocationResponse)
+
+instance Prelude.NFData CreateSourceLocationResponse where
+  rnf CreateSourceLocationResponse' {..} =
+    Prelude.rnf accessConfiguration
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf defaultSegmentDeliveryConfiguration
+      `Prelude.seq` Prelude.rnf httpConfiguration
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf segmentDeliveryConfigurations
+      `Prelude.seq` Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/CreateVodSource.hs b/gen/Amazonka/MediaTailor/CreateVodSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/CreateVodSource.hs
@@ -0,0 +1,311 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaTailor.CreateVodSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The VOD source configuration parameters.
+module Amazonka.MediaTailor.CreateVodSource
+  ( -- * Creating a Request
+    CreateVodSource (..),
+    newCreateVodSource,
+
+    -- * Request Lenses
+    createVodSource_tags,
+    createVodSource_httpPackageConfigurations,
+    createVodSource_sourceLocationName,
+    createVodSource_vodSourceName,
+
+    -- * Destructuring the Response
+    CreateVodSourceResponse (..),
+    newCreateVodSourceResponse,
+
+    -- * Response Lenses
+    createVodSourceResponse_arn,
+    createVodSourceResponse_creationTime,
+    createVodSourceResponse_httpPackageConfigurations,
+    createVodSourceResponse_lastModifiedTime,
+    createVodSourceResponse_sourceLocationName,
+    createVodSourceResponse_tags,
+    createVodSourceResponse_vodSourceName,
+    createVodSourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateVodSource' smart constructor.
+data CreateVodSource = CreateVodSource'
+  { -- | The tags to assign to the VOD source. Tags are key-value pairs that you
+    -- can associate with Amazon resources to help with organization, access
+    -- control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A list of HTTP package configuration parameters for this VOD source.
+    httpPackageConfigurations :: [HttpPackageConfiguration],
+    -- | The name of the source location for this VOD source.
+    sourceLocationName :: Prelude.Text,
+    -- | The name associated with the VOD source.>
+    vodSourceName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVodSource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'createVodSource_tags' - The tags to assign to the VOD source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'httpPackageConfigurations', 'createVodSource_httpPackageConfigurations' - A list of HTTP package configuration parameters for this VOD source.
+--
+-- 'sourceLocationName', 'createVodSource_sourceLocationName' - The name of the source location for this VOD source.
+--
+-- 'vodSourceName', 'createVodSource_vodSourceName' - The name associated with the VOD source.>
+newCreateVodSource ::
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  -- | 'vodSourceName'
+  Prelude.Text ->
+  CreateVodSource
+newCreateVodSource
+  pSourceLocationName_
+  pVodSourceName_ =
+    CreateVodSource'
+      { tags = Prelude.Nothing,
+        httpPackageConfigurations = Prelude.mempty,
+        sourceLocationName = pSourceLocationName_,
+        vodSourceName = pVodSourceName_
+      }
+
+-- | The tags to assign to the VOD source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+createVodSource_tags :: Lens.Lens' CreateVodSource (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createVodSource_tags = Lens.lens (\CreateVodSource' {tags} -> tags) (\s@CreateVodSource' {} a -> s {tags = a} :: CreateVodSource) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of HTTP package configuration parameters for this VOD source.
+createVodSource_httpPackageConfigurations :: Lens.Lens' CreateVodSource [HttpPackageConfiguration]
+createVodSource_httpPackageConfigurations = Lens.lens (\CreateVodSource' {httpPackageConfigurations} -> httpPackageConfigurations) (\s@CreateVodSource' {} a -> s {httpPackageConfigurations = a} :: CreateVodSource) Prelude.. Lens.coerced
+
+-- | The name of the source location for this VOD source.
+createVodSource_sourceLocationName :: Lens.Lens' CreateVodSource Prelude.Text
+createVodSource_sourceLocationName = Lens.lens (\CreateVodSource' {sourceLocationName} -> sourceLocationName) (\s@CreateVodSource' {} a -> s {sourceLocationName = a} :: CreateVodSource)
+
+-- | The name associated with the VOD source.>
+createVodSource_vodSourceName :: Lens.Lens' CreateVodSource Prelude.Text
+createVodSource_vodSourceName = Lens.lens (\CreateVodSource' {vodSourceName} -> vodSourceName) (\s@CreateVodSource' {} a -> s {vodSourceName = a} :: CreateVodSource)
+
+instance Core.AWSRequest CreateVodSource where
+  type
+    AWSResponse CreateVodSource =
+      CreateVodSourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateVodSourceResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> ( x
+                            Data..?> "HttpPackageConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "LastModifiedTime")
+            Prelude.<*> (x Data..?> "SourceLocationName")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "VodSourceName")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateVodSource where
+  hashWithSalt _salt CreateVodSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` httpPackageConfigurations
+      `Prelude.hashWithSalt` sourceLocationName
+      `Prelude.hashWithSalt` vodSourceName
+
+instance Prelude.NFData CreateVodSource where
+  rnf CreateVodSource' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpPackageConfigurations
+      `Prelude.seq` Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf vodSourceName
+
+instance Data.ToHeaders CreateVodSource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateVodSource where
+  toJSON CreateVodSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ( "HttpPackageConfigurations"
+                  Data..= httpPackageConfigurations
+              )
+          ]
+      )
+
+instance Data.ToPath CreateVodSource where
+  toPath CreateVodSource' {..} =
+    Prelude.mconcat
+      [ "/sourceLocation/",
+        Data.toBS sourceLocationName,
+        "/vodSource/",
+        Data.toBS vodSourceName
+      ]
+
+instance Data.ToQuery CreateVodSource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateVodSourceResponse' smart constructor.
+data CreateVodSourceResponse = CreateVodSourceResponse'
+  { -- | The ARN to assign to this VOD source.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time the VOD source was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | A list of HTTP package configuration parameters for this VOD source.
+    httpPackageConfigurations :: Prelude.Maybe [HttpPackageConfiguration],
+    -- | The time the VOD source was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The name to assign to the source location for this VOD source.
+    sourceLocationName :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the VOD source. Tags are key-value pairs that you
+    -- can associate with Amazon resources to help with organization, access
+    -- control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name to assign to the VOD source.
+    vodSourceName :: 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 'CreateVodSourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'createVodSourceResponse_arn' - The ARN to assign to this VOD source.
+--
+-- 'creationTime', 'createVodSourceResponse_creationTime' - The time the VOD source was created.
+--
+-- 'httpPackageConfigurations', 'createVodSourceResponse_httpPackageConfigurations' - A list of HTTP package configuration parameters for this VOD source.
+--
+-- 'lastModifiedTime', 'createVodSourceResponse_lastModifiedTime' - The time the VOD source was last modified.
+--
+-- 'sourceLocationName', 'createVodSourceResponse_sourceLocationName' - The name to assign to the source location for this VOD source.
+--
+-- 'tags', 'createVodSourceResponse_tags' - The tags to assign to the VOD source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'vodSourceName', 'createVodSourceResponse_vodSourceName' - The name to assign to the VOD source.
+--
+-- 'httpStatus', 'createVodSourceResponse_httpStatus' - The response's http status code.
+newCreateVodSourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateVodSourceResponse
+newCreateVodSourceResponse pHttpStatus_ =
+  CreateVodSourceResponse'
+    { arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      httpPackageConfigurations = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      sourceLocationName = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vodSourceName = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN to assign to this VOD source.
+createVodSourceResponse_arn :: Lens.Lens' CreateVodSourceResponse (Prelude.Maybe Prelude.Text)
+createVodSourceResponse_arn = Lens.lens (\CreateVodSourceResponse' {arn} -> arn) (\s@CreateVodSourceResponse' {} a -> s {arn = a} :: CreateVodSourceResponse)
+
+-- | The time the VOD source was created.
+createVodSourceResponse_creationTime :: Lens.Lens' CreateVodSourceResponse (Prelude.Maybe Prelude.UTCTime)
+createVodSourceResponse_creationTime = Lens.lens (\CreateVodSourceResponse' {creationTime} -> creationTime) (\s@CreateVodSourceResponse' {} a -> s {creationTime = a} :: CreateVodSourceResponse) Prelude.. Lens.mapping Data._Time
+
+-- | A list of HTTP package configuration parameters for this VOD source.
+createVodSourceResponse_httpPackageConfigurations :: Lens.Lens' CreateVodSourceResponse (Prelude.Maybe [HttpPackageConfiguration])
+createVodSourceResponse_httpPackageConfigurations = Lens.lens (\CreateVodSourceResponse' {httpPackageConfigurations} -> httpPackageConfigurations) (\s@CreateVodSourceResponse' {} a -> s {httpPackageConfigurations = a} :: CreateVodSourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time the VOD source was last modified.
+createVodSourceResponse_lastModifiedTime :: Lens.Lens' CreateVodSourceResponse (Prelude.Maybe Prelude.UTCTime)
+createVodSourceResponse_lastModifiedTime = Lens.lens (\CreateVodSourceResponse' {lastModifiedTime} -> lastModifiedTime) (\s@CreateVodSourceResponse' {} a -> s {lastModifiedTime = a} :: CreateVodSourceResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name to assign to the source location for this VOD source.
+createVodSourceResponse_sourceLocationName :: Lens.Lens' CreateVodSourceResponse (Prelude.Maybe Prelude.Text)
+createVodSourceResponse_sourceLocationName = Lens.lens (\CreateVodSourceResponse' {sourceLocationName} -> sourceLocationName) (\s@CreateVodSourceResponse' {} a -> s {sourceLocationName = a} :: CreateVodSourceResponse)
+
+-- | The tags to assign to the VOD source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+createVodSourceResponse_tags :: Lens.Lens' CreateVodSourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createVodSourceResponse_tags = Lens.lens (\CreateVodSourceResponse' {tags} -> tags) (\s@CreateVodSourceResponse' {} a -> s {tags = a} :: CreateVodSourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name to assign to the VOD source.
+createVodSourceResponse_vodSourceName :: Lens.Lens' CreateVodSourceResponse (Prelude.Maybe Prelude.Text)
+createVodSourceResponse_vodSourceName = Lens.lens (\CreateVodSourceResponse' {vodSourceName} -> vodSourceName) (\s@CreateVodSourceResponse' {} a -> s {vodSourceName = a} :: CreateVodSourceResponse)
+
+-- | The response's http status code.
+createVodSourceResponse_httpStatus :: Lens.Lens' CreateVodSourceResponse Prelude.Int
+createVodSourceResponse_httpStatus = Lens.lens (\CreateVodSourceResponse' {httpStatus} -> httpStatus) (\s@CreateVodSourceResponse' {} a -> s {httpStatus = a} :: CreateVodSourceResponse)
+
+instance Prelude.NFData CreateVodSourceResponse where
+  rnf CreateVodSourceResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf httpPackageConfigurations
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vodSourceName
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/DeleteChannel.hs b/gen/Amazonka/MediaTailor/DeleteChannel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/DeleteChannel.hs
@@ -0,0 +1,146 @@
+{-# 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.MediaTailor.DeleteChannel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a channel. For information about MediaTailor channels, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-channels.html Working with channels>
+-- in the /MediaTailor User Guide/.
+module Amazonka.MediaTailor.DeleteChannel
+  ( -- * Creating a Request
+    DeleteChannel (..),
+    newDeleteChannel,
+
+    -- * Request Lenses
+    deleteChannel_channelName,
+
+    -- * Destructuring the Response
+    DeleteChannelResponse (..),
+    newDeleteChannelResponse,
+
+    -- * Response Lenses
+    deleteChannelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteChannel' smart constructor.
+data DeleteChannel = DeleteChannel'
+  { -- | The name of the channel.
+    channelName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteChannel' 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:
+--
+-- 'channelName', 'deleteChannel_channelName' - The name of the channel.
+newDeleteChannel ::
+  -- | 'channelName'
+  Prelude.Text ->
+  DeleteChannel
+newDeleteChannel pChannelName_ =
+  DeleteChannel' {channelName = pChannelName_}
+
+-- | The name of the channel.
+deleteChannel_channelName :: Lens.Lens' DeleteChannel Prelude.Text
+deleteChannel_channelName = Lens.lens (\DeleteChannel' {channelName} -> channelName) (\s@DeleteChannel' {} a -> s {channelName = a} :: DeleteChannel)
+
+instance Core.AWSRequest DeleteChannel where
+  type
+    AWSResponse DeleteChannel =
+      DeleteChannelResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteChannelResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteChannel where
+  hashWithSalt _salt DeleteChannel' {..} =
+    _salt `Prelude.hashWithSalt` channelName
+
+instance Prelude.NFData DeleteChannel where
+  rnf DeleteChannel' {..} = Prelude.rnf channelName
+
+instance Data.ToHeaders DeleteChannel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteChannel where
+  toPath DeleteChannel' {..} =
+    Prelude.mconcat
+      ["/channel/", Data.toBS channelName]
+
+instance Data.ToQuery DeleteChannel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteChannelResponse' smart constructor.
+data DeleteChannelResponse = DeleteChannelResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteChannelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteChannelResponse_httpStatus' - The response's http status code.
+newDeleteChannelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteChannelResponse
+newDeleteChannelResponse pHttpStatus_ =
+  DeleteChannelResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteChannelResponse_httpStatus :: Lens.Lens' DeleteChannelResponse Prelude.Int
+deleteChannelResponse_httpStatus = Lens.lens (\DeleteChannelResponse' {httpStatus} -> httpStatus) (\s@DeleteChannelResponse' {} a -> s {httpStatus = a} :: DeleteChannelResponse)
+
+instance Prelude.NFData DeleteChannelResponse where
+  rnf DeleteChannelResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/DeleteChannelPolicy.hs b/gen/Amazonka/MediaTailor/DeleteChannelPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/DeleteChannelPolicy.hs
@@ -0,0 +1,148 @@
+{-# 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.MediaTailor.DeleteChannelPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The channel policy to delete.
+module Amazonka.MediaTailor.DeleteChannelPolicy
+  ( -- * Creating a Request
+    DeleteChannelPolicy (..),
+    newDeleteChannelPolicy,
+
+    -- * Request Lenses
+    deleteChannelPolicy_channelName,
+
+    -- * Destructuring the Response
+    DeleteChannelPolicyResponse (..),
+    newDeleteChannelPolicyResponse,
+
+    -- * Response Lenses
+    deleteChannelPolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteChannelPolicy' smart constructor.
+data DeleteChannelPolicy = DeleteChannelPolicy'
+  { -- | The name of the channel associated with this channel policy.
+    channelName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteChannelPolicy' 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:
+--
+-- 'channelName', 'deleteChannelPolicy_channelName' - The name of the channel associated with this channel policy.
+newDeleteChannelPolicy ::
+  -- | 'channelName'
+  Prelude.Text ->
+  DeleteChannelPolicy
+newDeleteChannelPolicy pChannelName_ =
+  DeleteChannelPolicy' {channelName = pChannelName_}
+
+-- | The name of the channel associated with this channel policy.
+deleteChannelPolicy_channelName :: Lens.Lens' DeleteChannelPolicy Prelude.Text
+deleteChannelPolicy_channelName = Lens.lens (\DeleteChannelPolicy' {channelName} -> channelName) (\s@DeleteChannelPolicy' {} a -> s {channelName = a} :: DeleteChannelPolicy)
+
+instance Core.AWSRequest DeleteChannelPolicy where
+  type
+    AWSResponse DeleteChannelPolicy =
+      DeleteChannelPolicyResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteChannelPolicyResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteChannelPolicy where
+  hashWithSalt _salt DeleteChannelPolicy' {..} =
+    _salt `Prelude.hashWithSalt` channelName
+
+instance Prelude.NFData DeleteChannelPolicy where
+  rnf DeleteChannelPolicy' {..} =
+    Prelude.rnf channelName
+
+instance Data.ToHeaders DeleteChannelPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteChannelPolicy where
+  toPath DeleteChannelPolicy' {..} =
+    Prelude.mconcat
+      ["/channel/", Data.toBS channelName, "/policy"]
+
+instance Data.ToQuery DeleteChannelPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteChannelPolicyResponse' smart constructor.
+data DeleteChannelPolicyResponse = DeleteChannelPolicyResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteChannelPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteChannelPolicyResponse_httpStatus' - The response's http status code.
+newDeleteChannelPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteChannelPolicyResponse
+newDeleteChannelPolicyResponse pHttpStatus_ =
+  DeleteChannelPolicyResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteChannelPolicyResponse_httpStatus :: Lens.Lens' DeleteChannelPolicyResponse Prelude.Int
+deleteChannelPolicyResponse_httpStatus = Lens.lens (\DeleteChannelPolicyResponse' {httpStatus} -> httpStatus) (\s@DeleteChannelPolicyResponse' {} a -> s {httpStatus = a} :: DeleteChannelPolicyResponse)
+
+instance Prelude.NFData DeleteChannelPolicyResponse where
+  rnf DeleteChannelPolicyResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/DeleteLiveSource.hs b/gen/Amazonka/MediaTailor/DeleteLiveSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/DeleteLiveSource.hs
@@ -0,0 +1,172 @@
+{-# 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.MediaTailor.DeleteLiveSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The live source to delete.
+module Amazonka.MediaTailor.DeleteLiveSource
+  ( -- * Creating a Request
+    DeleteLiveSource (..),
+    newDeleteLiveSource,
+
+    -- * Request Lenses
+    deleteLiveSource_liveSourceName,
+    deleteLiveSource_sourceLocationName,
+
+    -- * Destructuring the Response
+    DeleteLiveSourceResponse (..),
+    newDeleteLiveSourceResponse,
+
+    -- * Response Lenses
+    deleteLiveSourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteLiveSource' smart constructor.
+data DeleteLiveSource = DeleteLiveSource'
+  { -- | The name of the live source.
+    liveSourceName :: Prelude.Text,
+    -- | The name of the source location associated with this Live Source.
+    sourceLocationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLiveSource' 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:
+--
+-- 'liveSourceName', 'deleteLiveSource_liveSourceName' - The name of the live source.
+--
+-- 'sourceLocationName', 'deleteLiveSource_sourceLocationName' - The name of the source location associated with this Live Source.
+newDeleteLiveSource ::
+  -- | 'liveSourceName'
+  Prelude.Text ->
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  DeleteLiveSource
+newDeleteLiveSource
+  pLiveSourceName_
+  pSourceLocationName_ =
+    DeleteLiveSource'
+      { liveSourceName =
+          pLiveSourceName_,
+        sourceLocationName = pSourceLocationName_
+      }
+
+-- | The name of the live source.
+deleteLiveSource_liveSourceName :: Lens.Lens' DeleteLiveSource Prelude.Text
+deleteLiveSource_liveSourceName = Lens.lens (\DeleteLiveSource' {liveSourceName} -> liveSourceName) (\s@DeleteLiveSource' {} a -> s {liveSourceName = a} :: DeleteLiveSource)
+
+-- | The name of the source location associated with this Live Source.
+deleteLiveSource_sourceLocationName :: Lens.Lens' DeleteLiveSource Prelude.Text
+deleteLiveSource_sourceLocationName = Lens.lens (\DeleteLiveSource' {sourceLocationName} -> sourceLocationName) (\s@DeleteLiveSource' {} a -> s {sourceLocationName = a} :: DeleteLiveSource)
+
+instance Core.AWSRequest DeleteLiveSource where
+  type
+    AWSResponse DeleteLiveSource =
+      DeleteLiveSourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteLiveSourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteLiveSource where
+  hashWithSalt _salt DeleteLiveSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` liveSourceName
+      `Prelude.hashWithSalt` sourceLocationName
+
+instance Prelude.NFData DeleteLiveSource where
+  rnf DeleteLiveSource' {..} =
+    Prelude.rnf liveSourceName
+      `Prelude.seq` Prelude.rnf sourceLocationName
+
+instance Data.ToHeaders DeleteLiveSource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteLiveSource where
+  toPath DeleteLiveSource' {..} =
+    Prelude.mconcat
+      [ "/sourceLocation/",
+        Data.toBS sourceLocationName,
+        "/liveSource/",
+        Data.toBS liveSourceName
+      ]
+
+instance Data.ToQuery DeleteLiveSource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteLiveSourceResponse' smart constructor.
+data DeleteLiveSourceResponse = DeleteLiveSourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLiveSourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteLiveSourceResponse_httpStatus' - The response's http status code.
+newDeleteLiveSourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteLiveSourceResponse
+newDeleteLiveSourceResponse pHttpStatus_ =
+  DeleteLiveSourceResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteLiveSourceResponse_httpStatus :: Lens.Lens' DeleteLiveSourceResponse Prelude.Int
+deleteLiveSourceResponse_httpStatus = Lens.lens (\DeleteLiveSourceResponse' {httpStatus} -> httpStatus) (\s@DeleteLiveSourceResponse' {} a -> s {httpStatus = a} :: DeleteLiveSourceResponse)
+
+instance Prelude.NFData DeleteLiveSourceResponse where
+  rnf DeleteLiveSourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/DeletePlaybackConfiguration.hs b/gen/Amazonka/MediaTailor/DeletePlaybackConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/DeletePlaybackConfiguration.hs
@@ -0,0 +1,153 @@
+{-# 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.MediaTailor.DeletePlaybackConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a playback configuration. For information about MediaTailor
+-- configurations, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/configurations.html Working with configurations in AWS Elemental MediaTailor>.
+module Amazonka.MediaTailor.DeletePlaybackConfiguration
+  ( -- * Creating a Request
+    DeletePlaybackConfiguration (..),
+    newDeletePlaybackConfiguration,
+
+    -- * Request Lenses
+    deletePlaybackConfiguration_name,
+
+    -- * Destructuring the Response
+    DeletePlaybackConfigurationResponse (..),
+    newDeletePlaybackConfigurationResponse,
+
+    -- * Response Lenses
+    deletePlaybackConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeletePlaybackConfiguration' smart constructor.
+data DeletePlaybackConfiguration = DeletePlaybackConfiguration'
+  { -- | The name of the playback configuration.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePlaybackConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'deletePlaybackConfiguration_name' - The name of the playback configuration.
+newDeletePlaybackConfiguration ::
+  -- | 'name'
+  Prelude.Text ->
+  DeletePlaybackConfiguration
+newDeletePlaybackConfiguration pName_ =
+  DeletePlaybackConfiguration' {name = pName_}
+
+-- | The name of the playback configuration.
+deletePlaybackConfiguration_name :: Lens.Lens' DeletePlaybackConfiguration Prelude.Text
+deletePlaybackConfiguration_name = Lens.lens (\DeletePlaybackConfiguration' {name} -> name) (\s@DeletePlaybackConfiguration' {} a -> s {name = a} :: DeletePlaybackConfiguration)
+
+instance Core.AWSRequest DeletePlaybackConfiguration where
+  type
+    AWSResponse DeletePlaybackConfiguration =
+      DeletePlaybackConfigurationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeletePlaybackConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeletePlaybackConfiguration where
+  hashWithSalt _salt DeletePlaybackConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeletePlaybackConfiguration where
+  rnf DeletePlaybackConfiguration' {..} =
+    Prelude.rnf name
+
+instance Data.ToHeaders DeletePlaybackConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeletePlaybackConfiguration where
+  toPath DeletePlaybackConfiguration' {..} =
+    Prelude.mconcat
+      ["/playbackConfiguration/", Data.toBS name]
+
+instance Data.ToQuery DeletePlaybackConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeletePlaybackConfigurationResponse' smart constructor.
+data DeletePlaybackConfigurationResponse = DeletePlaybackConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePlaybackConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deletePlaybackConfigurationResponse_httpStatus' - The response's http status code.
+newDeletePlaybackConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeletePlaybackConfigurationResponse
+newDeletePlaybackConfigurationResponse pHttpStatus_ =
+  DeletePlaybackConfigurationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deletePlaybackConfigurationResponse_httpStatus :: Lens.Lens' DeletePlaybackConfigurationResponse Prelude.Int
+deletePlaybackConfigurationResponse_httpStatus = Lens.lens (\DeletePlaybackConfigurationResponse' {httpStatus} -> httpStatus) (\s@DeletePlaybackConfigurationResponse' {} a -> s {httpStatus = a} :: DeletePlaybackConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DeletePlaybackConfigurationResponse
+  where
+  rnf DeletePlaybackConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/DeletePrefetchSchedule.hs b/gen/Amazonka/MediaTailor/DeletePrefetchSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/DeletePrefetchSchedule.hs
@@ -0,0 +1,183 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaTailor.DeletePrefetchSchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a prefetch schedule for a specific playback configuration. If
+-- you call @DeletePrefetchSchedule@ on an expired prefetch schedule,
+-- MediaTailor returns an HTTP 404 status code. For more information about
+-- ad prefetching, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/prefetching-ads.html Using ad prefetching>
+-- in the /MediaTailor User Guide/.
+module Amazonka.MediaTailor.DeletePrefetchSchedule
+  ( -- * Creating a Request
+    DeletePrefetchSchedule (..),
+    newDeletePrefetchSchedule,
+
+    -- * Request Lenses
+    deletePrefetchSchedule_name,
+    deletePrefetchSchedule_playbackConfigurationName,
+
+    -- * Destructuring the Response
+    DeletePrefetchScheduleResponse (..),
+    newDeletePrefetchScheduleResponse,
+
+    -- * Response Lenses
+    deletePrefetchScheduleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeletePrefetchSchedule' smart constructor.
+data DeletePrefetchSchedule = DeletePrefetchSchedule'
+  { -- | The name of the prefetch schedule. If the action is successful, the
+    -- service sends back an HTTP 204 response with an empty HTTP body.
+    name :: Prelude.Text,
+    -- | The name of the playback configuration for this prefetch schedule.
+    playbackConfigurationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePrefetchSchedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'deletePrefetchSchedule_name' - The name of the prefetch schedule. If the action is successful, the
+-- service sends back an HTTP 204 response with an empty HTTP body.
+--
+-- 'playbackConfigurationName', 'deletePrefetchSchedule_playbackConfigurationName' - The name of the playback configuration for this prefetch schedule.
+newDeletePrefetchSchedule ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'playbackConfigurationName'
+  Prelude.Text ->
+  DeletePrefetchSchedule
+newDeletePrefetchSchedule
+  pName_
+  pPlaybackConfigurationName_ =
+    DeletePrefetchSchedule'
+      { name = pName_,
+        playbackConfigurationName =
+          pPlaybackConfigurationName_
+      }
+
+-- | The name of the prefetch schedule. If the action is successful, the
+-- service sends back an HTTP 204 response with an empty HTTP body.
+deletePrefetchSchedule_name :: Lens.Lens' DeletePrefetchSchedule Prelude.Text
+deletePrefetchSchedule_name = Lens.lens (\DeletePrefetchSchedule' {name} -> name) (\s@DeletePrefetchSchedule' {} a -> s {name = a} :: DeletePrefetchSchedule)
+
+-- | The name of the playback configuration for this prefetch schedule.
+deletePrefetchSchedule_playbackConfigurationName :: Lens.Lens' DeletePrefetchSchedule Prelude.Text
+deletePrefetchSchedule_playbackConfigurationName = Lens.lens (\DeletePrefetchSchedule' {playbackConfigurationName} -> playbackConfigurationName) (\s@DeletePrefetchSchedule' {} a -> s {playbackConfigurationName = a} :: DeletePrefetchSchedule)
+
+instance Core.AWSRequest DeletePrefetchSchedule where
+  type
+    AWSResponse DeletePrefetchSchedule =
+      DeletePrefetchScheduleResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeletePrefetchScheduleResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeletePrefetchSchedule where
+  hashWithSalt _salt DeletePrefetchSchedule' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` playbackConfigurationName
+
+instance Prelude.NFData DeletePrefetchSchedule where
+  rnf DeletePrefetchSchedule' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf playbackConfigurationName
+
+instance Data.ToHeaders DeletePrefetchSchedule where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeletePrefetchSchedule where
+  toPath DeletePrefetchSchedule' {..} =
+    Prelude.mconcat
+      [ "/prefetchSchedule/",
+        Data.toBS playbackConfigurationName,
+        "/",
+        Data.toBS name
+      ]
+
+instance Data.ToQuery DeletePrefetchSchedule where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeletePrefetchScheduleResponse' smart constructor.
+data DeletePrefetchScheduleResponse = DeletePrefetchScheduleResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePrefetchScheduleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deletePrefetchScheduleResponse_httpStatus' - The response's http status code.
+newDeletePrefetchScheduleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeletePrefetchScheduleResponse
+newDeletePrefetchScheduleResponse pHttpStatus_ =
+  DeletePrefetchScheduleResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deletePrefetchScheduleResponse_httpStatus :: Lens.Lens' DeletePrefetchScheduleResponse Prelude.Int
+deletePrefetchScheduleResponse_httpStatus = Lens.lens (\DeletePrefetchScheduleResponse' {httpStatus} -> httpStatus) (\s@DeletePrefetchScheduleResponse' {} a -> s {httpStatus = a} :: DeletePrefetchScheduleResponse)
+
+instance
+  Prelude.NFData
+    DeletePrefetchScheduleResponse
+  where
+  rnf DeletePrefetchScheduleResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/DeleteProgram.hs b/gen/Amazonka/MediaTailor/DeleteProgram.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/DeleteProgram.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaTailor.DeleteProgram
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a program within a channel. For information about programs, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-programs.html Working with programs>
+-- in the /MediaTailor User Guide/.
+module Amazonka.MediaTailor.DeleteProgram
+  ( -- * Creating a Request
+    DeleteProgram (..),
+    newDeleteProgram,
+
+    -- * Request Lenses
+    deleteProgram_channelName,
+    deleteProgram_programName,
+
+    -- * Destructuring the Response
+    DeleteProgramResponse (..),
+    newDeleteProgramResponse,
+
+    -- * Response Lenses
+    deleteProgramResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteProgram' smart constructor.
+data DeleteProgram = DeleteProgram'
+  { -- | The name of the channel.
+    channelName :: Prelude.Text,
+    -- | The name of the program.
+    programName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteProgram' 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:
+--
+-- 'channelName', 'deleteProgram_channelName' - The name of the channel.
+--
+-- 'programName', 'deleteProgram_programName' - The name of the program.
+newDeleteProgram ::
+  -- | 'channelName'
+  Prelude.Text ->
+  -- | 'programName'
+  Prelude.Text ->
+  DeleteProgram
+newDeleteProgram pChannelName_ pProgramName_ =
+  DeleteProgram'
+    { channelName = pChannelName_,
+      programName = pProgramName_
+    }
+
+-- | The name of the channel.
+deleteProgram_channelName :: Lens.Lens' DeleteProgram Prelude.Text
+deleteProgram_channelName = Lens.lens (\DeleteProgram' {channelName} -> channelName) (\s@DeleteProgram' {} a -> s {channelName = a} :: DeleteProgram)
+
+-- | The name of the program.
+deleteProgram_programName :: Lens.Lens' DeleteProgram Prelude.Text
+deleteProgram_programName = Lens.lens (\DeleteProgram' {programName} -> programName) (\s@DeleteProgram' {} a -> s {programName = a} :: DeleteProgram)
+
+instance Core.AWSRequest DeleteProgram where
+  type
+    AWSResponse DeleteProgram =
+      DeleteProgramResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteProgramResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteProgram where
+  hashWithSalt _salt DeleteProgram' {..} =
+    _salt
+      `Prelude.hashWithSalt` channelName
+      `Prelude.hashWithSalt` programName
+
+instance Prelude.NFData DeleteProgram where
+  rnf DeleteProgram' {..} =
+    Prelude.rnf channelName
+      `Prelude.seq` Prelude.rnf programName
+
+instance Data.ToHeaders DeleteProgram where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteProgram where
+  toPath DeleteProgram' {..} =
+    Prelude.mconcat
+      [ "/channel/",
+        Data.toBS channelName,
+        "/program/",
+        Data.toBS programName
+      ]
+
+instance Data.ToQuery DeleteProgram where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteProgramResponse' smart constructor.
+data DeleteProgramResponse = DeleteProgramResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteProgramResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteProgramResponse_httpStatus' - The response's http status code.
+newDeleteProgramResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteProgramResponse
+newDeleteProgramResponse pHttpStatus_ =
+  DeleteProgramResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteProgramResponse_httpStatus :: Lens.Lens' DeleteProgramResponse Prelude.Int
+deleteProgramResponse_httpStatus = Lens.lens (\DeleteProgramResponse' {httpStatus} -> httpStatus) (\s@DeleteProgramResponse' {} a -> s {httpStatus = a} :: DeleteProgramResponse)
+
+instance Prelude.NFData DeleteProgramResponse where
+  rnf DeleteProgramResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/DeleteSourceLocation.hs b/gen/Amazonka/MediaTailor/DeleteSourceLocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/DeleteSourceLocation.hs
@@ -0,0 +1,154 @@
+{-# 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.MediaTailor.DeleteSourceLocation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a source location. A source location is a container for sources.
+-- For more information about source locations, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-source-locations.html Working with source locations>
+-- in the /MediaTailor User Guide/.
+module Amazonka.MediaTailor.DeleteSourceLocation
+  ( -- * Creating a Request
+    DeleteSourceLocation (..),
+    newDeleteSourceLocation,
+
+    -- * Request Lenses
+    deleteSourceLocation_sourceLocationName,
+
+    -- * Destructuring the Response
+    DeleteSourceLocationResponse (..),
+    newDeleteSourceLocationResponse,
+
+    -- * Response Lenses
+    deleteSourceLocationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteSourceLocation' smart constructor.
+data DeleteSourceLocation = DeleteSourceLocation'
+  { -- | The name of the source location.
+    sourceLocationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSourceLocation' 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:
+--
+-- 'sourceLocationName', 'deleteSourceLocation_sourceLocationName' - The name of the source location.
+newDeleteSourceLocation ::
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  DeleteSourceLocation
+newDeleteSourceLocation pSourceLocationName_ =
+  DeleteSourceLocation'
+    { sourceLocationName =
+        pSourceLocationName_
+    }
+
+-- | The name of the source location.
+deleteSourceLocation_sourceLocationName :: Lens.Lens' DeleteSourceLocation Prelude.Text
+deleteSourceLocation_sourceLocationName = Lens.lens (\DeleteSourceLocation' {sourceLocationName} -> sourceLocationName) (\s@DeleteSourceLocation' {} a -> s {sourceLocationName = a} :: DeleteSourceLocation)
+
+instance Core.AWSRequest DeleteSourceLocation where
+  type
+    AWSResponse DeleteSourceLocation =
+      DeleteSourceLocationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteSourceLocationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteSourceLocation where
+  hashWithSalt _salt DeleteSourceLocation' {..} =
+    _salt `Prelude.hashWithSalt` sourceLocationName
+
+instance Prelude.NFData DeleteSourceLocation where
+  rnf DeleteSourceLocation' {..} =
+    Prelude.rnf sourceLocationName
+
+instance Data.ToHeaders DeleteSourceLocation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteSourceLocation where
+  toPath DeleteSourceLocation' {..} =
+    Prelude.mconcat
+      ["/sourceLocation/", Data.toBS sourceLocationName]
+
+instance Data.ToQuery DeleteSourceLocation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteSourceLocationResponse' smart constructor.
+data DeleteSourceLocationResponse = DeleteSourceLocationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSourceLocationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteSourceLocationResponse_httpStatus' - The response's http status code.
+newDeleteSourceLocationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteSourceLocationResponse
+newDeleteSourceLocationResponse pHttpStatus_ =
+  DeleteSourceLocationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteSourceLocationResponse_httpStatus :: Lens.Lens' DeleteSourceLocationResponse Prelude.Int
+deleteSourceLocationResponse_httpStatus = Lens.lens (\DeleteSourceLocationResponse' {httpStatus} -> httpStatus) (\s@DeleteSourceLocationResponse' {} a -> s {httpStatus = a} :: DeleteSourceLocationResponse)
+
+instance Prelude.NFData DeleteSourceLocationResponse where
+  rnf DeleteSourceLocationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/DeleteVodSource.hs b/gen/Amazonka/MediaTailor/DeleteVodSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/DeleteVodSource.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaTailor.DeleteVodSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The video on demand (VOD) source to delete.
+module Amazonka.MediaTailor.DeleteVodSource
+  ( -- * Creating a Request
+    DeleteVodSource (..),
+    newDeleteVodSource,
+
+    -- * Request Lenses
+    deleteVodSource_sourceLocationName,
+    deleteVodSource_vodSourceName,
+
+    -- * Destructuring the Response
+    DeleteVodSourceResponse (..),
+    newDeleteVodSourceResponse,
+
+    -- * Response Lenses
+    deleteVodSourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteVodSource' smart constructor.
+data DeleteVodSource = DeleteVodSource'
+  { -- | The name of the source location associated with this VOD Source.
+    sourceLocationName :: Prelude.Text,
+    -- | The name of the VOD source.
+    vodSourceName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVodSource' 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:
+--
+-- 'sourceLocationName', 'deleteVodSource_sourceLocationName' - The name of the source location associated with this VOD Source.
+--
+-- 'vodSourceName', 'deleteVodSource_vodSourceName' - The name of the VOD source.
+newDeleteVodSource ::
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  -- | 'vodSourceName'
+  Prelude.Text ->
+  DeleteVodSource
+newDeleteVodSource
+  pSourceLocationName_
+  pVodSourceName_ =
+    DeleteVodSource'
+      { sourceLocationName =
+          pSourceLocationName_,
+        vodSourceName = pVodSourceName_
+      }
+
+-- | The name of the source location associated with this VOD Source.
+deleteVodSource_sourceLocationName :: Lens.Lens' DeleteVodSource Prelude.Text
+deleteVodSource_sourceLocationName = Lens.lens (\DeleteVodSource' {sourceLocationName} -> sourceLocationName) (\s@DeleteVodSource' {} a -> s {sourceLocationName = a} :: DeleteVodSource)
+
+-- | The name of the VOD source.
+deleteVodSource_vodSourceName :: Lens.Lens' DeleteVodSource Prelude.Text
+deleteVodSource_vodSourceName = Lens.lens (\DeleteVodSource' {vodSourceName} -> vodSourceName) (\s@DeleteVodSource' {} a -> s {vodSourceName = a} :: DeleteVodSource)
+
+instance Core.AWSRequest DeleteVodSource where
+  type
+    AWSResponse DeleteVodSource =
+      DeleteVodSourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteVodSourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteVodSource where
+  hashWithSalt _salt DeleteVodSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` sourceLocationName
+      `Prelude.hashWithSalt` vodSourceName
+
+instance Prelude.NFData DeleteVodSource where
+  rnf DeleteVodSource' {..} =
+    Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf vodSourceName
+
+instance Data.ToHeaders DeleteVodSource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteVodSource where
+  toPath DeleteVodSource' {..} =
+    Prelude.mconcat
+      [ "/sourceLocation/",
+        Data.toBS sourceLocationName,
+        "/vodSource/",
+        Data.toBS vodSourceName
+      ]
+
+instance Data.ToQuery DeleteVodSource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteVodSourceResponse' smart constructor.
+data DeleteVodSourceResponse = DeleteVodSourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVodSourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteVodSourceResponse_httpStatus' - The response's http status code.
+newDeleteVodSourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteVodSourceResponse
+newDeleteVodSourceResponse pHttpStatus_ =
+  DeleteVodSourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteVodSourceResponse_httpStatus :: Lens.Lens' DeleteVodSourceResponse Prelude.Int
+deleteVodSourceResponse_httpStatus = Lens.lens (\DeleteVodSourceResponse' {httpStatus} -> httpStatus) (\s@DeleteVodSourceResponse' {} a -> s {httpStatus = a} :: DeleteVodSourceResponse)
+
+instance Prelude.NFData DeleteVodSourceResponse where
+  rnf DeleteVodSourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/DescribeChannel.hs b/gen/Amazonka/MediaTailor/DescribeChannel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/DescribeChannel.hs
@@ -0,0 +1,280 @@
+{-# 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.MediaTailor.DescribeChannel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a channel. For information about MediaTailor channels, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-channels.html Working with channels>
+-- in the /MediaTailor User Guide/.
+module Amazonka.MediaTailor.DescribeChannel
+  ( -- * Creating a Request
+    DescribeChannel (..),
+    newDescribeChannel,
+
+    -- * Request Lenses
+    describeChannel_channelName,
+
+    -- * Destructuring the Response
+    DescribeChannelResponse (..),
+    newDescribeChannelResponse,
+
+    -- * Response Lenses
+    describeChannelResponse_arn,
+    describeChannelResponse_channelName,
+    describeChannelResponse_channelState,
+    describeChannelResponse_creationTime,
+    describeChannelResponse_fillerSlate,
+    describeChannelResponse_lastModifiedTime,
+    describeChannelResponse_outputs,
+    describeChannelResponse_playbackMode,
+    describeChannelResponse_tags,
+    describeChannelResponse_tier,
+    describeChannelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeChannel' smart constructor.
+data DescribeChannel = DescribeChannel'
+  { -- | The name of the channel.
+    channelName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeChannel' 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:
+--
+-- 'channelName', 'describeChannel_channelName' - The name of the channel.
+newDescribeChannel ::
+  -- | 'channelName'
+  Prelude.Text ->
+  DescribeChannel
+newDescribeChannel pChannelName_ =
+  DescribeChannel' {channelName = pChannelName_}
+
+-- | The name of the channel.
+describeChannel_channelName :: Lens.Lens' DescribeChannel Prelude.Text
+describeChannel_channelName = Lens.lens (\DescribeChannel' {channelName} -> channelName) (\s@DescribeChannel' {} a -> s {channelName = a} :: DescribeChannel)
+
+instance Core.AWSRequest DescribeChannel where
+  type
+    AWSResponse DescribeChannel =
+      DescribeChannelResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeChannelResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "ChannelName")
+            Prelude.<*> (x Data..?> "ChannelState")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "FillerSlate")
+            Prelude.<*> (x Data..?> "LastModifiedTime")
+            Prelude.<*> (x Data..?> "Outputs" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "PlaybackMode")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Tier")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeChannel where
+  hashWithSalt _salt DescribeChannel' {..} =
+    _salt `Prelude.hashWithSalt` channelName
+
+instance Prelude.NFData DescribeChannel where
+  rnf DescribeChannel' {..} = Prelude.rnf channelName
+
+instance Data.ToHeaders DescribeChannel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeChannel where
+  toPath DescribeChannel' {..} =
+    Prelude.mconcat
+      ["/channel/", Data.toBS channelName]
+
+instance Data.ToQuery DescribeChannel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeChannelResponse' smart constructor.
+data DescribeChannelResponse = DescribeChannelResponse'
+  { -- | The ARN of the channel.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the channel.
+    channelName :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the channel is in a running state or not.
+    channelState :: Prelude.Maybe ChannelState,
+    -- | The timestamp of when the channel was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | Contains information about the slate used to fill gaps between programs
+    -- in the schedule.
+    fillerSlate :: Prelude.Maybe SlateSource,
+    -- | The timestamp of when the channel was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The channel\'s output properties.
+    outputs :: Prelude.Maybe [ResponseOutputItem],
+    -- | The channel\'s playback mode.
+    playbackMode :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the channel. Tags are key-value pairs that you can
+    -- associate with Amazon resources to help with organization, access
+    -- control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The channel\'s tier.
+    tier :: 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 'DescribeChannelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'describeChannelResponse_arn' - The ARN of the channel.
+--
+-- 'channelName', 'describeChannelResponse_channelName' - The name of the channel.
+--
+-- 'channelState', 'describeChannelResponse_channelState' - Indicates whether the channel is in a running state or not.
+--
+-- 'creationTime', 'describeChannelResponse_creationTime' - The timestamp of when the channel was created.
+--
+-- 'fillerSlate', 'describeChannelResponse_fillerSlate' - Contains information about the slate used to fill gaps between programs
+-- in the schedule.
+--
+-- 'lastModifiedTime', 'describeChannelResponse_lastModifiedTime' - The timestamp of when the channel was last modified.
+--
+-- 'outputs', 'describeChannelResponse_outputs' - The channel\'s output properties.
+--
+-- 'playbackMode', 'describeChannelResponse_playbackMode' - The channel\'s playback mode.
+--
+-- 'tags', 'describeChannelResponse_tags' - The tags assigned to the channel. Tags are key-value pairs that you can
+-- associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'tier', 'describeChannelResponse_tier' - The channel\'s tier.
+--
+-- 'httpStatus', 'describeChannelResponse_httpStatus' - The response's http status code.
+newDescribeChannelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeChannelResponse
+newDescribeChannelResponse pHttpStatus_ =
+  DescribeChannelResponse'
+    { arn = Prelude.Nothing,
+      channelName = Prelude.Nothing,
+      channelState = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      fillerSlate = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      outputs = Prelude.Nothing,
+      playbackMode = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      tier = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the channel.
+describeChannelResponse_arn :: Lens.Lens' DescribeChannelResponse (Prelude.Maybe Prelude.Text)
+describeChannelResponse_arn = Lens.lens (\DescribeChannelResponse' {arn} -> arn) (\s@DescribeChannelResponse' {} a -> s {arn = a} :: DescribeChannelResponse)
+
+-- | The name of the channel.
+describeChannelResponse_channelName :: Lens.Lens' DescribeChannelResponse (Prelude.Maybe Prelude.Text)
+describeChannelResponse_channelName = Lens.lens (\DescribeChannelResponse' {channelName} -> channelName) (\s@DescribeChannelResponse' {} a -> s {channelName = a} :: DescribeChannelResponse)
+
+-- | Indicates whether the channel is in a running state or not.
+describeChannelResponse_channelState :: Lens.Lens' DescribeChannelResponse (Prelude.Maybe ChannelState)
+describeChannelResponse_channelState = Lens.lens (\DescribeChannelResponse' {channelState} -> channelState) (\s@DescribeChannelResponse' {} a -> s {channelState = a} :: DescribeChannelResponse)
+
+-- | The timestamp of when the channel was created.
+describeChannelResponse_creationTime :: Lens.Lens' DescribeChannelResponse (Prelude.Maybe Prelude.UTCTime)
+describeChannelResponse_creationTime = Lens.lens (\DescribeChannelResponse' {creationTime} -> creationTime) (\s@DescribeChannelResponse' {} a -> s {creationTime = a} :: DescribeChannelResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Contains information about the slate used to fill gaps between programs
+-- in the schedule.
+describeChannelResponse_fillerSlate :: Lens.Lens' DescribeChannelResponse (Prelude.Maybe SlateSource)
+describeChannelResponse_fillerSlate = Lens.lens (\DescribeChannelResponse' {fillerSlate} -> fillerSlate) (\s@DescribeChannelResponse' {} a -> s {fillerSlate = a} :: DescribeChannelResponse)
+
+-- | The timestamp of when the channel was last modified.
+describeChannelResponse_lastModifiedTime :: Lens.Lens' DescribeChannelResponse (Prelude.Maybe Prelude.UTCTime)
+describeChannelResponse_lastModifiedTime = Lens.lens (\DescribeChannelResponse' {lastModifiedTime} -> lastModifiedTime) (\s@DescribeChannelResponse' {} a -> s {lastModifiedTime = a} :: DescribeChannelResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The channel\'s output properties.
+describeChannelResponse_outputs :: Lens.Lens' DescribeChannelResponse (Prelude.Maybe [ResponseOutputItem])
+describeChannelResponse_outputs = Lens.lens (\DescribeChannelResponse' {outputs} -> outputs) (\s@DescribeChannelResponse' {} a -> s {outputs = a} :: DescribeChannelResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The channel\'s playback mode.
+describeChannelResponse_playbackMode :: Lens.Lens' DescribeChannelResponse (Prelude.Maybe Prelude.Text)
+describeChannelResponse_playbackMode = Lens.lens (\DescribeChannelResponse' {playbackMode} -> playbackMode) (\s@DescribeChannelResponse' {} a -> s {playbackMode = a} :: DescribeChannelResponse)
+
+-- | The tags assigned to the channel. Tags are key-value pairs that you can
+-- associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+describeChannelResponse_tags :: Lens.Lens' DescribeChannelResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeChannelResponse_tags = Lens.lens (\DescribeChannelResponse' {tags} -> tags) (\s@DescribeChannelResponse' {} a -> s {tags = a} :: DescribeChannelResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The channel\'s tier.
+describeChannelResponse_tier :: Lens.Lens' DescribeChannelResponse (Prelude.Maybe Prelude.Text)
+describeChannelResponse_tier = Lens.lens (\DescribeChannelResponse' {tier} -> tier) (\s@DescribeChannelResponse' {} a -> s {tier = a} :: DescribeChannelResponse)
+
+-- | The response's http status code.
+describeChannelResponse_httpStatus :: Lens.Lens' DescribeChannelResponse Prelude.Int
+describeChannelResponse_httpStatus = Lens.lens (\DescribeChannelResponse' {httpStatus} -> httpStatus) (\s@DescribeChannelResponse' {} a -> s {httpStatus = a} :: DescribeChannelResponse)
+
+instance Prelude.NFData DescribeChannelResponse where
+  rnf DescribeChannelResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf channelName
+      `Prelude.seq` Prelude.rnf channelState
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf fillerSlate
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf playbackMode
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf tier
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/DescribeLiveSource.hs b/gen/Amazonka/MediaTailor/DescribeLiveSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/DescribeLiveSource.hs
@@ -0,0 +1,267 @@
+{-# 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.MediaTailor.DescribeLiveSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The live source to describe.
+module Amazonka.MediaTailor.DescribeLiveSource
+  ( -- * Creating a Request
+    DescribeLiveSource (..),
+    newDescribeLiveSource,
+
+    -- * Request Lenses
+    describeLiveSource_liveSourceName,
+    describeLiveSource_sourceLocationName,
+
+    -- * Destructuring the Response
+    DescribeLiveSourceResponse (..),
+    newDescribeLiveSourceResponse,
+
+    -- * Response Lenses
+    describeLiveSourceResponse_arn,
+    describeLiveSourceResponse_creationTime,
+    describeLiveSourceResponse_httpPackageConfigurations,
+    describeLiveSourceResponse_lastModifiedTime,
+    describeLiveSourceResponse_liveSourceName,
+    describeLiveSourceResponse_sourceLocationName,
+    describeLiveSourceResponse_tags,
+    describeLiveSourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLiveSource' smart constructor.
+data DescribeLiveSource = DescribeLiveSource'
+  { -- | The name of the live source.
+    liveSourceName :: Prelude.Text,
+    -- | The name of the source location associated with this Live Source.
+    sourceLocationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLiveSource' 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:
+--
+-- 'liveSourceName', 'describeLiveSource_liveSourceName' - The name of the live source.
+--
+-- 'sourceLocationName', 'describeLiveSource_sourceLocationName' - The name of the source location associated with this Live Source.
+newDescribeLiveSource ::
+  -- | 'liveSourceName'
+  Prelude.Text ->
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  DescribeLiveSource
+newDescribeLiveSource
+  pLiveSourceName_
+  pSourceLocationName_ =
+    DescribeLiveSource'
+      { liveSourceName =
+          pLiveSourceName_,
+        sourceLocationName = pSourceLocationName_
+      }
+
+-- | The name of the live source.
+describeLiveSource_liveSourceName :: Lens.Lens' DescribeLiveSource Prelude.Text
+describeLiveSource_liveSourceName = Lens.lens (\DescribeLiveSource' {liveSourceName} -> liveSourceName) (\s@DescribeLiveSource' {} a -> s {liveSourceName = a} :: DescribeLiveSource)
+
+-- | The name of the source location associated with this Live Source.
+describeLiveSource_sourceLocationName :: Lens.Lens' DescribeLiveSource Prelude.Text
+describeLiveSource_sourceLocationName = Lens.lens (\DescribeLiveSource' {sourceLocationName} -> sourceLocationName) (\s@DescribeLiveSource' {} a -> s {sourceLocationName = a} :: DescribeLiveSource)
+
+instance Core.AWSRequest DescribeLiveSource where
+  type
+    AWSResponse DescribeLiveSource =
+      DescribeLiveSourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeLiveSourceResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> ( x
+                            Data..?> "HttpPackageConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "LastModifiedTime")
+            Prelude.<*> (x Data..?> "LiveSourceName")
+            Prelude.<*> (x Data..?> "SourceLocationName")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeLiveSource where
+  hashWithSalt _salt DescribeLiveSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` liveSourceName
+      `Prelude.hashWithSalt` sourceLocationName
+
+instance Prelude.NFData DescribeLiveSource where
+  rnf DescribeLiveSource' {..} =
+    Prelude.rnf liveSourceName
+      `Prelude.seq` Prelude.rnf sourceLocationName
+
+instance Data.ToHeaders DescribeLiveSource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeLiveSource where
+  toPath DescribeLiveSource' {..} =
+    Prelude.mconcat
+      [ "/sourceLocation/",
+        Data.toBS sourceLocationName,
+        "/liveSource/",
+        Data.toBS liveSourceName
+      ]
+
+instance Data.ToQuery DescribeLiveSource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeLiveSourceResponse' smart constructor.
+data DescribeLiveSourceResponse = DescribeLiveSourceResponse'
+  { -- | The ARN of the live source.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp that indicates when the live source was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The HTTP package configurations.
+    httpPackageConfigurations :: Prelude.Maybe [HttpPackageConfiguration],
+    -- | The timestamp that indicates when the live source was modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the live source.
+    liveSourceName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the source location associated with the live source.
+    sourceLocationName :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the live source. Tags are key-value pairs that you
+    -- can associate with Amazon resources to help with organization, access
+    -- control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLiveSourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'describeLiveSourceResponse_arn' - The ARN of the live source.
+--
+-- 'creationTime', 'describeLiveSourceResponse_creationTime' - The timestamp that indicates when the live source was created.
+--
+-- 'httpPackageConfigurations', 'describeLiveSourceResponse_httpPackageConfigurations' - The HTTP package configurations.
+--
+-- 'lastModifiedTime', 'describeLiveSourceResponse_lastModifiedTime' - The timestamp that indicates when the live source was modified.
+--
+-- 'liveSourceName', 'describeLiveSourceResponse_liveSourceName' - The name of the live source.
+--
+-- 'sourceLocationName', 'describeLiveSourceResponse_sourceLocationName' - The name of the source location associated with the live source.
+--
+-- 'tags', 'describeLiveSourceResponse_tags' - The tags assigned to the live source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'httpStatus', 'describeLiveSourceResponse_httpStatus' - The response's http status code.
+newDescribeLiveSourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLiveSourceResponse
+newDescribeLiveSourceResponse pHttpStatus_ =
+  DescribeLiveSourceResponse'
+    { arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      httpPackageConfigurations = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      liveSourceName = Prelude.Nothing,
+      sourceLocationName = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the live source.
+describeLiveSourceResponse_arn :: Lens.Lens' DescribeLiveSourceResponse (Prelude.Maybe Prelude.Text)
+describeLiveSourceResponse_arn = Lens.lens (\DescribeLiveSourceResponse' {arn} -> arn) (\s@DescribeLiveSourceResponse' {} a -> s {arn = a} :: DescribeLiveSourceResponse)
+
+-- | The timestamp that indicates when the live source was created.
+describeLiveSourceResponse_creationTime :: Lens.Lens' DescribeLiveSourceResponse (Prelude.Maybe Prelude.UTCTime)
+describeLiveSourceResponse_creationTime = Lens.lens (\DescribeLiveSourceResponse' {creationTime} -> creationTime) (\s@DescribeLiveSourceResponse' {} a -> s {creationTime = a} :: DescribeLiveSourceResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The HTTP package configurations.
+describeLiveSourceResponse_httpPackageConfigurations :: Lens.Lens' DescribeLiveSourceResponse (Prelude.Maybe [HttpPackageConfiguration])
+describeLiveSourceResponse_httpPackageConfigurations = Lens.lens (\DescribeLiveSourceResponse' {httpPackageConfigurations} -> httpPackageConfigurations) (\s@DescribeLiveSourceResponse' {} a -> s {httpPackageConfigurations = a} :: DescribeLiveSourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The timestamp that indicates when the live source was modified.
+describeLiveSourceResponse_lastModifiedTime :: Lens.Lens' DescribeLiveSourceResponse (Prelude.Maybe Prelude.UTCTime)
+describeLiveSourceResponse_lastModifiedTime = Lens.lens (\DescribeLiveSourceResponse' {lastModifiedTime} -> lastModifiedTime) (\s@DescribeLiveSourceResponse' {} a -> s {lastModifiedTime = a} :: DescribeLiveSourceResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the live source.
+describeLiveSourceResponse_liveSourceName :: Lens.Lens' DescribeLiveSourceResponse (Prelude.Maybe Prelude.Text)
+describeLiveSourceResponse_liveSourceName = Lens.lens (\DescribeLiveSourceResponse' {liveSourceName} -> liveSourceName) (\s@DescribeLiveSourceResponse' {} a -> s {liveSourceName = a} :: DescribeLiveSourceResponse)
+
+-- | The name of the source location associated with the live source.
+describeLiveSourceResponse_sourceLocationName :: Lens.Lens' DescribeLiveSourceResponse (Prelude.Maybe Prelude.Text)
+describeLiveSourceResponse_sourceLocationName = Lens.lens (\DescribeLiveSourceResponse' {sourceLocationName} -> sourceLocationName) (\s@DescribeLiveSourceResponse' {} a -> s {sourceLocationName = a} :: DescribeLiveSourceResponse)
+
+-- | The tags assigned to the live source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+describeLiveSourceResponse_tags :: Lens.Lens' DescribeLiveSourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeLiveSourceResponse_tags = Lens.lens (\DescribeLiveSourceResponse' {tags} -> tags) (\s@DescribeLiveSourceResponse' {} a -> s {tags = a} :: DescribeLiveSourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeLiveSourceResponse_httpStatus :: Lens.Lens' DescribeLiveSourceResponse Prelude.Int
+describeLiveSourceResponse_httpStatus = Lens.lens (\DescribeLiveSourceResponse' {httpStatus} -> httpStatus) (\s@DescribeLiveSourceResponse' {} a -> s {httpStatus = a} :: DescribeLiveSourceResponse)
+
+instance Prelude.NFData DescribeLiveSourceResponse where
+  rnf DescribeLiveSourceResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf httpPackageConfigurations
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf liveSourceName
+      `Prelude.seq` Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/DescribeProgram.hs b/gen/Amazonka/MediaTailor/DescribeProgram.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/DescribeProgram.hs
@@ -0,0 +1,286 @@
+{-# 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.MediaTailor.DescribeProgram
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a program within a channel. For information about programs,
+-- see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-programs.html Working with programs>
+-- in the /MediaTailor User Guide/.
+module Amazonka.MediaTailor.DescribeProgram
+  ( -- * Creating a Request
+    DescribeProgram (..),
+    newDescribeProgram,
+
+    -- * Request Lenses
+    describeProgram_channelName,
+    describeProgram_programName,
+
+    -- * Destructuring the Response
+    DescribeProgramResponse (..),
+    newDescribeProgramResponse,
+
+    -- * Response Lenses
+    describeProgramResponse_adBreaks,
+    describeProgramResponse_arn,
+    describeProgramResponse_channelName,
+    describeProgramResponse_creationTime,
+    describeProgramResponse_liveSourceName,
+    describeProgramResponse_programName,
+    describeProgramResponse_scheduledStartTime,
+    describeProgramResponse_sourceLocationName,
+    describeProgramResponse_vodSourceName,
+    describeProgramResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeProgram' smart constructor.
+data DescribeProgram = DescribeProgram'
+  { -- | The name of the channel associated with this Program.
+    channelName :: Prelude.Text,
+    -- | The name of the program.
+    programName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeProgram' 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:
+--
+-- 'channelName', 'describeProgram_channelName' - The name of the channel associated with this Program.
+--
+-- 'programName', 'describeProgram_programName' - The name of the program.
+newDescribeProgram ::
+  -- | 'channelName'
+  Prelude.Text ->
+  -- | 'programName'
+  Prelude.Text ->
+  DescribeProgram
+newDescribeProgram pChannelName_ pProgramName_ =
+  DescribeProgram'
+    { channelName = pChannelName_,
+      programName = pProgramName_
+    }
+
+-- | The name of the channel associated with this Program.
+describeProgram_channelName :: Lens.Lens' DescribeProgram Prelude.Text
+describeProgram_channelName = Lens.lens (\DescribeProgram' {channelName} -> channelName) (\s@DescribeProgram' {} a -> s {channelName = a} :: DescribeProgram)
+
+-- | The name of the program.
+describeProgram_programName :: Lens.Lens' DescribeProgram Prelude.Text
+describeProgram_programName = Lens.lens (\DescribeProgram' {programName} -> programName) (\s@DescribeProgram' {} a -> s {programName = a} :: DescribeProgram)
+
+instance Core.AWSRequest DescribeProgram where
+  type
+    AWSResponse DescribeProgram =
+      DescribeProgramResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeProgramResponse'
+            Prelude.<$> (x Data..?> "AdBreaks" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "ChannelName")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "LiveSourceName")
+            Prelude.<*> (x Data..?> "ProgramName")
+            Prelude.<*> (x Data..?> "ScheduledStartTime")
+            Prelude.<*> (x Data..?> "SourceLocationName")
+            Prelude.<*> (x Data..?> "VodSourceName")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeProgram where
+  hashWithSalt _salt DescribeProgram' {..} =
+    _salt
+      `Prelude.hashWithSalt` channelName
+      `Prelude.hashWithSalt` programName
+
+instance Prelude.NFData DescribeProgram where
+  rnf DescribeProgram' {..} =
+    Prelude.rnf channelName
+      `Prelude.seq` Prelude.rnf programName
+
+instance Data.ToHeaders DescribeProgram where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeProgram where
+  toPath DescribeProgram' {..} =
+    Prelude.mconcat
+      [ "/channel/",
+        Data.toBS channelName,
+        "/program/",
+        Data.toBS programName
+      ]
+
+instance Data.ToQuery DescribeProgram where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeProgramResponse' smart constructor.
+data DescribeProgramResponse = DescribeProgramResponse'
+  { -- | The ad break configuration settings.
+    adBreaks :: Prelude.Maybe [AdBreak],
+    -- | The ARN of the program.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the channel that the program belongs to.
+    channelName :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of when the program was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the LiveSource for this Program.
+    liveSourceName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the program.
+    programName :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the program is scheduled to start in ISO 8601
+    -- format and Coordinated Universal Time (UTC). For example, the value
+    -- 2021-03-27T17:48:16.751Z represents March 27, 2021 at 17:48:16.751 UTC.
+    scheduledStartTime :: Prelude.Maybe Data.POSIX,
+    -- | The source location name.
+    sourceLocationName :: Prelude.Maybe Prelude.Text,
+    -- | The name that\'s used to refer to a VOD source.
+    vodSourceName :: 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 'DescribeProgramResponse' 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:
+--
+-- 'adBreaks', 'describeProgramResponse_adBreaks' - The ad break configuration settings.
+--
+-- 'arn', 'describeProgramResponse_arn' - The ARN of the program.
+--
+-- 'channelName', 'describeProgramResponse_channelName' - The name of the channel that the program belongs to.
+--
+-- 'creationTime', 'describeProgramResponse_creationTime' - The timestamp of when the program was created.
+--
+-- 'liveSourceName', 'describeProgramResponse_liveSourceName' - The name of the LiveSource for this Program.
+--
+-- 'programName', 'describeProgramResponse_programName' - The name of the program.
+--
+-- 'scheduledStartTime', 'describeProgramResponse_scheduledStartTime' - The date and time that the program is scheduled to start in ISO 8601
+-- format and Coordinated Universal Time (UTC). For example, the value
+-- 2021-03-27T17:48:16.751Z represents March 27, 2021 at 17:48:16.751 UTC.
+--
+-- 'sourceLocationName', 'describeProgramResponse_sourceLocationName' - The source location name.
+--
+-- 'vodSourceName', 'describeProgramResponse_vodSourceName' - The name that\'s used to refer to a VOD source.
+--
+-- 'httpStatus', 'describeProgramResponse_httpStatus' - The response's http status code.
+newDescribeProgramResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeProgramResponse
+newDescribeProgramResponse pHttpStatus_ =
+  DescribeProgramResponse'
+    { adBreaks =
+        Prelude.Nothing,
+      arn = Prelude.Nothing,
+      channelName = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      liveSourceName = Prelude.Nothing,
+      programName = Prelude.Nothing,
+      scheduledStartTime = Prelude.Nothing,
+      sourceLocationName = Prelude.Nothing,
+      vodSourceName = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ad break configuration settings.
+describeProgramResponse_adBreaks :: Lens.Lens' DescribeProgramResponse (Prelude.Maybe [AdBreak])
+describeProgramResponse_adBreaks = Lens.lens (\DescribeProgramResponse' {adBreaks} -> adBreaks) (\s@DescribeProgramResponse' {} a -> s {adBreaks = a} :: DescribeProgramResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the program.
+describeProgramResponse_arn :: Lens.Lens' DescribeProgramResponse (Prelude.Maybe Prelude.Text)
+describeProgramResponse_arn = Lens.lens (\DescribeProgramResponse' {arn} -> arn) (\s@DescribeProgramResponse' {} a -> s {arn = a} :: DescribeProgramResponse)
+
+-- | The name of the channel that the program belongs to.
+describeProgramResponse_channelName :: Lens.Lens' DescribeProgramResponse (Prelude.Maybe Prelude.Text)
+describeProgramResponse_channelName = Lens.lens (\DescribeProgramResponse' {channelName} -> channelName) (\s@DescribeProgramResponse' {} a -> s {channelName = a} :: DescribeProgramResponse)
+
+-- | The timestamp of when the program was created.
+describeProgramResponse_creationTime :: Lens.Lens' DescribeProgramResponse (Prelude.Maybe Prelude.UTCTime)
+describeProgramResponse_creationTime = Lens.lens (\DescribeProgramResponse' {creationTime} -> creationTime) (\s@DescribeProgramResponse' {} a -> s {creationTime = a} :: DescribeProgramResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the LiveSource for this Program.
+describeProgramResponse_liveSourceName :: Lens.Lens' DescribeProgramResponse (Prelude.Maybe Prelude.Text)
+describeProgramResponse_liveSourceName = Lens.lens (\DescribeProgramResponse' {liveSourceName} -> liveSourceName) (\s@DescribeProgramResponse' {} a -> s {liveSourceName = a} :: DescribeProgramResponse)
+
+-- | The name of the program.
+describeProgramResponse_programName :: Lens.Lens' DescribeProgramResponse (Prelude.Maybe Prelude.Text)
+describeProgramResponse_programName = Lens.lens (\DescribeProgramResponse' {programName} -> programName) (\s@DescribeProgramResponse' {} a -> s {programName = a} :: DescribeProgramResponse)
+
+-- | The date and time that the program is scheduled to start in ISO 8601
+-- format and Coordinated Universal Time (UTC). For example, the value
+-- 2021-03-27T17:48:16.751Z represents March 27, 2021 at 17:48:16.751 UTC.
+describeProgramResponse_scheduledStartTime :: Lens.Lens' DescribeProgramResponse (Prelude.Maybe Prelude.UTCTime)
+describeProgramResponse_scheduledStartTime = Lens.lens (\DescribeProgramResponse' {scheduledStartTime} -> scheduledStartTime) (\s@DescribeProgramResponse' {} a -> s {scheduledStartTime = a} :: DescribeProgramResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The source location name.
+describeProgramResponse_sourceLocationName :: Lens.Lens' DescribeProgramResponse (Prelude.Maybe Prelude.Text)
+describeProgramResponse_sourceLocationName = Lens.lens (\DescribeProgramResponse' {sourceLocationName} -> sourceLocationName) (\s@DescribeProgramResponse' {} a -> s {sourceLocationName = a} :: DescribeProgramResponse)
+
+-- | The name that\'s used to refer to a VOD source.
+describeProgramResponse_vodSourceName :: Lens.Lens' DescribeProgramResponse (Prelude.Maybe Prelude.Text)
+describeProgramResponse_vodSourceName = Lens.lens (\DescribeProgramResponse' {vodSourceName} -> vodSourceName) (\s@DescribeProgramResponse' {} a -> s {vodSourceName = a} :: DescribeProgramResponse)
+
+-- | The response's http status code.
+describeProgramResponse_httpStatus :: Lens.Lens' DescribeProgramResponse Prelude.Int
+describeProgramResponse_httpStatus = Lens.lens (\DescribeProgramResponse' {httpStatus} -> httpStatus) (\s@DescribeProgramResponse' {} a -> s {httpStatus = a} :: DescribeProgramResponse)
+
+instance Prelude.NFData DescribeProgramResponse where
+  rnf DescribeProgramResponse' {..} =
+    Prelude.rnf adBreaks
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf channelName
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf liveSourceName
+      `Prelude.seq` Prelude.rnf programName
+      `Prelude.seq` Prelude.rnf scheduledStartTime
+      `Prelude.seq` Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf vodSourceName
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/DescribeSourceLocation.hs b/gen/Amazonka/MediaTailor/DescribeSourceLocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/DescribeSourceLocation.hs
@@ -0,0 +1,282 @@
+{-# 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.MediaTailor.DescribeSourceLocation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a source location. A source location is a container for
+-- sources. For more information about source locations, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-source-locations.html Working with source locations>
+-- in the /MediaTailor User Guide/.
+module Amazonka.MediaTailor.DescribeSourceLocation
+  ( -- * Creating a Request
+    DescribeSourceLocation (..),
+    newDescribeSourceLocation,
+
+    -- * Request Lenses
+    describeSourceLocation_sourceLocationName,
+
+    -- * Destructuring the Response
+    DescribeSourceLocationResponse (..),
+    newDescribeSourceLocationResponse,
+
+    -- * Response Lenses
+    describeSourceLocationResponse_accessConfiguration,
+    describeSourceLocationResponse_arn,
+    describeSourceLocationResponse_creationTime,
+    describeSourceLocationResponse_defaultSegmentDeliveryConfiguration,
+    describeSourceLocationResponse_httpConfiguration,
+    describeSourceLocationResponse_lastModifiedTime,
+    describeSourceLocationResponse_segmentDeliveryConfigurations,
+    describeSourceLocationResponse_sourceLocationName,
+    describeSourceLocationResponse_tags,
+    describeSourceLocationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeSourceLocation' smart constructor.
+data DescribeSourceLocation = DescribeSourceLocation'
+  { -- | The name of the source location.
+    sourceLocationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSourceLocation' 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:
+--
+-- 'sourceLocationName', 'describeSourceLocation_sourceLocationName' - The name of the source location.
+newDescribeSourceLocation ::
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  DescribeSourceLocation
+newDescribeSourceLocation pSourceLocationName_ =
+  DescribeSourceLocation'
+    { sourceLocationName =
+        pSourceLocationName_
+    }
+
+-- | The name of the source location.
+describeSourceLocation_sourceLocationName :: Lens.Lens' DescribeSourceLocation Prelude.Text
+describeSourceLocation_sourceLocationName = Lens.lens (\DescribeSourceLocation' {sourceLocationName} -> sourceLocationName) (\s@DescribeSourceLocation' {} a -> s {sourceLocationName = a} :: DescribeSourceLocation)
+
+instance Core.AWSRequest DescribeSourceLocation where
+  type
+    AWSResponse DescribeSourceLocation =
+      DescribeSourceLocationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeSourceLocationResponse'
+            Prelude.<$> (x Data..?> "AccessConfiguration")
+            Prelude.<*> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "DefaultSegmentDeliveryConfiguration")
+            Prelude.<*> (x Data..?> "HttpConfiguration")
+            Prelude.<*> (x Data..?> "LastModifiedTime")
+            Prelude.<*> ( x
+                            Data..?> "SegmentDeliveryConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "SourceLocationName")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSourceLocation where
+  hashWithSalt _salt DescribeSourceLocation' {..} =
+    _salt `Prelude.hashWithSalt` sourceLocationName
+
+instance Prelude.NFData DescribeSourceLocation where
+  rnf DescribeSourceLocation' {..} =
+    Prelude.rnf sourceLocationName
+
+instance Data.ToHeaders DescribeSourceLocation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeSourceLocation where
+  toPath DescribeSourceLocation' {..} =
+    Prelude.mconcat
+      ["/sourceLocation/", Data.toBS sourceLocationName]
+
+instance Data.ToQuery DescribeSourceLocation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeSourceLocationResponse' smart constructor.
+data DescribeSourceLocationResponse = DescribeSourceLocationResponse'
+  { -- | The access configuration for the source location.
+    accessConfiguration :: Prelude.Maybe AccessConfiguration,
+    -- | The ARN of the source location.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp that indicates when the source location was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The default segment delivery configuration settings.
+    defaultSegmentDeliveryConfiguration :: Prelude.Maybe DefaultSegmentDeliveryConfiguration,
+    -- | The HTTP package configuration settings for the source location.
+    httpConfiguration :: Prelude.Maybe HttpConfiguration,
+    -- | The timestamp that indicates when the source location was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | A list of the segment delivery configurations associated with this
+    -- resource.
+    segmentDeliveryConfigurations :: Prelude.Maybe [SegmentDeliveryConfiguration],
+    -- | The name of the source location.
+    sourceLocationName :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the source location. Tags are key-value pairs that
+    -- you can associate with Amazon resources to help with organization,
+    -- access control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSourceLocationResponse' 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:
+--
+-- 'accessConfiguration', 'describeSourceLocationResponse_accessConfiguration' - The access configuration for the source location.
+--
+-- 'arn', 'describeSourceLocationResponse_arn' - The ARN of the source location.
+--
+-- 'creationTime', 'describeSourceLocationResponse_creationTime' - The timestamp that indicates when the source location was created.
+--
+-- 'defaultSegmentDeliveryConfiguration', 'describeSourceLocationResponse_defaultSegmentDeliveryConfiguration' - The default segment delivery configuration settings.
+--
+-- 'httpConfiguration', 'describeSourceLocationResponse_httpConfiguration' - The HTTP package configuration settings for the source location.
+--
+-- 'lastModifiedTime', 'describeSourceLocationResponse_lastModifiedTime' - The timestamp that indicates when the source location was last modified.
+--
+-- 'segmentDeliveryConfigurations', 'describeSourceLocationResponse_segmentDeliveryConfigurations' - A list of the segment delivery configurations associated with this
+-- resource.
+--
+-- 'sourceLocationName', 'describeSourceLocationResponse_sourceLocationName' - The name of the source location.
+--
+-- 'tags', 'describeSourceLocationResponse_tags' - The tags assigned to the source location. Tags are key-value pairs that
+-- you can associate with Amazon resources to help with organization,
+-- access control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'httpStatus', 'describeSourceLocationResponse_httpStatus' - The response's http status code.
+newDescribeSourceLocationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSourceLocationResponse
+newDescribeSourceLocationResponse pHttpStatus_ =
+  DescribeSourceLocationResponse'
+    { accessConfiguration =
+        Prelude.Nothing,
+      arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      defaultSegmentDeliveryConfiguration =
+        Prelude.Nothing,
+      httpConfiguration = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      segmentDeliveryConfigurations =
+        Prelude.Nothing,
+      sourceLocationName = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The access configuration for the source location.
+describeSourceLocationResponse_accessConfiguration :: Lens.Lens' DescribeSourceLocationResponse (Prelude.Maybe AccessConfiguration)
+describeSourceLocationResponse_accessConfiguration = Lens.lens (\DescribeSourceLocationResponse' {accessConfiguration} -> accessConfiguration) (\s@DescribeSourceLocationResponse' {} a -> s {accessConfiguration = a} :: DescribeSourceLocationResponse)
+
+-- | The ARN of the source location.
+describeSourceLocationResponse_arn :: Lens.Lens' DescribeSourceLocationResponse (Prelude.Maybe Prelude.Text)
+describeSourceLocationResponse_arn = Lens.lens (\DescribeSourceLocationResponse' {arn} -> arn) (\s@DescribeSourceLocationResponse' {} a -> s {arn = a} :: DescribeSourceLocationResponse)
+
+-- | The timestamp that indicates when the source location was created.
+describeSourceLocationResponse_creationTime :: Lens.Lens' DescribeSourceLocationResponse (Prelude.Maybe Prelude.UTCTime)
+describeSourceLocationResponse_creationTime = Lens.lens (\DescribeSourceLocationResponse' {creationTime} -> creationTime) (\s@DescribeSourceLocationResponse' {} a -> s {creationTime = a} :: DescribeSourceLocationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The default segment delivery configuration settings.
+describeSourceLocationResponse_defaultSegmentDeliveryConfiguration :: Lens.Lens' DescribeSourceLocationResponse (Prelude.Maybe DefaultSegmentDeliveryConfiguration)
+describeSourceLocationResponse_defaultSegmentDeliveryConfiguration = Lens.lens (\DescribeSourceLocationResponse' {defaultSegmentDeliveryConfiguration} -> defaultSegmentDeliveryConfiguration) (\s@DescribeSourceLocationResponse' {} a -> s {defaultSegmentDeliveryConfiguration = a} :: DescribeSourceLocationResponse)
+
+-- | The HTTP package configuration settings for the source location.
+describeSourceLocationResponse_httpConfiguration :: Lens.Lens' DescribeSourceLocationResponse (Prelude.Maybe HttpConfiguration)
+describeSourceLocationResponse_httpConfiguration = Lens.lens (\DescribeSourceLocationResponse' {httpConfiguration} -> httpConfiguration) (\s@DescribeSourceLocationResponse' {} a -> s {httpConfiguration = a} :: DescribeSourceLocationResponse)
+
+-- | The timestamp that indicates when the source location was last modified.
+describeSourceLocationResponse_lastModifiedTime :: Lens.Lens' DescribeSourceLocationResponse (Prelude.Maybe Prelude.UTCTime)
+describeSourceLocationResponse_lastModifiedTime = Lens.lens (\DescribeSourceLocationResponse' {lastModifiedTime} -> lastModifiedTime) (\s@DescribeSourceLocationResponse' {} a -> s {lastModifiedTime = a} :: DescribeSourceLocationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | A list of the segment delivery configurations associated with this
+-- resource.
+describeSourceLocationResponse_segmentDeliveryConfigurations :: Lens.Lens' DescribeSourceLocationResponse (Prelude.Maybe [SegmentDeliveryConfiguration])
+describeSourceLocationResponse_segmentDeliveryConfigurations = Lens.lens (\DescribeSourceLocationResponse' {segmentDeliveryConfigurations} -> segmentDeliveryConfigurations) (\s@DescribeSourceLocationResponse' {} a -> s {segmentDeliveryConfigurations = a} :: DescribeSourceLocationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the source location.
+describeSourceLocationResponse_sourceLocationName :: Lens.Lens' DescribeSourceLocationResponse (Prelude.Maybe Prelude.Text)
+describeSourceLocationResponse_sourceLocationName = Lens.lens (\DescribeSourceLocationResponse' {sourceLocationName} -> sourceLocationName) (\s@DescribeSourceLocationResponse' {} a -> s {sourceLocationName = a} :: DescribeSourceLocationResponse)
+
+-- | The tags assigned to the source location. Tags are key-value pairs that
+-- you can associate with Amazon resources to help with organization,
+-- access control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+describeSourceLocationResponse_tags :: Lens.Lens' DescribeSourceLocationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeSourceLocationResponse_tags = Lens.lens (\DescribeSourceLocationResponse' {tags} -> tags) (\s@DescribeSourceLocationResponse' {} a -> s {tags = a} :: DescribeSourceLocationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeSourceLocationResponse_httpStatus :: Lens.Lens' DescribeSourceLocationResponse Prelude.Int
+describeSourceLocationResponse_httpStatus = Lens.lens (\DescribeSourceLocationResponse' {httpStatus} -> httpStatus) (\s@DescribeSourceLocationResponse' {} a -> s {httpStatus = a} :: DescribeSourceLocationResponse)
+
+instance
+  Prelude.NFData
+    DescribeSourceLocationResponse
+  where
+  rnf DescribeSourceLocationResponse' {..} =
+    Prelude.rnf accessConfiguration
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf defaultSegmentDeliveryConfiguration
+      `Prelude.seq` Prelude.rnf httpConfiguration
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf segmentDeliveryConfigurations
+      `Prelude.seq` Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/DescribeVodSource.hs b/gen/Amazonka/MediaTailor/DescribeVodSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/DescribeVodSource.hs
@@ -0,0 +1,268 @@
+{-# 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.MediaTailor.DescribeVodSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides details about a specific video on demand (VOD) source in a
+-- specific source location.
+module Amazonka.MediaTailor.DescribeVodSource
+  ( -- * Creating a Request
+    DescribeVodSource (..),
+    newDescribeVodSource,
+
+    -- * Request Lenses
+    describeVodSource_sourceLocationName,
+    describeVodSource_vodSourceName,
+
+    -- * Destructuring the Response
+    DescribeVodSourceResponse (..),
+    newDescribeVodSourceResponse,
+
+    -- * Response Lenses
+    describeVodSourceResponse_arn,
+    describeVodSourceResponse_creationTime,
+    describeVodSourceResponse_httpPackageConfigurations,
+    describeVodSourceResponse_lastModifiedTime,
+    describeVodSourceResponse_sourceLocationName,
+    describeVodSourceResponse_tags,
+    describeVodSourceResponse_vodSourceName,
+    describeVodSourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVodSource' smart constructor.
+data DescribeVodSource = DescribeVodSource'
+  { -- | The name of the source location associated with this VOD Source.
+    sourceLocationName :: Prelude.Text,
+    -- | The name of the VOD Source.
+    vodSourceName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVodSource' 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:
+--
+-- 'sourceLocationName', 'describeVodSource_sourceLocationName' - The name of the source location associated with this VOD Source.
+--
+-- 'vodSourceName', 'describeVodSource_vodSourceName' - The name of the VOD Source.
+newDescribeVodSource ::
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  -- | 'vodSourceName'
+  Prelude.Text ->
+  DescribeVodSource
+newDescribeVodSource
+  pSourceLocationName_
+  pVodSourceName_ =
+    DescribeVodSource'
+      { sourceLocationName =
+          pSourceLocationName_,
+        vodSourceName = pVodSourceName_
+      }
+
+-- | The name of the source location associated with this VOD Source.
+describeVodSource_sourceLocationName :: Lens.Lens' DescribeVodSource Prelude.Text
+describeVodSource_sourceLocationName = Lens.lens (\DescribeVodSource' {sourceLocationName} -> sourceLocationName) (\s@DescribeVodSource' {} a -> s {sourceLocationName = a} :: DescribeVodSource)
+
+-- | The name of the VOD Source.
+describeVodSource_vodSourceName :: Lens.Lens' DescribeVodSource Prelude.Text
+describeVodSource_vodSourceName = Lens.lens (\DescribeVodSource' {vodSourceName} -> vodSourceName) (\s@DescribeVodSource' {} a -> s {vodSourceName = a} :: DescribeVodSource)
+
+instance Core.AWSRequest DescribeVodSource where
+  type
+    AWSResponse DescribeVodSource =
+      DescribeVodSourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeVodSourceResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> ( x
+                            Data..?> "HttpPackageConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "LastModifiedTime")
+            Prelude.<*> (x Data..?> "SourceLocationName")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "VodSourceName")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeVodSource where
+  hashWithSalt _salt DescribeVodSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` sourceLocationName
+      `Prelude.hashWithSalt` vodSourceName
+
+instance Prelude.NFData DescribeVodSource where
+  rnf DescribeVodSource' {..} =
+    Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf vodSourceName
+
+instance Data.ToHeaders DescribeVodSource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeVodSource where
+  toPath DescribeVodSource' {..} =
+    Prelude.mconcat
+      [ "/sourceLocation/",
+        Data.toBS sourceLocationName,
+        "/vodSource/",
+        Data.toBS vodSourceName
+      ]
+
+instance Data.ToQuery DescribeVodSource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeVodSourceResponse' smart constructor.
+data DescribeVodSourceResponse = DescribeVodSourceResponse'
+  { -- | The ARN of the VOD source.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp that indicates when the VOD source was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The HTTP package configurations.
+    httpPackageConfigurations :: Prelude.Maybe [HttpPackageConfiguration],
+    -- | The last modified time of the VOD source.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the source location associated with the VOD source.
+    sourceLocationName :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the VOD source. Tags are key-value pairs that you
+    -- can associate with Amazon resources to help with organization, access
+    -- control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the VOD source.
+    vodSourceName :: 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 'DescribeVodSourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'describeVodSourceResponse_arn' - The ARN of the VOD source.
+--
+-- 'creationTime', 'describeVodSourceResponse_creationTime' - The timestamp that indicates when the VOD source was created.
+--
+-- 'httpPackageConfigurations', 'describeVodSourceResponse_httpPackageConfigurations' - The HTTP package configurations.
+--
+-- 'lastModifiedTime', 'describeVodSourceResponse_lastModifiedTime' - The last modified time of the VOD source.
+--
+-- 'sourceLocationName', 'describeVodSourceResponse_sourceLocationName' - The name of the source location associated with the VOD source.
+--
+-- 'tags', 'describeVodSourceResponse_tags' - The tags assigned to the VOD source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'vodSourceName', 'describeVodSourceResponse_vodSourceName' - The name of the VOD source.
+--
+-- 'httpStatus', 'describeVodSourceResponse_httpStatus' - The response's http status code.
+newDescribeVodSourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVodSourceResponse
+newDescribeVodSourceResponse pHttpStatus_ =
+  DescribeVodSourceResponse'
+    { arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      httpPackageConfigurations = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      sourceLocationName = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vodSourceName = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the VOD source.
+describeVodSourceResponse_arn :: Lens.Lens' DescribeVodSourceResponse (Prelude.Maybe Prelude.Text)
+describeVodSourceResponse_arn = Lens.lens (\DescribeVodSourceResponse' {arn} -> arn) (\s@DescribeVodSourceResponse' {} a -> s {arn = a} :: DescribeVodSourceResponse)
+
+-- | The timestamp that indicates when the VOD source was created.
+describeVodSourceResponse_creationTime :: Lens.Lens' DescribeVodSourceResponse (Prelude.Maybe Prelude.UTCTime)
+describeVodSourceResponse_creationTime = Lens.lens (\DescribeVodSourceResponse' {creationTime} -> creationTime) (\s@DescribeVodSourceResponse' {} a -> s {creationTime = a} :: DescribeVodSourceResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The HTTP package configurations.
+describeVodSourceResponse_httpPackageConfigurations :: Lens.Lens' DescribeVodSourceResponse (Prelude.Maybe [HttpPackageConfiguration])
+describeVodSourceResponse_httpPackageConfigurations = Lens.lens (\DescribeVodSourceResponse' {httpPackageConfigurations} -> httpPackageConfigurations) (\s@DescribeVodSourceResponse' {} a -> s {httpPackageConfigurations = a} :: DescribeVodSourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The last modified time of the VOD source.
+describeVodSourceResponse_lastModifiedTime :: Lens.Lens' DescribeVodSourceResponse (Prelude.Maybe Prelude.UTCTime)
+describeVodSourceResponse_lastModifiedTime = Lens.lens (\DescribeVodSourceResponse' {lastModifiedTime} -> lastModifiedTime) (\s@DescribeVodSourceResponse' {} a -> s {lastModifiedTime = a} :: DescribeVodSourceResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the source location associated with the VOD source.
+describeVodSourceResponse_sourceLocationName :: Lens.Lens' DescribeVodSourceResponse (Prelude.Maybe Prelude.Text)
+describeVodSourceResponse_sourceLocationName = Lens.lens (\DescribeVodSourceResponse' {sourceLocationName} -> sourceLocationName) (\s@DescribeVodSourceResponse' {} a -> s {sourceLocationName = a} :: DescribeVodSourceResponse)
+
+-- | The tags assigned to the VOD source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+describeVodSourceResponse_tags :: Lens.Lens' DescribeVodSourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeVodSourceResponse_tags = Lens.lens (\DescribeVodSourceResponse' {tags} -> tags) (\s@DescribeVodSourceResponse' {} a -> s {tags = a} :: DescribeVodSourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the VOD source.
+describeVodSourceResponse_vodSourceName :: Lens.Lens' DescribeVodSourceResponse (Prelude.Maybe Prelude.Text)
+describeVodSourceResponse_vodSourceName = Lens.lens (\DescribeVodSourceResponse' {vodSourceName} -> vodSourceName) (\s@DescribeVodSourceResponse' {} a -> s {vodSourceName = a} :: DescribeVodSourceResponse)
+
+-- | The response's http status code.
+describeVodSourceResponse_httpStatus :: Lens.Lens' DescribeVodSourceResponse Prelude.Int
+describeVodSourceResponse_httpStatus = Lens.lens (\DescribeVodSourceResponse' {httpStatus} -> httpStatus) (\s@DescribeVodSourceResponse' {} a -> s {httpStatus = a} :: DescribeVodSourceResponse)
+
+instance Prelude.NFData DescribeVodSourceResponse where
+  rnf DescribeVodSourceResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf httpPackageConfigurations
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vodSourceName
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/GetChannelPolicy.hs b/gen/Amazonka/MediaTailor/GetChannelPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/GetChannelPolicy.hs
@@ -0,0 +1,162 @@
+{-# 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.MediaTailor.GetChannelPolicy
+-- 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 the channel\'s IAM policy. IAM policies are used to control
+-- access to your channel.
+module Amazonka.MediaTailor.GetChannelPolicy
+  ( -- * Creating a Request
+    GetChannelPolicy (..),
+    newGetChannelPolicy,
+
+    -- * Request Lenses
+    getChannelPolicy_channelName,
+
+    -- * Destructuring the Response
+    GetChannelPolicyResponse (..),
+    newGetChannelPolicyResponse,
+
+    -- * Response Lenses
+    getChannelPolicyResponse_policy,
+    getChannelPolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetChannelPolicy' smart constructor.
+data GetChannelPolicy = GetChannelPolicy'
+  { -- | The name of the channel associated with this Channel Policy.
+    channelName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetChannelPolicy' 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:
+--
+-- 'channelName', 'getChannelPolicy_channelName' - The name of the channel associated with this Channel Policy.
+newGetChannelPolicy ::
+  -- | 'channelName'
+  Prelude.Text ->
+  GetChannelPolicy
+newGetChannelPolicy pChannelName_ =
+  GetChannelPolicy' {channelName = pChannelName_}
+
+-- | The name of the channel associated with this Channel Policy.
+getChannelPolicy_channelName :: Lens.Lens' GetChannelPolicy Prelude.Text
+getChannelPolicy_channelName = Lens.lens (\GetChannelPolicy' {channelName} -> channelName) (\s@GetChannelPolicy' {} a -> s {channelName = a} :: GetChannelPolicy)
+
+instance Core.AWSRequest GetChannelPolicy where
+  type
+    AWSResponse GetChannelPolicy =
+      GetChannelPolicyResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetChannelPolicyResponse'
+            Prelude.<$> (x Data..?> "Policy")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetChannelPolicy where
+  hashWithSalt _salt GetChannelPolicy' {..} =
+    _salt `Prelude.hashWithSalt` channelName
+
+instance Prelude.NFData GetChannelPolicy where
+  rnf GetChannelPolicy' {..} = Prelude.rnf channelName
+
+instance Data.ToHeaders GetChannelPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetChannelPolicy where
+  toPath GetChannelPolicy' {..} =
+    Prelude.mconcat
+      ["/channel/", Data.toBS channelName, "/policy"]
+
+instance Data.ToQuery GetChannelPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetChannelPolicyResponse' smart constructor.
+data GetChannelPolicyResponse = GetChannelPolicyResponse'
+  { -- | The IAM policy for the channel. IAM policies are used to control access
+    -- to your channel.
+    policy :: 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 'GetChannelPolicyResponse' 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:
+--
+-- 'policy', 'getChannelPolicyResponse_policy' - The IAM policy for the channel. IAM policies are used to control access
+-- to your channel.
+--
+-- 'httpStatus', 'getChannelPolicyResponse_httpStatus' - The response's http status code.
+newGetChannelPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetChannelPolicyResponse
+newGetChannelPolicyResponse pHttpStatus_ =
+  GetChannelPolicyResponse'
+    { policy = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The IAM policy for the channel. IAM policies are used to control access
+-- to your channel.
+getChannelPolicyResponse_policy :: Lens.Lens' GetChannelPolicyResponse (Prelude.Maybe Prelude.Text)
+getChannelPolicyResponse_policy = Lens.lens (\GetChannelPolicyResponse' {policy} -> policy) (\s@GetChannelPolicyResponse' {} a -> s {policy = a} :: GetChannelPolicyResponse)
+
+-- | The response's http status code.
+getChannelPolicyResponse_httpStatus :: Lens.Lens' GetChannelPolicyResponse Prelude.Int
+getChannelPolicyResponse_httpStatus = Lens.lens (\GetChannelPolicyResponse' {httpStatus} -> httpStatus) (\s@GetChannelPolicyResponse' {} a -> s {httpStatus = a} :: GetChannelPolicyResponse)
+
+instance Prelude.NFData GetChannelPolicyResponse where
+  rnf GetChannelPolicyResponse' {..} =
+    Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/GetChannelSchedule.hs b/gen/Amazonka/MediaTailor/GetChannelSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/GetChannelSchedule.hs
@@ -0,0 +1,286 @@
+{-# 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.MediaTailor.GetChannelSchedule
+-- 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 information about your channel\'s schedule.
+--
+-- This operation returns paginated results.
+module Amazonka.MediaTailor.GetChannelSchedule
+  ( -- * Creating a Request
+    GetChannelSchedule (..),
+    newGetChannelSchedule,
+
+    -- * Request Lenses
+    getChannelSchedule_durationMinutes,
+    getChannelSchedule_maxResults,
+    getChannelSchedule_nextToken,
+    getChannelSchedule_channelName,
+
+    -- * Destructuring the Response
+    GetChannelScheduleResponse (..),
+    newGetChannelScheduleResponse,
+
+    -- * Response Lenses
+    getChannelScheduleResponse_items,
+    getChannelScheduleResponse_nextToken,
+    getChannelScheduleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetChannelSchedule' smart constructor.
+data GetChannelSchedule = GetChannelSchedule'
+  { -- | The duration in minutes of the channel schedule.
+    durationMinutes :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of channel schedules that you want MediaTailor to
+    -- return in response to the current request. If there are more than
+    -- @MaxResults@ channel schedules, use the value of @NextToken@ in the
+    -- response to get the next page of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | (Optional) If the playback configuration has more than @MaxResults@
+    -- channel schedules, use @NextToken@ to get the second and subsequent
+    -- pages of results.
+    --
+    -- For the first @GetChannelScheduleRequest@ request, omit this value.
+    --
+    -- For the second and subsequent requests, get the value of @NextToken@
+    -- from the previous response and specify that value for @NextToken@ in the
+    -- request.
+    --
+    -- If the previous response didn\'t include a @NextToken@ element, there
+    -- are no more channel schedules to get.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the channel associated with this Channel Schedule.
+    channelName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetChannelSchedule' 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:
+--
+-- 'durationMinutes', 'getChannelSchedule_durationMinutes' - The duration in minutes of the channel schedule.
+--
+-- 'maxResults', 'getChannelSchedule_maxResults' - The maximum number of channel schedules that you want MediaTailor to
+-- return in response to the current request. If there are more than
+-- @MaxResults@ channel schedules, use the value of @NextToken@ in the
+-- response to get the next page of results.
+--
+-- 'nextToken', 'getChannelSchedule_nextToken' - (Optional) If the playback configuration has more than @MaxResults@
+-- channel schedules, use @NextToken@ to get the second and subsequent
+-- pages of results.
+--
+-- For the first @GetChannelScheduleRequest@ request, omit this value.
+--
+-- For the second and subsequent requests, get the value of @NextToken@
+-- from the previous response and specify that value for @NextToken@ in the
+-- request.
+--
+-- If the previous response didn\'t include a @NextToken@ element, there
+-- are no more channel schedules to get.
+--
+-- 'channelName', 'getChannelSchedule_channelName' - The name of the channel associated with this Channel Schedule.
+newGetChannelSchedule ::
+  -- | 'channelName'
+  Prelude.Text ->
+  GetChannelSchedule
+newGetChannelSchedule pChannelName_ =
+  GetChannelSchedule'
+    { durationMinutes =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      channelName = pChannelName_
+    }
+
+-- | The duration in minutes of the channel schedule.
+getChannelSchedule_durationMinutes :: Lens.Lens' GetChannelSchedule (Prelude.Maybe Prelude.Text)
+getChannelSchedule_durationMinutes = Lens.lens (\GetChannelSchedule' {durationMinutes} -> durationMinutes) (\s@GetChannelSchedule' {} a -> s {durationMinutes = a} :: GetChannelSchedule)
+
+-- | The maximum number of channel schedules that you want MediaTailor to
+-- return in response to the current request. If there are more than
+-- @MaxResults@ channel schedules, use the value of @NextToken@ in the
+-- response to get the next page of results.
+getChannelSchedule_maxResults :: Lens.Lens' GetChannelSchedule (Prelude.Maybe Prelude.Natural)
+getChannelSchedule_maxResults = Lens.lens (\GetChannelSchedule' {maxResults} -> maxResults) (\s@GetChannelSchedule' {} a -> s {maxResults = a} :: GetChannelSchedule)
+
+-- | (Optional) If the playback configuration has more than @MaxResults@
+-- channel schedules, use @NextToken@ to get the second and subsequent
+-- pages of results.
+--
+-- For the first @GetChannelScheduleRequest@ request, omit this value.
+--
+-- For the second and subsequent requests, get the value of @NextToken@
+-- from the previous response and specify that value for @NextToken@ in the
+-- request.
+--
+-- If the previous response didn\'t include a @NextToken@ element, there
+-- are no more channel schedules to get.
+getChannelSchedule_nextToken :: Lens.Lens' GetChannelSchedule (Prelude.Maybe Prelude.Text)
+getChannelSchedule_nextToken = Lens.lens (\GetChannelSchedule' {nextToken} -> nextToken) (\s@GetChannelSchedule' {} a -> s {nextToken = a} :: GetChannelSchedule)
+
+-- | The name of the channel associated with this Channel Schedule.
+getChannelSchedule_channelName :: Lens.Lens' GetChannelSchedule Prelude.Text
+getChannelSchedule_channelName = Lens.lens (\GetChannelSchedule' {channelName} -> channelName) (\s@GetChannelSchedule' {} a -> s {channelName = a} :: GetChannelSchedule)
+
+instance Core.AWSPager GetChannelSchedule where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getChannelScheduleResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getChannelScheduleResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getChannelSchedule_nextToken
+          Lens..~ rs
+          Lens.^? getChannelScheduleResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetChannelSchedule where
+  type
+    AWSResponse GetChannelSchedule =
+      GetChannelScheduleResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetChannelScheduleResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetChannelSchedule where
+  hashWithSalt _salt GetChannelSchedule' {..} =
+    _salt
+      `Prelude.hashWithSalt` durationMinutes
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` channelName
+
+instance Prelude.NFData GetChannelSchedule where
+  rnf GetChannelSchedule' {..} =
+    Prelude.rnf durationMinutes
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf channelName
+
+instance Data.ToHeaders GetChannelSchedule where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetChannelSchedule where
+  toPath GetChannelSchedule' {..} =
+    Prelude.mconcat
+      ["/channel/", Data.toBS channelName, "/schedule"]
+
+instance Data.ToQuery GetChannelSchedule where
+  toQuery GetChannelSchedule' {..} =
+    Prelude.mconcat
+      [ "durationMinutes" Data.=: durationMinutes,
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetChannelScheduleResponse' smart constructor.
+data GetChannelScheduleResponse = GetChannelScheduleResponse'
+  { -- | A list of schedule entries for the channel.
+    items :: Prelude.Maybe [ScheduleEntry],
+    -- | Pagination token returned by the list request when results exceed the
+    -- maximum allowed. Use the token to fetch the next page of results.
+    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 'GetChannelScheduleResponse' 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:
+--
+-- 'items', 'getChannelScheduleResponse_items' - A list of schedule entries for the channel.
+--
+-- 'nextToken', 'getChannelScheduleResponse_nextToken' - Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+--
+-- 'httpStatus', 'getChannelScheduleResponse_httpStatus' - The response's http status code.
+newGetChannelScheduleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetChannelScheduleResponse
+newGetChannelScheduleResponse pHttpStatus_ =
+  GetChannelScheduleResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of schedule entries for the channel.
+getChannelScheduleResponse_items :: Lens.Lens' GetChannelScheduleResponse (Prelude.Maybe [ScheduleEntry])
+getChannelScheduleResponse_items = Lens.lens (\GetChannelScheduleResponse' {items} -> items) (\s@GetChannelScheduleResponse' {} a -> s {items = a} :: GetChannelScheduleResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+getChannelScheduleResponse_nextToken :: Lens.Lens' GetChannelScheduleResponse (Prelude.Maybe Prelude.Text)
+getChannelScheduleResponse_nextToken = Lens.lens (\GetChannelScheduleResponse' {nextToken} -> nextToken) (\s@GetChannelScheduleResponse' {} a -> s {nextToken = a} :: GetChannelScheduleResponse)
+
+-- | The response's http status code.
+getChannelScheduleResponse_httpStatus :: Lens.Lens' GetChannelScheduleResponse Prelude.Int
+getChannelScheduleResponse_httpStatus = Lens.lens (\GetChannelScheduleResponse' {httpStatus} -> httpStatus) (\s@GetChannelScheduleResponse' {} a -> s {httpStatus = a} :: GetChannelScheduleResponse)
+
+instance Prelude.NFData GetChannelScheduleResponse where
+  rnf GetChannelScheduleResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/GetPlaybackConfiguration.hs b/gen/Amazonka/MediaTailor/GetPlaybackConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/GetPlaybackConfiguration.hs
@@ -0,0 +1,503 @@
+{-# 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.MediaTailor.GetPlaybackConfiguration
+-- 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 playback configuration. For information about MediaTailor
+-- configurations, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/configurations.html Working with configurations in AWS Elemental MediaTailor>.
+module Amazonka.MediaTailor.GetPlaybackConfiguration
+  ( -- * Creating a Request
+    GetPlaybackConfiguration (..),
+    newGetPlaybackConfiguration,
+
+    -- * Request Lenses
+    getPlaybackConfiguration_name,
+
+    -- * Destructuring the Response
+    GetPlaybackConfigurationResponse (..),
+    newGetPlaybackConfigurationResponse,
+
+    -- * Response Lenses
+    getPlaybackConfigurationResponse_adDecisionServerUrl,
+    getPlaybackConfigurationResponse_availSuppression,
+    getPlaybackConfigurationResponse_bumper,
+    getPlaybackConfigurationResponse_cdnConfiguration,
+    getPlaybackConfigurationResponse_configurationAliases,
+    getPlaybackConfigurationResponse_dashConfiguration,
+    getPlaybackConfigurationResponse_hlsConfiguration,
+    getPlaybackConfigurationResponse_livePreRollConfiguration,
+    getPlaybackConfigurationResponse_logConfiguration,
+    getPlaybackConfigurationResponse_manifestProcessingRules,
+    getPlaybackConfigurationResponse_name,
+    getPlaybackConfigurationResponse_personalizationThresholdSeconds,
+    getPlaybackConfigurationResponse_playbackConfigurationArn,
+    getPlaybackConfigurationResponse_playbackEndpointPrefix,
+    getPlaybackConfigurationResponse_sessionInitializationEndpointPrefix,
+    getPlaybackConfigurationResponse_slateAdUrl,
+    getPlaybackConfigurationResponse_tags,
+    getPlaybackConfigurationResponse_transcodeProfileName,
+    getPlaybackConfigurationResponse_videoContentSourceUrl,
+    getPlaybackConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetPlaybackConfiguration' smart constructor.
+data GetPlaybackConfiguration = GetPlaybackConfiguration'
+  { -- | The identifier for the playback configuration.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPlaybackConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'getPlaybackConfiguration_name' - The identifier for the playback configuration.
+newGetPlaybackConfiguration ::
+  -- | 'name'
+  Prelude.Text ->
+  GetPlaybackConfiguration
+newGetPlaybackConfiguration pName_ =
+  GetPlaybackConfiguration' {name = pName_}
+
+-- | The identifier for the playback configuration.
+getPlaybackConfiguration_name :: Lens.Lens' GetPlaybackConfiguration Prelude.Text
+getPlaybackConfiguration_name = Lens.lens (\GetPlaybackConfiguration' {name} -> name) (\s@GetPlaybackConfiguration' {} a -> s {name = a} :: GetPlaybackConfiguration)
+
+instance Core.AWSRequest GetPlaybackConfiguration where
+  type
+    AWSResponse GetPlaybackConfiguration =
+      GetPlaybackConfigurationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetPlaybackConfigurationResponse'
+            Prelude.<$> (x Data..?> "AdDecisionServerUrl")
+            Prelude.<*> (x Data..?> "AvailSuppression")
+            Prelude.<*> (x Data..?> "Bumper")
+            Prelude.<*> (x Data..?> "CdnConfiguration")
+            Prelude.<*> ( x
+                            Data..?> "ConfigurationAliases"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "DashConfiguration")
+            Prelude.<*> (x Data..?> "HlsConfiguration")
+            Prelude.<*> (x Data..?> "LivePreRollConfiguration")
+            Prelude.<*> (x Data..?> "LogConfiguration")
+            Prelude.<*> (x Data..?> "ManifestProcessingRules")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "PersonalizationThresholdSeconds")
+            Prelude.<*> (x Data..?> "PlaybackConfigurationArn")
+            Prelude.<*> (x Data..?> "PlaybackEndpointPrefix")
+            Prelude.<*> (x Data..?> "SessionInitializationEndpointPrefix")
+            Prelude.<*> (x Data..?> "SlateAdUrl")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "TranscodeProfileName")
+            Prelude.<*> (x Data..?> "VideoContentSourceUrl")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetPlaybackConfiguration where
+  hashWithSalt _salt GetPlaybackConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData GetPlaybackConfiguration where
+  rnf GetPlaybackConfiguration' {..} = Prelude.rnf name
+
+instance Data.ToHeaders GetPlaybackConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetPlaybackConfiguration where
+  toPath GetPlaybackConfiguration' {..} =
+    Prelude.mconcat
+      ["/playbackConfiguration/", Data.toBS name]
+
+instance Data.ToQuery GetPlaybackConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetPlaybackConfigurationResponse' smart constructor.
+data GetPlaybackConfigurationResponse = GetPlaybackConfigurationResponse'
+  { -- | The URL for the ad decision server (ADS). This includes the
+    -- specification of static parameters and placeholders for dynamic
+    -- parameters. AWS Elemental MediaTailor substitutes player-specific and
+    -- session-specific parameters as needed when calling the ADS. Alternately,
+    -- for testing, you can provide a static VAST URL. The maximum length is
+    -- 25,000 characters.
+    adDecisionServerUrl :: Prelude.Maybe Prelude.Text,
+    -- | The configuration for avail suppression, also known as ad suppression.
+    -- For more information about ad suppression, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Suppression>.
+    availSuppression :: Prelude.Maybe AvailSuppression,
+    -- | The configuration for bumpers. Bumpers are short audio or video clips
+    -- that play at the start or before the end of an ad break. To learn more
+    -- about bumpers, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/bumpers.html Bumpers>.
+    bumper :: Prelude.Maybe Bumper,
+    -- | The configuration for using a content delivery network (CDN), like
+    -- Amazon CloudFront, for content and ad segment management.
+    cdnConfiguration :: Prelude.Maybe CdnConfiguration,
+    -- | The player parameters and aliases used as dynamic variables during
+    -- session initialization. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domain.html Domain Variables>.
+    configurationAliases :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The configuration for DASH content.
+    dashConfiguration :: Prelude.Maybe DashConfiguration,
+    -- | The configuration for HLS content.
+    hlsConfiguration :: Prelude.Maybe HlsConfiguration,
+    -- | The configuration for pre-roll ad insertion.
+    livePreRollConfiguration :: Prelude.Maybe LivePreRollConfiguration,
+    -- | The Amazon CloudWatch log settings for a playback configuration.
+    logConfiguration :: Prelude.Maybe LogConfiguration,
+    -- | The configuration for manifest processing rules. Manifest processing
+    -- rules enable customization of the personalized manifests created by
+    -- MediaTailor.
+    manifestProcessingRules :: Prelude.Maybe ManifestProcessingRules,
+    -- | The identifier for the playback configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Defines the maximum duration of underfilled ad time (in seconds) allowed
+    -- in an ad break. If the duration of underfilled ad time exceeds the
+    -- personalization threshold, then the personalization of the ad break is
+    -- abandoned and the underlying content is shown. This feature applies to
+    -- /ad replacement/ in live and VOD streams, rather than ad insertion,
+    -- because it relies on an underlying content stream. For more information
+    -- about ad break behavior, including ad replacement and insertion, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Behavior in AWS Elemental MediaTailor>.
+    personalizationThresholdSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | The Amazon Resource Name (ARN) for the playback configuration.
+    playbackConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | The URL that the player accesses to get a manifest from AWS Elemental
+    -- MediaTailor. This session will use server-side reporting.
+    playbackEndpointPrefix :: Prelude.Maybe Prelude.Text,
+    -- | The URL that the player uses to initialize a session that uses
+    -- client-side reporting.
+    sessionInitializationEndpointPrefix :: Prelude.Maybe Prelude.Text,
+    -- | The URL for a high-quality video asset to transcode and use to fill in
+    -- time that\'s not used by ads. AWS Elemental MediaTailor shows the slate
+    -- to fill in gaps in media content. Configuring the slate is optional for
+    -- non-VPAID playback configurations. For VPAID, the slate is required
+    -- because MediaTailor provides it in the slots designated for dynamic ad
+    -- content. The slate must be a high-quality asset that contains both audio
+    -- and video.
+    slateAdUrl :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the playback configuration. Tags are key-value
+    -- pairs that you can associate with Amazon resources to help with
+    -- organization, access control, and cost tracking. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name that is used to associate this playback configuration with a
+    -- custom transcode profile. This overrides the dynamic transcoding
+    -- defaults of MediaTailor. Use this only if you have already set up custom
+    -- profiles with the help of AWS Support.
+    transcodeProfileName :: Prelude.Maybe Prelude.Text,
+    -- | The URL prefix for the parent manifest for the stream, minus the asset
+    -- ID. The maximum length is 512 characters.
+    videoContentSourceUrl :: 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 'GetPlaybackConfigurationResponse' 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:
+--
+-- 'adDecisionServerUrl', 'getPlaybackConfigurationResponse_adDecisionServerUrl' - The URL for the ad decision server (ADS). This includes the
+-- specification of static parameters and placeholders for dynamic
+-- parameters. AWS Elemental MediaTailor substitutes player-specific and
+-- session-specific parameters as needed when calling the ADS. Alternately,
+-- for testing, you can provide a static VAST URL. The maximum length is
+-- 25,000 characters.
+--
+-- 'availSuppression', 'getPlaybackConfigurationResponse_availSuppression' - The configuration for avail suppression, also known as ad suppression.
+-- For more information about ad suppression, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Suppression>.
+--
+-- 'bumper', 'getPlaybackConfigurationResponse_bumper' - The configuration for bumpers. Bumpers are short audio or video clips
+-- that play at the start or before the end of an ad break. To learn more
+-- about bumpers, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/bumpers.html Bumpers>.
+--
+-- 'cdnConfiguration', 'getPlaybackConfigurationResponse_cdnConfiguration' - The configuration for using a content delivery network (CDN), like
+-- Amazon CloudFront, for content and ad segment management.
+--
+-- 'configurationAliases', 'getPlaybackConfigurationResponse_configurationAliases' - The player parameters and aliases used as dynamic variables during
+-- session initialization. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domain.html Domain Variables>.
+--
+-- 'dashConfiguration', 'getPlaybackConfigurationResponse_dashConfiguration' - The configuration for DASH content.
+--
+-- 'hlsConfiguration', 'getPlaybackConfigurationResponse_hlsConfiguration' - The configuration for HLS content.
+--
+-- 'livePreRollConfiguration', 'getPlaybackConfigurationResponse_livePreRollConfiguration' - The configuration for pre-roll ad insertion.
+--
+-- 'logConfiguration', 'getPlaybackConfigurationResponse_logConfiguration' - The Amazon CloudWatch log settings for a playback configuration.
+--
+-- 'manifestProcessingRules', 'getPlaybackConfigurationResponse_manifestProcessingRules' - The configuration for manifest processing rules. Manifest processing
+-- rules enable customization of the personalized manifests created by
+-- MediaTailor.
+--
+-- 'name', 'getPlaybackConfigurationResponse_name' - The identifier for the playback configuration.
+--
+-- 'personalizationThresholdSeconds', 'getPlaybackConfigurationResponse_personalizationThresholdSeconds' - Defines the maximum duration of underfilled ad time (in seconds) allowed
+-- in an ad break. If the duration of underfilled ad time exceeds the
+-- personalization threshold, then the personalization of the ad break is
+-- abandoned and the underlying content is shown. This feature applies to
+-- /ad replacement/ in live and VOD streams, rather than ad insertion,
+-- because it relies on an underlying content stream. For more information
+-- about ad break behavior, including ad replacement and insertion, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Behavior in AWS Elemental MediaTailor>.
+--
+-- 'playbackConfigurationArn', 'getPlaybackConfigurationResponse_playbackConfigurationArn' - The Amazon Resource Name (ARN) for the playback configuration.
+--
+-- 'playbackEndpointPrefix', 'getPlaybackConfigurationResponse_playbackEndpointPrefix' - The URL that the player accesses to get a manifest from AWS Elemental
+-- MediaTailor. This session will use server-side reporting.
+--
+-- 'sessionInitializationEndpointPrefix', 'getPlaybackConfigurationResponse_sessionInitializationEndpointPrefix' - The URL that the player uses to initialize a session that uses
+-- client-side reporting.
+--
+-- 'slateAdUrl', 'getPlaybackConfigurationResponse_slateAdUrl' - The URL for a high-quality video asset to transcode and use to fill in
+-- time that\'s not used by ads. AWS Elemental MediaTailor shows the slate
+-- to fill in gaps in media content. Configuring the slate is optional for
+-- non-VPAID playback configurations. For VPAID, the slate is required
+-- because MediaTailor provides it in the slots designated for dynamic ad
+-- content. The slate must be a high-quality asset that contains both audio
+-- and video.
+--
+-- 'tags', 'getPlaybackConfigurationResponse_tags' - The tags assigned to the playback configuration. Tags are key-value
+-- pairs that you can associate with Amazon resources to help with
+-- organization, access control, and cost tracking. For more information,
+-- see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'transcodeProfileName', 'getPlaybackConfigurationResponse_transcodeProfileName' - The name that is used to associate this playback configuration with a
+-- custom transcode profile. This overrides the dynamic transcoding
+-- defaults of MediaTailor. Use this only if you have already set up custom
+-- profiles with the help of AWS Support.
+--
+-- 'videoContentSourceUrl', 'getPlaybackConfigurationResponse_videoContentSourceUrl' - The URL prefix for the parent manifest for the stream, minus the asset
+-- ID. The maximum length is 512 characters.
+--
+-- 'httpStatus', 'getPlaybackConfigurationResponse_httpStatus' - The response's http status code.
+newGetPlaybackConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetPlaybackConfigurationResponse
+newGetPlaybackConfigurationResponse pHttpStatus_ =
+  GetPlaybackConfigurationResponse'
+    { adDecisionServerUrl =
+        Prelude.Nothing,
+      availSuppression = Prelude.Nothing,
+      bumper = Prelude.Nothing,
+      cdnConfiguration = Prelude.Nothing,
+      configurationAliases = Prelude.Nothing,
+      dashConfiguration = Prelude.Nothing,
+      hlsConfiguration = Prelude.Nothing,
+      livePreRollConfiguration =
+        Prelude.Nothing,
+      logConfiguration = Prelude.Nothing,
+      manifestProcessingRules = Prelude.Nothing,
+      name = Prelude.Nothing,
+      personalizationThresholdSeconds =
+        Prelude.Nothing,
+      playbackConfigurationArn =
+        Prelude.Nothing,
+      playbackEndpointPrefix = Prelude.Nothing,
+      sessionInitializationEndpointPrefix =
+        Prelude.Nothing,
+      slateAdUrl = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      transcodeProfileName = Prelude.Nothing,
+      videoContentSourceUrl = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The URL for the ad decision server (ADS). This includes the
+-- specification of static parameters and placeholders for dynamic
+-- parameters. AWS Elemental MediaTailor substitutes player-specific and
+-- session-specific parameters as needed when calling the ADS. Alternately,
+-- for testing, you can provide a static VAST URL. The maximum length is
+-- 25,000 characters.
+getPlaybackConfigurationResponse_adDecisionServerUrl :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe Prelude.Text)
+getPlaybackConfigurationResponse_adDecisionServerUrl = Lens.lens (\GetPlaybackConfigurationResponse' {adDecisionServerUrl} -> adDecisionServerUrl) (\s@GetPlaybackConfigurationResponse' {} a -> s {adDecisionServerUrl = a} :: GetPlaybackConfigurationResponse)
+
+-- | The configuration for avail suppression, also known as ad suppression.
+-- For more information about ad suppression, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Suppression>.
+getPlaybackConfigurationResponse_availSuppression :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe AvailSuppression)
+getPlaybackConfigurationResponse_availSuppression = Lens.lens (\GetPlaybackConfigurationResponse' {availSuppression} -> availSuppression) (\s@GetPlaybackConfigurationResponse' {} a -> s {availSuppression = a} :: GetPlaybackConfigurationResponse)
+
+-- | The configuration for bumpers. Bumpers are short audio or video clips
+-- that play at the start or before the end of an ad break. To learn more
+-- about bumpers, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/bumpers.html Bumpers>.
+getPlaybackConfigurationResponse_bumper :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe Bumper)
+getPlaybackConfigurationResponse_bumper = Lens.lens (\GetPlaybackConfigurationResponse' {bumper} -> bumper) (\s@GetPlaybackConfigurationResponse' {} a -> s {bumper = a} :: GetPlaybackConfigurationResponse)
+
+-- | The configuration for using a content delivery network (CDN), like
+-- Amazon CloudFront, for content and ad segment management.
+getPlaybackConfigurationResponse_cdnConfiguration :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe CdnConfiguration)
+getPlaybackConfigurationResponse_cdnConfiguration = Lens.lens (\GetPlaybackConfigurationResponse' {cdnConfiguration} -> cdnConfiguration) (\s@GetPlaybackConfigurationResponse' {} a -> s {cdnConfiguration = a} :: GetPlaybackConfigurationResponse)
+
+-- | The player parameters and aliases used as dynamic variables during
+-- session initialization. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domain.html Domain Variables>.
+getPlaybackConfigurationResponse_configurationAliases :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)))
+getPlaybackConfigurationResponse_configurationAliases = Lens.lens (\GetPlaybackConfigurationResponse' {configurationAliases} -> configurationAliases) (\s@GetPlaybackConfigurationResponse' {} a -> s {configurationAliases = a} :: GetPlaybackConfigurationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The configuration for DASH content.
+getPlaybackConfigurationResponse_dashConfiguration :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe DashConfiguration)
+getPlaybackConfigurationResponse_dashConfiguration = Lens.lens (\GetPlaybackConfigurationResponse' {dashConfiguration} -> dashConfiguration) (\s@GetPlaybackConfigurationResponse' {} a -> s {dashConfiguration = a} :: GetPlaybackConfigurationResponse)
+
+-- | The configuration for HLS content.
+getPlaybackConfigurationResponse_hlsConfiguration :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe HlsConfiguration)
+getPlaybackConfigurationResponse_hlsConfiguration = Lens.lens (\GetPlaybackConfigurationResponse' {hlsConfiguration} -> hlsConfiguration) (\s@GetPlaybackConfigurationResponse' {} a -> s {hlsConfiguration = a} :: GetPlaybackConfigurationResponse)
+
+-- | The configuration for pre-roll ad insertion.
+getPlaybackConfigurationResponse_livePreRollConfiguration :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe LivePreRollConfiguration)
+getPlaybackConfigurationResponse_livePreRollConfiguration = Lens.lens (\GetPlaybackConfigurationResponse' {livePreRollConfiguration} -> livePreRollConfiguration) (\s@GetPlaybackConfigurationResponse' {} a -> s {livePreRollConfiguration = a} :: GetPlaybackConfigurationResponse)
+
+-- | The Amazon CloudWatch log settings for a playback configuration.
+getPlaybackConfigurationResponse_logConfiguration :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe LogConfiguration)
+getPlaybackConfigurationResponse_logConfiguration = Lens.lens (\GetPlaybackConfigurationResponse' {logConfiguration} -> logConfiguration) (\s@GetPlaybackConfigurationResponse' {} a -> s {logConfiguration = a} :: GetPlaybackConfigurationResponse)
+
+-- | The configuration for manifest processing rules. Manifest processing
+-- rules enable customization of the personalized manifests created by
+-- MediaTailor.
+getPlaybackConfigurationResponse_manifestProcessingRules :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe ManifestProcessingRules)
+getPlaybackConfigurationResponse_manifestProcessingRules = Lens.lens (\GetPlaybackConfigurationResponse' {manifestProcessingRules} -> manifestProcessingRules) (\s@GetPlaybackConfigurationResponse' {} a -> s {manifestProcessingRules = a} :: GetPlaybackConfigurationResponse)
+
+-- | The identifier for the playback configuration.
+getPlaybackConfigurationResponse_name :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe Prelude.Text)
+getPlaybackConfigurationResponse_name = Lens.lens (\GetPlaybackConfigurationResponse' {name} -> name) (\s@GetPlaybackConfigurationResponse' {} a -> s {name = a} :: GetPlaybackConfigurationResponse)
+
+-- | Defines the maximum duration of underfilled ad time (in seconds) allowed
+-- in an ad break. If the duration of underfilled ad time exceeds the
+-- personalization threshold, then the personalization of the ad break is
+-- abandoned and the underlying content is shown. This feature applies to
+-- /ad replacement/ in live and VOD streams, rather than ad insertion,
+-- because it relies on an underlying content stream. For more information
+-- about ad break behavior, including ad replacement and insertion, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Behavior in AWS Elemental MediaTailor>.
+getPlaybackConfigurationResponse_personalizationThresholdSeconds :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe Prelude.Natural)
+getPlaybackConfigurationResponse_personalizationThresholdSeconds = Lens.lens (\GetPlaybackConfigurationResponse' {personalizationThresholdSeconds} -> personalizationThresholdSeconds) (\s@GetPlaybackConfigurationResponse' {} a -> s {personalizationThresholdSeconds = a} :: GetPlaybackConfigurationResponse)
+
+-- | The Amazon Resource Name (ARN) for the playback configuration.
+getPlaybackConfigurationResponse_playbackConfigurationArn :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe Prelude.Text)
+getPlaybackConfigurationResponse_playbackConfigurationArn = Lens.lens (\GetPlaybackConfigurationResponse' {playbackConfigurationArn} -> playbackConfigurationArn) (\s@GetPlaybackConfigurationResponse' {} a -> s {playbackConfigurationArn = a} :: GetPlaybackConfigurationResponse)
+
+-- | The URL that the player accesses to get a manifest from AWS Elemental
+-- MediaTailor. This session will use server-side reporting.
+getPlaybackConfigurationResponse_playbackEndpointPrefix :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe Prelude.Text)
+getPlaybackConfigurationResponse_playbackEndpointPrefix = Lens.lens (\GetPlaybackConfigurationResponse' {playbackEndpointPrefix} -> playbackEndpointPrefix) (\s@GetPlaybackConfigurationResponse' {} a -> s {playbackEndpointPrefix = a} :: GetPlaybackConfigurationResponse)
+
+-- | The URL that the player uses to initialize a session that uses
+-- client-side reporting.
+getPlaybackConfigurationResponse_sessionInitializationEndpointPrefix :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe Prelude.Text)
+getPlaybackConfigurationResponse_sessionInitializationEndpointPrefix = Lens.lens (\GetPlaybackConfigurationResponse' {sessionInitializationEndpointPrefix} -> sessionInitializationEndpointPrefix) (\s@GetPlaybackConfigurationResponse' {} a -> s {sessionInitializationEndpointPrefix = a} :: GetPlaybackConfigurationResponse)
+
+-- | The URL for a high-quality video asset to transcode and use to fill in
+-- time that\'s not used by ads. AWS Elemental MediaTailor shows the slate
+-- to fill in gaps in media content. Configuring the slate is optional for
+-- non-VPAID playback configurations. For VPAID, the slate is required
+-- because MediaTailor provides it in the slots designated for dynamic ad
+-- content. The slate must be a high-quality asset that contains both audio
+-- and video.
+getPlaybackConfigurationResponse_slateAdUrl :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe Prelude.Text)
+getPlaybackConfigurationResponse_slateAdUrl = Lens.lens (\GetPlaybackConfigurationResponse' {slateAdUrl} -> slateAdUrl) (\s@GetPlaybackConfigurationResponse' {} a -> s {slateAdUrl = a} :: GetPlaybackConfigurationResponse)
+
+-- | The tags assigned to the playback configuration. Tags are key-value
+-- pairs that you can associate with Amazon resources to help with
+-- organization, access control, and cost tracking. For more information,
+-- see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+getPlaybackConfigurationResponse_tags :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getPlaybackConfigurationResponse_tags = Lens.lens (\GetPlaybackConfigurationResponse' {tags} -> tags) (\s@GetPlaybackConfigurationResponse' {} a -> s {tags = a} :: GetPlaybackConfigurationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name that is used to associate this playback configuration with a
+-- custom transcode profile. This overrides the dynamic transcoding
+-- defaults of MediaTailor. Use this only if you have already set up custom
+-- profiles with the help of AWS Support.
+getPlaybackConfigurationResponse_transcodeProfileName :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe Prelude.Text)
+getPlaybackConfigurationResponse_transcodeProfileName = Lens.lens (\GetPlaybackConfigurationResponse' {transcodeProfileName} -> transcodeProfileName) (\s@GetPlaybackConfigurationResponse' {} a -> s {transcodeProfileName = a} :: GetPlaybackConfigurationResponse)
+
+-- | The URL prefix for the parent manifest for the stream, minus the asset
+-- ID. The maximum length is 512 characters.
+getPlaybackConfigurationResponse_videoContentSourceUrl :: Lens.Lens' GetPlaybackConfigurationResponse (Prelude.Maybe Prelude.Text)
+getPlaybackConfigurationResponse_videoContentSourceUrl = Lens.lens (\GetPlaybackConfigurationResponse' {videoContentSourceUrl} -> videoContentSourceUrl) (\s@GetPlaybackConfigurationResponse' {} a -> s {videoContentSourceUrl = a} :: GetPlaybackConfigurationResponse)
+
+-- | The response's http status code.
+getPlaybackConfigurationResponse_httpStatus :: Lens.Lens' GetPlaybackConfigurationResponse Prelude.Int
+getPlaybackConfigurationResponse_httpStatus = Lens.lens (\GetPlaybackConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetPlaybackConfigurationResponse' {} a -> s {httpStatus = a} :: GetPlaybackConfigurationResponse)
+
+instance
+  Prelude.NFData
+    GetPlaybackConfigurationResponse
+  where
+  rnf GetPlaybackConfigurationResponse' {..} =
+    Prelude.rnf adDecisionServerUrl
+      `Prelude.seq` Prelude.rnf availSuppression
+      `Prelude.seq` Prelude.rnf bumper
+      `Prelude.seq` Prelude.rnf cdnConfiguration
+      `Prelude.seq` Prelude.rnf configurationAliases
+      `Prelude.seq` Prelude.rnf dashConfiguration
+      `Prelude.seq` Prelude.rnf hlsConfiguration
+      `Prelude.seq` Prelude.rnf livePreRollConfiguration
+      `Prelude.seq` Prelude.rnf logConfiguration
+      `Prelude.seq` Prelude.rnf manifestProcessingRules
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf personalizationThresholdSeconds
+      `Prelude.seq` Prelude.rnf playbackConfigurationArn
+      `Prelude.seq` Prelude.rnf playbackEndpointPrefix
+      `Prelude.seq` Prelude.rnf
+        sessionInitializationEndpointPrefix
+      `Prelude.seq` Prelude.rnf slateAdUrl
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf transcodeProfileName
+      `Prelude.seq` Prelude.rnf
+        videoContentSourceUrl
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/GetPrefetchSchedule.hs b/gen/Amazonka/MediaTailor/GetPrefetchSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/GetPrefetchSchedule.hs
@@ -0,0 +1,287 @@
+{-# 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.MediaTailor.GetPrefetchSchedule
+-- 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 prefetch schedule for a playback configuration. A prefetch
+-- schedule allows you to tell MediaTailor to fetch and prepare certain ads
+-- before an ad break happens. For more information about ad prefetching,
+-- see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/prefetching-ads.html Using ad prefetching>
+-- in the /MediaTailor User Guide/.
+module Amazonka.MediaTailor.GetPrefetchSchedule
+  ( -- * Creating a Request
+    GetPrefetchSchedule (..),
+    newGetPrefetchSchedule,
+
+    -- * Request Lenses
+    getPrefetchSchedule_name,
+    getPrefetchSchedule_playbackConfigurationName,
+
+    -- * Destructuring the Response
+    GetPrefetchScheduleResponse (..),
+    newGetPrefetchScheduleResponse,
+
+    -- * Response Lenses
+    getPrefetchScheduleResponse_arn,
+    getPrefetchScheduleResponse_consumption,
+    getPrefetchScheduleResponse_name,
+    getPrefetchScheduleResponse_playbackConfigurationName,
+    getPrefetchScheduleResponse_retrieval,
+    getPrefetchScheduleResponse_streamId,
+    getPrefetchScheduleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetPrefetchSchedule' smart constructor.
+data GetPrefetchSchedule = GetPrefetchSchedule'
+  { -- | The name of the prefetch schedule. The name must be unique among all
+    -- prefetch schedules that are associated with the specified playback
+    -- configuration.
+    name :: Prelude.Text,
+    -- | Returns information about the prefetch schedule for a specific playback
+    -- configuration. If you call @GetPrefetchSchedule@ on an expired prefetch
+    -- schedule, MediaTailor returns an HTTP 404 status code.
+    playbackConfigurationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPrefetchSchedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'getPrefetchSchedule_name' - The name of the prefetch schedule. The name must be unique among all
+-- prefetch schedules that are associated with the specified playback
+-- configuration.
+--
+-- 'playbackConfigurationName', 'getPrefetchSchedule_playbackConfigurationName' - Returns information about the prefetch schedule for a specific playback
+-- configuration. If you call @GetPrefetchSchedule@ on an expired prefetch
+-- schedule, MediaTailor returns an HTTP 404 status code.
+newGetPrefetchSchedule ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'playbackConfigurationName'
+  Prelude.Text ->
+  GetPrefetchSchedule
+newGetPrefetchSchedule
+  pName_
+  pPlaybackConfigurationName_ =
+    GetPrefetchSchedule'
+      { name = pName_,
+        playbackConfigurationName =
+          pPlaybackConfigurationName_
+      }
+
+-- | The name of the prefetch schedule. The name must be unique among all
+-- prefetch schedules that are associated with the specified playback
+-- configuration.
+getPrefetchSchedule_name :: Lens.Lens' GetPrefetchSchedule Prelude.Text
+getPrefetchSchedule_name = Lens.lens (\GetPrefetchSchedule' {name} -> name) (\s@GetPrefetchSchedule' {} a -> s {name = a} :: GetPrefetchSchedule)
+
+-- | Returns information about the prefetch schedule for a specific playback
+-- configuration. If you call @GetPrefetchSchedule@ on an expired prefetch
+-- schedule, MediaTailor returns an HTTP 404 status code.
+getPrefetchSchedule_playbackConfigurationName :: Lens.Lens' GetPrefetchSchedule Prelude.Text
+getPrefetchSchedule_playbackConfigurationName = Lens.lens (\GetPrefetchSchedule' {playbackConfigurationName} -> playbackConfigurationName) (\s@GetPrefetchSchedule' {} a -> s {playbackConfigurationName = a} :: GetPrefetchSchedule)
+
+instance Core.AWSRequest GetPrefetchSchedule where
+  type
+    AWSResponse GetPrefetchSchedule =
+      GetPrefetchScheduleResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetPrefetchScheduleResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Consumption")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "PlaybackConfigurationName")
+            Prelude.<*> (x Data..?> "Retrieval")
+            Prelude.<*> (x Data..?> "StreamId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetPrefetchSchedule where
+  hashWithSalt _salt GetPrefetchSchedule' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` playbackConfigurationName
+
+instance Prelude.NFData GetPrefetchSchedule where
+  rnf GetPrefetchSchedule' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf playbackConfigurationName
+
+instance Data.ToHeaders GetPrefetchSchedule where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetPrefetchSchedule where
+  toPath GetPrefetchSchedule' {..} =
+    Prelude.mconcat
+      [ "/prefetchSchedule/",
+        Data.toBS playbackConfigurationName,
+        "/",
+        Data.toBS name
+      ]
+
+instance Data.ToQuery GetPrefetchSchedule where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetPrefetchScheduleResponse' smart constructor.
+data GetPrefetchScheduleResponse = GetPrefetchScheduleResponse'
+  { -- | The Amazon Resource Name (ARN) of the prefetch schedule.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Consumption settings determine how, and when, MediaTailor places the
+    -- prefetched ads into ad breaks. Ad consumption occurs within a span of
+    -- time that you define, called a /consumption window/. You can designate
+    -- which ad breaks that MediaTailor fills with prefetch ads by setting
+    -- avail matching criteria.
+    consumption :: Prelude.Maybe PrefetchConsumption,
+    -- | The name of the prefetch schedule. The name must be unique among all
+    -- prefetch schedules that are associated with the specified playback
+    -- configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The name of the playback configuration to create the prefetch schedule
+    -- for.
+    playbackConfigurationName :: Prelude.Maybe Prelude.Text,
+    -- | A complex type that contains settings for prefetch retrieval from the ad
+    -- decision server (ADS).
+    retrieval :: Prelude.Maybe PrefetchRetrieval,
+    -- | An optional stream identifier that you can specify in order to prefetch
+    -- for multiple streams that use the same playback configuration.
+    streamId :: 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 'GetPrefetchScheduleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'getPrefetchScheduleResponse_arn' - The Amazon Resource Name (ARN) of the prefetch schedule.
+--
+-- 'consumption', 'getPrefetchScheduleResponse_consumption' - Consumption settings determine how, and when, MediaTailor places the
+-- prefetched ads into ad breaks. Ad consumption occurs within a span of
+-- time that you define, called a /consumption window/. You can designate
+-- which ad breaks that MediaTailor fills with prefetch ads by setting
+-- avail matching criteria.
+--
+-- 'name', 'getPrefetchScheduleResponse_name' - The name of the prefetch schedule. The name must be unique among all
+-- prefetch schedules that are associated with the specified playback
+-- configuration.
+--
+-- 'playbackConfigurationName', 'getPrefetchScheduleResponse_playbackConfigurationName' - The name of the playback configuration to create the prefetch schedule
+-- for.
+--
+-- 'retrieval', 'getPrefetchScheduleResponse_retrieval' - A complex type that contains settings for prefetch retrieval from the ad
+-- decision server (ADS).
+--
+-- 'streamId', 'getPrefetchScheduleResponse_streamId' - An optional stream identifier that you can specify in order to prefetch
+-- for multiple streams that use the same playback configuration.
+--
+-- 'httpStatus', 'getPrefetchScheduleResponse_httpStatus' - The response's http status code.
+newGetPrefetchScheduleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetPrefetchScheduleResponse
+newGetPrefetchScheduleResponse pHttpStatus_ =
+  GetPrefetchScheduleResponse'
+    { arn = Prelude.Nothing,
+      consumption = Prelude.Nothing,
+      name = Prelude.Nothing,
+      playbackConfigurationName = Prelude.Nothing,
+      retrieval = Prelude.Nothing,
+      streamId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the prefetch schedule.
+getPrefetchScheduleResponse_arn :: Lens.Lens' GetPrefetchScheduleResponse (Prelude.Maybe Prelude.Text)
+getPrefetchScheduleResponse_arn = Lens.lens (\GetPrefetchScheduleResponse' {arn} -> arn) (\s@GetPrefetchScheduleResponse' {} a -> s {arn = a} :: GetPrefetchScheduleResponse)
+
+-- | Consumption settings determine how, and when, MediaTailor places the
+-- prefetched ads into ad breaks. Ad consumption occurs within a span of
+-- time that you define, called a /consumption window/. You can designate
+-- which ad breaks that MediaTailor fills with prefetch ads by setting
+-- avail matching criteria.
+getPrefetchScheduleResponse_consumption :: Lens.Lens' GetPrefetchScheduleResponse (Prelude.Maybe PrefetchConsumption)
+getPrefetchScheduleResponse_consumption = Lens.lens (\GetPrefetchScheduleResponse' {consumption} -> consumption) (\s@GetPrefetchScheduleResponse' {} a -> s {consumption = a} :: GetPrefetchScheduleResponse)
+
+-- | The name of the prefetch schedule. The name must be unique among all
+-- prefetch schedules that are associated with the specified playback
+-- configuration.
+getPrefetchScheduleResponse_name :: Lens.Lens' GetPrefetchScheduleResponse (Prelude.Maybe Prelude.Text)
+getPrefetchScheduleResponse_name = Lens.lens (\GetPrefetchScheduleResponse' {name} -> name) (\s@GetPrefetchScheduleResponse' {} a -> s {name = a} :: GetPrefetchScheduleResponse)
+
+-- | The name of the playback configuration to create the prefetch schedule
+-- for.
+getPrefetchScheduleResponse_playbackConfigurationName :: Lens.Lens' GetPrefetchScheduleResponse (Prelude.Maybe Prelude.Text)
+getPrefetchScheduleResponse_playbackConfigurationName = Lens.lens (\GetPrefetchScheduleResponse' {playbackConfigurationName} -> playbackConfigurationName) (\s@GetPrefetchScheduleResponse' {} a -> s {playbackConfigurationName = a} :: GetPrefetchScheduleResponse)
+
+-- | A complex type that contains settings for prefetch retrieval from the ad
+-- decision server (ADS).
+getPrefetchScheduleResponse_retrieval :: Lens.Lens' GetPrefetchScheduleResponse (Prelude.Maybe PrefetchRetrieval)
+getPrefetchScheduleResponse_retrieval = Lens.lens (\GetPrefetchScheduleResponse' {retrieval} -> retrieval) (\s@GetPrefetchScheduleResponse' {} a -> s {retrieval = a} :: GetPrefetchScheduleResponse)
+
+-- | An optional stream identifier that you can specify in order to prefetch
+-- for multiple streams that use the same playback configuration.
+getPrefetchScheduleResponse_streamId :: Lens.Lens' GetPrefetchScheduleResponse (Prelude.Maybe Prelude.Text)
+getPrefetchScheduleResponse_streamId = Lens.lens (\GetPrefetchScheduleResponse' {streamId} -> streamId) (\s@GetPrefetchScheduleResponse' {} a -> s {streamId = a} :: GetPrefetchScheduleResponse)
+
+-- | The response's http status code.
+getPrefetchScheduleResponse_httpStatus :: Lens.Lens' GetPrefetchScheduleResponse Prelude.Int
+getPrefetchScheduleResponse_httpStatus = Lens.lens (\GetPrefetchScheduleResponse' {httpStatus} -> httpStatus) (\s@GetPrefetchScheduleResponse' {} a -> s {httpStatus = a} :: GetPrefetchScheduleResponse)
+
+instance Prelude.NFData GetPrefetchScheduleResponse where
+  rnf GetPrefetchScheduleResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf consumption
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf playbackConfigurationName
+      `Prelude.seq` Prelude.rnf retrieval
+      `Prelude.seq` Prelude.rnf streamId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/Lens.hs b/gen/Amazonka/MediaTailor/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Lens.hs
@@ -0,0 +1,762 @@
+{-# 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.MediaTailor.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.MediaTailor.Lens
+  ( -- * Operations
+
+    -- ** ConfigureLogsForPlaybackConfiguration
+    configureLogsForPlaybackConfiguration_percentEnabled,
+    configureLogsForPlaybackConfiguration_playbackConfigurationName,
+    configureLogsForPlaybackConfigurationResponse_playbackConfigurationName,
+    configureLogsForPlaybackConfigurationResponse_httpStatus,
+    configureLogsForPlaybackConfigurationResponse_percentEnabled,
+
+    -- ** CreateChannel
+    createChannel_fillerSlate,
+    createChannel_tags,
+    createChannel_tier,
+    createChannel_channelName,
+    createChannel_outputs,
+    createChannel_playbackMode,
+    createChannelResponse_arn,
+    createChannelResponse_channelName,
+    createChannelResponse_channelState,
+    createChannelResponse_creationTime,
+    createChannelResponse_fillerSlate,
+    createChannelResponse_lastModifiedTime,
+    createChannelResponse_outputs,
+    createChannelResponse_playbackMode,
+    createChannelResponse_tags,
+    createChannelResponse_tier,
+    createChannelResponse_httpStatus,
+
+    -- ** CreateLiveSource
+    createLiveSource_tags,
+    createLiveSource_httpPackageConfigurations,
+    createLiveSource_liveSourceName,
+    createLiveSource_sourceLocationName,
+    createLiveSourceResponse_arn,
+    createLiveSourceResponse_creationTime,
+    createLiveSourceResponse_httpPackageConfigurations,
+    createLiveSourceResponse_lastModifiedTime,
+    createLiveSourceResponse_liveSourceName,
+    createLiveSourceResponse_sourceLocationName,
+    createLiveSourceResponse_tags,
+    createLiveSourceResponse_httpStatus,
+
+    -- ** CreatePrefetchSchedule
+    createPrefetchSchedule_streamId,
+    createPrefetchSchedule_consumption,
+    createPrefetchSchedule_name,
+    createPrefetchSchedule_playbackConfigurationName,
+    createPrefetchSchedule_retrieval,
+    createPrefetchScheduleResponse_arn,
+    createPrefetchScheduleResponse_consumption,
+    createPrefetchScheduleResponse_name,
+    createPrefetchScheduleResponse_playbackConfigurationName,
+    createPrefetchScheduleResponse_retrieval,
+    createPrefetchScheduleResponse_streamId,
+    createPrefetchScheduleResponse_httpStatus,
+
+    -- ** CreateProgram
+    createProgram_adBreaks,
+    createProgram_liveSourceName,
+    createProgram_vodSourceName,
+    createProgram_channelName,
+    createProgram_programName,
+    createProgram_scheduleConfiguration,
+    createProgram_sourceLocationName,
+    createProgramResponse_adBreaks,
+    createProgramResponse_arn,
+    createProgramResponse_channelName,
+    createProgramResponse_creationTime,
+    createProgramResponse_liveSourceName,
+    createProgramResponse_programName,
+    createProgramResponse_scheduledStartTime,
+    createProgramResponse_sourceLocationName,
+    createProgramResponse_vodSourceName,
+    createProgramResponse_httpStatus,
+
+    -- ** CreateSourceLocation
+    createSourceLocation_accessConfiguration,
+    createSourceLocation_defaultSegmentDeliveryConfiguration,
+    createSourceLocation_segmentDeliveryConfigurations,
+    createSourceLocation_tags,
+    createSourceLocation_httpConfiguration,
+    createSourceLocation_sourceLocationName,
+    createSourceLocationResponse_accessConfiguration,
+    createSourceLocationResponse_arn,
+    createSourceLocationResponse_creationTime,
+    createSourceLocationResponse_defaultSegmentDeliveryConfiguration,
+    createSourceLocationResponse_httpConfiguration,
+    createSourceLocationResponse_lastModifiedTime,
+    createSourceLocationResponse_segmentDeliveryConfigurations,
+    createSourceLocationResponse_sourceLocationName,
+    createSourceLocationResponse_tags,
+    createSourceLocationResponse_httpStatus,
+
+    -- ** CreateVodSource
+    createVodSource_tags,
+    createVodSource_httpPackageConfigurations,
+    createVodSource_sourceLocationName,
+    createVodSource_vodSourceName,
+    createVodSourceResponse_arn,
+    createVodSourceResponse_creationTime,
+    createVodSourceResponse_httpPackageConfigurations,
+    createVodSourceResponse_lastModifiedTime,
+    createVodSourceResponse_sourceLocationName,
+    createVodSourceResponse_tags,
+    createVodSourceResponse_vodSourceName,
+    createVodSourceResponse_httpStatus,
+
+    -- ** DeleteChannel
+    deleteChannel_channelName,
+    deleteChannelResponse_httpStatus,
+
+    -- ** DeleteChannelPolicy
+    deleteChannelPolicy_channelName,
+    deleteChannelPolicyResponse_httpStatus,
+
+    -- ** DeleteLiveSource
+    deleteLiveSource_liveSourceName,
+    deleteLiveSource_sourceLocationName,
+    deleteLiveSourceResponse_httpStatus,
+
+    -- ** DeletePlaybackConfiguration
+    deletePlaybackConfiguration_name,
+    deletePlaybackConfigurationResponse_httpStatus,
+
+    -- ** DeletePrefetchSchedule
+    deletePrefetchSchedule_name,
+    deletePrefetchSchedule_playbackConfigurationName,
+    deletePrefetchScheduleResponse_httpStatus,
+
+    -- ** DeleteProgram
+    deleteProgram_channelName,
+    deleteProgram_programName,
+    deleteProgramResponse_httpStatus,
+
+    -- ** DeleteSourceLocation
+    deleteSourceLocation_sourceLocationName,
+    deleteSourceLocationResponse_httpStatus,
+
+    -- ** DeleteVodSource
+    deleteVodSource_sourceLocationName,
+    deleteVodSource_vodSourceName,
+    deleteVodSourceResponse_httpStatus,
+
+    -- ** DescribeChannel
+    describeChannel_channelName,
+    describeChannelResponse_arn,
+    describeChannelResponse_channelName,
+    describeChannelResponse_channelState,
+    describeChannelResponse_creationTime,
+    describeChannelResponse_fillerSlate,
+    describeChannelResponse_lastModifiedTime,
+    describeChannelResponse_outputs,
+    describeChannelResponse_playbackMode,
+    describeChannelResponse_tags,
+    describeChannelResponse_tier,
+    describeChannelResponse_httpStatus,
+
+    -- ** DescribeLiveSource
+    describeLiveSource_liveSourceName,
+    describeLiveSource_sourceLocationName,
+    describeLiveSourceResponse_arn,
+    describeLiveSourceResponse_creationTime,
+    describeLiveSourceResponse_httpPackageConfigurations,
+    describeLiveSourceResponse_lastModifiedTime,
+    describeLiveSourceResponse_liveSourceName,
+    describeLiveSourceResponse_sourceLocationName,
+    describeLiveSourceResponse_tags,
+    describeLiveSourceResponse_httpStatus,
+
+    -- ** DescribeProgram
+    describeProgram_channelName,
+    describeProgram_programName,
+    describeProgramResponse_adBreaks,
+    describeProgramResponse_arn,
+    describeProgramResponse_channelName,
+    describeProgramResponse_creationTime,
+    describeProgramResponse_liveSourceName,
+    describeProgramResponse_programName,
+    describeProgramResponse_scheduledStartTime,
+    describeProgramResponse_sourceLocationName,
+    describeProgramResponse_vodSourceName,
+    describeProgramResponse_httpStatus,
+
+    -- ** DescribeSourceLocation
+    describeSourceLocation_sourceLocationName,
+    describeSourceLocationResponse_accessConfiguration,
+    describeSourceLocationResponse_arn,
+    describeSourceLocationResponse_creationTime,
+    describeSourceLocationResponse_defaultSegmentDeliveryConfiguration,
+    describeSourceLocationResponse_httpConfiguration,
+    describeSourceLocationResponse_lastModifiedTime,
+    describeSourceLocationResponse_segmentDeliveryConfigurations,
+    describeSourceLocationResponse_sourceLocationName,
+    describeSourceLocationResponse_tags,
+    describeSourceLocationResponse_httpStatus,
+
+    -- ** DescribeVodSource
+    describeVodSource_sourceLocationName,
+    describeVodSource_vodSourceName,
+    describeVodSourceResponse_arn,
+    describeVodSourceResponse_creationTime,
+    describeVodSourceResponse_httpPackageConfigurations,
+    describeVodSourceResponse_lastModifiedTime,
+    describeVodSourceResponse_sourceLocationName,
+    describeVodSourceResponse_tags,
+    describeVodSourceResponse_vodSourceName,
+    describeVodSourceResponse_httpStatus,
+
+    -- ** GetChannelPolicy
+    getChannelPolicy_channelName,
+    getChannelPolicyResponse_policy,
+    getChannelPolicyResponse_httpStatus,
+
+    -- ** GetChannelSchedule
+    getChannelSchedule_durationMinutes,
+    getChannelSchedule_maxResults,
+    getChannelSchedule_nextToken,
+    getChannelSchedule_channelName,
+    getChannelScheduleResponse_items,
+    getChannelScheduleResponse_nextToken,
+    getChannelScheduleResponse_httpStatus,
+
+    -- ** GetPlaybackConfiguration
+    getPlaybackConfiguration_name,
+    getPlaybackConfigurationResponse_adDecisionServerUrl,
+    getPlaybackConfigurationResponse_availSuppression,
+    getPlaybackConfigurationResponse_bumper,
+    getPlaybackConfigurationResponse_cdnConfiguration,
+    getPlaybackConfigurationResponse_configurationAliases,
+    getPlaybackConfigurationResponse_dashConfiguration,
+    getPlaybackConfigurationResponse_hlsConfiguration,
+    getPlaybackConfigurationResponse_livePreRollConfiguration,
+    getPlaybackConfigurationResponse_logConfiguration,
+    getPlaybackConfigurationResponse_manifestProcessingRules,
+    getPlaybackConfigurationResponse_name,
+    getPlaybackConfigurationResponse_personalizationThresholdSeconds,
+    getPlaybackConfigurationResponse_playbackConfigurationArn,
+    getPlaybackConfigurationResponse_playbackEndpointPrefix,
+    getPlaybackConfigurationResponse_sessionInitializationEndpointPrefix,
+    getPlaybackConfigurationResponse_slateAdUrl,
+    getPlaybackConfigurationResponse_tags,
+    getPlaybackConfigurationResponse_transcodeProfileName,
+    getPlaybackConfigurationResponse_videoContentSourceUrl,
+    getPlaybackConfigurationResponse_httpStatus,
+
+    -- ** GetPrefetchSchedule
+    getPrefetchSchedule_name,
+    getPrefetchSchedule_playbackConfigurationName,
+    getPrefetchScheduleResponse_arn,
+    getPrefetchScheduleResponse_consumption,
+    getPrefetchScheduleResponse_name,
+    getPrefetchScheduleResponse_playbackConfigurationName,
+    getPrefetchScheduleResponse_retrieval,
+    getPrefetchScheduleResponse_streamId,
+    getPrefetchScheduleResponse_httpStatus,
+
+    -- ** ListAlerts
+    listAlerts_maxResults,
+    listAlerts_nextToken,
+    listAlerts_resourceArn,
+    listAlertsResponse_items,
+    listAlertsResponse_nextToken,
+    listAlertsResponse_httpStatus,
+
+    -- ** ListChannels
+    listChannels_maxResults,
+    listChannels_nextToken,
+    listChannelsResponse_items,
+    listChannelsResponse_nextToken,
+    listChannelsResponse_httpStatus,
+
+    -- ** ListLiveSources
+    listLiveSources_maxResults,
+    listLiveSources_nextToken,
+    listLiveSources_sourceLocationName,
+    listLiveSourcesResponse_items,
+    listLiveSourcesResponse_nextToken,
+    listLiveSourcesResponse_httpStatus,
+
+    -- ** ListPlaybackConfigurations
+    listPlaybackConfigurations_maxResults,
+    listPlaybackConfigurations_nextToken,
+    listPlaybackConfigurationsResponse_items,
+    listPlaybackConfigurationsResponse_nextToken,
+    listPlaybackConfigurationsResponse_httpStatus,
+
+    -- ** ListPrefetchSchedules
+    listPrefetchSchedules_maxResults,
+    listPrefetchSchedules_nextToken,
+    listPrefetchSchedules_streamId,
+    listPrefetchSchedules_playbackConfigurationName,
+    listPrefetchSchedulesResponse_items,
+    listPrefetchSchedulesResponse_nextToken,
+    listPrefetchSchedulesResponse_httpStatus,
+
+    -- ** ListSourceLocations
+    listSourceLocations_maxResults,
+    listSourceLocations_nextToken,
+    listSourceLocationsResponse_items,
+    listSourceLocationsResponse_nextToken,
+    listSourceLocationsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ListVodSources
+    listVodSources_maxResults,
+    listVodSources_nextToken,
+    listVodSources_sourceLocationName,
+    listVodSourcesResponse_items,
+    listVodSourcesResponse_nextToken,
+    listVodSourcesResponse_httpStatus,
+
+    -- ** PutChannelPolicy
+    putChannelPolicy_channelName,
+    putChannelPolicy_policy,
+    putChannelPolicyResponse_httpStatus,
+
+    -- ** PutPlaybackConfiguration
+    putPlaybackConfiguration_adDecisionServerUrl,
+    putPlaybackConfiguration_availSuppression,
+    putPlaybackConfiguration_bumper,
+    putPlaybackConfiguration_cdnConfiguration,
+    putPlaybackConfiguration_configurationAliases,
+    putPlaybackConfiguration_dashConfiguration,
+    putPlaybackConfiguration_livePreRollConfiguration,
+    putPlaybackConfiguration_manifestProcessingRules,
+    putPlaybackConfiguration_personalizationThresholdSeconds,
+    putPlaybackConfiguration_slateAdUrl,
+    putPlaybackConfiguration_tags,
+    putPlaybackConfiguration_transcodeProfileName,
+    putPlaybackConfiguration_videoContentSourceUrl,
+    putPlaybackConfiguration_name,
+    putPlaybackConfigurationResponse_adDecisionServerUrl,
+    putPlaybackConfigurationResponse_availSuppression,
+    putPlaybackConfigurationResponse_bumper,
+    putPlaybackConfigurationResponse_cdnConfiguration,
+    putPlaybackConfigurationResponse_configurationAliases,
+    putPlaybackConfigurationResponse_dashConfiguration,
+    putPlaybackConfigurationResponse_hlsConfiguration,
+    putPlaybackConfigurationResponse_livePreRollConfiguration,
+    putPlaybackConfigurationResponse_logConfiguration,
+    putPlaybackConfigurationResponse_manifestProcessingRules,
+    putPlaybackConfigurationResponse_name,
+    putPlaybackConfigurationResponse_personalizationThresholdSeconds,
+    putPlaybackConfigurationResponse_playbackConfigurationArn,
+    putPlaybackConfigurationResponse_playbackEndpointPrefix,
+    putPlaybackConfigurationResponse_sessionInitializationEndpointPrefix,
+    putPlaybackConfigurationResponse_slateAdUrl,
+    putPlaybackConfigurationResponse_tags,
+    putPlaybackConfigurationResponse_transcodeProfileName,
+    putPlaybackConfigurationResponse_videoContentSourceUrl,
+    putPlaybackConfigurationResponse_httpStatus,
+
+    -- ** StartChannel
+    startChannel_channelName,
+    startChannelResponse_httpStatus,
+
+    -- ** StopChannel
+    stopChannel_channelName,
+    stopChannelResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- ** UpdateChannel
+    updateChannel_fillerSlate,
+    updateChannel_channelName,
+    updateChannel_outputs,
+    updateChannelResponse_arn,
+    updateChannelResponse_channelName,
+    updateChannelResponse_channelState,
+    updateChannelResponse_creationTime,
+    updateChannelResponse_fillerSlate,
+    updateChannelResponse_lastModifiedTime,
+    updateChannelResponse_outputs,
+    updateChannelResponse_playbackMode,
+    updateChannelResponse_tags,
+    updateChannelResponse_tier,
+    updateChannelResponse_httpStatus,
+
+    -- ** UpdateLiveSource
+    updateLiveSource_httpPackageConfigurations,
+    updateLiveSource_liveSourceName,
+    updateLiveSource_sourceLocationName,
+    updateLiveSourceResponse_arn,
+    updateLiveSourceResponse_creationTime,
+    updateLiveSourceResponse_httpPackageConfigurations,
+    updateLiveSourceResponse_lastModifiedTime,
+    updateLiveSourceResponse_liveSourceName,
+    updateLiveSourceResponse_sourceLocationName,
+    updateLiveSourceResponse_tags,
+    updateLiveSourceResponse_httpStatus,
+
+    -- ** UpdateSourceLocation
+    updateSourceLocation_accessConfiguration,
+    updateSourceLocation_defaultSegmentDeliveryConfiguration,
+    updateSourceLocation_segmentDeliveryConfigurations,
+    updateSourceLocation_httpConfiguration,
+    updateSourceLocation_sourceLocationName,
+    updateSourceLocationResponse_accessConfiguration,
+    updateSourceLocationResponse_arn,
+    updateSourceLocationResponse_creationTime,
+    updateSourceLocationResponse_defaultSegmentDeliveryConfiguration,
+    updateSourceLocationResponse_httpConfiguration,
+    updateSourceLocationResponse_lastModifiedTime,
+    updateSourceLocationResponse_segmentDeliveryConfigurations,
+    updateSourceLocationResponse_sourceLocationName,
+    updateSourceLocationResponse_tags,
+    updateSourceLocationResponse_httpStatus,
+
+    -- ** UpdateVodSource
+    updateVodSource_httpPackageConfigurations,
+    updateVodSource_sourceLocationName,
+    updateVodSource_vodSourceName,
+    updateVodSourceResponse_arn,
+    updateVodSourceResponse_creationTime,
+    updateVodSourceResponse_httpPackageConfigurations,
+    updateVodSourceResponse_lastModifiedTime,
+    updateVodSourceResponse_sourceLocationName,
+    updateVodSourceResponse_tags,
+    updateVodSourceResponse_vodSourceName,
+    updateVodSourceResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AccessConfiguration
+    accessConfiguration_accessType,
+    accessConfiguration_secretsManagerAccessTokenConfiguration,
+
+    -- ** AdBreak
+    adBreak_messageType,
+    adBreak_offsetMillis,
+    adBreak_slate,
+    adBreak_spliceInsertMessage,
+    adBreak_timeSignalMessage,
+
+    -- ** AdMarkerPassthrough
+    adMarkerPassthrough_enabled,
+
+    -- ** Alert
+    alert_alertCode,
+    alert_alertMessage,
+    alert_lastModifiedTime,
+    alert_relatedResourceArns,
+    alert_resourceArn,
+
+    -- ** AvailMatchingCriteria
+    availMatchingCriteria_dynamicVariable,
+    availMatchingCriteria_operator,
+
+    -- ** AvailSuppression
+    availSuppression_mode,
+    availSuppression_value,
+
+    -- ** Bumper
+    bumper_endUrl,
+    bumper_startUrl,
+
+    -- ** CdnConfiguration
+    cdnConfiguration_adSegmentUrlPrefix,
+    cdnConfiguration_contentSegmentUrlPrefix,
+
+    -- ** Channel
+    channel_creationTime,
+    channel_fillerSlate,
+    channel_lastModifiedTime,
+    channel_tags,
+    channel_arn,
+    channel_channelName,
+    channel_channelState,
+    channel_outputs,
+    channel_playbackMode,
+    channel_tier,
+
+    -- ** DashConfiguration
+    dashConfiguration_manifestEndpointPrefix,
+    dashConfiguration_mpdLocation,
+    dashConfiguration_originManifestType,
+
+    -- ** DashConfigurationForPut
+    dashConfigurationForPut_mpdLocation,
+    dashConfigurationForPut_originManifestType,
+
+    -- ** DashPlaylistSettings
+    dashPlaylistSettings_manifestWindowSeconds,
+    dashPlaylistSettings_minBufferTimeSeconds,
+    dashPlaylistSettings_minUpdatePeriodSeconds,
+    dashPlaylistSettings_suggestedPresentationDelaySeconds,
+
+    -- ** DefaultSegmentDeliveryConfiguration
+    defaultSegmentDeliveryConfiguration_baseUrl,
+
+    -- ** HlsConfiguration
+    hlsConfiguration_manifestEndpointPrefix,
+
+    -- ** HlsPlaylistSettings
+    hlsPlaylistSettings_manifestWindowSeconds,
+
+    -- ** HttpConfiguration
+    httpConfiguration_baseUrl,
+
+    -- ** HttpPackageConfiguration
+    httpPackageConfiguration_path,
+    httpPackageConfiguration_sourceGroup,
+    httpPackageConfiguration_type,
+
+    -- ** LivePreRollConfiguration
+    livePreRollConfiguration_adDecisionServerUrl,
+    livePreRollConfiguration_maxDurationSeconds,
+
+    -- ** LiveSource
+    liveSource_creationTime,
+    liveSource_lastModifiedTime,
+    liveSource_tags,
+    liveSource_arn,
+    liveSource_httpPackageConfigurations,
+    liveSource_liveSourceName,
+    liveSource_sourceLocationName,
+
+    -- ** LogConfiguration
+    logConfiguration_percentEnabled,
+
+    -- ** ManifestProcessingRules
+    manifestProcessingRules_adMarkerPassthrough,
+
+    -- ** PlaybackConfiguration
+    playbackConfiguration_adDecisionServerUrl,
+    playbackConfiguration_availSuppression,
+    playbackConfiguration_bumper,
+    playbackConfiguration_cdnConfiguration,
+    playbackConfiguration_configurationAliases,
+    playbackConfiguration_dashConfiguration,
+    playbackConfiguration_hlsConfiguration,
+    playbackConfiguration_livePreRollConfiguration,
+    playbackConfiguration_logConfiguration,
+    playbackConfiguration_manifestProcessingRules,
+    playbackConfiguration_name,
+    playbackConfiguration_personalizationThresholdSeconds,
+    playbackConfiguration_playbackConfigurationArn,
+    playbackConfiguration_playbackEndpointPrefix,
+    playbackConfiguration_sessionInitializationEndpointPrefix,
+    playbackConfiguration_slateAdUrl,
+    playbackConfiguration_tags,
+    playbackConfiguration_transcodeProfileName,
+    playbackConfiguration_videoContentSourceUrl,
+
+    -- ** PrefetchConsumption
+    prefetchConsumption_availMatchingCriteria,
+    prefetchConsumption_startTime,
+    prefetchConsumption_endTime,
+
+    -- ** PrefetchRetrieval
+    prefetchRetrieval_dynamicVariables,
+    prefetchRetrieval_startTime,
+    prefetchRetrieval_endTime,
+
+    -- ** PrefetchSchedule
+    prefetchSchedule_streamId,
+    prefetchSchedule_arn,
+    prefetchSchedule_consumption,
+    prefetchSchedule_name,
+    prefetchSchedule_playbackConfigurationName,
+    prefetchSchedule_retrieval,
+
+    -- ** RequestOutputItem
+    requestOutputItem_dashPlaylistSettings,
+    requestOutputItem_hlsPlaylistSettings,
+    requestOutputItem_manifestName,
+    requestOutputItem_sourceGroup,
+
+    -- ** ResponseOutputItem
+    responseOutputItem_dashPlaylistSettings,
+    responseOutputItem_hlsPlaylistSettings,
+    responseOutputItem_manifestName,
+    responseOutputItem_playbackUrl,
+    responseOutputItem_sourceGroup,
+
+    -- ** ScheduleAdBreak
+    scheduleAdBreak_approximateDurationSeconds,
+    scheduleAdBreak_approximateStartTime,
+    scheduleAdBreak_sourceLocationName,
+    scheduleAdBreak_vodSourceName,
+
+    -- ** ScheduleConfiguration
+    scheduleConfiguration_transition,
+
+    -- ** ScheduleEntry
+    scheduleEntry_approximateDurationSeconds,
+    scheduleEntry_approximateStartTime,
+    scheduleEntry_liveSourceName,
+    scheduleEntry_scheduleAdBreaks,
+    scheduleEntry_scheduleEntryType,
+    scheduleEntry_vodSourceName,
+    scheduleEntry_arn,
+    scheduleEntry_channelName,
+    scheduleEntry_programName,
+    scheduleEntry_sourceLocationName,
+
+    -- ** SecretsManagerAccessTokenConfiguration
+    secretsManagerAccessTokenConfiguration_headerName,
+    secretsManagerAccessTokenConfiguration_secretArn,
+    secretsManagerAccessTokenConfiguration_secretStringKey,
+
+    -- ** SegmentDeliveryConfiguration
+    segmentDeliveryConfiguration_baseUrl,
+    segmentDeliveryConfiguration_name,
+
+    -- ** SegmentationDescriptor
+    segmentationDescriptor_segmentNum,
+    segmentationDescriptor_segmentationEventId,
+    segmentationDescriptor_segmentationTypeId,
+    segmentationDescriptor_segmentationUpid,
+    segmentationDescriptor_segmentationUpidType,
+    segmentationDescriptor_segmentsExpected,
+    segmentationDescriptor_subSegmentNum,
+    segmentationDescriptor_subSegmentsExpected,
+
+    -- ** SlateSource
+    slateSource_sourceLocationName,
+    slateSource_vodSourceName,
+
+    -- ** SourceLocation
+    sourceLocation_accessConfiguration,
+    sourceLocation_creationTime,
+    sourceLocation_defaultSegmentDeliveryConfiguration,
+    sourceLocation_lastModifiedTime,
+    sourceLocation_segmentDeliveryConfigurations,
+    sourceLocation_tags,
+    sourceLocation_arn,
+    sourceLocation_httpConfiguration,
+    sourceLocation_sourceLocationName,
+
+    -- ** SpliceInsertMessage
+    spliceInsertMessage_availNum,
+    spliceInsertMessage_availsExpected,
+    spliceInsertMessage_spliceEventId,
+    spliceInsertMessage_uniqueProgramId,
+
+    -- ** TimeSignalMessage
+    timeSignalMessage_segmentationDescriptors,
+
+    -- ** Transition
+    transition_durationMillis,
+    transition_relativeProgram,
+    transition_scheduledStartTimeMillis,
+    transition_relativePosition,
+    transition_type,
+
+    -- ** VodSource
+    vodSource_creationTime,
+    vodSource_lastModifiedTime,
+    vodSource_tags,
+    vodSource_arn,
+    vodSource_httpPackageConfigurations,
+    vodSource_sourceLocationName,
+    vodSource_vodSourceName,
+  )
+where
+
+import Amazonka.MediaTailor.ConfigureLogsForPlaybackConfiguration
+import Amazonka.MediaTailor.CreateChannel
+import Amazonka.MediaTailor.CreateLiveSource
+import Amazonka.MediaTailor.CreatePrefetchSchedule
+import Amazonka.MediaTailor.CreateProgram
+import Amazonka.MediaTailor.CreateSourceLocation
+import Amazonka.MediaTailor.CreateVodSource
+import Amazonka.MediaTailor.DeleteChannel
+import Amazonka.MediaTailor.DeleteChannelPolicy
+import Amazonka.MediaTailor.DeleteLiveSource
+import Amazonka.MediaTailor.DeletePlaybackConfiguration
+import Amazonka.MediaTailor.DeletePrefetchSchedule
+import Amazonka.MediaTailor.DeleteProgram
+import Amazonka.MediaTailor.DeleteSourceLocation
+import Amazonka.MediaTailor.DeleteVodSource
+import Amazonka.MediaTailor.DescribeChannel
+import Amazonka.MediaTailor.DescribeLiveSource
+import Amazonka.MediaTailor.DescribeProgram
+import Amazonka.MediaTailor.DescribeSourceLocation
+import Amazonka.MediaTailor.DescribeVodSource
+import Amazonka.MediaTailor.GetChannelPolicy
+import Amazonka.MediaTailor.GetChannelSchedule
+import Amazonka.MediaTailor.GetPlaybackConfiguration
+import Amazonka.MediaTailor.GetPrefetchSchedule
+import Amazonka.MediaTailor.ListAlerts
+import Amazonka.MediaTailor.ListChannels
+import Amazonka.MediaTailor.ListLiveSources
+import Amazonka.MediaTailor.ListPlaybackConfigurations
+import Amazonka.MediaTailor.ListPrefetchSchedules
+import Amazonka.MediaTailor.ListSourceLocations
+import Amazonka.MediaTailor.ListTagsForResource
+import Amazonka.MediaTailor.ListVodSources
+import Amazonka.MediaTailor.PutChannelPolicy
+import Amazonka.MediaTailor.PutPlaybackConfiguration
+import Amazonka.MediaTailor.StartChannel
+import Amazonka.MediaTailor.StopChannel
+import Amazonka.MediaTailor.TagResource
+import Amazonka.MediaTailor.Types.AccessConfiguration
+import Amazonka.MediaTailor.Types.AdBreak
+import Amazonka.MediaTailor.Types.AdMarkerPassthrough
+import Amazonka.MediaTailor.Types.Alert
+import Amazonka.MediaTailor.Types.AvailMatchingCriteria
+import Amazonka.MediaTailor.Types.AvailSuppression
+import Amazonka.MediaTailor.Types.Bumper
+import Amazonka.MediaTailor.Types.CdnConfiguration
+import Amazonka.MediaTailor.Types.Channel
+import Amazonka.MediaTailor.Types.DashConfiguration
+import Amazonka.MediaTailor.Types.DashConfigurationForPut
+import Amazonka.MediaTailor.Types.DashPlaylistSettings
+import Amazonka.MediaTailor.Types.DefaultSegmentDeliveryConfiguration
+import Amazonka.MediaTailor.Types.HlsConfiguration
+import Amazonka.MediaTailor.Types.HlsPlaylistSettings
+import Amazonka.MediaTailor.Types.HttpConfiguration
+import Amazonka.MediaTailor.Types.HttpPackageConfiguration
+import Amazonka.MediaTailor.Types.LivePreRollConfiguration
+import Amazonka.MediaTailor.Types.LiveSource
+import Amazonka.MediaTailor.Types.LogConfiguration
+import Amazonka.MediaTailor.Types.ManifestProcessingRules
+import Amazonka.MediaTailor.Types.PlaybackConfiguration
+import Amazonka.MediaTailor.Types.PrefetchConsumption
+import Amazonka.MediaTailor.Types.PrefetchRetrieval
+import Amazonka.MediaTailor.Types.PrefetchSchedule
+import Amazonka.MediaTailor.Types.RequestOutputItem
+import Amazonka.MediaTailor.Types.ResponseOutputItem
+import Amazonka.MediaTailor.Types.ScheduleAdBreak
+import Amazonka.MediaTailor.Types.ScheduleConfiguration
+import Amazonka.MediaTailor.Types.ScheduleEntry
+import Amazonka.MediaTailor.Types.SecretsManagerAccessTokenConfiguration
+import Amazonka.MediaTailor.Types.SegmentDeliveryConfiguration
+import Amazonka.MediaTailor.Types.SegmentationDescriptor
+import Amazonka.MediaTailor.Types.SlateSource
+import Amazonka.MediaTailor.Types.SourceLocation
+import Amazonka.MediaTailor.Types.SpliceInsertMessage
+import Amazonka.MediaTailor.Types.TimeSignalMessage
+import Amazonka.MediaTailor.Types.Transition
+import Amazonka.MediaTailor.Types.VodSource
+import Amazonka.MediaTailor.UntagResource
+import Amazonka.MediaTailor.UpdateChannel
+import Amazonka.MediaTailor.UpdateLiveSource
+import Amazonka.MediaTailor.UpdateSourceLocation
+import Amazonka.MediaTailor.UpdateVodSource
diff --git a/gen/Amazonka/MediaTailor/ListAlerts.hs b/gen/Amazonka/MediaTailor/ListAlerts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/ListAlerts.hs
@@ -0,0 +1,239 @@
+{-# 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.MediaTailor.ListAlerts
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the alerts that are associated with a MediaTailor channel assembly
+-- resource.
+--
+-- This operation returns paginated results.
+module Amazonka.MediaTailor.ListAlerts
+  ( -- * Creating a Request
+    ListAlerts (..),
+    newListAlerts,
+
+    -- * Request Lenses
+    listAlerts_maxResults,
+    listAlerts_nextToken,
+    listAlerts_resourceArn,
+
+    -- * Destructuring the Response
+    ListAlertsResponse (..),
+    newListAlertsResponse,
+
+    -- * Response Lenses
+    listAlertsResponse_items,
+    listAlertsResponse_nextToken,
+    listAlertsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAlerts' smart constructor.
+data ListAlerts = ListAlerts'
+  { -- | The maximum number of alerts that you want MediaTailor to return in
+    -- response to the current request. If there are more than @MaxResults@
+    -- alerts, use the value of @NextToken@ in the response to get the next
+    -- page of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Pagination token returned by the list request when results exceed the
+    -- maximum allowed. Use the token to fetch the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the resource.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAlerts' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listAlerts_maxResults' - The maximum number of alerts that you want MediaTailor to return in
+-- response to the current request. If there are more than @MaxResults@
+-- alerts, use the value of @NextToken@ in the response to get the next
+-- page of results.
+--
+-- 'nextToken', 'listAlerts_nextToken' - Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+--
+-- 'resourceArn', 'listAlerts_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+newListAlerts ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListAlerts
+newListAlerts pResourceArn_ =
+  ListAlerts'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      resourceArn = pResourceArn_
+    }
+
+-- | The maximum number of alerts that you want MediaTailor to return in
+-- response to the current request. If there are more than @MaxResults@
+-- alerts, use the value of @NextToken@ in the response to get the next
+-- page of results.
+listAlerts_maxResults :: Lens.Lens' ListAlerts (Prelude.Maybe Prelude.Natural)
+listAlerts_maxResults = Lens.lens (\ListAlerts' {maxResults} -> maxResults) (\s@ListAlerts' {} a -> s {maxResults = a} :: ListAlerts)
+
+-- | Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+listAlerts_nextToken :: Lens.Lens' ListAlerts (Prelude.Maybe Prelude.Text)
+listAlerts_nextToken = Lens.lens (\ListAlerts' {nextToken} -> nextToken) (\s@ListAlerts' {} a -> s {nextToken = a} :: ListAlerts)
+
+-- | The Amazon Resource Name (ARN) of the resource.
+listAlerts_resourceArn :: Lens.Lens' ListAlerts Prelude.Text
+listAlerts_resourceArn = Lens.lens (\ListAlerts' {resourceArn} -> resourceArn) (\s@ListAlerts' {} a -> s {resourceArn = a} :: ListAlerts)
+
+instance Core.AWSPager ListAlerts where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAlertsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listAlertsResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAlerts_nextToken
+          Lens..~ rs
+          Lens.^? listAlertsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListAlerts where
+  type AWSResponse ListAlerts = ListAlertsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAlertsResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAlerts where
+  hashWithSalt _salt ListAlerts' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListAlerts where
+  rnf ListAlerts' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListAlerts where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListAlerts where
+  toPath = Prelude.const "/alerts"
+
+instance Data.ToQuery ListAlerts where
+  toQuery ListAlerts' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "resourceArn" Data.=: resourceArn
+      ]
+
+-- | /See:/ 'newListAlertsResponse' smart constructor.
+data ListAlertsResponse = ListAlertsResponse'
+  { -- | A list of alerts that are associated with this resource.
+    items :: Prelude.Maybe [Alert],
+    -- | Pagination token returned by the list request when results exceed the
+    -- maximum allowed. Use the token to fetch the next page of results.
+    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 'ListAlertsResponse' 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:
+--
+-- 'items', 'listAlertsResponse_items' - A list of alerts that are associated with this resource.
+--
+-- 'nextToken', 'listAlertsResponse_nextToken' - Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+--
+-- 'httpStatus', 'listAlertsResponse_httpStatus' - The response's http status code.
+newListAlertsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAlertsResponse
+newListAlertsResponse pHttpStatus_ =
+  ListAlertsResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of alerts that are associated with this resource.
+listAlertsResponse_items :: Lens.Lens' ListAlertsResponse (Prelude.Maybe [Alert])
+listAlertsResponse_items = Lens.lens (\ListAlertsResponse' {items} -> items) (\s@ListAlertsResponse' {} a -> s {items = a} :: ListAlertsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+listAlertsResponse_nextToken :: Lens.Lens' ListAlertsResponse (Prelude.Maybe Prelude.Text)
+listAlertsResponse_nextToken = Lens.lens (\ListAlertsResponse' {nextToken} -> nextToken) (\s@ListAlertsResponse' {} a -> s {nextToken = a} :: ListAlertsResponse)
+
+-- | The response's http status code.
+listAlertsResponse_httpStatus :: Lens.Lens' ListAlertsResponse Prelude.Int
+listAlertsResponse_httpStatus = Lens.lens (\ListAlertsResponse' {httpStatus} -> httpStatus) (\s@ListAlertsResponse' {} a -> s {httpStatus = a} :: ListAlertsResponse)
+
+instance Prelude.NFData ListAlertsResponse where
+  rnf ListAlertsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/ListChannels.hs b/gen/Amazonka/MediaTailor/ListChannels.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/ListChannels.hs
@@ -0,0 +1,224 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaTailor.ListChannels
+-- 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 information about the channels that are associated with the
+-- current AWS account.
+--
+-- This operation returns paginated results.
+module Amazonka.MediaTailor.ListChannels
+  ( -- * Creating a Request
+    ListChannels (..),
+    newListChannels,
+
+    -- * Request Lenses
+    listChannels_maxResults,
+    listChannels_nextToken,
+
+    -- * Destructuring the Response
+    ListChannelsResponse (..),
+    newListChannelsResponse,
+
+    -- * Response Lenses
+    listChannelsResponse_items,
+    listChannelsResponse_nextToken,
+    listChannelsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListChannels' smart constructor.
+data ListChannels = ListChannels'
+  { -- | The maximum number of channels that you want MediaTailor to return in
+    -- response to the current request. If there are more than @MaxResults@
+    -- channels, use the value of @NextToken@ in the response to get the next
+    -- page of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Pagination token returned by the list request when results exceed the
+    -- maximum allowed. Use the token to fetch the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListChannels' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listChannels_maxResults' - The maximum number of channels that you want MediaTailor to return in
+-- response to the current request. If there are more than @MaxResults@
+-- channels, use the value of @NextToken@ in the response to get the next
+-- page of results.
+--
+-- 'nextToken', 'listChannels_nextToken' - Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+newListChannels ::
+  ListChannels
+newListChannels =
+  ListChannels'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of channels that you want MediaTailor to return in
+-- response to the current request. If there are more than @MaxResults@
+-- channels, use the value of @NextToken@ in the response to get the next
+-- page of results.
+listChannels_maxResults :: Lens.Lens' ListChannels (Prelude.Maybe Prelude.Natural)
+listChannels_maxResults = Lens.lens (\ListChannels' {maxResults} -> maxResults) (\s@ListChannels' {} a -> s {maxResults = a} :: ListChannels)
+
+-- | Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+listChannels_nextToken :: Lens.Lens' ListChannels (Prelude.Maybe Prelude.Text)
+listChannels_nextToken = Lens.lens (\ListChannels' {nextToken} -> nextToken) (\s@ListChannels' {} a -> s {nextToken = a} :: ListChannels)
+
+instance Core.AWSPager ListChannels where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listChannelsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listChannelsResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listChannels_nextToken
+          Lens..~ rs
+          Lens.^? listChannelsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListChannels where
+  type AWSResponse ListChannels = ListChannelsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListChannelsResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListChannels where
+  hashWithSalt _salt ListChannels' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListChannels where
+  rnf ListChannels' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListChannels where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListChannels where
+  toPath = Prelude.const "/channels"
+
+instance Data.ToQuery ListChannels where
+  toQuery ListChannels' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListChannelsResponse' smart constructor.
+data ListChannelsResponse = ListChannelsResponse'
+  { -- | A list of channels that are associated with this account.
+    items :: Prelude.Maybe [Channel],
+    -- | Pagination token returned by the list request when results exceed the
+    -- maximum allowed. Use the token to fetch the next page of results.
+    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 'ListChannelsResponse' 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:
+--
+-- 'items', 'listChannelsResponse_items' - A list of channels that are associated with this account.
+--
+-- 'nextToken', 'listChannelsResponse_nextToken' - Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+--
+-- 'httpStatus', 'listChannelsResponse_httpStatus' - The response's http status code.
+newListChannelsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListChannelsResponse
+newListChannelsResponse pHttpStatus_ =
+  ListChannelsResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of channels that are associated with this account.
+listChannelsResponse_items :: Lens.Lens' ListChannelsResponse (Prelude.Maybe [Channel])
+listChannelsResponse_items = Lens.lens (\ListChannelsResponse' {items} -> items) (\s@ListChannelsResponse' {} a -> s {items = a} :: ListChannelsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+listChannelsResponse_nextToken :: Lens.Lens' ListChannelsResponse (Prelude.Maybe Prelude.Text)
+listChannelsResponse_nextToken = Lens.lens (\ListChannelsResponse' {nextToken} -> nextToken) (\s@ListChannelsResponse' {} a -> s {nextToken = a} :: ListChannelsResponse)
+
+-- | The response's http status code.
+listChannelsResponse_httpStatus :: Lens.Lens' ListChannelsResponse Prelude.Int
+listChannelsResponse_httpStatus = Lens.lens (\ListChannelsResponse' {httpStatus} -> httpStatus) (\s@ListChannelsResponse' {} a -> s {httpStatus = a} :: ListChannelsResponse)
+
+instance Prelude.NFData ListChannelsResponse where
+  rnf ListChannelsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/ListLiveSources.hs b/gen/Amazonka/MediaTailor/ListLiveSources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/ListLiveSources.hs
@@ -0,0 +1,245 @@
+{-# 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.MediaTailor.ListLiveSources
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the live sources contained in a source location. A source
+-- represents a piece of content.
+--
+-- This operation returns paginated results.
+module Amazonka.MediaTailor.ListLiveSources
+  ( -- * Creating a Request
+    ListLiveSources (..),
+    newListLiveSources,
+
+    -- * Request Lenses
+    listLiveSources_maxResults,
+    listLiveSources_nextToken,
+    listLiveSources_sourceLocationName,
+
+    -- * Destructuring the Response
+    ListLiveSourcesResponse (..),
+    newListLiveSourcesResponse,
+
+    -- * Response Lenses
+    listLiveSourcesResponse_items,
+    listLiveSourcesResponse_nextToken,
+    listLiveSourcesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListLiveSources' smart constructor.
+data ListLiveSources = ListLiveSources'
+  { -- | The maximum number of live sources that you want MediaTailor to return
+    -- in response to the current request. If there are more than @MaxResults@
+    -- live sources, use the value of @NextToken@ in the response to get the
+    -- next page of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Pagination token returned by the list request when results exceed the
+    -- maximum allowed. Use the token to fetch the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the source location associated with this Live Sources list.
+    sourceLocationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListLiveSources' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listLiveSources_maxResults' - The maximum number of live sources that you want MediaTailor to return
+-- in response to the current request. If there are more than @MaxResults@
+-- live sources, use the value of @NextToken@ in the response to get the
+-- next page of results.
+--
+-- 'nextToken', 'listLiveSources_nextToken' - Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+--
+-- 'sourceLocationName', 'listLiveSources_sourceLocationName' - The name of the source location associated with this Live Sources list.
+newListLiveSources ::
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  ListLiveSources
+newListLiveSources pSourceLocationName_ =
+  ListLiveSources'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sourceLocationName = pSourceLocationName_
+    }
+
+-- | The maximum number of live sources that you want MediaTailor to return
+-- in response to the current request. If there are more than @MaxResults@
+-- live sources, use the value of @NextToken@ in the response to get the
+-- next page of results.
+listLiveSources_maxResults :: Lens.Lens' ListLiveSources (Prelude.Maybe Prelude.Natural)
+listLiveSources_maxResults = Lens.lens (\ListLiveSources' {maxResults} -> maxResults) (\s@ListLiveSources' {} a -> s {maxResults = a} :: ListLiveSources)
+
+-- | Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+listLiveSources_nextToken :: Lens.Lens' ListLiveSources (Prelude.Maybe Prelude.Text)
+listLiveSources_nextToken = Lens.lens (\ListLiveSources' {nextToken} -> nextToken) (\s@ListLiveSources' {} a -> s {nextToken = a} :: ListLiveSources)
+
+-- | The name of the source location associated with this Live Sources list.
+listLiveSources_sourceLocationName :: Lens.Lens' ListLiveSources Prelude.Text
+listLiveSources_sourceLocationName = Lens.lens (\ListLiveSources' {sourceLocationName} -> sourceLocationName) (\s@ListLiveSources' {} a -> s {sourceLocationName = a} :: ListLiveSources)
+
+instance Core.AWSPager ListLiveSources where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listLiveSourcesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listLiveSourcesResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listLiveSources_nextToken
+          Lens..~ rs
+          Lens.^? listLiveSourcesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListLiveSources where
+  type
+    AWSResponse ListLiveSources =
+      ListLiveSourcesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListLiveSourcesResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListLiveSources where
+  hashWithSalt _salt ListLiveSources' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sourceLocationName
+
+instance Prelude.NFData ListLiveSources where
+  rnf ListLiveSources' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sourceLocationName
+
+instance Data.ToHeaders ListLiveSources where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListLiveSources where
+  toPath ListLiveSources' {..} =
+    Prelude.mconcat
+      [ "/sourceLocation/",
+        Data.toBS sourceLocationName,
+        "/liveSources"
+      ]
+
+instance Data.ToQuery ListLiveSources where
+  toQuery ListLiveSources' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListLiveSourcesResponse' smart constructor.
+data ListLiveSourcesResponse = ListLiveSourcesResponse'
+  { -- | Lists the live sources.
+    items :: Prelude.Maybe [LiveSource],
+    -- | Pagination token returned by the list request when results exceed the
+    -- maximum allowed. Use the token to fetch the next page of results.
+    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 'ListLiveSourcesResponse' 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:
+--
+-- 'items', 'listLiveSourcesResponse_items' - Lists the live sources.
+--
+-- 'nextToken', 'listLiveSourcesResponse_nextToken' - Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+--
+-- 'httpStatus', 'listLiveSourcesResponse_httpStatus' - The response's http status code.
+newListLiveSourcesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListLiveSourcesResponse
+newListLiveSourcesResponse pHttpStatus_ =
+  ListLiveSourcesResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Lists the live sources.
+listLiveSourcesResponse_items :: Lens.Lens' ListLiveSourcesResponse (Prelude.Maybe [LiveSource])
+listLiveSourcesResponse_items = Lens.lens (\ListLiveSourcesResponse' {items} -> items) (\s@ListLiveSourcesResponse' {} a -> s {items = a} :: ListLiveSourcesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+listLiveSourcesResponse_nextToken :: Lens.Lens' ListLiveSourcesResponse (Prelude.Maybe Prelude.Text)
+listLiveSourcesResponse_nextToken = Lens.lens (\ListLiveSourcesResponse' {nextToken} -> nextToken) (\s@ListLiveSourcesResponse' {} a -> s {nextToken = a} :: ListLiveSourcesResponse)
+
+-- | The response's http status code.
+listLiveSourcesResponse_httpStatus :: Lens.Lens' ListLiveSourcesResponse Prelude.Int
+listLiveSourcesResponse_httpStatus = Lens.lens (\ListLiveSourcesResponse' {httpStatus} -> httpStatus) (\s@ListLiveSourcesResponse' {} a -> s {httpStatus = a} :: ListLiveSourcesResponse)
+
+instance Prelude.NFData ListLiveSourcesResponse where
+  rnf ListLiveSourcesResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/ListPlaybackConfigurations.hs b/gen/Amazonka/MediaTailor/ListPlaybackConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/ListPlaybackConfigurations.hs
@@ -0,0 +1,238 @@
+{-# 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.MediaTailor.ListPlaybackConfigurations
+-- 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 existing playback configurations. For information about
+-- MediaTailor configurations, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/configurations.html Working with Configurations in AWS Elemental MediaTailor>.
+--
+-- This operation returns paginated results.
+module Amazonka.MediaTailor.ListPlaybackConfigurations
+  ( -- * Creating a Request
+    ListPlaybackConfigurations (..),
+    newListPlaybackConfigurations,
+
+    -- * Request Lenses
+    listPlaybackConfigurations_maxResults,
+    listPlaybackConfigurations_nextToken,
+
+    -- * Destructuring the Response
+    ListPlaybackConfigurationsResponse (..),
+    newListPlaybackConfigurationsResponse,
+
+    -- * Response Lenses
+    listPlaybackConfigurationsResponse_items,
+    listPlaybackConfigurationsResponse_nextToken,
+    listPlaybackConfigurationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListPlaybackConfigurations' smart constructor.
+data ListPlaybackConfigurations = ListPlaybackConfigurations'
+  { -- | The maximum number of playback configurations that you want MediaTailor
+    -- to return in response to the current request. If there are more than
+    -- @MaxResults@ playback configurations, use the value of @NextToken@ in
+    -- the response to get the next page of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Pagination token returned by the list request when results exceed the
+    -- maximum allowed. Use the token to fetch the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPlaybackConfigurations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listPlaybackConfigurations_maxResults' - The maximum number of playback configurations that you want MediaTailor
+-- to return in response to the current request. If there are more than
+-- @MaxResults@ playback configurations, use the value of @NextToken@ in
+-- the response to get the next page of results.
+--
+-- 'nextToken', 'listPlaybackConfigurations_nextToken' - Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+newListPlaybackConfigurations ::
+  ListPlaybackConfigurations
+newListPlaybackConfigurations =
+  ListPlaybackConfigurations'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of playback configurations that you want MediaTailor
+-- to return in response to the current request. If there are more than
+-- @MaxResults@ playback configurations, use the value of @NextToken@ in
+-- the response to get the next page of results.
+listPlaybackConfigurations_maxResults :: Lens.Lens' ListPlaybackConfigurations (Prelude.Maybe Prelude.Natural)
+listPlaybackConfigurations_maxResults = Lens.lens (\ListPlaybackConfigurations' {maxResults} -> maxResults) (\s@ListPlaybackConfigurations' {} a -> s {maxResults = a} :: ListPlaybackConfigurations)
+
+-- | Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+listPlaybackConfigurations_nextToken :: Lens.Lens' ListPlaybackConfigurations (Prelude.Maybe Prelude.Text)
+listPlaybackConfigurations_nextToken = Lens.lens (\ListPlaybackConfigurations' {nextToken} -> nextToken) (\s@ListPlaybackConfigurations' {} a -> s {nextToken = a} :: ListPlaybackConfigurations)
+
+instance Core.AWSPager ListPlaybackConfigurations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listPlaybackConfigurationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listPlaybackConfigurationsResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listPlaybackConfigurations_nextToken
+          Lens..~ rs
+          Lens.^? listPlaybackConfigurationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListPlaybackConfigurations where
+  type
+    AWSResponse ListPlaybackConfigurations =
+      ListPlaybackConfigurationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListPlaybackConfigurationsResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListPlaybackConfigurations where
+  hashWithSalt _salt ListPlaybackConfigurations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListPlaybackConfigurations where
+  rnf ListPlaybackConfigurations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListPlaybackConfigurations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListPlaybackConfigurations where
+  toPath = Prelude.const "/playbackConfigurations"
+
+instance Data.ToQuery ListPlaybackConfigurations where
+  toQuery ListPlaybackConfigurations' {..} =
+    Prelude.mconcat
+      [ "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListPlaybackConfigurationsResponse' smart constructor.
+data ListPlaybackConfigurationsResponse = ListPlaybackConfigurationsResponse'
+  { -- | Array of playback configurations. This might be all the available
+    -- configurations or a subset, depending on the settings that you provide
+    -- and the total number of configurations stored.
+    items :: Prelude.Maybe [PlaybackConfiguration],
+    -- | Pagination token returned by the GET list request when results exceed
+    -- the maximum allowed. Use the token to fetch the next page of results.
+    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 'ListPlaybackConfigurationsResponse' 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:
+--
+-- 'items', 'listPlaybackConfigurationsResponse_items' - Array of playback configurations. This might be all the available
+-- configurations or a subset, depending on the settings that you provide
+-- and the total number of configurations stored.
+--
+-- 'nextToken', 'listPlaybackConfigurationsResponse_nextToken' - Pagination token returned by the GET list request when results exceed
+-- the maximum allowed. Use the token to fetch the next page of results.
+--
+-- 'httpStatus', 'listPlaybackConfigurationsResponse_httpStatus' - The response's http status code.
+newListPlaybackConfigurationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListPlaybackConfigurationsResponse
+newListPlaybackConfigurationsResponse pHttpStatus_ =
+  ListPlaybackConfigurationsResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Array of playback configurations. This might be all the available
+-- configurations or a subset, depending on the settings that you provide
+-- and the total number of configurations stored.
+listPlaybackConfigurationsResponse_items :: Lens.Lens' ListPlaybackConfigurationsResponse (Prelude.Maybe [PlaybackConfiguration])
+listPlaybackConfigurationsResponse_items = Lens.lens (\ListPlaybackConfigurationsResponse' {items} -> items) (\s@ListPlaybackConfigurationsResponse' {} a -> s {items = a} :: ListPlaybackConfigurationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Pagination token returned by the GET list request when results exceed
+-- the maximum allowed. Use the token to fetch the next page of results.
+listPlaybackConfigurationsResponse_nextToken :: Lens.Lens' ListPlaybackConfigurationsResponse (Prelude.Maybe Prelude.Text)
+listPlaybackConfigurationsResponse_nextToken = Lens.lens (\ListPlaybackConfigurationsResponse' {nextToken} -> nextToken) (\s@ListPlaybackConfigurationsResponse' {} a -> s {nextToken = a} :: ListPlaybackConfigurationsResponse)
+
+-- | The response's http status code.
+listPlaybackConfigurationsResponse_httpStatus :: Lens.Lens' ListPlaybackConfigurationsResponse Prelude.Int
+listPlaybackConfigurationsResponse_httpStatus = Lens.lens (\ListPlaybackConfigurationsResponse' {httpStatus} -> httpStatus) (\s@ListPlaybackConfigurationsResponse' {} a -> s {httpStatus = a} :: ListPlaybackConfigurationsResponse)
+
+instance
+  Prelude.NFData
+    ListPlaybackConfigurationsResponse
+  where
+  rnf ListPlaybackConfigurationsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/ListPrefetchSchedules.hs b/gen/Amazonka/MediaTailor/ListPrefetchSchedules.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/ListPrefetchSchedules.hs
@@ -0,0 +1,303 @@
+{-# 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.MediaTailor.ListPrefetchSchedules
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the prefetch schedules for a playback configuration.
+--
+-- This operation returns paginated results.
+module Amazonka.MediaTailor.ListPrefetchSchedules
+  ( -- * Creating a Request
+    ListPrefetchSchedules (..),
+    newListPrefetchSchedules,
+
+    -- * Request Lenses
+    listPrefetchSchedules_maxResults,
+    listPrefetchSchedules_nextToken,
+    listPrefetchSchedules_streamId,
+    listPrefetchSchedules_playbackConfigurationName,
+
+    -- * Destructuring the Response
+    ListPrefetchSchedulesResponse (..),
+    newListPrefetchSchedulesResponse,
+
+    -- * Response Lenses
+    listPrefetchSchedulesResponse_items,
+    listPrefetchSchedulesResponse_nextToken,
+    listPrefetchSchedulesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListPrefetchSchedules' smart constructor.
+data ListPrefetchSchedules = ListPrefetchSchedules'
+  { -- | The maximum number of prefetch schedules that you want MediaTailor to
+    -- return in response to the current request. If there are more than
+    -- @MaxResults@ prefetch schedules, use the value of @NextToken@ in the
+    -- response to get the next page of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | (Optional) If the playback configuration has more than @MaxResults@
+    -- prefetch schedules, use @NextToken@ to get the second and subsequent
+    -- pages of results.
+    --
+    -- For the first @ListPrefetchSchedulesRequest@ request, omit this value.
+    --
+    -- For the second and subsequent requests, get the value of @NextToken@
+    -- from the previous response and specify that value for @NextToken@ in the
+    -- request.
+    --
+    -- If the previous response didn\'t include a @NextToken@ element, there
+    -- are no more prefetch schedules to get.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An optional filtering parameter whereby MediaTailor filters the prefetch
+    -- schedules to include only specific streams.
+    streamId :: Prelude.Maybe Prelude.Text,
+    -- | Retrieves the prefetch schedule(s) for a specific playback
+    -- configuration.
+    playbackConfigurationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPrefetchSchedules' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listPrefetchSchedules_maxResults' - The maximum number of prefetch schedules that you want MediaTailor to
+-- return in response to the current request. If there are more than
+-- @MaxResults@ prefetch schedules, use the value of @NextToken@ in the
+-- response to get the next page of results.
+--
+-- 'nextToken', 'listPrefetchSchedules_nextToken' - (Optional) If the playback configuration has more than @MaxResults@
+-- prefetch schedules, use @NextToken@ to get the second and subsequent
+-- pages of results.
+--
+-- For the first @ListPrefetchSchedulesRequest@ request, omit this value.
+--
+-- For the second and subsequent requests, get the value of @NextToken@
+-- from the previous response and specify that value for @NextToken@ in the
+-- request.
+--
+-- If the previous response didn\'t include a @NextToken@ element, there
+-- are no more prefetch schedules to get.
+--
+-- 'streamId', 'listPrefetchSchedules_streamId' - An optional filtering parameter whereby MediaTailor filters the prefetch
+-- schedules to include only specific streams.
+--
+-- 'playbackConfigurationName', 'listPrefetchSchedules_playbackConfigurationName' - Retrieves the prefetch schedule(s) for a specific playback
+-- configuration.
+newListPrefetchSchedules ::
+  -- | 'playbackConfigurationName'
+  Prelude.Text ->
+  ListPrefetchSchedules
+newListPrefetchSchedules pPlaybackConfigurationName_ =
+  ListPrefetchSchedules'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      streamId = Prelude.Nothing,
+      playbackConfigurationName =
+        pPlaybackConfigurationName_
+    }
+
+-- | The maximum number of prefetch schedules that you want MediaTailor to
+-- return in response to the current request. If there are more than
+-- @MaxResults@ prefetch schedules, use the value of @NextToken@ in the
+-- response to get the next page of results.
+listPrefetchSchedules_maxResults :: Lens.Lens' ListPrefetchSchedules (Prelude.Maybe Prelude.Natural)
+listPrefetchSchedules_maxResults = Lens.lens (\ListPrefetchSchedules' {maxResults} -> maxResults) (\s@ListPrefetchSchedules' {} a -> s {maxResults = a} :: ListPrefetchSchedules)
+
+-- | (Optional) If the playback configuration has more than @MaxResults@
+-- prefetch schedules, use @NextToken@ to get the second and subsequent
+-- pages of results.
+--
+-- For the first @ListPrefetchSchedulesRequest@ request, omit this value.
+--
+-- For the second and subsequent requests, get the value of @NextToken@
+-- from the previous response and specify that value for @NextToken@ in the
+-- request.
+--
+-- If the previous response didn\'t include a @NextToken@ element, there
+-- are no more prefetch schedules to get.
+listPrefetchSchedules_nextToken :: Lens.Lens' ListPrefetchSchedules (Prelude.Maybe Prelude.Text)
+listPrefetchSchedules_nextToken = Lens.lens (\ListPrefetchSchedules' {nextToken} -> nextToken) (\s@ListPrefetchSchedules' {} a -> s {nextToken = a} :: ListPrefetchSchedules)
+
+-- | An optional filtering parameter whereby MediaTailor filters the prefetch
+-- schedules to include only specific streams.
+listPrefetchSchedules_streamId :: Lens.Lens' ListPrefetchSchedules (Prelude.Maybe Prelude.Text)
+listPrefetchSchedules_streamId = Lens.lens (\ListPrefetchSchedules' {streamId} -> streamId) (\s@ListPrefetchSchedules' {} a -> s {streamId = a} :: ListPrefetchSchedules)
+
+-- | Retrieves the prefetch schedule(s) for a specific playback
+-- configuration.
+listPrefetchSchedules_playbackConfigurationName :: Lens.Lens' ListPrefetchSchedules Prelude.Text
+listPrefetchSchedules_playbackConfigurationName = Lens.lens (\ListPrefetchSchedules' {playbackConfigurationName} -> playbackConfigurationName) (\s@ListPrefetchSchedules' {} a -> s {playbackConfigurationName = a} :: ListPrefetchSchedules)
+
+instance Core.AWSPager ListPrefetchSchedules where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listPrefetchSchedulesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listPrefetchSchedulesResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listPrefetchSchedules_nextToken
+          Lens..~ rs
+          Lens.^? listPrefetchSchedulesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListPrefetchSchedules where
+  type
+    AWSResponse ListPrefetchSchedules =
+      ListPrefetchSchedulesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListPrefetchSchedulesResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListPrefetchSchedules where
+  hashWithSalt _salt ListPrefetchSchedules' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` streamId
+      `Prelude.hashWithSalt` playbackConfigurationName
+
+instance Prelude.NFData ListPrefetchSchedules where
+  rnf ListPrefetchSchedules' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf streamId
+      `Prelude.seq` Prelude.rnf playbackConfigurationName
+
+instance Data.ToHeaders ListPrefetchSchedules where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListPrefetchSchedules where
+  toJSON ListPrefetchSchedules' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("StreamId" Data..=) Prelude.<$> streamId
+          ]
+      )
+
+instance Data.ToPath ListPrefetchSchedules where
+  toPath ListPrefetchSchedules' {..} =
+    Prelude.mconcat
+      [ "/prefetchSchedule/",
+        Data.toBS playbackConfigurationName
+      ]
+
+instance Data.ToQuery ListPrefetchSchedules where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListPrefetchSchedulesResponse' smart constructor.
+data ListPrefetchSchedulesResponse = ListPrefetchSchedulesResponse'
+  { -- | Lists the prefetch schedules. An empty @Items@ list doesn\'t mean there
+    -- aren\'t more items to fetch, just that that page was empty.
+    items :: Prelude.Maybe [PrefetchSchedule],
+    -- | Pagination token returned by the list request when results exceed the
+    -- maximum allowed. Use the token to fetch the next page of results.
+    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 'ListPrefetchSchedulesResponse' 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:
+--
+-- 'items', 'listPrefetchSchedulesResponse_items' - Lists the prefetch schedules. An empty @Items@ list doesn\'t mean there
+-- aren\'t more items to fetch, just that that page was empty.
+--
+-- 'nextToken', 'listPrefetchSchedulesResponse_nextToken' - Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+--
+-- 'httpStatus', 'listPrefetchSchedulesResponse_httpStatus' - The response's http status code.
+newListPrefetchSchedulesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListPrefetchSchedulesResponse
+newListPrefetchSchedulesResponse pHttpStatus_ =
+  ListPrefetchSchedulesResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Lists the prefetch schedules. An empty @Items@ list doesn\'t mean there
+-- aren\'t more items to fetch, just that that page was empty.
+listPrefetchSchedulesResponse_items :: Lens.Lens' ListPrefetchSchedulesResponse (Prelude.Maybe [PrefetchSchedule])
+listPrefetchSchedulesResponse_items = Lens.lens (\ListPrefetchSchedulesResponse' {items} -> items) (\s@ListPrefetchSchedulesResponse' {} a -> s {items = a} :: ListPrefetchSchedulesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+listPrefetchSchedulesResponse_nextToken :: Lens.Lens' ListPrefetchSchedulesResponse (Prelude.Maybe Prelude.Text)
+listPrefetchSchedulesResponse_nextToken = Lens.lens (\ListPrefetchSchedulesResponse' {nextToken} -> nextToken) (\s@ListPrefetchSchedulesResponse' {} a -> s {nextToken = a} :: ListPrefetchSchedulesResponse)
+
+-- | The response's http status code.
+listPrefetchSchedulesResponse_httpStatus :: Lens.Lens' ListPrefetchSchedulesResponse Prelude.Int
+listPrefetchSchedulesResponse_httpStatus = Lens.lens (\ListPrefetchSchedulesResponse' {httpStatus} -> httpStatus) (\s@ListPrefetchSchedulesResponse' {} a -> s {httpStatus = a} :: ListPrefetchSchedulesResponse)
+
+instance Prelude.NFData ListPrefetchSchedulesResponse where
+  rnf ListPrefetchSchedulesResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/ListSourceLocations.hs b/gen/Amazonka/MediaTailor/ListSourceLocations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/ListSourceLocations.hs
@@ -0,0 +1,227 @@
+{-# 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.MediaTailor.ListSourceLocations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the source locations for a channel. A source location defines the
+-- host server URL, and contains a list of sources.
+--
+-- This operation returns paginated results.
+module Amazonka.MediaTailor.ListSourceLocations
+  ( -- * Creating a Request
+    ListSourceLocations (..),
+    newListSourceLocations,
+
+    -- * Request Lenses
+    listSourceLocations_maxResults,
+    listSourceLocations_nextToken,
+
+    -- * Destructuring the Response
+    ListSourceLocationsResponse (..),
+    newListSourceLocationsResponse,
+
+    -- * Response Lenses
+    listSourceLocationsResponse_items,
+    listSourceLocationsResponse_nextToken,
+    listSourceLocationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSourceLocations' smart constructor.
+data ListSourceLocations = ListSourceLocations'
+  { -- | The maximum number of source locations that you want MediaTailor to
+    -- return in response to the current request. If there are more than
+    -- @MaxResults@ source locations, use the value of @NextToken@ in the
+    -- response to get the next page of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Pagination token returned by the list request when results exceed the
+    -- maximum allowed. Use the token to fetch the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSourceLocations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listSourceLocations_maxResults' - The maximum number of source locations that you want MediaTailor to
+-- return in response to the current request. If there are more than
+-- @MaxResults@ source locations, use the value of @NextToken@ in the
+-- response to get the next page of results.
+--
+-- 'nextToken', 'listSourceLocations_nextToken' - Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+newListSourceLocations ::
+  ListSourceLocations
+newListSourceLocations =
+  ListSourceLocations'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of source locations that you want MediaTailor to
+-- return in response to the current request. If there are more than
+-- @MaxResults@ source locations, use the value of @NextToken@ in the
+-- response to get the next page of results.
+listSourceLocations_maxResults :: Lens.Lens' ListSourceLocations (Prelude.Maybe Prelude.Natural)
+listSourceLocations_maxResults = Lens.lens (\ListSourceLocations' {maxResults} -> maxResults) (\s@ListSourceLocations' {} a -> s {maxResults = a} :: ListSourceLocations)
+
+-- | Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+listSourceLocations_nextToken :: Lens.Lens' ListSourceLocations (Prelude.Maybe Prelude.Text)
+listSourceLocations_nextToken = Lens.lens (\ListSourceLocations' {nextToken} -> nextToken) (\s@ListSourceLocations' {} a -> s {nextToken = a} :: ListSourceLocations)
+
+instance Core.AWSPager ListSourceLocations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSourceLocationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listSourceLocationsResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSourceLocations_nextToken
+          Lens..~ rs
+          Lens.^? listSourceLocationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListSourceLocations where
+  type
+    AWSResponse ListSourceLocations =
+      ListSourceLocationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSourceLocationsResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSourceLocations where
+  hashWithSalt _salt ListSourceLocations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListSourceLocations where
+  rnf ListSourceLocations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListSourceLocations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListSourceLocations where
+  toPath = Prelude.const "/sourceLocations"
+
+instance Data.ToQuery ListSourceLocations where
+  toQuery ListSourceLocations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListSourceLocationsResponse' smart constructor.
+data ListSourceLocationsResponse = ListSourceLocationsResponse'
+  { -- | A list of source locations.
+    items :: Prelude.Maybe [SourceLocation],
+    -- | Pagination token returned by the list request when results exceed the
+    -- maximum allowed. Use the token to fetch the next page of results.
+    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 'ListSourceLocationsResponse' 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:
+--
+-- 'items', 'listSourceLocationsResponse_items' - A list of source locations.
+--
+-- 'nextToken', 'listSourceLocationsResponse_nextToken' - Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+--
+-- 'httpStatus', 'listSourceLocationsResponse_httpStatus' - The response's http status code.
+newListSourceLocationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSourceLocationsResponse
+newListSourceLocationsResponse pHttpStatus_ =
+  ListSourceLocationsResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of source locations.
+listSourceLocationsResponse_items :: Lens.Lens' ListSourceLocationsResponse (Prelude.Maybe [SourceLocation])
+listSourceLocationsResponse_items = Lens.lens (\ListSourceLocationsResponse' {items} -> items) (\s@ListSourceLocationsResponse' {} a -> s {items = a} :: ListSourceLocationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+listSourceLocationsResponse_nextToken :: Lens.Lens' ListSourceLocationsResponse (Prelude.Maybe Prelude.Text)
+listSourceLocationsResponse_nextToken = Lens.lens (\ListSourceLocationsResponse' {nextToken} -> nextToken) (\s@ListSourceLocationsResponse' {} a -> s {nextToken = a} :: ListSourceLocationsResponse)
+
+-- | The response's http status code.
+listSourceLocationsResponse_httpStatus :: Lens.Lens' ListSourceLocationsResponse Prelude.Int
+listSourceLocationsResponse_httpStatus = Lens.lens (\ListSourceLocationsResponse' {httpStatus} -> httpStatus) (\s@ListSourceLocationsResponse' {} a -> s {httpStatus = a} :: ListSourceLocationsResponse)
+
+instance Prelude.NFData ListSourceLocationsResponse where
+  rnf ListSourceLocationsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/ListTagsForResource.hs b/gen/Amazonka/MediaTailor/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/ListTagsForResource.hs
@@ -0,0 +1,172 @@
+{-# 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.MediaTailor.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- A list of tags that are associated with this resource. Tags are
+-- key-value pairs that you can associate with Amazon resources to help
+-- with organization, access control, and cost tracking. For more
+-- information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+module Amazonka.MediaTailor.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) associated with this resource.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) associated with this resource.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) associated with this resource.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The tags associated with this resource. Tags are key-value pairs that
+    -- you can associate with Amazon resources to help with organization,
+    -- access control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The tags associated with this resource. Tags are key-value pairs that
+-- you can associate with Amazon resources to help with organization,
+-- access control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tags associated with this resource. Tags are key-value pairs that
+-- you can associate with Amazon resources to help with organization,
+-- access control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/ListVodSources.hs b/gen/Amazonka/MediaTailor/ListVodSources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/ListVodSources.hs
@@ -0,0 +1,245 @@
+{-# 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.MediaTailor.ListVodSources
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the VOD sources contained in a source location. A source
+-- represents a piece of content.
+--
+-- This operation returns paginated results.
+module Amazonka.MediaTailor.ListVodSources
+  ( -- * Creating a Request
+    ListVodSources (..),
+    newListVodSources,
+
+    -- * Request Lenses
+    listVodSources_maxResults,
+    listVodSources_nextToken,
+    listVodSources_sourceLocationName,
+
+    -- * Destructuring the Response
+    ListVodSourcesResponse (..),
+    newListVodSourcesResponse,
+
+    -- * Response Lenses
+    listVodSourcesResponse_items,
+    listVodSourcesResponse_nextToken,
+    listVodSourcesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListVodSources' smart constructor.
+data ListVodSources = ListVodSources'
+  { -- | The maximum number of VOD sources that you want MediaTailor to return in
+    -- response to the current request. If there are more than @MaxResults@ VOD
+    -- sources, use the value of @NextToken@ in the response to get the next
+    -- page of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Pagination token returned by the list request when results exceed the
+    -- maximum allowed. Use the token to fetch the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the source location associated with this VOD Source list.
+    sourceLocationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListVodSources' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listVodSources_maxResults' - The maximum number of VOD sources that you want MediaTailor to return in
+-- response to the current request. If there are more than @MaxResults@ VOD
+-- sources, use the value of @NextToken@ in the response to get the next
+-- page of results.
+--
+-- 'nextToken', 'listVodSources_nextToken' - Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+--
+-- 'sourceLocationName', 'listVodSources_sourceLocationName' - The name of the source location associated with this VOD Source list.
+newListVodSources ::
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  ListVodSources
+newListVodSources pSourceLocationName_ =
+  ListVodSources'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sourceLocationName = pSourceLocationName_
+    }
+
+-- | The maximum number of VOD sources that you want MediaTailor to return in
+-- response to the current request. If there are more than @MaxResults@ VOD
+-- sources, use the value of @NextToken@ in the response to get the next
+-- page of results.
+listVodSources_maxResults :: Lens.Lens' ListVodSources (Prelude.Maybe Prelude.Natural)
+listVodSources_maxResults = Lens.lens (\ListVodSources' {maxResults} -> maxResults) (\s@ListVodSources' {} a -> s {maxResults = a} :: ListVodSources)
+
+-- | Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+listVodSources_nextToken :: Lens.Lens' ListVodSources (Prelude.Maybe Prelude.Text)
+listVodSources_nextToken = Lens.lens (\ListVodSources' {nextToken} -> nextToken) (\s@ListVodSources' {} a -> s {nextToken = a} :: ListVodSources)
+
+-- | The name of the source location associated with this VOD Source list.
+listVodSources_sourceLocationName :: Lens.Lens' ListVodSources Prelude.Text
+listVodSources_sourceLocationName = Lens.lens (\ListVodSources' {sourceLocationName} -> sourceLocationName) (\s@ListVodSources' {} a -> s {sourceLocationName = a} :: ListVodSources)
+
+instance Core.AWSPager ListVodSources where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listVodSourcesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listVodSourcesResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listVodSources_nextToken
+          Lens..~ rs
+          Lens.^? listVodSourcesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListVodSources where
+  type
+    AWSResponse ListVodSources =
+      ListVodSourcesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListVodSourcesResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListVodSources where
+  hashWithSalt _salt ListVodSources' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sourceLocationName
+
+instance Prelude.NFData ListVodSources where
+  rnf ListVodSources' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sourceLocationName
+
+instance Data.ToHeaders ListVodSources where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListVodSources where
+  toPath ListVodSources' {..} =
+    Prelude.mconcat
+      [ "/sourceLocation/",
+        Data.toBS sourceLocationName,
+        "/vodSources"
+      ]
+
+instance Data.ToQuery ListVodSources where
+  toQuery ListVodSources' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListVodSourcesResponse' smart constructor.
+data ListVodSourcesResponse = ListVodSourcesResponse'
+  { -- | Lists the VOD sources.
+    items :: Prelude.Maybe [VodSource],
+    -- | Pagination token returned by the list request when results exceed the
+    -- maximum allowed. Use the token to fetch the next page of results.
+    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 'ListVodSourcesResponse' 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:
+--
+-- 'items', 'listVodSourcesResponse_items' - Lists the VOD sources.
+--
+-- 'nextToken', 'listVodSourcesResponse_nextToken' - Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+--
+-- 'httpStatus', 'listVodSourcesResponse_httpStatus' - The response's http status code.
+newListVodSourcesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListVodSourcesResponse
+newListVodSourcesResponse pHttpStatus_ =
+  ListVodSourcesResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Lists the VOD sources.
+listVodSourcesResponse_items :: Lens.Lens' ListVodSourcesResponse (Prelude.Maybe [VodSource])
+listVodSourcesResponse_items = Lens.lens (\ListVodSourcesResponse' {items} -> items) (\s@ListVodSourcesResponse' {} a -> s {items = a} :: ListVodSourcesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Pagination token returned by the list request when results exceed the
+-- maximum allowed. Use the token to fetch the next page of results.
+listVodSourcesResponse_nextToken :: Lens.Lens' ListVodSourcesResponse (Prelude.Maybe Prelude.Text)
+listVodSourcesResponse_nextToken = Lens.lens (\ListVodSourcesResponse' {nextToken} -> nextToken) (\s@ListVodSourcesResponse' {} a -> s {nextToken = a} :: ListVodSourcesResponse)
+
+-- | The response's http status code.
+listVodSourcesResponse_httpStatus :: Lens.Lens' ListVodSourcesResponse Prelude.Int
+listVodSourcesResponse_httpStatus = Lens.lens (\ListVodSourcesResponse' {httpStatus} -> httpStatus) (\s@ListVodSourcesResponse' {} a -> s {httpStatus = a} :: ListVodSourcesResponse)
+
+instance Prelude.NFData ListVodSourcesResponse where
+  rnf ListVodSourcesResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/PutChannelPolicy.hs b/gen/Amazonka/MediaTailor/PutChannelPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/PutChannelPolicy.hs
@@ -0,0 +1,173 @@
+{-# 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.MediaTailor.PutChannelPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an IAM policy for the channel. IAM policies are used to control
+-- access to your channel.
+module Amazonka.MediaTailor.PutChannelPolicy
+  ( -- * Creating a Request
+    PutChannelPolicy (..),
+    newPutChannelPolicy,
+
+    -- * Request Lenses
+    putChannelPolicy_channelName,
+    putChannelPolicy_policy,
+
+    -- * Destructuring the Response
+    PutChannelPolicyResponse (..),
+    newPutChannelPolicyResponse,
+
+    -- * Response Lenses
+    putChannelPolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutChannelPolicy' smart constructor.
+data PutChannelPolicy = PutChannelPolicy'
+  { -- | The channel name associated with this Channel Policy.
+    channelName :: Prelude.Text,
+    -- | Adds an IAM role that determines the permissions of your channel.
+    policy :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutChannelPolicy' 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:
+--
+-- 'channelName', 'putChannelPolicy_channelName' - The channel name associated with this Channel Policy.
+--
+-- 'policy', 'putChannelPolicy_policy' - Adds an IAM role that determines the permissions of your channel.
+newPutChannelPolicy ::
+  -- | 'channelName'
+  Prelude.Text ->
+  -- | 'policy'
+  Prelude.Text ->
+  PutChannelPolicy
+newPutChannelPolicy pChannelName_ pPolicy_ =
+  PutChannelPolicy'
+    { channelName = pChannelName_,
+      policy = pPolicy_
+    }
+
+-- | The channel name associated with this Channel Policy.
+putChannelPolicy_channelName :: Lens.Lens' PutChannelPolicy Prelude.Text
+putChannelPolicy_channelName = Lens.lens (\PutChannelPolicy' {channelName} -> channelName) (\s@PutChannelPolicy' {} a -> s {channelName = a} :: PutChannelPolicy)
+
+-- | Adds an IAM role that determines the permissions of your channel.
+putChannelPolicy_policy :: Lens.Lens' PutChannelPolicy Prelude.Text
+putChannelPolicy_policy = Lens.lens (\PutChannelPolicy' {policy} -> policy) (\s@PutChannelPolicy' {} a -> s {policy = a} :: PutChannelPolicy)
+
+instance Core.AWSRequest PutChannelPolicy where
+  type
+    AWSResponse PutChannelPolicy =
+      PutChannelPolicyResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutChannelPolicyResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutChannelPolicy where
+  hashWithSalt _salt PutChannelPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` channelName
+      `Prelude.hashWithSalt` policy
+
+instance Prelude.NFData PutChannelPolicy where
+  rnf PutChannelPolicy' {..} =
+    Prelude.rnf channelName
+      `Prelude.seq` Prelude.rnf policy
+
+instance Data.ToHeaders PutChannelPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutChannelPolicy where
+  toJSON PutChannelPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Policy" Data..= policy)]
+      )
+
+instance Data.ToPath PutChannelPolicy where
+  toPath PutChannelPolicy' {..} =
+    Prelude.mconcat
+      ["/channel/", Data.toBS channelName, "/policy"]
+
+instance Data.ToQuery PutChannelPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutChannelPolicyResponse' smart constructor.
+data PutChannelPolicyResponse = PutChannelPolicyResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutChannelPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'putChannelPolicyResponse_httpStatus' - The response's http status code.
+newPutChannelPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutChannelPolicyResponse
+newPutChannelPolicyResponse pHttpStatus_ =
+  PutChannelPolicyResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putChannelPolicyResponse_httpStatus :: Lens.Lens' PutChannelPolicyResponse Prelude.Int
+putChannelPolicyResponse_httpStatus = Lens.lens (\PutChannelPolicyResponse' {httpStatus} -> httpStatus) (\s@PutChannelPolicyResponse' {} a -> s {httpStatus = a} :: PutChannelPolicyResponse)
+
+instance Prelude.NFData PutChannelPolicyResponse where
+  rnf PutChannelPolicyResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/PutPlaybackConfiguration.hs b/gen/Amazonka/MediaTailor/PutPlaybackConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/PutPlaybackConfiguration.hs
@@ -0,0 +1,801 @@
+{-# 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.MediaTailor.PutPlaybackConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a playback configuration. For information about MediaTailor
+-- configurations, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/configurations.html Working with configurations in AWS Elemental MediaTailor>.
+module Amazonka.MediaTailor.PutPlaybackConfiguration
+  ( -- * Creating a Request
+    PutPlaybackConfiguration (..),
+    newPutPlaybackConfiguration,
+
+    -- * Request Lenses
+    putPlaybackConfiguration_adDecisionServerUrl,
+    putPlaybackConfiguration_availSuppression,
+    putPlaybackConfiguration_bumper,
+    putPlaybackConfiguration_cdnConfiguration,
+    putPlaybackConfiguration_configurationAliases,
+    putPlaybackConfiguration_dashConfiguration,
+    putPlaybackConfiguration_livePreRollConfiguration,
+    putPlaybackConfiguration_manifestProcessingRules,
+    putPlaybackConfiguration_personalizationThresholdSeconds,
+    putPlaybackConfiguration_slateAdUrl,
+    putPlaybackConfiguration_tags,
+    putPlaybackConfiguration_transcodeProfileName,
+    putPlaybackConfiguration_videoContentSourceUrl,
+    putPlaybackConfiguration_name,
+
+    -- * Destructuring the Response
+    PutPlaybackConfigurationResponse (..),
+    newPutPlaybackConfigurationResponse,
+
+    -- * Response Lenses
+    putPlaybackConfigurationResponse_adDecisionServerUrl,
+    putPlaybackConfigurationResponse_availSuppression,
+    putPlaybackConfigurationResponse_bumper,
+    putPlaybackConfigurationResponse_cdnConfiguration,
+    putPlaybackConfigurationResponse_configurationAliases,
+    putPlaybackConfigurationResponse_dashConfiguration,
+    putPlaybackConfigurationResponse_hlsConfiguration,
+    putPlaybackConfigurationResponse_livePreRollConfiguration,
+    putPlaybackConfigurationResponse_logConfiguration,
+    putPlaybackConfigurationResponse_manifestProcessingRules,
+    putPlaybackConfigurationResponse_name,
+    putPlaybackConfigurationResponse_personalizationThresholdSeconds,
+    putPlaybackConfigurationResponse_playbackConfigurationArn,
+    putPlaybackConfigurationResponse_playbackEndpointPrefix,
+    putPlaybackConfigurationResponse_sessionInitializationEndpointPrefix,
+    putPlaybackConfigurationResponse_slateAdUrl,
+    putPlaybackConfigurationResponse_tags,
+    putPlaybackConfigurationResponse_transcodeProfileName,
+    putPlaybackConfigurationResponse_videoContentSourceUrl,
+    putPlaybackConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutPlaybackConfiguration' smart constructor.
+data PutPlaybackConfiguration = PutPlaybackConfiguration'
+  { -- | The URL for the ad decision server (ADS). This includes the
+    -- specification of static parameters and placeholders for dynamic
+    -- parameters. AWS Elemental MediaTailor substitutes player-specific and
+    -- session-specific parameters as needed when calling the ADS. Alternately,
+    -- for testing you can provide a static VAST URL. The maximum length is
+    -- 25,000 characters.
+    adDecisionServerUrl :: Prelude.Maybe Prelude.Text,
+    -- | The configuration for avail suppression, also known as ad suppression.
+    -- For more information about ad suppression, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Suppression>.
+    availSuppression :: Prelude.Maybe AvailSuppression,
+    -- | The configuration for bumpers. Bumpers are short audio or video clips
+    -- that play at the start or before the end of an ad break. To learn more
+    -- about bumpers, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/bumpers.html Bumpers>.
+    bumper :: Prelude.Maybe Bumper,
+    -- | The configuration for using a content delivery network (CDN), like
+    -- Amazon CloudFront, for content and ad segment management.
+    cdnConfiguration :: Prelude.Maybe CdnConfiguration,
+    -- | The player parameters and aliases used as dynamic variables during
+    -- session initialization. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domain.html Domain Variables>.
+    configurationAliases :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The configuration for DASH content.
+    dashConfiguration :: Prelude.Maybe DashConfigurationForPut,
+    -- | The configuration for pre-roll ad insertion.
+    livePreRollConfiguration :: Prelude.Maybe LivePreRollConfiguration,
+    -- | The configuration for manifest processing rules. Manifest processing
+    -- rules enable customization of the personalized manifests created by
+    -- MediaTailor.
+    manifestProcessingRules :: Prelude.Maybe ManifestProcessingRules,
+    -- | Defines the maximum duration of underfilled ad time (in seconds) allowed
+    -- in an ad break. If the duration of underfilled ad time exceeds the
+    -- personalization threshold, then the personalization of the ad break is
+    -- abandoned and the underlying content is shown. This feature applies to
+    -- /ad replacement/ in live and VOD streams, rather than ad insertion,
+    -- because it relies on an underlying content stream. For more information
+    -- about ad break behavior, including ad replacement and insertion, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Behavior in AWS Elemental MediaTailor>.
+    personalizationThresholdSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | The URL for a high-quality video asset to transcode and use to fill in
+    -- time that\'s not used by ads. AWS Elemental MediaTailor shows the slate
+    -- to fill in gaps in media content. Configuring the slate is optional for
+    -- non-VPAID configurations. For VPAID, the slate is required because
+    -- MediaTailor provides it in the slots that are designated for dynamic ad
+    -- content. The slate must be a high-quality asset that contains both audio
+    -- and video.
+    slateAdUrl :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the playback configuration. Tags are key-value
+    -- pairs that you can associate with Amazon resources to help with
+    -- organization, access control, and cost tracking. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name that is used to associate this playback configuration with a
+    -- custom transcode profile. This overrides the dynamic transcoding
+    -- defaults of MediaTailor. Use this only if you have already set up custom
+    -- profiles with the help of AWS Support.
+    transcodeProfileName :: Prelude.Maybe Prelude.Text,
+    -- | The URL prefix for the parent manifest for the stream, minus the asset
+    -- ID. The maximum length is 512 characters.
+    videoContentSourceUrl :: Prelude.Maybe Prelude.Text,
+    -- | The identifier for the playback configuration.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutPlaybackConfiguration' 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:
+--
+-- 'adDecisionServerUrl', 'putPlaybackConfiguration_adDecisionServerUrl' - The URL for the ad decision server (ADS). This includes the
+-- specification of static parameters and placeholders for dynamic
+-- parameters. AWS Elemental MediaTailor substitutes player-specific and
+-- session-specific parameters as needed when calling the ADS. Alternately,
+-- for testing you can provide a static VAST URL. The maximum length is
+-- 25,000 characters.
+--
+-- 'availSuppression', 'putPlaybackConfiguration_availSuppression' - The configuration for avail suppression, also known as ad suppression.
+-- For more information about ad suppression, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Suppression>.
+--
+-- 'bumper', 'putPlaybackConfiguration_bumper' - The configuration for bumpers. Bumpers are short audio or video clips
+-- that play at the start or before the end of an ad break. To learn more
+-- about bumpers, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/bumpers.html Bumpers>.
+--
+-- 'cdnConfiguration', 'putPlaybackConfiguration_cdnConfiguration' - The configuration for using a content delivery network (CDN), like
+-- Amazon CloudFront, for content and ad segment management.
+--
+-- 'configurationAliases', 'putPlaybackConfiguration_configurationAliases' - The player parameters and aliases used as dynamic variables during
+-- session initialization. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domain.html Domain Variables>.
+--
+-- 'dashConfiguration', 'putPlaybackConfiguration_dashConfiguration' - The configuration for DASH content.
+--
+-- 'livePreRollConfiguration', 'putPlaybackConfiguration_livePreRollConfiguration' - The configuration for pre-roll ad insertion.
+--
+-- 'manifestProcessingRules', 'putPlaybackConfiguration_manifestProcessingRules' - The configuration for manifest processing rules. Manifest processing
+-- rules enable customization of the personalized manifests created by
+-- MediaTailor.
+--
+-- 'personalizationThresholdSeconds', 'putPlaybackConfiguration_personalizationThresholdSeconds' - Defines the maximum duration of underfilled ad time (in seconds) allowed
+-- in an ad break. If the duration of underfilled ad time exceeds the
+-- personalization threshold, then the personalization of the ad break is
+-- abandoned and the underlying content is shown. This feature applies to
+-- /ad replacement/ in live and VOD streams, rather than ad insertion,
+-- because it relies on an underlying content stream. For more information
+-- about ad break behavior, including ad replacement and insertion, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Behavior in AWS Elemental MediaTailor>.
+--
+-- 'slateAdUrl', 'putPlaybackConfiguration_slateAdUrl' - The URL for a high-quality video asset to transcode and use to fill in
+-- time that\'s not used by ads. AWS Elemental MediaTailor shows the slate
+-- to fill in gaps in media content. Configuring the slate is optional for
+-- non-VPAID configurations. For VPAID, the slate is required because
+-- MediaTailor provides it in the slots that are designated for dynamic ad
+-- content. The slate must be a high-quality asset that contains both audio
+-- and video.
+--
+-- 'tags', 'putPlaybackConfiguration_tags' - The tags to assign to the playback configuration. Tags are key-value
+-- pairs that you can associate with Amazon resources to help with
+-- organization, access control, and cost tracking. For more information,
+-- see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'transcodeProfileName', 'putPlaybackConfiguration_transcodeProfileName' - The name that is used to associate this playback configuration with a
+-- custom transcode profile. This overrides the dynamic transcoding
+-- defaults of MediaTailor. Use this only if you have already set up custom
+-- profiles with the help of AWS Support.
+--
+-- 'videoContentSourceUrl', 'putPlaybackConfiguration_videoContentSourceUrl' - The URL prefix for the parent manifest for the stream, minus the asset
+-- ID. The maximum length is 512 characters.
+--
+-- 'name', 'putPlaybackConfiguration_name' - The identifier for the playback configuration.
+newPutPlaybackConfiguration ::
+  -- | 'name'
+  Prelude.Text ->
+  PutPlaybackConfiguration
+newPutPlaybackConfiguration pName_ =
+  PutPlaybackConfiguration'
+    { adDecisionServerUrl =
+        Prelude.Nothing,
+      availSuppression = Prelude.Nothing,
+      bumper = Prelude.Nothing,
+      cdnConfiguration = Prelude.Nothing,
+      configurationAliases = Prelude.Nothing,
+      dashConfiguration = Prelude.Nothing,
+      livePreRollConfiguration = Prelude.Nothing,
+      manifestProcessingRules = Prelude.Nothing,
+      personalizationThresholdSeconds = Prelude.Nothing,
+      slateAdUrl = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      transcodeProfileName = Prelude.Nothing,
+      videoContentSourceUrl = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The URL for the ad decision server (ADS). This includes the
+-- specification of static parameters and placeholders for dynamic
+-- parameters. AWS Elemental MediaTailor substitutes player-specific and
+-- session-specific parameters as needed when calling the ADS. Alternately,
+-- for testing you can provide a static VAST URL. The maximum length is
+-- 25,000 characters.
+putPlaybackConfiguration_adDecisionServerUrl :: Lens.Lens' PutPlaybackConfiguration (Prelude.Maybe Prelude.Text)
+putPlaybackConfiguration_adDecisionServerUrl = Lens.lens (\PutPlaybackConfiguration' {adDecisionServerUrl} -> adDecisionServerUrl) (\s@PutPlaybackConfiguration' {} a -> s {adDecisionServerUrl = a} :: PutPlaybackConfiguration)
+
+-- | The configuration for avail suppression, also known as ad suppression.
+-- For more information about ad suppression, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Suppression>.
+putPlaybackConfiguration_availSuppression :: Lens.Lens' PutPlaybackConfiguration (Prelude.Maybe AvailSuppression)
+putPlaybackConfiguration_availSuppression = Lens.lens (\PutPlaybackConfiguration' {availSuppression} -> availSuppression) (\s@PutPlaybackConfiguration' {} a -> s {availSuppression = a} :: PutPlaybackConfiguration)
+
+-- | The configuration for bumpers. Bumpers are short audio or video clips
+-- that play at the start or before the end of an ad break. To learn more
+-- about bumpers, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/bumpers.html Bumpers>.
+putPlaybackConfiguration_bumper :: Lens.Lens' PutPlaybackConfiguration (Prelude.Maybe Bumper)
+putPlaybackConfiguration_bumper = Lens.lens (\PutPlaybackConfiguration' {bumper} -> bumper) (\s@PutPlaybackConfiguration' {} a -> s {bumper = a} :: PutPlaybackConfiguration)
+
+-- | The configuration for using a content delivery network (CDN), like
+-- Amazon CloudFront, for content and ad segment management.
+putPlaybackConfiguration_cdnConfiguration :: Lens.Lens' PutPlaybackConfiguration (Prelude.Maybe CdnConfiguration)
+putPlaybackConfiguration_cdnConfiguration = Lens.lens (\PutPlaybackConfiguration' {cdnConfiguration} -> cdnConfiguration) (\s@PutPlaybackConfiguration' {} a -> s {cdnConfiguration = a} :: PutPlaybackConfiguration)
+
+-- | The player parameters and aliases used as dynamic variables during
+-- session initialization. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domain.html Domain Variables>.
+putPlaybackConfiguration_configurationAliases :: Lens.Lens' PutPlaybackConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)))
+putPlaybackConfiguration_configurationAliases = Lens.lens (\PutPlaybackConfiguration' {configurationAliases} -> configurationAliases) (\s@PutPlaybackConfiguration' {} a -> s {configurationAliases = a} :: PutPlaybackConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The configuration for DASH content.
+putPlaybackConfiguration_dashConfiguration :: Lens.Lens' PutPlaybackConfiguration (Prelude.Maybe DashConfigurationForPut)
+putPlaybackConfiguration_dashConfiguration = Lens.lens (\PutPlaybackConfiguration' {dashConfiguration} -> dashConfiguration) (\s@PutPlaybackConfiguration' {} a -> s {dashConfiguration = a} :: PutPlaybackConfiguration)
+
+-- | The configuration for pre-roll ad insertion.
+putPlaybackConfiguration_livePreRollConfiguration :: Lens.Lens' PutPlaybackConfiguration (Prelude.Maybe LivePreRollConfiguration)
+putPlaybackConfiguration_livePreRollConfiguration = Lens.lens (\PutPlaybackConfiguration' {livePreRollConfiguration} -> livePreRollConfiguration) (\s@PutPlaybackConfiguration' {} a -> s {livePreRollConfiguration = a} :: PutPlaybackConfiguration)
+
+-- | The configuration for manifest processing rules. Manifest processing
+-- rules enable customization of the personalized manifests created by
+-- MediaTailor.
+putPlaybackConfiguration_manifestProcessingRules :: Lens.Lens' PutPlaybackConfiguration (Prelude.Maybe ManifestProcessingRules)
+putPlaybackConfiguration_manifestProcessingRules = Lens.lens (\PutPlaybackConfiguration' {manifestProcessingRules} -> manifestProcessingRules) (\s@PutPlaybackConfiguration' {} a -> s {manifestProcessingRules = a} :: PutPlaybackConfiguration)
+
+-- | Defines the maximum duration of underfilled ad time (in seconds) allowed
+-- in an ad break. If the duration of underfilled ad time exceeds the
+-- personalization threshold, then the personalization of the ad break is
+-- abandoned and the underlying content is shown. This feature applies to
+-- /ad replacement/ in live and VOD streams, rather than ad insertion,
+-- because it relies on an underlying content stream. For more information
+-- about ad break behavior, including ad replacement and insertion, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Behavior in AWS Elemental MediaTailor>.
+putPlaybackConfiguration_personalizationThresholdSeconds :: Lens.Lens' PutPlaybackConfiguration (Prelude.Maybe Prelude.Natural)
+putPlaybackConfiguration_personalizationThresholdSeconds = Lens.lens (\PutPlaybackConfiguration' {personalizationThresholdSeconds} -> personalizationThresholdSeconds) (\s@PutPlaybackConfiguration' {} a -> s {personalizationThresholdSeconds = a} :: PutPlaybackConfiguration)
+
+-- | The URL for a high-quality video asset to transcode and use to fill in
+-- time that\'s not used by ads. AWS Elemental MediaTailor shows the slate
+-- to fill in gaps in media content. Configuring the slate is optional for
+-- non-VPAID configurations. For VPAID, the slate is required because
+-- MediaTailor provides it in the slots that are designated for dynamic ad
+-- content. The slate must be a high-quality asset that contains both audio
+-- and video.
+putPlaybackConfiguration_slateAdUrl :: Lens.Lens' PutPlaybackConfiguration (Prelude.Maybe Prelude.Text)
+putPlaybackConfiguration_slateAdUrl = Lens.lens (\PutPlaybackConfiguration' {slateAdUrl} -> slateAdUrl) (\s@PutPlaybackConfiguration' {} a -> s {slateAdUrl = a} :: PutPlaybackConfiguration)
+
+-- | The tags to assign to the playback configuration. Tags are key-value
+-- pairs that you can associate with Amazon resources to help with
+-- organization, access control, and cost tracking. For more information,
+-- see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+putPlaybackConfiguration_tags :: Lens.Lens' PutPlaybackConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+putPlaybackConfiguration_tags = Lens.lens (\PutPlaybackConfiguration' {tags} -> tags) (\s@PutPlaybackConfiguration' {} a -> s {tags = a} :: PutPlaybackConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name that is used to associate this playback configuration with a
+-- custom transcode profile. This overrides the dynamic transcoding
+-- defaults of MediaTailor. Use this only if you have already set up custom
+-- profiles with the help of AWS Support.
+putPlaybackConfiguration_transcodeProfileName :: Lens.Lens' PutPlaybackConfiguration (Prelude.Maybe Prelude.Text)
+putPlaybackConfiguration_transcodeProfileName = Lens.lens (\PutPlaybackConfiguration' {transcodeProfileName} -> transcodeProfileName) (\s@PutPlaybackConfiguration' {} a -> s {transcodeProfileName = a} :: PutPlaybackConfiguration)
+
+-- | The URL prefix for the parent manifest for the stream, minus the asset
+-- ID. The maximum length is 512 characters.
+putPlaybackConfiguration_videoContentSourceUrl :: Lens.Lens' PutPlaybackConfiguration (Prelude.Maybe Prelude.Text)
+putPlaybackConfiguration_videoContentSourceUrl = Lens.lens (\PutPlaybackConfiguration' {videoContentSourceUrl} -> videoContentSourceUrl) (\s@PutPlaybackConfiguration' {} a -> s {videoContentSourceUrl = a} :: PutPlaybackConfiguration)
+
+-- | The identifier for the playback configuration.
+putPlaybackConfiguration_name :: Lens.Lens' PutPlaybackConfiguration Prelude.Text
+putPlaybackConfiguration_name = Lens.lens (\PutPlaybackConfiguration' {name} -> name) (\s@PutPlaybackConfiguration' {} a -> s {name = a} :: PutPlaybackConfiguration)
+
+instance Core.AWSRequest PutPlaybackConfiguration where
+  type
+    AWSResponse PutPlaybackConfiguration =
+      PutPlaybackConfigurationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutPlaybackConfigurationResponse'
+            Prelude.<$> (x Data..?> "AdDecisionServerUrl")
+            Prelude.<*> (x Data..?> "AvailSuppression")
+            Prelude.<*> (x Data..?> "Bumper")
+            Prelude.<*> (x Data..?> "CdnConfiguration")
+            Prelude.<*> ( x
+                            Data..?> "ConfigurationAliases"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "DashConfiguration")
+            Prelude.<*> (x Data..?> "HlsConfiguration")
+            Prelude.<*> (x Data..?> "LivePreRollConfiguration")
+            Prelude.<*> (x Data..?> "LogConfiguration")
+            Prelude.<*> (x Data..?> "ManifestProcessingRules")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "PersonalizationThresholdSeconds")
+            Prelude.<*> (x Data..?> "PlaybackConfigurationArn")
+            Prelude.<*> (x Data..?> "PlaybackEndpointPrefix")
+            Prelude.<*> (x Data..?> "SessionInitializationEndpointPrefix")
+            Prelude.<*> (x Data..?> "SlateAdUrl")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "TranscodeProfileName")
+            Prelude.<*> (x Data..?> "VideoContentSourceUrl")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutPlaybackConfiguration where
+  hashWithSalt _salt PutPlaybackConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` adDecisionServerUrl
+      `Prelude.hashWithSalt` availSuppression
+      `Prelude.hashWithSalt` bumper
+      `Prelude.hashWithSalt` cdnConfiguration
+      `Prelude.hashWithSalt` configurationAliases
+      `Prelude.hashWithSalt` dashConfiguration
+      `Prelude.hashWithSalt` livePreRollConfiguration
+      `Prelude.hashWithSalt` manifestProcessingRules
+      `Prelude.hashWithSalt` personalizationThresholdSeconds
+      `Prelude.hashWithSalt` slateAdUrl
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` transcodeProfileName
+      `Prelude.hashWithSalt` videoContentSourceUrl
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData PutPlaybackConfiguration where
+  rnf PutPlaybackConfiguration' {..} =
+    Prelude.rnf adDecisionServerUrl
+      `Prelude.seq` Prelude.rnf availSuppression
+      `Prelude.seq` Prelude.rnf bumper
+      `Prelude.seq` Prelude.rnf cdnConfiguration
+      `Prelude.seq` Prelude.rnf configurationAliases
+      `Prelude.seq` Prelude.rnf dashConfiguration
+      `Prelude.seq` Prelude.rnf livePreRollConfiguration
+      `Prelude.seq` Prelude.rnf manifestProcessingRules
+      `Prelude.seq` Prelude.rnf personalizationThresholdSeconds
+      `Prelude.seq` Prelude.rnf slateAdUrl
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf transcodeProfileName
+      `Prelude.seq` Prelude.rnf videoContentSourceUrl
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders PutPlaybackConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutPlaybackConfiguration where
+  toJSON PutPlaybackConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AdDecisionServerUrl" Data..=)
+              Prelude.<$> adDecisionServerUrl,
+            ("AvailSuppression" Data..=)
+              Prelude.<$> availSuppression,
+            ("Bumper" Data..=) Prelude.<$> bumper,
+            ("CdnConfiguration" Data..=)
+              Prelude.<$> cdnConfiguration,
+            ("ConfigurationAliases" Data..=)
+              Prelude.<$> configurationAliases,
+            ("DashConfiguration" Data..=)
+              Prelude.<$> dashConfiguration,
+            ("LivePreRollConfiguration" Data..=)
+              Prelude.<$> livePreRollConfiguration,
+            ("ManifestProcessingRules" Data..=)
+              Prelude.<$> manifestProcessingRules,
+            ("PersonalizationThresholdSeconds" Data..=)
+              Prelude.<$> personalizationThresholdSeconds,
+            ("SlateAdUrl" Data..=) Prelude.<$> slateAdUrl,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("TranscodeProfileName" Data..=)
+              Prelude.<$> transcodeProfileName,
+            ("VideoContentSourceUrl" Data..=)
+              Prelude.<$> videoContentSourceUrl,
+            Prelude.Just ("Name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath PutPlaybackConfiguration where
+  toPath = Prelude.const "/playbackConfiguration"
+
+instance Data.ToQuery PutPlaybackConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutPlaybackConfigurationResponse' smart constructor.
+data PutPlaybackConfigurationResponse = PutPlaybackConfigurationResponse'
+  { -- | The URL for the ad decision server (ADS). This includes the
+    -- specification of static parameters and placeholders for dynamic
+    -- parameters. AWS Elemental MediaTailor substitutes player-specific and
+    -- session-specific parameters as needed when calling the ADS. Alternately,
+    -- for testing you can provide a static VAST URL. The maximum length is
+    -- 25,000 characters.
+    adDecisionServerUrl :: Prelude.Maybe Prelude.Text,
+    -- | The configuration for avail suppression, also known as ad suppression.
+    -- For more information about ad suppression, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Suppression>.
+    availSuppression :: Prelude.Maybe AvailSuppression,
+    -- | The configuration for bumpers. Bumpers are short audio or video clips
+    -- that play at the start or before the end of an ad break. To learn more
+    -- about bumpers, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/bumpers.html Bumpers>.
+    bumper :: Prelude.Maybe Bumper,
+    -- | The configuration for using a content delivery network (CDN), like
+    -- Amazon CloudFront, for content and ad segment management.
+    cdnConfiguration :: Prelude.Maybe CdnConfiguration,
+    -- | The player parameters and aliases used as dynamic variables during
+    -- session initialization. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domain.html Domain Variables>.
+    configurationAliases :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The configuration for DASH content.
+    dashConfiguration :: Prelude.Maybe DashConfiguration,
+    -- | The configuration for HLS content.
+    hlsConfiguration :: Prelude.Maybe HlsConfiguration,
+    -- | The configuration for pre-roll ad insertion.
+    livePreRollConfiguration :: Prelude.Maybe LivePreRollConfiguration,
+    -- | The Amazon CloudWatch log settings for a playback configuration.
+    logConfiguration :: Prelude.Maybe LogConfiguration,
+    -- | The configuration for manifest processing rules. Manifest processing
+    -- rules enable customization of the personalized manifests created by
+    -- MediaTailor.
+    manifestProcessingRules :: Prelude.Maybe ManifestProcessingRules,
+    -- | The identifier for the playback configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Defines the maximum duration of underfilled ad time (in seconds) allowed
+    -- in an ad break. If the duration of underfilled ad time exceeds the
+    -- personalization threshold, then the personalization of the ad break is
+    -- abandoned and the underlying content is shown. This feature applies to
+    -- /ad replacement/ in live and VOD streams, rather than ad insertion,
+    -- because it relies on an underlying content stream. For more information
+    -- about ad break behavior, including ad replacement and insertion, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Behavior in AWS Elemental MediaTailor>.
+    personalizationThresholdSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | The Amazon Resource Name (ARN) associated with the playback
+    -- configuration.
+    playbackConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | The playback endpoint prefix associated with the playback configuration.
+    playbackEndpointPrefix :: Prelude.Maybe Prelude.Text,
+    -- | The session initialization endpoint prefix associated with the playback
+    -- configuration.
+    sessionInitializationEndpointPrefix :: Prelude.Maybe Prelude.Text,
+    -- | The URL for a high-quality video asset to transcode and use to fill in
+    -- time that\'s not used by ads. AWS Elemental MediaTailor shows the slate
+    -- to fill in gaps in media content. Configuring the slate is optional for
+    -- non-VPAID configurations. For VPAID, the slate is required because
+    -- MediaTailor provides it in the slots that are designated for dynamic ad
+    -- content. The slate must be a high-quality asset that contains both audio
+    -- and video.
+    slateAdUrl :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the playback configuration. Tags are key-value
+    -- pairs that you can associate with Amazon resources to help with
+    -- organization, access control, and cost tracking. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name that is used to associate this playback configuration with a
+    -- custom transcode profile. This overrides the dynamic transcoding
+    -- defaults of MediaTailor. Use this only if you have already set up custom
+    -- profiles with the help of AWS Support.
+    transcodeProfileName :: Prelude.Maybe Prelude.Text,
+    -- | The URL prefix for the parent manifest for the stream, minus the asset
+    -- ID. The maximum length is 512 characters.
+    videoContentSourceUrl :: 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 'PutPlaybackConfigurationResponse' 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:
+--
+-- 'adDecisionServerUrl', 'putPlaybackConfigurationResponse_adDecisionServerUrl' - The URL for the ad decision server (ADS). This includes the
+-- specification of static parameters and placeholders for dynamic
+-- parameters. AWS Elemental MediaTailor substitutes player-specific and
+-- session-specific parameters as needed when calling the ADS. Alternately,
+-- for testing you can provide a static VAST URL. The maximum length is
+-- 25,000 characters.
+--
+-- 'availSuppression', 'putPlaybackConfigurationResponse_availSuppression' - The configuration for avail suppression, also known as ad suppression.
+-- For more information about ad suppression, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Suppression>.
+--
+-- 'bumper', 'putPlaybackConfigurationResponse_bumper' - The configuration for bumpers. Bumpers are short audio or video clips
+-- that play at the start or before the end of an ad break. To learn more
+-- about bumpers, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/bumpers.html Bumpers>.
+--
+-- 'cdnConfiguration', 'putPlaybackConfigurationResponse_cdnConfiguration' - The configuration for using a content delivery network (CDN), like
+-- Amazon CloudFront, for content and ad segment management.
+--
+-- 'configurationAliases', 'putPlaybackConfigurationResponse_configurationAliases' - The player parameters and aliases used as dynamic variables during
+-- session initialization. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domain.html Domain Variables>.
+--
+-- 'dashConfiguration', 'putPlaybackConfigurationResponse_dashConfiguration' - The configuration for DASH content.
+--
+-- 'hlsConfiguration', 'putPlaybackConfigurationResponse_hlsConfiguration' - The configuration for HLS content.
+--
+-- 'livePreRollConfiguration', 'putPlaybackConfigurationResponse_livePreRollConfiguration' - The configuration for pre-roll ad insertion.
+--
+-- 'logConfiguration', 'putPlaybackConfigurationResponse_logConfiguration' - The Amazon CloudWatch log settings for a playback configuration.
+--
+-- 'manifestProcessingRules', 'putPlaybackConfigurationResponse_manifestProcessingRules' - The configuration for manifest processing rules. Manifest processing
+-- rules enable customization of the personalized manifests created by
+-- MediaTailor.
+--
+-- 'name', 'putPlaybackConfigurationResponse_name' - The identifier for the playback configuration.
+--
+-- 'personalizationThresholdSeconds', 'putPlaybackConfigurationResponse_personalizationThresholdSeconds' - Defines the maximum duration of underfilled ad time (in seconds) allowed
+-- in an ad break. If the duration of underfilled ad time exceeds the
+-- personalization threshold, then the personalization of the ad break is
+-- abandoned and the underlying content is shown. This feature applies to
+-- /ad replacement/ in live and VOD streams, rather than ad insertion,
+-- because it relies on an underlying content stream. For more information
+-- about ad break behavior, including ad replacement and insertion, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Behavior in AWS Elemental MediaTailor>.
+--
+-- 'playbackConfigurationArn', 'putPlaybackConfigurationResponse_playbackConfigurationArn' - The Amazon Resource Name (ARN) associated with the playback
+-- configuration.
+--
+-- 'playbackEndpointPrefix', 'putPlaybackConfigurationResponse_playbackEndpointPrefix' - The playback endpoint prefix associated with the playback configuration.
+--
+-- 'sessionInitializationEndpointPrefix', 'putPlaybackConfigurationResponse_sessionInitializationEndpointPrefix' - The session initialization endpoint prefix associated with the playback
+-- configuration.
+--
+-- 'slateAdUrl', 'putPlaybackConfigurationResponse_slateAdUrl' - The URL for a high-quality video asset to transcode and use to fill in
+-- time that\'s not used by ads. AWS Elemental MediaTailor shows the slate
+-- to fill in gaps in media content. Configuring the slate is optional for
+-- non-VPAID configurations. For VPAID, the slate is required because
+-- MediaTailor provides it in the slots that are designated for dynamic ad
+-- content. The slate must be a high-quality asset that contains both audio
+-- and video.
+--
+-- 'tags', 'putPlaybackConfigurationResponse_tags' - The tags to assign to the playback configuration. Tags are key-value
+-- pairs that you can associate with Amazon resources to help with
+-- organization, access control, and cost tracking. For more information,
+-- see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'transcodeProfileName', 'putPlaybackConfigurationResponse_transcodeProfileName' - The name that is used to associate this playback configuration with a
+-- custom transcode profile. This overrides the dynamic transcoding
+-- defaults of MediaTailor. Use this only if you have already set up custom
+-- profiles with the help of AWS Support.
+--
+-- 'videoContentSourceUrl', 'putPlaybackConfigurationResponse_videoContentSourceUrl' - The URL prefix for the parent manifest for the stream, minus the asset
+-- ID. The maximum length is 512 characters.
+--
+-- 'httpStatus', 'putPlaybackConfigurationResponse_httpStatus' - The response's http status code.
+newPutPlaybackConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutPlaybackConfigurationResponse
+newPutPlaybackConfigurationResponse pHttpStatus_ =
+  PutPlaybackConfigurationResponse'
+    { adDecisionServerUrl =
+        Prelude.Nothing,
+      availSuppression = Prelude.Nothing,
+      bumper = Prelude.Nothing,
+      cdnConfiguration = Prelude.Nothing,
+      configurationAliases = Prelude.Nothing,
+      dashConfiguration = Prelude.Nothing,
+      hlsConfiguration = Prelude.Nothing,
+      livePreRollConfiguration =
+        Prelude.Nothing,
+      logConfiguration = Prelude.Nothing,
+      manifestProcessingRules = Prelude.Nothing,
+      name = Prelude.Nothing,
+      personalizationThresholdSeconds =
+        Prelude.Nothing,
+      playbackConfigurationArn =
+        Prelude.Nothing,
+      playbackEndpointPrefix = Prelude.Nothing,
+      sessionInitializationEndpointPrefix =
+        Prelude.Nothing,
+      slateAdUrl = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      transcodeProfileName = Prelude.Nothing,
+      videoContentSourceUrl = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The URL for the ad decision server (ADS). This includes the
+-- specification of static parameters and placeholders for dynamic
+-- parameters. AWS Elemental MediaTailor substitutes player-specific and
+-- session-specific parameters as needed when calling the ADS. Alternately,
+-- for testing you can provide a static VAST URL. The maximum length is
+-- 25,000 characters.
+putPlaybackConfigurationResponse_adDecisionServerUrl :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe Prelude.Text)
+putPlaybackConfigurationResponse_adDecisionServerUrl = Lens.lens (\PutPlaybackConfigurationResponse' {adDecisionServerUrl} -> adDecisionServerUrl) (\s@PutPlaybackConfigurationResponse' {} a -> s {adDecisionServerUrl = a} :: PutPlaybackConfigurationResponse)
+
+-- | The configuration for avail suppression, also known as ad suppression.
+-- For more information about ad suppression, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Suppression>.
+putPlaybackConfigurationResponse_availSuppression :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe AvailSuppression)
+putPlaybackConfigurationResponse_availSuppression = Lens.lens (\PutPlaybackConfigurationResponse' {availSuppression} -> availSuppression) (\s@PutPlaybackConfigurationResponse' {} a -> s {availSuppression = a} :: PutPlaybackConfigurationResponse)
+
+-- | The configuration for bumpers. Bumpers are short audio or video clips
+-- that play at the start or before the end of an ad break. To learn more
+-- about bumpers, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/bumpers.html Bumpers>.
+putPlaybackConfigurationResponse_bumper :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe Bumper)
+putPlaybackConfigurationResponse_bumper = Lens.lens (\PutPlaybackConfigurationResponse' {bumper} -> bumper) (\s@PutPlaybackConfigurationResponse' {} a -> s {bumper = a} :: PutPlaybackConfigurationResponse)
+
+-- | The configuration for using a content delivery network (CDN), like
+-- Amazon CloudFront, for content and ad segment management.
+putPlaybackConfigurationResponse_cdnConfiguration :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe CdnConfiguration)
+putPlaybackConfigurationResponse_cdnConfiguration = Lens.lens (\PutPlaybackConfigurationResponse' {cdnConfiguration} -> cdnConfiguration) (\s@PutPlaybackConfigurationResponse' {} a -> s {cdnConfiguration = a} :: PutPlaybackConfigurationResponse)
+
+-- | The player parameters and aliases used as dynamic variables during
+-- session initialization. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domain.html Domain Variables>.
+putPlaybackConfigurationResponse_configurationAliases :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)))
+putPlaybackConfigurationResponse_configurationAliases = Lens.lens (\PutPlaybackConfigurationResponse' {configurationAliases} -> configurationAliases) (\s@PutPlaybackConfigurationResponse' {} a -> s {configurationAliases = a} :: PutPlaybackConfigurationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The configuration for DASH content.
+putPlaybackConfigurationResponse_dashConfiguration :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe DashConfiguration)
+putPlaybackConfigurationResponse_dashConfiguration = Lens.lens (\PutPlaybackConfigurationResponse' {dashConfiguration} -> dashConfiguration) (\s@PutPlaybackConfigurationResponse' {} a -> s {dashConfiguration = a} :: PutPlaybackConfigurationResponse)
+
+-- | The configuration for HLS content.
+putPlaybackConfigurationResponse_hlsConfiguration :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe HlsConfiguration)
+putPlaybackConfigurationResponse_hlsConfiguration = Lens.lens (\PutPlaybackConfigurationResponse' {hlsConfiguration} -> hlsConfiguration) (\s@PutPlaybackConfigurationResponse' {} a -> s {hlsConfiguration = a} :: PutPlaybackConfigurationResponse)
+
+-- | The configuration for pre-roll ad insertion.
+putPlaybackConfigurationResponse_livePreRollConfiguration :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe LivePreRollConfiguration)
+putPlaybackConfigurationResponse_livePreRollConfiguration = Lens.lens (\PutPlaybackConfigurationResponse' {livePreRollConfiguration} -> livePreRollConfiguration) (\s@PutPlaybackConfigurationResponse' {} a -> s {livePreRollConfiguration = a} :: PutPlaybackConfigurationResponse)
+
+-- | The Amazon CloudWatch log settings for a playback configuration.
+putPlaybackConfigurationResponse_logConfiguration :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe LogConfiguration)
+putPlaybackConfigurationResponse_logConfiguration = Lens.lens (\PutPlaybackConfigurationResponse' {logConfiguration} -> logConfiguration) (\s@PutPlaybackConfigurationResponse' {} a -> s {logConfiguration = a} :: PutPlaybackConfigurationResponse)
+
+-- | The configuration for manifest processing rules. Manifest processing
+-- rules enable customization of the personalized manifests created by
+-- MediaTailor.
+putPlaybackConfigurationResponse_manifestProcessingRules :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe ManifestProcessingRules)
+putPlaybackConfigurationResponse_manifestProcessingRules = Lens.lens (\PutPlaybackConfigurationResponse' {manifestProcessingRules} -> manifestProcessingRules) (\s@PutPlaybackConfigurationResponse' {} a -> s {manifestProcessingRules = a} :: PutPlaybackConfigurationResponse)
+
+-- | The identifier for the playback configuration.
+putPlaybackConfigurationResponse_name :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe Prelude.Text)
+putPlaybackConfigurationResponse_name = Lens.lens (\PutPlaybackConfigurationResponse' {name} -> name) (\s@PutPlaybackConfigurationResponse' {} a -> s {name = a} :: PutPlaybackConfigurationResponse)
+
+-- | Defines the maximum duration of underfilled ad time (in seconds) allowed
+-- in an ad break. If the duration of underfilled ad time exceeds the
+-- personalization threshold, then the personalization of the ad break is
+-- abandoned and the underlying content is shown. This feature applies to
+-- /ad replacement/ in live and VOD streams, rather than ad insertion,
+-- because it relies on an underlying content stream. For more information
+-- about ad break behavior, including ad replacement and insertion, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Behavior in AWS Elemental MediaTailor>.
+putPlaybackConfigurationResponse_personalizationThresholdSeconds :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe Prelude.Natural)
+putPlaybackConfigurationResponse_personalizationThresholdSeconds = Lens.lens (\PutPlaybackConfigurationResponse' {personalizationThresholdSeconds} -> personalizationThresholdSeconds) (\s@PutPlaybackConfigurationResponse' {} a -> s {personalizationThresholdSeconds = a} :: PutPlaybackConfigurationResponse)
+
+-- | The Amazon Resource Name (ARN) associated with the playback
+-- configuration.
+putPlaybackConfigurationResponse_playbackConfigurationArn :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe Prelude.Text)
+putPlaybackConfigurationResponse_playbackConfigurationArn = Lens.lens (\PutPlaybackConfigurationResponse' {playbackConfigurationArn} -> playbackConfigurationArn) (\s@PutPlaybackConfigurationResponse' {} a -> s {playbackConfigurationArn = a} :: PutPlaybackConfigurationResponse)
+
+-- | The playback endpoint prefix associated with the playback configuration.
+putPlaybackConfigurationResponse_playbackEndpointPrefix :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe Prelude.Text)
+putPlaybackConfigurationResponse_playbackEndpointPrefix = Lens.lens (\PutPlaybackConfigurationResponse' {playbackEndpointPrefix} -> playbackEndpointPrefix) (\s@PutPlaybackConfigurationResponse' {} a -> s {playbackEndpointPrefix = a} :: PutPlaybackConfigurationResponse)
+
+-- | The session initialization endpoint prefix associated with the playback
+-- configuration.
+putPlaybackConfigurationResponse_sessionInitializationEndpointPrefix :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe Prelude.Text)
+putPlaybackConfigurationResponse_sessionInitializationEndpointPrefix = Lens.lens (\PutPlaybackConfigurationResponse' {sessionInitializationEndpointPrefix} -> sessionInitializationEndpointPrefix) (\s@PutPlaybackConfigurationResponse' {} a -> s {sessionInitializationEndpointPrefix = a} :: PutPlaybackConfigurationResponse)
+
+-- | The URL for a high-quality video asset to transcode and use to fill in
+-- time that\'s not used by ads. AWS Elemental MediaTailor shows the slate
+-- to fill in gaps in media content. Configuring the slate is optional for
+-- non-VPAID configurations. For VPAID, the slate is required because
+-- MediaTailor provides it in the slots that are designated for dynamic ad
+-- content. The slate must be a high-quality asset that contains both audio
+-- and video.
+putPlaybackConfigurationResponse_slateAdUrl :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe Prelude.Text)
+putPlaybackConfigurationResponse_slateAdUrl = Lens.lens (\PutPlaybackConfigurationResponse' {slateAdUrl} -> slateAdUrl) (\s@PutPlaybackConfigurationResponse' {} a -> s {slateAdUrl = a} :: PutPlaybackConfigurationResponse)
+
+-- | The tags to assign to the playback configuration. Tags are key-value
+-- pairs that you can associate with Amazon resources to help with
+-- organization, access control, and cost tracking. For more information,
+-- see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+putPlaybackConfigurationResponse_tags :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+putPlaybackConfigurationResponse_tags = Lens.lens (\PutPlaybackConfigurationResponse' {tags} -> tags) (\s@PutPlaybackConfigurationResponse' {} a -> s {tags = a} :: PutPlaybackConfigurationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name that is used to associate this playback configuration with a
+-- custom transcode profile. This overrides the dynamic transcoding
+-- defaults of MediaTailor. Use this only if you have already set up custom
+-- profiles with the help of AWS Support.
+putPlaybackConfigurationResponse_transcodeProfileName :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe Prelude.Text)
+putPlaybackConfigurationResponse_transcodeProfileName = Lens.lens (\PutPlaybackConfigurationResponse' {transcodeProfileName} -> transcodeProfileName) (\s@PutPlaybackConfigurationResponse' {} a -> s {transcodeProfileName = a} :: PutPlaybackConfigurationResponse)
+
+-- | The URL prefix for the parent manifest for the stream, minus the asset
+-- ID. The maximum length is 512 characters.
+putPlaybackConfigurationResponse_videoContentSourceUrl :: Lens.Lens' PutPlaybackConfigurationResponse (Prelude.Maybe Prelude.Text)
+putPlaybackConfigurationResponse_videoContentSourceUrl = Lens.lens (\PutPlaybackConfigurationResponse' {videoContentSourceUrl} -> videoContentSourceUrl) (\s@PutPlaybackConfigurationResponse' {} a -> s {videoContentSourceUrl = a} :: PutPlaybackConfigurationResponse)
+
+-- | The response's http status code.
+putPlaybackConfigurationResponse_httpStatus :: Lens.Lens' PutPlaybackConfigurationResponse Prelude.Int
+putPlaybackConfigurationResponse_httpStatus = Lens.lens (\PutPlaybackConfigurationResponse' {httpStatus} -> httpStatus) (\s@PutPlaybackConfigurationResponse' {} a -> s {httpStatus = a} :: PutPlaybackConfigurationResponse)
+
+instance
+  Prelude.NFData
+    PutPlaybackConfigurationResponse
+  where
+  rnf PutPlaybackConfigurationResponse' {..} =
+    Prelude.rnf adDecisionServerUrl
+      `Prelude.seq` Prelude.rnf availSuppression
+      `Prelude.seq` Prelude.rnf bumper
+      `Prelude.seq` Prelude.rnf cdnConfiguration
+      `Prelude.seq` Prelude.rnf configurationAliases
+      `Prelude.seq` Prelude.rnf dashConfiguration
+      `Prelude.seq` Prelude.rnf hlsConfiguration
+      `Prelude.seq` Prelude.rnf livePreRollConfiguration
+      `Prelude.seq` Prelude.rnf logConfiguration
+      `Prelude.seq` Prelude.rnf manifestProcessingRules
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf personalizationThresholdSeconds
+      `Prelude.seq` Prelude.rnf playbackConfigurationArn
+      `Prelude.seq` Prelude.rnf playbackEndpointPrefix
+      `Prelude.seq` Prelude.rnf
+        sessionInitializationEndpointPrefix
+      `Prelude.seq` Prelude.rnf slateAdUrl
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf transcodeProfileName
+      `Prelude.seq` Prelude.rnf
+        videoContentSourceUrl
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/StartChannel.hs b/gen/Amazonka/MediaTailor/StartChannel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/StartChannel.hs
@@ -0,0 +1,147 @@
+{-# 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.MediaTailor.StartChannel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts a channel. For information about MediaTailor channels, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-channels.html Working with channels>
+-- in the /MediaTailor User Guide/.
+module Amazonka.MediaTailor.StartChannel
+  ( -- * Creating a Request
+    StartChannel (..),
+    newStartChannel,
+
+    -- * Request Lenses
+    startChannel_channelName,
+
+    -- * Destructuring the Response
+    StartChannelResponse (..),
+    newStartChannelResponse,
+
+    -- * Response Lenses
+    startChannelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartChannel' smart constructor.
+data StartChannel = StartChannel'
+  { -- | The name of the channel.
+    channelName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartChannel' 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:
+--
+-- 'channelName', 'startChannel_channelName' - The name of the channel.
+newStartChannel ::
+  -- | 'channelName'
+  Prelude.Text ->
+  StartChannel
+newStartChannel pChannelName_ =
+  StartChannel' {channelName = pChannelName_}
+
+-- | The name of the channel.
+startChannel_channelName :: Lens.Lens' StartChannel Prelude.Text
+startChannel_channelName = Lens.lens (\StartChannel' {channelName} -> channelName) (\s@StartChannel' {} a -> s {channelName = a} :: StartChannel)
+
+instance Core.AWSRequest StartChannel where
+  type AWSResponse StartChannel = StartChannelResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StartChannelResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartChannel where
+  hashWithSalt _salt StartChannel' {..} =
+    _salt `Prelude.hashWithSalt` channelName
+
+instance Prelude.NFData StartChannel where
+  rnf StartChannel' {..} = Prelude.rnf channelName
+
+instance Data.ToHeaders StartChannel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartChannel where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath StartChannel where
+  toPath StartChannel' {..} =
+    Prelude.mconcat
+      ["/channel/", Data.toBS channelName, "/start"]
+
+instance Data.ToQuery StartChannel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartChannelResponse' smart constructor.
+data StartChannelResponse = StartChannelResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartChannelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'startChannelResponse_httpStatus' - The response's http status code.
+newStartChannelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartChannelResponse
+newStartChannelResponse pHttpStatus_ =
+  StartChannelResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+startChannelResponse_httpStatus :: Lens.Lens' StartChannelResponse Prelude.Int
+startChannelResponse_httpStatus = Lens.lens (\StartChannelResponse' {httpStatus} -> httpStatus) (\s@StartChannelResponse' {} a -> s {httpStatus = a} :: StartChannelResponse)
+
+instance Prelude.NFData StartChannelResponse where
+  rnf StartChannelResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/StopChannel.hs b/gen/Amazonka/MediaTailor/StopChannel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/StopChannel.hs
@@ -0,0 +1,146 @@
+{-# 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.MediaTailor.StopChannel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops a channel. For information about MediaTailor channels, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-channels.html Working with channels>
+-- in the /MediaTailor User Guide/.
+module Amazonka.MediaTailor.StopChannel
+  ( -- * Creating a Request
+    StopChannel (..),
+    newStopChannel,
+
+    -- * Request Lenses
+    stopChannel_channelName,
+
+    -- * Destructuring the Response
+    StopChannelResponse (..),
+    newStopChannelResponse,
+
+    -- * Response Lenses
+    stopChannelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopChannel' smart constructor.
+data StopChannel = StopChannel'
+  { -- | The name of the channel.
+    channelName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopChannel' 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:
+--
+-- 'channelName', 'stopChannel_channelName' - The name of the channel.
+newStopChannel ::
+  -- | 'channelName'
+  Prelude.Text ->
+  StopChannel
+newStopChannel pChannelName_ =
+  StopChannel' {channelName = pChannelName_}
+
+-- | The name of the channel.
+stopChannel_channelName :: Lens.Lens' StopChannel Prelude.Text
+stopChannel_channelName = Lens.lens (\StopChannel' {channelName} -> channelName) (\s@StopChannel' {} a -> s {channelName = a} :: StopChannel)
+
+instance Core.AWSRequest StopChannel where
+  type AWSResponse StopChannel = StopChannelResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StopChannelResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopChannel where
+  hashWithSalt _salt StopChannel' {..} =
+    _salt `Prelude.hashWithSalt` channelName
+
+instance Prelude.NFData StopChannel where
+  rnf StopChannel' {..} = Prelude.rnf channelName
+
+instance Data.ToHeaders StopChannel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopChannel where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath StopChannel where
+  toPath StopChannel' {..} =
+    Prelude.mconcat
+      ["/channel/", Data.toBS channelName, "/stop"]
+
+instance Data.ToQuery StopChannel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopChannelResponse' smart constructor.
+data StopChannelResponse = StopChannelResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopChannelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'stopChannelResponse_httpStatus' - The response's http status code.
+newStopChannelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopChannelResponse
+newStopChannelResponse pHttpStatus_ =
+  StopChannelResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+stopChannelResponse_httpStatus :: Lens.Lens' StopChannelResponse Prelude.Int
+stopChannelResponse_httpStatus = Lens.lens (\StopChannelResponse' {httpStatus} -> httpStatus) (\s@StopChannelResponse' {} a -> s {httpStatus = a} :: StopChannelResponse)
+
+instance Prelude.NFData StopChannelResponse where
+  rnf StopChannelResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/TagResource.hs b/gen/Amazonka/MediaTailor/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/TagResource.hs
@@ -0,0 +1,154 @@
+{-# 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.MediaTailor.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The resource to tag. Tags are key-value pairs that you can associate
+-- with Amazon resources to help with organization, access control, and
+-- cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+module Amazonka.MediaTailor.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) associated with the resource.
+    resourceArn :: Prelude.Text,
+    -- | The tags to assign to the resource. Tags are key-value pairs that you
+    -- can associate with Amazon resources to help with organization, access
+    -- control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) associated with the resource.
+--
+-- 'tags', 'tagResource_tags' - The tags to assign to the resource. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) associated with the resource.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | The tags to assign to the resource. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response = Response.receiveNull TagResourceResponse'
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newTagResourceResponse ::
+  TagResourceResponse
+newTagResourceResponse = TagResourceResponse'
+
+instance Prelude.NFData TagResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/MediaTailor/Types.hs b/gen/Amazonka/MediaTailor/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types.hs
@@ -0,0 +1,499 @@
+{-# 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.MediaTailor.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.MediaTailor.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _BadRequestException,
+
+    -- * AccessType
+    AccessType (..),
+
+    -- * ChannelState
+    ChannelState (..),
+
+    -- * MessageType
+    MessageType (..),
+
+    -- * Mode
+    Mode (..),
+
+    -- * Operator
+    Operator (..),
+
+    -- * OriginManifestType
+    OriginManifestType (..),
+
+    -- * PlaybackMode
+    PlaybackMode (..),
+
+    -- * RelativePosition
+    RelativePosition (..),
+
+    -- * ScheduleEntryType
+    ScheduleEntryType (..),
+
+    -- * Tier
+    Tier (..),
+
+    -- * Type
+    Type (..),
+
+    -- * AccessConfiguration
+    AccessConfiguration (..),
+    newAccessConfiguration,
+    accessConfiguration_accessType,
+    accessConfiguration_secretsManagerAccessTokenConfiguration,
+
+    -- * AdBreak
+    AdBreak (..),
+    newAdBreak,
+    adBreak_messageType,
+    adBreak_offsetMillis,
+    adBreak_slate,
+    adBreak_spliceInsertMessage,
+    adBreak_timeSignalMessage,
+
+    -- * AdMarkerPassthrough
+    AdMarkerPassthrough (..),
+    newAdMarkerPassthrough,
+    adMarkerPassthrough_enabled,
+
+    -- * Alert
+    Alert (..),
+    newAlert,
+    alert_alertCode,
+    alert_alertMessage,
+    alert_lastModifiedTime,
+    alert_relatedResourceArns,
+    alert_resourceArn,
+
+    -- * AvailMatchingCriteria
+    AvailMatchingCriteria (..),
+    newAvailMatchingCriteria,
+    availMatchingCriteria_dynamicVariable,
+    availMatchingCriteria_operator,
+
+    -- * AvailSuppression
+    AvailSuppression (..),
+    newAvailSuppression,
+    availSuppression_mode,
+    availSuppression_value,
+
+    -- * Bumper
+    Bumper (..),
+    newBumper,
+    bumper_endUrl,
+    bumper_startUrl,
+
+    -- * CdnConfiguration
+    CdnConfiguration (..),
+    newCdnConfiguration,
+    cdnConfiguration_adSegmentUrlPrefix,
+    cdnConfiguration_contentSegmentUrlPrefix,
+
+    -- * Channel
+    Channel (..),
+    newChannel,
+    channel_creationTime,
+    channel_fillerSlate,
+    channel_lastModifiedTime,
+    channel_tags,
+    channel_arn,
+    channel_channelName,
+    channel_channelState,
+    channel_outputs,
+    channel_playbackMode,
+    channel_tier,
+
+    -- * DashConfiguration
+    DashConfiguration (..),
+    newDashConfiguration,
+    dashConfiguration_manifestEndpointPrefix,
+    dashConfiguration_mpdLocation,
+    dashConfiguration_originManifestType,
+
+    -- * DashConfigurationForPut
+    DashConfigurationForPut (..),
+    newDashConfigurationForPut,
+    dashConfigurationForPut_mpdLocation,
+    dashConfigurationForPut_originManifestType,
+
+    -- * DashPlaylistSettings
+    DashPlaylistSettings (..),
+    newDashPlaylistSettings,
+    dashPlaylistSettings_manifestWindowSeconds,
+    dashPlaylistSettings_minBufferTimeSeconds,
+    dashPlaylistSettings_minUpdatePeriodSeconds,
+    dashPlaylistSettings_suggestedPresentationDelaySeconds,
+
+    -- * DefaultSegmentDeliveryConfiguration
+    DefaultSegmentDeliveryConfiguration (..),
+    newDefaultSegmentDeliveryConfiguration,
+    defaultSegmentDeliveryConfiguration_baseUrl,
+
+    -- * HlsConfiguration
+    HlsConfiguration (..),
+    newHlsConfiguration,
+    hlsConfiguration_manifestEndpointPrefix,
+
+    -- * HlsPlaylistSettings
+    HlsPlaylistSettings (..),
+    newHlsPlaylistSettings,
+    hlsPlaylistSettings_manifestWindowSeconds,
+
+    -- * HttpConfiguration
+    HttpConfiguration (..),
+    newHttpConfiguration,
+    httpConfiguration_baseUrl,
+
+    -- * HttpPackageConfiguration
+    HttpPackageConfiguration (..),
+    newHttpPackageConfiguration,
+    httpPackageConfiguration_path,
+    httpPackageConfiguration_sourceGroup,
+    httpPackageConfiguration_type,
+
+    -- * LivePreRollConfiguration
+    LivePreRollConfiguration (..),
+    newLivePreRollConfiguration,
+    livePreRollConfiguration_adDecisionServerUrl,
+    livePreRollConfiguration_maxDurationSeconds,
+
+    -- * LiveSource
+    LiveSource (..),
+    newLiveSource,
+    liveSource_creationTime,
+    liveSource_lastModifiedTime,
+    liveSource_tags,
+    liveSource_arn,
+    liveSource_httpPackageConfigurations,
+    liveSource_liveSourceName,
+    liveSource_sourceLocationName,
+
+    -- * LogConfiguration
+    LogConfiguration (..),
+    newLogConfiguration,
+    logConfiguration_percentEnabled,
+
+    -- * ManifestProcessingRules
+    ManifestProcessingRules (..),
+    newManifestProcessingRules,
+    manifestProcessingRules_adMarkerPassthrough,
+
+    -- * PlaybackConfiguration
+    PlaybackConfiguration (..),
+    newPlaybackConfiguration,
+    playbackConfiguration_adDecisionServerUrl,
+    playbackConfiguration_availSuppression,
+    playbackConfiguration_bumper,
+    playbackConfiguration_cdnConfiguration,
+    playbackConfiguration_configurationAliases,
+    playbackConfiguration_dashConfiguration,
+    playbackConfiguration_hlsConfiguration,
+    playbackConfiguration_livePreRollConfiguration,
+    playbackConfiguration_logConfiguration,
+    playbackConfiguration_manifestProcessingRules,
+    playbackConfiguration_name,
+    playbackConfiguration_personalizationThresholdSeconds,
+    playbackConfiguration_playbackConfigurationArn,
+    playbackConfiguration_playbackEndpointPrefix,
+    playbackConfiguration_sessionInitializationEndpointPrefix,
+    playbackConfiguration_slateAdUrl,
+    playbackConfiguration_tags,
+    playbackConfiguration_transcodeProfileName,
+    playbackConfiguration_videoContentSourceUrl,
+
+    -- * PrefetchConsumption
+    PrefetchConsumption (..),
+    newPrefetchConsumption,
+    prefetchConsumption_availMatchingCriteria,
+    prefetchConsumption_startTime,
+    prefetchConsumption_endTime,
+
+    -- * PrefetchRetrieval
+    PrefetchRetrieval (..),
+    newPrefetchRetrieval,
+    prefetchRetrieval_dynamicVariables,
+    prefetchRetrieval_startTime,
+    prefetchRetrieval_endTime,
+
+    -- * PrefetchSchedule
+    PrefetchSchedule (..),
+    newPrefetchSchedule,
+    prefetchSchedule_streamId,
+    prefetchSchedule_arn,
+    prefetchSchedule_consumption,
+    prefetchSchedule_name,
+    prefetchSchedule_playbackConfigurationName,
+    prefetchSchedule_retrieval,
+
+    -- * RequestOutputItem
+    RequestOutputItem (..),
+    newRequestOutputItem,
+    requestOutputItem_dashPlaylistSettings,
+    requestOutputItem_hlsPlaylistSettings,
+    requestOutputItem_manifestName,
+    requestOutputItem_sourceGroup,
+
+    -- * ResponseOutputItem
+    ResponseOutputItem (..),
+    newResponseOutputItem,
+    responseOutputItem_dashPlaylistSettings,
+    responseOutputItem_hlsPlaylistSettings,
+    responseOutputItem_manifestName,
+    responseOutputItem_playbackUrl,
+    responseOutputItem_sourceGroup,
+
+    -- * ScheduleAdBreak
+    ScheduleAdBreak (..),
+    newScheduleAdBreak,
+    scheduleAdBreak_approximateDurationSeconds,
+    scheduleAdBreak_approximateStartTime,
+    scheduleAdBreak_sourceLocationName,
+    scheduleAdBreak_vodSourceName,
+
+    -- * ScheduleConfiguration
+    ScheduleConfiguration (..),
+    newScheduleConfiguration,
+    scheduleConfiguration_transition,
+
+    -- * ScheduleEntry
+    ScheduleEntry (..),
+    newScheduleEntry,
+    scheduleEntry_approximateDurationSeconds,
+    scheduleEntry_approximateStartTime,
+    scheduleEntry_liveSourceName,
+    scheduleEntry_scheduleAdBreaks,
+    scheduleEntry_scheduleEntryType,
+    scheduleEntry_vodSourceName,
+    scheduleEntry_arn,
+    scheduleEntry_channelName,
+    scheduleEntry_programName,
+    scheduleEntry_sourceLocationName,
+
+    -- * SecretsManagerAccessTokenConfiguration
+    SecretsManagerAccessTokenConfiguration (..),
+    newSecretsManagerAccessTokenConfiguration,
+    secretsManagerAccessTokenConfiguration_headerName,
+    secretsManagerAccessTokenConfiguration_secretArn,
+    secretsManagerAccessTokenConfiguration_secretStringKey,
+
+    -- * SegmentDeliveryConfiguration
+    SegmentDeliveryConfiguration (..),
+    newSegmentDeliveryConfiguration,
+    segmentDeliveryConfiguration_baseUrl,
+    segmentDeliveryConfiguration_name,
+
+    -- * SegmentationDescriptor
+    SegmentationDescriptor (..),
+    newSegmentationDescriptor,
+    segmentationDescriptor_segmentNum,
+    segmentationDescriptor_segmentationEventId,
+    segmentationDescriptor_segmentationTypeId,
+    segmentationDescriptor_segmentationUpid,
+    segmentationDescriptor_segmentationUpidType,
+    segmentationDescriptor_segmentsExpected,
+    segmentationDescriptor_subSegmentNum,
+    segmentationDescriptor_subSegmentsExpected,
+
+    -- * SlateSource
+    SlateSource (..),
+    newSlateSource,
+    slateSource_sourceLocationName,
+    slateSource_vodSourceName,
+
+    -- * SourceLocation
+    SourceLocation (..),
+    newSourceLocation,
+    sourceLocation_accessConfiguration,
+    sourceLocation_creationTime,
+    sourceLocation_defaultSegmentDeliveryConfiguration,
+    sourceLocation_lastModifiedTime,
+    sourceLocation_segmentDeliveryConfigurations,
+    sourceLocation_tags,
+    sourceLocation_arn,
+    sourceLocation_httpConfiguration,
+    sourceLocation_sourceLocationName,
+
+    -- * SpliceInsertMessage
+    SpliceInsertMessage (..),
+    newSpliceInsertMessage,
+    spliceInsertMessage_availNum,
+    spliceInsertMessage_availsExpected,
+    spliceInsertMessage_spliceEventId,
+    spliceInsertMessage_uniqueProgramId,
+
+    -- * TimeSignalMessage
+    TimeSignalMessage (..),
+    newTimeSignalMessage,
+    timeSignalMessage_segmentationDescriptors,
+
+    -- * Transition
+    Transition (..),
+    newTransition,
+    transition_durationMillis,
+    transition_relativeProgram,
+    transition_scheduledStartTimeMillis,
+    transition_relativePosition,
+    transition_type,
+
+    -- * VodSource
+    VodSource (..),
+    newVodSource,
+    vodSource_creationTime,
+    vodSource_lastModifiedTime,
+    vodSource_tags,
+    vodSource_arn,
+    vodSource_httpPackageConfigurations,
+    vodSource_sourceLocationName,
+    vodSource_vodSourceName,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.MediaTailor.Types.AccessConfiguration
+import Amazonka.MediaTailor.Types.AccessType
+import Amazonka.MediaTailor.Types.AdBreak
+import Amazonka.MediaTailor.Types.AdMarkerPassthrough
+import Amazonka.MediaTailor.Types.Alert
+import Amazonka.MediaTailor.Types.AvailMatchingCriteria
+import Amazonka.MediaTailor.Types.AvailSuppression
+import Amazonka.MediaTailor.Types.Bumper
+import Amazonka.MediaTailor.Types.CdnConfiguration
+import Amazonka.MediaTailor.Types.Channel
+import Amazonka.MediaTailor.Types.ChannelState
+import Amazonka.MediaTailor.Types.DashConfiguration
+import Amazonka.MediaTailor.Types.DashConfigurationForPut
+import Amazonka.MediaTailor.Types.DashPlaylistSettings
+import Amazonka.MediaTailor.Types.DefaultSegmentDeliveryConfiguration
+import Amazonka.MediaTailor.Types.HlsConfiguration
+import Amazonka.MediaTailor.Types.HlsPlaylistSettings
+import Amazonka.MediaTailor.Types.HttpConfiguration
+import Amazonka.MediaTailor.Types.HttpPackageConfiguration
+import Amazonka.MediaTailor.Types.LivePreRollConfiguration
+import Amazonka.MediaTailor.Types.LiveSource
+import Amazonka.MediaTailor.Types.LogConfiguration
+import Amazonka.MediaTailor.Types.ManifestProcessingRules
+import Amazonka.MediaTailor.Types.MessageType
+import Amazonka.MediaTailor.Types.Mode
+import Amazonka.MediaTailor.Types.Operator
+import Amazonka.MediaTailor.Types.OriginManifestType
+import Amazonka.MediaTailor.Types.PlaybackConfiguration
+import Amazonka.MediaTailor.Types.PlaybackMode
+import Amazonka.MediaTailor.Types.PrefetchConsumption
+import Amazonka.MediaTailor.Types.PrefetchRetrieval
+import Amazonka.MediaTailor.Types.PrefetchSchedule
+import Amazonka.MediaTailor.Types.RelativePosition
+import Amazonka.MediaTailor.Types.RequestOutputItem
+import Amazonka.MediaTailor.Types.ResponseOutputItem
+import Amazonka.MediaTailor.Types.ScheduleAdBreak
+import Amazonka.MediaTailor.Types.ScheduleConfiguration
+import Amazonka.MediaTailor.Types.ScheduleEntry
+import Amazonka.MediaTailor.Types.ScheduleEntryType
+import Amazonka.MediaTailor.Types.SecretsManagerAccessTokenConfiguration
+import Amazonka.MediaTailor.Types.SegmentDeliveryConfiguration
+import Amazonka.MediaTailor.Types.SegmentationDescriptor
+import Amazonka.MediaTailor.Types.SlateSource
+import Amazonka.MediaTailor.Types.SourceLocation
+import Amazonka.MediaTailor.Types.SpliceInsertMessage
+import Amazonka.MediaTailor.Types.Tier
+import Amazonka.MediaTailor.Types.TimeSignalMessage
+import Amazonka.MediaTailor.Types.Transition
+import Amazonka.MediaTailor.Types.Type
+import Amazonka.MediaTailor.Types.VodSource
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2018-04-23@ of the Amazon MediaTailor SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "MediaTailor",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "api.mediatailor",
+      Core.signingName = "mediatailor",
+      Core.version = "2018-04-23",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "MediaTailor",
+      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
+
+-- | A request contains unexpected data.
+_BadRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_BadRequestException =
+  Core._MatchServiceError
+    defaultService
+    "BadRequestException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/MediaTailor/Types/AccessConfiguration.hs b/gen/Amazonka/MediaTailor/Types/AccessConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/AccessConfiguration.hs
@@ -0,0 +1,171 @@
+{-# 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.MediaTailor.Types.AccessConfiguration
+-- 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.MediaTailor.Types.AccessConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.AccessType
+import Amazonka.MediaTailor.Types.SecretsManagerAccessTokenConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Access configuration parameters.
+--
+-- /See:/ 'newAccessConfiguration' smart constructor.
+data AccessConfiguration = AccessConfiguration'
+  { -- | The type of authentication used to access content from
+    -- @HttpConfiguration::BaseUrl@ on your source location. Accepted value:
+    -- @S3_SIGV4@.
+    --
+    -- @S3_SIGV4@ - AWS Signature Version 4 authentication for Amazon S3 hosted
+    -- virtual-style access. If your source location base URL is an Amazon S3
+    -- bucket, MediaTailor can use AWS Signature Version 4 (SigV4)
+    -- authentication to access the bucket where your source content is stored.
+    -- Your MediaTailor source location baseURL must follow the S3 virtual
+    -- hosted-style request URL format. For example,
+    -- https:\/\/bucket-name.s3.Region.amazonaws.com\/key-name.
+    --
+    -- Before you can use @S3_SIGV4@, you must meet these requirements:
+    --
+    -- • You must allow MediaTailor to access your S3 bucket by granting
+    -- mediatailor.amazonaws.com principal access in IAM. For information about
+    -- configuring access in IAM, see Access management in the IAM User Guide.
+    --
+    -- • The mediatailor.amazonaws.com service principal must have permissions
+    -- to read all top level manifests referenced by the VodSource packaging
+    -- configurations.
+    --
+    -- • The caller of the API must have s3:GetObject IAM permissions to read
+    -- all top level manifests referenced by your MediaTailor VodSource
+    -- packaging configurations.
+    accessType :: Prelude.Maybe AccessType,
+    -- | AWS Secrets Manager access token configuration parameters.
+    secretsManagerAccessTokenConfiguration :: Prelude.Maybe SecretsManagerAccessTokenConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccessConfiguration' 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:
+--
+-- 'accessType', 'accessConfiguration_accessType' - The type of authentication used to access content from
+-- @HttpConfiguration::BaseUrl@ on your source location. Accepted value:
+-- @S3_SIGV4@.
+--
+-- @S3_SIGV4@ - AWS Signature Version 4 authentication for Amazon S3 hosted
+-- virtual-style access. If your source location base URL is an Amazon S3
+-- bucket, MediaTailor can use AWS Signature Version 4 (SigV4)
+-- authentication to access the bucket where your source content is stored.
+-- Your MediaTailor source location baseURL must follow the S3 virtual
+-- hosted-style request URL format. For example,
+-- https:\/\/bucket-name.s3.Region.amazonaws.com\/key-name.
+--
+-- Before you can use @S3_SIGV4@, you must meet these requirements:
+--
+-- • You must allow MediaTailor to access your S3 bucket by granting
+-- mediatailor.amazonaws.com principal access in IAM. For information about
+-- configuring access in IAM, see Access management in the IAM User Guide.
+--
+-- • The mediatailor.amazonaws.com service principal must have permissions
+-- to read all top level manifests referenced by the VodSource packaging
+-- configurations.
+--
+-- • The caller of the API must have s3:GetObject IAM permissions to read
+-- all top level manifests referenced by your MediaTailor VodSource
+-- packaging configurations.
+--
+-- 'secretsManagerAccessTokenConfiguration', 'accessConfiguration_secretsManagerAccessTokenConfiguration' - AWS Secrets Manager access token configuration parameters.
+newAccessConfiguration ::
+  AccessConfiguration
+newAccessConfiguration =
+  AccessConfiguration'
+    { accessType = Prelude.Nothing,
+      secretsManagerAccessTokenConfiguration =
+        Prelude.Nothing
+    }
+
+-- | The type of authentication used to access content from
+-- @HttpConfiguration::BaseUrl@ on your source location. Accepted value:
+-- @S3_SIGV4@.
+--
+-- @S3_SIGV4@ - AWS Signature Version 4 authentication for Amazon S3 hosted
+-- virtual-style access. If your source location base URL is an Amazon S3
+-- bucket, MediaTailor can use AWS Signature Version 4 (SigV4)
+-- authentication to access the bucket where your source content is stored.
+-- Your MediaTailor source location baseURL must follow the S3 virtual
+-- hosted-style request URL format. For example,
+-- https:\/\/bucket-name.s3.Region.amazonaws.com\/key-name.
+--
+-- Before you can use @S3_SIGV4@, you must meet these requirements:
+--
+-- • You must allow MediaTailor to access your S3 bucket by granting
+-- mediatailor.amazonaws.com principal access in IAM. For information about
+-- configuring access in IAM, see Access management in the IAM User Guide.
+--
+-- • The mediatailor.amazonaws.com service principal must have permissions
+-- to read all top level manifests referenced by the VodSource packaging
+-- configurations.
+--
+-- • The caller of the API must have s3:GetObject IAM permissions to read
+-- all top level manifests referenced by your MediaTailor VodSource
+-- packaging configurations.
+accessConfiguration_accessType :: Lens.Lens' AccessConfiguration (Prelude.Maybe AccessType)
+accessConfiguration_accessType = Lens.lens (\AccessConfiguration' {accessType} -> accessType) (\s@AccessConfiguration' {} a -> s {accessType = a} :: AccessConfiguration)
+
+-- | AWS Secrets Manager access token configuration parameters.
+accessConfiguration_secretsManagerAccessTokenConfiguration :: Lens.Lens' AccessConfiguration (Prelude.Maybe SecretsManagerAccessTokenConfiguration)
+accessConfiguration_secretsManagerAccessTokenConfiguration = Lens.lens (\AccessConfiguration' {secretsManagerAccessTokenConfiguration} -> secretsManagerAccessTokenConfiguration) (\s@AccessConfiguration' {} a -> s {secretsManagerAccessTokenConfiguration = a} :: AccessConfiguration)
+
+instance Data.FromJSON AccessConfiguration where
+  parseJSON =
+    Data.withObject
+      "AccessConfiguration"
+      ( \x ->
+          AccessConfiguration'
+            Prelude.<$> (x Data..:? "AccessType")
+            Prelude.<*> ( x
+                            Data..:? "SecretsManagerAccessTokenConfiguration"
+                        )
+      )
+
+instance Prelude.Hashable AccessConfiguration where
+  hashWithSalt _salt AccessConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessType
+      `Prelude.hashWithSalt` secretsManagerAccessTokenConfiguration
+
+instance Prelude.NFData AccessConfiguration where
+  rnf AccessConfiguration' {..} =
+    Prelude.rnf accessType
+      `Prelude.seq` Prelude.rnf secretsManagerAccessTokenConfiguration
+
+instance Data.ToJSON AccessConfiguration where
+  toJSON AccessConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccessType" Data..=) Prelude.<$> accessType,
+            ("SecretsManagerAccessTokenConfiguration" Data..=)
+              Prelude.<$> secretsManagerAccessTokenConfiguration
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/AccessType.hs b/gen/Amazonka/MediaTailor/Types/AccessType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/AccessType.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.MediaTailor.Types.AccessType
+-- 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.MediaTailor.Types.AccessType
+  ( AccessType
+      ( ..,
+        AccessType_S3_SIGV4,
+        AccessType_SECRETS_MANAGER_ACCESS_TOKEN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AccessType = AccessType'
+  { fromAccessType ::
+      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 AccessType_S3_SIGV4 :: AccessType
+pattern AccessType_S3_SIGV4 = AccessType' "S3_SIGV4"
+
+pattern AccessType_SECRETS_MANAGER_ACCESS_TOKEN :: AccessType
+pattern AccessType_SECRETS_MANAGER_ACCESS_TOKEN = AccessType' "SECRETS_MANAGER_ACCESS_TOKEN"
+
+{-# COMPLETE
+  AccessType_S3_SIGV4,
+  AccessType_SECRETS_MANAGER_ACCESS_TOKEN,
+  AccessType'
+  #-}
diff --git a/gen/Amazonka/MediaTailor/Types/AdBreak.hs b/gen/Amazonka/MediaTailor/Types/AdBreak.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/AdBreak.hs
@@ -0,0 +1,174 @@
+{-# 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.MediaTailor.Types.AdBreak
+-- 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.MediaTailor.Types.AdBreak where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.MessageType
+import Amazonka.MediaTailor.Types.SlateSource
+import Amazonka.MediaTailor.Types.SpliceInsertMessage
+import Amazonka.MediaTailor.Types.TimeSignalMessage
+import qualified Amazonka.Prelude as Prelude
+
+-- | Ad break configuration parameters.
+--
+-- /See:/ 'newAdBreak' smart constructor.
+data AdBreak = AdBreak'
+  { -- | The SCTE-35 ad insertion type. Accepted value: @SPLICE_INSERT@,
+    -- @TIME_SIGNAL@.
+    messageType :: Prelude.Maybe MessageType,
+    -- | How long (in milliseconds) after the beginning of the program that an ad
+    -- starts. This value must fall within 100ms of a segment boundary,
+    -- otherwise the ad break will be skipped.
+    offsetMillis :: Prelude.Maybe Prelude.Integer,
+    -- | Ad break slate configuration.
+    slate :: Prelude.Maybe SlateSource,
+    -- | This defines the SCTE-35 @splice_insert()@ message inserted around the
+    -- ad. For information about using @splice_insert()@, see the SCTE-35
+    -- specficiaiton, section 9.7.3.1.
+    spliceInsertMessage :: Prelude.Maybe SpliceInsertMessage,
+    -- | Defines the SCTE-35 @time_signal@ message inserted around the ad.
+    --
+    -- Programs on a channel\'s schedule can be configured with one or more ad
+    -- breaks. You can attach a @splice_insert@ SCTE-35 message to the ad
+    -- break. This message provides basic metadata about the ad break.
+    --
+    -- See section 9.7.4 of the 2022 SCTE-35 specification for more
+    -- information.
+    timeSignalMessage :: Prelude.Maybe TimeSignalMessage
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AdBreak' 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:
+--
+-- 'messageType', 'adBreak_messageType' - The SCTE-35 ad insertion type. Accepted value: @SPLICE_INSERT@,
+-- @TIME_SIGNAL@.
+--
+-- 'offsetMillis', 'adBreak_offsetMillis' - How long (in milliseconds) after the beginning of the program that an ad
+-- starts. This value must fall within 100ms of a segment boundary,
+-- otherwise the ad break will be skipped.
+--
+-- 'slate', 'adBreak_slate' - Ad break slate configuration.
+--
+-- 'spliceInsertMessage', 'adBreak_spliceInsertMessage' - This defines the SCTE-35 @splice_insert()@ message inserted around the
+-- ad. For information about using @splice_insert()@, see the SCTE-35
+-- specficiaiton, section 9.7.3.1.
+--
+-- 'timeSignalMessage', 'adBreak_timeSignalMessage' - Defines the SCTE-35 @time_signal@ message inserted around the ad.
+--
+-- Programs on a channel\'s schedule can be configured with one or more ad
+-- breaks. You can attach a @splice_insert@ SCTE-35 message to the ad
+-- break. This message provides basic metadata about the ad break.
+--
+-- See section 9.7.4 of the 2022 SCTE-35 specification for more
+-- information.
+newAdBreak ::
+  AdBreak
+newAdBreak =
+  AdBreak'
+    { messageType = Prelude.Nothing,
+      offsetMillis = Prelude.Nothing,
+      slate = Prelude.Nothing,
+      spliceInsertMessage = Prelude.Nothing,
+      timeSignalMessage = Prelude.Nothing
+    }
+
+-- | The SCTE-35 ad insertion type. Accepted value: @SPLICE_INSERT@,
+-- @TIME_SIGNAL@.
+adBreak_messageType :: Lens.Lens' AdBreak (Prelude.Maybe MessageType)
+adBreak_messageType = Lens.lens (\AdBreak' {messageType} -> messageType) (\s@AdBreak' {} a -> s {messageType = a} :: AdBreak)
+
+-- | How long (in milliseconds) after the beginning of the program that an ad
+-- starts. This value must fall within 100ms of a segment boundary,
+-- otherwise the ad break will be skipped.
+adBreak_offsetMillis :: Lens.Lens' AdBreak (Prelude.Maybe Prelude.Integer)
+adBreak_offsetMillis = Lens.lens (\AdBreak' {offsetMillis} -> offsetMillis) (\s@AdBreak' {} a -> s {offsetMillis = a} :: AdBreak)
+
+-- | Ad break slate configuration.
+adBreak_slate :: Lens.Lens' AdBreak (Prelude.Maybe SlateSource)
+adBreak_slate = Lens.lens (\AdBreak' {slate} -> slate) (\s@AdBreak' {} a -> s {slate = a} :: AdBreak)
+
+-- | This defines the SCTE-35 @splice_insert()@ message inserted around the
+-- ad. For information about using @splice_insert()@, see the SCTE-35
+-- specficiaiton, section 9.7.3.1.
+adBreak_spliceInsertMessage :: Lens.Lens' AdBreak (Prelude.Maybe SpliceInsertMessage)
+adBreak_spliceInsertMessage = Lens.lens (\AdBreak' {spliceInsertMessage} -> spliceInsertMessage) (\s@AdBreak' {} a -> s {spliceInsertMessage = a} :: AdBreak)
+
+-- | Defines the SCTE-35 @time_signal@ message inserted around the ad.
+--
+-- Programs on a channel\'s schedule can be configured with one or more ad
+-- breaks. You can attach a @splice_insert@ SCTE-35 message to the ad
+-- break. This message provides basic metadata about the ad break.
+--
+-- See section 9.7.4 of the 2022 SCTE-35 specification for more
+-- information.
+adBreak_timeSignalMessage :: Lens.Lens' AdBreak (Prelude.Maybe TimeSignalMessage)
+adBreak_timeSignalMessage = Lens.lens (\AdBreak' {timeSignalMessage} -> timeSignalMessage) (\s@AdBreak' {} a -> s {timeSignalMessage = a} :: AdBreak)
+
+instance Data.FromJSON AdBreak where
+  parseJSON =
+    Data.withObject
+      "AdBreak"
+      ( \x ->
+          AdBreak'
+            Prelude.<$> (x Data..:? "MessageType")
+            Prelude.<*> (x Data..:? "OffsetMillis")
+            Prelude.<*> (x Data..:? "Slate")
+            Prelude.<*> (x Data..:? "SpliceInsertMessage")
+            Prelude.<*> (x Data..:? "TimeSignalMessage")
+      )
+
+instance Prelude.Hashable AdBreak where
+  hashWithSalt _salt AdBreak' {..} =
+    _salt
+      `Prelude.hashWithSalt` messageType
+      `Prelude.hashWithSalt` offsetMillis
+      `Prelude.hashWithSalt` slate
+      `Prelude.hashWithSalt` spliceInsertMessage
+      `Prelude.hashWithSalt` timeSignalMessage
+
+instance Prelude.NFData AdBreak where
+  rnf AdBreak' {..} =
+    Prelude.rnf messageType
+      `Prelude.seq` Prelude.rnf offsetMillis
+      `Prelude.seq` Prelude.rnf slate
+      `Prelude.seq` Prelude.rnf spliceInsertMessage
+      `Prelude.seq` Prelude.rnf timeSignalMessage
+
+instance Data.ToJSON AdBreak where
+  toJSON AdBreak' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MessageType" Data..=) Prelude.<$> messageType,
+            ("OffsetMillis" Data..=) Prelude.<$> offsetMillis,
+            ("Slate" Data..=) Prelude.<$> slate,
+            ("SpliceInsertMessage" Data..=)
+              Prelude.<$> spliceInsertMessage,
+            ("TimeSignalMessage" Data..=)
+              Prelude.<$> timeSignalMessage
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/AdMarkerPassthrough.hs b/gen/Amazonka/MediaTailor/Types/AdMarkerPassthrough.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/AdMarkerPassthrough.hs
@@ -0,0 +1,81 @@
+{-# 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.MediaTailor.Types.AdMarkerPassthrough
+-- 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.MediaTailor.Types.AdMarkerPassthrough 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
+
+-- | For HLS, when set to @true@, MediaTailor passes through @EXT-X-CUE-IN@,
+-- @EXT-X-CUE-OUT@, and @EXT-X-SPLICEPOINT-SCTE35@ ad markers from the
+-- origin manifest to the MediaTailor personalized manifest.
+--
+-- No logic is applied to these ad markers. For example, if @EXT-X-CUE-OUT@
+-- has a value of @60@, but no ads are filled for that ad break,
+-- MediaTailor will not set the value to @0@.
+--
+-- /See:/ 'newAdMarkerPassthrough' smart constructor.
+data AdMarkerPassthrough = AdMarkerPassthrough'
+  { -- | Enables ad marker passthrough for your configuration.
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AdMarkerPassthrough' 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:
+--
+-- 'enabled', 'adMarkerPassthrough_enabled' - Enables ad marker passthrough for your configuration.
+newAdMarkerPassthrough ::
+  AdMarkerPassthrough
+newAdMarkerPassthrough =
+  AdMarkerPassthrough' {enabled = Prelude.Nothing}
+
+-- | Enables ad marker passthrough for your configuration.
+adMarkerPassthrough_enabled :: Lens.Lens' AdMarkerPassthrough (Prelude.Maybe Prelude.Bool)
+adMarkerPassthrough_enabled = Lens.lens (\AdMarkerPassthrough' {enabled} -> enabled) (\s@AdMarkerPassthrough' {} a -> s {enabled = a} :: AdMarkerPassthrough)
+
+instance Data.FromJSON AdMarkerPassthrough where
+  parseJSON =
+    Data.withObject
+      "AdMarkerPassthrough"
+      ( \x ->
+          AdMarkerPassthrough'
+            Prelude.<$> (x Data..:? "Enabled")
+      )
+
+instance Prelude.Hashable AdMarkerPassthrough where
+  hashWithSalt _salt AdMarkerPassthrough' {..} =
+    _salt `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData AdMarkerPassthrough where
+  rnf AdMarkerPassthrough' {..} = Prelude.rnf enabled
+
+instance Data.ToJSON AdMarkerPassthrough where
+  toJSON AdMarkerPassthrough' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Enabled" Data..=) Prelude.<$> enabled]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/Alert.hs b/gen/Amazonka/MediaTailor/Types/Alert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/Alert.hs
@@ -0,0 +1,139 @@
+{-# 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.MediaTailor.Types.Alert
+-- 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.MediaTailor.Types.Alert 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
+
+-- | Alert configuration parameters.
+--
+-- /See:/ 'newAlert' smart constructor.
+data Alert = Alert'
+  { -- | The code for the alert. For example, @NOT_PROCESSED@.
+    alertCode :: Prelude.Text,
+    -- | If an alert is generated for a resource, an explanation of the reason
+    -- for the alert.
+    alertMessage :: Prelude.Text,
+    -- | The timestamp when the alert was last modified.
+    lastModifiedTime :: Data.POSIX,
+    -- | The Amazon Resource Names (ARNs) related to this alert.
+    relatedResourceArns :: [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) of the resource.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Alert' 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:
+--
+-- 'alertCode', 'alert_alertCode' - The code for the alert. For example, @NOT_PROCESSED@.
+--
+-- 'alertMessage', 'alert_alertMessage' - If an alert is generated for a resource, an explanation of the reason
+-- for the alert.
+--
+-- 'lastModifiedTime', 'alert_lastModifiedTime' - The timestamp when the alert was last modified.
+--
+-- 'relatedResourceArns', 'alert_relatedResourceArns' - The Amazon Resource Names (ARNs) related to this alert.
+--
+-- 'resourceArn', 'alert_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+newAlert ::
+  -- | 'alertCode'
+  Prelude.Text ->
+  -- | 'alertMessage'
+  Prelude.Text ->
+  -- | 'lastModifiedTime'
+  Prelude.UTCTime ->
+  -- | 'resourceArn'
+  Prelude.Text ->
+  Alert
+newAlert
+  pAlertCode_
+  pAlertMessage_
+  pLastModifiedTime_
+  pResourceArn_ =
+    Alert'
+      { alertCode = pAlertCode_,
+        alertMessage = pAlertMessage_,
+        lastModifiedTime =
+          Data._Time Lens.# pLastModifiedTime_,
+        relatedResourceArns = Prelude.mempty,
+        resourceArn = pResourceArn_
+      }
+
+-- | The code for the alert. For example, @NOT_PROCESSED@.
+alert_alertCode :: Lens.Lens' Alert Prelude.Text
+alert_alertCode = Lens.lens (\Alert' {alertCode} -> alertCode) (\s@Alert' {} a -> s {alertCode = a} :: Alert)
+
+-- | If an alert is generated for a resource, an explanation of the reason
+-- for the alert.
+alert_alertMessage :: Lens.Lens' Alert Prelude.Text
+alert_alertMessage = Lens.lens (\Alert' {alertMessage} -> alertMessage) (\s@Alert' {} a -> s {alertMessage = a} :: Alert)
+
+-- | The timestamp when the alert was last modified.
+alert_lastModifiedTime :: Lens.Lens' Alert Prelude.UTCTime
+alert_lastModifiedTime = Lens.lens (\Alert' {lastModifiedTime} -> lastModifiedTime) (\s@Alert' {} a -> s {lastModifiedTime = a} :: Alert) Prelude.. Data._Time
+
+-- | The Amazon Resource Names (ARNs) related to this alert.
+alert_relatedResourceArns :: Lens.Lens' Alert [Prelude.Text]
+alert_relatedResourceArns = Lens.lens (\Alert' {relatedResourceArns} -> relatedResourceArns) (\s@Alert' {} a -> s {relatedResourceArns = a} :: Alert) Prelude.. Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the resource.
+alert_resourceArn :: Lens.Lens' Alert Prelude.Text
+alert_resourceArn = Lens.lens (\Alert' {resourceArn} -> resourceArn) (\s@Alert' {} a -> s {resourceArn = a} :: Alert)
+
+instance Data.FromJSON Alert where
+  parseJSON =
+    Data.withObject
+      "Alert"
+      ( \x ->
+          Alert'
+            Prelude.<$> (x Data..: "AlertCode")
+            Prelude.<*> (x Data..: "AlertMessage")
+            Prelude.<*> (x Data..: "LastModifiedTime")
+            Prelude.<*> ( x
+                            Data..:? "RelatedResourceArns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "ResourceArn")
+      )
+
+instance Prelude.Hashable Alert where
+  hashWithSalt _salt Alert' {..} =
+    _salt
+      `Prelude.hashWithSalt` alertCode
+      `Prelude.hashWithSalt` alertMessage
+      `Prelude.hashWithSalt` lastModifiedTime
+      `Prelude.hashWithSalt` relatedResourceArns
+      `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData Alert where
+  rnf Alert' {..} =
+    Prelude.rnf alertCode
+      `Prelude.seq` Prelude.rnf alertMessage
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf relatedResourceArns
+      `Prelude.seq` Prelude.rnf resourceArn
diff --git a/gen/Amazonka/MediaTailor/Types/AvailMatchingCriteria.hs b/gen/Amazonka/MediaTailor/Types/AvailMatchingCriteria.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/AvailMatchingCriteria.hs
@@ -0,0 +1,141 @@
+{-# 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.MediaTailor.Types.AvailMatchingCriteria
+-- 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.MediaTailor.Types.AvailMatchingCriteria where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.Operator
+import qualified Amazonka.Prelude as Prelude
+
+-- | MediaTailor only places (consumes) prefetched ads if the ad break meets
+-- the criteria defined by the dynamic variables. This gives you granular
+-- control over which ad break to place the prefetched ads into.
+--
+-- As an example, let\'s say that you set @DynamicVariable@ to
+-- @scte.event_id@ and @Operator@ to @EQUALS@, and your playback
+-- configuration has an ADS URL of
+-- @https:\/\/my.ads.server.com\/path?&podId=[scte.avail_num]&event=[scte.event_id]&duration=[session.avail_duration_secs]@.
+-- And the prefetch request to the ADS contains these values
+-- @https:\/\/my.ads.server.com\/path?&podId=3&event=my-awesome-event&duration=30@.
+-- MediaTailor will only insert the prefetched ads into the ad break if has
+-- a SCTE marker with an event id of @my-awesome-event@, since it must
+-- match the event id that MediaTailor uses to query the ADS.
+--
+-- You can specify up to five @AvailMatchingCriteria@. If you specify
+-- multiple @AvailMatchingCriteria@, MediaTailor combines them to match
+-- using a logical @AND@. You can model logical @OR@ combinations by
+-- creating multiple prefetch schedules.
+--
+-- /See:/ 'newAvailMatchingCriteria' smart constructor.
+data AvailMatchingCriteria = AvailMatchingCriteria'
+  { -- | The dynamic variable(s) that MediaTailor should use as avail matching
+    -- criteria. MediaTailor only places the prefetched ads into the avail if
+    -- the avail matches the criteria defined by the dynamic variable. For
+    -- information about dynamic variables, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables.html Using dynamic ad variables>
+    -- in the /MediaTailor User Guide/.
+    --
+    -- You can include up to 100 dynamic variables.
+    dynamicVariable :: Prelude.Text,
+    -- | For the @DynamicVariable@ specified in @AvailMatchingCriteria@, the
+    -- Operator that is used for the comparison.
+    operator :: Operator
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AvailMatchingCriteria' 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:
+--
+-- 'dynamicVariable', 'availMatchingCriteria_dynamicVariable' - The dynamic variable(s) that MediaTailor should use as avail matching
+-- criteria. MediaTailor only places the prefetched ads into the avail if
+-- the avail matches the criteria defined by the dynamic variable. For
+-- information about dynamic variables, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables.html Using dynamic ad variables>
+-- in the /MediaTailor User Guide/.
+--
+-- You can include up to 100 dynamic variables.
+--
+-- 'operator', 'availMatchingCriteria_operator' - For the @DynamicVariable@ specified in @AvailMatchingCriteria@, the
+-- Operator that is used for the comparison.
+newAvailMatchingCriteria ::
+  -- | 'dynamicVariable'
+  Prelude.Text ->
+  -- | 'operator'
+  Operator ->
+  AvailMatchingCriteria
+newAvailMatchingCriteria pDynamicVariable_ pOperator_ =
+  AvailMatchingCriteria'
+    { dynamicVariable =
+        pDynamicVariable_,
+      operator = pOperator_
+    }
+
+-- | The dynamic variable(s) that MediaTailor should use as avail matching
+-- criteria. MediaTailor only places the prefetched ads into the avail if
+-- the avail matches the criteria defined by the dynamic variable. For
+-- information about dynamic variables, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables.html Using dynamic ad variables>
+-- in the /MediaTailor User Guide/.
+--
+-- You can include up to 100 dynamic variables.
+availMatchingCriteria_dynamicVariable :: Lens.Lens' AvailMatchingCriteria Prelude.Text
+availMatchingCriteria_dynamicVariable = Lens.lens (\AvailMatchingCriteria' {dynamicVariable} -> dynamicVariable) (\s@AvailMatchingCriteria' {} a -> s {dynamicVariable = a} :: AvailMatchingCriteria)
+
+-- | For the @DynamicVariable@ specified in @AvailMatchingCriteria@, the
+-- Operator that is used for the comparison.
+availMatchingCriteria_operator :: Lens.Lens' AvailMatchingCriteria Operator
+availMatchingCriteria_operator = Lens.lens (\AvailMatchingCriteria' {operator} -> operator) (\s@AvailMatchingCriteria' {} a -> s {operator = a} :: AvailMatchingCriteria)
+
+instance Data.FromJSON AvailMatchingCriteria where
+  parseJSON =
+    Data.withObject
+      "AvailMatchingCriteria"
+      ( \x ->
+          AvailMatchingCriteria'
+            Prelude.<$> (x Data..: "DynamicVariable")
+            Prelude.<*> (x Data..: "Operator")
+      )
+
+instance Prelude.Hashable AvailMatchingCriteria where
+  hashWithSalt _salt AvailMatchingCriteria' {..} =
+    _salt
+      `Prelude.hashWithSalt` dynamicVariable
+      `Prelude.hashWithSalt` operator
+
+instance Prelude.NFData AvailMatchingCriteria where
+  rnf AvailMatchingCriteria' {..} =
+    Prelude.rnf dynamicVariable
+      `Prelude.seq` Prelude.rnf operator
+
+instance Data.ToJSON AvailMatchingCriteria where
+  toJSON AvailMatchingCriteria' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("DynamicVariable" Data..= dynamicVariable),
+            Prelude.Just ("Operator" Data..= operator)
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/AvailSuppression.hs b/gen/Amazonka/MediaTailor/Types/AvailSuppression.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/AvailSuppression.hs
@@ -0,0 +1,131 @@
+{-# 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.MediaTailor.Types.AvailSuppression
+-- 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.MediaTailor.Types.AvailSuppression where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.Mode
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configuration for avail suppression, also known as ad suppression.
+-- For more information about ad suppression, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Suppression>.
+--
+-- /See:/ 'newAvailSuppression' smart constructor.
+data AvailSuppression = AvailSuppression'
+  { -- | Sets the ad suppression mode. By default, ad suppression is off and all
+    -- ad breaks are filled with ads or slate. When Mode is set to
+    -- @BEHIND_LIVE_EDGE@, ad suppression is active and MediaTailor won\'t fill
+    -- ad breaks on or behind the ad suppression Value time in the manifest
+    -- lookback window.
+    mode :: Prelude.Maybe Mode,
+    -- | A live edge offset time in HH:MM:SS. MediaTailor won\'t fill ad breaks
+    -- on or behind this time in the manifest lookback window. If Value is set
+    -- to 00:00:00, it is in sync with the live edge, and MediaTailor won\'t
+    -- fill any ad breaks on or behind the live edge. If you set a Value time,
+    -- MediaTailor won\'t fill any ad breaks on or behind this time in the
+    -- manifest lookback window. For example, if you set 00:45:00, then
+    -- MediaTailor will fill ad breaks that occur within 45 minutes behind the
+    -- live edge, but won\'t fill ad breaks on or behind 45 minutes behind the
+    -- live edge.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AvailSuppression' 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:
+--
+-- 'mode', 'availSuppression_mode' - Sets the ad suppression mode. By default, ad suppression is off and all
+-- ad breaks are filled with ads or slate. When Mode is set to
+-- @BEHIND_LIVE_EDGE@, ad suppression is active and MediaTailor won\'t fill
+-- ad breaks on or behind the ad suppression Value time in the manifest
+-- lookback window.
+--
+-- 'value', 'availSuppression_value' - A live edge offset time in HH:MM:SS. MediaTailor won\'t fill ad breaks
+-- on or behind this time in the manifest lookback window. If Value is set
+-- to 00:00:00, it is in sync with the live edge, and MediaTailor won\'t
+-- fill any ad breaks on or behind the live edge. If you set a Value time,
+-- MediaTailor won\'t fill any ad breaks on or behind this time in the
+-- manifest lookback window. For example, if you set 00:45:00, then
+-- MediaTailor will fill ad breaks that occur within 45 minutes behind the
+-- live edge, but won\'t fill ad breaks on or behind 45 minutes behind the
+-- live edge.
+newAvailSuppression ::
+  AvailSuppression
+newAvailSuppression =
+  AvailSuppression'
+    { mode = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | Sets the ad suppression mode. By default, ad suppression is off and all
+-- ad breaks are filled with ads or slate. When Mode is set to
+-- @BEHIND_LIVE_EDGE@, ad suppression is active and MediaTailor won\'t fill
+-- ad breaks on or behind the ad suppression Value time in the manifest
+-- lookback window.
+availSuppression_mode :: Lens.Lens' AvailSuppression (Prelude.Maybe Mode)
+availSuppression_mode = Lens.lens (\AvailSuppression' {mode} -> mode) (\s@AvailSuppression' {} a -> s {mode = a} :: AvailSuppression)
+
+-- | A live edge offset time in HH:MM:SS. MediaTailor won\'t fill ad breaks
+-- on or behind this time in the manifest lookback window. If Value is set
+-- to 00:00:00, it is in sync with the live edge, and MediaTailor won\'t
+-- fill any ad breaks on or behind the live edge. If you set a Value time,
+-- MediaTailor won\'t fill any ad breaks on or behind this time in the
+-- manifest lookback window. For example, if you set 00:45:00, then
+-- MediaTailor will fill ad breaks that occur within 45 minutes behind the
+-- live edge, but won\'t fill ad breaks on or behind 45 minutes behind the
+-- live edge.
+availSuppression_value :: Lens.Lens' AvailSuppression (Prelude.Maybe Prelude.Text)
+availSuppression_value = Lens.lens (\AvailSuppression' {value} -> value) (\s@AvailSuppression' {} a -> s {value = a} :: AvailSuppression)
+
+instance Data.FromJSON AvailSuppression where
+  parseJSON =
+    Data.withObject
+      "AvailSuppression"
+      ( \x ->
+          AvailSuppression'
+            Prelude.<$> (x Data..:? "Mode")
+            Prelude.<*> (x Data..:? "Value")
+      )
+
+instance Prelude.Hashable AvailSuppression where
+  hashWithSalt _salt AvailSuppression' {..} =
+    _salt
+      `Prelude.hashWithSalt` mode
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData AvailSuppression where
+  rnf AvailSuppression' {..} =
+    Prelude.rnf mode `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON AvailSuppression where
+  toJSON AvailSuppression' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Mode" Data..=) Prelude.<$> mode,
+            ("Value" Data..=) Prelude.<$> value
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/Bumper.hs b/gen/Amazonka/MediaTailor/Types/Bumper.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/Bumper.hs
@@ -0,0 +1,96 @@
+{-# 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.MediaTailor.Types.Bumper
+-- 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.MediaTailor.Types.Bumper 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 configuration for bumpers. Bumpers are short audio or video clips
+-- that play at the start or before the end of an ad break. To learn more
+-- about bumpers, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/bumpers.html Bumpers>.
+--
+-- /See:/ 'newBumper' smart constructor.
+data Bumper = Bumper'
+  { -- | The URL for the end bumper asset.
+    endUrl :: Prelude.Maybe Prelude.Text,
+    -- | The URL for the start bumper asset.
+    startUrl :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Bumper' 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:
+--
+-- 'endUrl', 'bumper_endUrl' - The URL for the end bumper asset.
+--
+-- 'startUrl', 'bumper_startUrl' - The URL for the start bumper asset.
+newBumper ::
+  Bumper
+newBumper =
+  Bumper'
+    { endUrl = Prelude.Nothing,
+      startUrl = Prelude.Nothing
+    }
+
+-- | The URL for the end bumper asset.
+bumper_endUrl :: Lens.Lens' Bumper (Prelude.Maybe Prelude.Text)
+bumper_endUrl = Lens.lens (\Bumper' {endUrl} -> endUrl) (\s@Bumper' {} a -> s {endUrl = a} :: Bumper)
+
+-- | The URL for the start bumper asset.
+bumper_startUrl :: Lens.Lens' Bumper (Prelude.Maybe Prelude.Text)
+bumper_startUrl = Lens.lens (\Bumper' {startUrl} -> startUrl) (\s@Bumper' {} a -> s {startUrl = a} :: Bumper)
+
+instance Data.FromJSON Bumper where
+  parseJSON =
+    Data.withObject
+      "Bumper"
+      ( \x ->
+          Bumper'
+            Prelude.<$> (x Data..:? "EndUrl")
+            Prelude.<*> (x Data..:? "StartUrl")
+      )
+
+instance Prelude.Hashable Bumper where
+  hashWithSalt _salt Bumper' {..} =
+    _salt
+      `Prelude.hashWithSalt` endUrl
+      `Prelude.hashWithSalt` startUrl
+
+instance Prelude.NFData Bumper where
+  rnf Bumper' {..} =
+    Prelude.rnf endUrl
+      `Prelude.seq` Prelude.rnf startUrl
+
+instance Data.ToJSON Bumper where
+  toJSON Bumper' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EndUrl" Data..=) Prelude.<$> endUrl,
+            ("StartUrl" Data..=) Prelude.<$> startUrl
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/CdnConfiguration.hs b/gen/Amazonka/MediaTailor/Types/CdnConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/CdnConfiguration.hs
@@ -0,0 +1,130 @@
+{-# 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.MediaTailor.Types.CdnConfiguration
+-- 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.MediaTailor.Types.CdnConfiguration 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 configuration for using a content delivery network (CDN), like
+-- Amazon CloudFront, for content and ad segment management.
+--
+-- /See:/ 'newCdnConfiguration' smart constructor.
+data CdnConfiguration = CdnConfiguration'
+  { -- | A non-default content delivery network (CDN) to serve ad segments. By
+    -- default, AWS Elemental MediaTailor uses Amazon CloudFront with default
+    -- cache settings as its CDN for ad segments. To set up an alternate CDN,
+    -- create a rule in your CDN for the origin
+    -- ads.mediatailor./\<region>/.amazonaws.com. Then specify the rule\'s name
+    -- in this @AdSegmentUrlPrefix@. When AWS Elemental MediaTailor serves a
+    -- manifest, it reports your CDN as the source for ad segments.
+    adSegmentUrlPrefix :: Prelude.Maybe Prelude.Text,
+    -- | A content delivery network (CDN) to cache content segments, so that
+    -- content requests don’t always have to go to the origin server. First,
+    -- create a rule in your CDN for the content segment origin server. Then
+    -- specify the rule\'s name in this @ContentSegmentUrlPrefix@. When AWS
+    -- Elemental MediaTailor serves a manifest, it reports your CDN as the
+    -- source for content segments.
+    contentSegmentUrlPrefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CdnConfiguration' 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:
+--
+-- 'adSegmentUrlPrefix', 'cdnConfiguration_adSegmentUrlPrefix' - A non-default content delivery network (CDN) to serve ad segments. By
+-- default, AWS Elemental MediaTailor uses Amazon CloudFront with default
+-- cache settings as its CDN for ad segments. To set up an alternate CDN,
+-- create a rule in your CDN for the origin
+-- ads.mediatailor./\<region>/.amazonaws.com. Then specify the rule\'s name
+-- in this @AdSegmentUrlPrefix@. When AWS Elemental MediaTailor serves a
+-- manifest, it reports your CDN as the source for ad segments.
+--
+-- 'contentSegmentUrlPrefix', 'cdnConfiguration_contentSegmentUrlPrefix' - A content delivery network (CDN) to cache content segments, so that
+-- content requests don’t always have to go to the origin server. First,
+-- create a rule in your CDN for the content segment origin server. Then
+-- specify the rule\'s name in this @ContentSegmentUrlPrefix@. When AWS
+-- Elemental MediaTailor serves a manifest, it reports your CDN as the
+-- source for content segments.
+newCdnConfiguration ::
+  CdnConfiguration
+newCdnConfiguration =
+  CdnConfiguration'
+    { adSegmentUrlPrefix =
+        Prelude.Nothing,
+      contentSegmentUrlPrefix = Prelude.Nothing
+    }
+
+-- | A non-default content delivery network (CDN) to serve ad segments. By
+-- default, AWS Elemental MediaTailor uses Amazon CloudFront with default
+-- cache settings as its CDN for ad segments. To set up an alternate CDN,
+-- create a rule in your CDN for the origin
+-- ads.mediatailor./\<region>/.amazonaws.com. Then specify the rule\'s name
+-- in this @AdSegmentUrlPrefix@. When AWS Elemental MediaTailor serves a
+-- manifest, it reports your CDN as the source for ad segments.
+cdnConfiguration_adSegmentUrlPrefix :: Lens.Lens' CdnConfiguration (Prelude.Maybe Prelude.Text)
+cdnConfiguration_adSegmentUrlPrefix = Lens.lens (\CdnConfiguration' {adSegmentUrlPrefix} -> adSegmentUrlPrefix) (\s@CdnConfiguration' {} a -> s {adSegmentUrlPrefix = a} :: CdnConfiguration)
+
+-- | A content delivery network (CDN) to cache content segments, so that
+-- content requests don’t always have to go to the origin server. First,
+-- create a rule in your CDN for the content segment origin server. Then
+-- specify the rule\'s name in this @ContentSegmentUrlPrefix@. When AWS
+-- Elemental MediaTailor serves a manifest, it reports your CDN as the
+-- source for content segments.
+cdnConfiguration_contentSegmentUrlPrefix :: Lens.Lens' CdnConfiguration (Prelude.Maybe Prelude.Text)
+cdnConfiguration_contentSegmentUrlPrefix = Lens.lens (\CdnConfiguration' {contentSegmentUrlPrefix} -> contentSegmentUrlPrefix) (\s@CdnConfiguration' {} a -> s {contentSegmentUrlPrefix = a} :: CdnConfiguration)
+
+instance Data.FromJSON CdnConfiguration where
+  parseJSON =
+    Data.withObject
+      "CdnConfiguration"
+      ( \x ->
+          CdnConfiguration'
+            Prelude.<$> (x Data..:? "AdSegmentUrlPrefix")
+            Prelude.<*> (x Data..:? "ContentSegmentUrlPrefix")
+      )
+
+instance Prelude.Hashable CdnConfiguration where
+  hashWithSalt _salt CdnConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` adSegmentUrlPrefix
+      `Prelude.hashWithSalt` contentSegmentUrlPrefix
+
+instance Prelude.NFData CdnConfiguration where
+  rnf CdnConfiguration' {..} =
+    Prelude.rnf adSegmentUrlPrefix
+      `Prelude.seq` Prelude.rnf contentSegmentUrlPrefix
+
+instance Data.ToJSON CdnConfiguration where
+  toJSON CdnConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AdSegmentUrlPrefix" Data..=)
+              Prelude.<$> adSegmentUrlPrefix,
+            ("ContentSegmentUrlPrefix" Data..=)
+              Prelude.<$> contentSegmentUrlPrefix
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/Channel.hs b/gen/Amazonka/MediaTailor/Types/Channel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/Channel.hs
@@ -0,0 +1,239 @@
+{-# 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.MediaTailor.Types.Channel
+-- 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.MediaTailor.Types.Channel where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.ResponseOutputItem
+import Amazonka.MediaTailor.Types.SlateSource
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configuration parameters for a channel. For information about
+-- MediaTailor channels, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-channels.html Working with channels>
+-- in the /MediaTailor User Guide/.
+--
+-- /See:/ 'newChannel' smart constructor.
+data Channel = Channel'
+  { -- | The timestamp of when the channel was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The slate used to fill gaps between programs in the schedule. You must
+    -- configure filler slate if your channel uses the @LINEAR@ @PlaybackMode@.
+    -- MediaTailor doesn\'t support filler slate for channels using the @LOOP@
+    -- @PlaybackMode@.
+    fillerSlate :: Prelude.Maybe SlateSource,
+    -- | The timestamp of when the channel was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The tags to assign to the channel. Tags are key-value pairs that you can
+    -- associate with Amazon resources to help with organization, access
+    -- control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ARN of the channel.
+    arn :: Prelude.Text,
+    -- | The name of the channel.
+    channelName :: Prelude.Text,
+    -- | Returns the state whether the channel is running or not.
+    channelState :: Prelude.Text,
+    -- | The channel\'s output properties.
+    outputs :: [ResponseOutputItem],
+    -- | The type of playback mode for this channel.
+    --
+    -- @LINEAR@ - Programs play back-to-back only once.
+    --
+    -- @LOOP@ - Programs play back-to-back in an endless loop. When the last
+    -- program in the schedule plays, playback loops back to the first program
+    -- in the schedule.
+    playbackMode :: Prelude.Text,
+    -- | The tier for this channel. STANDARD tier channels can contain live
+    -- programs.
+    tier :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Channel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'channel_creationTime' - The timestamp of when the channel was created.
+--
+-- 'fillerSlate', 'channel_fillerSlate' - The slate used to fill gaps between programs in the schedule. You must
+-- configure filler slate if your channel uses the @LINEAR@ @PlaybackMode@.
+-- MediaTailor doesn\'t support filler slate for channels using the @LOOP@
+-- @PlaybackMode@.
+--
+-- 'lastModifiedTime', 'channel_lastModifiedTime' - The timestamp of when the channel was last modified.
+--
+-- 'tags', 'channel_tags' - The tags to assign to the channel. Tags are key-value pairs that you can
+-- associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'arn', 'channel_arn' - The ARN of the channel.
+--
+-- 'channelName', 'channel_channelName' - The name of the channel.
+--
+-- 'channelState', 'channel_channelState' - Returns the state whether the channel is running or not.
+--
+-- 'outputs', 'channel_outputs' - The channel\'s output properties.
+--
+-- 'playbackMode', 'channel_playbackMode' - The type of playback mode for this channel.
+--
+-- @LINEAR@ - Programs play back-to-back only once.
+--
+-- @LOOP@ - Programs play back-to-back in an endless loop. When the last
+-- program in the schedule plays, playback loops back to the first program
+-- in the schedule.
+--
+-- 'tier', 'channel_tier' - The tier for this channel. STANDARD tier channels can contain live
+-- programs.
+newChannel ::
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'channelName'
+  Prelude.Text ->
+  -- | 'channelState'
+  Prelude.Text ->
+  -- | 'playbackMode'
+  Prelude.Text ->
+  -- | 'tier'
+  Prelude.Text ->
+  Channel
+newChannel
+  pArn_
+  pChannelName_
+  pChannelState_
+  pPlaybackMode_
+  pTier_ =
+    Channel'
+      { creationTime = Prelude.Nothing,
+        fillerSlate = Prelude.Nothing,
+        lastModifiedTime = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        arn = pArn_,
+        channelName = pChannelName_,
+        channelState = pChannelState_,
+        outputs = Prelude.mempty,
+        playbackMode = pPlaybackMode_,
+        tier = pTier_
+      }
+
+-- | The timestamp of when the channel was created.
+channel_creationTime :: Lens.Lens' Channel (Prelude.Maybe Prelude.UTCTime)
+channel_creationTime = Lens.lens (\Channel' {creationTime} -> creationTime) (\s@Channel' {} a -> s {creationTime = a} :: Channel) Prelude.. Lens.mapping Data._Time
+
+-- | The slate used to fill gaps between programs in the schedule. You must
+-- configure filler slate if your channel uses the @LINEAR@ @PlaybackMode@.
+-- MediaTailor doesn\'t support filler slate for channels using the @LOOP@
+-- @PlaybackMode@.
+channel_fillerSlate :: Lens.Lens' Channel (Prelude.Maybe SlateSource)
+channel_fillerSlate = Lens.lens (\Channel' {fillerSlate} -> fillerSlate) (\s@Channel' {} a -> s {fillerSlate = a} :: Channel)
+
+-- | The timestamp of when the channel was last modified.
+channel_lastModifiedTime :: Lens.Lens' Channel (Prelude.Maybe Prelude.UTCTime)
+channel_lastModifiedTime = Lens.lens (\Channel' {lastModifiedTime} -> lastModifiedTime) (\s@Channel' {} a -> s {lastModifiedTime = a} :: Channel) Prelude.. Lens.mapping Data._Time
+
+-- | The tags to assign to the channel. Tags are key-value pairs that you can
+-- associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+channel_tags :: Lens.Lens' Channel (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+channel_tags = Lens.lens (\Channel' {tags} -> tags) (\s@Channel' {} a -> s {tags = a} :: Channel) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the channel.
+channel_arn :: Lens.Lens' Channel Prelude.Text
+channel_arn = Lens.lens (\Channel' {arn} -> arn) (\s@Channel' {} a -> s {arn = a} :: Channel)
+
+-- | The name of the channel.
+channel_channelName :: Lens.Lens' Channel Prelude.Text
+channel_channelName = Lens.lens (\Channel' {channelName} -> channelName) (\s@Channel' {} a -> s {channelName = a} :: Channel)
+
+-- | Returns the state whether the channel is running or not.
+channel_channelState :: Lens.Lens' Channel Prelude.Text
+channel_channelState = Lens.lens (\Channel' {channelState} -> channelState) (\s@Channel' {} a -> s {channelState = a} :: Channel)
+
+-- | The channel\'s output properties.
+channel_outputs :: Lens.Lens' Channel [ResponseOutputItem]
+channel_outputs = Lens.lens (\Channel' {outputs} -> outputs) (\s@Channel' {} a -> s {outputs = a} :: Channel) Prelude.. Lens.coerced
+
+-- | The type of playback mode for this channel.
+--
+-- @LINEAR@ - Programs play back-to-back only once.
+--
+-- @LOOP@ - Programs play back-to-back in an endless loop. When the last
+-- program in the schedule plays, playback loops back to the first program
+-- in the schedule.
+channel_playbackMode :: Lens.Lens' Channel Prelude.Text
+channel_playbackMode = Lens.lens (\Channel' {playbackMode} -> playbackMode) (\s@Channel' {} a -> s {playbackMode = a} :: Channel)
+
+-- | The tier for this channel. STANDARD tier channels can contain live
+-- programs.
+channel_tier :: Lens.Lens' Channel Prelude.Text
+channel_tier = Lens.lens (\Channel' {tier} -> tier) (\s@Channel' {} a -> s {tier = a} :: Channel)
+
+instance Data.FromJSON Channel where
+  parseJSON =
+    Data.withObject
+      "Channel"
+      ( \x ->
+          Channel'
+            Prelude.<$> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "FillerSlate")
+            Prelude.<*> (x Data..:? "LastModifiedTime")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "Arn")
+            Prelude.<*> (x Data..: "ChannelName")
+            Prelude.<*> (x Data..: "ChannelState")
+            Prelude.<*> (x Data..:? "Outputs" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "PlaybackMode")
+            Prelude.<*> (x Data..: "Tier")
+      )
+
+instance Prelude.Hashable Channel where
+  hashWithSalt _salt Channel' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` fillerSlate
+      `Prelude.hashWithSalt` lastModifiedTime
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` channelName
+      `Prelude.hashWithSalt` channelState
+      `Prelude.hashWithSalt` outputs
+      `Prelude.hashWithSalt` playbackMode
+      `Prelude.hashWithSalt` tier
+
+instance Prelude.NFData Channel where
+  rnf Channel' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf fillerSlate
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf channelName
+      `Prelude.seq` Prelude.rnf channelState
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf playbackMode
+      `Prelude.seq` Prelude.rnf tier
diff --git a/gen/Amazonka/MediaTailor/Types/ChannelState.hs b/gen/Amazonka/MediaTailor/Types/ChannelState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/ChannelState.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.MediaTailor.Types.ChannelState
+-- 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.MediaTailor.Types.ChannelState
+  ( ChannelState
+      ( ..,
+        ChannelState_RUNNING,
+        ChannelState_STOPPED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ChannelState = ChannelState'
+  { fromChannelState ::
+      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 ChannelState_RUNNING :: ChannelState
+pattern ChannelState_RUNNING = ChannelState' "RUNNING"
+
+pattern ChannelState_STOPPED :: ChannelState
+pattern ChannelState_STOPPED = ChannelState' "STOPPED"
+
+{-# COMPLETE
+  ChannelState_RUNNING,
+  ChannelState_STOPPED,
+  ChannelState'
+  #-}
diff --git a/gen/Amazonka/MediaTailor/Types/DashConfiguration.hs b/gen/Amazonka/MediaTailor/Types/DashConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/DashConfiguration.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.MediaTailor.Types.DashConfiguration
+-- 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.MediaTailor.Types.DashConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.OriginManifestType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configuration for DASH content.
+--
+-- /See:/ 'newDashConfiguration' smart constructor.
+data DashConfiguration = DashConfiguration'
+  { -- | The URL generated by MediaTailor to initiate a playback session. The
+    -- session uses server-side reporting. This setting is ignored in PUT
+    -- operations.
+    manifestEndpointPrefix :: Prelude.Maybe Prelude.Text,
+    -- | The setting that controls whether MediaTailor includes the Location tag
+    -- in DASH manifests. MediaTailor populates the Location tag with the URL
+    -- for manifest update requests, to be used by players that don\'t support
+    -- sticky redirects. Disable this if you have CDN routing rules set up for
+    -- accessing MediaTailor manifests, and you are either using client-side
+    -- reporting or your players support sticky HTTP redirects. Valid values
+    -- are @DISABLED@ and @EMT_DEFAULT@. The @EMT_DEFAULT@ setting enables the
+    -- inclusion of the tag and is the default value.
+    mpdLocation :: Prelude.Maybe Prelude.Text,
+    -- | The setting that controls whether MediaTailor handles manifests from the
+    -- origin server as multi-period manifests or single-period manifests. If
+    -- your origin server produces single-period manifests, set this to
+    -- @SINGLE_PERIOD@. The default setting is @MULTI_PERIOD@. For multi-period
+    -- manifests, omit this setting or set it to @MULTI_PERIOD@.
+    originManifestType :: Prelude.Maybe OriginManifestType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DashConfiguration' 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:
+--
+-- 'manifestEndpointPrefix', 'dashConfiguration_manifestEndpointPrefix' - The URL generated by MediaTailor to initiate a playback session. The
+-- session uses server-side reporting. This setting is ignored in PUT
+-- operations.
+--
+-- 'mpdLocation', 'dashConfiguration_mpdLocation' - The setting that controls whether MediaTailor includes the Location tag
+-- in DASH manifests. MediaTailor populates the Location tag with the URL
+-- for manifest update requests, to be used by players that don\'t support
+-- sticky redirects. Disable this if you have CDN routing rules set up for
+-- accessing MediaTailor manifests, and you are either using client-side
+-- reporting or your players support sticky HTTP redirects. Valid values
+-- are @DISABLED@ and @EMT_DEFAULT@. The @EMT_DEFAULT@ setting enables the
+-- inclusion of the tag and is the default value.
+--
+-- 'originManifestType', 'dashConfiguration_originManifestType' - The setting that controls whether MediaTailor handles manifests from the
+-- origin server as multi-period manifests or single-period manifests. If
+-- your origin server produces single-period manifests, set this to
+-- @SINGLE_PERIOD@. The default setting is @MULTI_PERIOD@. For multi-period
+-- manifests, omit this setting or set it to @MULTI_PERIOD@.
+newDashConfiguration ::
+  DashConfiguration
+newDashConfiguration =
+  DashConfiguration'
+    { manifestEndpointPrefix =
+        Prelude.Nothing,
+      mpdLocation = Prelude.Nothing,
+      originManifestType = Prelude.Nothing
+    }
+
+-- | The URL generated by MediaTailor to initiate a playback session. The
+-- session uses server-side reporting. This setting is ignored in PUT
+-- operations.
+dashConfiguration_manifestEndpointPrefix :: Lens.Lens' DashConfiguration (Prelude.Maybe Prelude.Text)
+dashConfiguration_manifestEndpointPrefix = Lens.lens (\DashConfiguration' {manifestEndpointPrefix} -> manifestEndpointPrefix) (\s@DashConfiguration' {} a -> s {manifestEndpointPrefix = a} :: DashConfiguration)
+
+-- | The setting that controls whether MediaTailor includes the Location tag
+-- in DASH manifests. MediaTailor populates the Location tag with the URL
+-- for manifest update requests, to be used by players that don\'t support
+-- sticky redirects. Disable this if you have CDN routing rules set up for
+-- accessing MediaTailor manifests, and you are either using client-side
+-- reporting or your players support sticky HTTP redirects. Valid values
+-- are @DISABLED@ and @EMT_DEFAULT@. The @EMT_DEFAULT@ setting enables the
+-- inclusion of the tag and is the default value.
+dashConfiguration_mpdLocation :: Lens.Lens' DashConfiguration (Prelude.Maybe Prelude.Text)
+dashConfiguration_mpdLocation = Lens.lens (\DashConfiguration' {mpdLocation} -> mpdLocation) (\s@DashConfiguration' {} a -> s {mpdLocation = a} :: DashConfiguration)
+
+-- | The setting that controls whether MediaTailor handles manifests from the
+-- origin server as multi-period manifests or single-period manifests. If
+-- your origin server produces single-period manifests, set this to
+-- @SINGLE_PERIOD@. The default setting is @MULTI_PERIOD@. For multi-period
+-- manifests, omit this setting or set it to @MULTI_PERIOD@.
+dashConfiguration_originManifestType :: Lens.Lens' DashConfiguration (Prelude.Maybe OriginManifestType)
+dashConfiguration_originManifestType = Lens.lens (\DashConfiguration' {originManifestType} -> originManifestType) (\s@DashConfiguration' {} a -> s {originManifestType = a} :: DashConfiguration)
+
+instance Data.FromJSON DashConfiguration where
+  parseJSON =
+    Data.withObject
+      "DashConfiguration"
+      ( \x ->
+          DashConfiguration'
+            Prelude.<$> (x Data..:? "ManifestEndpointPrefix")
+            Prelude.<*> (x Data..:? "MpdLocation")
+            Prelude.<*> (x Data..:? "OriginManifestType")
+      )
+
+instance Prelude.Hashable DashConfiguration where
+  hashWithSalt _salt DashConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` manifestEndpointPrefix
+      `Prelude.hashWithSalt` mpdLocation
+      `Prelude.hashWithSalt` originManifestType
+
+instance Prelude.NFData DashConfiguration where
+  rnf DashConfiguration' {..} =
+    Prelude.rnf manifestEndpointPrefix
+      `Prelude.seq` Prelude.rnf mpdLocation
+      `Prelude.seq` Prelude.rnf originManifestType
diff --git a/gen/Amazonka/MediaTailor/Types/DashConfigurationForPut.hs b/gen/Amazonka/MediaTailor/Types/DashConfigurationForPut.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/DashConfigurationForPut.hs
@@ -0,0 +1,119 @@
+{-# 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.MediaTailor.Types.DashConfigurationForPut
+-- 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.MediaTailor.Types.DashConfigurationForPut where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.OriginManifestType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configuration for DASH PUT operations.
+--
+-- /See:/ 'newDashConfigurationForPut' smart constructor.
+data DashConfigurationForPut = DashConfigurationForPut'
+  { -- | The setting that controls whether MediaTailor includes the Location tag
+    -- in DASH manifests. MediaTailor populates the Location tag with the URL
+    -- for manifest update requests, to be used by players that don\'t support
+    -- sticky redirects. Disable this if you have CDN routing rules set up for
+    -- accessing MediaTailor manifests, and you are either using client-side
+    -- reporting or your players support sticky HTTP redirects. Valid values
+    -- are @DISABLED@ and @EMT_DEFAULT@. The @EMT_DEFAULT@ setting enables the
+    -- inclusion of the tag and is the default value.
+    mpdLocation :: Prelude.Maybe Prelude.Text,
+    -- | The setting that controls whether MediaTailor handles manifests from the
+    -- origin server as multi-period manifests or single-period manifests. If
+    -- your origin server produces single-period manifests, set this to
+    -- @SINGLE_PERIOD@. The default setting is @MULTI_PERIOD@. For multi-period
+    -- manifests, omit this setting or set it to @MULTI_PERIOD@.
+    originManifestType :: Prelude.Maybe OriginManifestType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DashConfigurationForPut' 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:
+--
+-- 'mpdLocation', 'dashConfigurationForPut_mpdLocation' - The setting that controls whether MediaTailor includes the Location tag
+-- in DASH manifests. MediaTailor populates the Location tag with the URL
+-- for manifest update requests, to be used by players that don\'t support
+-- sticky redirects. Disable this if you have CDN routing rules set up for
+-- accessing MediaTailor manifests, and you are either using client-side
+-- reporting or your players support sticky HTTP redirects. Valid values
+-- are @DISABLED@ and @EMT_DEFAULT@. The @EMT_DEFAULT@ setting enables the
+-- inclusion of the tag and is the default value.
+--
+-- 'originManifestType', 'dashConfigurationForPut_originManifestType' - The setting that controls whether MediaTailor handles manifests from the
+-- origin server as multi-period manifests or single-period manifests. If
+-- your origin server produces single-period manifests, set this to
+-- @SINGLE_PERIOD@. The default setting is @MULTI_PERIOD@. For multi-period
+-- manifests, omit this setting or set it to @MULTI_PERIOD@.
+newDashConfigurationForPut ::
+  DashConfigurationForPut
+newDashConfigurationForPut =
+  DashConfigurationForPut'
+    { mpdLocation =
+        Prelude.Nothing,
+      originManifestType = Prelude.Nothing
+    }
+
+-- | The setting that controls whether MediaTailor includes the Location tag
+-- in DASH manifests. MediaTailor populates the Location tag with the URL
+-- for manifest update requests, to be used by players that don\'t support
+-- sticky redirects. Disable this if you have CDN routing rules set up for
+-- accessing MediaTailor manifests, and you are either using client-side
+-- reporting or your players support sticky HTTP redirects. Valid values
+-- are @DISABLED@ and @EMT_DEFAULT@. The @EMT_DEFAULT@ setting enables the
+-- inclusion of the tag and is the default value.
+dashConfigurationForPut_mpdLocation :: Lens.Lens' DashConfigurationForPut (Prelude.Maybe Prelude.Text)
+dashConfigurationForPut_mpdLocation = Lens.lens (\DashConfigurationForPut' {mpdLocation} -> mpdLocation) (\s@DashConfigurationForPut' {} a -> s {mpdLocation = a} :: DashConfigurationForPut)
+
+-- | The setting that controls whether MediaTailor handles manifests from the
+-- origin server as multi-period manifests or single-period manifests. If
+-- your origin server produces single-period manifests, set this to
+-- @SINGLE_PERIOD@. The default setting is @MULTI_PERIOD@. For multi-period
+-- manifests, omit this setting or set it to @MULTI_PERIOD@.
+dashConfigurationForPut_originManifestType :: Lens.Lens' DashConfigurationForPut (Prelude.Maybe OriginManifestType)
+dashConfigurationForPut_originManifestType = Lens.lens (\DashConfigurationForPut' {originManifestType} -> originManifestType) (\s@DashConfigurationForPut' {} a -> s {originManifestType = a} :: DashConfigurationForPut)
+
+instance Prelude.Hashable DashConfigurationForPut where
+  hashWithSalt _salt DashConfigurationForPut' {..} =
+    _salt
+      `Prelude.hashWithSalt` mpdLocation
+      `Prelude.hashWithSalt` originManifestType
+
+instance Prelude.NFData DashConfigurationForPut where
+  rnf DashConfigurationForPut' {..} =
+    Prelude.rnf mpdLocation
+      `Prelude.seq` Prelude.rnf originManifestType
+
+instance Data.ToJSON DashConfigurationForPut where
+  toJSON DashConfigurationForPut' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MpdLocation" Data..=) Prelude.<$> mpdLocation,
+            ("OriginManifestType" Data..=)
+              Prelude.<$> originManifestType
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/DashPlaylistSettings.hs b/gen/Amazonka/MediaTailor/Types/DashPlaylistSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/DashPlaylistSettings.hs
@@ -0,0 +1,145 @@
+{-# 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.MediaTailor.Types.DashPlaylistSettings
+-- 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.MediaTailor.Types.DashPlaylistSettings 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
+
+-- | Dash manifest configuration parameters.
+--
+-- /See:/ 'newDashPlaylistSettings' smart constructor.
+data DashPlaylistSettings = DashPlaylistSettings'
+  { -- | The total duration (in seconds) of each manifest. Minimum value: @30@
+    -- seconds. Maximum value: @3600@ seconds.
+    manifestWindowSeconds :: Prelude.Maybe Prelude.Int,
+    -- | Minimum amount of content (measured in seconds) that a player must keep
+    -- available in the buffer. Minimum value: @2@ seconds. Maximum value: @60@
+    -- seconds.
+    minBufferTimeSeconds :: Prelude.Maybe Prelude.Int,
+    -- | Minimum amount of time (in seconds) that the player should wait before
+    -- requesting updates to the manifest. Minimum value: @2@ seconds. Maximum
+    -- value: @60@ seconds.
+    minUpdatePeriodSeconds :: Prelude.Maybe Prelude.Int,
+    -- | Amount of time (in seconds) that the player should be from the live
+    -- point at the end of the manifest. Minimum value: @2@ seconds. Maximum
+    -- value: @60@ seconds.
+    suggestedPresentationDelaySeconds :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DashPlaylistSettings' 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:
+--
+-- 'manifestWindowSeconds', 'dashPlaylistSettings_manifestWindowSeconds' - The total duration (in seconds) of each manifest. Minimum value: @30@
+-- seconds. Maximum value: @3600@ seconds.
+--
+-- 'minBufferTimeSeconds', 'dashPlaylistSettings_minBufferTimeSeconds' - Minimum amount of content (measured in seconds) that a player must keep
+-- available in the buffer. Minimum value: @2@ seconds. Maximum value: @60@
+-- seconds.
+--
+-- 'minUpdatePeriodSeconds', 'dashPlaylistSettings_minUpdatePeriodSeconds' - Minimum amount of time (in seconds) that the player should wait before
+-- requesting updates to the manifest. Minimum value: @2@ seconds. Maximum
+-- value: @60@ seconds.
+--
+-- 'suggestedPresentationDelaySeconds', 'dashPlaylistSettings_suggestedPresentationDelaySeconds' - Amount of time (in seconds) that the player should be from the live
+-- point at the end of the manifest. Minimum value: @2@ seconds. Maximum
+-- value: @60@ seconds.
+newDashPlaylistSettings ::
+  DashPlaylistSettings
+newDashPlaylistSettings =
+  DashPlaylistSettings'
+    { manifestWindowSeconds =
+        Prelude.Nothing,
+      minBufferTimeSeconds = Prelude.Nothing,
+      minUpdatePeriodSeconds = Prelude.Nothing,
+      suggestedPresentationDelaySeconds = Prelude.Nothing
+    }
+
+-- | The total duration (in seconds) of each manifest. Minimum value: @30@
+-- seconds. Maximum value: @3600@ seconds.
+dashPlaylistSettings_manifestWindowSeconds :: Lens.Lens' DashPlaylistSettings (Prelude.Maybe Prelude.Int)
+dashPlaylistSettings_manifestWindowSeconds = Lens.lens (\DashPlaylistSettings' {manifestWindowSeconds} -> manifestWindowSeconds) (\s@DashPlaylistSettings' {} a -> s {manifestWindowSeconds = a} :: DashPlaylistSettings)
+
+-- | Minimum amount of content (measured in seconds) that a player must keep
+-- available in the buffer. Minimum value: @2@ seconds. Maximum value: @60@
+-- seconds.
+dashPlaylistSettings_minBufferTimeSeconds :: Lens.Lens' DashPlaylistSettings (Prelude.Maybe Prelude.Int)
+dashPlaylistSettings_minBufferTimeSeconds = Lens.lens (\DashPlaylistSettings' {minBufferTimeSeconds} -> minBufferTimeSeconds) (\s@DashPlaylistSettings' {} a -> s {minBufferTimeSeconds = a} :: DashPlaylistSettings)
+
+-- | Minimum amount of time (in seconds) that the player should wait before
+-- requesting updates to the manifest. Minimum value: @2@ seconds. Maximum
+-- value: @60@ seconds.
+dashPlaylistSettings_minUpdatePeriodSeconds :: Lens.Lens' DashPlaylistSettings (Prelude.Maybe Prelude.Int)
+dashPlaylistSettings_minUpdatePeriodSeconds = Lens.lens (\DashPlaylistSettings' {minUpdatePeriodSeconds} -> minUpdatePeriodSeconds) (\s@DashPlaylistSettings' {} a -> s {minUpdatePeriodSeconds = a} :: DashPlaylistSettings)
+
+-- | Amount of time (in seconds) that the player should be from the live
+-- point at the end of the manifest. Minimum value: @2@ seconds. Maximum
+-- value: @60@ seconds.
+dashPlaylistSettings_suggestedPresentationDelaySeconds :: Lens.Lens' DashPlaylistSettings (Prelude.Maybe Prelude.Int)
+dashPlaylistSettings_suggestedPresentationDelaySeconds = Lens.lens (\DashPlaylistSettings' {suggestedPresentationDelaySeconds} -> suggestedPresentationDelaySeconds) (\s@DashPlaylistSettings' {} a -> s {suggestedPresentationDelaySeconds = a} :: DashPlaylistSettings)
+
+instance Data.FromJSON DashPlaylistSettings where
+  parseJSON =
+    Data.withObject
+      "DashPlaylistSettings"
+      ( \x ->
+          DashPlaylistSettings'
+            Prelude.<$> (x Data..:? "ManifestWindowSeconds")
+            Prelude.<*> (x Data..:? "MinBufferTimeSeconds")
+            Prelude.<*> (x Data..:? "MinUpdatePeriodSeconds")
+            Prelude.<*> (x Data..:? "SuggestedPresentationDelaySeconds")
+      )
+
+instance Prelude.Hashable DashPlaylistSettings where
+  hashWithSalt _salt DashPlaylistSettings' {..} =
+    _salt
+      `Prelude.hashWithSalt` manifestWindowSeconds
+      `Prelude.hashWithSalt` minBufferTimeSeconds
+      `Prelude.hashWithSalt` minUpdatePeriodSeconds
+      `Prelude.hashWithSalt` suggestedPresentationDelaySeconds
+
+instance Prelude.NFData DashPlaylistSettings where
+  rnf DashPlaylistSettings' {..} =
+    Prelude.rnf manifestWindowSeconds
+      `Prelude.seq` Prelude.rnf minBufferTimeSeconds
+      `Prelude.seq` Prelude.rnf minUpdatePeriodSeconds
+      `Prelude.seq` Prelude.rnf suggestedPresentationDelaySeconds
+
+instance Data.ToJSON DashPlaylistSettings where
+  toJSON DashPlaylistSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ManifestWindowSeconds" Data..=)
+              Prelude.<$> manifestWindowSeconds,
+            ("MinBufferTimeSeconds" Data..=)
+              Prelude.<$> minBufferTimeSeconds,
+            ("MinUpdatePeriodSeconds" Data..=)
+              Prelude.<$> minUpdatePeriodSeconds,
+            ("SuggestedPresentationDelaySeconds" Data..=)
+              Prelude.<$> suggestedPresentationDelaySeconds
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/DefaultSegmentDeliveryConfiguration.hs b/gen/Amazonka/MediaTailor/Types/DefaultSegmentDeliveryConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/DefaultSegmentDeliveryConfiguration.hs
@@ -0,0 +1,102 @@
+{-# 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.MediaTailor.Types.DefaultSegmentDeliveryConfiguration
+-- 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.MediaTailor.Types.DefaultSegmentDeliveryConfiguration 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 optional configuration for a server that serves segments. Use this
+-- if you want the segment delivery server to be different from the source
+-- location server. For example, you can configure your source location
+-- server to be an origination server, such as MediaPackage, and the
+-- segment delivery server to be a content delivery network (CDN), such as
+-- CloudFront. If you don\'t specify a segment delivery server, then the
+-- source location server is used.
+--
+-- /See:/ 'newDefaultSegmentDeliveryConfiguration' smart constructor.
+data DefaultSegmentDeliveryConfiguration = DefaultSegmentDeliveryConfiguration'
+  { -- | The hostname of the server that will be used to serve segments. This
+    -- string must include the protocol, such as __https:\/\/__.
+    baseUrl :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DefaultSegmentDeliveryConfiguration' 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:
+--
+-- 'baseUrl', 'defaultSegmentDeliveryConfiguration_baseUrl' - The hostname of the server that will be used to serve segments. This
+-- string must include the protocol, such as __https:\/\/__.
+newDefaultSegmentDeliveryConfiguration ::
+  DefaultSegmentDeliveryConfiguration
+newDefaultSegmentDeliveryConfiguration =
+  DefaultSegmentDeliveryConfiguration'
+    { baseUrl =
+        Prelude.Nothing
+    }
+
+-- | The hostname of the server that will be used to serve segments. This
+-- string must include the protocol, such as __https:\/\/__.
+defaultSegmentDeliveryConfiguration_baseUrl :: Lens.Lens' DefaultSegmentDeliveryConfiguration (Prelude.Maybe Prelude.Text)
+defaultSegmentDeliveryConfiguration_baseUrl = Lens.lens (\DefaultSegmentDeliveryConfiguration' {baseUrl} -> baseUrl) (\s@DefaultSegmentDeliveryConfiguration' {} a -> s {baseUrl = a} :: DefaultSegmentDeliveryConfiguration)
+
+instance
+  Data.FromJSON
+    DefaultSegmentDeliveryConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "DefaultSegmentDeliveryConfiguration"
+      ( \x ->
+          DefaultSegmentDeliveryConfiguration'
+            Prelude.<$> (x Data..:? "BaseUrl")
+      )
+
+instance
+  Prelude.Hashable
+    DefaultSegmentDeliveryConfiguration
+  where
+  hashWithSalt
+    _salt
+    DefaultSegmentDeliveryConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` baseUrl
+
+instance
+  Prelude.NFData
+    DefaultSegmentDeliveryConfiguration
+  where
+  rnf DefaultSegmentDeliveryConfiguration' {..} =
+    Prelude.rnf baseUrl
+
+instance
+  Data.ToJSON
+    DefaultSegmentDeliveryConfiguration
+  where
+  toJSON DefaultSegmentDeliveryConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("BaseUrl" Data..=) Prelude.<$> baseUrl]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/HlsConfiguration.hs b/gen/Amazonka/MediaTailor/Types/HlsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/HlsConfiguration.hs
@@ -0,0 +1,75 @@
+{-# 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.MediaTailor.Types.HlsConfiguration
+-- 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.MediaTailor.Types.HlsConfiguration 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 configuration for HLS content.
+--
+-- /See:/ 'newHlsConfiguration' smart constructor.
+data HlsConfiguration = HlsConfiguration'
+  { -- | The URL that is used to initiate a playback session for devices that
+    -- support Apple HLS. The session uses server-side reporting.
+    manifestEndpointPrefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HlsConfiguration' 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:
+--
+-- 'manifestEndpointPrefix', 'hlsConfiguration_manifestEndpointPrefix' - The URL that is used to initiate a playback session for devices that
+-- support Apple HLS. The session uses server-side reporting.
+newHlsConfiguration ::
+  HlsConfiguration
+newHlsConfiguration =
+  HlsConfiguration'
+    { manifestEndpointPrefix =
+        Prelude.Nothing
+    }
+
+-- | The URL that is used to initiate a playback session for devices that
+-- support Apple HLS. The session uses server-side reporting.
+hlsConfiguration_manifestEndpointPrefix :: Lens.Lens' HlsConfiguration (Prelude.Maybe Prelude.Text)
+hlsConfiguration_manifestEndpointPrefix = Lens.lens (\HlsConfiguration' {manifestEndpointPrefix} -> manifestEndpointPrefix) (\s@HlsConfiguration' {} a -> s {manifestEndpointPrefix = a} :: HlsConfiguration)
+
+instance Data.FromJSON HlsConfiguration where
+  parseJSON =
+    Data.withObject
+      "HlsConfiguration"
+      ( \x ->
+          HlsConfiguration'
+            Prelude.<$> (x Data..:? "ManifestEndpointPrefix")
+      )
+
+instance Prelude.Hashable HlsConfiguration where
+  hashWithSalt _salt HlsConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` manifestEndpointPrefix
+
+instance Prelude.NFData HlsConfiguration where
+  rnf HlsConfiguration' {..} =
+    Prelude.rnf manifestEndpointPrefix
diff --git a/gen/Amazonka/MediaTailor/Types/HlsPlaylistSettings.hs b/gen/Amazonka/MediaTailor/Types/HlsPlaylistSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/HlsPlaylistSettings.hs
@@ -0,0 +1,84 @@
+{-# 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.MediaTailor.Types.HlsPlaylistSettings
+-- 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.MediaTailor.Types.HlsPlaylistSettings 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
+
+-- | HLS playlist configuration parameters.
+--
+-- /See:/ 'newHlsPlaylistSettings' smart constructor.
+data HlsPlaylistSettings = HlsPlaylistSettings'
+  { -- | The total duration (in seconds) of each manifest. Minimum value: @30@
+    -- seconds. Maximum value: @3600@ seconds.
+    manifestWindowSeconds :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HlsPlaylistSettings' 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:
+--
+-- 'manifestWindowSeconds', 'hlsPlaylistSettings_manifestWindowSeconds' - The total duration (in seconds) of each manifest. Minimum value: @30@
+-- seconds. Maximum value: @3600@ seconds.
+newHlsPlaylistSettings ::
+  HlsPlaylistSettings
+newHlsPlaylistSettings =
+  HlsPlaylistSettings'
+    { manifestWindowSeconds =
+        Prelude.Nothing
+    }
+
+-- | The total duration (in seconds) of each manifest. Minimum value: @30@
+-- seconds. Maximum value: @3600@ seconds.
+hlsPlaylistSettings_manifestWindowSeconds :: Lens.Lens' HlsPlaylistSettings (Prelude.Maybe Prelude.Int)
+hlsPlaylistSettings_manifestWindowSeconds = Lens.lens (\HlsPlaylistSettings' {manifestWindowSeconds} -> manifestWindowSeconds) (\s@HlsPlaylistSettings' {} a -> s {manifestWindowSeconds = a} :: HlsPlaylistSettings)
+
+instance Data.FromJSON HlsPlaylistSettings where
+  parseJSON =
+    Data.withObject
+      "HlsPlaylistSettings"
+      ( \x ->
+          HlsPlaylistSettings'
+            Prelude.<$> (x Data..:? "ManifestWindowSeconds")
+      )
+
+instance Prelude.Hashable HlsPlaylistSettings where
+  hashWithSalt _salt HlsPlaylistSettings' {..} =
+    _salt `Prelude.hashWithSalt` manifestWindowSeconds
+
+instance Prelude.NFData HlsPlaylistSettings where
+  rnf HlsPlaylistSettings' {..} =
+    Prelude.rnf manifestWindowSeconds
+
+instance Data.ToJSON HlsPlaylistSettings where
+  toJSON HlsPlaylistSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ManifestWindowSeconds" Data..=)
+              Prelude.<$> manifestWindowSeconds
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/HttpConfiguration.hs b/gen/Amazonka/MediaTailor/Types/HttpConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/HttpConfiguration.hs
@@ -0,0 +1,79 @@
+{-# 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.MediaTailor.Types.HttpConfiguration
+-- 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.MediaTailor.Types.HttpConfiguration 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 HTTP configuration for the source location.
+--
+-- /See:/ 'newHttpConfiguration' smart constructor.
+data HttpConfiguration = HttpConfiguration'
+  { -- | The base URL for the source location host server. This string must
+    -- include the protocol, such as __https:\/\/__.
+    baseUrl :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HttpConfiguration' 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:
+--
+-- 'baseUrl', 'httpConfiguration_baseUrl' - The base URL for the source location host server. This string must
+-- include the protocol, such as __https:\/\/__.
+newHttpConfiguration ::
+  -- | 'baseUrl'
+  Prelude.Text ->
+  HttpConfiguration
+newHttpConfiguration pBaseUrl_ =
+  HttpConfiguration' {baseUrl = pBaseUrl_}
+
+-- | The base URL for the source location host server. This string must
+-- include the protocol, such as __https:\/\/__.
+httpConfiguration_baseUrl :: Lens.Lens' HttpConfiguration Prelude.Text
+httpConfiguration_baseUrl = Lens.lens (\HttpConfiguration' {baseUrl} -> baseUrl) (\s@HttpConfiguration' {} a -> s {baseUrl = a} :: HttpConfiguration)
+
+instance Data.FromJSON HttpConfiguration where
+  parseJSON =
+    Data.withObject
+      "HttpConfiguration"
+      ( \x ->
+          HttpConfiguration' Prelude.<$> (x Data..: "BaseUrl")
+      )
+
+instance Prelude.Hashable HttpConfiguration where
+  hashWithSalt _salt HttpConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` baseUrl
+
+instance Prelude.NFData HttpConfiguration where
+  rnf HttpConfiguration' {..} = Prelude.rnf baseUrl
+
+instance Data.ToJSON HttpConfiguration where
+  toJSON HttpConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("BaseUrl" Data..= baseUrl)]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/HttpPackageConfiguration.hs b/gen/Amazonka/MediaTailor/Types/HttpPackageConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/HttpPackageConfiguration.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaTailor.Types.HttpPackageConfiguration
+-- 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.MediaTailor.Types.HttpPackageConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.Type
+import qualified Amazonka.Prelude as Prelude
+
+-- | The HTTP package configuration properties for the requested VOD source.
+--
+-- /See:/ 'newHttpPackageConfiguration' smart constructor.
+data HttpPackageConfiguration = HttpPackageConfiguration'
+  { -- | The relative path to the URL for this VOD source. This is combined with
+    -- @SourceLocation::HttpConfiguration::BaseUrl@ to form a valid URL.
+    path :: Prelude.Text,
+    -- | The name of the source group. This has to match one of the
+    -- @Channel::Outputs::SourceGroup@.
+    sourceGroup :: Prelude.Text,
+    -- | The streaming protocol for this package configuration. Supported values
+    -- are @HLS@ and @DASH@.
+    type' :: Type
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HttpPackageConfiguration' 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:
+--
+-- 'path', 'httpPackageConfiguration_path' - The relative path to the URL for this VOD source. This is combined with
+-- @SourceLocation::HttpConfiguration::BaseUrl@ to form a valid URL.
+--
+-- 'sourceGroup', 'httpPackageConfiguration_sourceGroup' - The name of the source group. This has to match one of the
+-- @Channel::Outputs::SourceGroup@.
+--
+-- 'type'', 'httpPackageConfiguration_type' - The streaming protocol for this package configuration. Supported values
+-- are @HLS@ and @DASH@.
+newHttpPackageConfiguration ::
+  -- | 'path'
+  Prelude.Text ->
+  -- | 'sourceGroup'
+  Prelude.Text ->
+  -- | 'type''
+  Type ->
+  HttpPackageConfiguration
+newHttpPackageConfiguration
+  pPath_
+  pSourceGroup_
+  pType_ =
+    HttpPackageConfiguration'
+      { path = pPath_,
+        sourceGroup = pSourceGroup_,
+        type' = pType_
+      }
+
+-- | The relative path to the URL for this VOD source. This is combined with
+-- @SourceLocation::HttpConfiguration::BaseUrl@ to form a valid URL.
+httpPackageConfiguration_path :: Lens.Lens' HttpPackageConfiguration Prelude.Text
+httpPackageConfiguration_path = Lens.lens (\HttpPackageConfiguration' {path} -> path) (\s@HttpPackageConfiguration' {} a -> s {path = a} :: HttpPackageConfiguration)
+
+-- | The name of the source group. This has to match one of the
+-- @Channel::Outputs::SourceGroup@.
+httpPackageConfiguration_sourceGroup :: Lens.Lens' HttpPackageConfiguration Prelude.Text
+httpPackageConfiguration_sourceGroup = Lens.lens (\HttpPackageConfiguration' {sourceGroup} -> sourceGroup) (\s@HttpPackageConfiguration' {} a -> s {sourceGroup = a} :: HttpPackageConfiguration)
+
+-- | The streaming protocol for this package configuration. Supported values
+-- are @HLS@ and @DASH@.
+httpPackageConfiguration_type :: Lens.Lens' HttpPackageConfiguration Type
+httpPackageConfiguration_type = Lens.lens (\HttpPackageConfiguration' {type'} -> type') (\s@HttpPackageConfiguration' {} a -> s {type' = a} :: HttpPackageConfiguration)
+
+instance Data.FromJSON HttpPackageConfiguration where
+  parseJSON =
+    Data.withObject
+      "HttpPackageConfiguration"
+      ( \x ->
+          HttpPackageConfiguration'
+            Prelude.<$> (x Data..: "Path")
+            Prelude.<*> (x Data..: "SourceGroup")
+            Prelude.<*> (x Data..: "Type")
+      )
+
+instance Prelude.Hashable HttpPackageConfiguration where
+  hashWithSalt _salt HttpPackageConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` path
+      `Prelude.hashWithSalt` sourceGroup
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData HttpPackageConfiguration where
+  rnf HttpPackageConfiguration' {..} =
+    Prelude.rnf path
+      `Prelude.seq` Prelude.rnf sourceGroup
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON HttpPackageConfiguration where
+  toJSON HttpPackageConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Path" Data..= path),
+            Prelude.Just ("SourceGroup" Data..= sourceGroup),
+            Prelude.Just ("Type" Data..= type')
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/LivePreRollConfiguration.hs b/gen/Amazonka/MediaTailor/Types/LivePreRollConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/LivePreRollConfiguration.hs
@@ -0,0 +1,117 @@
+{-# 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.MediaTailor.Types.LivePreRollConfiguration
+-- 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.MediaTailor.Types.LivePreRollConfiguration 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 configuration for pre-roll ad insertion.
+--
+-- /See:/ 'newLivePreRollConfiguration' smart constructor.
+data LivePreRollConfiguration = LivePreRollConfiguration'
+  { -- | The URL for the ad decision server (ADS) for pre-roll ads. This includes
+    -- the specification of static parameters and placeholders for dynamic
+    -- parameters. AWS Elemental MediaTailor substitutes player-specific and
+    -- session-specific parameters as needed when calling the ADS. Alternately,
+    -- for testing, you can provide a static VAST URL. The maximum length is
+    -- 25,000 characters.
+    adDecisionServerUrl :: Prelude.Maybe Prelude.Text,
+    -- | The maximum allowed duration for the pre-roll ad avail. AWS Elemental
+    -- MediaTailor won\'t play pre-roll ads to exceed this duration, regardless
+    -- of the total duration of ads that the ADS returns.
+    maxDurationSeconds :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LivePreRollConfiguration' 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:
+--
+-- 'adDecisionServerUrl', 'livePreRollConfiguration_adDecisionServerUrl' - The URL for the ad decision server (ADS) for pre-roll ads. This includes
+-- the specification of static parameters and placeholders for dynamic
+-- parameters. AWS Elemental MediaTailor substitutes player-specific and
+-- session-specific parameters as needed when calling the ADS. Alternately,
+-- for testing, you can provide a static VAST URL. The maximum length is
+-- 25,000 characters.
+--
+-- 'maxDurationSeconds', 'livePreRollConfiguration_maxDurationSeconds' - The maximum allowed duration for the pre-roll ad avail. AWS Elemental
+-- MediaTailor won\'t play pre-roll ads to exceed this duration, regardless
+-- of the total duration of ads that the ADS returns.
+newLivePreRollConfiguration ::
+  LivePreRollConfiguration
+newLivePreRollConfiguration =
+  LivePreRollConfiguration'
+    { adDecisionServerUrl =
+        Prelude.Nothing,
+      maxDurationSeconds = Prelude.Nothing
+    }
+
+-- | The URL for the ad decision server (ADS) for pre-roll ads. This includes
+-- the specification of static parameters and placeholders for dynamic
+-- parameters. AWS Elemental MediaTailor substitutes player-specific and
+-- session-specific parameters as needed when calling the ADS. Alternately,
+-- for testing, you can provide a static VAST URL. The maximum length is
+-- 25,000 characters.
+livePreRollConfiguration_adDecisionServerUrl :: Lens.Lens' LivePreRollConfiguration (Prelude.Maybe Prelude.Text)
+livePreRollConfiguration_adDecisionServerUrl = Lens.lens (\LivePreRollConfiguration' {adDecisionServerUrl} -> adDecisionServerUrl) (\s@LivePreRollConfiguration' {} a -> s {adDecisionServerUrl = a} :: LivePreRollConfiguration)
+
+-- | The maximum allowed duration for the pre-roll ad avail. AWS Elemental
+-- MediaTailor won\'t play pre-roll ads to exceed this duration, regardless
+-- of the total duration of ads that the ADS returns.
+livePreRollConfiguration_maxDurationSeconds :: Lens.Lens' LivePreRollConfiguration (Prelude.Maybe Prelude.Int)
+livePreRollConfiguration_maxDurationSeconds = Lens.lens (\LivePreRollConfiguration' {maxDurationSeconds} -> maxDurationSeconds) (\s@LivePreRollConfiguration' {} a -> s {maxDurationSeconds = a} :: LivePreRollConfiguration)
+
+instance Data.FromJSON LivePreRollConfiguration where
+  parseJSON =
+    Data.withObject
+      "LivePreRollConfiguration"
+      ( \x ->
+          LivePreRollConfiguration'
+            Prelude.<$> (x Data..:? "AdDecisionServerUrl")
+            Prelude.<*> (x Data..:? "MaxDurationSeconds")
+      )
+
+instance Prelude.Hashable LivePreRollConfiguration where
+  hashWithSalt _salt LivePreRollConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` adDecisionServerUrl
+      `Prelude.hashWithSalt` maxDurationSeconds
+
+instance Prelude.NFData LivePreRollConfiguration where
+  rnf LivePreRollConfiguration' {..} =
+    Prelude.rnf adDecisionServerUrl
+      `Prelude.seq` Prelude.rnf maxDurationSeconds
+
+instance Data.ToJSON LivePreRollConfiguration where
+  toJSON LivePreRollConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AdDecisionServerUrl" Data..=)
+              Prelude.<$> adDecisionServerUrl,
+            ("MaxDurationSeconds" Data..=)
+              Prelude.<$> maxDurationSeconds
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/LiveSource.hs b/gen/Amazonka/MediaTailor/Types/LiveSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/LiveSource.hs
@@ -0,0 +1,166 @@
+{-# 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.MediaTailor.Types.LiveSource
+-- 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.MediaTailor.Types.LiveSource where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.HttpPackageConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Live source configuration parameters.
+--
+-- /See:/ 'newLiveSource' smart constructor.
+data LiveSource = LiveSource'
+  { -- | The timestamp that indicates when the live source was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The timestamp that indicates when the live source was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The tags assigned to the live source. Tags are key-value pairs that you
+    -- can associate with Amazon resources to help with organization, access
+    -- control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ARN for the live source.
+    arn :: Prelude.Text,
+    -- | The HTTP package configurations for the live source.
+    httpPackageConfigurations :: [HttpPackageConfiguration],
+    -- | The name that\'s used to refer to a live source.
+    liveSourceName :: Prelude.Text,
+    -- | The name of the source location.
+    sourceLocationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LiveSource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'liveSource_creationTime' - The timestamp that indicates when the live source was created.
+--
+-- 'lastModifiedTime', 'liveSource_lastModifiedTime' - The timestamp that indicates when the live source was last modified.
+--
+-- 'tags', 'liveSource_tags' - The tags assigned to the live source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'arn', 'liveSource_arn' - The ARN for the live source.
+--
+-- 'httpPackageConfigurations', 'liveSource_httpPackageConfigurations' - The HTTP package configurations for the live source.
+--
+-- 'liveSourceName', 'liveSource_liveSourceName' - The name that\'s used to refer to a live source.
+--
+-- 'sourceLocationName', 'liveSource_sourceLocationName' - The name of the source location.
+newLiveSource ::
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'liveSourceName'
+  Prelude.Text ->
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  LiveSource
+newLiveSource
+  pArn_
+  pLiveSourceName_
+  pSourceLocationName_ =
+    LiveSource'
+      { creationTime = Prelude.Nothing,
+        lastModifiedTime = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        arn = pArn_,
+        httpPackageConfigurations = Prelude.mempty,
+        liveSourceName = pLiveSourceName_,
+        sourceLocationName = pSourceLocationName_
+      }
+
+-- | The timestamp that indicates when the live source was created.
+liveSource_creationTime :: Lens.Lens' LiveSource (Prelude.Maybe Prelude.UTCTime)
+liveSource_creationTime = Lens.lens (\LiveSource' {creationTime} -> creationTime) (\s@LiveSource' {} a -> s {creationTime = a} :: LiveSource) Prelude.. Lens.mapping Data._Time
+
+-- | The timestamp that indicates when the live source was last modified.
+liveSource_lastModifiedTime :: Lens.Lens' LiveSource (Prelude.Maybe Prelude.UTCTime)
+liveSource_lastModifiedTime = Lens.lens (\LiveSource' {lastModifiedTime} -> lastModifiedTime) (\s@LiveSource' {} a -> s {lastModifiedTime = a} :: LiveSource) Prelude.. Lens.mapping Data._Time
+
+-- | The tags assigned to the live source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+liveSource_tags :: Lens.Lens' LiveSource (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+liveSource_tags = Lens.lens (\LiveSource' {tags} -> tags) (\s@LiveSource' {} a -> s {tags = a} :: LiveSource) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN for the live source.
+liveSource_arn :: Lens.Lens' LiveSource Prelude.Text
+liveSource_arn = Lens.lens (\LiveSource' {arn} -> arn) (\s@LiveSource' {} a -> s {arn = a} :: LiveSource)
+
+-- | The HTTP package configurations for the live source.
+liveSource_httpPackageConfigurations :: Lens.Lens' LiveSource [HttpPackageConfiguration]
+liveSource_httpPackageConfigurations = Lens.lens (\LiveSource' {httpPackageConfigurations} -> httpPackageConfigurations) (\s@LiveSource' {} a -> s {httpPackageConfigurations = a} :: LiveSource) Prelude.. Lens.coerced
+
+-- | The name that\'s used to refer to a live source.
+liveSource_liveSourceName :: Lens.Lens' LiveSource Prelude.Text
+liveSource_liveSourceName = Lens.lens (\LiveSource' {liveSourceName} -> liveSourceName) (\s@LiveSource' {} a -> s {liveSourceName = a} :: LiveSource)
+
+-- | The name of the source location.
+liveSource_sourceLocationName :: Lens.Lens' LiveSource Prelude.Text
+liveSource_sourceLocationName = Lens.lens (\LiveSource' {sourceLocationName} -> sourceLocationName) (\s@LiveSource' {} a -> s {sourceLocationName = a} :: LiveSource)
+
+instance Data.FromJSON LiveSource where
+  parseJSON =
+    Data.withObject
+      "LiveSource"
+      ( \x ->
+          LiveSource'
+            Prelude.<$> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "LastModifiedTime")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "Arn")
+            Prelude.<*> ( x
+                            Data..:? "HttpPackageConfigurations"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "LiveSourceName")
+            Prelude.<*> (x Data..: "SourceLocationName")
+      )
+
+instance Prelude.Hashable LiveSource where
+  hashWithSalt _salt LiveSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` lastModifiedTime
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` httpPackageConfigurations
+      `Prelude.hashWithSalt` liveSourceName
+      `Prelude.hashWithSalt` sourceLocationName
+
+instance Prelude.NFData LiveSource where
+  rnf LiveSource' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf httpPackageConfigurations
+      `Prelude.seq` Prelude.rnf liveSourceName
+      `Prelude.seq` Prelude.rnf sourceLocationName
diff --git a/gen/Amazonka/MediaTailor/Types/LogConfiguration.hs b/gen/Amazonka/MediaTailor/Types/LogConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/LogConfiguration.hs
@@ -0,0 +1,98 @@
+{-# 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.MediaTailor.Types.LogConfiguration
+-- 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.MediaTailor.Types.LogConfiguration 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
+
+-- | Returns Amazon CloudWatch log settings for a playback configuration.
+--
+-- /See:/ 'newLogConfiguration' smart constructor.
+data LogConfiguration = LogConfiguration'
+  { -- | The percentage of session logs that MediaTailor sends to your Cloudwatch
+    -- Logs account. For example, if your playback configuration has 1000
+    -- sessions and @percentEnabled@ is set to @60@, MediaTailor sends logs for
+    -- 600 of the sessions to CloudWatch Logs. MediaTailor decides at random
+    -- which of the playback configuration sessions to send logs for. If you
+    -- want to view logs for a specific session, you can use the
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/debug-log-mode.html debug log mode>.
+    --
+    -- Valid values: @0@ - @100@
+    percentEnabled :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LogConfiguration' 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:
+--
+-- 'percentEnabled', 'logConfiguration_percentEnabled' - The percentage of session logs that MediaTailor sends to your Cloudwatch
+-- Logs account. For example, if your playback configuration has 1000
+-- sessions and @percentEnabled@ is set to @60@, MediaTailor sends logs for
+-- 600 of the sessions to CloudWatch Logs. MediaTailor decides at random
+-- which of the playback configuration sessions to send logs for. If you
+-- want to view logs for a specific session, you can use the
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/debug-log-mode.html debug log mode>.
+--
+-- Valid values: @0@ - @100@
+newLogConfiguration ::
+  -- | 'percentEnabled'
+  Prelude.Int ->
+  LogConfiguration
+newLogConfiguration pPercentEnabled_ =
+  LogConfiguration'
+    { percentEnabled =
+        pPercentEnabled_
+    }
+
+-- | The percentage of session logs that MediaTailor sends to your Cloudwatch
+-- Logs account. For example, if your playback configuration has 1000
+-- sessions and @percentEnabled@ is set to @60@, MediaTailor sends logs for
+-- 600 of the sessions to CloudWatch Logs. MediaTailor decides at random
+-- which of the playback configuration sessions to send logs for. If you
+-- want to view logs for a specific session, you can use the
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/debug-log-mode.html debug log mode>.
+--
+-- Valid values: @0@ - @100@
+logConfiguration_percentEnabled :: Lens.Lens' LogConfiguration Prelude.Int
+logConfiguration_percentEnabled = Lens.lens (\LogConfiguration' {percentEnabled} -> percentEnabled) (\s@LogConfiguration' {} a -> s {percentEnabled = a} :: LogConfiguration)
+
+instance Data.FromJSON LogConfiguration where
+  parseJSON =
+    Data.withObject
+      "LogConfiguration"
+      ( \x ->
+          LogConfiguration'
+            Prelude.<$> (x Data..: "PercentEnabled")
+      )
+
+instance Prelude.Hashable LogConfiguration where
+  hashWithSalt _salt LogConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` percentEnabled
+
+instance Prelude.NFData LogConfiguration where
+  rnf LogConfiguration' {..} =
+    Prelude.rnf percentEnabled
diff --git a/gen/Amazonka/MediaTailor/Types/ManifestProcessingRules.hs b/gen/Amazonka/MediaTailor/Types/ManifestProcessingRules.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/ManifestProcessingRules.hs
@@ -0,0 +1,102 @@
+{-# 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.MediaTailor.Types.ManifestProcessingRules
+-- 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.MediaTailor.Types.ManifestProcessingRules where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.AdMarkerPassthrough
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configuration for manifest processing rules. Manifest processing
+-- rules enable customization of the personalized manifests created by
+-- MediaTailor.
+--
+-- /See:/ 'newManifestProcessingRules' smart constructor.
+data ManifestProcessingRules = ManifestProcessingRules'
+  { -- | For HLS, when set to @true@, MediaTailor passes through @EXT-X-CUE-IN@,
+    -- @EXT-X-CUE-OUT@, and @EXT-X-SPLICEPOINT-SCTE35@ ad markers from the
+    -- origin manifest to the MediaTailor personalized manifest.
+    --
+    -- No logic is applied to these ad markers. For example, if @EXT-X-CUE-OUT@
+    -- has a value of @60@, but no ads are filled for that ad break,
+    -- MediaTailor will not set the value to @0@.
+    adMarkerPassthrough :: Prelude.Maybe AdMarkerPassthrough
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ManifestProcessingRules' 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:
+--
+-- 'adMarkerPassthrough', 'manifestProcessingRules_adMarkerPassthrough' - For HLS, when set to @true@, MediaTailor passes through @EXT-X-CUE-IN@,
+-- @EXT-X-CUE-OUT@, and @EXT-X-SPLICEPOINT-SCTE35@ ad markers from the
+-- origin manifest to the MediaTailor personalized manifest.
+--
+-- No logic is applied to these ad markers. For example, if @EXT-X-CUE-OUT@
+-- has a value of @60@, but no ads are filled for that ad break,
+-- MediaTailor will not set the value to @0@.
+newManifestProcessingRules ::
+  ManifestProcessingRules
+newManifestProcessingRules =
+  ManifestProcessingRules'
+    { adMarkerPassthrough =
+        Prelude.Nothing
+    }
+
+-- | For HLS, when set to @true@, MediaTailor passes through @EXT-X-CUE-IN@,
+-- @EXT-X-CUE-OUT@, and @EXT-X-SPLICEPOINT-SCTE35@ ad markers from the
+-- origin manifest to the MediaTailor personalized manifest.
+--
+-- No logic is applied to these ad markers. For example, if @EXT-X-CUE-OUT@
+-- has a value of @60@, but no ads are filled for that ad break,
+-- MediaTailor will not set the value to @0@.
+manifestProcessingRules_adMarkerPassthrough :: Lens.Lens' ManifestProcessingRules (Prelude.Maybe AdMarkerPassthrough)
+manifestProcessingRules_adMarkerPassthrough = Lens.lens (\ManifestProcessingRules' {adMarkerPassthrough} -> adMarkerPassthrough) (\s@ManifestProcessingRules' {} a -> s {adMarkerPassthrough = a} :: ManifestProcessingRules)
+
+instance Data.FromJSON ManifestProcessingRules where
+  parseJSON =
+    Data.withObject
+      "ManifestProcessingRules"
+      ( \x ->
+          ManifestProcessingRules'
+            Prelude.<$> (x Data..:? "AdMarkerPassthrough")
+      )
+
+instance Prelude.Hashable ManifestProcessingRules where
+  hashWithSalt _salt ManifestProcessingRules' {..} =
+    _salt `Prelude.hashWithSalt` adMarkerPassthrough
+
+instance Prelude.NFData ManifestProcessingRules where
+  rnf ManifestProcessingRules' {..} =
+    Prelude.rnf adMarkerPassthrough
+
+instance Data.ToJSON ManifestProcessingRules where
+  toJSON ManifestProcessingRules' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AdMarkerPassthrough" Data..=)
+              Prelude.<$> adMarkerPassthrough
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/MessageType.hs b/gen/Amazonka/MediaTailor/Types/MessageType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/MessageType.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.MediaTailor.Types.MessageType
+-- 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.MediaTailor.Types.MessageType
+  ( MessageType
+      ( ..,
+        MessageType_SPLICE_INSERT,
+        MessageType_TIME_SIGNAL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype MessageType = MessageType'
+  { fromMessageType ::
+      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 MessageType_SPLICE_INSERT :: MessageType
+pattern MessageType_SPLICE_INSERT = MessageType' "SPLICE_INSERT"
+
+pattern MessageType_TIME_SIGNAL :: MessageType
+pattern MessageType_TIME_SIGNAL = MessageType' "TIME_SIGNAL"
+
+{-# COMPLETE
+  MessageType_SPLICE_INSERT,
+  MessageType_TIME_SIGNAL,
+  MessageType'
+  #-}
diff --git a/gen/Amazonka/MediaTailor/Types/Mode.hs b/gen/Amazonka/MediaTailor/Types/Mode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/Mode.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.MediaTailor.Types.Mode
+-- 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.MediaTailor.Types.Mode
+  ( Mode
+      ( ..,
+        Mode_BEHIND_LIVE_EDGE,
+        Mode_OFF
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Mode = Mode' {fromMode :: 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 Mode_BEHIND_LIVE_EDGE :: Mode
+pattern Mode_BEHIND_LIVE_EDGE = Mode' "BEHIND_LIVE_EDGE"
+
+pattern Mode_OFF :: Mode
+pattern Mode_OFF = Mode' "OFF"
+
+{-# COMPLETE
+  Mode_BEHIND_LIVE_EDGE,
+  Mode_OFF,
+  Mode'
+  #-}
diff --git a/gen/Amazonka/MediaTailor/Types/Operator.hs b/gen/Amazonka/MediaTailor/Types/Operator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/Operator.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.MediaTailor.Types.Operator
+-- 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.MediaTailor.Types.Operator
+  ( Operator
+      ( ..,
+        Operator_EQUALS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Operator = Operator'
+  { fromOperator ::
+      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 Operator_EQUALS :: Operator
+pattern Operator_EQUALS = Operator' "EQUALS"
+
+{-# COMPLETE
+  Operator_EQUALS,
+  Operator'
+  #-}
diff --git a/gen/Amazonka/MediaTailor/Types/OriginManifestType.hs b/gen/Amazonka/MediaTailor/Types/OriginManifestType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/OriginManifestType.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.MediaTailor.Types.OriginManifestType
+-- 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.MediaTailor.Types.OriginManifestType
+  ( OriginManifestType
+      ( ..,
+        OriginManifestType_MULTI_PERIOD,
+        OriginManifestType_SINGLE_PERIOD
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype OriginManifestType = OriginManifestType'
+  { fromOriginManifestType ::
+      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 OriginManifestType_MULTI_PERIOD :: OriginManifestType
+pattern OriginManifestType_MULTI_PERIOD = OriginManifestType' "MULTI_PERIOD"
+
+pattern OriginManifestType_SINGLE_PERIOD :: OriginManifestType
+pattern OriginManifestType_SINGLE_PERIOD = OriginManifestType' "SINGLE_PERIOD"
+
+{-# COMPLETE
+  OriginManifestType_MULTI_PERIOD,
+  OriginManifestType_SINGLE_PERIOD,
+  OriginManifestType'
+  #-}
diff --git a/gen/Amazonka/MediaTailor/Types/PlaybackConfiguration.hs b/gen/Amazonka/MediaTailor/Types/PlaybackConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/PlaybackConfiguration.hs
@@ -0,0 +1,419 @@
+{-# 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.MediaTailor.Types.PlaybackConfiguration
+-- 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.MediaTailor.Types.PlaybackConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.AvailSuppression
+import Amazonka.MediaTailor.Types.Bumper
+import Amazonka.MediaTailor.Types.CdnConfiguration
+import Amazonka.MediaTailor.Types.DashConfiguration
+import Amazonka.MediaTailor.Types.HlsConfiguration
+import Amazonka.MediaTailor.Types.LivePreRollConfiguration
+import Amazonka.MediaTailor.Types.LogConfiguration
+import Amazonka.MediaTailor.Types.ManifestProcessingRules
+import qualified Amazonka.Prelude as Prelude
+
+-- | A playback configuration. For information about MediaTailor
+-- configurations, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/configurations.html Working with configurations in AWS Elemental MediaTailor>.
+--
+-- /See:/ 'newPlaybackConfiguration' smart constructor.
+data PlaybackConfiguration = PlaybackConfiguration'
+  { -- | The URL for the ad decision server (ADS). This includes the
+    -- specification of static parameters and placeholders for dynamic
+    -- parameters. AWS Elemental MediaTailor substitutes player-specific and
+    -- session-specific parameters as needed when calling the ADS. Alternately,
+    -- for testing you can provide a static VAST URL. The maximum length is
+    -- 25,000 characters.
+    adDecisionServerUrl :: Prelude.Maybe Prelude.Text,
+    -- | The configuration for avail suppression, also known as ad suppression.
+    -- For more information about ad suppression, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Suppression>.
+    availSuppression :: Prelude.Maybe AvailSuppression,
+    -- | The configuration for bumpers. Bumpers are short audio or video clips
+    -- that play at the start or before the end of an ad break. To learn more
+    -- about bumpers, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/bumpers.html Bumpers>.
+    bumper :: Prelude.Maybe Bumper,
+    -- | The configuration for using a content delivery network (CDN), like
+    -- Amazon CloudFront, for content and ad segment management.
+    cdnConfiguration :: Prelude.Maybe CdnConfiguration,
+    -- | The player parameters and aliases used as dynamic variables during
+    -- session initialization. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domain.html Domain Variables>.
+    configurationAliases :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The configuration for a DASH source.
+    dashConfiguration :: Prelude.Maybe DashConfiguration,
+    -- | The configuration for HLS content.
+    hlsConfiguration :: Prelude.Maybe HlsConfiguration,
+    -- | The configuration for pre-roll ad insertion.
+    livePreRollConfiguration :: Prelude.Maybe LivePreRollConfiguration,
+    -- | The Amazon CloudWatch log settings for a playback configuration.
+    logConfiguration :: Prelude.Maybe LogConfiguration,
+    -- | The configuration for manifest processing rules. Manifest processing
+    -- rules enable customization of the personalized manifests created by
+    -- MediaTailor.
+    manifestProcessingRules :: Prelude.Maybe ManifestProcessingRules,
+    -- | The identifier for the playback configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Defines the maximum duration of underfilled ad time (in seconds) allowed
+    -- in an ad break. If the duration of underfilled ad time exceeds the
+    -- personalization threshold, then the personalization of the ad break is
+    -- abandoned and the underlying content is shown. This feature applies to
+    -- /ad replacement/ in live and VOD streams, rather than ad insertion,
+    -- because it relies on an underlying content stream. For more information
+    -- about ad break behavior, including ad replacement and insertion, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Behavior in AWS Elemental MediaTailor>.
+    personalizationThresholdSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | The Amazon Resource Name (ARN) for the playback configuration.
+    playbackConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | The URL that the player accesses to get a manifest from AWS Elemental
+    -- MediaTailor.
+    playbackEndpointPrefix :: Prelude.Maybe Prelude.Text,
+    -- | The URL that the player uses to initialize a session that uses
+    -- client-side reporting.
+    sessionInitializationEndpointPrefix :: Prelude.Maybe Prelude.Text,
+    -- | The URL for a video asset to transcode and use to fill in time that\'s
+    -- not used by ads. AWS Elemental MediaTailor shows the slate to fill in
+    -- gaps in media content. Configuring the slate is optional for non-VPAID
+    -- playback configurations. For VPAID, the slate is required because
+    -- MediaTailor provides it in the slots designated for dynamic ad content.
+    -- The slate must be a high-quality asset that contains both audio and
+    -- video.
+    slateAdUrl :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the playback configuration. Tags are key-value
+    -- pairs that you can associate with Amazon resources to help with
+    -- organization, access control, and cost tracking. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name that is used to associate this playback configuration with a
+    -- custom transcode profile. This overrides the dynamic transcoding
+    -- defaults of MediaTailor. Use this only if you have already set up custom
+    -- profiles with the help of AWS Support.
+    transcodeProfileName :: Prelude.Maybe Prelude.Text,
+    -- | The URL prefix for the parent manifest for the stream, minus the asset
+    -- ID. The maximum length is 512 characters.
+    videoContentSourceUrl :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PlaybackConfiguration' 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:
+--
+-- 'adDecisionServerUrl', 'playbackConfiguration_adDecisionServerUrl' - The URL for the ad decision server (ADS). This includes the
+-- specification of static parameters and placeholders for dynamic
+-- parameters. AWS Elemental MediaTailor substitutes player-specific and
+-- session-specific parameters as needed when calling the ADS. Alternately,
+-- for testing you can provide a static VAST URL. The maximum length is
+-- 25,000 characters.
+--
+-- 'availSuppression', 'playbackConfiguration_availSuppression' - The configuration for avail suppression, also known as ad suppression.
+-- For more information about ad suppression, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Suppression>.
+--
+-- 'bumper', 'playbackConfiguration_bumper' - The configuration for bumpers. Bumpers are short audio or video clips
+-- that play at the start or before the end of an ad break. To learn more
+-- about bumpers, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/bumpers.html Bumpers>.
+--
+-- 'cdnConfiguration', 'playbackConfiguration_cdnConfiguration' - The configuration for using a content delivery network (CDN), like
+-- Amazon CloudFront, for content and ad segment management.
+--
+-- 'configurationAliases', 'playbackConfiguration_configurationAliases' - The player parameters and aliases used as dynamic variables during
+-- session initialization. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domain.html Domain Variables>.
+--
+-- 'dashConfiguration', 'playbackConfiguration_dashConfiguration' - The configuration for a DASH source.
+--
+-- 'hlsConfiguration', 'playbackConfiguration_hlsConfiguration' - The configuration for HLS content.
+--
+-- 'livePreRollConfiguration', 'playbackConfiguration_livePreRollConfiguration' - The configuration for pre-roll ad insertion.
+--
+-- 'logConfiguration', 'playbackConfiguration_logConfiguration' - The Amazon CloudWatch log settings for a playback configuration.
+--
+-- 'manifestProcessingRules', 'playbackConfiguration_manifestProcessingRules' - The configuration for manifest processing rules. Manifest processing
+-- rules enable customization of the personalized manifests created by
+-- MediaTailor.
+--
+-- 'name', 'playbackConfiguration_name' - The identifier for the playback configuration.
+--
+-- 'personalizationThresholdSeconds', 'playbackConfiguration_personalizationThresholdSeconds' - Defines the maximum duration of underfilled ad time (in seconds) allowed
+-- in an ad break. If the duration of underfilled ad time exceeds the
+-- personalization threshold, then the personalization of the ad break is
+-- abandoned and the underlying content is shown. This feature applies to
+-- /ad replacement/ in live and VOD streams, rather than ad insertion,
+-- because it relies on an underlying content stream. For more information
+-- about ad break behavior, including ad replacement and insertion, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Behavior in AWS Elemental MediaTailor>.
+--
+-- 'playbackConfigurationArn', 'playbackConfiguration_playbackConfigurationArn' - The Amazon Resource Name (ARN) for the playback configuration.
+--
+-- 'playbackEndpointPrefix', 'playbackConfiguration_playbackEndpointPrefix' - The URL that the player accesses to get a manifest from AWS Elemental
+-- MediaTailor.
+--
+-- 'sessionInitializationEndpointPrefix', 'playbackConfiguration_sessionInitializationEndpointPrefix' - The URL that the player uses to initialize a session that uses
+-- client-side reporting.
+--
+-- 'slateAdUrl', 'playbackConfiguration_slateAdUrl' - The URL for a video asset to transcode and use to fill in time that\'s
+-- not used by ads. AWS Elemental MediaTailor shows the slate to fill in
+-- gaps in media content. Configuring the slate is optional for non-VPAID
+-- playback configurations. For VPAID, the slate is required because
+-- MediaTailor provides it in the slots designated for dynamic ad content.
+-- The slate must be a high-quality asset that contains both audio and
+-- video.
+--
+-- 'tags', 'playbackConfiguration_tags' - The tags to assign to the playback configuration. Tags are key-value
+-- pairs that you can associate with Amazon resources to help with
+-- organization, access control, and cost tracking. For more information,
+-- see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'transcodeProfileName', 'playbackConfiguration_transcodeProfileName' - The name that is used to associate this playback configuration with a
+-- custom transcode profile. This overrides the dynamic transcoding
+-- defaults of MediaTailor. Use this only if you have already set up custom
+-- profiles with the help of AWS Support.
+--
+-- 'videoContentSourceUrl', 'playbackConfiguration_videoContentSourceUrl' - The URL prefix for the parent manifest for the stream, minus the asset
+-- ID. The maximum length is 512 characters.
+newPlaybackConfiguration ::
+  PlaybackConfiguration
+newPlaybackConfiguration =
+  PlaybackConfiguration'
+    { adDecisionServerUrl =
+        Prelude.Nothing,
+      availSuppression = Prelude.Nothing,
+      bumper = Prelude.Nothing,
+      cdnConfiguration = Prelude.Nothing,
+      configurationAliases = Prelude.Nothing,
+      dashConfiguration = Prelude.Nothing,
+      hlsConfiguration = Prelude.Nothing,
+      livePreRollConfiguration = Prelude.Nothing,
+      logConfiguration = Prelude.Nothing,
+      manifestProcessingRules = Prelude.Nothing,
+      name = Prelude.Nothing,
+      personalizationThresholdSeconds = Prelude.Nothing,
+      playbackConfigurationArn = Prelude.Nothing,
+      playbackEndpointPrefix = Prelude.Nothing,
+      sessionInitializationEndpointPrefix =
+        Prelude.Nothing,
+      slateAdUrl = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      transcodeProfileName = Prelude.Nothing,
+      videoContentSourceUrl = Prelude.Nothing
+    }
+
+-- | The URL for the ad decision server (ADS). This includes the
+-- specification of static parameters and placeholders for dynamic
+-- parameters. AWS Elemental MediaTailor substitutes player-specific and
+-- session-specific parameters as needed when calling the ADS. Alternately,
+-- for testing you can provide a static VAST URL. The maximum length is
+-- 25,000 characters.
+playbackConfiguration_adDecisionServerUrl :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe Prelude.Text)
+playbackConfiguration_adDecisionServerUrl = Lens.lens (\PlaybackConfiguration' {adDecisionServerUrl} -> adDecisionServerUrl) (\s@PlaybackConfiguration' {} a -> s {adDecisionServerUrl = a} :: PlaybackConfiguration)
+
+-- | The configuration for avail suppression, also known as ad suppression.
+-- For more information about ad suppression, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Suppression>.
+playbackConfiguration_availSuppression :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe AvailSuppression)
+playbackConfiguration_availSuppression = Lens.lens (\PlaybackConfiguration' {availSuppression} -> availSuppression) (\s@PlaybackConfiguration' {} a -> s {availSuppression = a} :: PlaybackConfiguration)
+
+-- | The configuration for bumpers. Bumpers are short audio or video clips
+-- that play at the start or before the end of an ad break. To learn more
+-- about bumpers, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/bumpers.html Bumpers>.
+playbackConfiguration_bumper :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe Bumper)
+playbackConfiguration_bumper = Lens.lens (\PlaybackConfiguration' {bumper} -> bumper) (\s@PlaybackConfiguration' {} a -> s {bumper = a} :: PlaybackConfiguration)
+
+-- | The configuration for using a content delivery network (CDN), like
+-- Amazon CloudFront, for content and ad segment management.
+playbackConfiguration_cdnConfiguration :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe CdnConfiguration)
+playbackConfiguration_cdnConfiguration = Lens.lens (\PlaybackConfiguration' {cdnConfiguration} -> cdnConfiguration) (\s@PlaybackConfiguration' {} a -> s {cdnConfiguration = a} :: PlaybackConfiguration)
+
+-- | The player parameters and aliases used as dynamic variables during
+-- session initialization. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domain.html Domain Variables>.
+playbackConfiguration_configurationAliases :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)))
+playbackConfiguration_configurationAliases = Lens.lens (\PlaybackConfiguration' {configurationAliases} -> configurationAliases) (\s@PlaybackConfiguration' {} a -> s {configurationAliases = a} :: PlaybackConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The configuration for a DASH source.
+playbackConfiguration_dashConfiguration :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe DashConfiguration)
+playbackConfiguration_dashConfiguration = Lens.lens (\PlaybackConfiguration' {dashConfiguration} -> dashConfiguration) (\s@PlaybackConfiguration' {} a -> s {dashConfiguration = a} :: PlaybackConfiguration)
+
+-- | The configuration for HLS content.
+playbackConfiguration_hlsConfiguration :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe HlsConfiguration)
+playbackConfiguration_hlsConfiguration = Lens.lens (\PlaybackConfiguration' {hlsConfiguration} -> hlsConfiguration) (\s@PlaybackConfiguration' {} a -> s {hlsConfiguration = a} :: PlaybackConfiguration)
+
+-- | The configuration for pre-roll ad insertion.
+playbackConfiguration_livePreRollConfiguration :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe LivePreRollConfiguration)
+playbackConfiguration_livePreRollConfiguration = Lens.lens (\PlaybackConfiguration' {livePreRollConfiguration} -> livePreRollConfiguration) (\s@PlaybackConfiguration' {} a -> s {livePreRollConfiguration = a} :: PlaybackConfiguration)
+
+-- | The Amazon CloudWatch log settings for a playback configuration.
+playbackConfiguration_logConfiguration :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe LogConfiguration)
+playbackConfiguration_logConfiguration = Lens.lens (\PlaybackConfiguration' {logConfiguration} -> logConfiguration) (\s@PlaybackConfiguration' {} a -> s {logConfiguration = a} :: PlaybackConfiguration)
+
+-- | The configuration for manifest processing rules. Manifest processing
+-- rules enable customization of the personalized manifests created by
+-- MediaTailor.
+playbackConfiguration_manifestProcessingRules :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe ManifestProcessingRules)
+playbackConfiguration_manifestProcessingRules = Lens.lens (\PlaybackConfiguration' {manifestProcessingRules} -> manifestProcessingRules) (\s@PlaybackConfiguration' {} a -> s {manifestProcessingRules = a} :: PlaybackConfiguration)
+
+-- | The identifier for the playback configuration.
+playbackConfiguration_name :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe Prelude.Text)
+playbackConfiguration_name = Lens.lens (\PlaybackConfiguration' {name} -> name) (\s@PlaybackConfiguration' {} a -> s {name = a} :: PlaybackConfiguration)
+
+-- | Defines the maximum duration of underfilled ad time (in seconds) allowed
+-- in an ad break. If the duration of underfilled ad time exceeds the
+-- personalization threshold, then the personalization of the ad break is
+-- abandoned and the underlying content is shown. This feature applies to
+-- /ad replacement/ in live and VOD streams, rather than ad insertion,
+-- because it relies on an underlying content stream. For more information
+-- about ad break behavior, including ad replacement and insertion, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html Ad Behavior in AWS Elemental MediaTailor>.
+playbackConfiguration_personalizationThresholdSeconds :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe Prelude.Natural)
+playbackConfiguration_personalizationThresholdSeconds = Lens.lens (\PlaybackConfiguration' {personalizationThresholdSeconds} -> personalizationThresholdSeconds) (\s@PlaybackConfiguration' {} a -> s {personalizationThresholdSeconds = a} :: PlaybackConfiguration)
+
+-- | The Amazon Resource Name (ARN) for the playback configuration.
+playbackConfiguration_playbackConfigurationArn :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe Prelude.Text)
+playbackConfiguration_playbackConfigurationArn = Lens.lens (\PlaybackConfiguration' {playbackConfigurationArn} -> playbackConfigurationArn) (\s@PlaybackConfiguration' {} a -> s {playbackConfigurationArn = a} :: PlaybackConfiguration)
+
+-- | The URL that the player accesses to get a manifest from AWS Elemental
+-- MediaTailor.
+playbackConfiguration_playbackEndpointPrefix :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe Prelude.Text)
+playbackConfiguration_playbackEndpointPrefix = Lens.lens (\PlaybackConfiguration' {playbackEndpointPrefix} -> playbackEndpointPrefix) (\s@PlaybackConfiguration' {} a -> s {playbackEndpointPrefix = a} :: PlaybackConfiguration)
+
+-- | The URL that the player uses to initialize a session that uses
+-- client-side reporting.
+playbackConfiguration_sessionInitializationEndpointPrefix :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe Prelude.Text)
+playbackConfiguration_sessionInitializationEndpointPrefix = Lens.lens (\PlaybackConfiguration' {sessionInitializationEndpointPrefix} -> sessionInitializationEndpointPrefix) (\s@PlaybackConfiguration' {} a -> s {sessionInitializationEndpointPrefix = a} :: PlaybackConfiguration)
+
+-- | The URL for a video asset to transcode and use to fill in time that\'s
+-- not used by ads. AWS Elemental MediaTailor shows the slate to fill in
+-- gaps in media content. Configuring the slate is optional for non-VPAID
+-- playback configurations. For VPAID, the slate is required because
+-- MediaTailor provides it in the slots designated for dynamic ad content.
+-- The slate must be a high-quality asset that contains both audio and
+-- video.
+playbackConfiguration_slateAdUrl :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe Prelude.Text)
+playbackConfiguration_slateAdUrl = Lens.lens (\PlaybackConfiguration' {slateAdUrl} -> slateAdUrl) (\s@PlaybackConfiguration' {} a -> s {slateAdUrl = a} :: PlaybackConfiguration)
+
+-- | The tags to assign to the playback configuration. Tags are key-value
+-- pairs that you can associate with Amazon resources to help with
+-- organization, access control, and cost tracking. For more information,
+-- see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+playbackConfiguration_tags :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+playbackConfiguration_tags = Lens.lens (\PlaybackConfiguration' {tags} -> tags) (\s@PlaybackConfiguration' {} a -> s {tags = a} :: PlaybackConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name that is used to associate this playback configuration with a
+-- custom transcode profile. This overrides the dynamic transcoding
+-- defaults of MediaTailor. Use this only if you have already set up custom
+-- profiles with the help of AWS Support.
+playbackConfiguration_transcodeProfileName :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe Prelude.Text)
+playbackConfiguration_transcodeProfileName = Lens.lens (\PlaybackConfiguration' {transcodeProfileName} -> transcodeProfileName) (\s@PlaybackConfiguration' {} a -> s {transcodeProfileName = a} :: PlaybackConfiguration)
+
+-- | The URL prefix for the parent manifest for the stream, minus the asset
+-- ID. The maximum length is 512 characters.
+playbackConfiguration_videoContentSourceUrl :: Lens.Lens' PlaybackConfiguration (Prelude.Maybe Prelude.Text)
+playbackConfiguration_videoContentSourceUrl = Lens.lens (\PlaybackConfiguration' {videoContentSourceUrl} -> videoContentSourceUrl) (\s@PlaybackConfiguration' {} a -> s {videoContentSourceUrl = a} :: PlaybackConfiguration)
+
+instance Data.FromJSON PlaybackConfiguration where
+  parseJSON =
+    Data.withObject
+      "PlaybackConfiguration"
+      ( \x ->
+          PlaybackConfiguration'
+            Prelude.<$> (x Data..:? "AdDecisionServerUrl")
+            Prelude.<*> (x Data..:? "AvailSuppression")
+            Prelude.<*> (x Data..:? "Bumper")
+            Prelude.<*> (x Data..:? "CdnConfiguration")
+            Prelude.<*> ( x
+                            Data..:? "ConfigurationAliases"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "DashConfiguration")
+            Prelude.<*> (x Data..:? "HlsConfiguration")
+            Prelude.<*> (x Data..:? "LivePreRollConfiguration")
+            Prelude.<*> (x Data..:? "LogConfiguration")
+            Prelude.<*> (x Data..:? "ManifestProcessingRules")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "PersonalizationThresholdSeconds")
+            Prelude.<*> (x Data..:? "PlaybackConfigurationArn")
+            Prelude.<*> (x Data..:? "PlaybackEndpointPrefix")
+            Prelude.<*> (x Data..:? "SessionInitializationEndpointPrefix")
+            Prelude.<*> (x Data..:? "SlateAdUrl")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "TranscodeProfileName")
+            Prelude.<*> (x Data..:? "VideoContentSourceUrl")
+      )
+
+instance Prelude.Hashable PlaybackConfiguration where
+  hashWithSalt _salt PlaybackConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` adDecisionServerUrl
+      `Prelude.hashWithSalt` availSuppression
+      `Prelude.hashWithSalt` bumper
+      `Prelude.hashWithSalt` cdnConfiguration
+      `Prelude.hashWithSalt` configurationAliases
+      `Prelude.hashWithSalt` dashConfiguration
+      `Prelude.hashWithSalt` hlsConfiguration
+      `Prelude.hashWithSalt` livePreRollConfiguration
+      `Prelude.hashWithSalt` logConfiguration
+      `Prelude.hashWithSalt` manifestProcessingRules
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` personalizationThresholdSeconds
+      `Prelude.hashWithSalt` playbackConfigurationArn
+      `Prelude.hashWithSalt` playbackEndpointPrefix
+      `Prelude.hashWithSalt` sessionInitializationEndpointPrefix
+      `Prelude.hashWithSalt` slateAdUrl
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` transcodeProfileName
+      `Prelude.hashWithSalt` videoContentSourceUrl
+
+instance Prelude.NFData PlaybackConfiguration where
+  rnf PlaybackConfiguration' {..} =
+    Prelude.rnf adDecisionServerUrl
+      `Prelude.seq` Prelude.rnf availSuppression
+      `Prelude.seq` Prelude.rnf bumper
+      `Prelude.seq` Prelude.rnf cdnConfiguration
+      `Prelude.seq` Prelude.rnf configurationAliases
+      `Prelude.seq` Prelude.rnf dashConfiguration
+      `Prelude.seq` Prelude.rnf hlsConfiguration
+      `Prelude.seq` Prelude.rnf livePreRollConfiguration
+      `Prelude.seq` Prelude.rnf logConfiguration
+      `Prelude.seq` Prelude.rnf manifestProcessingRules
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf personalizationThresholdSeconds
+      `Prelude.seq` Prelude.rnf playbackConfigurationArn
+      `Prelude.seq` Prelude.rnf playbackEndpointPrefix
+      `Prelude.seq` Prelude.rnf
+        sessionInitializationEndpointPrefix
+      `Prelude.seq` Prelude.rnf slateAdUrl
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf transcodeProfileName
+      `Prelude.seq` Prelude.rnf
+        videoContentSourceUrl
diff --git a/gen/Amazonka/MediaTailor/Types/PlaybackMode.hs b/gen/Amazonka/MediaTailor/Types/PlaybackMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/PlaybackMode.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.MediaTailor.Types.PlaybackMode
+-- 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.MediaTailor.Types.PlaybackMode
+  ( PlaybackMode
+      ( ..,
+        PlaybackMode_LINEAR,
+        PlaybackMode_LOOP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PlaybackMode = PlaybackMode'
+  { fromPlaybackMode ::
+      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 PlaybackMode_LINEAR :: PlaybackMode
+pattern PlaybackMode_LINEAR = PlaybackMode' "LINEAR"
+
+pattern PlaybackMode_LOOP :: PlaybackMode
+pattern PlaybackMode_LOOP = PlaybackMode' "LOOP"
+
+{-# COMPLETE
+  PlaybackMode_LINEAR,
+  PlaybackMode_LOOP,
+  PlaybackMode'
+  #-}
diff --git a/gen/Amazonka/MediaTailor/Types/PrefetchConsumption.hs b/gen/Amazonka/MediaTailor/Types/PrefetchConsumption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/PrefetchConsumption.hs
@@ -0,0 +1,136 @@
+{-# 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.MediaTailor.Types.PrefetchConsumption
+-- 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.MediaTailor.Types.PrefetchConsumption where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.AvailMatchingCriteria
+import qualified Amazonka.Prelude as Prelude
+
+-- | A complex type that contains settings that determine how and when that
+-- MediaTailor places prefetched ads into upcoming ad breaks.
+--
+-- /See:/ 'newPrefetchConsumption' smart constructor.
+data PrefetchConsumption = PrefetchConsumption'
+  { -- | If you only want MediaTailor to insert prefetched ads into avails (ad
+    -- breaks) that match specific dynamic variables, such as @scte.event_id@,
+    -- set the avail matching criteria.
+    availMatchingCriteria :: Prelude.Maybe [AvailMatchingCriteria],
+    -- | The time when prefetched ads are considered for use in an ad break. If
+    -- you don\'t specify @StartTime@, the prefetched ads are available after
+    -- MediaTailor retrives them from the ad decision server.
+    startTime :: Prelude.Maybe Data.POSIX,
+    -- | The time when MediaTailor no longer considers the prefetched ads for use
+    -- in an ad break. MediaTailor automatically deletes prefetch schedules no
+    -- less than seven days after the end time. If you\'d like to manually
+    -- delete the prefetch schedule, you can call @DeletePrefetchSchedule@.
+    endTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PrefetchConsumption' 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:
+--
+-- 'availMatchingCriteria', 'prefetchConsumption_availMatchingCriteria' - If you only want MediaTailor to insert prefetched ads into avails (ad
+-- breaks) that match specific dynamic variables, such as @scte.event_id@,
+-- set the avail matching criteria.
+--
+-- 'startTime', 'prefetchConsumption_startTime' - The time when prefetched ads are considered for use in an ad break. If
+-- you don\'t specify @StartTime@, the prefetched ads are available after
+-- MediaTailor retrives them from the ad decision server.
+--
+-- 'endTime', 'prefetchConsumption_endTime' - The time when MediaTailor no longer considers the prefetched ads for use
+-- in an ad break. MediaTailor automatically deletes prefetch schedules no
+-- less than seven days after the end time. If you\'d like to manually
+-- delete the prefetch schedule, you can call @DeletePrefetchSchedule@.
+newPrefetchConsumption ::
+  -- | 'endTime'
+  Prelude.UTCTime ->
+  PrefetchConsumption
+newPrefetchConsumption pEndTime_ =
+  PrefetchConsumption'
+    { availMatchingCriteria =
+        Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      endTime = Data._Time Lens.# pEndTime_
+    }
+
+-- | If you only want MediaTailor to insert prefetched ads into avails (ad
+-- breaks) that match specific dynamic variables, such as @scte.event_id@,
+-- set the avail matching criteria.
+prefetchConsumption_availMatchingCriteria :: Lens.Lens' PrefetchConsumption (Prelude.Maybe [AvailMatchingCriteria])
+prefetchConsumption_availMatchingCriteria = Lens.lens (\PrefetchConsumption' {availMatchingCriteria} -> availMatchingCriteria) (\s@PrefetchConsumption' {} a -> s {availMatchingCriteria = a} :: PrefetchConsumption) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time when prefetched ads are considered for use in an ad break. If
+-- you don\'t specify @StartTime@, the prefetched ads are available after
+-- MediaTailor retrives them from the ad decision server.
+prefetchConsumption_startTime :: Lens.Lens' PrefetchConsumption (Prelude.Maybe Prelude.UTCTime)
+prefetchConsumption_startTime = Lens.lens (\PrefetchConsumption' {startTime} -> startTime) (\s@PrefetchConsumption' {} a -> s {startTime = a} :: PrefetchConsumption) Prelude.. Lens.mapping Data._Time
+
+-- | The time when MediaTailor no longer considers the prefetched ads for use
+-- in an ad break. MediaTailor automatically deletes prefetch schedules no
+-- less than seven days after the end time. If you\'d like to manually
+-- delete the prefetch schedule, you can call @DeletePrefetchSchedule@.
+prefetchConsumption_endTime :: Lens.Lens' PrefetchConsumption Prelude.UTCTime
+prefetchConsumption_endTime = Lens.lens (\PrefetchConsumption' {endTime} -> endTime) (\s@PrefetchConsumption' {} a -> s {endTime = a} :: PrefetchConsumption) Prelude.. Data._Time
+
+instance Data.FromJSON PrefetchConsumption where
+  parseJSON =
+    Data.withObject
+      "PrefetchConsumption"
+      ( \x ->
+          PrefetchConsumption'
+            Prelude.<$> ( x
+                            Data..:? "AvailMatchingCriteria"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "StartTime")
+            Prelude.<*> (x Data..: "EndTime")
+      )
+
+instance Prelude.Hashable PrefetchConsumption where
+  hashWithSalt _salt PrefetchConsumption' {..} =
+    _salt
+      `Prelude.hashWithSalt` availMatchingCriteria
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` endTime
+
+instance Prelude.NFData PrefetchConsumption where
+  rnf PrefetchConsumption' {..} =
+    Prelude.rnf availMatchingCriteria
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf endTime
+
+instance Data.ToJSON PrefetchConsumption where
+  toJSON PrefetchConsumption' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AvailMatchingCriteria" Data..=)
+              Prelude.<$> availMatchingCriteria,
+            ("StartTime" Data..=) Prelude.<$> startTime,
+            Prelude.Just ("EndTime" Data..= endTime)
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/PrefetchRetrieval.hs b/gen/Amazonka/MediaTailor/Types/PrefetchRetrieval.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/PrefetchRetrieval.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaTailor.Types.PrefetchRetrieval
+-- 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.MediaTailor.Types.PrefetchRetrieval where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A complex type that contains settings governing when MediaTailor
+-- prefetches ads, and which dynamic variables that MediaTailor includes in
+-- the request to the ad decision server.
+--
+-- /See:/ 'newPrefetchRetrieval' smart constructor.
+data PrefetchRetrieval = PrefetchRetrieval'
+  { -- | The dynamic variables to use for substitution during prefetch requests
+    -- to the ad decision server (ADS).
+    --
+    -- You initially configure
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables.html dynamic variables>
+    -- for the ADS URL when you set up your playback configuration. When you
+    -- specify @DynamicVariables@ for prefetch retrieval, MediaTailor includes
+    -- the dynamic variables in the request to the ADS.
+    dynamicVariables :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The time when prefetch retrievals can start for this break. Ad
+    -- prefetching will be attempted for manifest requests that occur at or
+    -- after this time. Defaults to the current time. If not specified, the
+    -- prefetch retrieval starts as soon as possible.
+    startTime :: Prelude.Maybe Data.POSIX,
+    -- | The time when prefetch retrieval ends for the ad break. Prefetching will
+    -- be attempted for manifest requests that occur at or before this time.
+    endTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PrefetchRetrieval' 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:
+--
+-- 'dynamicVariables', 'prefetchRetrieval_dynamicVariables' - The dynamic variables to use for substitution during prefetch requests
+-- to the ad decision server (ADS).
+--
+-- You initially configure
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables.html dynamic variables>
+-- for the ADS URL when you set up your playback configuration. When you
+-- specify @DynamicVariables@ for prefetch retrieval, MediaTailor includes
+-- the dynamic variables in the request to the ADS.
+--
+-- 'startTime', 'prefetchRetrieval_startTime' - The time when prefetch retrievals can start for this break. Ad
+-- prefetching will be attempted for manifest requests that occur at or
+-- after this time. Defaults to the current time. If not specified, the
+-- prefetch retrieval starts as soon as possible.
+--
+-- 'endTime', 'prefetchRetrieval_endTime' - The time when prefetch retrieval ends for the ad break. Prefetching will
+-- be attempted for manifest requests that occur at or before this time.
+newPrefetchRetrieval ::
+  -- | 'endTime'
+  Prelude.UTCTime ->
+  PrefetchRetrieval
+newPrefetchRetrieval pEndTime_ =
+  PrefetchRetrieval'
+    { dynamicVariables =
+        Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      endTime = Data._Time Lens.# pEndTime_
+    }
+
+-- | The dynamic variables to use for substitution during prefetch requests
+-- to the ad decision server (ADS).
+--
+-- You initially configure
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/variables.html dynamic variables>
+-- for the ADS URL when you set up your playback configuration. When you
+-- specify @DynamicVariables@ for prefetch retrieval, MediaTailor includes
+-- the dynamic variables in the request to the ADS.
+prefetchRetrieval_dynamicVariables :: Lens.Lens' PrefetchRetrieval (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+prefetchRetrieval_dynamicVariables = Lens.lens (\PrefetchRetrieval' {dynamicVariables} -> dynamicVariables) (\s@PrefetchRetrieval' {} a -> s {dynamicVariables = a} :: PrefetchRetrieval) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time when prefetch retrievals can start for this break. Ad
+-- prefetching will be attempted for manifest requests that occur at or
+-- after this time. Defaults to the current time. If not specified, the
+-- prefetch retrieval starts as soon as possible.
+prefetchRetrieval_startTime :: Lens.Lens' PrefetchRetrieval (Prelude.Maybe Prelude.UTCTime)
+prefetchRetrieval_startTime = Lens.lens (\PrefetchRetrieval' {startTime} -> startTime) (\s@PrefetchRetrieval' {} a -> s {startTime = a} :: PrefetchRetrieval) Prelude.. Lens.mapping Data._Time
+
+-- | The time when prefetch retrieval ends for the ad break. Prefetching will
+-- be attempted for manifest requests that occur at or before this time.
+prefetchRetrieval_endTime :: Lens.Lens' PrefetchRetrieval Prelude.UTCTime
+prefetchRetrieval_endTime = Lens.lens (\PrefetchRetrieval' {endTime} -> endTime) (\s@PrefetchRetrieval' {} a -> s {endTime = a} :: PrefetchRetrieval) Prelude.. Data._Time
+
+instance Data.FromJSON PrefetchRetrieval where
+  parseJSON =
+    Data.withObject
+      "PrefetchRetrieval"
+      ( \x ->
+          PrefetchRetrieval'
+            Prelude.<$> ( x
+                            Data..:? "DynamicVariables"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "StartTime")
+            Prelude.<*> (x Data..: "EndTime")
+      )
+
+instance Prelude.Hashable PrefetchRetrieval where
+  hashWithSalt _salt PrefetchRetrieval' {..} =
+    _salt
+      `Prelude.hashWithSalt` dynamicVariables
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` endTime
+
+instance Prelude.NFData PrefetchRetrieval where
+  rnf PrefetchRetrieval' {..} =
+    Prelude.rnf dynamicVariables
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf endTime
+
+instance Data.ToJSON PrefetchRetrieval where
+  toJSON PrefetchRetrieval' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DynamicVariables" Data..=)
+              Prelude.<$> dynamicVariables,
+            ("StartTime" Data..=) Prelude.<$> startTime,
+            Prelude.Just ("EndTime" Data..= endTime)
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/PrefetchSchedule.hs b/gen/Amazonka/MediaTailor/Types/PrefetchSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/PrefetchSchedule.hs
@@ -0,0 +1,181 @@
+{-# 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.MediaTailor.Types.PrefetchSchedule
+-- 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.MediaTailor.Types.PrefetchSchedule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.PrefetchConsumption
+import Amazonka.MediaTailor.Types.PrefetchRetrieval
+import qualified Amazonka.Prelude as Prelude
+
+-- | A prefetch schedule allows you to tell MediaTailor to fetch and prepare
+-- certain ads before an ad break happens. For more information about ad
+-- prefetching, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/prefetching-ads.html Using ad prefetching>
+-- in the /MediaTailor User Guide/.
+--
+-- /See:/ 'newPrefetchSchedule' smart constructor.
+data PrefetchSchedule = PrefetchSchedule'
+  { -- | An optional stream identifier that you can specify in order to prefetch
+    -- for multiple streams that use the same playback configuration.
+    streamId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the prefetch schedule.
+    arn :: Prelude.Text,
+    -- | Consumption settings determine how, and when, MediaTailor places the
+    -- prefetched ads into ad breaks. Ad consumption occurs within a span of
+    -- time that you define, called a /consumption window/. You can designate
+    -- which ad breaks that MediaTailor fills with prefetch ads by setting
+    -- avail matching criteria.
+    consumption :: PrefetchConsumption,
+    -- | The name of the prefetch schedule. The name must be unique among all
+    -- prefetch schedules that are associated with the specified playback
+    -- configuration.
+    name :: Prelude.Text,
+    -- | The name of the playback configuration to create the prefetch schedule
+    -- for.
+    playbackConfigurationName :: Prelude.Text,
+    -- | A complex type that contains settings for prefetch retrieval from the ad
+    -- decision server (ADS).
+    retrieval :: PrefetchRetrieval
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PrefetchSchedule' 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:
+--
+-- 'streamId', 'prefetchSchedule_streamId' - An optional stream identifier that you can specify in order to prefetch
+-- for multiple streams that use the same playback configuration.
+--
+-- 'arn', 'prefetchSchedule_arn' - The Amazon Resource Name (ARN) of the prefetch schedule.
+--
+-- 'consumption', 'prefetchSchedule_consumption' - Consumption settings determine how, and when, MediaTailor places the
+-- prefetched ads into ad breaks. Ad consumption occurs within a span of
+-- time that you define, called a /consumption window/. You can designate
+-- which ad breaks that MediaTailor fills with prefetch ads by setting
+-- avail matching criteria.
+--
+-- 'name', 'prefetchSchedule_name' - The name of the prefetch schedule. The name must be unique among all
+-- prefetch schedules that are associated with the specified playback
+-- configuration.
+--
+-- 'playbackConfigurationName', 'prefetchSchedule_playbackConfigurationName' - The name of the playback configuration to create the prefetch schedule
+-- for.
+--
+-- 'retrieval', 'prefetchSchedule_retrieval' - A complex type that contains settings for prefetch retrieval from the ad
+-- decision server (ADS).
+newPrefetchSchedule ::
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'consumption'
+  PrefetchConsumption ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'playbackConfigurationName'
+  Prelude.Text ->
+  -- | 'retrieval'
+  PrefetchRetrieval ->
+  PrefetchSchedule
+newPrefetchSchedule
+  pArn_
+  pConsumption_
+  pName_
+  pPlaybackConfigurationName_
+  pRetrieval_ =
+    PrefetchSchedule'
+      { streamId = Prelude.Nothing,
+        arn = pArn_,
+        consumption = pConsumption_,
+        name = pName_,
+        playbackConfigurationName =
+          pPlaybackConfigurationName_,
+        retrieval = pRetrieval_
+      }
+
+-- | An optional stream identifier that you can specify in order to prefetch
+-- for multiple streams that use the same playback configuration.
+prefetchSchedule_streamId :: Lens.Lens' PrefetchSchedule (Prelude.Maybe Prelude.Text)
+prefetchSchedule_streamId = Lens.lens (\PrefetchSchedule' {streamId} -> streamId) (\s@PrefetchSchedule' {} a -> s {streamId = a} :: PrefetchSchedule)
+
+-- | The Amazon Resource Name (ARN) of the prefetch schedule.
+prefetchSchedule_arn :: Lens.Lens' PrefetchSchedule Prelude.Text
+prefetchSchedule_arn = Lens.lens (\PrefetchSchedule' {arn} -> arn) (\s@PrefetchSchedule' {} a -> s {arn = a} :: PrefetchSchedule)
+
+-- | Consumption settings determine how, and when, MediaTailor places the
+-- prefetched ads into ad breaks. Ad consumption occurs within a span of
+-- time that you define, called a /consumption window/. You can designate
+-- which ad breaks that MediaTailor fills with prefetch ads by setting
+-- avail matching criteria.
+prefetchSchedule_consumption :: Lens.Lens' PrefetchSchedule PrefetchConsumption
+prefetchSchedule_consumption = Lens.lens (\PrefetchSchedule' {consumption} -> consumption) (\s@PrefetchSchedule' {} a -> s {consumption = a} :: PrefetchSchedule)
+
+-- | The name of the prefetch schedule. The name must be unique among all
+-- prefetch schedules that are associated with the specified playback
+-- configuration.
+prefetchSchedule_name :: Lens.Lens' PrefetchSchedule Prelude.Text
+prefetchSchedule_name = Lens.lens (\PrefetchSchedule' {name} -> name) (\s@PrefetchSchedule' {} a -> s {name = a} :: PrefetchSchedule)
+
+-- | The name of the playback configuration to create the prefetch schedule
+-- for.
+prefetchSchedule_playbackConfigurationName :: Lens.Lens' PrefetchSchedule Prelude.Text
+prefetchSchedule_playbackConfigurationName = Lens.lens (\PrefetchSchedule' {playbackConfigurationName} -> playbackConfigurationName) (\s@PrefetchSchedule' {} a -> s {playbackConfigurationName = a} :: PrefetchSchedule)
+
+-- | A complex type that contains settings for prefetch retrieval from the ad
+-- decision server (ADS).
+prefetchSchedule_retrieval :: Lens.Lens' PrefetchSchedule PrefetchRetrieval
+prefetchSchedule_retrieval = Lens.lens (\PrefetchSchedule' {retrieval} -> retrieval) (\s@PrefetchSchedule' {} a -> s {retrieval = a} :: PrefetchSchedule)
+
+instance Data.FromJSON PrefetchSchedule where
+  parseJSON =
+    Data.withObject
+      "PrefetchSchedule"
+      ( \x ->
+          PrefetchSchedule'
+            Prelude.<$> (x Data..:? "StreamId")
+            Prelude.<*> (x Data..: "Arn")
+            Prelude.<*> (x Data..: "Consumption")
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> (x Data..: "PlaybackConfigurationName")
+            Prelude.<*> (x Data..: "Retrieval")
+      )
+
+instance Prelude.Hashable PrefetchSchedule where
+  hashWithSalt _salt PrefetchSchedule' {..} =
+    _salt
+      `Prelude.hashWithSalt` streamId
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` consumption
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` playbackConfigurationName
+      `Prelude.hashWithSalt` retrieval
+
+instance Prelude.NFData PrefetchSchedule where
+  rnf PrefetchSchedule' {..} =
+    Prelude.rnf streamId
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf consumption
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf playbackConfigurationName
+      `Prelude.seq` Prelude.rnf retrieval
diff --git a/gen/Amazonka/MediaTailor/Types/RelativePosition.hs b/gen/Amazonka/MediaTailor/Types/RelativePosition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/RelativePosition.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.MediaTailor.Types.RelativePosition
+-- 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.MediaTailor.Types.RelativePosition
+  ( RelativePosition
+      ( ..,
+        RelativePosition_AFTER_PROGRAM,
+        RelativePosition_BEFORE_PROGRAM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RelativePosition = RelativePosition'
+  { fromRelativePosition ::
+      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 RelativePosition_AFTER_PROGRAM :: RelativePosition
+pattern RelativePosition_AFTER_PROGRAM = RelativePosition' "AFTER_PROGRAM"
+
+pattern RelativePosition_BEFORE_PROGRAM :: RelativePosition
+pattern RelativePosition_BEFORE_PROGRAM = RelativePosition' "BEFORE_PROGRAM"
+
+{-# COMPLETE
+  RelativePosition_AFTER_PROGRAM,
+  RelativePosition_BEFORE_PROGRAM,
+  RelativePosition'
+  #-}
diff --git a/gen/Amazonka/MediaTailor/Types/RequestOutputItem.hs b/gen/Amazonka/MediaTailor/Types/RequestOutputItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/RequestOutputItem.hs
@@ -0,0 +1,122 @@
+{-# 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.MediaTailor.Types.RequestOutputItem
+-- 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.MediaTailor.Types.RequestOutputItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.DashPlaylistSettings
+import Amazonka.MediaTailor.Types.HlsPlaylistSettings
+import qualified Amazonka.Prelude as Prelude
+
+-- | The output configuration for this channel.
+--
+-- /See:/ 'newRequestOutputItem' smart constructor.
+data RequestOutputItem = RequestOutputItem'
+  { -- | DASH manifest configuration parameters.
+    dashPlaylistSettings :: Prelude.Maybe DashPlaylistSettings,
+    -- | HLS playlist configuration parameters.
+    hlsPlaylistSettings :: Prelude.Maybe HlsPlaylistSettings,
+    -- | The name of the manifest for the channel. The name appears in the
+    -- @PlaybackUrl@.
+    manifestName :: Prelude.Text,
+    -- | A string used to match which @HttpPackageConfiguration@ is used for each
+    -- @VodSource@.
+    sourceGroup :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RequestOutputItem' 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:
+--
+-- 'dashPlaylistSettings', 'requestOutputItem_dashPlaylistSettings' - DASH manifest configuration parameters.
+--
+-- 'hlsPlaylistSettings', 'requestOutputItem_hlsPlaylistSettings' - HLS playlist configuration parameters.
+--
+-- 'manifestName', 'requestOutputItem_manifestName' - The name of the manifest for the channel. The name appears in the
+-- @PlaybackUrl@.
+--
+-- 'sourceGroup', 'requestOutputItem_sourceGroup' - A string used to match which @HttpPackageConfiguration@ is used for each
+-- @VodSource@.
+newRequestOutputItem ::
+  -- | 'manifestName'
+  Prelude.Text ->
+  -- | 'sourceGroup'
+  Prelude.Text ->
+  RequestOutputItem
+newRequestOutputItem pManifestName_ pSourceGroup_ =
+  RequestOutputItem'
+    { dashPlaylistSettings =
+        Prelude.Nothing,
+      hlsPlaylistSettings = Prelude.Nothing,
+      manifestName = pManifestName_,
+      sourceGroup = pSourceGroup_
+    }
+
+-- | DASH manifest configuration parameters.
+requestOutputItem_dashPlaylistSettings :: Lens.Lens' RequestOutputItem (Prelude.Maybe DashPlaylistSettings)
+requestOutputItem_dashPlaylistSettings = Lens.lens (\RequestOutputItem' {dashPlaylistSettings} -> dashPlaylistSettings) (\s@RequestOutputItem' {} a -> s {dashPlaylistSettings = a} :: RequestOutputItem)
+
+-- | HLS playlist configuration parameters.
+requestOutputItem_hlsPlaylistSettings :: Lens.Lens' RequestOutputItem (Prelude.Maybe HlsPlaylistSettings)
+requestOutputItem_hlsPlaylistSettings = Lens.lens (\RequestOutputItem' {hlsPlaylistSettings} -> hlsPlaylistSettings) (\s@RequestOutputItem' {} a -> s {hlsPlaylistSettings = a} :: RequestOutputItem)
+
+-- | The name of the manifest for the channel. The name appears in the
+-- @PlaybackUrl@.
+requestOutputItem_manifestName :: Lens.Lens' RequestOutputItem Prelude.Text
+requestOutputItem_manifestName = Lens.lens (\RequestOutputItem' {manifestName} -> manifestName) (\s@RequestOutputItem' {} a -> s {manifestName = a} :: RequestOutputItem)
+
+-- | A string used to match which @HttpPackageConfiguration@ is used for each
+-- @VodSource@.
+requestOutputItem_sourceGroup :: Lens.Lens' RequestOutputItem Prelude.Text
+requestOutputItem_sourceGroup = Lens.lens (\RequestOutputItem' {sourceGroup} -> sourceGroup) (\s@RequestOutputItem' {} a -> s {sourceGroup = a} :: RequestOutputItem)
+
+instance Prelude.Hashable RequestOutputItem where
+  hashWithSalt _salt RequestOutputItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` dashPlaylistSettings
+      `Prelude.hashWithSalt` hlsPlaylistSettings
+      `Prelude.hashWithSalt` manifestName
+      `Prelude.hashWithSalt` sourceGroup
+
+instance Prelude.NFData RequestOutputItem where
+  rnf RequestOutputItem' {..} =
+    Prelude.rnf dashPlaylistSettings
+      `Prelude.seq` Prelude.rnf hlsPlaylistSettings
+      `Prelude.seq` Prelude.rnf manifestName
+      `Prelude.seq` Prelude.rnf sourceGroup
+
+instance Data.ToJSON RequestOutputItem where
+  toJSON RequestOutputItem' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DashPlaylistSettings" Data..=)
+              Prelude.<$> dashPlaylistSettings,
+            ("HlsPlaylistSettings" Data..=)
+              Prelude.<$> hlsPlaylistSettings,
+            Prelude.Just ("ManifestName" Data..= manifestName),
+            Prelude.Just ("SourceGroup" Data..= sourceGroup)
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/ResponseOutputItem.hs b/gen/Amazonka/MediaTailor/Types/ResponseOutputItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/ResponseOutputItem.hs
@@ -0,0 +1,138 @@
+{-# 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.MediaTailor.Types.ResponseOutputItem
+-- 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.MediaTailor.Types.ResponseOutputItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.DashPlaylistSettings
+import Amazonka.MediaTailor.Types.HlsPlaylistSettings
+import qualified Amazonka.Prelude as Prelude
+
+-- | The output item response.
+--
+-- /See:/ 'newResponseOutputItem' smart constructor.
+data ResponseOutputItem = ResponseOutputItem'
+  { -- | DASH manifest configuration settings.
+    dashPlaylistSettings :: Prelude.Maybe DashPlaylistSettings,
+    -- | HLS manifest configuration settings.
+    hlsPlaylistSettings :: Prelude.Maybe HlsPlaylistSettings,
+    -- | The name of the manifest for the channel that will appear in the channel
+    -- output\'s playback URL.
+    manifestName :: Prelude.Text,
+    -- | The URL used for playback by content players.
+    playbackUrl :: Prelude.Text,
+    -- | A string used to associate a package configuration source group with a
+    -- channel output.
+    sourceGroup :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResponseOutputItem' 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:
+--
+-- 'dashPlaylistSettings', 'responseOutputItem_dashPlaylistSettings' - DASH manifest configuration settings.
+--
+-- 'hlsPlaylistSettings', 'responseOutputItem_hlsPlaylistSettings' - HLS manifest configuration settings.
+--
+-- 'manifestName', 'responseOutputItem_manifestName' - The name of the manifest for the channel that will appear in the channel
+-- output\'s playback URL.
+--
+-- 'playbackUrl', 'responseOutputItem_playbackUrl' - The URL used for playback by content players.
+--
+-- 'sourceGroup', 'responseOutputItem_sourceGroup' - A string used to associate a package configuration source group with a
+-- channel output.
+newResponseOutputItem ::
+  -- | 'manifestName'
+  Prelude.Text ->
+  -- | 'playbackUrl'
+  Prelude.Text ->
+  -- | 'sourceGroup'
+  Prelude.Text ->
+  ResponseOutputItem
+newResponseOutputItem
+  pManifestName_
+  pPlaybackUrl_
+  pSourceGroup_ =
+    ResponseOutputItem'
+      { dashPlaylistSettings =
+          Prelude.Nothing,
+        hlsPlaylistSettings = Prelude.Nothing,
+        manifestName = pManifestName_,
+        playbackUrl = pPlaybackUrl_,
+        sourceGroup = pSourceGroup_
+      }
+
+-- | DASH manifest configuration settings.
+responseOutputItem_dashPlaylistSettings :: Lens.Lens' ResponseOutputItem (Prelude.Maybe DashPlaylistSettings)
+responseOutputItem_dashPlaylistSettings = Lens.lens (\ResponseOutputItem' {dashPlaylistSettings} -> dashPlaylistSettings) (\s@ResponseOutputItem' {} a -> s {dashPlaylistSettings = a} :: ResponseOutputItem)
+
+-- | HLS manifest configuration settings.
+responseOutputItem_hlsPlaylistSettings :: Lens.Lens' ResponseOutputItem (Prelude.Maybe HlsPlaylistSettings)
+responseOutputItem_hlsPlaylistSettings = Lens.lens (\ResponseOutputItem' {hlsPlaylistSettings} -> hlsPlaylistSettings) (\s@ResponseOutputItem' {} a -> s {hlsPlaylistSettings = a} :: ResponseOutputItem)
+
+-- | The name of the manifest for the channel that will appear in the channel
+-- output\'s playback URL.
+responseOutputItem_manifestName :: Lens.Lens' ResponseOutputItem Prelude.Text
+responseOutputItem_manifestName = Lens.lens (\ResponseOutputItem' {manifestName} -> manifestName) (\s@ResponseOutputItem' {} a -> s {manifestName = a} :: ResponseOutputItem)
+
+-- | The URL used for playback by content players.
+responseOutputItem_playbackUrl :: Lens.Lens' ResponseOutputItem Prelude.Text
+responseOutputItem_playbackUrl = Lens.lens (\ResponseOutputItem' {playbackUrl} -> playbackUrl) (\s@ResponseOutputItem' {} a -> s {playbackUrl = a} :: ResponseOutputItem)
+
+-- | A string used to associate a package configuration source group with a
+-- channel output.
+responseOutputItem_sourceGroup :: Lens.Lens' ResponseOutputItem Prelude.Text
+responseOutputItem_sourceGroup = Lens.lens (\ResponseOutputItem' {sourceGroup} -> sourceGroup) (\s@ResponseOutputItem' {} a -> s {sourceGroup = a} :: ResponseOutputItem)
+
+instance Data.FromJSON ResponseOutputItem where
+  parseJSON =
+    Data.withObject
+      "ResponseOutputItem"
+      ( \x ->
+          ResponseOutputItem'
+            Prelude.<$> (x Data..:? "DashPlaylistSettings")
+            Prelude.<*> (x Data..:? "HlsPlaylistSettings")
+            Prelude.<*> (x Data..: "ManifestName")
+            Prelude.<*> (x Data..: "PlaybackUrl")
+            Prelude.<*> (x Data..: "SourceGroup")
+      )
+
+instance Prelude.Hashable ResponseOutputItem where
+  hashWithSalt _salt ResponseOutputItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` dashPlaylistSettings
+      `Prelude.hashWithSalt` hlsPlaylistSettings
+      `Prelude.hashWithSalt` manifestName
+      `Prelude.hashWithSalt` playbackUrl
+      `Prelude.hashWithSalt` sourceGroup
+
+instance Prelude.NFData ResponseOutputItem where
+  rnf ResponseOutputItem' {..} =
+    Prelude.rnf dashPlaylistSettings
+      `Prelude.seq` Prelude.rnf hlsPlaylistSettings
+      `Prelude.seq` Prelude.rnf manifestName
+      `Prelude.seq` Prelude.rnf playbackUrl
+      `Prelude.seq` Prelude.rnf sourceGroup
diff --git a/gen/Amazonka/MediaTailor/Types/ScheduleAdBreak.hs b/gen/Amazonka/MediaTailor/Types/ScheduleAdBreak.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/ScheduleAdBreak.hs
@@ -0,0 +1,112 @@
+{-# 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.MediaTailor.Types.ScheduleAdBreak
+-- 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.MediaTailor.Types.ScheduleAdBreak 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 schedule\'s ad break properties.
+--
+-- /See:/ 'newScheduleAdBreak' smart constructor.
+data ScheduleAdBreak = ScheduleAdBreak'
+  { -- | The approximate duration of the ad break, in seconds.
+    approximateDurationSeconds :: Prelude.Maybe Prelude.Integer,
+    -- | The approximate time that the ad will start playing.
+    approximateStartTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the source location containing the VOD source used for the
+    -- ad break.
+    sourceLocationName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the VOD source used for the ad break.
+    vodSourceName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduleAdBreak' 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:
+--
+-- 'approximateDurationSeconds', 'scheduleAdBreak_approximateDurationSeconds' - The approximate duration of the ad break, in seconds.
+--
+-- 'approximateStartTime', 'scheduleAdBreak_approximateStartTime' - The approximate time that the ad will start playing.
+--
+-- 'sourceLocationName', 'scheduleAdBreak_sourceLocationName' - The name of the source location containing the VOD source used for the
+-- ad break.
+--
+-- 'vodSourceName', 'scheduleAdBreak_vodSourceName' - The name of the VOD source used for the ad break.
+newScheduleAdBreak ::
+  ScheduleAdBreak
+newScheduleAdBreak =
+  ScheduleAdBreak'
+    { approximateDurationSeconds =
+        Prelude.Nothing,
+      approximateStartTime = Prelude.Nothing,
+      sourceLocationName = Prelude.Nothing,
+      vodSourceName = Prelude.Nothing
+    }
+
+-- | The approximate duration of the ad break, in seconds.
+scheduleAdBreak_approximateDurationSeconds :: Lens.Lens' ScheduleAdBreak (Prelude.Maybe Prelude.Integer)
+scheduleAdBreak_approximateDurationSeconds = Lens.lens (\ScheduleAdBreak' {approximateDurationSeconds} -> approximateDurationSeconds) (\s@ScheduleAdBreak' {} a -> s {approximateDurationSeconds = a} :: ScheduleAdBreak)
+
+-- | The approximate time that the ad will start playing.
+scheduleAdBreak_approximateStartTime :: Lens.Lens' ScheduleAdBreak (Prelude.Maybe Prelude.UTCTime)
+scheduleAdBreak_approximateStartTime = Lens.lens (\ScheduleAdBreak' {approximateStartTime} -> approximateStartTime) (\s@ScheduleAdBreak' {} a -> s {approximateStartTime = a} :: ScheduleAdBreak) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the source location containing the VOD source used for the
+-- ad break.
+scheduleAdBreak_sourceLocationName :: Lens.Lens' ScheduleAdBreak (Prelude.Maybe Prelude.Text)
+scheduleAdBreak_sourceLocationName = Lens.lens (\ScheduleAdBreak' {sourceLocationName} -> sourceLocationName) (\s@ScheduleAdBreak' {} a -> s {sourceLocationName = a} :: ScheduleAdBreak)
+
+-- | The name of the VOD source used for the ad break.
+scheduleAdBreak_vodSourceName :: Lens.Lens' ScheduleAdBreak (Prelude.Maybe Prelude.Text)
+scheduleAdBreak_vodSourceName = Lens.lens (\ScheduleAdBreak' {vodSourceName} -> vodSourceName) (\s@ScheduleAdBreak' {} a -> s {vodSourceName = a} :: ScheduleAdBreak)
+
+instance Data.FromJSON ScheduleAdBreak where
+  parseJSON =
+    Data.withObject
+      "ScheduleAdBreak"
+      ( \x ->
+          ScheduleAdBreak'
+            Prelude.<$> (x Data..:? "ApproximateDurationSeconds")
+            Prelude.<*> (x Data..:? "ApproximateStartTime")
+            Prelude.<*> (x Data..:? "SourceLocationName")
+            Prelude.<*> (x Data..:? "VodSourceName")
+      )
+
+instance Prelude.Hashable ScheduleAdBreak where
+  hashWithSalt _salt ScheduleAdBreak' {..} =
+    _salt
+      `Prelude.hashWithSalt` approximateDurationSeconds
+      `Prelude.hashWithSalt` approximateStartTime
+      `Prelude.hashWithSalt` sourceLocationName
+      `Prelude.hashWithSalt` vodSourceName
+
+instance Prelude.NFData ScheduleAdBreak where
+  rnf ScheduleAdBreak' {..} =
+    Prelude.rnf approximateDurationSeconds
+      `Prelude.seq` Prelude.rnf approximateStartTime
+      `Prelude.seq` Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf vodSourceName
diff --git a/gen/Amazonka/MediaTailor/Types/ScheduleConfiguration.hs b/gen/Amazonka/MediaTailor/Types/ScheduleConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/ScheduleConfiguration.hs
@@ -0,0 +1,71 @@
+{-# 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.MediaTailor.Types.ScheduleConfiguration
+-- 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.MediaTailor.Types.ScheduleConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.Transition
+import qualified Amazonka.Prelude as Prelude
+
+-- | Schedule configuration parameters. A channel must be stopped before
+-- changes can be made to the schedule.
+--
+-- /See:/ 'newScheduleConfiguration' smart constructor.
+data ScheduleConfiguration = ScheduleConfiguration'
+  { -- | Program transition configurations.
+    transition :: Transition
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduleConfiguration' 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:
+--
+-- 'transition', 'scheduleConfiguration_transition' - Program transition configurations.
+newScheduleConfiguration ::
+  -- | 'transition'
+  Transition ->
+  ScheduleConfiguration
+newScheduleConfiguration pTransition_ =
+  ScheduleConfiguration' {transition = pTransition_}
+
+-- | Program transition configurations.
+scheduleConfiguration_transition :: Lens.Lens' ScheduleConfiguration Transition
+scheduleConfiguration_transition = Lens.lens (\ScheduleConfiguration' {transition} -> transition) (\s@ScheduleConfiguration' {} a -> s {transition = a} :: ScheduleConfiguration)
+
+instance Prelude.Hashable ScheduleConfiguration where
+  hashWithSalt _salt ScheduleConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` transition
+
+instance Prelude.NFData ScheduleConfiguration where
+  rnf ScheduleConfiguration' {..} =
+    Prelude.rnf transition
+
+instance Data.ToJSON ScheduleConfiguration where
+  toJSON ScheduleConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Transition" Data..= transition)]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/ScheduleEntry.hs b/gen/Amazonka/MediaTailor/Types/ScheduleEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/ScheduleEntry.hs
@@ -0,0 +1,198 @@
+{-# 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.MediaTailor.Types.ScheduleEntry
+-- 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.MediaTailor.Types.ScheduleEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.ScheduleAdBreak
+import Amazonka.MediaTailor.Types.ScheduleEntryType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The properties for a schedule.
+--
+-- /See:/ 'newScheduleEntry' smart constructor.
+data ScheduleEntry = ScheduleEntry'
+  { -- | The approximate duration of this program, in seconds.
+    approximateDurationSeconds :: Prelude.Maybe Prelude.Integer,
+    -- | The approximate time that the program will start playing.
+    approximateStartTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the live source used for the program.
+    liveSourceName :: Prelude.Maybe Prelude.Text,
+    -- | The schedule\'s ad break properties.
+    scheduleAdBreaks :: Prelude.Maybe [ScheduleAdBreak],
+    -- | The type of schedule entry.
+    scheduleEntryType :: Prelude.Maybe ScheduleEntryType,
+    -- | The name of the VOD source.
+    vodSourceName :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the program.
+    arn :: Prelude.Text,
+    -- | The name of the channel that uses this schedule.
+    channelName :: Prelude.Text,
+    -- | The name of the program.
+    programName :: Prelude.Text,
+    -- | The name of the source location.
+    sourceLocationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduleEntry' 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:
+--
+-- 'approximateDurationSeconds', 'scheduleEntry_approximateDurationSeconds' - The approximate duration of this program, in seconds.
+--
+-- 'approximateStartTime', 'scheduleEntry_approximateStartTime' - The approximate time that the program will start playing.
+--
+-- 'liveSourceName', 'scheduleEntry_liveSourceName' - The name of the live source used for the program.
+--
+-- 'scheduleAdBreaks', 'scheduleEntry_scheduleAdBreaks' - The schedule\'s ad break properties.
+--
+-- 'scheduleEntryType', 'scheduleEntry_scheduleEntryType' - The type of schedule entry.
+--
+-- 'vodSourceName', 'scheduleEntry_vodSourceName' - The name of the VOD source.
+--
+-- 'arn', 'scheduleEntry_arn' - The ARN of the program.
+--
+-- 'channelName', 'scheduleEntry_channelName' - The name of the channel that uses this schedule.
+--
+-- 'programName', 'scheduleEntry_programName' - The name of the program.
+--
+-- 'sourceLocationName', 'scheduleEntry_sourceLocationName' - The name of the source location.
+newScheduleEntry ::
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'channelName'
+  Prelude.Text ->
+  -- | 'programName'
+  Prelude.Text ->
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  ScheduleEntry
+newScheduleEntry
+  pArn_
+  pChannelName_
+  pProgramName_
+  pSourceLocationName_ =
+    ScheduleEntry'
+      { approximateDurationSeconds =
+          Prelude.Nothing,
+        approximateStartTime = Prelude.Nothing,
+        liveSourceName = Prelude.Nothing,
+        scheduleAdBreaks = Prelude.Nothing,
+        scheduleEntryType = Prelude.Nothing,
+        vodSourceName = Prelude.Nothing,
+        arn = pArn_,
+        channelName = pChannelName_,
+        programName = pProgramName_,
+        sourceLocationName = pSourceLocationName_
+      }
+
+-- | The approximate duration of this program, in seconds.
+scheduleEntry_approximateDurationSeconds :: Lens.Lens' ScheduleEntry (Prelude.Maybe Prelude.Integer)
+scheduleEntry_approximateDurationSeconds = Lens.lens (\ScheduleEntry' {approximateDurationSeconds} -> approximateDurationSeconds) (\s@ScheduleEntry' {} a -> s {approximateDurationSeconds = a} :: ScheduleEntry)
+
+-- | The approximate time that the program will start playing.
+scheduleEntry_approximateStartTime :: Lens.Lens' ScheduleEntry (Prelude.Maybe Prelude.UTCTime)
+scheduleEntry_approximateStartTime = Lens.lens (\ScheduleEntry' {approximateStartTime} -> approximateStartTime) (\s@ScheduleEntry' {} a -> s {approximateStartTime = a} :: ScheduleEntry) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the live source used for the program.
+scheduleEntry_liveSourceName :: Lens.Lens' ScheduleEntry (Prelude.Maybe Prelude.Text)
+scheduleEntry_liveSourceName = Lens.lens (\ScheduleEntry' {liveSourceName} -> liveSourceName) (\s@ScheduleEntry' {} a -> s {liveSourceName = a} :: ScheduleEntry)
+
+-- | The schedule\'s ad break properties.
+scheduleEntry_scheduleAdBreaks :: Lens.Lens' ScheduleEntry (Prelude.Maybe [ScheduleAdBreak])
+scheduleEntry_scheduleAdBreaks = Lens.lens (\ScheduleEntry' {scheduleAdBreaks} -> scheduleAdBreaks) (\s@ScheduleEntry' {} a -> s {scheduleAdBreaks = a} :: ScheduleEntry) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of schedule entry.
+scheduleEntry_scheduleEntryType :: Lens.Lens' ScheduleEntry (Prelude.Maybe ScheduleEntryType)
+scheduleEntry_scheduleEntryType = Lens.lens (\ScheduleEntry' {scheduleEntryType} -> scheduleEntryType) (\s@ScheduleEntry' {} a -> s {scheduleEntryType = a} :: ScheduleEntry)
+
+-- | The name of the VOD source.
+scheduleEntry_vodSourceName :: Lens.Lens' ScheduleEntry (Prelude.Maybe Prelude.Text)
+scheduleEntry_vodSourceName = Lens.lens (\ScheduleEntry' {vodSourceName} -> vodSourceName) (\s@ScheduleEntry' {} a -> s {vodSourceName = a} :: ScheduleEntry)
+
+-- | The ARN of the program.
+scheduleEntry_arn :: Lens.Lens' ScheduleEntry Prelude.Text
+scheduleEntry_arn = Lens.lens (\ScheduleEntry' {arn} -> arn) (\s@ScheduleEntry' {} a -> s {arn = a} :: ScheduleEntry)
+
+-- | The name of the channel that uses this schedule.
+scheduleEntry_channelName :: Lens.Lens' ScheduleEntry Prelude.Text
+scheduleEntry_channelName = Lens.lens (\ScheduleEntry' {channelName} -> channelName) (\s@ScheduleEntry' {} a -> s {channelName = a} :: ScheduleEntry)
+
+-- | The name of the program.
+scheduleEntry_programName :: Lens.Lens' ScheduleEntry Prelude.Text
+scheduleEntry_programName = Lens.lens (\ScheduleEntry' {programName} -> programName) (\s@ScheduleEntry' {} a -> s {programName = a} :: ScheduleEntry)
+
+-- | The name of the source location.
+scheduleEntry_sourceLocationName :: Lens.Lens' ScheduleEntry Prelude.Text
+scheduleEntry_sourceLocationName = Lens.lens (\ScheduleEntry' {sourceLocationName} -> sourceLocationName) (\s@ScheduleEntry' {} a -> s {sourceLocationName = a} :: ScheduleEntry)
+
+instance Data.FromJSON ScheduleEntry where
+  parseJSON =
+    Data.withObject
+      "ScheduleEntry"
+      ( \x ->
+          ScheduleEntry'
+            Prelude.<$> (x Data..:? "ApproximateDurationSeconds")
+            Prelude.<*> (x Data..:? "ApproximateStartTime")
+            Prelude.<*> (x Data..:? "LiveSourceName")
+            Prelude.<*> ( x
+                            Data..:? "ScheduleAdBreaks"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "ScheduleEntryType")
+            Prelude.<*> (x Data..:? "VodSourceName")
+            Prelude.<*> (x Data..: "Arn")
+            Prelude.<*> (x Data..: "ChannelName")
+            Prelude.<*> (x Data..: "ProgramName")
+            Prelude.<*> (x Data..: "SourceLocationName")
+      )
+
+instance Prelude.Hashable ScheduleEntry where
+  hashWithSalt _salt ScheduleEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` approximateDurationSeconds
+      `Prelude.hashWithSalt` approximateStartTime
+      `Prelude.hashWithSalt` liveSourceName
+      `Prelude.hashWithSalt` scheduleAdBreaks
+      `Prelude.hashWithSalt` scheduleEntryType
+      `Prelude.hashWithSalt` vodSourceName
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` channelName
+      `Prelude.hashWithSalt` programName
+      `Prelude.hashWithSalt` sourceLocationName
+
+instance Prelude.NFData ScheduleEntry where
+  rnf ScheduleEntry' {..} =
+    Prelude.rnf approximateDurationSeconds
+      `Prelude.seq` Prelude.rnf approximateStartTime
+      `Prelude.seq` Prelude.rnf liveSourceName
+      `Prelude.seq` Prelude.rnf scheduleAdBreaks
+      `Prelude.seq` Prelude.rnf scheduleEntryType
+      `Prelude.seq` Prelude.rnf vodSourceName
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf channelName
+      `Prelude.seq` Prelude.rnf programName
+      `Prelude.seq` Prelude.rnf sourceLocationName
diff --git a/gen/Amazonka/MediaTailor/Types/ScheduleEntryType.hs b/gen/Amazonka/MediaTailor/Types/ScheduleEntryType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/ScheduleEntryType.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.MediaTailor.Types.ScheduleEntryType
+-- 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.MediaTailor.Types.ScheduleEntryType
+  ( ScheduleEntryType
+      ( ..,
+        ScheduleEntryType_FILLER_SLATE,
+        ScheduleEntryType_PROGRAM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ScheduleEntryType = ScheduleEntryType'
+  { fromScheduleEntryType ::
+      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 ScheduleEntryType_FILLER_SLATE :: ScheduleEntryType
+pattern ScheduleEntryType_FILLER_SLATE = ScheduleEntryType' "FILLER_SLATE"
+
+pattern ScheduleEntryType_PROGRAM :: ScheduleEntryType
+pattern ScheduleEntryType_PROGRAM = ScheduleEntryType' "PROGRAM"
+
+{-# COMPLETE
+  ScheduleEntryType_FILLER_SLATE,
+  ScheduleEntryType_PROGRAM,
+  ScheduleEntryType'
+  #-}
diff --git a/gen/Amazonka/MediaTailor/Types/SecretsManagerAccessTokenConfiguration.hs b/gen/Amazonka/MediaTailor/Types/SecretsManagerAccessTokenConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/SecretsManagerAccessTokenConfiguration.hs
@@ -0,0 +1,139 @@
+{-# 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.MediaTailor.Types.SecretsManagerAccessTokenConfiguration
+-- 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.MediaTailor.Types.SecretsManagerAccessTokenConfiguration 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
+
+-- | AWS Secrets Manager access token configuration parameters. For
+-- information about Secrets Manager access token authentication, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-access-configuration-access-token.html Working with AWS Secrets Manager access token authentication>.
+--
+-- /See:/ 'newSecretsManagerAccessTokenConfiguration' smart constructor.
+data SecretsManagerAccessTokenConfiguration = SecretsManagerAccessTokenConfiguration'
+  { -- | The name of the HTTP header used to supply the access token in requests
+    -- to the source location.
+    headerName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the AWS Secrets Manager secret that
+    -- contains the access token.
+    secretArn :: Prelude.Maybe Prelude.Text,
+    -- | The AWS Secrets Manager
+    -- <https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html#SecretsManager-CreateSecret-request-SecretString.html SecretString>
+    -- key associated with the access token. MediaTailor uses the key to look
+    -- up SecretString key and value pair containing the access token.
+    secretStringKey :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SecretsManagerAccessTokenConfiguration' 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:
+--
+-- 'headerName', 'secretsManagerAccessTokenConfiguration_headerName' - The name of the HTTP header used to supply the access token in requests
+-- to the source location.
+--
+-- 'secretArn', 'secretsManagerAccessTokenConfiguration_secretArn' - The Amazon Resource Name (ARN) of the AWS Secrets Manager secret that
+-- contains the access token.
+--
+-- 'secretStringKey', 'secretsManagerAccessTokenConfiguration_secretStringKey' - The AWS Secrets Manager
+-- <https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html#SecretsManager-CreateSecret-request-SecretString.html SecretString>
+-- key associated with the access token. MediaTailor uses the key to look
+-- up SecretString key and value pair containing the access token.
+newSecretsManagerAccessTokenConfiguration ::
+  SecretsManagerAccessTokenConfiguration
+newSecretsManagerAccessTokenConfiguration =
+  SecretsManagerAccessTokenConfiguration'
+    { headerName =
+        Prelude.Nothing,
+      secretArn = Prelude.Nothing,
+      secretStringKey = Prelude.Nothing
+    }
+
+-- | The name of the HTTP header used to supply the access token in requests
+-- to the source location.
+secretsManagerAccessTokenConfiguration_headerName :: Lens.Lens' SecretsManagerAccessTokenConfiguration (Prelude.Maybe Prelude.Text)
+secretsManagerAccessTokenConfiguration_headerName = Lens.lens (\SecretsManagerAccessTokenConfiguration' {headerName} -> headerName) (\s@SecretsManagerAccessTokenConfiguration' {} a -> s {headerName = a} :: SecretsManagerAccessTokenConfiguration)
+
+-- | The Amazon Resource Name (ARN) of the AWS Secrets Manager secret that
+-- contains the access token.
+secretsManagerAccessTokenConfiguration_secretArn :: Lens.Lens' SecretsManagerAccessTokenConfiguration (Prelude.Maybe Prelude.Text)
+secretsManagerAccessTokenConfiguration_secretArn = Lens.lens (\SecretsManagerAccessTokenConfiguration' {secretArn} -> secretArn) (\s@SecretsManagerAccessTokenConfiguration' {} a -> s {secretArn = a} :: SecretsManagerAccessTokenConfiguration)
+
+-- | The AWS Secrets Manager
+-- <https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html#SecretsManager-CreateSecret-request-SecretString.html SecretString>
+-- key associated with the access token. MediaTailor uses the key to look
+-- up SecretString key and value pair containing the access token.
+secretsManagerAccessTokenConfiguration_secretStringKey :: Lens.Lens' SecretsManagerAccessTokenConfiguration (Prelude.Maybe Prelude.Text)
+secretsManagerAccessTokenConfiguration_secretStringKey = Lens.lens (\SecretsManagerAccessTokenConfiguration' {secretStringKey} -> secretStringKey) (\s@SecretsManagerAccessTokenConfiguration' {} a -> s {secretStringKey = a} :: SecretsManagerAccessTokenConfiguration)
+
+instance
+  Data.FromJSON
+    SecretsManagerAccessTokenConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "SecretsManagerAccessTokenConfiguration"
+      ( \x ->
+          SecretsManagerAccessTokenConfiguration'
+            Prelude.<$> (x Data..:? "HeaderName")
+            Prelude.<*> (x Data..:? "SecretArn")
+            Prelude.<*> (x Data..:? "SecretStringKey")
+      )
+
+instance
+  Prelude.Hashable
+    SecretsManagerAccessTokenConfiguration
+  where
+  hashWithSalt
+    _salt
+    SecretsManagerAccessTokenConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` headerName
+        `Prelude.hashWithSalt` secretArn
+        `Prelude.hashWithSalt` secretStringKey
+
+instance
+  Prelude.NFData
+    SecretsManagerAccessTokenConfiguration
+  where
+  rnf SecretsManagerAccessTokenConfiguration' {..} =
+    Prelude.rnf headerName
+      `Prelude.seq` Prelude.rnf secretArn
+      `Prelude.seq` Prelude.rnf secretStringKey
+
+instance
+  Data.ToJSON
+    SecretsManagerAccessTokenConfiguration
+  where
+  toJSON SecretsManagerAccessTokenConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("HeaderName" Data..=) Prelude.<$> headerName,
+            ("SecretArn" Data..=) Prelude.<$> secretArn,
+            ("SecretStringKey" Data..=)
+              Prelude.<$> secretStringKey
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/SegmentDeliveryConfiguration.hs b/gen/Amazonka/MediaTailor/Types/SegmentDeliveryConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/SegmentDeliveryConfiguration.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.MediaTailor.Types.SegmentDeliveryConfiguration
+-- 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.MediaTailor.Types.SegmentDeliveryConfiguration 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 segment delivery configuration settings.
+--
+-- /See:/ 'newSegmentDeliveryConfiguration' smart constructor.
+data SegmentDeliveryConfiguration = SegmentDeliveryConfiguration'
+  { -- | The base URL of the host or path of the segment delivery server that
+    -- you\'re using to serve segments. This is typically a content delivery
+    -- network (CDN). The URL can be absolute or relative. To use an absolute
+    -- URL include the protocol, such as @https:\/\/example.com\/some\/path@.
+    -- To use a relative URL specify the relative path, such as
+    -- @\/some\/path*@.
+    baseUrl :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier used to distinguish between multiple segment
+    -- delivery configurations in a source location.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SegmentDeliveryConfiguration' 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:
+--
+-- 'baseUrl', 'segmentDeliveryConfiguration_baseUrl' - The base URL of the host or path of the segment delivery server that
+-- you\'re using to serve segments. This is typically a content delivery
+-- network (CDN). The URL can be absolute or relative. To use an absolute
+-- URL include the protocol, such as @https:\/\/example.com\/some\/path@.
+-- To use a relative URL specify the relative path, such as
+-- @\/some\/path*@.
+--
+-- 'name', 'segmentDeliveryConfiguration_name' - A unique identifier used to distinguish between multiple segment
+-- delivery configurations in a source location.
+newSegmentDeliveryConfiguration ::
+  SegmentDeliveryConfiguration
+newSegmentDeliveryConfiguration =
+  SegmentDeliveryConfiguration'
+    { baseUrl =
+        Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The base URL of the host or path of the segment delivery server that
+-- you\'re using to serve segments. This is typically a content delivery
+-- network (CDN). The URL can be absolute or relative. To use an absolute
+-- URL include the protocol, such as @https:\/\/example.com\/some\/path@.
+-- To use a relative URL specify the relative path, such as
+-- @\/some\/path*@.
+segmentDeliveryConfiguration_baseUrl :: Lens.Lens' SegmentDeliveryConfiguration (Prelude.Maybe Prelude.Text)
+segmentDeliveryConfiguration_baseUrl = Lens.lens (\SegmentDeliveryConfiguration' {baseUrl} -> baseUrl) (\s@SegmentDeliveryConfiguration' {} a -> s {baseUrl = a} :: SegmentDeliveryConfiguration)
+
+-- | A unique identifier used to distinguish between multiple segment
+-- delivery configurations in a source location.
+segmentDeliveryConfiguration_name :: Lens.Lens' SegmentDeliveryConfiguration (Prelude.Maybe Prelude.Text)
+segmentDeliveryConfiguration_name = Lens.lens (\SegmentDeliveryConfiguration' {name} -> name) (\s@SegmentDeliveryConfiguration' {} a -> s {name = a} :: SegmentDeliveryConfiguration)
+
+instance Data.FromJSON SegmentDeliveryConfiguration where
+  parseJSON =
+    Data.withObject
+      "SegmentDeliveryConfiguration"
+      ( \x ->
+          SegmentDeliveryConfiguration'
+            Prelude.<$> (x Data..:? "BaseUrl")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance
+  Prelude.Hashable
+    SegmentDeliveryConfiguration
+  where
+  hashWithSalt _salt SegmentDeliveryConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` baseUrl
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData SegmentDeliveryConfiguration where
+  rnf SegmentDeliveryConfiguration' {..} =
+    Prelude.rnf baseUrl `Prelude.seq` Prelude.rnf name
+
+instance Data.ToJSON SegmentDeliveryConfiguration where
+  toJSON SegmentDeliveryConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BaseUrl" Data..=) Prelude.<$> baseUrl,
+            ("Name" Data..=) Prelude.<$> name
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/SegmentationDescriptor.hs b/gen/Amazonka/MediaTailor/Types/SegmentationDescriptor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/SegmentationDescriptor.hs
@@ -0,0 +1,263 @@
+{-# 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.MediaTailor.Types.SegmentationDescriptor
+-- 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.MediaTailor.Types.SegmentationDescriptor 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 @segmentation_descriptor@ message can contain advanced metadata
+-- fields, like content identifiers, to convey a wide range of information
+-- about the ad break. MediaTailor writes the ad metadata in the egress
+-- manifest as part of the @EXT-X-DATERANGE@ or @EventStream@ ad marker\'s
+-- SCTE-35 data.
+--
+-- @segmentation_descriptor@ messages must be sent with the @time_signal@
+-- message type.
+--
+-- See the @segmentation_descriptor()@ table of the 2022 SCTE-35
+-- specification for more information.
+--
+-- /See:/ 'newSegmentationDescriptor' smart constructor.
+data SegmentationDescriptor = SegmentationDescriptor'
+  { -- | The segment number to assign to the
+    -- @segmentation_descriptor.segment_num@ message, as defined in section
+    -- 10.3.3.1 of the 2022 SCTE-35 specification Values must be between 0 and
+    -- 256, inclusive. The default value is 0.
+    segmentNum :: Prelude.Maybe Prelude.Int,
+    -- | The Event Identifier to assign to the
+    -- @segmentation_descriptor.segmentation_event_id@ message, as defined in
+    -- section 10.3.3.1 of the 2022 SCTE-35 specification. The default value is
+    -- 1.
+    segmentationEventId :: Prelude.Maybe Prelude.Int,
+    -- | The Type Identifier to assign to the
+    -- @segmentation_descriptor.segmentation_type_id@ message, as defined in
+    -- section 10.3.3.1 of the 2022 SCTE-35 specification. Values must be
+    -- between 0 and 256, inclusive. The default value is 48.
+    segmentationTypeId :: Prelude.Maybe Prelude.Int,
+    -- | The Upid to assign to the @segmentation_descriptor.segmentation_upid@
+    -- message, as defined in section 10.3.3.1 of the 2022 SCTE-35
+    -- specification. The value must be a hexadecimal string containing only
+    -- the characters 0 though 9 and A through F. The default value is \"\" (an
+    -- empty string).
+    segmentationUpid :: Prelude.Maybe Prelude.Text,
+    -- | The Upid Type to assign to the
+    -- @segmentation_descriptor.segmentation_upid_type@ message, as defined in
+    -- section 10.3.3.1 of the 2022 SCTE-35 specification. Values must be
+    -- between 0 and 256, inclusive. The default value is 14.
+    segmentationUpidType :: Prelude.Maybe Prelude.Int,
+    -- | The number of segments expected, which is assigned to the
+    -- @segmentation_descriptor.segments_expectedS@ message, as defined in
+    -- section 10.3.3.1 of the 2022 SCTE-35 specification Values must be
+    -- between 0 and 256, inclusive. The default value is 0.
+    segmentsExpected :: Prelude.Maybe Prelude.Int,
+    -- | The sub-segment number to assign to the
+    -- @segmentation_descriptor.sub_segment_num@ message, as defined in section
+    -- 10.3.3.1 of the 2022 SCTE-35 specification. Values must be between 0 and
+    -- 256, inclusive. The defualt value is null.
+    subSegmentNum :: Prelude.Maybe Prelude.Int,
+    -- | The number of sub-segments expected, which is assigned to the
+    -- @segmentation_descriptor.sub_segments_expected@ message, as defined in
+    -- section 10.3.3.1 of the 2022 SCTE-35 specification. Values must be
+    -- between 0 and 256, inclusive. The default value is null.
+    subSegmentsExpected :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SegmentationDescriptor' 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:
+--
+-- 'segmentNum', 'segmentationDescriptor_segmentNum' - The segment number to assign to the
+-- @segmentation_descriptor.segment_num@ message, as defined in section
+-- 10.3.3.1 of the 2022 SCTE-35 specification Values must be between 0 and
+-- 256, inclusive. The default value is 0.
+--
+-- 'segmentationEventId', 'segmentationDescriptor_segmentationEventId' - The Event Identifier to assign to the
+-- @segmentation_descriptor.segmentation_event_id@ message, as defined in
+-- section 10.3.3.1 of the 2022 SCTE-35 specification. The default value is
+-- 1.
+--
+-- 'segmentationTypeId', 'segmentationDescriptor_segmentationTypeId' - The Type Identifier to assign to the
+-- @segmentation_descriptor.segmentation_type_id@ message, as defined in
+-- section 10.3.3.1 of the 2022 SCTE-35 specification. Values must be
+-- between 0 and 256, inclusive. The default value is 48.
+--
+-- 'segmentationUpid', 'segmentationDescriptor_segmentationUpid' - The Upid to assign to the @segmentation_descriptor.segmentation_upid@
+-- message, as defined in section 10.3.3.1 of the 2022 SCTE-35
+-- specification. The value must be a hexadecimal string containing only
+-- the characters 0 though 9 and A through F. The default value is \"\" (an
+-- empty string).
+--
+-- 'segmentationUpidType', 'segmentationDescriptor_segmentationUpidType' - The Upid Type to assign to the
+-- @segmentation_descriptor.segmentation_upid_type@ message, as defined in
+-- section 10.3.3.1 of the 2022 SCTE-35 specification. Values must be
+-- between 0 and 256, inclusive. The default value is 14.
+--
+-- 'segmentsExpected', 'segmentationDescriptor_segmentsExpected' - The number of segments expected, which is assigned to the
+-- @segmentation_descriptor.segments_expectedS@ message, as defined in
+-- section 10.3.3.1 of the 2022 SCTE-35 specification Values must be
+-- between 0 and 256, inclusive. The default value is 0.
+--
+-- 'subSegmentNum', 'segmentationDescriptor_subSegmentNum' - The sub-segment number to assign to the
+-- @segmentation_descriptor.sub_segment_num@ message, as defined in section
+-- 10.3.3.1 of the 2022 SCTE-35 specification. Values must be between 0 and
+-- 256, inclusive. The defualt value is null.
+--
+-- 'subSegmentsExpected', 'segmentationDescriptor_subSegmentsExpected' - The number of sub-segments expected, which is assigned to the
+-- @segmentation_descriptor.sub_segments_expected@ message, as defined in
+-- section 10.3.3.1 of the 2022 SCTE-35 specification. Values must be
+-- between 0 and 256, inclusive. The default value is null.
+newSegmentationDescriptor ::
+  SegmentationDescriptor
+newSegmentationDescriptor =
+  SegmentationDescriptor'
+    { segmentNum =
+        Prelude.Nothing,
+      segmentationEventId = Prelude.Nothing,
+      segmentationTypeId = Prelude.Nothing,
+      segmentationUpid = Prelude.Nothing,
+      segmentationUpidType = Prelude.Nothing,
+      segmentsExpected = Prelude.Nothing,
+      subSegmentNum = Prelude.Nothing,
+      subSegmentsExpected = Prelude.Nothing
+    }
+
+-- | The segment number to assign to the
+-- @segmentation_descriptor.segment_num@ message, as defined in section
+-- 10.3.3.1 of the 2022 SCTE-35 specification Values must be between 0 and
+-- 256, inclusive. The default value is 0.
+segmentationDescriptor_segmentNum :: Lens.Lens' SegmentationDescriptor (Prelude.Maybe Prelude.Int)
+segmentationDescriptor_segmentNum = Lens.lens (\SegmentationDescriptor' {segmentNum} -> segmentNum) (\s@SegmentationDescriptor' {} a -> s {segmentNum = a} :: SegmentationDescriptor)
+
+-- | The Event Identifier to assign to the
+-- @segmentation_descriptor.segmentation_event_id@ message, as defined in
+-- section 10.3.3.1 of the 2022 SCTE-35 specification. The default value is
+-- 1.
+segmentationDescriptor_segmentationEventId :: Lens.Lens' SegmentationDescriptor (Prelude.Maybe Prelude.Int)
+segmentationDescriptor_segmentationEventId = Lens.lens (\SegmentationDescriptor' {segmentationEventId} -> segmentationEventId) (\s@SegmentationDescriptor' {} a -> s {segmentationEventId = a} :: SegmentationDescriptor)
+
+-- | The Type Identifier to assign to the
+-- @segmentation_descriptor.segmentation_type_id@ message, as defined in
+-- section 10.3.3.1 of the 2022 SCTE-35 specification. Values must be
+-- between 0 and 256, inclusive. The default value is 48.
+segmentationDescriptor_segmentationTypeId :: Lens.Lens' SegmentationDescriptor (Prelude.Maybe Prelude.Int)
+segmentationDescriptor_segmentationTypeId = Lens.lens (\SegmentationDescriptor' {segmentationTypeId} -> segmentationTypeId) (\s@SegmentationDescriptor' {} a -> s {segmentationTypeId = a} :: SegmentationDescriptor)
+
+-- | The Upid to assign to the @segmentation_descriptor.segmentation_upid@
+-- message, as defined in section 10.3.3.1 of the 2022 SCTE-35
+-- specification. The value must be a hexadecimal string containing only
+-- the characters 0 though 9 and A through F. The default value is \"\" (an
+-- empty string).
+segmentationDescriptor_segmentationUpid :: Lens.Lens' SegmentationDescriptor (Prelude.Maybe Prelude.Text)
+segmentationDescriptor_segmentationUpid = Lens.lens (\SegmentationDescriptor' {segmentationUpid} -> segmentationUpid) (\s@SegmentationDescriptor' {} a -> s {segmentationUpid = a} :: SegmentationDescriptor)
+
+-- | The Upid Type to assign to the
+-- @segmentation_descriptor.segmentation_upid_type@ message, as defined in
+-- section 10.3.3.1 of the 2022 SCTE-35 specification. Values must be
+-- between 0 and 256, inclusive. The default value is 14.
+segmentationDescriptor_segmentationUpidType :: Lens.Lens' SegmentationDescriptor (Prelude.Maybe Prelude.Int)
+segmentationDescriptor_segmentationUpidType = Lens.lens (\SegmentationDescriptor' {segmentationUpidType} -> segmentationUpidType) (\s@SegmentationDescriptor' {} a -> s {segmentationUpidType = a} :: SegmentationDescriptor)
+
+-- | The number of segments expected, which is assigned to the
+-- @segmentation_descriptor.segments_expectedS@ message, as defined in
+-- section 10.3.3.1 of the 2022 SCTE-35 specification Values must be
+-- between 0 and 256, inclusive. The default value is 0.
+segmentationDescriptor_segmentsExpected :: Lens.Lens' SegmentationDescriptor (Prelude.Maybe Prelude.Int)
+segmentationDescriptor_segmentsExpected = Lens.lens (\SegmentationDescriptor' {segmentsExpected} -> segmentsExpected) (\s@SegmentationDescriptor' {} a -> s {segmentsExpected = a} :: SegmentationDescriptor)
+
+-- | The sub-segment number to assign to the
+-- @segmentation_descriptor.sub_segment_num@ message, as defined in section
+-- 10.3.3.1 of the 2022 SCTE-35 specification. Values must be between 0 and
+-- 256, inclusive. The defualt value is null.
+segmentationDescriptor_subSegmentNum :: Lens.Lens' SegmentationDescriptor (Prelude.Maybe Prelude.Int)
+segmentationDescriptor_subSegmentNum = Lens.lens (\SegmentationDescriptor' {subSegmentNum} -> subSegmentNum) (\s@SegmentationDescriptor' {} a -> s {subSegmentNum = a} :: SegmentationDescriptor)
+
+-- | The number of sub-segments expected, which is assigned to the
+-- @segmentation_descriptor.sub_segments_expected@ message, as defined in
+-- section 10.3.3.1 of the 2022 SCTE-35 specification. Values must be
+-- between 0 and 256, inclusive. The default value is null.
+segmentationDescriptor_subSegmentsExpected :: Lens.Lens' SegmentationDescriptor (Prelude.Maybe Prelude.Int)
+segmentationDescriptor_subSegmentsExpected = Lens.lens (\SegmentationDescriptor' {subSegmentsExpected} -> subSegmentsExpected) (\s@SegmentationDescriptor' {} a -> s {subSegmentsExpected = a} :: SegmentationDescriptor)
+
+instance Data.FromJSON SegmentationDescriptor where
+  parseJSON =
+    Data.withObject
+      "SegmentationDescriptor"
+      ( \x ->
+          SegmentationDescriptor'
+            Prelude.<$> (x Data..:? "SegmentNum")
+            Prelude.<*> (x Data..:? "SegmentationEventId")
+            Prelude.<*> (x Data..:? "SegmentationTypeId")
+            Prelude.<*> (x Data..:? "SegmentationUpid")
+            Prelude.<*> (x Data..:? "SegmentationUpidType")
+            Prelude.<*> (x Data..:? "SegmentsExpected")
+            Prelude.<*> (x Data..:? "SubSegmentNum")
+            Prelude.<*> (x Data..:? "SubSegmentsExpected")
+      )
+
+instance Prelude.Hashable SegmentationDescriptor where
+  hashWithSalt _salt SegmentationDescriptor' {..} =
+    _salt
+      `Prelude.hashWithSalt` segmentNum
+      `Prelude.hashWithSalt` segmentationEventId
+      `Prelude.hashWithSalt` segmentationTypeId
+      `Prelude.hashWithSalt` segmentationUpid
+      `Prelude.hashWithSalt` segmentationUpidType
+      `Prelude.hashWithSalt` segmentsExpected
+      `Prelude.hashWithSalt` subSegmentNum
+      `Prelude.hashWithSalt` subSegmentsExpected
+
+instance Prelude.NFData SegmentationDescriptor where
+  rnf SegmentationDescriptor' {..} =
+    Prelude.rnf segmentNum
+      `Prelude.seq` Prelude.rnf segmentationEventId
+      `Prelude.seq` Prelude.rnf segmentationTypeId
+      `Prelude.seq` Prelude.rnf segmentationUpid
+      `Prelude.seq` Prelude.rnf segmentationUpidType
+      `Prelude.seq` Prelude.rnf segmentsExpected
+      `Prelude.seq` Prelude.rnf subSegmentNum
+      `Prelude.seq` Prelude.rnf subSegmentsExpected
+
+instance Data.ToJSON SegmentationDescriptor where
+  toJSON SegmentationDescriptor' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SegmentNum" Data..=) Prelude.<$> segmentNum,
+            ("SegmentationEventId" Data..=)
+              Prelude.<$> segmentationEventId,
+            ("SegmentationTypeId" Data..=)
+              Prelude.<$> segmentationTypeId,
+            ("SegmentationUpid" Data..=)
+              Prelude.<$> segmentationUpid,
+            ("SegmentationUpidType" Data..=)
+              Prelude.<$> segmentationUpidType,
+            ("SegmentsExpected" Data..=)
+              Prelude.<$> segmentsExpected,
+            ("SubSegmentNum" Data..=) Prelude.<$> subSegmentNum,
+            ("SubSegmentsExpected" Data..=)
+              Prelude.<$> subSegmentsExpected
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/SlateSource.hs b/gen/Amazonka/MediaTailor/Types/SlateSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/SlateSource.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaTailor.Types.SlateSource
+-- 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.MediaTailor.Types.SlateSource 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
+
+-- | Slate VOD source configuration.
+--
+-- /See:/ 'newSlateSource' smart constructor.
+data SlateSource = SlateSource'
+  { -- | The name of the source location where the slate VOD source is stored.
+    sourceLocationName :: Prelude.Maybe Prelude.Text,
+    -- | The slate VOD source name. The VOD source must already exist in a source
+    -- location before it can be used for slate.
+    vodSourceName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlateSource' 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:
+--
+-- 'sourceLocationName', 'slateSource_sourceLocationName' - The name of the source location where the slate VOD source is stored.
+--
+-- 'vodSourceName', 'slateSource_vodSourceName' - The slate VOD source name. The VOD source must already exist in a source
+-- location before it can be used for slate.
+newSlateSource ::
+  SlateSource
+newSlateSource =
+  SlateSource'
+    { sourceLocationName = Prelude.Nothing,
+      vodSourceName = Prelude.Nothing
+    }
+
+-- | The name of the source location where the slate VOD source is stored.
+slateSource_sourceLocationName :: Lens.Lens' SlateSource (Prelude.Maybe Prelude.Text)
+slateSource_sourceLocationName = Lens.lens (\SlateSource' {sourceLocationName} -> sourceLocationName) (\s@SlateSource' {} a -> s {sourceLocationName = a} :: SlateSource)
+
+-- | The slate VOD source name. The VOD source must already exist in a source
+-- location before it can be used for slate.
+slateSource_vodSourceName :: Lens.Lens' SlateSource (Prelude.Maybe Prelude.Text)
+slateSource_vodSourceName = Lens.lens (\SlateSource' {vodSourceName} -> vodSourceName) (\s@SlateSource' {} a -> s {vodSourceName = a} :: SlateSource)
+
+instance Data.FromJSON SlateSource where
+  parseJSON =
+    Data.withObject
+      "SlateSource"
+      ( \x ->
+          SlateSource'
+            Prelude.<$> (x Data..:? "SourceLocationName")
+            Prelude.<*> (x Data..:? "VodSourceName")
+      )
+
+instance Prelude.Hashable SlateSource where
+  hashWithSalt _salt SlateSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` sourceLocationName
+      `Prelude.hashWithSalt` vodSourceName
+
+instance Prelude.NFData SlateSource where
+  rnf SlateSource' {..} =
+    Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf vodSourceName
+
+instance Data.ToJSON SlateSource where
+  toJSON SlateSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SourceLocationName" Data..=)
+              Prelude.<$> sourceLocationName,
+            ("VodSourceName" Data..=) Prelude.<$> vodSourceName
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/SourceLocation.hs b/gen/Amazonka/MediaTailor/Types/SourceLocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/SourceLocation.hs
@@ -0,0 +1,198 @@
+{-# 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.MediaTailor.Types.SourceLocation
+-- 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.MediaTailor.Types.SourceLocation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.AccessConfiguration
+import Amazonka.MediaTailor.Types.DefaultSegmentDeliveryConfiguration
+import Amazonka.MediaTailor.Types.HttpConfiguration
+import Amazonka.MediaTailor.Types.SegmentDeliveryConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | A source location is a container for sources. For more information about
+-- source locations, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-source-locations.html Working with source locations>
+-- in the /MediaTailor User Guide/.
+--
+-- /See:/ 'newSourceLocation' smart constructor.
+data SourceLocation = SourceLocation'
+  { -- | The access configuration for the source location.
+    accessConfiguration :: Prelude.Maybe AccessConfiguration,
+    -- | The timestamp that indicates when the source location was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The default segment delivery configuration.
+    defaultSegmentDeliveryConfiguration :: Prelude.Maybe DefaultSegmentDeliveryConfiguration,
+    -- | The timestamp that indicates when the source location was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The segment delivery configurations for the source location.
+    segmentDeliveryConfigurations :: Prelude.Maybe [SegmentDeliveryConfiguration],
+    -- | The tags assigned to the source location. Tags are key-value pairs that
+    -- you can associate with Amazon resources to help with organization,
+    -- access control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ARN of the SourceLocation.
+    arn :: Prelude.Text,
+    -- | The HTTP configuration for the source location.
+    httpConfiguration :: HttpConfiguration,
+    -- | The name of the source location.
+    sourceLocationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SourceLocation' 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:
+--
+-- 'accessConfiguration', 'sourceLocation_accessConfiguration' - The access configuration for the source location.
+--
+-- 'creationTime', 'sourceLocation_creationTime' - The timestamp that indicates when the source location was created.
+--
+-- 'defaultSegmentDeliveryConfiguration', 'sourceLocation_defaultSegmentDeliveryConfiguration' - The default segment delivery configuration.
+--
+-- 'lastModifiedTime', 'sourceLocation_lastModifiedTime' - The timestamp that indicates when the source location was last modified.
+--
+-- 'segmentDeliveryConfigurations', 'sourceLocation_segmentDeliveryConfigurations' - The segment delivery configurations for the source location.
+--
+-- 'tags', 'sourceLocation_tags' - The tags assigned to the source location. Tags are key-value pairs that
+-- you can associate with Amazon resources to help with organization,
+-- access control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'arn', 'sourceLocation_arn' - The ARN of the SourceLocation.
+--
+-- 'httpConfiguration', 'sourceLocation_httpConfiguration' - The HTTP configuration for the source location.
+--
+-- 'sourceLocationName', 'sourceLocation_sourceLocationName' - The name of the source location.
+newSourceLocation ::
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'httpConfiguration'
+  HttpConfiguration ->
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  SourceLocation
+newSourceLocation
+  pArn_
+  pHttpConfiguration_
+  pSourceLocationName_ =
+    SourceLocation'
+      { accessConfiguration =
+          Prelude.Nothing,
+        creationTime = Prelude.Nothing,
+        defaultSegmentDeliveryConfiguration =
+          Prelude.Nothing,
+        lastModifiedTime = Prelude.Nothing,
+        segmentDeliveryConfigurations = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        arn = pArn_,
+        httpConfiguration = pHttpConfiguration_,
+        sourceLocationName = pSourceLocationName_
+      }
+
+-- | The access configuration for the source location.
+sourceLocation_accessConfiguration :: Lens.Lens' SourceLocation (Prelude.Maybe AccessConfiguration)
+sourceLocation_accessConfiguration = Lens.lens (\SourceLocation' {accessConfiguration} -> accessConfiguration) (\s@SourceLocation' {} a -> s {accessConfiguration = a} :: SourceLocation)
+
+-- | The timestamp that indicates when the source location was created.
+sourceLocation_creationTime :: Lens.Lens' SourceLocation (Prelude.Maybe Prelude.UTCTime)
+sourceLocation_creationTime = Lens.lens (\SourceLocation' {creationTime} -> creationTime) (\s@SourceLocation' {} a -> s {creationTime = a} :: SourceLocation) Prelude.. Lens.mapping Data._Time
+
+-- | The default segment delivery configuration.
+sourceLocation_defaultSegmentDeliveryConfiguration :: Lens.Lens' SourceLocation (Prelude.Maybe DefaultSegmentDeliveryConfiguration)
+sourceLocation_defaultSegmentDeliveryConfiguration = Lens.lens (\SourceLocation' {defaultSegmentDeliveryConfiguration} -> defaultSegmentDeliveryConfiguration) (\s@SourceLocation' {} a -> s {defaultSegmentDeliveryConfiguration = a} :: SourceLocation)
+
+-- | The timestamp that indicates when the source location was last modified.
+sourceLocation_lastModifiedTime :: Lens.Lens' SourceLocation (Prelude.Maybe Prelude.UTCTime)
+sourceLocation_lastModifiedTime = Lens.lens (\SourceLocation' {lastModifiedTime} -> lastModifiedTime) (\s@SourceLocation' {} a -> s {lastModifiedTime = a} :: SourceLocation) Prelude.. Lens.mapping Data._Time
+
+-- | The segment delivery configurations for the source location.
+sourceLocation_segmentDeliveryConfigurations :: Lens.Lens' SourceLocation (Prelude.Maybe [SegmentDeliveryConfiguration])
+sourceLocation_segmentDeliveryConfigurations = Lens.lens (\SourceLocation' {segmentDeliveryConfigurations} -> segmentDeliveryConfigurations) (\s@SourceLocation' {} a -> s {segmentDeliveryConfigurations = a} :: SourceLocation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags assigned to the source location. Tags are key-value pairs that
+-- you can associate with Amazon resources to help with organization,
+-- access control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+sourceLocation_tags :: Lens.Lens' SourceLocation (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+sourceLocation_tags = Lens.lens (\SourceLocation' {tags} -> tags) (\s@SourceLocation' {} a -> s {tags = a} :: SourceLocation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the SourceLocation.
+sourceLocation_arn :: Lens.Lens' SourceLocation Prelude.Text
+sourceLocation_arn = Lens.lens (\SourceLocation' {arn} -> arn) (\s@SourceLocation' {} a -> s {arn = a} :: SourceLocation)
+
+-- | The HTTP configuration for the source location.
+sourceLocation_httpConfiguration :: Lens.Lens' SourceLocation HttpConfiguration
+sourceLocation_httpConfiguration = Lens.lens (\SourceLocation' {httpConfiguration} -> httpConfiguration) (\s@SourceLocation' {} a -> s {httpConfiguration = a} :: SourceLocation)
+
+-- | The name of the source location.
+sourceLocation_sourceLocationName :: Lens.Lens' SourceLocation Prelude.Text
+sourceLocation_sourceLocationName = Lens.lens (\SourceLocation' {sourceLocationName} -> sourceLocationName) (\s@SourceLocation' {} a -> s {sourceLocationName = a} :: SourceLocation)
+
+instance Data.FromJSON SourceLocation where
+  parseJSON =
+    Data.withObject
+      "SourceLocation"
+      ( \x ->
+          SourceLocation'
+            Prelude.<$> (x Data..:? "AccessConfiguration")
+            Prelude.<*> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "DefaultSegmentDeliveryConfiguration")
+            Prelude.<*> (x Data..:? "LastModifiedTime")
+            Prelude.<*> ( x
+                            Data..:? "SegmentDeliveryConfigurations"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "Arn")
+            Prelude.<*> (x Data..: "HttpConfiguration")
+            Prelude.<*> (x Data..: "SourceLocationName")
+      )
+
+instance Prelude.Hashable SourceLocation where
+  hashWithSalt _salt SourceLocation' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessConfiguration
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` defaultSegmentDeliveryConfiguration
+      `Prelude.hashWithSalt` lastModifiedTime
+      `Prelude.hashWithSalt` segmentDeliveryConfigurations
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` httpConfiguration
+      `Prelude.hashWithSalt` sourceLocationName
+
+instance Prelude.NFData SourceLocation where
+  rnf SourceLocation' {..} =
+    Prelude.rnf accessConfiguration
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf defaultSegmentDeliveryConfiguration
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf segmentDeliveryConfigurations
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf httpConfiguration
+      `Prelude.seq` Prelude.rnf sourceLocationName
diff --git a/gen/Amazonka/MediaTailor/Types/SpliceInsertMessage.hs b/gen/Amazonka/MediaTailor/Types/SpliceInsertMessage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/SpliceInsertMessage.hs
@@ -0,0 +1,142 @@
+{-# 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.MediaTailor.Types.SpliceInsertMessage
+-- 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.MediaTailor.Types.SpliceInsertMessage 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
+
+-- | Splice insert message configuration.
+--
+-- /See:/ 'newSpliceInsertMessage' smart constructor.
+data SpliceInsertMessage = SpliceInsertMessage'
+  { -- | This is written to @splice_insert.avail_num@, as defined in section
+    -- 9.7.3.1 of the SCTE-35 specification. The default value is @0@. Values
+    -- must be between @0@ and @256@, inclusive.
+    availNum :: Prelude.Maybe Prelude.Int,
+    -- | This is written to @splice_insert.avails_expected@, as defined in
+    -- section 9.7.3.1 of the SCTE-35 specification. The default value is @0@.
+    -- Values must be between @0@ and @256@, inclusive.
+    availsExpected :: Prelude.Maybe Prelude.Int,
+    -- | This is written to @splice_insert.splice_event_id@, as defined in
+    -- section 9.7.3.1 of the SCTE-35 specification. The default value is @1@.
+    spliceEventId :: Prelude.Maybe Prelude.Int,
+    -- | This is written to @splice_insert.unique_program_id@, as defined in
+    -- section 9.7.3.1 of the SCTE-35 specification. The default value is @0@.
+    -- Values must be between @0@ and @256@, inclusive.
+    uniqueProgramId :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpliceInsertMessage' 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:
+--
+-- 'availNum', 'spliceInsertMessage_availNum' - This is written to @splice_insert.avail_num@, as defined in section
+-- 9.7.3.1 of the SCTE-35 specification. The default value is @0@. Values
+-- must be between @0@ and @256@, inclusive.
+--
+-- 'availsExpected', 'spliceInsertMessage_availsExpected' - This is written to @splice_insert.avails_expected@, as defined in
+-- section 9.7.3.1 of the SCTE-35 specification. The default value is @0@.
+-- Values must be between @0@ and @256@, inclusive.
+--
+-- 'spliceEventId', 'spliceInsertMessage_spliceEventId' - This is written to @splice_insert.splice_event_id@, as defined in
+-- section 9.7.3.1 of the SCTE-35 specification. The default value is @1@.
+--
+-- 'uniqueProgramId', 'spliceInsertMessage_uniqueProgramId' - This is written to @splice_insert.unique_program_id@, as defined in
+-- section 9.7.3.1 of the SCTE-35 specification. The default value is @0@.
+-- Values must be between @0@ and @256@, inclusive.
+newSpliceInsertMessage ::
+  SpliceInsertMessage
+newSpliceInsertMessage =
+  SpliceInsertMessage'
+    { availNum = Prelude.Nothing,
+      availsExpected = Prelude.Nothing,
+      spliceEventId = Prelude.Nothing,
+      uniqueProgramId = Prelude.Nothing
+    }
+
+-- | This is written to @splice_insert.avail_num@, as defined in section
+-- 9.7.3.1 of the SCTE-35 specification. The default value is @0@. Values
+-- must be between @0@ and @256@, inclusive.
+spliceInsertMessage_availNum :: Lens.Lens' SpliceInsertMessage (Prelude.Maybe Prelude.Int)
+spliceInsertMessage_availNum = Lens.lens (\SpliceInsertMessage' {availNum} -> availNum) (\s@SpliceInsertMessage' {} a -> s {availNum = a} :: SpliceInsertMessage)
+
+-- | This is written to @splice_insert.avails_expected@, as defined in
+-- section 9.7.3.1 of the SCTE-35 specification. The default value is @0@.
+-- Values must be between @0@ and @256@, inclusive.
+spliceInsertMessage_availsExpected :: Lens.Lens' SpliceInsertMessage (Prelude.Maybe Prelude.Int)
+spliceInsertMessage_availsExpected = Lens.lens (\SpliceInsertMessage' {availsExpected} -> availsExpected) (\s@SpliceInsertMessage' {} a -> s {availsExpected = a} :: SpliceInsertMessage)
+
+-- | This is written to @splice_insert.splice_event_id@, as defined in
+-- section 9.7.3.1 of the SCTE-35 specification. The default value is @1@.
+spliceInsertMessage_spliceEventId :: Lens.Lens' SpliceInsertMessage (Prelude.Maybe Prelude.Int)
+spliceInsertMessage_spliceEventId = Lens.lens (\SpliceInsertMessage' {spliceEventId} -> spliceEventId) (\s@SpliceInsertMessage' {} a -> s {spliceEventId = a} :: SpliceInsertMessage)
+
+-- | This is written to @splice_insert.unique_program_id@, as defined in
+-- section 9.7.3.1 of the SCTE-35 specification. The default value is @0@.
+-- Values must be between @0@ and @256@, inclusive.
+spliceInsertMessage_uniqueProgramId :: Lens.Lens' SpliceInsertMessage (Prelude.Maybe Prelude.Int)
+spliceInsertMessage_uniqueProgramId = Lens.lens (\SpliceInsertMessage' {uniqueProgramId} -> uniqueProgramId) (\s@SpliceInsertMessage' {} a -> s {uniqueProgramId = a} :: SpliceInsertMessage)
+
+instance Data.FromJSON SpliceInsertMessage where
+  parseJSON =
+    Data.withObject
+      "SpliceInsertMessage"
+      ( \x ->
+          SpliceInsertMessage'
+            Prelude.<$> (x Data..:? "AvailNum")
+            Prelude.<*> (x Data..:? "AvailsExpected")
+            Prelude.<*> (x Data..:? "SpliceEventId")
+            Prelude.<*> (x Data..:? "UniqueProgramId")
+      )
+
+instance Prelude.Hashable SpliceInsertMessage where
+  hashWithSalt _salt SpliceInsertMessage' {..} =
+    _salt
+      `Prelude.hashWithSalt` availNum
+      `Prelude.hashWithSalt` availsExpected
+      `Prelude.hashWithSalt` spliceEventId
+      `Prelude.hashWithSalt` uniqueProgramId
+
+instance Prelude.NFData SpliceInsertMessage where
+  rnf SpliceInsertMessage' {..} =
+    Prelude.rnf availNum
+      `Prelude.seq` Prelude.rnf availsExpected
+      `Prelude.seq` Prelude.rnf spliceEventId
+      `Prelude.seq` Prelude.rnf uniqueProgramId
+
+instance Data.ToJSON SpliceInsertMessage where
+  toJSON SpliceInsertMessage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AvailNum" Data..=) Prelude.<$> availNum,
+            ("AvailsExpected" Data..=)
+              Prelude.<$> availsExpected,
+            ("SpliceEventId" Data..=) Prelude.<$> spliceEventId,
+            ("UniqueProgramId" Data..=)
+              Prelude.<$> uniqueProgramId
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/Tier.hs b/gen/Amazonka/MediaTailor/Types/Tier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/Tier.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.MediaTailor.Types.Tier
+-- 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.MediaTailor.Types.Tier
+  ( Tier
+      ( ..,
+        Tier_BASIC,
+        Tier_STANDARD
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Tier = Tier' {fromTier :: 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 Tier_BASIC :: Tier
+pattern Tier_BASIC = Tier' "BASIC"
+
+pattern Tier_STANDARD :: Tier
+pattern Tier_STANDARD = Tier' "STANDARD"
+
+{-# COMPLETE
+  Tier_BASIC,
+  Tier_STANDARD,
+  Tier'
+  #-}
diff --git a/gen/Amazonka/MediaTailor/Types/TimeSignalMessage.hs b/gen/Amazonka/MediaTailor/Types/TimeSignalMessage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/TimeSignalMessage.hs
@@ -0,0 +1,99 @@
+{-# 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.MediaTailor.Types.TimeSignalMessage
+-- 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.MediaTailor.Types.TimeSignalMessage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.SegmentationDescriptor
+import qualified Amazonka.Prelude as Prelude
+
+-- | The SCTE-35 @time_signal@ message can be sent with one or more
+-- @segmentation_descriptor@ messages. A @time_signal@ message can be sent
+-- only if a single @segmentation_descriptor@ message is sent.
+--
+-- The @time_signal@ message contains only the @splice_time@ field which is
+-- constructed using a given presentation timestamp. When sending a
+-- @time_signal@ message, the @splice_command_type@ field in the
+-- @splice_info_section@ message is set to 6 (0x06).
+--
+-- See the @time_signal()@ table of the 2022 SCTE-35 specification for more
+-- information.
+--
+-- /See:/ 'newTimeSignalMessage' smart constructor.
+data TimeSignalMessage = TimeSignalMessage'
+  { -- | The configurations for the SCTE-35 @segmentation_descriptor@ message(s)
+    -- sent with the @time_signal@ message.
+    segmentationDescriptors :: Prelude.Maybe [SegmentationDescriptor]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TimeSignalMessage' 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:
+--
+-- 'segmentationDescriptors', 'timeSignalMessage_segmentationDescriptors' - The configurations for the SCTE-35 @segmentation_descriptor@ message(s)
+-- sent with the @time_signal@ message.
+newTimeSignalMessage ::
+  TimeSignalMessage
+newTimeSignalMessage =
+  TimeSignalMessage'
+    { segmentationDescriptors =
+        Prelude.Nothing
+    }
+
+-- | The configurations for the SCTE-35 @segmentation_descriptor@ message(s)
+-- sent with the @time_signal@ message.
+timeSignalMessage_segmentationDescriptors :: Lens.Lens' TimeSignalMessage (Prelude.Maybe [SegmentationDescriptor])
+timeSignalMessage_segmentationDescriptors = Lens.lens (\TimeSignalMessage' {segmentationDescriptors} -> segmentationDescriptors) (\s@TimeSignalMessage' {} a -> s {segmentationDescriptors = a} :: TimeSignalMessage) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON TimeSignalMessage where
+  parseJSON =
+    Data.withObject
+      "TimeSignalMessage"
+      ( \x ->
+          TimeSignalMessage'
+            Prelude.<$> ( x
+                            Data..:? "SegmentationDescriptors"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable TimeSignalMessage where
+  hashWithSalt _salt TimeSignalMessage' {..} =
+    _salt
+      `Prelude.hashWithSalt` segmentationDescriptors
+
+instance Prelude.NFData TimeSignalMessage where
+  rnf TimeSignalMessage' {..} =
+    Prelude.rnf segmentationDescriptors
+
+instance Data.ToJSON TimeSignalMessage where
+  toJSON TimeSignalMessage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SegmentationDescriptors" Data..=)
+              Prelude.<$> segmentationDescriptors
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/Transition.hs b/gen/Amazonka/MediaTailor/Types/Transition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/Transition.hs
@@ -0,0 +1,185 @@
+{-# 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.MediaTailor.Types.Transition
+-- 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.MediaTailor.Types.Transition where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.RelativePosition
+import qualified Amazonka.Prelude as Prelude
+
+-- | Program transition configuration.
+--
+-- /See:/ 'newTransition' smart constructor.
+data Transition = Transition'
+  { -- | The duration of the live program in seconds.
+    durationMillis :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the program that this program will be inserted next to, as
+    -- defined by @RelativePosition@.
+    relativeProgram :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the program is scheduled to start, in epoch
+    -- milliseconds.
+    scheduledStartTimeMillis :: Prelude.Maybe Prelude.Integer,
+    -- | The position where this program will be inserted relative to the
+    -- @RelativePosition@.
+    relativePosition :: RelativePosition,
+    -- | Defines when the program plays in the schedule. You can set the value to
+    -- @ABSOLUTE@ or @RELATIVE@.
+    --
+    -- @ABSOLUTE@ - The program plays at a specific wall clock time. This
+    -- setting can only be used for channels using the @LINEAR@ @PlaybackMode@.
+    --
+    -- Note the following considerations when using @ABSOLUTE@ transitions:
+    --
+    -- If the preceding program in the schedule has a duration that extends
+    -- past the wall clock time, MediaTailor truncates the preceding program on
+    -- a common segment boundary.
+    --
+    -- If there are gaps in playback, MediaTailor plays the @FillerSlate@ you
+    -- configured for your linear channel.
+    --
+    -- @RELATIVE@ - The program is inserted into the schedule either before or
+    -- after a program that you specify via @RelativePosition@.
+    type' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Transition' 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:
+--
+-- 'durationMillis', 'transition_durationMillis' - The duration of the live program in seconds.
+--
+-- 'relativeProgram', 'transition_relativeProgram' - The name of the program that this program will be inserted next to, as
+-- defined by @RelativePosition@.
+--
+-- 'scheduledStartTimeMillis', 'transition_scheduledStartTimeMillis' - The date and time that the program is scheduled to start, in epoch
+-- milliseconds.
+--
+-- 'relativePosition', 'transition_relativePosition' - The position where this program will be inserted relative to the
+-- @RelativePosition@.
+--
+-- 'type'', 'transition_type' - Defines when the program plays in the schedule. You can set the value to
+-- @ABSOLUTE@ or @RELATIVE@.
+--
+-- @ABSOLUTE@ - The program plays at a specific wall clock time. This
+-- setting can only be used for channels using the @LINEAR@ @PlaybackMode@.
+--
+-- Note the following considerations when using @ABSOLUTE@ transitions:
+--
+-- If the preceding program in the schedule has a duration that extends
+-- past the wall clock time, MediaTailor truncates the preceding program on
+-- a common segment boundary.
+--
+-- If there are gaps in playback, MediaTailor plays the @FillerSlate@ you
+-- configured for your linear channel.
+--
+-- @RELATIVE@ - The program is inserted into the schedule either before or
+-- after a program that you specify via @RelativePosition@.
+newTransition ::
+  -- | 'relativePosition'
+  RelativePosition ->
+  -- | 'type''
+  Prelude.Text ->
+  Transition
+newTransition pRelativePosition_ pType_ =
+  Transition'
+    { durationMillis = Prelude.Nothing,
+      relativeProgram = Prelude.Nothing,
+      scheduledStartTimeMillis = Prelude.Nothing,
+      relativePosition = pRelativePosition_,
+      type' = pType_
+    }
+
+-- | The duration of the live program in seconds.
+transition_durationMillis :: Lens.Lens' Transition (Prelude.Maybe Prelude.Integer)
+transition_durationMillis = Lens.lens (\Transition' {durationMillis} -> durationMillis) (\s@Transition' {} a -> s {durationMillis = a} :: Transition)
+
+-- | The name of the program that this program will be inserted next to, as
+-- defined by @RelativePosition@.
+transition_relativeProgram :: Lens.Lens' Transition (Prelude.Maybe Prelude.Text)
+transition_relativeProgram = Lens.lens (\Transition' {relativeProgram} -> relativeProgram) (\s@Transition' {} a -> s {relativeProgram = a} :: Transition)
+
+-- | The date and time that the program is scheduled to start, in epoch
+-- milliseconds.
+transition_scheduledStartTimeMillis :: Lens.Lens' Transition (Prelude.Maybe Prelude.Integer)
+transition_scheduledStartTimeMillis = Lens.lens (\Transition' {scheduledStartTimeMillis} -> scheduledStartTimeMillis) (\s@Transition' {} a -> s {scheduledStartTimeMillis = a} :: Transition)
+
+-- | The position where this program will be inserted relative to the
+-- @RelativePosition@.
+transition_relativePosition :: Lens.Lens' Transition RelativePosition
+transition_relativePosition = Lens.lens (\Transition' {relativePosition} -> relativePosition) (\s@Transition' {} a -> s {relativePosition = a} :: Transition)
+
+-- | Defines when the program plays in the schedule. You can set the value to
+-- @ABSOLUTE@ or @RELATIVE@.
+--
+-- @ABSOLUTE@ - The program plays at a specific wall clock time. This
+-- setting can only be used for channels using the @LINEAR@ @PlaybackMode@.
+--
+-- Note the following considerations when using @ABSOLUTE@ transitions:
+--
+-- If the preceding program in the schedule has a duration that extends
+-- past the wall clock time, MediaTailor truncates the preceding program on
+-- a common segment boundary.
+--
+-- If there are gaps in playback, MediaTailor plays the @FillerSlate@ you
+-- configured for your linear channel.
+--
+-- @RELATIVE@ - The program is inserted into the schedule either before or
+-- after a program that you specify via @RelativePosition@.
+transition_type :: Lens.Lens' Transition Prelude.Text
+transition_type = Lens.lens (\Transition' {type'} -> type') (\s@Transition' {} a -> s {type' = a} :: Transition)
+
+instance Prelude.Hashable Transition where
+  hashWithSalt _salt Transition' {..} =
+    _salt
+      `Prelude.hashWithSalt` durationMillis
+      `Prelude.hashWithSalt` relativeProgram
+      `Prelude.hashWithSalt` scheduledStartTimeMillis
+      `Prelude.hashWithSalt` relativePosition
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData Transition where
+  rnf Transition' {..} =
+    Prelude.rnf durationMillis
+      `Prelude.seq` Prelude.rnf relativeProgram
+      `Prelude.seq` Prelude.rnf scheduledStartTimeMillis
+      `Prelude.seq` Prelude.rnf relativePosition
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON Transition where
+  toJSON Transition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DurationMillis" Data..=)
+              Prelude.<$> durationMillis,
+            ("RelativeProgram" Data..=)
+              Prelude.<$> relativeProgram,
+            ("ScheduledStartTimeMillis" Data..=)
+              Prelude.<$> scheduledStartTimeMillis,
+            Prelude.Just
+              ("RelativePosition" Data..= relativePosition),
+            Prelude.Just ("Type" Data..= type')
+          ]
+      )
diff --git a/gen/Amazonka/MediaTailor/Types/Type.hs b/gen/Amazonka/MediaTailor/Types/Type.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/Type.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.MediaTailor.Types.Type
+-- 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.MediaTailor.Types.Type
+  ( Type
+      ( ..,
+        Type_DASH,
+        Type_HLS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Type = Type' {fromType :: 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 Type_DASH :: Type
+pattern Type_DASH = Type' "DASH"
+
+pattern Type_HLS :: Type
+pattern Type_HLS = Type' "HLS"
+
+{-# COMPLETE
+  Type_DASH,
+  Type_HLS,
+  Type'
+  #-}
diff --git a/gen/Amazonka/MediaTailor/Types/VodSource.hs b/gen/Amazonka/MediaTailor/Types/VodSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/Types/VodSource.hs
@@ -0,0 +1,166 @@
+{-# 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.MediaTailor.Types.VodSource
+-- 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.MediaTailor.Types.VodSource where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types.HttpPackageConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | VOD source configuration parameters.
+--
+-- /See:/ 'newVodSource' smart constructor.
+data VodSource = VodSource'
+  { -- | The timestamp that indicates when the VOD source was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The timestamp that indicates when the VOD source was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The tags assigned to the VOD source. Tags are key-value pairs that you
+    -- can associate with Amazon resources to help with organization, access
+    -- control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ARN for the VOD source.
+    arn :: Prelude.Text,
+    -- | The HTTP package configurations for the VOD source.
+    httpPackageConfigurations :: [HttpPackageConfiguration],
+    -- | The name of the source location that the VOD source is associated with.
+    sourceLocationName :: Prelude.Text,
+    -- | The name of the VOD source.
+    vodSourceName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VodSource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'vodSource_creationTime' - The timestamp that indicates when the VOD source was created.
+--
+-- 'lastModifiedTime', 'vodSource_lastModifiedTime' - The timestamp that indicates when the VOD source was last modified.
+--
+-- 'tags', 'vodSource_tags' - The tags assigned to the VOD source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'arn', 'vodSource_arn' - The ARN for the VOD source.
+--
+-- 'httpPackageConfigurations', 'vodSource_httpPackageConfigurations' - The HTTP package configurations for the VOD source.
+--
+-- 'sourceLocationName', 'vodSource_sourceLocationName' - The name of the source location that the VOD source is associated with.
+--
+-- 'vodSourceName', 'vodSource_vodSourceName' - The name of the VOD source.
+newVodSource ::
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  -- | 'vodSourceName'
+  Prelude.Text ->
+  VodSource
+newVodSource
+  pArn_
+  pSourceLocationName_
+  pVodSourceName_ =
+    VodSource'
+      { creationTime = Prelude.Nothing,
+        lastModifiedTime = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        arn = pArn_,
+        httpPackageConfigurations = Prelude.mempty,
+        sourceLocationName = pSourceLocationName_,
+        vodSourceName = pVodSourceName_
+      }
+
+-- | The timestamp that indicates when the VOD source was created.
+vodSource_creationTime :: Lens.Lens' VodSource (Prelude.Maybe Prelude.UTCTime)
+vodSource_creationTime = Lens.lens (\VodSource' {creationTime} -> creationTime) (\s@VodSource' {} a -> s {creationTime = a} :: VodSource) Prelude.. Lens.mapping Data._Time
+
+-- | The timestamp that indicates when the VOD source was last modified.
+vodSource_lastModifiedTime :: Lens.Lens' VodSource (Prelude.Maybe Prelude.UTCTime)
+vodSource_lastModifiedTime = Lens.lens (\VodSource' {lastModifiedTime} -> lastModifiedTime) (\s@VodSource' {} a -> s {lastModifiedTime = a} :: VodSource) Prelude.. Lens.mapping Data._Time
+
+-- | The tags assigned to the VOD source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+vodSource_tags :: Lens.Lens' VodSource (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+vodSource_tags = Lens.lens (\VodSource' {tags} -> tags) (\s@VodSource' {} a -> s {tags = a} :: VodSource) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN for the VOD source.
+vodSource_arn :: Lens.Lens' VodSource Prelude.Text
+vodSource_arn = Lens.lens (\VodSource' {arn} -> arn) (\s@VodSource' {} a -> s {arn = a} :: VodSource)
+
+-- | The HTTP package configurations for the VOD source.
+vodSource_httpPackageConfigurations :: Lens.Lens' VodSource [HttpPackageConfiguration]
+vodSource_httpPackageConfigurations = Lens.lens (\VodSource' {httpPackageConfigurations} -> httpPackageConfigurations) (\s@VodSource' {} a -> s {httpPackageConfigurations = a} :: VodSource) Prelude.. Lens.coerced
+
+-- | The name of the source location that the VOD source is associated with.
+vodSource_sourceLocationName :: Lens.Lens' VodSource Prelude.Text
+vodSource_sourceLocationName = Lens.lens (\VodSource' {sourceLocationName} -> sourceLocationName) (\s@VodSource' {} a -> s {sourceLocationName = a} :: VodSource)
+
+-- | The name of the VOD source.
+vodSource_vodSourceName :: Lens.Lens' VodSource Prelude.Text
+vodSource_vodSourceName = Lens.lens (\VodSource' {vodSourceName} -> vodSourceName) (\s@VodSource' {} a -> s {vodSourceName = a} :: VodSource)
+
+instance Data.FromJSON VodSource where
+  parseJSON =
+    Data.withObject
+      "VodSource"
+      ( \x ->
+          VodSource'
+            Prelude.<$> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "LastModifiedTime")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "Arn")
+            Prelude.<*> ( x
+                            Data..:? "HttpPackageConfigurations"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "SourceLocationName")
+            Prelude.<*> (x Data..: "VodSourceName")
+      )
+
+instance Prelude.Hashable VodSource where
+  hashWithSalt _salt VodSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` lastModifiedTime
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` httpPackageConfigurations
+      `Prelude.hashWithSalt` sourceLocationName
+      `Prelude.hashWithSalt` vodSourceName
+
+instance Prelude.NFData VodSource where
+  rnf VodSource' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf httpPackageConfigurations
+      `Prelude.seq` Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf vodSourceName
diff --git a/gen/Amazonka/MediaTailor/UntagResource.hs b/gen/Amazonka/MediaTailor/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/UntagResource.hs
@@ -0,0 +1,140 @@
+{-# 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.MediaTailor.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The resource to untag.
+module Amazonka.MediaTailor.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource to untag.
+    resourceArn :: Prelude.Text,
+    -- | The tag keys associated with the resource.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource to untag.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The tag keys associated with the resource.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource to untag.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The tag keys associated with the resource.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull UntagResourceResponse'
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newUntagResourceResponse ::
+  UntagResourceResponse
+newUntagResourceResponse = UntagResourceResponse'
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/MediaTailor/UpdateChannel.hs b/gen/Amazonka/MediaTailor/UpdateChannel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/UpdateChannel.hs
@@ -0,0 +1,350 @@
+{-# 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.MediaTailor.UpdateChannel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a channel. For information about MediaTailor channels, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-channels.html Working with channels>
+-- in the /MediaTailor User Guide/.
+module Amazonka.MediaTailor.UpdateChannel
+  ( -- * Creating a Request
+    UpdateChannel (..),
+    newUpdateChannel,
+
+    -- * Request Lenses
+    updateChannel_fillerSlate,
+    updateChannel_channelName,
+    updateChannel_outputs,
+
+    -- * Destructuring the Response
+    UpdateChannelResponse (..),
+    newUpdateChannelResponse,
+
+    -- * Response Lenses
+    updateChannelResponse_arn,
+    updateChannelResponse_channelName,
+    updateChannelResponse_channelState,
+    updateChannelResponse_creationTime,
+    updateChannelResponse_fillerSlate,
+    updateChannelResponse_lastModifiedTime,
+    updateChannelResponse_outputs,
+    updateChannelResponse_playbackMode,
+    updateChannelResponse_tags,
+    updateChannelResponse_tier,
+    updateChannelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateChannel' smart constructor.
+data UpdateChannel = UpdateChannel'
+  { -- | The slate used to fill gaps between programs in the schedule. You must
+    -- configure filler slate if your channel uses the @LINEAR@ @PlaybackMode@.
+    -- MediaTailor doesn\'t support filler slate for channels using the @LOOP@
+    -- @PlaybackMode@.
+    fillerSlate :: Prelude.Maybe SlateSource,
+    -- | The name of the channel.
+    channelName :: Prelude.Text,
+    -- | The channel\'s output properties.
+    outputs :: [RequestOutputItem]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateChannel' 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:
+--
+-- 'fillerSlate', 'updateChannel_fillerSlate' - The slate used to fill gaps between programs in the schedule. You must
+-- configure filler slate if your channel uses the @LINEAR@ @PlaybackMode@.
+-- MediaTailor doesn\'t support filler slate for channels using the @LOOP@
+-- @PlaybackMode@.
+--
+-- 'channelName', 'updateChannel_channelName' - The name of the channel.
+--
+-- 'outputs', 'updateChannel_outputs' - The channel\'s output properties.
+newUpdateChannel ::
+  -- | 'channelName'
+  Prelude.Text ->
+  UpdateChannel
+newUpdateChannel pChannelName_ =
+  UpdateChannel'
+    { fillerSlate = Prelude.Nothing,
+      channelName = pChannelName_,
+      outputs = Prelude.mempty
+    }
+
+-- | The slate used to fill gaps between programs in the schedule. You must
+-- configure filler slate if your channel uses the @LINEAR@ @PlaybackMode@.
+-- MediaTailor doesn\'t support filler slate for channels using the @LOOP@
+-- @PlaybackMode@.
+updateChannel_fillerSlate :: Lens.Lens' UpdateChannel (Prelude.Maybe SlateSource)
+updateChannel_fillerSlate = Lens.lens (\UpdateChannel' {fillerSlate} -> fillerSlate) (\s@UpdateChannel' {} a -> s {fillerSlate = a} :: UpdateChannel)
+
+-- | The name of the channel.
+updateChannel_channelName :: Lens.Lens' UpdateChannel Prelude.Text
+updateChannel_channelName = Lens.lens (\UpdateChannel' {channelName} -> channelName) (\s@UpdateChannel' {} a -> s {channelName = a} :: UpdateChannel)
+
+-- | The channel\'s output properties.
+updateChannel_outputs :: Lens.Lens' UpdateChannel [RequestOutputItem]
+updateChannel_outputs = Lens.lens (\UpdateChannel' {outputs} -> outputs) (\s@UpdateChannel' {} a -> s {outputs = a} :: UpdateChannel) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UpdateChannel where
+  type
+    AWSResponse UpdateChannel =
+      UpdateChannelResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateChannelResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "ChannelName")
+            Prelude.<*> (x Data..?> "ChannelState")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "FillerSlate")
+            Prelude.<*> (x Data..?> "LastModifiedTime")
+            Prelude.<*> (x Data..?> "Outputs" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "PlaybackMode")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Tier")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateChannel where
+  hashWithSalt _salt UpdateChannel' {..} =
+    _salt
+      `Prelude.hashWithSalt` fillerSlate
+      `Prelude.hashWithSalt` channelName
+      `Prelude.hashWithSalt` outputs
+
+instance Prelude.NFData UpdateChannel where
+  rnf UpdateChannel' {..} =
+    Prelude.rnf fillerSlate
+      `Prelude.seq` Prelude.rnf channelName
+      `Prelude.seq` Prelude.rnf outputs
+
+instance Data.ToHeaders UpdateChannel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateChannel where
+  toJSON UpdateChannel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FillerSlate" Data..=) Prelude.<$> fillerSlate,
+            Prelude.Just ("Outputs" Data..= outputs)
+          ]
+      )
+
+instance Data.ToPath UpdateChannel where
+  toPath UpdateChannel' {..} =
+    Prelude.mconcat
+      ["/channel/", Data.toBS channelName]
+
+instance Data.ToQuery UpdateChannel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateChannelResponse' smart constructor.
+data UpdateChannelResponse = UpdateChannelResponse'
+  { -- | The Amazon Resource Name (ARN) associated with the channel.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the channel.
+    channelName :: Prelude.Maybe Prelude.Text,
+    -- | Returns the state whether the channel is running or not.
+    channelState :: Prelude.Maybe ChannelState,
+    -- | The timestamp of when the channel was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The slate used to fill gaps between programs in the schedule. You must
+    -- configure filler slate if your channel uses the @LINEAR@ @PlaybackMode@.
+    -- MediaTailor doesn\'t support filler slate for channels using the @LOOP@
+    -- @PlaybackMode@.
+    fillerSlate :: Prelude.Maybe SlateSource,
+    -- | The timestamp that indicates when the channel was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The channel\'s output properties.
+    outputs :: Prelude.Maybe [ResponseOutputItem],
+    -- | The type of playback mode for this channel.
+    --
+    -- @LINEAR@ - Programs play back-to-back only once.
+    --
+    -- @LOOP@ - Programs play back-to-back in an endless loop. When the last
+    -- program in the schedule plays, playback loops back to the first program
+    -- in the schedule.
+    playbackMode :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the channel. Tags are key-value pairs that you can
+    -- associate with Amazon resources to help with organization, access
+    -- control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The tier associated with this Channel.
+    tier :: 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 'UpdateChannelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'updateChannelResponse_arn' - The Amazon Resource Name (ARN) associated with the channel.
+--
+-- 'channelName', 'updateChannelResponse_channelName' - The name of the channel.
+--
+-- 'channelState', 'updateChannelResponse_channelState' - Returns the state whether the channel is running or not.
+--
+-- 'creationTime', 'updateChannelResponse_creationTime' - The timestamp of when the channel was created.
+--
+-- 'fillerSlate', 'updateChannelResponse_fillerSlate' - The slate used to fill gaps between programs in the schedule. You must
+-- configure filler slate if your channel uses the @LINEAR@ @PlaybackMode@.
+-- MediaTailor doesn\'t support filler slate for channels using the @LOOP@
+-- @PlaybackMode@.
+--
+-- 'lastModifiedTime', 'updateChannelResponse_lastModifiedTime' - The timestamp that indicates when the channel was last modified.
+--
+-- 'outputs', 'updateChannelResponse_outputs' - The channel\'s output properties.
+--
+-- 'playbackMode', 'updateChannelResponse_playbackMode' - The type of playback mode for this channel.
+--
+-- @LINEAR@ - Programs play back-to-back only once.
+--
+-- @LOOP@ - Programs play back-to-back in an endless loop. When the last
+-- program in the schedule plays, playback loops back to the first program
+-- in the schedule.
+--
+-- 'tags', 'updateChannelResponse_tags' - The tags to assign to the channel. Tags are key-value pairs that you can
+-- associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'tier', 'updateChannelResponse_tier' - The tier associated with this Channel.
+--
+-- 'httpStatus', 'updateChannelResponse_httpStatus' - The response's http status code.
+newUpdateChannelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateChannelResponse
+newUpdateChannelResponse pHttpStatus_ =
+  UpdateChannelResponse'
+    { arn = Prelude.Nothing,
+      channelName = Prelude.Nothing,
+      channelState = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      fillerSlate = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      outputs = Prelude.Nothing,
+      playbackMode = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      tier = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) associated with the channel.
+updateChannelResponse_arn :: Lens.Lens' UpdateChannelResponse (Prelude.Maybe Prelude.Text)
+updateChannelResponse_arn = Lens.lens (\UpdateChannelResponse' {arn} -> arn) (\s@UpdateChannelResponse' {} a -> s {arn = a} :: UpdateChannelResponse)
+
+-- | The name of the channel.
+updateChannelResponse_channelName :: Lens.Lens' UpdateChannelResponse (Prelude.Maybe Prelude.Text)
+updateChannelResponse_channelName = Lens.lens (\UpdateChannelResponse' {channelName} -> channelName) (\s@UpdateChannelResponse' {} a -> s {channelName = a} :: UpdateChannelResponse)
+
+-- | Returns the state whether the channel is running or not.
+updateChannelResponse_channelState :: Lens.Lens' UpdateChannelResponse (Prelude.Maybe ChannelState)
+updateChannelResponse_channelState = Lens.lens (\UpdateChannelResponse' {channelState} -> channelState) (\s@UpdateChannelResponse' {} a -> s {channelState = a} :: UpdateChannelResponse)
+
+-- | The timestamp of when the channel was created.
+updateChannelResponse_creationTime :: Lens.Lens' UpdateChannelResponse (Prelude.Maybe Prelude.UTCTime)
+updateChannelResponse_creationTime = Lens.lens (\UpdateChannelResponse' {creationTime} -> creationTime) (\s@UpdateChannelResponse' {} a -> s {creationTime = a} :: UpdateChannelResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The slate used to fill gaps between programs in the schedule. You must
+-- configure filler slate if your channel uses the @LINEAR@ @PlaybackMode@.
+-- MediaTailor doesn\'t support filler slate for channels using the @LOOP@
+-- @PlaybackMode@.
+updateChannelResponse_fillerSlate :: Lens.Lens' UpdateChannelResponse (Prelude.Maybe SlateSource)
+updateChannelResponse_fillerSlate = Lens.lens (\UpdateChannelResponse' {fillerSlate} -> fillerSlate) (\s@UpdateChannelResponse' {} a -> s {fillerSlate = a} :: UpdateChannelResponse)
+
+-- | The timestamp that indicates when the channel was last modified.
+updateChannelResponse_lastModifiedTime :: Lens.Lens' UpdateChannelResponse (Prelude.Maybe Prelude.UTCTime)
+updateChannelResponse_lastModifiedTime = Lens.lens (\UpdateChannelResponse' {lastModifiedTime} -> lastModifiedTime) (\s@UpdateChannelResponse' {} a -> s {lastModifiedTime = a} :: UpdateChannelResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The channel\'s output properties.
+updateChannelResponse_outputs :: Lens.Lens' UpdateChannelResponse (Prelude.Maybe [ResponseOutputItem])
+updateChannelResponse_outputs = Lens.lens (\UpdateChannelResponse' {outputs} -> outputs) (\s@UpdateChannelResponse' {} a -> s {outputs = a} :: UpdateChannelResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of playback mode for this channel.
+--
+-- @LINEAR@ - Programs play back-to-back only once.
+--
+-- @LOOP@ - Programs play back-to-back in an endless loop. When the last
+-- program in the schedule plays, playback loops back to the first program
+-- in the schedule.
+updateChannelResponse_playbackMode :: Lens.Lens' UpdateChannelResponse (Prelude.Maybe Prelude.Text)
+updateChannelResponse_playbackMode = Lens.lens (\UpdateChannelResponse' {playbackMode} -> playbackMode) (\s@UpdateChannelResponse' {} a -> s {playbackMode = a} :: UpdateChannelResponse)
+
+-- | The tags to assign to the channel. Tags are key-value pairs that you can
+-- associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+updateChannelResponse_tags :: Lens.Lens' UpdateChannelResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateChannelResponse_tags = Lens.lens (\UpdateChannelResponse' {tags} -> tags) (\s@UpdateChannelResponse' {} a -> s {tags = a} :: UpdateChannelResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tier associated with this Channel.
+updateChannelResponse_tier :: Lens.Lens' UpdateChannelResponse (Prelude.Maybe Prelude.Text)
+updateChannelResponse_tier = Lens.lens (\UpdateChannelResponse' {tier} -> tier) (\s@UpdateChannelResponse' {} a -> s {tier = a} :: UpdateChannelResponse)
+
+-- | The response's http status code.
+updateChannelResponse_httpStatus :: Lens.Lens' UpdateChannelResponse Prelude.Int
+updateChannelResponse_httpStatus = Lens.lens (\UpdateChannelResponse' {httpStatus} -> httpStatus) (\s@UpdateChannelResponse' {} a -> s {httpStatus = a} :: UpdateChannelResponse)
+
+instance Prelude.NFData UpdateChannelResponse where
+  rnf UpdateChannelResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf channelName
+      `Prelude.seq` Prelude.rnf channelState
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf fillerSlate
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf playbackMode
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf tier
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/UpdateLiveSource.hs b/gen/Amazonka/MediaTailor/UpdateLiveSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/UpdateLiveSource.hs
@@ -0,0 +1,296 @@
+{-# 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.MediaTailor.UpdateLiveSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a live source\'s configuration.
+module Amazonka.MediaTailor.UpdateLiveSource
+  ( -- * Creating a Request
+    UpdateLiveSource (..),
+    newUpdateLiveSource,
+
+    -- * Request Lenses
+    updateLiveSource_httpPackageConfigurations,
+    updateLiveSource_liveSourceName,
+    updateLiveSource_sourceLocationName,
+
+    -- * Destructuring the Response
+    UpdateLiveSourceResponse (..),
+    newUpdateLiveSourceResponse,
+
+    -- * Response Lenses
+    updateLiveSourceResponse_arn,
+    updateLiveSourceResponse_creationTime,
+    updateLiveSourceResponse_httpPackageConfigurations,
+    updateLiveSourceResponse_lastModifiedTime,
+    updateLiveSourceResponse_liveSourceName,
+    updateLiveSourceResponse_sourceLocationName,
+    updateLiveSourceResponse_tags,
+    updateLiveSourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateLiveSource' smart constructor.
+data UpdateLiveSource = UpdateLiveSource'
+  { -- | A list of HTTP package configurations for the live source on this
+    -- account.
+    httpPackageConfigurations :: [HttpPackageConfiguration],
+    -- | The name of the live source.
+    liveSourceName :: Prelude.Text,
+    -- | The name of the source location associated with this Live Source.
+    sourceLocationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLiveSource' 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:
+--
+-- 'httpPackageConfigurations', 'updateLiveSource_httpPackageConfigurations' - A list of HTTP package configurations for the live source on this
+-- account.
+--
+-- 'liveSourceName', 'updateLiveSource_liveSourceName' - The name of the live source.
+--
+-- 'sourceLocationName', 'updateLiveSource_sourceLocationName' - The name of the source location associated with this Live Source.
+newUpdateLiveSource ::
+  -- | 'liveSourceName'
+  Prelude.Text ->
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  UpdateLiveSource
+newUpdateLiveSource
+  pLiveSourceName_
+  pSourceLocationName_ =
+    UpdateLiveSource'
+      { httpPackageConfigurations =
+          Prelude.mempty,
+        liveSourceName = pLiveSourceName_,
+        sourceLocationName = pSourceLocationName_
+      }
+
+-- | A list of HTTP package configurations for the live source on this
+-- account.
+updateLiveSource_httpPackageConfigurations :: Lens.Lens' UpdateLiveSource [HttpPackageConfiguration]
+updateLiveSource_httpPackageConfigurations = Lens.lens (\UpdateLiveSource' {httpPackageConfigurations} -> httpPackageConfigurations) (\s@UpdateLiveSource' {} a -> s {httpPackageConfigurations = a} :: UpdateLiveSource) Prelude.. Lens.coerced
+
+-- | The name of the live source.
+updateLiveSource_liveSourceName :: Lens.Lens' UpdateLiveSource Prelude.Text
+updateLiveSource_liveSourceName = Lens.lens (\UpdateLiveSource' {liveSourceName} -> liveSourceName) (\s@UpdateLiveSource' {} a -> s {liveSourceName = a} :: UpdateLiveSource)
+
+-- | The name of the source location associated with this Live Source.
+updateLiveSource_sourceLocationName :: Lens.Lens' UpdateLiveSource Prelude.Text
+updateLiveSource_sourceLocationName = Lens.lens (\UpdateLiveSource' {sourceLocationName} -> sourceLocationName) (\s@UpdateLiveSource' {} a -> s {sourceLocationName = a} :: UpdateLiveSource)
+
+instance Core.AWSRequest UpdateLiveSource where
+  type
+    AWSResponse UpdateLiveSource =
+      UpdateLiveSourceResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateLiveSourceResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> ( x
+                            Data..?> "HttpPackageConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "LastModifiedTime")
+            Prelude.<*> (x Data..?> "LiveSourceName")
+            Prelude.<*> (x Data..?> "SourceLocationName")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateLiveSource where
+  hashWithSalt _salt UpdateLiveSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` httpPackageConfigurations
+      `Prelude.hashWithSalt` liveSourceName
+      `Prelude.hashWithSalt` sourceLocationName
+
+instance Prelude.NFData UpdateLiveSource where
+  rnf UpdateLiveSource' {..} =
+    Prelude.rnf httpPackageConfigurations
+      `Prelude.seq` Prelude.rnf liveSourceName
+      `Prelude.seq` Prelude.rnf sourceLocationName
+
+instance Data.ToHeaders UpdateLiveSource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateLiveSource where
+  toJSON UpdateLiveSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "HttpPackageConfigurations"
+                  Data..= httpPackageConfigurations
+              )
+          ]
+      )
+
+instance Data.ToPath UpdateLiveSource where
+  toPath UpdateLiveSource' {..} =
+    Prelude.mconcat
+      [ "/sourceLocation/",
+        Data.toBS sourceLocationName,
+        "/liveSource/",
+        Data.toBS liveSourceName
+      ]
+
+instance Data.ToQuery UpdateLiveSource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateLiveSourceResponse' smart constructor.
+data UpdateLiveSourceResponse = UpdateLiveSourceResponse'
+  { -- | The Amazon Resource Name (ARN) associated with this live source.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp that indicates when the live source was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | A list of HTTP package configurations for the live source on this
+    -- account.
+    httpPackageConfigurations :: Prelude.Maybe [HttpPackageConfiguration],
+    -- | The timestamp that indicates when the live source was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the live source.
+    liveSourceName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the source location associated with the live source.
+    sourceLocationName :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the live source. Tags are key-value pairs that you
+    -- can associate with Amazon resources to help with organization, access
+    -- control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLiveSourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'updateLiveSourceResponse_arn' - The Amazon Resource Name (ARN) associated with this live source.
+--
+-- 'creationTime', 'updateLiveSourceResponse_creationTime' - The timestamp that indicates when the live source was created.
+--
+-- 'httpPackageConfigurations', 'updateLiveSourceResponse_httpPackageConfigurations' - A list of HTTP package configurations for the live source on this
+-- account.
+--
+-- 'lastModifiedTime', 'updateLiveSourceResponse_lastModifiedTime' - The timestamp that indicates when the live source was last modified.
+--
+-- 'liveSourceName', 'updateLiveSourceResponse_liveSourceName' - The name of the live source.
+--
+-- 'sourceLocationName', 'updateLiveSourceResponse_sourceLocationName' - The name of the source location associated with the live source.
+--
+-- 'tags', 'updateLiveSourceResponse_tags' - The tags to assign to the live source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'httpStatus', 'updateLiveSourceResponse_httpStatus' - The response's http status code.
+newUpdateLiveSourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateLiveSourceResponse
+newUpdateLiveSourceResponse pHttpStatus_ =
+  UpdateLiveSourceResponse'
+    { arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      httpPackageConfigurations = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      liveSourceName = Prelude.Nothing,
+      sourceLocationName = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) associated with this live source.
+updateLiveSourceResponse_arn :: Lens.Lens' UpdateLiveSourceResponse (Prelude.Maybe Prelude.Text)
+updateLiveSourceResponse_arn = Lens.lens (\UpdateLiveSourceResponse' {arn} -> arn) (\s@UpdateLiveSourceResponse' {} a -> s {arn = a} :: UpdateLiveSourceResponse)
+
+-- | The timestamp that indicates when the live source was created.
+updateLiveSourceResponse_creationTime :: Lens.Lens' UpdateLiveSourceResponse (Prelude.Maybe Prelude.UTCTime)
+updateLiveSourceResponse_creationTime = Lens.lens (\UpdateLiveSourceResponse' {creationTime} -> creationTime) (\s@UpdateLiveSourceResponse' {} a -> s {creationTime = a} :: UpdateLiveSourceResponse) Prelude.. Lens.mapping Data._Time
+
+-- | A list of HTTP package configurations for the live source on this
+-- account.
+updateLiveSourceResponse_httpPackageConfigurations :: Lens.Lens' UpdateLiveSourceResponse (Prelude.Maybe [HttpPackageConfiguration])
+updateLiveSourceResponse_httpPackageConfigurations = Lens.lens (\UpdateLiveSourceResponse' {httpPackageConfigurations} -> httpPackageConfigurations) (\s@UpdateLiveSourceResponse' {} a -> s {httpPackageConfigurations = a} :: UpdateLiveSourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The timestamp that indicates when the live source was last modified.
+updateLiveSourceResponse_lastModifiedTime :: Lens.Lens' UpdateLiveSourceResponse (Prelude.Maybe Prelude.UTCTime)
+updateLiveSourceResponse_lastModifiedTime = Lens.lens (\UpdateLiveSourceResponse' {lastModifiedTime} -> lastModifiedTime) (\s@UpdateLiveSourceResponse' {} a -> s {lastModifiedTime = a} :: UpdateLiveSourceResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the live source.
+updateLiveSourceResponse_liveSourceName :: Lens.Lens' UpdateLiveSourceResponse (Prelude.Maybe Prelude.Text)
+updateLiveSourceResponse_liveSourceName = Lens.lens (\UpdateLiveSourceResponse' {liveSourceName} -> liveSourceName) (\s@UpdateLiveSourceResponse' {} a -> s {liveSourceName = a} :: UpdateLiveSourceResponse)
+
+-- | The name of the source location associated with the live source.
+updateLiveSourceResponse_sourceLocationName :: Lens.Lens' UpdateLiveSourceResponse (Prelude.Maybe Prelude.Text)
+updateLiveSourceResponse_sourceLocationName = Lens.lens (\UpdateLiveSourceResponse' {sourceLocationName} -> sourceLocationName) (\s@UpdateLiveSourceResponse' {} a -> s {sourceLocationName = a} :: UpdateLiveSourceResponse)
+
+-- | The tags to assign to the live source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+updateLiveSourceResponse_tags :: Lens.Lens' UpdateLiveSourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateLiveSourceResponse_tags = Lens.lens (\UpdateLiveSourceResponse' {tags} -> tags) (\s@UpdateLiveSourceResponse' {} a -> s {tags = a} :: UpdateLiveSourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+updateLiveSourceResponse_httpStatus :: Lens.Lens' UpdateLiveSourceResponse Prelude.Int
+updateLiveSourceResponse_httpStatus = Lens.lens (\UpdateLiveSourceResponse' {httpStatus} -> httpStatus) (\s@UpdateLiveSourceResponse' {} a -> s {httpStatus = a} :: UpdateLiveSourceResponse)
+
+instance Prelude.NFData UpdateLiveSourceResponse where
+  rnf UpdateLiveSourceResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf httpPackageConfigurations
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf liveSourceName
+      `Prelude.seq` Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/UpdateSourceLocation.hs b/gen/Amazonka/MediaTailor/UpdateSourceLocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/UpdateSourceLocation.hs
@@ -0,0 +1,360 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaTailor.UpdateSourceLocation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a source location. A source location is a container for sources.
+-- For more information about source locations, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-source-locations.html Working with source locations>
+-- in the /MediaTailor User Guide/.
+module Amazonka.MediaTailor.UpdateSourceLocation
+  ( -- * Creating a Request
+    UpdateSourceLocation (..),
+    newUpdateSourceLocation,
+
+    -- * Request Lenses
+    updateSourceLocation_accessConfiguration,
+    updateSourceLocation_defaultSegmentDeliveryConfiguration,
+    updateSourceLocation_segmentDeliveryConfigurations,
+    updateSourceLocation_httpConfiguration,
+    updateSourceLocation_sourceLocationName,
+
+    -- * Destructuring the Response
+    UpdateSourceLocationResponse (..),
+    newUpdateSourceLocationResponse,
+
+    -- * Response Lenses
+    updateSourceLocationResponse_accessConfiguration,
+    updateSourceLocationResponse_arn,
+    updateSourceLocationResponse_creationTime,
+    updateSourceLocationResponse_defaultSegmentDeliveryConfiguration,
+    updateSourceLocationResponse_httpConfiguration,
+    updateSourceLocationResponse_lastModifiedTime,
+    updateSourceLocationResponse_segmentDeliveryConfigurations,
+    updateSourceLocationResponse_sourceLocationName,
+    updateSourceLocationResponse_tags,
+    updateSourceLocationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateSourceLocation' smart constructor.
+data UpdateSourceLocation = UpdateSourceLocation'
+  { -- | Access configuration parameters. Configures the type of authentication
+    -- used to access content from your source location.
+    accessConfiguration :: Prelude.Maybe AccessConfiguration,
+    -- | The optional configuration for the host server that serves segments.
+    defaultSegmentDeliveryConfiguration :: Prelude.Maybe DefaultSegmentDeliveryConfiguration,
+    -- | A list of the segment delivery configurations associated with this
+    -- resource.
+    segmentDeliveryConfigurations :: Prelude.Maybe [SegmentDeliveryConfiguration],
+    -- | The HTTP configuration for the source location.
+    httpConfiguration :: HttpConfiguration,
+    -- | The name of the source location.
+    sourceLocationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSourceLocation' 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:
+--
+-- 'accessConfiguration', 'updateSourceLocation_accessConfiguration' - Access configuration parameters. Configures the type of authentication
+-- used to access content from your source location.
+--
+-- 'defaultSegmentDeliveryConfiguration', 'updateSourceLocation_defaultSegmentDeliveryConfiguration' - The optional configuration for the host server that serves segments.
+--
+-- 'segmentDeliveryConfigurations', 'updateSourceLocation_segmentDeliveryConfigurations' - A list of the segment delivery configurations associated with this
+-- resource.
+--
+-- 'httpConfiguration', 'updateSourceLocation_httpConfiguration' - The HTTP configuration for the source location.
+--
+-- 'sourceLocationName', 'updateSourceLocation_sourceLocationName' - The name of the source location.
+newUpdateSourceLocation ::
+  -- | 'httpConfiguration'
+  HttpConfiguration ->
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  UpdateSourceLocation
+newUpdateSourceLocation
+  pHttpConfiguration_
+  pSourceLocationName_ =
+    UpdateSourceLocation'
+      { accessConfiguration =
+          Prelude.Nothing,
+        defaultSegmentDeliveryConfiguration =
+          Prelude.Nothing,
+        segmentDeliveryConfigurations = Prelude.Nothing,
+        httpConfiguration = pHttpConfiguration_,
+        sourceLocationName = pSourceLocationName_
+      }
+
+-- | Access configuration parameters. Configures the type of authentication
+-- used to access content from your source location.
+updateSourceLocation_accessConfiguration :: Lens.Lens' UpdateSourceLocation (Prelude.Maybe AccessConfiguration)
+updateSourceLocation_accessConfiguration = Lens.lens (\UpdateSourceLocation' {accessConfiguration} -> accessConfiguration) (\s@UpdateSourceLocation' {} a -> s {accessConfiguration = a} :: UpdateSourceLocation)
+
+-- | The optional configuration for the host server that serves segments.
+updateSourceLocation_defaultSegmentDeliveryConfiguration :: Lens.Lens' UpdateSourceLocation (Prelude.Maybe DefaultSegmentDeliveryConfiguration)
+updateSourceLocation_defaultSegmentDeliveryConfiguration = Lens.lens (\UpdateSourceLocation' {defaultSegmentDeliveryConfiguration} -> defaultSegmentDeliveryConfiguration) (\s@UpdateSourceLocation' {} a -> s {defaultSegmentDeliveryConfiguration = a} :: UpdateSourceLocation)
+
+-- | A list of the segment delivery configurations associated with this
+-- resource.
+updateSourceLocation_segmentDeliveryConfigurations :: Lens.Lens' UpdateSourceLocation (Prelude.Maybe [SegmentDeliveryConfiguration])
+updateSourceLocation_segmentDeliveryConfigurations = Lens.lens (\UpdateSourceLocation' {segmentDeliveryConfigurations} -> segmentDeliveryConfigurations) (\s@UpdateSourceLocation' {} a -> s {segmentDeliveryConfigurations = a} :: UpdateSourceLocation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The HTTP configuration for the source location.
+updateSourceLocation_httpConfiguration :: Lens.Lens' UpdateSourceLocation HttpConfiguration
+updateSourceLocation_httpConfiguration = Lens.lens (\UpdateSourceLocation' {httpConfiguration} -> httpConfiguration) (\s@UpdateSourceLocation' {} a -> s {httpConfiguration = a} :: UpdateSourceLocation)
+
+-- | The name of the source location.
+updateSourceLocation_sourceLocationName :: Lens.Lens' UpdateSourceLocation Prelude.Text
+updateSourceLocation_sourceLocationName = Lens.lens (\UpdateSourceLocation' {sourceLocationName} -> sourceLocationName) (\s@UpdateSourceLocation' {} a -> s {sourceLocationName = a} :: UpdateSourceLocation)
+
+instance Core.AWSRequest UpdateSourceLocation where
+  type
+    AWSResponse UpdateSourceLocation =
+      UpdateSourceLocationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateSourceLocationResponse'
+            Prelude.<$> (x Data..?> "AccessConfiguration")
+            Prelude.<*> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "DefaultSegmentDeliveryConfiguration")
+            Prelude.<*> (x Data..?> "HttpConfiguration")
+            Prelude.<*> (x Data..?> "LastModifiedTime")
+            Prelude.<*> ( x
+                            Data..?> "SegmentDeliveryConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "SourceLocationName")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateSourceLocation where
+  hashWithSalt _salt UpdateSourceLocation' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessConfiguration
+      `Prelude.hashWithSalt` defaultSegmentDeliveryConfiguration
+      `Prelude.hashWithSalt` segmentDeliveryConfigurations
+      `Prelude.hashWithSalt` httpConfiguration
+      `Prelude.hashWithSalt` sourceLocationName
+
+instance Prelude.NFData UpdateSourceLocation where
+  rnf UpdateSourceLocation' {..} =
+    Prelude.rnf accessConfiguration
+      `Prelude.seq` Prelude.rnf defaultSegmentDeliveryConfiguration
+      `Prelude.seq` Prelude.rnf segmentDeliveryConfigurations
+      `Prelude.seq` Prelude.rnf httpConfiguration
+      `Prelude.seq` Prelude.rnf sourceLocationName
+
+instance Data.ToHeaders UpdateSourceLocation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateSourceLocation where
+  toJSON UpdateSourceLocation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccessConfiguration" Data..=)
+              Prelude.<$> accessConfiguration,
+            ("DefaultSegmentDeliveryConfiguration" Data..=)
+              Prelude.<$> defaultSegmentDeliveryConfiguration,
+            ("SegmentDeliveryConfigurations" Data..=)
+              Prelude.<$> segmentDeliveryConfigurations,
+            Prelude.Just
+              ("HttpConfiguration" Data..= httpConfiguration)
+          ]
+      )
+
+instance Data.ToPath UpdateSourceLocation where
+  toPath UpdateSourceLocation' {..} =
+    Prelude.mconcat
+      ["/sourceLocation/", Data.toBS sourceLocationName]
+
+instance Data.ToQuery UpdateSourceLocation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateSourceLocationResponse' smart constructor.
+data UpdateSourceLocationResponse = UpdateSourceLocationResponse'
+  { -- | Access configuration parameters. Configures the type of authentication
+    -- used to access content from your source location.
+    accessConfiguration :: Prelude.Maybe AccessConfiguration,
+    -- | The Amazon Resource Name (ARN) associated with the source location.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp that indicates when the source location was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The optional configuration for the host server that serves segments.
+    defaultSegmentDeliveryConfiguration :: Prelude.Maybe DefaultSegmentDeliveryConfiguration,
+    -- | The HTTP configuration for the source location.
+    httpConfiguration :: Prelude.Maybe HttpConfiguration,
+    -- | The timestamp that indicates when the source location was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The segment delivery configurations for the source location. For
+    -- information about MediaTailor configurations, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/configurations.html Working with configurations in AWS Elemental MediaTailor>.
+    segmentDeliveryConfigurations :: Prelude.Maybe [SegmentDeliveryConfiguration],
+    -- | The name of the source location.
+    sourceLocationName :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the source location. Tags are key-value pairs that
+    -- you can associate with Amazon resources to help with organization,
+    -- access control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSourceLocationResponse' 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:
+--
+-- 'accessConfiguration', 'updateSourceLocationResponse_accessConfiguration' - Access configuration parameters. Configures the type of authentication
+-- used to access content from your source location.
+--
+-- 'arn', 'updateSourceLocationResponse_arn' - The Amazon Resource Name (ARN) associated with the source location.
+--
+-- 'creationTime', 'updateSourceLocationResponse_creationTime' - The timestamp that indicates when the source location was created.
+--
+-- 'defaultSegmentDeliveryConfiguration', 'updateSourceLocationResponse_defaultSegmentDeliveryConfiguration' - The optional configuration for the host server that serves segments.
+--
+-- 'httpConfiguration', 'updateSourceLocationResponse_httpConfiguration' - The HTTP configuration for the source location.
+--
+-- 'lastModifiedTime', 'updateSourceLocationResponse_lastModifiedTime' - The timestamp that indicates when the source location was last modified.
+--
+-- 'segmentDeliveryConfigurations', 'updateSourceLocationResponse_segmentDeliveryConfigurations' - The segment delivery configurations for the source location. For
+-- information about MediaTailor configurations, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/configurations.html Working with configurations in AWS Elemental MediaTailor>.
+--
+-- 'sourceLocationName', 'updateSourceLocationResponse_sourceLocationName' - The name of the source location.
+--
+-- 'tags', 'updateSourceLocationResponse_tags' - The tags to assign to the source location. Tags are key-value pairs that
+-- you can associate with Amazon resources to help with organization,
+-- access control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'httpStatus', 'updateSourceLocationResponse_httpStatus' - The response's http status code.
+newUpdateSourceLocationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateSourceLocationResponse
+newUpdateSourceLocationResponse pHttpStatus_ =
+  UpdateSourceLocationResponse'
+    { accessConfiguration =
+        Prelude.Nothing,
+      arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      defaultSegmentDeliveryConfiguration =
+        Prelude.Nothing,
+      httpConfiguration = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      segmentDeliveryConfigurations =
+        Prelude.Nothing,
+      sourceLocationName = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Access configuration parameters. Configures the type of authentication
+-- used to access content from your source location.
+updateSourceLocationResponse_accessConfiguration :: Lens.Lens' UpdateSourceLocationResponse (Prelude.Maybe AccessConfiguration)
+updateSourceLocationResponse_accessConfiguration = Lens.lens (\UpdateSourceLocationResponse' {accessConfiguration} -> accessConfiguration) (\s@UpdateSourceLocationResponse' {} a -> s {accessConfiguration = a} :: UpdateSourceLocationResponse)
+
+-- | The Amazon Resource Name (ARN) associated with the source location.
+updateSourceLocationResponse_arn :: Lens.Lens' UpdateSourceLocationResponse (Prelude.Maybe Prelude.Text)
+updateSourceLocationResponse_arn = Lens.lens (\UpdateSourceLocationResponse' {arn} -> arn) (\s@UpdateSourceLocationResponse' {} a -> s {arn = a} :: UpdateSourceLocationResponse)
+
+-- | The timestamp that indicates when the source location was created.
+updateSourceLocationResponse_creationTime :: Lens.Lens' UpdateSourceLocationResponse (Prelude.Maybe Prelude.UTCTime)
+updateSourceLocationResponse_creationTime = Lens.lens (\UpdateSourceLocationResponse' {creationTime} -> creationTime) (\s@UpdateSourceLocationResponse' {} a -> s {creationTime = a} :: UpdateSourceLocationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The optional configuration for the host server that serves segments.
+updateSourceLocationResponse_defaultSegmentDeliveryConfiguration :: Lens.Lens' UpdateSourceLocationResponse (Prelude.Maybe DefaultSegmentDeliveryConfiguration)
+updateSourceLocationResponse_defaultSegmentDeliveryConfiguration = Lens.lens (\UpdateSourceLocationResponse' {defaultSegmentDeliveryConfiguration} -> defaultSegmentDeliveryConfiguration) (\s@UpdateSourceLocationResponse' {} a -> s {defaultSegmentDeliveryConfiguration = a} :: UpdateSourceLocationResponse)
+
+-- | The HTTP configuration for the source location.
+updateSourceLocationResponse_httpConfiguration :: Lens.Lens' UpdateSourceLocationResponse (Prelude.Maybe HttpConfiguration)
+updateSourceLocationResponse_httpConfiguration = Lens.lens (\UpdateSourceLocationResponse' {httpConfiguration} -> httpConfiguration) (\s@UpdateSourceLocationResponse' {} a -> s {httpConfiguration = a} :: UpdateSourceLocationResponse)
+
+-- | The timestamp that indicates when the source location was last modified.
+updateSourceLocationResponse_lastModifiedTime :: Lens.Lens' UpdateSourceLocationResponse (Prelude.Maybe Prelude.UTCTime)
+updateSourceLocationResponse_lastModifiedTime = Lens.lens (\UpdateSourceLocationResponse' {lastModifiedTime} -> lastModifiedTime) (\s@UpdateSourceLocationResponse' {} a -> s {lastModifiedTime = a} :: UpdateSourceLocationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The segment delivery configurations for the source location. For
+-- information about MediaTailor configurations, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/configurations.html Working with configurations in AWS Elemental MediaTailor>.
+updateSourceLocationResponse_segmentDeliveryConfigurations :: Lens.Lens' UpdateSourceLocationResponse (Prelude.Maybe [SegmentDeliveryConfiguration])
+updateSourceLocationResponse_segmentDeliveryConfigurations = Lens.lens (\UpdateSourceLocationResponse' {segmentDeliveryConfigurations} -> segmentDeliveryConfigurations) (\s@UpdateSourceLocationResponse' {} a -> s {segmentDeliveryConfigurations = a} :: UpdateSourceLocationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the source location.
+updateSourceLocationResponse_sourceLocationName :: Lens.Lens' UpdateSourceLocationResponse (Prelude.Maybe Prelude.Text)
+updateSourceLocationResponse_sourceLocationName = Lens.lens (\UpdateSourceLocationResponse' {sourceLocationName} -> sourceLocationName) (\s@UpdateSourceLocationResponse' {} a -> s {sourceLocationName = a} :: UpdateSourceLocationResponse)
+
+-- | The tags to assign to the source location. Tags are key-value pairs that
+-- you can associate with Amazon resources to help with organization,
+-- access control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+updateSourceLocationResponse_tags :: Lens.Lens' UpdateSourceLocationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateSourceLocationResponse_tags = Lens.lens (\UpdateSourceLocationResponse' {tags} -> tags) (\s@UpdateSourceLocationResponse' {} a -> s {tags = a} :: UpdateSourceLocationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+updateSourceLocationResponse_httpStatus :: Lens.Lens' UpdateSourceLocationResponse Prelude.Int
+updateSourceLocationResponse_httpStatus = Lens.lens (\UpdateSourceLocationResponse' {httpStatus} -> httpStatus) (\s@UpdateSourceLocationResponse' {} a -> s {httpStatus = a} :: UpdateSourceLocationResponse)
+
+instance Prelude.NFData UpdateSourceLocationResponse where
+  rnf UpdateSourceLocationResponse' {..} =
+    Prelude.rnf accessConfiguration
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf defaultSegmentDeliveryConfiguration
+      `Prelude.seq` Prelude.rnf httpConfiguration
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf segmentDeliveryConfigurations
+      `Prelude.seq` Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/UpdateVodSource.hs b/gen/Amazonka/MediaTailor/UpdateVodSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/UpdateVodSource.hs
@@ -0,0 +1,296 @@
+{-# 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.MediaTailor.UpdateVodSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a VOD source\'s configuration.
+module Amazonka.MediaTailor.UpdateVodSource
+  ( -- * Creating a Request
+    UpdateVodSource (..),
+    newUpdateVodSource,
+
+    -- * Request Lenses
+    updateVodSource_httpPackageConfigurations,
+    updateVodSource_sourceLocationName,
+    updateVodSource_vodSourceName,
+
+    -- * Destructuring the Response
+    UpdateVodSourceResponse (..),
+    newUpdateVodSourceResponse,
+
+    -- * Response Lenses
+    updateVodSourceResponse_arn,
+    updateVodSourceResponse_creationTime,
+    updateVodSourceResponse_httpPackageConfigurations,
+    updateVodSourceResponse_lastModifiedTime,
+    updateVodSourceResponse_sourceLocationName,
+    updateVodSourceResponse_tags,
+    updateVodSourceResponse_vodSourceName,
+    updateVodSourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateVodSource' smart constructor.
+data UpdateVodSource = UpdateVodSource'
+  { -- | A list of HTTP package configurations for the VOD source on this
+    -- account.
+    httpPackageConfigurations :: [HttpPackageConfiguration],
+    -- | The name of the source location associated with this VOD Source.
+    sourceLocationName :: Prelude.Text,
+    -- | The name of the VOD source.
+    vodSourceName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateVodSource' 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:
+--
+-- 'httpPackageConfigurations', 'updateVodSource_httpPackageConfigurations' - A list of HTTP package configurations for the VOD source on this
+-- account.
+--
+-- 'sourceLocationName', 'updateVodSource_sourceLocationName' - The name of the source location associated with this VOD Source.
+--
+-- 'vodSourceName', 'updateVodSource_vodSourceName' - The name of the VOD source.
+newUpdateVodSource ::
+  -- | 'sourceLocationName'
+  Prelude.Text ->
+  -- | 'vodSourceName'
+  Prelude.Text ->
+  UpdateVodSource
+newUpdateVodSource
+  pSourceLocationName_
+  pVodSourceName_ =
+    UpdateVodSource'
+      { httpPackageConfigurations =
+          Prelude.mempty,
+        sourceLocationName = pSourceLocationName_,
+        vodSourceName = pVodSourceName_
+      }
+
+-- | A list of HTTP package configurations for the VOD source on this
+-- account.
+updateVodSource_httpPackageConfigurations :: Lens.Lens' UpdateVodSource [HttpPackageConfiguration]
+updateVodSource_httpPackageConfigurations = Lens.lens (\UpdateVodSource' {httpPackageConfigurations} -> httpPackageConfigurations) (\s@UpdateVodSource' {} a -> s {httpPackageConfigurations = a} :: UpdateVodSource) Prelude.. Lens.coerced
+
+-- | The name of the source location associated with this VOD Source.
+updateVodSource_sourceLocationName :: Lens.Lens' UpdateVodSource Prelude.Text
+updateVodSource_sourceLocationName = Lens.lens (\UpdateVodSource' {sourceLocationName} -> sourceLocationName) (\s@UpdateVodSource' {} a -> s {sourceLocationName = a} :: UpdateVodSource)
+
+-- | The name of the VOD source.
+updateVodSource_vodSourceName :: Lens.Lens' UpdateVodSource Prelude.Text
+updateVodSource_vodSourceName = Lens.lens (\UpdateVodSource' {vodSourceName} -> vodSourceName) (\s@UpdateVodSource' {} a -> s {vodSourceName = a} :: UpdateVodSource)
+
+instance Core.AWSRequest UpdateVodSource where
+  type
+    AWSResponse UpdateVodSource =
+      UpdateVodSourceResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateVodSourceResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> ( x
+                            Data..?> "HttpPackageConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "LastModifiedTime")
+            Prelude.<*> (x Data..?> "SourceLocationName")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "VodSourceName")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateVodSource where
+  hashWithSalt _salt UpdateVodSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` httpPackageConfigurations
+      `Prelude.hashWithSalt` sourceLocationName
+      `Prelude.hashWithSalt` vodSourceName
+
+instance Prelude.NFData UpdateVodSource where
+  rnf UpdateVodSource' {..} =
+    Prelude.rnf httpPackageConfigurations
+      `Prelude.seq` Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf vodSourceName
+
+instance Data.ToHeaders UpdateVodSource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateVodSource where
+  toJSON UpdateVodSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "HttpPackageConfigurations"
+                  Data..= httpPackageConfigurations
+              )
+          ]
+      )
+
+instance Data.ToPath UpdateVodSource where
+  toPath UpdateVodSource' {..} =
+    Prelude.mconcat
+      [ "/sourceLocation/",
+        Data.toBS sourceLocationName,
+        "/vodSource/",
+        Data.toBS vodSourceName
+      ]
+
+instance Data.ToQuery UpdateVodSource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateVodSourceResponse' smart constructor.
+data UpdateVodSourceResponse = UpdateVodSourceResponse'
+  { -- | The Amazon Resource Name (ARN) associated with the VOD source.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp that indicates when the VOD source was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | A list of HTTP package configurations for the VOD source on this
+    -- account.
+    httpPackageConfigurations :: Prelude.Maybe [HttpPackageConfiguration],
+    -- | The timestamp that indicates when the VOD source was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the source location associated with the VOD source.
+    sourceLocationName :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the VOD source. Tags are key-value pairs that you
+    -- can associate with Amazon resources to help with organization, access
+    -- control, and cost tracking. For more information, see
+    -- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the VOD source.
+    vodSourceName :: 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 'UpdateVodSourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'updateVodSourceResponse_arn' - The Amazon Resource Name (ARN) associated with the VOD source.
+--
+-- 'creationTime', 'updateVodSourceResponse_creationTime' - The timestamp that indicates when the VOD source was created.
+--
+-- 'httpPackageConfigurations', 'updateVodSourceResponse_httpPackageConfigurations' - A list of HTTP package configurations for the VOD source on this
+-- account.
+--
+-- 'lastModifiedTime', 'updateVodSourceResponse_lastModifiedTime' - The timestamp that indicates when the VOD source was last modified.
+--
+-- 'sourceLocationName', 'updateVodSourceResponse_sourceLocationName' - The name of the source location associated with the VOD source.
+--
+-- 'tags', 'updateVodSourceResponse_tags' - The tags to assign to the VOD source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+--
+-- 'vodSourceName', 'updateVodSourceResponse_vodSourceName' - The name of the VOD source.
+--
+-- 'httpStatus', 'updateVodSourceResponse_httpStatus' - The response's http status code.
+newUpdateVodSourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateVodSourceResponse
+newUpdateVodSourceResponse pHttpStatus_ =
+  UpdateVodSourceResponse'
+    { arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      httpPackageConfigurations = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      sourceLocationName = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vodSourceName = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) associated with the VOD source.
+updateVodSourceResponse_arn :: Lens.Lens' UpdateVodSourceResponse (Prelude.Maybe Prelude.Text)
+updateVodSourceResponse_arn = Lens.lens (\UpdateVodSourceResponse' {arn} -> arn) (\s@UpdateVodSourceResponse' {} a -> s {arn = a} :: UpdateVodSourceResponse)
+
+-- | The timestamp that indicates when the VOD source was created.
+updateVodSourceResponse_creationTime :: Lens.Lens' UpdateVodSourceResponse (Prelude.Maybe Prelude.UTCTime)
+updateVodSourceResponse_creationTime = Lens.lens (\UpdateVodSourceResponse' {creationTime} -> creationTime) (\s@UpdateVodSourceResponse' {} a -> s {creationTime = a} :: UpdateVodSourceResponse) Prelude.. Lens.mapping Data._Time
+
+-- | A list of HTTP package configurations for the VOD source on this
+-- account.
+updateVodSourceResponse_httpPackageConfigurations :: Lens.Lens' UpdateVodSourceResponse (Prelude.Maybe [HttpPackageConfiguration])
+updateVodSourceResponse_httpPackageConfigurations = Lens.lens (\UpdateVodSourceResponse' {httpPackageConfigurations} -> httpPackageConfigurations) (\s@UpdateVodSourceResponse' {} a -> s {httpPackageConfigurations = a} :: UpdateVodSourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The timestamp that indicates when the VOD source was last modified.
+updateVodSourceResponse_lastModifiedTime :: Lens.Lens' UpdateVodSourceResponse (Prelude.Maybe Prelude.UTCTime)
+updateVodSourceResponse_lastModifiedTime = Lens.lens (\UpdateVodSourceResponse' {lastModifiedTime} -> lastModifiedTime) (\s@UpdateVodSourceResponse' {} a -> s {lastModifiedTime = a} :: UpdateVodSourceResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the source location associated with the VOD source.
+updateVodSourceResponse_sourceLocationName :: Lens.Lens' UpdateVodSourceResponse (Prelude.Maybe Prelude.Text)
+updateVodSourceResponse_sourceLocationName = Lens.lens (\UpdateVodSourceResponse' {sourceLocationName} -> sourceLocationName) (\s@UpdateVodSourceResponse' {} a -> s {sourceLocationName = a} :: UpdateVodSourceResponse)
+
+-- | The tags to assign to the VOD source. Tags are key-value pairs that you
+-- can associate with Amazon resources to help with organization, access
+-- control, and cost tracking. For more information, see
+-- <https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html Tagging AWS Elemental MediaTailor Resources>.
+updateVodSourceResponse_tags :: Lens.Lens' UpdateVodSourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateVodSourceResponse_tags = Lens.lens (\UpdateVodSourceResponse' {tags} -> tags) (\s@UpdateVodSourceResponse' {} a -> s {tags = a} :: UpdateVodSourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the VOD source.
+updateVodSourceResponse_vodSourceName :: Lens.Lens' UpdateVodSourceResponse (Prelude.Maybe Prelude.Text)
+updateVodSourceResponse_vodSourceName = Lens.lens (\UpdateVodSourceResponse' {vodSourceName} -> vodSourceName) (\s@UpdateVodSourceResponse' {} a -> s {vodSourceName = a} :: UpdateVodSourceResponse)
+
+-- | The response's http status code.
+updateVodSourceResponse_httpStatus :: Lens.Lens' UpdateVodSourceResponse Prelude.Int
+updateVodSourceResponse_httpStatus = Lens.lens (\UpdateVodSourceResponse' {httpStatus} -> httpStatus) (\s@UpdateVodSourceResponse' {} a -> s {httpStatus = a} :: UpdateVodSourceResponse)
+
+instance Prelude.NFData UpdateVodSourceResponse where
+  rnf UpdateVodSourceResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf httpPackageConfigurations
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf sourceLocationName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vodSourceName
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaTailor/Waiters.hs b/gen/Amazonka/MediaTailor/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaTailor/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.MediaTailor.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.MediaTailor.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaTailor.Lens
+import Amazonka.MediaTailor.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Main (main) where
+
+import Test.Amazonka.MediaTailor
+import Test.Amazonka.MediaTailor.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "MediaTailor"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/MediaTailor.hs b/test/Test/Amazonka/Gen/MediaTailor.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/MediaTailor.hs
@@ -0,0 +1,878 @@
+{-# 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.MediaTailor
+-- 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.MediaTailor where
+
+import Amazonka.MediaTailor
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.MediaTailor.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"
+--         [ requestConfigureLogsForPlaybackConfiguration $
+--             newConfigureLogsForPlaybackConfiguration
+--
+--         , requestCreateChannel $
+--             newCreateChannel
+--
+--         , requestCreateLiveSource $
+--             newCreateLiveSource
+--
+--         , requestCreatePrefetchSchedule $
+--             newCreatePrefetchSchedule
+--
+--         , requestCreateProgram $
+--             newCreateProgram
+--
+--         , requestCreateSourceLocation $
+--             newCreateSourceLocation
+--
+--         , requestCreateVodSource $
+--             newCreateVodSource
+--
+--         , requestDeleteChannel $
+--             newDeleteChannel
+--
+--         , requestDeleteChannelPolicy $
+--             newDeleteChannelPolicy
+--
+--         , requestDeleteLiveSource $
+--             newDeleteLiveSource
+--
+--         , requestDeletePlaybackConfiguration $
+--             newDeletePlaybackConfiguration
+--
+--         , requestDeletePrefetchSchedule $
+--             newDeletePrefetchSchedule
+--
+--         , requestDeleteProgram $
+--             newDeleteProgram
+--
+--         , requestDeleteSourceLocation $
+--             newDeleteSourceLocation
+--
+--         , requestDeleteVodSource $
+--             newDeleteVodSource
+--
+--         , requestDescribeChannel $
+--             newDescribeChannel
+--
+--         , requestDescribeLiveSource $
+--             newDescribeLiveSource
+--
+--         , requestDescribeProgram $
+--             newDescribeProgram
+--
+--         , requestDescribeSourceLocation $
+--             newDescribeSourceLocation
+--
+--         , requestDescribeVodSource $
+--             newDescribeVodSource
+--
+--         , requestGetChannelPolicy $
+--             newGetChannelPolicy
+--
+--         , requestGetChannelSchedule $
+--             newGetChannelSchedule
+--
+--         , requestGetPlaybackConfiguration $
+--             newGetPlaybackConfiguration
+--
+--         , requestGetPrefetchSchedule $
+--             newGetPrefetchSchedule
+--
+--         , requestListAlerts $
+--             newListAlerts
+--
+--         , requestListChannels $
+--             newListChannels
+--
+--         , requestListLiveSources $
+--             newListLiveSources
+--
+--         , requestListPlaybackConfigurations $
+--             newListPlaybackConfigurations
+--
+--         , requestListPrefetchSchedules $
+--             newListPrefetchSchedules
+--
+--         , requestListSourceLocations $
+--             newListSourceLocations
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestListVodSources $
+--             newListVodSources
+--
+--         , requestPutChannelPolicy $
+--             newPutChannelPolicy
+--
+--         , requestPutPlaybackConfiguration $
+--             newPutPlaybackConfiguration
+--
+--         , requestStartChannel $
+--             newStartChannel
+--
+--         , requestStopChannel $
+--             newStopChannel
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateChannel $
+--             newUpdateChannel
+--
+--         , requestUpdateLiveSource $
+--             newUpdateLiveSource
+--
+--         , requestUpdateSourceLocation $
+--             newUpdateSourceLocation
+--
+--         , requestUpdateVodSource $
+--             newUpdateVodSource
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseConfigureLogsForPlaybackConfiguration $
+--             newConfigureLogsForPlaybackConfigurationResponse
+--
+--         , responseCreateChannel $
+--             newCreateChannelResponse
+--
+--         , responseCreateLiveSource $
+--             newCreateLiveSourceResponse
+--
+--         , responseCreatePrefetchSchedule $
+--             newCreatePrefetchScheduleResponse
+--
+--         , responseCreateProgram $
+--             newCreateProgramResponse
+--
+--         , responseCreateSourceLocation $
+--             newCreateSourceLocationResponse
+--
+--         , responseCreateVodSource $
+--             newCreateVodSourceResponse
+--
+--         , responseDeleteChannel $
+--             newDeleteChannelResponse
+--
+--         , responseDeleteChannelPolicy $
+--             newDeleteChannelPolicyResponse
+--
+--         , responseDeleteLiveSource $
+--             newDeleteLiveSourceResponse
+--
+--         , responseDeletePlaybackConfiguration $
+--             newDeletePlaybackConfigurationResponse
+--
+--         , responseDeletePrefetchSchedule $
+--             newDeletePrefetchScheduleResponse
+--
+--         , responseDeleteProgram $
+--             newDeleteProgramResponse
+--
+--         , responseDeleteSourceLocation $
+--             newDeleteSourceLocationResponse
+--
+--         , responseDeleteVodSource $
+--             newDeleteVodSourceResponse
+--
+--         , responseDescribeChannel $
+--             newDescribeChannelResponse
+--
+--         , responseDescribeLiveSource $
+--             newDescribeLiveSourceResponse
+--
+--         , responseDescribeProgram $
+--             newDescribeProgramResponse
+--
+--         , responseDescribeSourceLocation $
+--             newDescribeSourceLocationResponse
+--
+--         , responseDescribeVodSource $
+--             newDescribeVodSourceResponse
+--
+--         , responseGetChannelPolicy $
+--             newGetChannelPolicyResponse
+--
+--         , responseGetChannelSchedule $
+--             newGetChannelScheduleResponse
+--
+--         , responseGetPlaybackConfiguration $
+--             newGetPlaybackConfigurationResponse
+--
+--         , responseGetPrefetchSchedule $
+--             newGetPrefetchScheduleResponse
+--
+--         , responseListAlerts $
+--             newListAlertsResponse
+--
+--         , responseListChannels $
+--             newListChannelsResponse
+--
+--         , responseListLiveSources $
+--             newListLiveSourcesResponse
+--
+--         , responseListPlaybackConfigurations $
+--             newListPlaybackConfigurationsResponse
+--
+--         , responseListPrefetchSchedules $
+--             newListPrefetchSchedulesResponse
+--
+--         , responseListSourceLocations $
+--             newListSourceLocationsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseListVodSources $
+--             newListVodSourcesResponse
+--
+--         , responsePutChannelPolicy $
+--             newPutChannelPolicyResponse
+--
+--         , responsePutPlaybackConfiguration $
+--             newPutPlaybackConfigurationResponse
+--
+--         , responseStartChannel $
+--             newStartChannelResponse
+--
+--         , responseStopChannel $
+--             newStopChannelResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateChannel $
+--             newUpdateChannelResponse
+--
+--         , responseUpdateLiveSource $
+--             newUpdateLiveSourceResponse
+--
+--         , responseUpdateSourceLocation $
+--             newUpdateSourceLocationResponse
+--
+--         , responseUpdateVodSource $
+--             newUpdateVodSourceResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestConfigureLogsForPlaybackConfiguration :: ConfigureLogsForPlaybackConfiguration -> TestTree
+requestConfigureLogsForPlaybackConfiguration =
+  req
+    "ConfigureLogsForPlaybackConfiguration"
+    "fixture/ConfigureLogsForPlaybackConfiguration.yaml"
+
+requestCreateChannel :: CreateChannel -> TestTree
+requestCreateChannel =
+  req
+    "CreateChannel"
+    "fixture/CreateChannel.yaml"
+
+requestCreateLiveSource :: CreateLiveSource -> TestTree
+requestCreateLiveSource =
+  req
+    "CreateLiveSource"
+    "fixture/CreateLiveSource.yaml"
+
+requestCreatePrefetchSchedule :: CreatePrefetchSchedule -> TestTree
+requestCreatePrefetchSchedule =
+  req
+    "CreatePrefetchSchedule"
+    "fixture/CreatePrefetchSchedule.yaml"
+
+requestCreateProgram :: CreateProgram -> TestTree
+requestCreateProgram =
+  req
+    "CreateProgram"
+    "fixture/CreateProgram.yaml"
+
+requestCreateSourceLocation :: CreateSourceLocation -> TestTree
+requestCreateSourceLocation =
+  req
+    "CreateSourceLocation"
+    "fixture/CreateSourceLocation.yaml"
+
+requestCreateVodSource :: CreateVodSource -> TestTree
+requestCreateVodSource =
+  req
+    "CreateVodSource"
+    "fixture/CreateVodSource.yaml"
+
+requestDeleteChannel :: DeleteChannel -> TestTree
+requestDeleteChannel =
+  req
+    "DeleteChannel"
+    "fixture/DeleteChannel.yaml"
+
+requestDeleteChannelPolicy :: DeleteChannelPolicy -> TestTree
+requestDeleteChannelPolicy =
+  req
+    "DeleteChannelPolicy"
+    "fixture/DeleteChannelPolicy.yaml"
+
+requestDeleteLiveSource :: DeleteLiveSource -> TestTree
+requestDeleteLiveSource =
+  req
+    "DeleteLiveSource"
+    "fixture/DeleteLiveSource.yaml"
+
+requestDeletePlaybackConfiguration :: DeletePlaybackConfiguration -> TestTree
+requestDeletePlaybackConfiguration =
+  req
+    "DeletePlaybackConfiguration"
+    "fixture/DeletePlaybackConfiguration.yaml"
+
+requestDeletePrefetchSchedule :: DeletePrefetchSchedule -> TestTree
+requestDeletePrefetchSchedule =
+  req
+    "DeletePrefetchSchedule"
+    "fixture/DeletePrefetchSchedule.yaml"
+
+requestDeleteProgram :: DeleteProgram -> TestTree
+requestDeleteProgram =
+  req
+    "DeleteProgram"
+    "fixture/DeleteProgram.yaml"
+
+requestDeleteSourceLocation :: DeleteSourceLocation -> TestTree
+requestDeleteSourceLocation =
+  req
+    "DeleteSourceLocation"
+    "fixture/DeleteSourceLocation.yaml"
+
+requestDeleteVodSource :: DeleteVodSource -> TestTree
+requestDeleteVodSource =
+  req
+    "DeleteVodSource"
+    "fixture/DeleteVodSource.yaml"
+
+requestDescribeChannel :: DescribeChannel -> TestTree
+requestDescribeChannel =
+  req
+    "DescribeChannel"
+    "fixture/DescribeChannel.yaml"
+
+requestDescribeLiveSource :: DescribeLiveSource -> TestTree
+requestDescribeLiveSource =
+  req
+    "DescribeLiveSource"
+    "fixture/DescribeLiveSource.yaml"
+
+requestDescribeProgram :: DescribeProgram -> TestTree
+requestDescribeProgram =
+  req
+    "DescribeProgram"
+    "fixture/DescribeProgram.yaml"
+
+requestDescribeSourceLocation :: DescribeSourceLocation -> TestTree
+requestDescribeSourceLocation =
+  req
+    "DescribeSourceLocation"
+    "fixture/DescribeSourceLocation.yaml"
+
+requestDescribeVodSource :: DescribeVodSource -> TestTree
+requestDescribeVodSource =
+  req
+    "DescribeVodSource"
+    "fixture/DescribeVodSource.yaml"
+
+requestGetChannelPolicy :: GetChannelPolicy -> TestTree
+requestGetChannelPolicy =
+  req
+    "GetChannelPolicy"
+    "fixture/GetChannelPolicy.yaml"
+
+requestGetChannelSchedule :: GetChannelSchedule -> TestTree
+requestGetChannelSchedule =
+  req
+    "GetChannelSchedule"
+    "fixture/GetChannelSchedule.yaml"
+
+requestGetPlaybackConfiguration :: GetPlaybackConfiguration -> TestTree
+requestGetPlaybackConfiguration =
+  req
+    "GetPlaybackConfiguration"
+    "fixture/GetPlaybackConfiguration.yaml"
+
+requestGetPrefetchSchedule :: GetPrefetchSchedule -> TestTree
+requestGetPrefetchSchedule =
+  req
+    "GetPrefetchSchedule"
+    "fixture/GetPrefetchSchedule.yaml"
+
+requestListAlerts :: ListAlerts -> TestTree
+requestListAlerts =
+  req
+    "ListAlerts"
+    "fixture/ListAlerts.yaml"
+
+requestListChannels :: ListChannels -> TestTree
+requestListChannels =
+  req
+    "ListChannels"
+    "fixture/ListChannels.yaml"
+
+requestListLiveSources :: ListLiveSources -> TestTree
+requestListLiveSources =
+  req
+    "ListLiveSources"
+    "fixture/ListLiveSources.yaml"
+
+requestListPlaybackConfigurations :: ListPlaybackConfigurations -> TestTree
+requestListPlaybackConfigurations =
+  req
+    "ListPlaybackConfigurations"
+    "fixture/ListPlaybackConfigurations.yaml"
+
+requestListPrefetchSchedules :: ListPrefetchSchedules -> TestTree
+requestListPrefetchSchedules =
+  req
+    "ListPrefetchSchedules"
+    "fixture/ListPrefetchSchedules.yaml"
+
+requestListSourceLocations :: ListSourceLocations -> TestTree
+requestListSourceLocations =
+  req
+    "ListSourceLocations"
+    "fixture/ListSourceLocations.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestListVodSources :: ListVodSources -> TestTree
+requestListVodSources =
+  req
+    "ListVodSources"
+    "fixture/ListVodSources.yaml"
+
+requestPutChannelPolicy :: PutChannelPolicy -> TestTree
+requestPutChannelPolicy =
+  req
+    "PutChannelPolicy"
+    "fixture/PutChannelPolicy.yaml"
+
+requestPutPlaybackConfiguration :: PutPlaybackConfiguration -> TestTree
+requestPutPlaybackConfiguration =
+  req
+    "PutPlaybackConfiguration"
+    "fixture/PutPlaybackConfiguration.yaml"
+
+requestStartChannel :: StartChannel -> TestTree
+requestStartChannel =
+  req
+    "StartChannel"
+    "fixture/StartChannel.yaml"
+
+requestStopChannel :: StopChannel -> TestTree
+requestStopChannel =
+  req
+    "StopChannel"
+    "fixture/StopChannel.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateChannel :: UpdateChannel -> TestTree
+requestUpdateChannel =
+  req
+    "UpdateChannel"
+    "fixture/UpdateChannel.yaml"
+
+requestUpdateLiveSource :: UpdateLiveSource -> TestTree
+requestUpdateLiveSource =
+  req
+    "UpdateLiveSource"
+    "fixture/UpdateLiveSource.yaml"
+
+requestUpdateSourceLocation :: UpdateSourceLocation -> TestTree
+requestUpdateSourceLocation =
+  req
+    "UpdateSourceLocation"
+    "fixture/UpdateSourceLocation.yaml"
+
+requestUpdateVodSource :: UpdateVodSource -> TestTree
+requestUpdateVodSource =
+  req
+    "UpdateVodSource"
+    "fixture/UpdateVodSource.yaml"
+
+-- Responses
+
+responseConfigureLogsForPlaybackConfiguration :: ConfigureLogsForPlaybackConfigurationResponse -> TestTree
+responseConfigureLogsForPlaybackConfiguration =
+  res
+    "ConfigureLogsForPlaybackConfigurationResponse"
+    "fixture/ConfigureLogsForPlaybackConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ConfigureLogsForPlaybackConfiguration)
+
+responseCreateChannel :: CreateChannelResponse -> TestTree
+responseCreateChannel =
+  res
+    "CreateChannelResponse"
+    "fixture/CreateChannelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateChannel)
+
+responseCreateLiveSource :: CreateLiveSourceResponse -> TestTree
+responseCreateLiveSource =
+  res
+    "CreateLiveSourceResponse"
+    "fixture/CreateLiveSourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLiveSource)
+
+responseCreatePrefetchSchedule :: CreatePrefetchScheduleResponse -> TestTree
+responseCreatePrefetchSchedule =
+  res
+    "CreatePrefetchScheduleResponse"
+    "fixture/CreatePrefetchScheduleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreatePrefetchSchedule)
+
+responseCreateProgram :: CreateProgramResponse -> TestTree
+responseCreateProgram =
+  res
+    "CreateProgramResponse"
+    "fixture/CreateProgramResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateProgram)
+
+responseCreateSourceLocation :: CreateSourceLocationResponse -> TestTree
+responseCreateSourceLocation =
+  res
+    "CreateSourceLocationResponse"
+    "fixture/CreateSourceLocationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSourceLocation)
+
+responseCreateVodSource :: CreateVodSourceResponse -> TestTree
+responseCreateVodSource =
+  res
+    "CreateVodSourceResponse"
+    "fixture/CreateVodSourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVodSource)
+
+responseDeleteChannel :: DeleteChannelResponse -> TestTree
+responseDeleteChannel =
+  res
+    "DeleteChannelResponse"
+    "fixture/DeleteChannelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteChannel)
+
+responseDeleteChannelPolicy :: DeleteChannelPolicyResponse -> TestTree
+responseDeleteChannelPolicy =
+  res
+    "DeleteChannelPolicyResponse"
+    "fixture/DeleteChannelPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteChannelPolicy)
+
+responseDeleteLiveSource :: DeleteLiveSourceResponse -> TestTree
+responseDeleteLiveSource =
+  res
+    "DeleteLiveSourceResponse"
+    "fixture/DeleteLiveSourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteLiveSource)
+
+responseDeletePlaybackConfiguration :: DeletePlaybackConfigurationResponse -> TestTree
+responseDeletePlaybackConfiguration =
+  res
+    "DeletePlaybackConfigurationResponse"
+    "fixture/DeletePlaybackConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeletePlaybackConfiguration)
+
+responseDeletePrefetchSchedule :: DeletePrefetchScheduleResponse -> TestTree
+responseDeletePrefetchSchedule =
+  res
+    "DeletePrefetchScheduleResponse"
+    "fixture/DeletePrefetchScheduleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeletePrefetchSchedule)
+
+responseDeleteProgram :: DeleteProgramResponse -> TestTree
+responseDeleteProgram =
+  res
+    "DeleteProgramResponse"
+    "fixture/DeleteProgramResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteProgram)
+
+responseDeleteSourceLocation :: DeleteSourceLocationResponse -> TestTree
+responseDeleteSourceLocation =
+  res
+    "DeleteSourceLocationResponse"
+    "fixture/DeleteSourceLocationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSourceLocation)
+
+responseDeleteVodSource :: DeleteVodSourceResponse -> TestTree
+responseDeleteVodSource =
+  res
+    "DeleteVodSourceResponse"
+    "fixture/DeleteVodSourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVodSource)
+
+responseDescribeChannel :: DescribeChannelResponse -> TestTree
+responseDescribeChannel =
+  res
+    "DescribeChannelResponse"
+    "fixture/DescribeChannelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeChannel)
+
+responseDescribeLiveSource :: DescribeLiveSourceResponse -> TestTree
+responseDescribeLiveSource =
+  res
+    "DescribeLiveSourceResponse"
+    "fixture/DescribeLiveSourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLiveSource)
+
+responseDescribeProgram :: DescribeProgramResponse -> TestTree
+responseDescribeProgram =
+  res
+    "DescribeProgramResponse"
+    "fixture/DescribeProgramResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeProgram)
+
+responseDescribeSourceLocation :: DescribeSourceLocationResponse -> TestTree
+responseDescribeSourceLocation =
+  res
+    "DescribeSourceLocationResponse"
+    "fixture/DescribeSourceLocationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSourceLocation)
+
+responseDescribeVodSource :: DescribeVodSourceResponse -> TestTree
+responseDescribeVodSource =
+  res
+    "DescribeVodSourceResponse"
+    "fixture/DescribeVodSourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVodSource)
+
+responseGetChannelPolicy :: GetChannelPolicyResponse -> TestTree
+responseGetChannelPolicy =
+  res
+    "GetChannelPolicyResponse"
+    "fixture/GetChannelPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetChannelPolicy)
+
+responseGetChannelSchedule :: GetChannelScheduleResponse -> TestTree
+responseGetChannelSchedule =
+  res
+    "GetChannelScheduleResponse"
+    "fixture/GetChannelScheduleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetChannelSchedule)
+
+responseGetPlaybackConfiguration :: GetPlaybackConfigurationResponse -> TestTree
+responseGetPlaybackConfiguration =
+  res
+    "GetPlaybackConfigurationResponse"
+    "fixture/GetPlaybackConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetPlaybackConfiguration)
+
+responseGetPrefetchSchedule :: GetPrefetchScheduleResponse -> TestTree
+responseGetPrefetchSchedule =
+  res
+    "GetPrefetchScheduleResponse"
+    "fixture/GetPrefetchScheduleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetPrefetchSchedule)
+
+responseListAlerts :: ListAlertsResponse -> TestTree
+responseListAlerts =
+  res
+    "ListAlertsResponse"
+    "fixture/ListAlertsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAlerts)
+
+responseListChannels :: ListChannelsResponse -> TestTree
+responseListChannels =
+  res
+    "ListChannelsResponse"
+    "fixture/ListChannelsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListChannels)
+
+responseListLiveSources :: ListLiveSourcesResponse -> TestTree
+responseListLiveSources =
+  res
+    "ListLiveSourcesResponse"
+    "fixture/ListLiveSourcesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListLiveSources)
+
+responseListPlaybackConfigurations :: ListPlaybackConfigurationsResponse -> TestTree
+responseListPlaybackConfigurations =
+  res
+    "ListPlaybackConfigurationsResponse"
+    "fixture/ListPlaybackConfigurationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListPlaybackConfigurations)
+
+responseListPrefetchSchedules :: ListPrefetchSchedulesResponse -> TestTree
+responseListPrefetchSchedules =
+  res
+    "ListPrefetchSchedulesResponse"
+    "fixture/ListPrefetchSchedulesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListPrefetchSchedules)
+
+responseListSourceLocations :: ListSourceLocationsResponse -> TestTree
+responseListSourceLocations =
+  res
+    "ListSourceLocationsResponse"
+    "fixture/ListSourceLocationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSourceLocations)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseListVodSources :: ListVodSourcesResponse -> TestTree
+responseListVodSources =
+  res
+    "ListVodSourcesResponse"
+    "fixture/ListVodSourcesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListVodSources)
+
+responsePutChannelPolicy :: PutChannelPolicyResponse -> TestTree
+responsePutChannelPolicy =
+  res
+    "PutChannelPolicyResponse"
+    "fixture/PutChannelPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutChannelPolicy)
+
+responsePutPlaybackConfiguration :: PutPlaybackConfigurationResponse -> TestTree
+responsePutPlaybackConfiguration =
+  res
+    "PutPlaybackConfigurationResponse"
+    "fixture/PutPlaybackConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutPlaybackConfiguration)
+
+responseStartChannel :: StartChannelResponse -> TestTree
+responseStartChannel =
+  res
+    "StartChannelResponse"
+    "fixture/StartChannelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartChannel)
+
+responseStopChannel :: StopChannelResponse -> TestTree
+responseStopChannel =
+  res
+    "StopChannelResponse"
+    "fixture/StopChannelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopChannel)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
+
+responseUpdateChannel :: UpdateChannelResponse -> TestTree
+responseUpdateChannel =
+  res
+    "UpdateChannelResponse"
+    "fixture/UpdateChannelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateChannel)
+
+responseUpdateLiveSource :: UpdateLiveSourceResponse -> TestTree
+responseUpdateLiveSource =
+  res
+    "UpdateLiveSourceResponse"
+    "fixture/UpdateLiveSourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateLiveSource)
+
+responseUpdateSourceLocation :: UpdateSourceLocationResponse -> TestTree
+responseUpdateSourceLocation =
+  res
+    "UpdateSourceLocationResponse"
+    "fixture/UpdateSourceLocationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateSourceLocation)
+
+responseUpdateVodSource :: UpdateVodSourceResponse -> TestTree
+responseUpdateVodSource =
+  res
+    "UpdateVodSourceResponse"
+    "fixture/UpdateVodSourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateVodSource)
diff --git a/test/Test/Amazonka/MediaTailor.hs b/test/Test/Amazonka/MediaTailor.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/MediaTailor.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.MediaTailor
+-- 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.MediaTailor
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/MediaTailor/Internal.hs b/test/Test/Amazonka/MediaTailor/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/MediaTailor/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.MediaTailor.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.MediaTailor.Internal where
