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 Elemental MediaPackage VOD SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2018-11-07@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-mediapackage-vod)
+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.MediaPackageVOD](http://hackage.haskell.org/package/amazonka-mediapackage-vod/docs/Amazonka-MediaPackageVOD.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-mediapackage-vod` 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-mediapackage-vod.cabal b/amazonka-mediapackage-vod.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-mediapackage-vod.cabal
@@ -0,0 +1,130 @@
+cabal-version:      2.2
+name:               amazonka-mediapackage-vod
+version:            2.0
+synopsis:           Amazon Elemental MediaPackage VOD 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-11-07@ 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.MediaPackageVOD.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.MediaPackageVOD" 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-mediapackage-vod
+
+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.MediaPackageVOD
+    Amazonka.MediaPackageVOD.ConfigureLogs
+    Amazonka.MediaPackageVOD.CreateAsset
+    Amazonka.MediaPackageVOD.CreatePackagingConfiguration
+    Amazonka.MediaPackageVOD.CreatePackagingGroup
+    Amazonka.MediaPackageVOD.DeleteAsset
+    Amazonka.MediaPackageVOD.DeletePackagingConfiguration
+    Amazonka.MediaPackageVOD.DeletePackagingGroup
+    Amazonka.MediaPackageVOD.DescribeAsset
+    Amazonka.MediaPackageVOD.DescribePackagingConfiguration
+    Amazonka.MediaPackageVOD.DescribePackagingGroup
+    Amazonka.MediaPackageVOD.Lens
+    Amazonka.MediaPackageVOD.ListAssets
+    Amazonka.MediaPackageVOD.ListPackagingConfigurations
+    Amazonka.MediaPackageVOD.ListPackagingGroups
+    Amazonka.MediaPackageVOD.ListTagsForResource
+    Amazonka.MediaPackageVOD.TagResource
+    Amazonka.MediaPackageVOD.Types
+    Amazonka.MediaPackageVOD.Types.AdMarkers
+    Amazonka.MediaPackageVOD.Types.AssetShallow
+    Amazonka.MediaPackageVOD.Types.Authorization
+    Amazonka.MediaPackageVOD.Types.CmafEncryption
+    Amazonka.MediaPackageVOD.Types.CmafPackage
+    Amazonka.MediaPackageVOD.Types.DashEncryption
+    Amazonka.MediaPackageVOD.Types.DashManifest
+    Amazonka.MediaPackageVOD.Types.DashPackage
+    Amazonka.MediaPackageVOD.Types.EgressAccessLogs
+    Amazonka.MediaPackageVOD.Types.EgressEndpoint
+    Amazonka.MediaPackageVOD.Types.EncryptionContractConfiguration
+    Amazonka.MediaPackageVOD.Types.EncryptionMethod
+    Amazonka.MediaPackageVOD.Types.HlsEncryption
+    Amazonka.MediaPackageVOD.Types.HlsManifest
+    Amazonka.MediaPackageVOD.Types.HlsPackage
+    Amazonka.MediaPackageVOD.Types.ManifestLayout
+    Amazonka.MediaPackageVOD.Types.MssEncryption
+    Amazonka.MediaPackageVOD.Types.MssManifest
+    Amazonka.MediaPackageVOD.Types.MssPackage
+    Amazonka.MediaPackageVOD.Types.PackagingConfiguration
+    Amazonka.MediaPackageVOD.Types.PackagingGroup
+    Amazonka.MediaPackageVOD.Types.PeriodTriggersElement
+    Amazonka.MediaPackageVOD.Types.PresetSpeke20Audio
+    Amazonka.MediaPackageVOD.Types.PresetSpeke20Video
+    Amazonka.MediaPackageVOD.Types.Profile
+    Amazonka.MediaPackageVOD.Types.ScteMarkersSource
+    Amazonka.MediaPackageVOD.Types.SegmentTemplateFormat
+    Amazonka.MediaPackageVOD.Types.SpekeKeyProvider
+    Amazonka.MediaPackageVOD.Types.StreamOrder
+    Amazonka.MediaPackageVOD.Types.StreamSelection
+    Amazonka.MediaPackageVOD.UntagResource
+    Amazonka.MediaPackageVOD.UpdatePackagingGroup
+    Amazonka.MediaPackageVOD.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-mediapackage-vod-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.MediaPackageVOD
+    Test.Amazonka.MediaPackageVOD
+    Test.Amazonka.MediaPackageVOD.Internal
+
+  build-depends:
+    , amazonka-core              >=2.0 && <2.1
+    , amazonka-mediapackage-vod
+    , amazonka-test              >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/ConfigureLogs.yaml b/fixture/ConfigureLogs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ConfigureLogs.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediapackage-vod/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediapackage-vod.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/ConfigureLogsResponse.proto b/fixture/ConfigureLogsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ConfigureLogsResponse.proto
diff --git a/fixture/CreateAsset.yaml b/fixture/CreateAsset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAsset.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediapackage-vod/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediapackage-vod.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/CreateAssetResponse.proto b/fixture/CreateAssetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAssetResponse.proto
diff --git a/fixture/CreatePackagingConfiguration.yaml b/fixture/CreatePackagingConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePackagingConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediapackage-vod/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediapackage-vod.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/CreatePackagingConfigurationResponse.proto b/fixture/CreatePackagingConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePackagingConfigurationResponse.proto
diff --git a/fixture/CreatePackagingGroup.yaml b/fixture/CreatePackagingGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePackagingGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediapackage-vod/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediapackage-vod.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/CreatePackagingGroupResponse.proto b/fixture/CreatePackagingGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePackagingGroupResponse.proto
diff --git a/fixture/DeleteAsset.yaml b/fixture/DeleteAsset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAsset.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediapackage-vod/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediapackage-vod.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/DeleteAssetResponse.proto b/fixture/DeleteAssetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAssetResponse.proto
diff --git a/fixture/DeletePackagingConfiguration.yaml b/fixture/DeletePackagingConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePackagingConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediapackage-vod/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediapackage-vod.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/DeletePackagingConfigurationResponse.proto b/fixture/DeletePackagingConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePackagingConfigurationResponse.proto
diff --git a/fixture/DeletePackagingGroup.yaml b/fixture/DeletePackagingGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePackagingGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediapackage-vod/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediapackage-vod.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/DeletePackagingGroupResponse.proto b/fixture/DeletePackagingGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePackagingGroupResponse.proto
diff --git a/fixture/DescribeAsset.yaml b/fixture/DescribeAsset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAsset.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediapackage-vod/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediapackage-vod.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/DescribeAssetResponse.proto b/fixture/DescribeAssetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAssetResponse.proto
diff --git a/fixture/DescribePackagingConfiguration.yaml b/fixture/DescribePackagingConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePackagingConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediapackage-vod/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediapackage-vod.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/DescribePackagingConfigurationResponse.proto b/fixture/DescribePackagingConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePackagingConfigurationResponse.proto
diff --git a/fixture/DescribePackagingGroup.yaml b/fixture/DescribePackagingGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePackagingGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediapackage-vod/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediapackage-vod.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/DescribePackagingGroupResponse.proto b/fixture/DescribePackagingGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePackagingGroupResponse.proto
diff --git a/fixture/ListAssets.yaml b/fixture/ListAssets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAssets.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediapackage-vod/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediapackage-vod.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/ListAssetsResponse.proto b/fixture/ListAssetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAssetsResponse.proto
diff --git a/fixture/ListPackagingConfigurations.yaml b/fixture/ListPackagingConfigurations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListPackagingConfigurations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediapackage-vod/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediapackage-vod.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/ListPackagingConfigurationsResponse.proto b/fixture/ListPackagingConfigurationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListPackagingConfigurationsResponse.proto
diff --git a/fixture/ListPackagingGroups.yaml b/fixture/ListPackagingGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListPackagingGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediapackage-vod/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediapackage-vod.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/ListPackagingGroupsResponse.proto b/fixture/ListPackagingGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListPackagingGroupsResponse.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/mediapackage-vod/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediapackage-vod.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/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/mediapackage-vod/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediapackage-vod.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/mediapackage-vod/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediapackage-vod.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/UpdatePackagingGroup.yaml b/fixture/UpdatePackagingGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdatePackagingGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediapackage-vod/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediapackage-vod.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/UpdatePackagingGroupResponse.proto b/fixture/UpdatePackagingGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdatePackagingGroupResponse.proto
diff --git a/gen/Amazonka/MediaPackageVOD.hs b/gen/Amazonka/MediaPackageVOD.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD.hs
@@ -0,0 +1,308 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.MediaPackageVOD
+-- 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-11-07@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- AWS Elemental MediaPackage VOD
+module Amazonka.MediaPackageVOD
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** ForbiddenException
+    _ForbiddenException,
+
+    -- ** InternalServerErrorException
+    _InternalServerErrorException,
+
+    -- ** NotFoundException
+    _NotFoundException,
+
+    -- ** ServiceUnavailableException
+    _ServiceUnavailableException,
+
+    -- ** TooManyRequestsException
+    _TooManyRequestsException,
+
+    -- ** UnprocessableEntityException
+    _UnprocessableEntityException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** ConfigureLogs
+    ConfigureLogs (ConfigureLogs'),
+    newConfigureLogs,
+    ConfigureLogsResponse (ConfigureLogsResponse'),
+    newConfigureLogsResponse,
+
+    -- ** CreateAsset
+    CreateAsset (CreateAsset'),
+    newCreateAsset,
+    CreateAssetResponse (CreateAssetResponse'),
+    newCreateAssetResponse,
+
+    -- ** CreatePackagingConfiguration
+    CreatePackagingConfiguration (CreatePackagingConfiguration'),
+    newCreatePackagingConfiguration,
+    CreatePackagingConfigurationResponse (CreatePackagingConfigurationResponse'),
+    newCreatePackagingConfigurationResponse,
+
+    -- ** CreatePackagingGroup
+    CreatePackagingGroup (CreatePackagingGroup'),
+    newCreatePackagingGroup,
+    CreatePackagingGroupResponse (CreatePackagingGroupResponse'),
+    newCreatePackagingGroupResponse,
+
+    -- ** DeleteAsset
+    DeleteAsset (DeleteAsset'),
+    newDeleteAsset,
+    DeleteAssetResponse (DeleteAssetResponse'),
+    newDeleteAssetResponse,
+
+    -- ** DeletePackagingConfiguration
+    DeletePackagingConfiguration (DeletePackagingConfiguration'),
+    newDeletePackagingConfiguration,
+    DeletePackagingConfigurationResponse (DeletePackagingConfigurationResponse'),
+    newDeletePackagingConfigurationResponse,
+
+    -- ** DeletePackagingGroup
+    DeletePackagingGroup (DeletePackagingGroup'),
+    newDeletePackagingGroup,
+    DeletePackagingGroupResponse (DeletePackagingGroupResponse'),
+    newDeletePackagingGroupResponse,
+
+    -- ** DescribeAsset
+    DescribeAsset (DescribeAsset'),
+    newDescribeAsset,
+    DescribeAssetResponse (DescribeAssetResponse'),
+    newDescribeAssetResponse,
+
+    -- ** DescribePackagingConfiguration
+    DescribePackagingConfiguration (DescribePackagingConfiguration'),
+    newDescribePackagingConfiguration,
+    DescribePackagingConfigurationResponse (DescribePackagingConfigurationResponse'),
+    newDescribePackagingConfigurationResponse,
+
+    -- ** DescribePackagingGroup
+    DescribePackagingGroup (DescribePackagingGroup'),
+    newDescribePackagingGroup,
+    DescribePackagingGroupResponse (DescribePackagingGroupResponse'),
+    newDescribePackagingGroupResponse,
+
+    -- ** ListAssets (Paginated)
+    ListAssets (ListAssets'),
+    newListAssets,
+    ListAssetsResponse (ListAssetsResponse'),
+    newListAssetsResponse,
+
+    -- ** ListPackagingConfigurations (Paginated)
+    ListPackagingConfigurations (ListPackagingConfigurations'),
+    newListPackagingConfigurations,
+    ListPackagingConfigurationsResponse (ListPackagingConfigurationsResponse'),
+    newListPackagingConfigurationsResponse,
+
+    -- ** ListPackagingGroups (Paginated)
+    ListPackagingGroups (ListPackagingGroups'),
+    newListPackagingGroups,
+    ListPackagingGroupsResponse (ListPackagingGroupsResponse'),
+    newListPackagingGroupsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdatePackagingGroup
+    UpdatePackagingGroup (UpdatePackagingGroup'),
+    newUpdatePackagingGroup,
+    UpdatePackagingGroupResponse (UpdatePackagingGroupResponse'),
+    newUpdatePackagingGroupResponse,
+
+    -- * Types
+
+    -- ** AdMarkers
+    AdMarkers (..),
+
+    -- ** EncryptionMethod
+    EncryptionMethod (..),
+
+    -- ** ManifestLayout
+    ManifestLayout (..),
+
+    -- ** PeriodTriggersElement
+    PeriodTriggersElement (..),
+
+    -- ** PresetSpeke20Audio
+    PresetSpeke20Audio (..),
+
+    -- ** PresetSpeke20Video
+    PresetSpeke20Video (..),
+
+    -- ** Profile
+    Profile (..),
+
+    -- ** ScteMarkersSource
+    ScteMarkersSource (..),
+
+    -- ** SegmentTemplateFormat
+    SegmentTemplateFormat (..),
+
+    -- ** StreamOrder
+    StreamOrder (..),
+
+    -- ** AssetShallow
+    AssetShallow (AssetShallow'),
+    newAssetShallow,
+
+    -- ** Authorization
+    Authorization (Authorization'),
+    newAuthorization,
+
+    -- ** CmafEncryption
+    CmafEncryption (CmafEncryption'),
+    newCmafEncryption,
+
+    -- ** CmafPackage
+    CmafPackage (CmafPackage'),
+    newCmafPackage,
+
+    -- ** DashEncryption
+    DashEncryption (DashEncryption'),
+    newDashEncryption,
+
+    -- ** DashManifest
+    DashManifest (DashManifest'),
+    newDashManifest,
+
+    -- ** DashPackage
+    DashPackage (DashPackage'),
+    newDashPackage,
+
+    -- ** EgressAccessLogs
+    EgressAccessLogs (EgressAccessLogs'),
+    newEgressAccessLogs,
+
+    -- ** EgressEndpoint
+    EgressEndpoint (EgressEndpoint'),
+    newEgressEndpoint,
+
+    -- ** EncryptionContractConfiguration
+    EncryptionContractConfiguration (EncryptionContractConfiguration'),
+    newEncryptionContractConfiguration,
+
+    -- ** HlsEncryption
+    HlsEncryption (HlsEncryption'),
+    newHlsEncryption,
+
+    -- ** HlsManifest
+    HlsManifest (HlsManifest'),
+    newHlsManifest,
+
+    -- ** HlsPackage
+    HlsPackage (HlsPackage'),
+    newHlsPackage,
+
+    -- ** MssEncryption
+    MssEncryption (MssEncryption'),
+    newMssEncryption,
+
+    -- ** MssManifest
+    MssManifest (MssManifest'),
+    newMssManifest,
+
+    -- ** MssPackage
+    MssPackage (MssPackage'),
+    newMssPackage,
+
+    -- ** PackagingConfiguration
+    PackagingConfiguration (PackagingConfiguration'),
+    newPackagingConfiguration,
+
+    -- ** PackagingGroup
+    PackagingGroup (PackagingGroup'),
+    newPackagingGroup,
+
+    -- ** SpekeKeyProvider
+    SpekeKeyProvider (SpekeKeyProvider'),
+    newSpekeKeyProvider,
+
+    -- ** StreamSelection
+    StreamSelection (StreamSelection'),
+    newStreamSelection,
+  )
+where
+
+import Amazonka.MediaPackageVOD.ConfigureLogs
+import Amazonka.MediaPackageVOD.CreateAsset
+import Amazonka.MediaPackageVOD.CreatePackagingConfiguration
+import Amazonka.MediaPackageVOD.CreatePackagingGroup
+import Amazonka.MediaPackageVOD.DeleteAsset
+import Amazonka.MediaPackageVOD.DeletePackagingConfiguration
+import Amazonka.MediaPackageVOD.DeletePackagingGroup
+import Amazonka.MediaPackageVOD.DescribeAsset
+import Amazonka.MediaPackageVOD.DescribePackagingConfiguration
+import Amazonka.MediaPackageVOD.DescribePackagingGroup
+import Amazonka.MediaPackageVOD.Lens
+import Amazonka.MediaPackageVOD.ListAssets
+import Amazonka.MediaPackageVOD.ListPackagingConfigurations
+import Amazonka.MediaPackageVOD.ListPackagingGroups
+import Amazonka.MediaPackageVOD.ListTagsForResource
+import Amazonka.MediaPackageVOD.TagResource
+import Amazonka.MediaPackageVOD.Types
+import Amazonka.MediaPackageVOD.UntagResource
+import Amazonka.MediaPackageVOD.UpdatePackagingGroup
+import Amazonka.MediaPackageVOD.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 'MediaPackageVOD'.
+
+-- $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/MediaPackageVOD/ConfigureLogs.hs b/gen/Amazonka/MediaPackageVOD/ConfigureLogs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/ConfigureLogs.hs
@@ -0,0 +1,244 @@
+{-# 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.MediaPackageVOD.ConfigureLogs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Changes the packaging group\'s properities to configure log subscription
+module Amazonka.MediaPackageVOD.ConfigureLogs
+  ( -- * Creating a Request
+    ConfigureLogs (..),
+    newConfigureLogs,
+
+    -- * Request Lenses
+    configureLogs_egressAccessLogs,
+    configureLogs_id,
+
+    -- * Destructuring the Response
+    ConfigureLogsResponse (..),
+    newConfigureLogsResponse,
+
+    -- * Response Lenses
+    configureLogsResponse_arn,
+    configureLogsResponse_authorization,
+    configureLogsResponse_domainName,
+    configureLogsResponse_egressAccessLogs,
+    configureLogsResponse_id,
+    configureLogsResponse_tags,
+    configureLogsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | The option to configure log subscription.
+--
+-- /See:/ 'newConfigureLogs' smart constructor.
+data ConfigureLogs = ConfigureLogs'
+  { egressAccessLogs :: Prelude.Maybe EgressAccessLogs,
+    -- | The ID of a MediaPackage VOD PackagingGroup resource.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfigureLogs' 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:
+--
+-- 'egressAccessLogs', 'configureLogs_egressAccessLogs' - Undocumented member.
+--
+-- 'id', 'configureLogs_id' - The ID of a MediaPackage VOD PackagingGroup resource.
+newConfigureLogs ::
+  -- | 'id'
+  Prelude.Text ->
+  ConfigureLogs
+newConfigureLogs pId_ =
+  ConfigureLogs'
+    { egressAccessLogs = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | Undocumented member.
+configureLogs_egressAccessLogs :: Lens.Lens' ConfigureLogs (Prelude.Maybe EgressAccessLogs)
+configureLogs_egressAccessLogs = Lens.lens (\ConfigureLogs' {egressAccessLogs} -> egressAccessLogs) (\s@ConfigureLogs' {} a -> s {egressAccessLogs = a} :: ConfigureLogs)
+
+-- | The ID of a MediaPackage VOD PackagingGroup resource.
+configureLogs_id :: Lens.Lens' ConfigureLogs Prelude.Text
+configureLogs_id = Lens.lens (\ConfigureLogs' {id} -> id) (\s@ConfigureLogs' {} a -> s {id = a} :: ConfigureLogs)
+
+instance Core.AWSRequest ConfigureLogs where
+  type
+    AWSResponse ConfigureLogs =
+      ConfigureLogsResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ConfigureLogsResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "authorization")
+            Prelude.<*> (x Data..?> "domainName")
+            Prelude.<*> (x Data..?> "egressAccessLogs")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ConfigureLogs where
+  hashWithSalt _salt ConfigureLogs' {..} =
+    _salt
+      `Prelude.hashWithSalt` egressAccessLogs
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData ConfigureLogs where
+  rnf ConfigureLogs' {..} =
+    Prelude.rnf egressAccessLogs
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders ConfigureLogs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ConfigureLogs where
+  toJSON ConfigureLogs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("egressAccessLogs" Data..=)
+              Prelude.<$> egressAccessLogs
+          ]
+      )
+
+instance Data.ToPath ConfigureLogs where
+  toPath ConfigureLogs' {..} =
+    Prelude.mconcat
+      [ "/packaging_groups/",
+        Data.toBS id,
+        "/configure_logs"
+      ]
+
+instance Data.ToQuery ConfigureLogs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newConfigureLogsResponse' smart constructor.
+data ConfigureLogsResponse = ConfigureLogsResponse'
+  { -- | The ARN of the PackagingGroup.
+    arn :: Prelude.Maybe Prelude.Text,
+    authorization :: Prelude.Maybe Authorization,
+    -- | The fully qualified domain name for Assets in the PackagingGroup.
+    domainName :: Prelude.Maybe Prelude.Text,
+    egressAccessLogs :: Prelude.Maybe EgressAccessLogs,
+    -- | The ID of the PackagingGroup.
+    id :: Prelude.Maybe Prelude.Text,
+    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 'ConfigureLogsResponse' 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', 'configureLogsResponse_arn' - The ARN of the PackagingGroup.
+--
+-- 'authorization', 'configureLogsResponse_authorization' - Undocumented member.
+--
+-- 'domainName', 'configureLogsResponse_domainName' - The fully qualified domain name for Assets in the PackagingGroup.
+--
+-- 'egressAccessLogs', 'configureLogsResponse_egressAccessLogs' - Undocumented member.
+--
+-- 'id', 'configureLogsResponse_id' - The ID of the PackagingGroup.
+--
+-- 'tags', 'configureLogsResponse_tags' - Undocumented member.
+--
+-- 'httpStatus', 'configureLogsResponse_httpStatus' - The response's http status code.
+newConfigureLogsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ConfigureLogsResponse
+newConfigureLogsResponse pHttpStatus_ =
+  ConfigureLogsResponse'
+    { arn = Prelude.Nothing,
+      authorization = Prelude.Nothing,
+      domainName = Prelude.Nothing,
+      egressAccessLogs = Prelude.Nothing,
+      id = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the PackagingGroup.
+configureLogsResponse_arn :: Lens.Lens' ConfigureLogsResponse (Prelude.Maybe Prelude.Text)
+configureLogsResponse_arn = Lens.lens (\ConfigureLogsResponse' {arn} -> arn) (\s@ConfigureLogsResponse' {} a -> s {arn = a} :: ConfigureLogsResponse)
+
+-- | Undocumented member.
+configureLogsResponse_authorization :: Lens.Lens' ConfigureLogsResponse (Prelude.Maybe Authorization)
+configureLogsResponse_authorization = Lens.lens (\ConfigureLogsResponse' {authorization} -> authorization) (\s@ConfigureLogsResponse' {} a -> s {authorization = a} :: ConfigureLogsResponse)
+
+-- | The fully qualified domain name for Assets in the PackagingGroup.
+configureLogsResponse_domainName :: Lens.Lens' ConfigureLogsResponse (Prelude.Maybe Prelude.Text)
+configureLogsResponse_domainName = Lens.lens (\ConfigureLogsResponse' {domainName} -> domainName) (\s@ConfigureLogsResponse' {} a -> s {domainName = a} :: ConfigureLogsResponse)
+
+-- | Undocumented member.
+configureLogsResponse_egressAccessLogs :: Lens.Lens' ConfigureLogsResponse (Prelude.Maybe EgressAccessLogs)
+configureLogsResponse_egressAccessLogs = Lens.lens (\ConfigureLogsResponse' {egressAccessLogs} -> egressAccessLogs) (\s@ConfigureLogsResponse' {} a -> s {egressAccessLogs = a} :: ConfigureLogsResponse)
+
+-- | The ID of the PackagingGroup.
+configureLogsResponse_id :: Lens.Lens' ConfigureLogsResponse (Prelude.Maybe Prelude.Text)
+configureLogsResponse_id = Lens.lens (\ConfigureLogsResponse' {id} -> id) (\s@ConfigureLogsResponse' {} a -> s {id = a} :: ConfigureLogsResponse)
+
+-- | Undocumented member.
+configureLogsResponse_tags :: Lens.Lens' ConfigureLogsResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+configureLogsResponse_tags = Lens.lens (\ConfigureLogsResponse' {tags} -> tags) (\s@ConfigureLogsResponse' {} a -> s {tags = a} :: ConfigureLogsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+configureLogsResponse_httpStatus :: Lens.Lens' ConfigureLogsResponse Prelude.Int
+configureLogsResponse_httpStatus = Lens.lens (\ConfigureLogsResponse' {httpStatus} -> httpStatus) (\s@ConfigureLogsResponse' {} a -> s {httpStatus = a} :: ConfigureLogsResponse)
+
+instance Prelude.NFData ConfigureLogsResponse where
+  rnf ConfigureLogsResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf authorization
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf egressAccessLogs
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaPackageVOD/CreateAsset.hs b/gen/Amazonka/MediaPackageVOD/CreateAsset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/CreateAsset.hs
@@ -0,0 +1,342 @@
+{-# 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.MediaPackageVOD.CreateAsset
+-- 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 new MediaPackage VOD Asset resource.
+module Amazonka.MediaPackageVOD.CreateAsset
+  ( -- * Creating a Request
+    CreateAsset (..),
+    newCreateAsset,
+
+    -- * Request Lenses
+    createAsset_resourceId,
+    createAsset_tags,
+    createAsset_sourceArn,
+    createAsset_id,
+    createAsset_packagingGroupId,
+    createAsset_sourceRoleArn,
+
+    -- * Destructuring the Response
+    CreateAssetResponse (..),
+    newCreateAssetResponse,
+
+    -- * Response Lenses
+    createAssetResponse_arn,
+    createAssetResponse_createdAt,
+    createAssetResponse_egressEndpoints,
+    createAssetResponse_id,
+    createAssetResponse_packagingGroupId,
+    createAssetResponse_resourceId,
+    createAssetResponse_sourceArn,
+    createAssetResponse_sourceRoleArn,
+    createAssetResponse_tags,
+    createAssetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A new MediaPackage VOD Asset configuration.
+--
+-- /See:/ 'newCreateAsset' smart constructor.
+data CreateAsset = CreateAsset'
+  { -- | The resource ID to include in SPEKE key requests.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | ARN of the source object in S3.
+    sourceArn :: Prelude.Text,
+    -- | The unique identifier for the Asset.
+    id :: Prelude.Text,
+    -- | The ID of the PackagingGroup for the Asset.
+    packagingGroupId :: Prelude.Text,
+    -- | The IAM role ARN used to access the source S3 bucket.
+    sourceRoleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAsset' 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:
+--
+-- 'resourceId', 'createAsset_resourceId' - The resource ID to include in SPEKE key requests.
+--
+-- 'tags', 'createAsset_tags' - Undocumented member.
+--
+-- 'sourceArn', 'createAsset_sourceArn' - ARN of the source object in S3.
+--
+-- 'id', 'createAsset_id' - The unique identifier for the Asset.
+--
+-- 'packagingGroupId', 'createAsset_packagingGroupId' - The ID of the PackagingGroup for the Asset.
+--
+-- 'sourceRoleArn', 'createAsset_sourceRoleArn' - The IAM role ARN used to access the source S3 bucket.
+newCreateAsset ::
+  -- | 'sourceArn'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'packagingGroupId'
+  Prelude.Text ->
+  -- | 'sourceRoleArn'
+  Prelude.Text ->
+  CreateAsset
+newCreateAsset
+  pSourceArn_
+  pId_
+  pPackagingGroupId_
+  pSourceRoleArn_ =
+    CreateAsset'
+      { resourceId = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        sourceArn = pSourceArn_,
+        id = pId_,
+        packagingGroupId = pPackagingGroupId_,
+        sourceRoleArn = pSourceRoleArn_
+      }
+
+-- | The resource ID to include in SPEKE key requests.
+createAsset_resourceId :: Lens.Lens' CreateAsset (Prelude.Maybe Prelude.Text)
+createAsset_resourceId = Lens.lens (\CreateAsset' {resourceId} -> resourceId) (\s@CreateAsset' {} a -> s {resourceId = a} :: CreateAsset)
+
+-- | Undocumented member.
+createAsset_tags :: Lens.Lens' CreateAsset (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createAsset_tags = Lens.lens (\CreateAsset' {tags} -> tags) (\s@CreateAsset' {} a -> s {tags = a} :: CreateAsset) Prelude.. Lens.mapping Lens.coerced
+
+-- | ARN of the source object in S3.
+createAsset_sourceArn :: Lens.Lens' CreateAsset Prelude.Text
+createAsset_sourceArn = Lens.lens (\CreateAsset' {sourceArn} -> sourceArn) (\s@CreateAsset' {} a -> s {sourceArn = a} :: CreateAsset)
+
+-- | The unique identifier for the Asset.
+createAsset_id :: Lens.Lens' CreateAsset Prelude.Text
+createAsset_id = Lens.lens (\CreateAsset' {id} -> id) (\s@CreateAsset' {} a -> s {id = a} :: CreateAsset)
+
+-- | The ID of the PackagingGroup for the Asset.
+createAsset_packagingGroupId :: Lens.Lens' CreateAsset Prelude.Text
+createAsset_packagingGroupId = Lens.lens (\CreateAsset' {packagingGroupId} -> packagingGroupId) (\s@CreateAsset' {} a -> s {packagingGroupId = a} :: CreateAsset)
+
+-- | The IAM role ARN used to access the source S3 bucket.
+createAsset_sourceRoleArn :: Lens.Lens' CreateAsset Prelude.Text
+createAsset_sourceRoleArn = Lens.lens (\CreateAsset' {sourceRoleArn} -> sourceRoleArn) (\s@CreateAsset' {} a -> s {sourceRoleArn = a} :: CreateAsset)
+
+instance Core.AWSRequest CreateAsset where
+  type AWSResponse CreateAsset = CreateAssetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAssetResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "createdAt")
+            Prelude.<*> ( x
+                            Data..?> "egressEndpoints"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "packagingGroupId")
+            Prelude.<*> (x Data..?> "resourceId")
+            Prelude.<*> (x Data..?> "sourceArn")
+            Prelude.<*> (x Data..?> "sourceRoleArn")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAsset where
+  hashWithSalt _salt CreateAsset' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` sourceArn
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` packagingGroupId
+      `Prelude.hashWithSalt` sourceRoleArn
+
+instance Prelude.NFData CreateAsset where
+  rnf CreateAsset' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf sourceArn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf packagingGroupId
+      `Prelude.seq` Prelude.rnf sourceRoleArn
+
+instance Data.ToHeaders CreateAsset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAsset where
+  toJSON CreateAsset' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("resourceId" Data..=) Prelude.<$> resourceId,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("sourceArn" Data..= sourceArn),
+            Prelude.Just ("id" Data..= id),
+            Prelude.Just
+              ("packagingGroupId" Data..= packagingGroupId),
+            Prelude.Just
+              ("sourceRoleArn" Data..= sourceRoleArn)
+          ]
+      )
+
+instance Data.ToPath CreateAsset where
+  toPath = Prelude.const "/assets"
+
+instance Data.ToQuery CreateAsset where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAssetResponse' smart constructor.
+data CreateAssetResponse = CreateAssetResponse'
+  { -- | The ARN of the Asset.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time the Asset was initially submitted for Ingest.
+    createdAt :: Prelude.Maybe Prelude.Text,
+    -- | The list of egress endpoints available for the Asset.
+    egressEndpoints :: Prelude.Maybe [EgressEndpoint],
+    -- | The unique identifier for the Asset.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the PackagingGroup for the Asset.
+    packagingGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The resource ID to include in SPEKE key requests.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | ARN of the source object in S3.
+    sourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The IAM role_arn used to access the source S3 bucket.
+    sourceRoleArn :: Prelude.Maybe Prelude.Text,
+    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 'CreateAssetResponse' 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', 'createAssetResponse_arn' - The ARN of the Asset.
+--
+-- 'createdAt', 'createAssetResponse_createdAt' - The time the Asset was initially submitted for Ingest.
+--
+-- 'egressEndpoints', 'createAssetResponse_egressEndpoints' - The list of egress endpoints available for the Asset.
+--
+-- 'id', 'createAssetResponse_id' - The unique identifier for the Asset.
+--
+-- 'packagingGroupId', 'createAssetResponse_packagingGroupId' - The ID of the PackagingGroup for the Asset.
+--
+-- 'resourceId', 'createAssetResponse_resourceId' - The resource ID to include in SPEKE key requests.
+--
+-- 'sourceArn', 'createAssetResponse_sourceArn' - ARN of the source object in S3.
+--
+-- 'sourceRoleArn', 'createAssetResponse_sourceRoleArn' - The IAM role_arn used to access the source S3 bucket.
+--
+-- 'tags', 'createAssetResponse_tags' - Undocumented member.
+--
+-- 'httpStatus', 'createAssetResponse_httpStatus' - The response's http status code.
+newCreateAssetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAssetResponse
+newCreateAssetResponse pHttpStatus_ =
+  CreateAssetResponse'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      egressEndpoints = Prelude.Nothing,
+      id = Prelude.Nothing,
+      packagingGroupId = Prelude.Nothing,
+      resourceId = Prelude.Nothing,
+      sourceArn = Prelude.Nothing,
+      sourceRoleArn = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the Asset.
+createAssetResponse_arn :: Lens.Lens' CreateAssetResponse (Prelude.Maybe Prelude.Text)
+createAssetResponse_arn = Lens.lens (\CreateAssetResponse' {arn} -> arn) (\s@CreateAssetResponse' {} a -> s {arn = a} :: CreateAssetResponse)
+
+-- | The time the Asset was initially submitted for Ingest.
+createAssetResponse_createdAt :: Lens.Lens' CreateAssetResponse (Prelude.Maybe Prelude.Text)
+createAssetResponse_createdAt = Lens.lens (\CreateAssetResponse' {createdAt} -> createdAt) (\s@CreateAssetResponse' {} a -> s {createdAt = a} :: CreateAssetResponse)
+
+-- | The list of egress endpoints available for the Asset.
+createAssetResponse_egressEndpoints :: Lens.Lens' CreateAssetResponse (Prelude.Maybe [EgressEndpoint])
+createAssetResponse_egressEndpoints = Lens.lens (\CreateAssetResponse' {egressEndpoints} -> egressEndpoints) (\s@CreateAssetResponse' {} a -> s {egressEndpoints = a} :: CreateAssetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique identifier for the Asset.
+createAssetResponse_id :: Lens.Lens' CreateAssetResponse (Prelude.Maybe Prelude.Text)
+createAssetResponse_id = Lens.lens (\CreateAssetResponse' {id} -> id) (\s@CreateAssetResponse' {} a -> s {id = a} :: CreateAssetResponse)
+
+-- | The ID of the PackagingGroup for the Asset.
+createAssetResponse_packagingGroupId :: Lens.Lens' CreateAssetResponse (Prelude.Maybe Prelude.Text)
+createAssetResponse_packagingGroupId = Lens.lens (\CreateAssetResponse' {packagingGroupId} -> packagingGroupId) (\s@CreateAssetResponse' {} a -> s {packagingGroupId = a} :: CreateAssetResponse)
+
+-- | The resource ID to include in SPEKE key requests.
+createAssetResponse_resourceId :: Lens.Lens' CreateAssetResponse (Prelude.Maybe Prelude.Text)
+createAssetResponse_resourceId = Lens.lens (\CreateAssetResponse' {resourceId} -> resourceId) (\s@CreateAssetResponse' {} a -> s {resourceId = a} :: CreateAssetResponse)
+
+-- | ARN of the source object in S3.
+createAssetResponse_sourceArn :: Lens.Lens' CreateAssetResponse (Prelude.Maybe Prelude.Text)
+createAssetResponse_sourceArn = Lens.lens (\CreateAssetResponse' {sourceArn} -> sourceArn) (\s@CreateAssetResponse' {} a -> s {sourceArn = a} :: CreateAssetResponse)
+
+-- | The IAM role_arn used to access the source S3 bucket.
+createAssetResponse_sourceRoleArn :: Lens.Lens' CreateAssetResponse (Prelude.Maybe Prelude.Text)
+createAssetResponse_sourceRoleArn = Lens.lens (\CreateAssetResponse' {sourceRoleArn} -> sourceRoleArn) (\s@CreateAssetResponse' {} a -> s {sourceRoleArn = a} :: CreateAssetResponse)
+
+-- | Undocumented member.
+createAssetResponse_tags :: Lens.Lens' CreateAssetResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createAssetResponse_tags = Lens.lens (\CreateAssetResponse' {tags} -> tags) (\s@CreateAssetResponse' {} a -> s {tags = a} :: CreateAssetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createAssetResponse_httpStatus :: Lens.Lens' CreateAssetResponse Prelude.Int
+createAssetResponse_httpStatus = Lens.lens (\CreateAssetResponse' {httpStatus} -> httpStatus) (\s@CreateAssetResponse' {} a -> s {httpStatus = a} :: CreateAssetResponse)
+
+instance Prelude.NFData CreateAssetResponse where
+  rnf CreateAssetResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf egressEndpoints
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf packagingGroupId
+      `Prelude.seq` Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf sourceArn
+      `Prelude.seq` Prelude.rnf sourceRoleArn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaPackageVOD/CreatePackagingConfiguration.hs b/gen/Amazonka/MediaPackageVOD/CreatePackagingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/CreatePackagingConfiguration.hs
@@ -0,0 +1,335 @@
+{-# 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.MediaPackageVOD.CreatePackagingConfiguration
+-- 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 new MediaPackage VOD PackagingConfiguration resource.
+module Amazonka.MediaPackageVOD.CreatePackagingConfiguration
+  ( -- * Creating a Request
+    CreatePackagingConfiguration (..),
+    newCreatePackagingConfiguration,
+
+    -- * Request Lenses
+    createPackagingConfiguration_cmafPackage,
+    createPackagingConfiguration_dashPackage,
+    createPackagingConfiguration_hlsPackage,
+    createPackagingConfiguration_mssPackage,
+    createPackagingConfiguration_tags,
+    createPackagingConfiguration_id,
+    createPackagingConfiguration_packagingGroupId,
+
+    -- * Destructuring the Response
+    CreatePackagingConfigurationResponse (..),
+    newCreatePackagingConfigurationResponse,
+
+    -- * Response Lenses
+    createPackagingConfigurationResponse_arn,
+    createPackagingConfigurationResponse_cmafPackage,
+    createPackagingConfigurationResponse_dashPackage,
+    createPackagingConfigurationResponse_hlsPackage,
+    createPackagingConfigurationResponse_id,
+    createPackagingConfigurationResponse_mssPackage,
+    createPackagingConfigurationResponse_packagingGroupId,
+    createPackagingConfigurationResponse_tags,
+    createPackagingConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A new MediaPackage VOD PackagingConfiguration resource configuration.
+--
+-- /See:/ 'newCreatePackagingConfiguration' smart constructor.
+data CreatePackagingConfiguration = CreatePackagingConfiguration'
+  { cmafPackage :: Prelude.Maybe CmafPackage,
+    dashPackage :: Prelude.Maybe DashPackage,
+    hlsPackage :: Prelude.Maybe HlsPackage,
+    mssPackage :: Prelude.Maybe MssPackage,
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ID of the PackagingConfiguration.
+    id :: Prelude.Text,
+    -- | The ID of a PackagingGroup.
+    packagingGroupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreatePackagingConfiguration' 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:
+--
+-- 'cmafPackage', 'createPackagingConfiguration_cmafPackage' - Undocumented member.
+--
+-- 'dashPackage', 'createPackagingConfiguration_dashPackage' - Undocumented member.
+--
+-- 'hlsPackage', 'createPackagingConfiguration_hlsPackage' - Undocumented member.
+--
+-- 'mssPackage', 'createPackagingConfiguration_mssPackage' - Undocumented member.
+--
+-- 'tags', 'createPackagingConfiguration_tags' - Undocumented member.
+--
+-- 'id', 'createPackagingConfiguration_id' - The ID of the PackagingConfiguration.
+--
+-- 'packagingGroupId', 'createPackagingConfiguration_packagingGroupId' - The ID of a PackagingGroup.
+newCreatePackagingConfiguration ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'packagingGroupId'
+  Prelude.Text ->
+  CreatePackagingConfiguration
+newCreatePackagingConfiguration
+  pId_
+  pPackagingGroupId_ =
+    CreatePackagingConfiguration'
+      { cmafPackage =
+          Prelude.Nothing,
+        dashPackage = Prelude.Nothing,
+        hlsPackage = Prelude.Nothing,
+        mssPackage = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        id = pId_,
+        packagingGroupId = pPackagingGroupId_
+      }
+
+-- | Undocumented member.
+createPackagingConfiguration_cmafPackage :: Lens.Lens' CreatePackagingConfiguration (Prelude.Maybe CmafPackage)
+createPackagingConfiguration_cmafPackage = Lens.lens (\CreatePackagingConfiguration' {cmafPackage} -> cmafPackage) (\s@CreatePackagingConfiguration' {} a -> s {cmafPackage = a} :: CreatePackagingConfiguration)
+
+-- | Undocumented member.
+createPackagingConfiguration_dashPackage :: Lens.Lens' CreatePackagingConfiguration (Prelude.Maybe DashPackage)
+createPackagingConfiguration_dashPackage = Lens.lens (\CreatePackagingConfiguration' {dashPackage} -> dashPackage) (\s@CreatePackagingConfiguration' {} a -> s {dashPackage = a} :: CreatePackagingConfiguration)
+
+-- | Undocumented member.
+createPackagingConfiguration_hlsPackage :: Lens.Lens' CreatePackagingConfiguration (Prelude.Maybe HlsPackage)
+createPackagingConfiguration_hlsPackage = Lens.lens (\CreatePackagingConfiguration' {hlsPackage} -> hlsPackage) (\s@CreatePackagingConfiguration' {} a -> s {hlsPackage = a} :: CreatePackagingConfiguration)
+
+-- | Undocumented member.
+createPackagingConfiguration_mssPackage :: Lens.Lens' CreatePackagingConfiguration (Prelude.Maybe MssPackage)
+createPackagingConfiguration_mssPackage = Lens.lens (\CreatePackagingConfiguration' {mssPackage} -> mssPackage) (\s@CreatePackagingConfiguration' {} a -> s {mssPackage = a} :: CreatePackagingConfiguration)
+
+-- | Undocumented member.
+createPackagingConfiguration_tags :: Lens.Lens' CreatePackagingConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createPackagingConfiguration_tags = Lens.lens (\CreatePackagingConfiguration' {tags} -> tags) (\s@CreatePackagingConfiguration' {} a -> s {tags = a} :: CreatePackagingConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the PackagingConfiguration.
+createPackagingConfiguration_id :: Lens.Lens' CreatePackagingConfiguration Prelude.Text
+createPackagingConfiguration_id = Lens.lens (\CreatePackagingConfiguration' {id} -> id) (\s@CreatePackagingConfiguration' {} a -> s {id = a} :: CreatePackagingConfiguration)
+
+-- | The ID of a PackagingGroup.
+createPackagingConfiguration_packagingGroupId :: Lens.Lens' CreatePackagingConfiguration Prelude.Text
+createPackagingConfiguration_packagingGroupId = Lens.lens (\CreatePackagingConfiguration' {packagingGroupId} -> packagingGroupId) (\s@CreatePackagingConfiguration' {} a -> s {packagingGroupId = a} :: CreatePackagingConfiguration)
+
+instance Core.AWSRequest CreatePackagingConfiguration where
+  type
+    AWSResponse CreatePackagingConfiguration =
+      CreatePackagingConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreatePackagingConfigurationResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "cmafPackage")
+            Prelude.<*> (x Data..?> "dashPackage")
+            Prelude.<*> (x Data..?> "hlsPackage")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "mssPackage")
+            Prelude.<*> (x Data..?> "packagingGroupId")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreatePackagingConfiguration
+  where
+  hashWithSalt _salt CreatePackagingConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` cmafPackage
+      `Prelude.hashWithSalt` dashPackage
+      `Prelude.hashWithSalt` hlsPackage
+      `Prelude.hashWithSalt` mssPackage
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` packagingGroupId
+
+instance Prelude.NFData CreatePackagingConfiguration where
+  rnf CreatePackagingConfiguration' {..} =
+    Prelude.rnf cmafPackage
+      `Prelude.seq` Prelude.rnf dashPackage
+      `Prelude.seq` Prelude.rnf hlsPackage
+      `Prelude.seq` Prelude.rnf mssPackage
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf packagingGroupId
+
+instance Data.ToHeaders CreatePackagingConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreatePackagingConfiguration where
+  toJSON CreatePackagingConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("cmafPackage" Data..=) Prelude.<$> cmafPackage,
+            ("dashPackage" Data..=) Prelude.<$> dashPackage,
+            ("hlsPackage" Data..=) Prelude.<$> hlsPackage,
+            ("mssPackage" Data..=) Prelude.<$> mssPackage,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("id" Data..= id),
+            Prelude.Just
+              ("packagingGroupId" Data..= packagingGroupId)
+          ]
+      )
+
+instance Data.ToPath CreatePackagingConfiguration where
+  toPath = Prelude.const "/packaging_configurations"
+
+instance Data.ToQuery CreatePackagingConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreatePackagingConfigurationResponse' smart constructor.
+data CreatePackagingConfigurationResponse = CreatePackagingConfigurationResponse'
+  { -- | The ARN of the PackagingConfiguration.
+    arn :: Prelude.Maybe Prelude.Text,
+    cmafPackage :: Prelude.Maybe CmafPackage,
+    dashPackage :: Prelude.Maybe DashPackage,
+    hlsPackage :: Prelude.Maybe HlsPackage,
+    -- | The ID of the PackagingConfiguration.
+    id :: Prelude.Maybe Prelude.Text,
+    mssPackage :: Prelude.Maybe MssPackage,
+    -- | The ID of a PackagingGroup.
+    packagingGroupId :: Prelude.Maybe Prelude.Text,
+    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 'CreatePackagingConfigurationResponse' 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', 'createPackagingConfigurationResponse_arn' - The ARN of the PackagingConfiguration.
+--
+-- 'cmafPackage', 'createPackagingConfigurationResponse_cmafPackage' - Undocumented member.
+--
+-- 'dashPackage', 'createPackagingConfigurationResponse_dashPackage' - Undocumented member.
+--
+-- 'hlsPackage', 'createPackagingConfigurationResponse_hlsPackage' - Undocumented member.
+--
+-- 'id', 'createPackagingConfigurationResponse_id' - The ID of the PackagingConfiguration.
+--
+-- 'mssPackage', 'createPackagingConfigurationResponse_mssPackage' - Undocumented member.
+--
+-- 'packagingGroupId', 'createPackagingConfigurationResponse_packagingGroupId' - The ID of a PackagingGroup.
+--
+-- 'tags', 'createPackagingConfigurationResponse_tags' - Undocumented member.
+--
+-- 'httpStatus', 'createPackagingConfigurationResponse_httpStatus' - The response's http status code.
+newCreatePackagingConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreatePackagingConfigurationResponse
+newCreatePackagingConfigurationResponse pHttpStatus_ =
+  CreatePackagingConfigurationResponse'
+    { arn =
+        Prelude.Nothing,
+      cmafPackage = Prelude.Nothing,
+      dashPackage = Prelude.Nothing,
+      hlsPackage = Prelude.Nothing,
+      id = Prelude.Nothing,
+      mssPackage = Prelude.Nothing,
+      packagingGroupId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the PackagingConfiguration.
+createPackagingConfigurationResponse_arn :: Lens.Lens' CreatePackagingConfigurationResponse (Prelude.Maybe Prelude.Text)
+createPackagingConfigurationResponse_arn = Lens.lens (\CreatePackagingConfigurationResponse' {arn} -> arn) (\s@CreatePackagingConfigurationResponse' {} a -> s {arn = a} :: CreatePackagingConfigurationResponse)
+
+-- | Undocumented member.
+createPackagingConfigurationResponse_cmafPackage :: Lens.Lens' CreatePackagingConfigurationResponse (Prelude.Maybe CmafPackage)
+createPackagingConfigurationResponse_cmafPackage = Lens.lens (\CreatePackagingConfigurationResponse' {cmafPackage} -> cmafPackage) (\s@CreatePackagingConfigurationResponse' {} a -> s {cmafPackage = a} :: CreatePackagingConfigurationResponse)
+
+-- | Undocumented member.
+createPackagingConfigurationResponse_dashPackage :: Lens.Lens' CreatePackagingConfigurationResponse (Prelude.Maybe DashPackage)
+createPackagingConfigurationResponse_dashPackage = Lens.lens (\CreatePackagingConfigurationResponse' {dashPackage} -> dashPackage) (\s@CreatePackagingConfigurationResponse' {} a -> s {dashPackage = a} :: CreatePackagingConfigurationResponse)
+
+-- | Undocumented member.
+createPackagingConfigurationResponse_hlsPackage :: Lens.Lens' CreatePackagingConfigurationResponse (Prelude.Maybe HlsPackage)
+createPackagingConfigurationResponse_hlsPackage = Lens.lens (\CreatePackagingConfigurationResponse' {hlsPackage} -> hlsPackage) (\s@CreatePackagingConfigurationResponse' {} a -> s {hlsPackage = a} :: CreatePackagingConfigurationResponse)
+
+-- | The ID of the PackagingConfiguration.
+createPackagingConfigurationResponse_id :: Lens.Lens' CreatePackagingConfigurationResponse (Prelude.Maybe Prelude.Text)
+createPackagingConfigurationResponse_id = Lens.lens (\CreatePackagingConfigurationResponse' {id} -> id) (\s@CreatePackagingConfigurationResponse' {} a -> s {id = a} :: CreatePackagingConfigurationResponse)
+
+-- | Undocumented member.
+createPackagingConfigurationResponse_mssPackage :: Lens.Lens' CreatePackagingConfigurationResponse (Prelude.Maybe MssPackage)
+createPackagingConfigurationResponse_mssPackage = Lens.lens (\CreatePackagingConfigurationResponse' {mssPackage} -> mssPackage) (\s@CreatePackagingConfigurationResponse' {} a -> s {mssPackage = a} :: CreatePackagingConfigurationResponse)
+
+-- | The ID of a PackagingGroup.
+createPackagingConfigurationResponse_packagingGroupId :: Lens.Lens' CreatePackagingConfigurationResponse (Prelude.Maybe Prelude.Text)
+createPackagingConfigurationResponse_packagingGroupId = Lens.lens (\CreatePackagingConfigurationResponse' {packagingGroupId} -> packagingGroupId) (\s@CreatePackagingConfigurationResponse' {} a -> s {packagingGroupId = a} :: CreatePackagingConfigurationResponse)
+
+-- | Undocumented member.
+createPackagingConfigurationResponse_tags :: Lens.Lens' CreatePackagingConfigurationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createPackagingConfigurationResponse_tags = Lens.lens (\CreatePackagingConfigurationResponse' {tags} -> tags) (\s@CreatePackagingConfigurationResponse' {} a -> s {tags = a} :: CreatePackagingConfigurationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createPackagingConfigurationResponse_httpStatus :: Lens.Lens' CreatePackagingConfigurationResponse Prelude.Int
+createPackagingConfigurationResponse_httpStatus = Lens.lens (\CreatePackagingConfigurationResponse' {httpStatus} -> httpStatus) (\s@CreatePackagingConfigurationResponse' {} a -> s {httpStatus = a} :: CreatePackagingConfigurationResponse)
+
+instance
+  Prelude.NFData
+    CreatePackagingConfigurationResponse
+  where
+  rnf CreatePackagingConfigurationResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf cmafPackage
+      `Prelude.seq` Prelude.rnf dashPackage
+      `Prelude.seq` Prelude.rnf hlsPackage
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf mssPackage
+      `Prelude.seq` Prelude.rnf packagingGroupId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaPackageVOD/CreatePackagingGroup.hs b/gen/Amazonka/MediaPackageVOD/CreatePackagingGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/CreatePackagingGroup.hs
@@ -0,0 +1,266 @@
+{-# 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.MediaPackageVOD.CreatePackagingGroup
+-- 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 new MediaPackage VOD PackagingGroup resource.
+module Amazonka.MediaPackageVOD.CreatePackagingGroup
+  ( -- * Creating a Request
+    CreatePackagingGroup (..),
+    newCreatePackagingGroup,
+
+    -- * Request Lenses
+    createPackagingGroup_authorization,
+    createPackagingGroup_egressAccessLogs,
+    createPackagingGroup_tags,
+    createPackagingGroup_id,
+
+    -- * Destructuring the Response
+    CreatePackagingGroupResponse (..),
+    newCreatePackagingGroupResponse,
+
+    -- * Response Lenses
+    createPackagingGroupResponse_arn,
+    createPackagingGroupResponse_authorization,
+    createPackagingGroupResponse_domainName,
+    createPackagingGroupResponse_egressAccessLogs,
+    createPackagingGroupResponse_id,
+    createPackagingGroupResponse_tags,
+    createPackagingGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A new MediaPackage VOD PackagingGroup resource configuration.
+--
+-- /See:/ 'newCreatePackagingGroup' smart constructor.
+data CreatePackagingGroup = CreatePackagingGroup'
+  { authorization :: Prelude.Maybe Authorization,
+    egressAccessLogs :: Prelude.Maybe EgressAccessLogs,
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ID of the PackagingGroup.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreatePackagingGroup' 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:
+--
+-- 'authorization', 'createPackagingGroup_authorization' - Undocumented member.
+--
+-- 'egressAccessLogs', 'createPackagingGroup_egressAccessLogs' - Undocumented member.
+--
+-- 'tags', 'createPackagingGroup_tags' - Undocumented member.
+--
+-- 'id', 'createPackagingGroup_id' - The ID of the PackagingGroup.
+newCreatePackagingGroup ::
+  -- | 'id'
+  Prelude.Text ->
+  CreatePackagingGroup
+newCreatePackagingGroup pId_ =
+  CreatePackagingGroup'
+    { authorization =
+        Prelude.Nothing,
+      egressAccessLogs = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | Undocumented member.
+createPackagingGroup_authorization :: Lens.Lens' CreatePackagingGroup (Prelude.Maybe Authorization)
+createPackagingGroup_authorization = Lens.lens (\CreatePackagingGroup' {authorization} -> authorization) (\s@CreatePackagingGroup' {} a -> s {authorization = a} :: CreatePackagingGroup)
+
+-- | Undocumented member.
+createPackagingGroup_egressAccessLogs :: Lens.Lens' CreatePackagingGroup (Prelude.Maybe EgressAccessLogs)
+createPackagingGroup_egressAccessLogs = Lens.lens (\CreatePackagingGroup' {egressAccessLogs} -> egressAccessLogs) (\s@CreatePackagingGroup' {} a -> s {egressAccessLogs = a} :: CreatePackagingGroup)
+
+-- | Undocumented member.
+createPackagingGroup_tags :: Lens.Lens' CreatePackagingGroup (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createPackagingGroup_tags = Lens.lens (\CreatePackagingGroup' {tags} -> tags) (\s@CreatePackagingGroup' {} a -> s {tags = a} :: CreatePackagingGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the PackagingGroup.
+createPackagingGroup_id :: Lens.Lens' CreatePackagingGroup Prelude.Text
+createPackagingGroup_id = Lens.lens (\CreatePackagingGroup' {id} -> id) (\s@CreatePackagingGroup' {} a -> s {id = a} :: CreatePackagingGroup)
+
+instance Core.AWSRequest CreatePackagingGroup where
+  type
+    AWSResponse CreatePackagingGroup =
+      CreatePackagingGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreatePackagingGroupResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "authorization")
+            Prelude.<*> (x Data..?> "domainName")
+            Prelude.<*> (x Data..?> "egressAccessLogs")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreatePackagingGroup where
+  hashWithSalt _salt CreatePackagingGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` authorization
+      `Prelude.hashWithSalt` egressAccessLogs
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData CreatePackagingGroup where
+  rnf CreatePackagingGroup' {..} =
+    Prelude.rnf authorization
+      `Prelude.seq` Prelude.rnf egressAccessLogs
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders CreatePackagingGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreatePackagingGroup where
+  toJSON CreatePackagingGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("authorization" Data..=) Prelude.<$> authorization,
+            ("egressAccessLogs" Data..=)
+              Prelude.<$> egressAccessLogs,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("id" Data..= id)
+          ]
+      )
+
+instance Data.ToPath CreatePackagingGroup where
+  toPath = Prelude.const "/packaging_groups"
+
+instance Data.ToQuery CreatePackagingGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreatePackagingGroupResponse' smart constructor.
+data CreatePackagingGroupResponse = CreatePackagingGroupResponse'
+  { -- | The ARN of the PackagingGroup.
+    arn :: Prelude.Maybe Prelude.Text,
+    authorization :: Prelude.Maybe Authorization,
+    -- | The fully qualified domain name for Assets in the PackagingGroup.
+    domainName :: Prelude.Maybe Prelude.Text,
+    egressAccessLogs :: Prelude.Maybe EgressAccessLogs,
+    -- | The ID of the PackagingGroup.
+    id :: Prelude.Maybe Prelude.Text,
+    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 'CreatePackagingGroupResponse' 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', 'createPackagingGroupResponse_arn' - The ARN of the PackagingGroup.
+--
+-- 'authorization', 'createPackagingGroupResponse_authorization' - Undocumented member.
+--
+-- 'domainName', 'createPackagingGroupResponse_domainName' - The fully qualified domain name for Assets in the PackagingGroup.
+--
+-- 'egressAccessLogs', 'createPackagingGroupResponse_egressAccessLogs' - Undocumented member.
+--
+-- 'id', 'createPackagingGroupResponse_id' - The ID of the PackagingGroup.
+--
+-- 'tags', 'createPackagingGroupResponse_tags' - Undocumented member.
+--
+-- 'httpStatus', 'createPackagingGroupResponse_httpStatus' - The response's http status code.
+newCreatePackagingGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreatePackagingGroupResponse
+newCreatePackagingGroupResponse pHttpStatus_ =
+  CreatePackagingGroupResponse'
+    { arn =
+        Prelude.Nothing,
+      authorization = Prelude.Nothing,
+      domainName = Prelude.Nothing,
+      egressAccessLogs = Prelude.Nothing,
+      id = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the PackagingGroup.
+createPackagingGroupResponse_arn :: Lens.Lens' CreatePackagingGroupResponse (Prelude.Maybe Prelude.Text)
+createPackagingGroupResponse_arn = Lens.lens (\CreatePackagingGroupResponse' {arn} -> arn) (\s@CreatePackagingGroupResponse' {} a -> s {arn = a} :: CreatePackagingGroupResponse)
+
+-- | Undocumented member.
+createPackagingGroupResponse_authorization :: Lens.Lens' CreatePackagingGroupResponse (Prelude.Maybe Authorization)
+createPackagingGroupResponse_authorization = Lens.lens (\CreatePackagingGroupResponse' {authorization} -> authorization) (\s@CreatePackagingGroupResponse' {} a -> s {authorization = a} :: CreatePackagingGroupResponse)
+
+-- | The fully qualified domain name for Assets in the PackagingGroup.
+createPackagingGroupResponse_domainName :: Lens.Lens' CreatePackagingGroupResponse (Prelude.Maybe Prelude.Text)
+createPackagingGroupResponse_domainName = Lens.lens (\CreatePackagingGroupResponse' {domainName} -> domainName) (\s@CreatePackagingGroupResponse' {} a -> s {domainName = a} :: CreatePackagingGroupResponse)
+
+-- | Undocumented member.
+createPackagingGroupResponse_egressAccessLogs :: Lens.Lens' CreatePackagingGroupResponse (Prelude.Maybe EgressAccessLogs)
+createPackagingGroupResponse_egressAccessLogs = Lens.lens (\CreatePackagingGroupResponse' {egressAccessLogs} -> egressAccessLogs) (\s@CreatePackagingGroupResponse' {} a -> s {egressAccessLogs = a} :: CreatePackagingGroupResponse)
+
+-- | The ID of the PackagingGroup.
+createPackagingGroupResponse_id :: Lens.Lens' CreatePackagingGroupResponse (Prelude.Maybe Prelude.Text)
+createPackagingGroupResponse_id = Lens.lens (\CreatePackagingGroupResponse' {id} -> id) (\s@CreatePackagingGroupResponse' {} a -> s {id = a} :: CreatePackagingGroupResponse)
+
+-- | Undocumented member.
+createPackagingGroupResponse_tags :: Lens.Lens' CreatePackagingGroupResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createPackagingGroupResponse_tags = Lens.lens (\CreatePackagingGroupResponse' {tags} -> tags) (\s@CreatePackagingGroupResponse' {} a -> s {tags = a} :: CreatePackagingGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createPackagingGroupResponse_httpStatus :: Lens.Lens' CreatePackagingGroupResponse Prelude.Int
+createPackagingGroupResponse_httpStatus = Lens.lens (\CreatePackagingGroupResponse' {httpStatus} -> httpStatus) (\s@CreatePackagingGroupResponse' {} a -> s {httpStatus = a} :: CreatePackagingGroupResponse)
+
+instance Prelude.NFData CreatePackagingGroupResponse where
+  rnf CreatePackagingGroupResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf authorization
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf egressAccessLogs
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaPackageVOD/DeleteAsset.hs b/gen/Amazonka/MediaPackageVOD/DeleteAsset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/DeleteAsset.hs
@@ -0,0 +1,139 @@
+{-# 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.MediaPackageVOD.DeleteAsset
+-- 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 an existing MediaPackage VOD Asset resource.
+module Amazonka.MediaPackageVOD.DeleteAsset
+  ( -- * Creating a Request
+    DeleteAsset (..),
+    newDeleteAsset,
+
+    -- * Request Lenses
+    deleteAsset_id,
+
+    -- * Destructuring the Response
+    DeleteAssetResponse (..),
+    newDeleteAssetResponse,
+
+    -- * Response Lenses
+    deleteAssetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteAsset' smart constructor.
+data DeleteAsset = DeleteAsset'
+  { -- | The ID of the MediaPackage VOD Asset resource to delete.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAsset' 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:
+--
+-- 'id', 'deleteAsset_id' - The ID of the MediaPackage VOD Asset resource to delete.
+newDeleteAsset ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteAsset
+newDeleteAsset pId_ = DeleteAsset' {id = pId_}
+
+-- | The ID of the MediaPackage VOD Asset resource to delete.
+deleteAsset_id :: Lens.Lens' DeleteAsset Prelude.Text
+deleteAsset_id = Lens.lens (\DeleteAsset' {id} -> id) (\s@DeleteAsset' {} a -> s {id = a} :: DeleteAsset)
+
+instance Core.AWSRequest DeleteAsset where
+  type AWSResponse DeleteAsset = DeleteAssetResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteAssetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteAsset where
+  hashWithSalt _salt DeleteAsset' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteAsset where
+  rnf DeleteAsset' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteAsset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteAsset where
+  toPath DeleteAsset' {..} =
+    Prelude.mconcat ["/assets/", Data.toBS id]
+
+instance Data.ToQuery DeleteAsset where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAssetResponse' smart constructor.
+data DeleteAssetResponse = DeleteAssetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAssetResponse' 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', 'deleteAssetResponse_httpStatus' - The response's http status code.
+newDeleteAssetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAssetResponse
+newDeleteAssetResponse pHttpStatus_ =
+  DeleteAssetResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteAssetResponse_httpStatus :: Lens.Lens' DeleteAssetResponse Prelude.Int
+deleteAssetResponse_httpStatus = Lens.lens (\DeleteAssetResponse' {httpStatus} -> httpStatus) (\s@DeleteAssetResponse' {} a -> s {httpStatus = a} :: DeleteAssetResponse)
+
+instance Prelude.NFData DeleteAssetResponse where
+  rnf DeleteAssetResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaPackageVOD/DeletePackagingConfiguration.hs b/gen/Amazonka/MediaPackageVOD/DeletePackagingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/DeletePackagingConfiguration.hs
@@ -0,0 +1,157 @@
+{-# 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.MediaPackageVOD.DeletePackagingConfiguration
+-- 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 MediaPackage VOD PackagingConfiguration resource.
+module Amazonka.MediaPackageVOD.DeletePackagingConfiguration
+  ( -- * Creating a Request
+    DeletePackagingConfiguration (..),
+    newDeletePackagingConfiguration,
+
+    -- * Request Lenses
+    deletePackagingConfiguration_id,
+
+    -- * Destructuring the Response
+    DeletePackagingConfigurationResponse (..),
+    newDeletePackagingConfigurationResponse,
+
+    -- * Response Lenses
+    deletePackagingConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeletePackagingConfiguration' smart constructor.
+data DeletePackagingConfiguration = DeletePackagingConfiguration'
+  { -- | The ID of the MediaPackage VOD PackagingConfiguration resource to
+    -- delete.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePackagingConfiguration' 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:
+--
+-- 'id', 'deletePackagingConfiguration_id' - The ID of the MediaPackage VOD PackagingConfiguration resource to
+-- delete.
+newDeletePackagingConfiguration ::
+  -- | 'id'
+  Prelude.Text ->
+  DeletePackagingConfiguration
+newDeletePackagingConfiguration pId_ =
+  DeletePackagingConfiguration' {id = pId_}
+
+-- | The ID of the MediaPackage VOD PackagingConfiguration resource to
+-- delete.
+deletePackagingConfiguration_id :: Lens.Lens' DeletePackagingConfiguration Prelude.Text
+deletePackagingConfiguration_id = Lens.lens (\DeletePackagingConfiguration' {id} -> id) (\s@DeletePackagingConfiguration' {} a -> s {id = a} :: DeletePackagingConfiguration)
+
+instance Core.AWSRequest DeletePackagingConfiguration where
+  type
+    AWSResponse DeletePackagingConfiguration =
+      DeletePackagingConfigurationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeletePackagingConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeletePackagingConfiguration
+  where
+  hashWithSalt _salt DeletePackagingConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeletePackagingConfiguration where
+  rnf DeletePackagingConfiguration' {..} =
+    Prelude.rnf id
+
+instance Data.ToHeaders DeletePackagingConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeletePackagingConfiguration where
+  toPath DeletePackagingConfiguration' {..} =
+    Prelude.mconcat
+      ["/packaging_configurations/", Data.toBS id]
+
+instance Data.ToQuery DeletePackagingConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeletePackagingConfigurationResponse' smart constructor.
+data DeletePackagingConfigurationResponse = DeletePackagingConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePackagingConfigurationResponse' 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', 'deletePackagingConfigurationResponse_httpStatus' - The response's http status code.
+newDeletePackagingConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeletePackagingConfigurationResponse
+newDeletePackagingConfigurationResponse pHttpStatus_ =
+  DeletePackagingConfigurationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deletePackagingConfigurationResponse_httpStatus :: Lens.Lens' DeletePackagingConfigurationResponse Prelude.Int
+deletePackagingConfigurationResponse_httpStatus = Lens.lens (\DeletePackagingConfigurationResponse' {httpStatus} -> httpStatus) (\s@DeletePackagingConfigurationResponse' {} a -> s {httpStatus = a} :: DeletePackagingConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DeletePackagingConfigurationResponse
+  where
+  rnf DeletePackagingConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaPackageVOD/DeletePackagingGroup.hs b/gen/Amazonka/MediaPackageVOD/DeletePackagingGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/DeletePackagingGroup.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.MediaPackageVOD.DeletePackagingGroup
+-- 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 MediaPackage VOD PackagingGroup resource.
+module Amazonka.MediaPackageVOD.DeletePackagingGroup
+  ( -- * Creating a Request
+    DeletePackagingGroup (..),
+    newDeletePackagingGroup,
+
+    -- * Request Lenses
+    deletePackagingGroup_id,
+
+    -- * Destructuring the Response
+    DeletePackagingGroupResponse (..),
+    newDeletePackagingGroupResponse,
+
+    -- * Response Lenses
+    deletePackagingGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeletePackagingGroup' smart constructor.
+data DeletePackagingGroup = DeletePackagingGroup'
+  { -- | The ID of the MediaPackage VOD PackagingGroup resource to delete.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePackagingGroup' 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:
+--
+-- 'id', 'deletePackagingGroup_id' - The ID of the MediaPackage VOD PackagingGroup resource to delete.
+newDeletePackagingGroup ::
+  -- | 'id'
+  Prelude.Text ->
+  DeletePackagingGroup
+newDeletePackagingGroup pId_ =
+  DeletePackagingGroup' {id = pId_}
+
+-- | The ID of the MediaPackage VOD PackagingGroup resource to delete.
+deletePackagingGroup_id :: Lens.Lens' DeletePackagingGroup Prelude.Text
+deletePackagingGroup_id = Lens.lens (\DeletePackagingGroup' {id} -> id) (\s@DeletePackagingGroup' {} a -> s {id = a} :: DeletePackagingGroup)
+
+instance Core.AWSRequest DeletePackagingGroup where
+  type
+    AWSResponse DeletePackagingGroup =
+      DeletePackagingGroupResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeletePackagingGroupResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeletePackagingGroup where
+  hashWithSalt _salt DeletePackagingGroup' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeletePackagingGroup where
+  rnf DeletePackagingGroup' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeletePackagingGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeletePackagingGroup where
+  toPath DeletePackagingGroup' {..} =
+    Prelude.mconcat
+      ["/packaging_groups/", Data.toBS id]
+
+instance Data.ToQuery DeletePackagingGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeletePackagingGroupResponse' smart constructor.
+data DeletePackagingGroupResponse = DeletePackagingGroupResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePackagingGroupResponse' 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', 'deletePackagingGroupResponse_httpStatus' - The response's http status code.
+newDeletePackagingGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeletePackagingGroupResponse
+newDeletePackagingGroupResponse pHttpStatus_ =
+  DeletePackagingGroupResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deletePackagingGroupResponse_httpStatus :: Lens.Lens' DeletePackagingGroupResponse Prelude.Int
+deletePackagingGroupResponse_httpStatus = Lens.lens (\DeletePackagingGroupResponse' {httpStatus} -> httpStatus) (\s@DeletePackagingGroupResponse' {} a -> s {httpStatus = a} :: DeletePackagingGroupResponse)
+
+instance Prelude.NFData DeletePackagingGroupResponse where
+  rnf DeletePackagingGroupResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaPackageVOD/DescribeAsset.hs b/gen/Amazonka/MediaPackageVOD/DescribeAsset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/DescribeAsset.hs
@@ -0,0 +1,254 @@
+{-# 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.MediaPackageVOD.DescribeAsset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a description of a MediaPackage VOD Asset resource.
+module Amazonka.MediaPackageVOD.DescribeAsset
+  ( -- * Creating a Request
+    DescribeAsset (..),
+    newDescribeAsset,
+
+    -- * Request Lenses
+    describeAsset_id,
+
+    -- * Destructuring the Response
+    DescribeAssetResponse (..),
+    newDescribeAssetResponse,
+
+    -- * Response Lenses
+    describeAssetResponse_arn,
+    describeAssetResponse_createdAt,
+    describeAssetResponse_egressEndpoints,
+    describeAssetResponse_id,
+    describeAssetResponse_packagingGroupId,
+    describeAssetResponse_resourceId,
+    describeAssetResponse_sourceArn,
+    describeAssetResponse_sourceRoleArn,
+    describeAssetResponse_tags,
+    describeAssetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAsset' smart constructor.
+data DescribeAsset = DescribeAsset'
+  { -- | The ID of an MediaPackage VOD Asset resource.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAsset' 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:
+--
+-- 'id', 'describeAsset_id' - The ID of an MediaPackage VOD Asset resource.
+newDescribeAsset ::
+  -- | 'id'
+  Prelude.Text ->
+  DescribeAsset
+newDescribeAsset pId_ = DescribeAsset' {id = pId_}
+
+-- | The ID of an MediaPackage VOD Asset resource.
+describeAsset_id :: Lens.Lens' DescribeAsset Prelude.Text
+describeAsset_id = Lens.lens (\DescribeAsset' {id} -> id) (\s@DescribeAsset' {} a -> s {id = a} :: DescribeAsset)
+
+instance Core.AWSRequest DescribeAsset where
+  type
+    AWSResponse DescribeAsset =
+      DescribeAssetResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAssetResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "createdAt")
+            Prelude.<*> ( x
+                            Data..?> "egressEndpoints"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "packagingGroupId")
+            Prelude.<*> (x Data..?> "resourceId")
+            Prelude.<*> (x Data..?> "sourceArn")
+            Prelude.<*> (x Data..?> "sourceRoleArn")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAsset where
+  hashWithSalt _salt DescribeAsset' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DescribeAsset where
+  rnf DescribeAsset' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DescribeAsset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeAsset where
+  toPath DescribeAsset' {..} =
+    Prelude.mconcat ["/assets/", Data.toBS id]
+
+instance Data.ToQuery DescribeAsset where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAssetResponse' smart constructor.
+data DescribeAssetResponse = DescribeAssetResponse'
+  { -- | The ARN of the Asset.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time the Asset was initially submitted for Ingest.
+    createdAt :: Prelude.Maybe Prelude.Text,
+    -- | The list of egress endpoints available for the Asset.
+    egressEndpoints :: Prelude.Maybe [EgressEndpoint],
+    -- | The unique identifier for the Asset.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the PackagingGroup for the Asset.
+    packagingGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The resource ID to include in SPEKE key requests.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | ARN of the source object in S3.
+    sourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The IAM role_arn used to access the source S3 bucket.
+    sourceRoleArn :: Prelude.Maybe Prelude.Text,
+    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 'DescribeAssetResponse' 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', 'describeAssetResponse_arn' - The ARN of the Asset.
+--
+-- 'createdAt', 'describeAssetResponse_createdAt' - The time the Asset was initially submitted for Ingest.
+--
+-- 'egressEndpoints', 'describeAssetResponse_egressEndpoints' - The list of egress endpoints available for the Asset.
+--
+-- 'id', 'describeAssetResponse_id' - The unique identifier for the Asset.
+--
+-- 'packagingGroupId', 'describeAssetResponse_packagingGroupId' - The ID of the PackagingGroup for the Asset.
+--
+-- 'resourceId', 'describeAssetResponse_resourceId' - The resource ID to include in SPEKE key requests.
+--
+-- 'sourceArn', 'describeAssetResponse_sourceArn' - ARN of the source object in S3.
+--
+-- 'sourceRoleArn', 'describeAssetResponse_sourceRoleArn' - The IAM role_arn used to access the source S3 bucket.
+--
+-- 'tags', 'describeAssetResponse_tags' - Undocumented member.
+--
+-- 'httpStatus', 'describeAssetResponse_httpStatus' - The response's http status code.
+newDescribeAssetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAssetResponse
+newDescribeAssetResponse pHttpStatus_ =
+  DescribeAssetResponse'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      egressEndpoints = Prelude.Nothing,
+      id = Prelude.Nothing,
+      packagingGroupId = Prelude.Nothing,
+      resourceId = Prelude.Nothing,
+      sourceArn = Prelude.Nothing,
+      sourceRoleArn = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the Asset.
+describeAssetResponse_arn :: Lens.Lens' DescribeAssetResponse (Prelude.Maybe Prelude.Text)
+describeAssetResponse_arn = Lens.lens (\DescribeAssetResponse' {arn} -> arn) (\s@DescribeAssetResponse' {} a -> s {arn = a} :: DescribeAssetResponse)
+
+-- | The time the Asset was initially submitted for Ingest.
+describeAssetResponse_createdAt :: Lens.Lens' DescribeAssetResponse (Prelude.Maybe Prelude.Text)
+describeAssetResponse_createdAt = Lens.lens (\DescribeAssetResponse' {createdAt} -> createdAt) (\s@DescribeAssetResponse' {} a -> s {createdAt = a} :: DescribeAssetResponse)
+
+-- | The list of egress endpoints available for the Asset.
+describeAssetResponse_egressEndpoints :: Lens.Lens' DescribeAssetResponse (Prelude.Maybe [EgressEndpoint])
+describeAssetResponse_egressEndpoints = Lens.lens (\DescribeAssetResponse' {egressEndpoints} -> egressEndpoints) (\s@DescribeAssetResponse' {} a -> s {egressEndpoints = a} :: DescribeAssetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique identifier for the Asset.
+describeAssetResponse_id :: Lens.Lens' DescribeAssetResponse (Prelude.Maybe Prelude.Text)
+describeAssetResponse_id = Lens.lens (\DescribeAssetResponse' {id} -> id) (\s@DescribeAssetResponse' {} a -> s {id = a} :: DescribeAssetResponse)
+
+-- | The ID of the PackagingGroup for the Asset.
+describeAssetResponse_packagingGroupId :: Lens.Lens' DescribeAssetResponse (Prelude.Maybe Prelude.Text)
+describeAssetResponse_packagingGroupId = Lens.lens (\DescribeAssetResponse' {packagingGroupId} -> packagingGroupId) (\s@DescribeAssetResponse' {} a -> s {packagingGroupId = a} :: DescribeAssetResponse)
+
+-- | The resource ID to include in SPEKE key requests.
+describeAssetResponse_resourceId :: Lens.Lens' DescribeAssetResponse (Prelude.Maybe Prelude.Text)
+describeAssetResponse_resourceId = Lens.lens (\DescribeAssetResponse' {resourceId} -> resourceId) (\s@DescribeAssetResponse' {} a -> s {resourceId = a} :: DescribeAssetResponse)
+
+-- | ARN of the source object in S3.
+describeAssetResponse_sourceArn :: Lens.Lens' DescribeAssetResponse (Prelude.Maybe Prelude.Text)
+describeAssetResponse_sourceArn = Lens.lens (\DescribeAssetResponse' {sourceArn} -> sourceArn) (\s@DescribeAssetResponse' {} a -> s {sourceArn = a} :: DescribeAssetResponse)
+
+-- | The IAM role_arn used to access the source S3 bucket.
+describeAssetResponse_sourceRoleArn :: Lens.Lens' DescribeAssetResponse (Prelude.Maybe Prelude.Text)
+describeAssetResponse_sourceRoleArn = Lens.lens (\DescribeAssetResponse' {sourceRoleArn} -> sourceRoleArn) (\s@DescribeAssetResponse' {} a -> s {sourceRoleArn = a} :: DescribeAssetResponse)
+
+-- | Undocumented member.
+describeAssetResponse_tags :: Lens.Lens' DescribeAssetResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeAssetResponse_tags = Lens.lens (\DescribeAssetResponse' {tags} -> tags) (\s@DescribeAssetResponse' {} a -> s {tags = a} :: DescribeAssetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeAssetResponse_httpStatus :: Lens.Lens' DescribeAssetResponse Prelude.Int
+describeAssetResponse_httpStatus = Lens.lens (\DescribeAssetResponse' {httpStatus} -> httpStatus) (\s@DescribeAssetResponse' {} a -> s {httpStatus = a} :: DescribeAssetResponse)
+
+instance Prelude.NFData DescribeAssetResponse where
+  rnf DescribeAssetResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf egressEndpoints
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf packagingGroupId
+      `Prelude.seq` Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf sourceArn
+      `Prelude.seq` Prelude.rnf sourceRoleArn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaPackageVOD/DescribePackagingConfiguration.hs b/gen/Amazonka/MediaPackageVOD/DescribePackagingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/DescribePackagingConfiguration.hs
@@ -0,0 +1,258 @@
+{-# 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.MediaPackageVOD.DescribePackagingConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a description of a MediaPackage VOD PackagingConfiguration
+-- resource.
+module Amazonka.MediaPackageVOD.DescribePackagingConfiguration
+  ( -- * Creating a Request
+    DescribePackagingConfiguration (..),
+    newDescribePackagingConfiguration,
+
+    -- * Request Lenses
+    describePackagingConfiguration_id,
+
+    -- * Destructuring the Response
+    DescribePackagingConfigurationResponse (..),
+    newDescribePackagingConfigurationResponse,
+
+    -- * Response Lenses
+    describePackagingConfigurationResponse_arn,
+    describePackagingConfigurationResponse_cmafPackage,
+    describePackagingConfigurationResponse_dashPackage,
+    describePackagingConfigurationResponse_hlsPackage,
+    describePackagingConfigurationResponse_id,
+    describePackagingConfigurationResponse_mssPackage,
+    describePackagingConfigurationResponse_packagingGroupId,
+    describePackagingConfigurationResponse_tags,
+    describePackagingConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribePackagingConfiguration' smart constructor.
+data DescribePackagingConfiguration = DescribePackagingConfiguration'
+  { -- | The ID of a MediaPackage VOD PackagingConfiguration resource.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePackagingConfiguration' 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:
+--
+-- 'id', 'describePackagingConfiguration_id' - The ID of a MediaPackage VOD PackagingConfiguration resource.
+newDescribePackagingConfiguration ::
+  -- | 'id'
+  Prelude.Text ->
+  DescribePackagingConfiguration
+newDescribePackagingConfiguration pId_ =
+  DescribePackagingConfiguration' {id = pId_}
+
+-- | The ID of a MediaPackage VOD PackagingConfiguration resource.
+describePackagingConfiguration_id :: Lens.Lens' DescribePackagingConfiguration Prelude.Text
+describePackagingConfiguration_id = Lens.lens (\DescribePackagingConfiguration' {id} -> id) (\s@DescribePackagingConfiguration' {} a -> s {id = a} :: DescribePackagingConfiguration)
+
+instance
+  Core.AWSRequest
+    DescribePackagingConfiguration
+  where
+  type
+    AWSResponse DescribePackagingConfiguration =
+      DescribePackagingConfigurationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribePackagingConfigurationResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "cmafPackage")
+            Prelude.<*> (x Data..?> "dashPackage")
+            Prelude.<*> (x Data..?> "hlsPackage")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "mssPackage")
+            Prelude.<*> (x Data..?> "packagingGroupId")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribePackagingConfiguration
+  where
+  hashWithSalt
+    _salt
+    DescribePackagingConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    DescribePackagingConfiguration
+  where
+  rnf DescribePackagingConfiguration' {..} =
+    Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    DescribePackagingConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribePackagingConfiguration where
+  toPath DescribePackagingConfiguration' {..} =
+    Prelude.mconcat
+      ["/packaging_configurations/", Data.toBS id]
+
+instance Data.ToQuery DescribePackagingConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribePackagingConfigurationResponse' smart constructor.
+data DescribePackagingConfigurationResponse = DescribePackagingConfigurationResponse'
+  { -- | The ARN of the PackagingConfiguration.
+    arn :: Prelude.Maybe Prelude.Text,
+    cmafPackage :: Prelude.Maybe CmafPackage,
+    dashPackage :: Prelude.Maybe DashPackage,
+    hlsPackage :: Prelude.Maybe HlsPackage,
+    -- | The ID of the PackagingConfiguration.
+    id :: Prelude.Maybe Prelude.Text,
+    mssPackage :: Prelude.Maybe MssPackage,
+    -- | The ID of a PackagingGroup.
+    packagingGroupId :: Prelude.Maybe Prelude.Text,
+    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 'DescribePackagingConfigurationResponse' 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', 'describePackagingConfigurationResponse_arn' - The ARN of the PackagingConfiguration.
+--
+-- 'cmafPackage', 'describePackagingConfigurationResponse_cmafPackage' - Undocumented member.
+--
+-- 'dashPackage', 'describePackagingConfigurationResponse_dashPackage' - Undocumented member.
+--
+-- 'hlsPackage', 'describePackagingConfigurationResponse_hlsPackage' - Undocumented member.
+--
+-- 'id', 'describePackagingConfigurationResponse_id' - The ID of the PackagingConfiguration.
+--
+-- 'mssPackage', 'describePackagingConfigurationResponse_mssPackage' - Undocumented member.
+--
+-- 'packagingGroupId', 'describePackagingConfigurationResponse_packagingGroupId' - The ID of a PackagingGroup.
+--
+-- 'tags', 'describePackagingConfigurationResponse_tags' - Undocumented member.
+--
+-- 'httpStatus', 'describePackagingConfigurationResponse_httpStatus' - The response's http status code.
+newDescribePackagingConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribePackagingConfigurationResponse
+newDescribePackagingConfigurationResponse
+  pHttpStatus_ =
+    DescribePackagingConfigurationResponse'
+      { arn =
+          Prelude.Nothing,
+        cmafPackage = Prelude.Nothing,
+        dashPackage = Prelude.Nothing,
+        hlsPackage = Prelude.Nothing,
+        id = Prelude.Nothing,
+        mssPackage = Prelude.Nothing,
+        packagingGroupId = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The ARN of the PackagingConfiguration.
+describePackagingConfigurationResponse_arn :: Lens.Lens' DescribePackagingConfigurationResponse (Prelude.Maybe Prelude.Text)
+describePackagingConfigurationResponse_arn = Lens.lens (\DescribePackagingConfigurationResponse' {arn} -> arn) (\s@DescribePackagingConfigurationResponse' {} a -> s {arn = a} :: DescribePackagingConfigurationResponse)
+
+-- | Undocumented member.
+describePackagingConfigurationResponse_cmafPackage :: Lens.Lens' DescribePackagingConfigurationResponse (Prelude.Maybe CmafPackage)
+describePackagingConfigurationResponse_cmafPackage = Lens.lens (\DescribePackagingConfigurationResponse' {cmafPackage} -> cmafPackage) (\s@DescribePackagingConfigurationResponse' {} a -> s {cmafPackage = a} :: DescribePackagingConfigurationResponse)
+
+-- | Undocumented member.
+describePackagingConfigurationResponse_dashPackage :: Lens.Lens' DescribePackagingConfigurationResponse (Prelude.Maybe DashPackage)
+describePackagingConfigurationResponse_dashPackage = Lens.lens (\DescribePackagingConfigurationResponse' {dashPackage} -> dashPackage) (\s@DescribePackagingConfigurationResponse' {} a -> s {dashPackage = a} :: DescribePackagingConfigurationResponse)
+
+-- | Undocumented member.
+describePackagingConfigurationResponse_hlsPackage :: Lens.Lens' DescribePackagingConfigurationResponse (Prelude.Maybe HlsPackage)
+describePackagingConfigurationResponse_hlsPackage = Lens.lens (\DescribePackagingConfigurationResponse' {hlsPackage} -> hlsPackage) (\s@DescribePackagingConfigurationResponse' {} a -> s {hlsPackage = a} :: DescribePackagingConfigurationResponse)
+
+-- | The ID of the PackagingConfiguration.
+describePackagingConfigurationResponse_id :: Lens.Lens' DescribePackagingConfigurationResponse (Prelude.Maybe Prelude.Text)
+describePackagingConfigurationResponse_id = Lens.lens (\DescribePackagingConfigurationResponse' {id} -> id) (\s@DescribePackagingConfigurationResponse' {} a -> s {id = a} :: DescribePackagingConfigurationResponse)
+
+-- | Undocumented member.
+describePackagingConfigurationResponse_mssPackage :: Lens.Lens' DescribePackagingConfigurationResponse (Prelude.Maybe MssPackage)
+describePackagingConfigurationResponse_mssPackage = Lens.lens (\DescribePackagingConfigurationResponse' {mssPackage} -> mssPackage) (\s@DescribePackagingConfigurationResponse' {} a -> s {mssPackage = a} :: DescribePackagingConfigurationResponse)
+
+-- | The ID of a PackagingGroup.
+describePackagingConfigurationResponse_packagingGroupId :: Lens.Lens' DescribePackagingConfigurationResponse (Prelude.Maybe Prelude.Text)
+describePackagingConfigurationResponse_packagingGroupId = Lens.lens (\DescribePackagingConfigurationResponse' {packagingGroupId} -> packagingGroupId) (\s@DescribePackagingConfigurationResponse' {} a -> s {packagingGroupId = a} :: DescribePackagingConfigurationResponse)
+
+-- | Undocumented member.
+describePackagingConfigurationResponse_tags :: Lens.Lens' DescribePackagingConfigurationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describePackagingConfigurationResponse_tags = Lens.lens (\DescribePackagingConfigurationResponse' {tags} -> tags) (\s@DescribePackagingConfigurationResponse' {} a -> s {tags = a} :: DescribePackagingConfigurationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describePackagingConfigurationResponse_httpStatus :: Lens.Lens' DescribePackagingConfigurationResponse Prelude.Int
+describePackagingConfigurationResponse_httpStatus = Lens.lens (\DescribePackagingConfigurationResponse' {httpStatus} -> httpStatus) (\s@DescribePackagingConfigurationResponse' {} a -> s {httpStatus = a} :: DescribePackagingConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DescribePackagingConfigurationResponse
+  where
+  rnf DescribePackagingConfigurationResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf cmafPackage
+      `Prelude.seq` Prelude.rnf dashPackage
+      `Prelude.seq` Prelude.rnf hlsPackage
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf mssPackage
+      `Prelude.seq` Prelude.rnf packagingGroupId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaPackageVOD/DescribePackagingGroup.hs b/gen/Amazonka/MediaPackageVOD/DescribePackagingGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/DescribePackagingGroup.hs
@@ -0,0 +1,231 @@
+{-# 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.MediaPackageVOD.DescribePackagingGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a description of a MediaPackage VOD PackagingGroup resource.
+module Amazonka.MediaPackageVOD.DescribePackagingGroup
+  ( -- * Creating a Request
+    DescribePackagingGroup (..),
+    newDescribePackagingGroup,
+
+    -- * Request Lenses
+    describePackagingGroup_id,
+
+    -- * Destructuring the Response
+    DescribePackagingGroupResponse (..),
+    newDescribePackagingGroupResponse,
+
+    -- * Response Lenses
+    describePackagingGroupResponse_approximateAssetCount,
+    describePackagingGroupResponse_arn,
+    describePackagingGroupResponse_authorization,
+    describePackagingGroupResponse_domainName,
+    describePackagingGroupResponse_egressAccessLogs,
+    describePackagingGroupResponse_id,
+    describePackagingGroupResponse_tags,
+    describePackagingGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribePackagingGroup' smart constructor.
+data DescribePackagingGroup = DescribePackagingGroup'
+  { -- | The ID of a MediaPackage VOD PackagingGroup resource.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePackagingGroup' 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:
+--
+-- 'id', 'describePackagingGroup_id' - The ID of a MediaPackage VOD PackagingGroup resource.
+newDescribePackagingGroup ::
+  -- | 'id'
+  Prelude.Text ->
+  DescribePackagingGroup
+newDescribePackagingGroup pId_ =
+  DescribePackagingGroup' {id = pId_}
+
+-- | The ID of a MediaPackage VOD PackagingGroup resource.
+describePackagingGroup_id :: Lens.Lens' DescribePackagingGroup Prelude.Text
+describePackagingGroup_id = Lens.lens (\DescribePackagingGroup' {id} -> id) (\s@DescribePackagingGroup' {} a -> s {id = a} :: DescribePackagingGroup)
+
+instance Core.AWSRequest DescribePackagingGroup where
+  type
+    AWSResponse DescribePackagingGroup =
+      DescribePackagingGroupResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribePackagingGroupResponse'
+            Prelude.<$> (x Data..?> "approximateAssetCount")
+            Prelude.<*> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "authorization")
+            Prelude.<*> (x Data..?> "domainName")
+            Prelude.<*> (x Data..?> "egressAccessLogs")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribePackagingGroup where
+  hashWithSalt _salt DescribePackagingGroup' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DescribePackagingGroup where
+  rnf DescribePackagingGroup' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DescribePackagingGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribePackagingGroup where
+  toPath DescribePackagingGroup' {..} =
+    Prelude.mconcat
+      ["/packaging_groups/", Data.toBS id]
+
+instance Data.ToQuery DescribePackagingGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribePackagingGroupResponse' smart constructor.
+data DescribePackagingGroupResponse = DescribePackagingGroupResponse'
+  { -- | The approximate asset count of the PackagingGroup.
+    approximateAssetCount :: Prelude.Maybe Prelude.Int,
+    -- | The ARN of the PackagingGroup.
+    arn :: Prelude.Maybe Prelude.Text,
+    authorization :: Prelude.Maybe Authorization,
+    -- | The fully qualified domain name for Assets in the PackagingGroup.
+    domainName :: Prelude.Maybe Prelude.Text,
+    egressAccessLogs :: Prelude.Maybe EgressAccessLogs,
+    -- | The ID of the PackagingGroup.
+    id :: Prelude.Maybe Prelude.Text,
+    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 'DescribePackagingGroupResponse' 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:
+--
+-- 'approximateAssetCount', 'describePackagingGroupResponse_approximateAssetCount' - The approximate asset count of the PackagingGroup.
+--
+-- 'arn', 'describePackagingGroupResponse_arn' - The ARN of the PackagingGroup.
+--
+-- 'authorization', 'describePackagingGroupResponse_authorization' - Undocumented member.
+--
+-- 'domainName', 'describePackagingGroupResponse_domainName' - The fully qualified domain name for Assets in the PackagingGroup.
+--
+-- 'egressAccessLogs', 'describePackagingGroupResponse_egressAccessLogs' - Undocumented member.
+--
+-- 'id', 'describePackagingGroupResponse_id' - The ID of the PackagingGroup.
+--
+-- 'tags', 'describePackagingGroupResponse_tags' - Undocumented member.
+--
+-- 'httpStatus', 'describePackagingGroupResponse_httpStatus' - The response's http status code.
+newDescribePackagingGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribePackagingGroupResponse
+newDescribePackagingGroupResponse pHttpStatus_ =
+  DescribePackagingGroupResponse'
+    { approximateAssetCount =
+        Prelude.Nothing,
+      arn = Prelude.Nothing,
+      authorization = Prelude.Nothing,
+      domainName = Prelude.Nothing,
+      egressAccessLogs = Prelude.Nothing,
+      id = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The approximate asset count of the PackagingGroup.
+describePackagingGroupResponse_approximateAssetCount :: Lens.Lens' DescribePackagingGroupResponse (Prelude.Maybe Prelude.Int)
+describePackagingGroupResponse_approximateAssetCount = Lens.lens (\DescribePackagingGroupResponse' {approximateAssetCount} -> approximateAssetCount) (\s@DescribePackagingGroupResponse' {} a -> s {approximateAssetCount = a} :: DescribePackagingGroupResponse)
+
+-- | The ARN of the PackagingGroup.
+describePackagingGroupResponse_arn :: Lens.Lens' DescribePackagingGroupResponse (Prelude.Maybe Prelude.Text)
+describePackagingGroupResponse_arn = Lens.lens (\DescribePackagingGroupResponse' {arn} -> arn) (\s@DescribePackagingGroupResponse' {} a -> s {arn = a} :: DescribePackagingGroupResponse)
+
+-- | Undocumented member.
+describePackagingGroupResponse_authorization :: Lens.Lens' DescribePackagingGroupResponse (Prelude.Maybe Authorization)
+describePackagingGroupResponse_authorization = Lens.lens (\DescribePackagingGroupResponse' {authorization} -> authorization) (\s@DescribePackagingGroupResponse' {} a -> s {authorization = a} :: DescribePackagingGroupResponse)
+
+-- | The fully qualified domain name for Assets in the PackagingGroup.
+describePackagingGroupResponse_domainName :: Lens.Lens' DescribePackagingGroupResponse (Prelude.Maybe Prelude.Text)
+describePackagingGroupResponse_domainName = Lens.lens (\DescribePackagingGroupResponse' {domainName} -> domainName) (\s@DescribePackagingGroupResponse' {} a -> s {domainName = a} :: DescribePackagingGroupResponse)
+
+-- | Undocumented member.
+describePackagingGroupResponse_egressAccessLogs :: Lens.Lens' DescribePackagingGroupResponse (Prelude.Maybe EgressAccessLogs)
+describePackagingGroupResponse_egressAccessLogs = Lens.lens (\DescribePackagingGroupResponse' {egressAccessLogs} -> egressAccessLogs) (\s@DescribePackagingGroupResponse' {} a -> s {egressAccessLogs = a} :: DescribePackagingGroupResponse)
+
+-- | The ID of the PackagingGroup.
+describePackagingGroupResponse_id :: Lens.Lens' DescribePackagingGroupResponse (Prelude.Maybe Prelude.Text)
+describePackagingGroupResponse_id = Lens.lens (\DescribePackagingGroupResponse' {id} -> id) (\s@DescribePackagingGroupResponse' {} a -> s {id = a} :: DescribePackagingGroupResponse)
+
+-- | Undocumented member.
+describePackagingGroupResponse_tags :: Lens.Lens' DescribePackagingGroupResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describePackagingGroupResponse_tags = Lens.lens (\DescribePackagingGroupResponse' {tags} -> tags) (\s@DescribePackagingGroupResponse' {} a -> s {tags = a} :: DescribePackagingGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describePackagingGroupResponse_httpStatus :: Lens.Lens' DescribePackagingGroupResponse Prelude.Int
+describePackagingGroupResponse_httpStatus = Lens.lens (\DescribePackagingGroupResponse' {httpStatus} -> httpStatus) (\s@DescribePackagingGroupResponse' {} a -> s {httpStatus = a} :: DescribePackagingGroupResponse)
+
+instance
+  Prelude.NFData
+    DescribePackagingGroupResponse
+  where
+  rnf DescribePackagingGroupResponse' {..} =
+    Prelude.rnf approximateAssetCount
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf authorization
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf egressAccessLogs
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaPackageVOD/Lens.hs b/gen/Amazonka/MediaPackageVOD/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Lens.hs
@@ -0,0 +1,331 @@
+{-# 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.MediaPackageVOD.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.MediaPackageVOD.Lens
+  ( -- * Operations
+
+    -- ** ConfigureLogs
+    configureLogs_egressAccessLogs,
+    configureLogs_id,
+    configureLogsResponse_arn,
+    configureLogsResponse_authorization,
+    configureLogsResponse_domainName,
+    configureLogsResponse_egressAccessLogs,
+    configureLogsResponse_id,
+    configureLogsResponse_tags,
+    configureLogsResponse_httpStatus,
+
+    -- ** CreateAsset
+    createAsset_resourceId,
+    createAsset_tags,
+    createAsset_sourceArn,
+    createAsset_id,
+    createAsset_packagingGroupId,
+    createAsset_sourceRoleArn,
+    createAssetResponse_arn,
+    createAssetResponse_createdAt,
+    createAssetResponse_egressEndpoints,
+    createAssetResponse_id,
+    createAssetResponse_packagingGroupId,
+    createAssetResponse_resourceId,
+    createAssetResponse_sourceArn,
+    createAssetResponse_sourceRoleArn,
+    createAssetResponse_tags,
+    createAssetResponse_httpStatus,
+
+    -- ** CreatePackagingConfiguration
+    createPackagingConfiguration_cmafPackage,
+    createPackagingConfiguration_dashPackage,
+    createPackagingConfiguration_hlsPackage,
+    createPackagingConfiguration_mssPackage,
+    createPackagingConfiguration_tags,
+    createPackagingConfiguration_id,
+    createPackagingConfiguration_packagingGroupId,
+    createPackagingConfigurationResponse_arn,
+    createPackagingConfigurationResponse_cmafPackage,
+    createPackagingConfigurationResponse_dashPackage,
+    createPackagingConfigurationResponse_hlsPackage,
+    createPackagingConfigurationResponse_id,
+    createPackagingConfigurationResponse_mssPackage,
+    createPackagingConfigurationResponse_packagingGroupId,
+    createPackagingConfigurationResponse_tags,
+    createPackagingConfigurationResponse_httpStatus,
+
+    -- ** CreatePackagingGroup
+    createPackagingGroup_authorization,
+    createPackagingGroup_egressAccessLogs,
+    createPackagingGroup_tags,
+    createPackagingGroup_id,
+    createPackagingGroupResponse_arn,
+    createPackagingGroupResponse_authorization,
+    createPackagingGroupResponse_domainName,
+    createPackagingGroupResponse_egressAccessLogs,
+    createPackagingGroupResponse_id,
+    createPackagingGroupResponse_tags,
+    createPackagingGroupResponse_httpStatus,
+
+    -- ** DeleteAsset
+    deleteAsset_id,
+    deleteAssetResponse_httpStatus,
+
+    -- ** DeletePackagingConfiguration
+    deletePackagingConfiguration_id,
+    deletePackagingConfigurationResponse_httpStatus,
+
+    -- ** DeletePackagingGroup
+    deletePackagingGroup_id,
+    deletePackagingGroupResponse_httpStatus,
+
+    -- ** DescribeAsset
+    describeAsset_id,
+    describeAssetResponse_arn,
+    describeAssetResponse_createdAt,
+    describeAssetResponse_egressEndpoints,
+    describeAssetResponse_id,
+    describeAssetResponse_packagingGroupId,
+    describeAssetResponse_resourceId,
+    describeAssetResponse_sourceArn,
+    describeAssetResponse_sourceRoleArn,
+    describeAssetResponse_tags,
+    describeAssetResponse_httpStatus,
+
+    -- ** DescribePackagingConfiguration
+    describePackagingConfiguration_id,
+    describePackagingConfigurationResponse_arn,
+    describePackagingConfigurationResponse_cmafPackage,
+    describePackagingConfigurationResponse_dashPackage,
+    describePackagingConfigurationResponse_hlsPackage,
+    describePackagingConfigurationResponse_id,
+    describePackagingConfigurationResponse_mssPackage,
+    describePackagingConfigurationResponse_packagingGroupId,
+    describePackagingConfigurationResponse_tags,
+    describePackagingConfigurationResponse_httpStatus,
+
+    -- ** DescribePackagingGroup
+    describePackagingGroup_id,
+    describePackagingGroupResponse_approximateAssetCount,
+    describePackagingGroupResponse_arn,
+    describePackagingGroupResponse_authorization,
+    describePackagingGroupResponse_domainName,
+    describePackagingGroupResponse_egressAccessLogs,
+    describePackagingGroupResponse_id,
+    describePackagingGroupResponse_tags,
+    describePackagingGroupResponse_httpStatus,
+
+    -- ** ListAssets
+    listAssets_maxResults,
+    listAssets_nextToken,
+    listAssets_packagingGroupId,
+    listAssetsResponse_assets,
+    listAssetsResponse_nextToken,
+    listAssetsResponse_httpStatus,
+
+    -- ** ListPackagingConfigurations
+    listPackagingConfigurations_maxResults,
+    listPackagingConfigurations_nextToken,
+    listPackagingConfigurations_packagingGroupId,
+    listPackagingConfigurationsResponse_nextToken,
+    listPackagingConfigurationsResponse_packagingConfigurations,
+    listPackagingConfigurationsResponse_httpStatus,
+
+    -- ** ListPackagingGroups
+    listPackagingGroups_maxResults,
+    listPackagingGroups_nextToken,
+    listPackagingGroupsResponse_nextToken,
+    listPackagingGroupsResponse_packagingGroups,
+    listPackagingGroupsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- ** UntagResource
+    untagResource_tagKeys,
+    untagResource_resourceArn,
+
+    -- ** UpdatePackagingGroup
+    updatePackagingGroup_authorization,
+    updatePackagingGroup_id,
+    updatePackagingGroupResponse_approximateAssetCount,
+    updatePackagingGroupResponse_arn,
+    updatePackagingGroupResponse_authorization,
+    updatePackagingGroupResponse_domainName,
+    updatePackagingGroupResponse_egressAccessLogs,
+    updatePackagingGroupResponse_id,
+    updatePackagingGroupResponse_tags,
+    updatePackagingGroupResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AssetShallow
+    assetShallow_arn,
+    assetShallow_createdAt,
+    assetShallow_id,
+    assetShallow_packagingGroupId,
+    assetShallow_resourceId,
+    assetShallow_sourceArn,
+    assetShallow_sourceRoleArn,
+    assetShallow_tags,
+
+    -- ** Authorization
+    authorization_secretsRoleArn,
+    authorization_cdnIdentifierSecret,
+
+    -- ** CmafEncryption
+    cmafEncryption_constantInitializationVector,
+    cmafEncryption_spekeKeyProvider,
+
+    -- ** CmafPackage
+    cmafPackage_encryption,
+    cmafPackage_includeEncoderConfigurationInSegments,
+    cmafPackage_segmentDurationSeconds,
+    cmafPackage_hlsManifests,
+
+    -- ** DashEncryption
+    dashEncryption_spekeKeyProvider,
+
+    -- ** DashManifest
+    dashManifest_manifestLayout,
+    dashManifest_manifestName,
+    dashManifest_minBufferTimeSeconds,
+    dashManifest_profile,
+    dashManifest_scteMarkersSource,
+    dashManifest_streamSelection,
+
+    -- ** DashPackage
+    dashPackage_encryption,
+    dashPackage_includeEncoderConfigurationInSegments,
+    dashPackage_includeIframeOnlyStream,
+    dashPackage_periodTriggers,
+    dashPackage_segmentDurationSeconds,
+    dashPackage_segmentTemplateFormat,
+    dashPackage_dashManifests,
+
+    -- ** EgressAccessLogs
+    egressAccessLogs_logGroupName,
+
+    -- ** EgressEndpoint
+    egressEndpoint_packagingConfigurationId,
+    egressEndpoint_status,
+    egressEndpoint_url,
+
+    -- ** EncryptionContractConfiguration
+    encryptionContractConfiguration_presetSpeke20Audio,
+    encryptionContractConfiguration_presetSpeke20Video,
+
+    -- ** HlsEncryption
+    hlsEncryption_constantInitializationVector,
+    hlsEncryption_encryptionMethod,
+    hlsEncryption_spekeKeyProvider,
+
+    -- ** HlsManifest
+    hlsManifest_adMarkers,
+    hlsManifest_includeIframeOnlyStream,
+    hlsManifest_manifestName,
+    hlsManifest_programDateTimeIntervalSeconds,
+    hlsManifest_repeatExtXKey,
+    hlsManifest_streamSelection,
+
+    -- ** HlsPackage
+    hlsPackage_encryption,
+    hlsPackage_includeDvbSubtitles,
+    hlsPackage_segmentDurationSeconds,
+    hlsPackage_useAudioRenditionGroup,
+    hlsPackage_hlsManifests,
+
+    -- ** MssEncryption
+    mssEncryption_spekeKeyProvider,
+
+    -- ** MssManifest
+    mssManifest_manifestName,
+    mssManifest_streamSelection,
+
+    -- ** MssPackage
+    mssPackage_encryption,
+    mssPackage_segmentDurationSeconds,
+    mssPackage_mssManifests,
+
+    -- ** PackagingConfiguration
+    packagingConfiguration_arn,
+    packagingConfiguration_cmafPackage,
+    packagingConfiguration_dashPackage,
+    packagingConfiguration_hlsPackage,
+    packagingConfiguration_id,
+    packagingConfiguration_mssPackage,
+    packagingConfiguration_packagingGroupId,
+    packagingConfiguration_tags,
+
+    -- ** PackagingGroup
+    packagingGroup_approximateAssetCount,
+    packagingGroup_arn,
+    packagingGroup_authorization,
+    packagingGroup_domainName,
+    packagingGroup_egressAccessLogs,
+    packagingGroup_id,
+    packagingGroup_tags,
+
+    -- ** SpekeKeyProvider
+    spekeKeyProvider_encryptionContractConfiguration,
+    spekeKeyProvider_systemIds,
+    spekeKeyProvider_url,
+    spekeKeyProvider_roleArn,
+
+    -- ** StreamSelection
+    streamSelection_maxVideoBitsPerSecond,
+    streamSelection_minVideoBitsPerSecond,
+    streamSelection_streamOrder,
+  )
+where
+
+import Amazonka.MediaPackageVOD.ConfigureLogs
+import Amazonka.MediaPackageVOD.CreateAsset
+import Amazonka.MediaPackageVOD.CreatePackagingConfiguration
+import Amazonka.MediaPackageVOD.CreatePackagingGroup
+import Amazonka.MediaPackageVOD.DeleteAsset
+import Amazonka.MediaPackageVOD.DeletePackagingConfiguration
+import Amazonka.MediaPackageVOD.DeletePackagingGroup
+import Amazonka.MediaPackageVOD.DescribeAsset
+import Amazonka.MediaPackageVOD.DescribePackagingConfiguration
+import Amazonka.MediaPackageVOD.DescribePackagingGroup
+import Amazonka.MediaPackageVOD.ListAssets
+import Amazonka.MediaPackageVOD.ListPackagingConfigurations
+import Amazonka.MediaPackageVOD.ListPackagingGroups
+import Amazonka.MediaPackageVOD.ListTagsForResource
+import Amazonka.MediaPackageVOD.TagResource
+import Amazonka.MediaPackageVOD.Types.AssetShallow
+import Amazonka.MediaPackageVOD.Types.Authorization
+import Amazonka.MediaPackageVOD.Types.CmafEncryption
+import Amazonka.MediaPackageVOD.Types.CmafPackage
+import Amazonka.MediaPackageVOD.Types.DashEncryption
+import Amazonka.MediaPackageVOD.Types.DashManifest
+import Amazonka.MediaPackageVOD.Types.DashPackage
+import Amazonka.MediaPackageVOD.Types.EgressAccessLogs
+import Amazonka.MediaPackageVOD.Types.EgressEndpoint
+import Amazonka.MediaPackageVOD.Types.EncryptionContractConfiguration
+import Amazonka.MediaPackageVOD.Types.HlsEncryption
+import Amazonka.MediaPackageVOD.Types.HlsManifest
+import Amazonka.MediaPackageVOD.Types.HlsPackage
+import Amazonka.MediaPackageVOD.Types.MssEncryption
+import Amazonka.MediaPackageVOD.Types.MssManifest
+import Amazonka.MediaPackageVOD.Types.MssPackage
+import Amazonka.MediaPackageVOD.Types.PackagingConfiguration
+import Amazonka.MediaPackageVOD.Types.PackagingGroup
+import Amazonka.MediaPackageVOD.Types.SpekeKeyProvider
+import Amazonka.MediaPackageVOD.Types.StreamSelection
+import Amazonka.MediaPackageVOD.UntagResource
+import Amazonka.MediaPackageVOD.UpdatePackagingGroup
diff --git a/gen/Amazonka/MediaPackageVOD/ListAssets.hs b/gen/Amazonka/MediaPackageVOD/ListAssets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/ListAssets.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.MediaPackageVOD.ListAssets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a collection of MediaPackage VOD Asset resources.
+--
+-- This operation returns paginated results.
+module Amazonka.MediaPackageVOD.ListAssets
+  ( -- * Creating a Request
+    ListAssets (..),
+    newListAssets,
+
+    -- * Request Lenses
+    listAssets_maxResults,
+    listAssets_nextToken,
+    listAssets_packagingGroupId,
+
+    -- * Destructuring the Response
+    ListAssetsResponse (..),
+    newListAssetsResponse,
+
+    -- * Response Lenses
+    listAssetsResponse_assets,
+    listAssetsResponse_nextToken,
+    listAssetsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAssets' smart constructor.
+data ListAssets = ListAssets'
+  { -- | Upper bound on number of records to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token used to resume pagination from the end of a previous request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Returns Assets associated with the specified PackagingGroup.
+    packagingGroupId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAssets' 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', 'listAssets_maxResults' - Upper bound on number of records to return.
+--
+-- 'nextToken', 'listAssets_nextToken' - A token used to resume pagination from the end of a previous request.
+--
+-- 'packagingGroupId', 'listAssets_packagingGroupId' - Returns Assets associated with the specified PackagingGroup.
+newListAssets ::
+  ListAssets
+newListAssets =
+  ListAssets'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      packagingGroupId = Prelude.Nothing
+    }
+
+-- | Upper bound on number of records to return.
+listAssets_maxResults :: Lens.Lens' ListAssets (Prelude.Maybe Prelude.Natural)
+listAssets_maxResults = Lens.lens (\ListAssets' {maxResults} -> maxResults) (\s@ListAssets' {} a -> s {maxResults = a} :: ListAssets)
+
+-- | A token used to resume pagination from the end of a previous request.
+listAssets_nextToken :: Lens.Lens' ListAssets (Prelude.Maybe Prelude.Text)
+listAssets_nextToken = Lens.lens (\ListAssets' {nextToken} -> nextToken) (\s@ListAssets' {} a -> s {nextToken = a} :: ListAssets)
+
+-- | Returns Assets associated with the specified PackagingGroup.
+listAssets_packagingGroupId :: Lens.Lens' ListAssets (Prelude.Maybe Prelude.Text)
+listAssets_packagingGroupId = Lens.lens (\ListAssets' {packagingGroupId} -> packagingGroupId) (\s@ListAssets' {} a -> s {packagingGroupId = a} :: ListAssets)
+
+instance Core.AWSPager ListAssets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAssetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listAssetsResponse_assets
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAssets_nextToken
+          Lens..~ rs
+          Lens.^? listAssetsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListAssets where
+  type AWSResponse ListAssets = ListAssetsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAssetsResponse'
+            Prelude.<$> (x Data..?> "assets" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAssets where
+  hashWithSalt _salt ListAssets' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` packagingGroupId
+
+instance Prelude.NFData ListAssets where
+  rnf ListAssets' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf packagingGroupId
+
+instance Data.ToHeaders ListAssets where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListAssets where
+  toPath = Prelude.const "/assets"
+
+instance Data.ToQuery ListAssets where
+  toQuery ListAssets' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "packagingGroupId" Data.=: packagingGroupId
+      ]
+
+-- | /See:/ 'newListAssetsResponse' smart constructor.
+data ListAssetsResponse = ListAssetsResponse'
+  { -- | A list of MediaPackage VOD Asset resources.
+    assets :: Prelude.Maybe [AssetShallow],
+    -- | A token that can be used to resume pagination from the end of the
+    -- collection.
+    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 'ListAssetsResponse' 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:
+--
+-- 'assets', 'listAssetsResponse_assets' - A list of MediaPackage VOD Asset resources.
+--
+-- 'nextToken', 'listAssetsResponse_nextToken' - A token that can be used to resume pagination from the end of the
+-- collection.
+--
+-- 'httpStatus', 'listAssetsResponse_httpStatus' - The response's http status code.
+newListAssetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAssetsResponse
+newListAssetsResponse pHttpStatus_ =
+  ListAssetsResponse'
+    { assets = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of MediaPackage VOD Asset resources.
+listAssetsResponse_assets :: Lens.Lens' ListAssetsResponse (Prelude.Maybe [AssetShallow])
+listAssetsResponse_assets = Lens.lens (\ListAssetsResponse' {assets} -> assets) (\s@ListAssetsResponse' {} a -> s {assets = a} :: ListAssetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A token that can be used to resume pagination from the end of the
+-- collection.
+listAssetsResponse_nextToken :: Lens.Lens' ListAssetsResponse (Prelude.Maybe Prelude.Text)
+listAssetsResponse_nextToken = Lens.lens (\ListAssetsResponse' {nextToken} -> nextToken) (\s@ListAssetsResponse' {} a -> s {nextToken = a} :: ListAssetsResponse)
+
+-- | The response's http status code.
+listAssetsResponse_httpStatus :: Lens.Lens' ListAssetsResponse Prelude.Int
+listAssetsResponse_httpStatus = Lens.lens (\ListAssetsResponse' {httpStatus} -> httpStatus) (\s@ListAssetsResponse' {} a -> s {httpStatus = a} :: ListAssetsResponse)
+
+instance Prelude.NFData ListAssetsResponse where
+  rnf ListAssetsResponse' {..} =
+    Prelude.rnf assets
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaPackageVOD/ListPackagingConfigurations.hs b/gen/Amazonka/MediaPackageVOD/ListPackagingConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/ListPackagingConfigurations.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.MediaPackageVOD.ListPackagingConfigurations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a collection of MediaPackage VOD PackagingConfiguration
+-- resources.
+--
+-- This operation returns paginated results.
+module Amazonka.MediaPackageVOD.ListPackagingConfigurations
+  ( -- * Creating a Request
+    ListPackagingConfigurations (..),
+    newListPackagingConfigurations,
+
+    -- * Request Lenses
+    listPackagingConfigurations_maxResults,
+    listPackagingConfigurations_nextToken,
+    listPackagingConfigurations_packagingGroupId,
+
+    -- * Destructuring the Response
+    ListPackagingConfigurationsResponse (..),
+    newListPackagingConfigurationsResponse,
+
+    -- * Response Lenses
+    listPackagingConfigurationsResponse_nextToken,
+    listPackagingConfigurationsResponse_packagingConfigurations,
+    listPackagingConfigurationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListPackagingConfigurations' smart constructor.
+data ListPackagingConfigurations = ListPackagingConfigurations'
+  { -- | Upper bound on number of records to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token used to resume pagination from the end of a previous request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Returns MediaPackage VOD PackagingConfigurations associated with the
+    -- specified PackagingGroup.
+    packagingGroupId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPackagingConfigurations' 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', 'listPackagingConfigurations_maxResults' - Upper bound on number of records to return.
+--
+-- 'nextToken', 'listPackagingConfigurations_nextToken' - A token used to resume pagination from the end of a previous request.
+--
+-- 'packagingGroupId', 'listPackagingConfigurations_packagingGroupId' - Returns MediaPackage VOD PackagingConfigurations associated with the
+-- specified PackagingGroup.
+newListPackagingConfigurations ::
+  ListPackagingConfigurations
+newListPackagingConfigurations =
+  ListPackagingConfigurations'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      packagingGroupId = Prelude.Nothing
+    }
+
+-- | Upper bound on number of records to return.
+listPackagingConfigurations_maxResults :: Lens.Lens' ListPackagingConfigurations (Prelude.Maybe Prelude.Natural)
+listPackagingConfigurations_maxResults = Lens.lens (\ListPackagingConfigurations' {maxResults} -> maxResults) (\s@ListPackagingConfigurations' {} a -> s {maxResults = a} :: ListPackagingConfigurations)
+
+-- | A token used to resume pagination from the end of a previous request.
+listPackagingConfigurations_nextToken :: Lens.Lens' ListPackagingConfigurations (Prelude.Maybe Prelude.Text)
+listPackagingConfigurations_nextToken = Lens.lens (\ListPackagingConfigurations' {nextToken} -> nextToken) (\s@ListPackagingConfigurations' {} a -> s {nextToken = a} :: ListPackagingConfigurations)
+
+-- | Returns MediaPackage VOD PackagingConfigurations associated with the
+-- specified PackagingGroup.
+listPackagingConfigurations_packagingGroupId :: Lens.Lens' ListPackagingConfigurations (Prelude.Maybe Prelude.Text)
+listPackagingConfigurations_packagingGroupId = Lens.lens (\ListPackagingConfigurations' {packagingGroupId} -> packagingGroupId) (\s@ListPackagingConfigurations' {} a -> s {packagingGroupId = a} :: ListPackagingConfigurations)
+
+instance Core.AWSPager ListPackagingConfigurations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listPackagingConfigurationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listPackagingConfigurationsResponse_packagingConfigurations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listPackagingConfigurations_nextToken
+          Lens..~ rs
+          Lens.^? listPackagingConfigurationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListPackagingConfigurations where
+  type
+    AWSResponse ListPackagingConfigurations =
+      ListPackagingConfigurationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListPackagingConfigurationsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "packagingConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListPackagingConfigurations where
+  hashWithSalt _salt ListPackagingConfigurations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` packagingGroupId
+
+instance Prelude.NFData ListPackagingConfigurations where
+  rnf ListPackagingConfigurations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf packagingGroupId
+
+instance Data.ToHeaders ListPackagingConfigurations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListPackagingConfigurations where
+  toPath = Prelude.const "/packaging_configurations"
+
+instance Data.ToQuery ListPackagingConfigurations where
+  toQuery ListPackagingConfigurations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "packagingGroupId" Data.=: packagingGroupId
+      ]
+
+-- | /See:/ 'newListPackagingConfigurationsResponse' smart constructor.
+data ListPackagingConfigurationsResponse = ListPackagingConfigurationsResponse'
+  { -- | A token that can be used to resume pagination from the end of the
+    -- collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of MediaPackage VOD PackagingConfiguration resources.
+    packagingConfigurations :: Prelude.Maybe [PackagingConfiguration],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPackagingConfigurationsResponse' 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:
+--
+-- 'nextToken', 'listPackagingConfigurationsResponse_nextToken' - A token that can be used to resume pagination from the end of the
+-- collection.
+--
+-- 'packagingConfigurations', 'listPackagingConfigurationsResponse_packagingConfigurations' - A list of MediaPackage VOD PackagingConfiguration resources.
+--
+-- 'httpStatus', 'listPackagingConfigurationsResponse_httpStatus' - The response's http status code.
+newListPackagingConfigurationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListPackagingConfigurationsResponse
+newListPackagingConfigurationsResponse pHttpStatus_ =
+  ListPackagingConfigurationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      packagingConfigurations =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A token that can be used to resume pagination from the end of the
+-- collection.
+listPackagingConfigurationsResponse_nextToken :: Lens.Lens' ListPackagingConfigurationsResponse (Prelude.Maybe Prelude.Text)
+listPackagingConfigurationsResponse_nextToken = Lens.lens (\ListPackagingConfigurationsResponse' {nextToken} -> nextToken) (\s@ListPackagingConfigurationsResponse' {} a -> s {nextToken = a} :: ListPackagingConfigurationsResponse)
+
+-- | A list of MediaPackage VOD PackagingConfiguration resources.
+listPackagingConfigurationsResponse_packagingConfigurations :: Lens.Lens' ListPackagingConfigurationsResponse (Prelude.Maybe [PackagingConfiguration])
+listPackagingConfigurationsResponse_packagingConfigurations = Lens.lens (\ListPackagingConfigurationsResponse' {packagingConfigurations} -> packagingConfigurations) (\s@ListPackagingConfigurationsResponse' {} a -> s {packagingConfigurations = a} :: ListPackagingConfigurationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listPackagingConfigurationsResponse_httpStatus :: Lens.Lens' ListPackagingConfigurationsResponse Prelude.Int
+listPackagingConfigurationsResponse_httpStatus = Lens.lens (\ListPackagingConfigurationsResponse' {httpStatus} -> httpStatus) (\s@ListPackagingConfigurationsResponse' {} a -> s {httpStatus = a} :: ListPackagingConfigurationsResponse)
+
+instance
+  Prelude.NFData
+    ListPackagingConfigurationsResponse
+  where
+  rnf ListPackagingConfigurationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf packagingConfigurations
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaPackageVOD/ListPackagingGroups.hs b/gen/Amazonka/MediaPackageVOD/ListPackagingGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/ListPackagingGroups.hs
@@ -0,0 +1,217 @@
+{-# 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.MediaPackageVOD.ListPackagingGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a collection of MediaPackage VOD PackagingGroup resources.
+--
+-- This operation returns paginated results.
+module Amazonka.MediaPackageVOD.ListPackagingGroups
+  ( -- * Creating a Request
+    ListPackagingGroups (..),
+    newListPackagingGroups,
+
+    -- * Request Lenses
+    listPackagingGroups_maxResults,
+    listPackagingGroups_nextToken,
+
+    -- * Destructuring the Response
+    ListPackagingGroupsResponse (..),
+    newListPackagingGroupsResponse,
+
+    -- * Response Lenses
+    listPackagingGroupsResponse_nextToken,
+    listPackagingGroupsResponse_packagingGroups,
+    listPackagingGroupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListPackagingGroups' smart constructor.
+data ListPackagingGroups = ListPackagingGroups'
+  { -- | Upper bound on number of records to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token used to resume pagination from the end of a previous request.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPackagingGroups' 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', 'listPackagingGroups_maxResults' - Upper bound on number of records to return.
+--
+-- 'nextToken', 'listPackagingGroups_nextToken' - A token used to resume pagination from the end of a previous request.
+newListPackagingGroups ::
+  ListPackagingGroups
+newListPackagingGroups =
+  ListPackagingGroups'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Upper bound on number of records to return.
+listPackagingGroups_maxResults :: Lens.Lens' ListPackagingGroups (Prelude.Maybe Prelude.Natural)
+listPackagingGroups_maxResults = Lens.lens (\ListPackagingGroups' {maxResults} -> maxResults) (\s@ListPackagingGroups' {} a -> s {maxResults = a} :: ListPackagingGroups)
+
+-- | A token used to resume pagination from the end of a previous request.
+listPackagingGroups_nextToken :: Lens.Lens' ListPackagingGroups (Prelude.Maybe Prelude.Text)
+listPackagingGroups_nextToken = Lens.lens (\ListPackagingGroups' {nextToken} -> nextToken) (\s@ListPackagingGroups' {} a -> s {nextToken = a} :: ListPackagingGroups)
+
+instance Core.AWSPager ListPackagingGroups where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listPackagingGroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listPackagingGroupsResponse_packagingGroups
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listPackagingGroups_nextToken
+          Lens..~ rs
+          Lens.^? listPackagingGroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListPackagingGroups where
+  type
+    AWSResponse ListPackagingGroups =
+      ListPackagingGroupsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListPackagingGroupsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "packagingGroups"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListPackagingGroups where
+  hashWithSalt _salt ListPackagingGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListPackagingGroups where
+  rnf ListPackagingGroups' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListPackagingGroups where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListPackagingGroups where
+  toPath = Prelude.const "/packaging_groups"
+
+instance Data.ToQuery ListPackagingGroups where
+  toQuery ListPackagingGroups' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListPackagingGroupsResponse' smart constructor.
+data ListPackagingGroupsResponse = ListPackagingGroupsResponse'
+  { -- | A token that can be used to resume pagination from the end of the
+    -- collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of MediaPackage VOD PackagingGroup resources.
+    packagingGroups :: Prelude.Maybe [PackagingGroup],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPackagingGroupsResponse' 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:
+--
+-- 'nextToken', 'listPackagingGroupsResponse_nextToken' - A token that can be used to resume pagination from the end of the
+-- collection.
+--
+-- 'packagingGroups', 'listPackagingGroupsResponse_packagingGroups' - A list of MediaPackage VOD PackagingGroup resources.
+--
+-- 'httpStatus', 'listPackagingGroupsResponse_httpStatus' - The response's http status code.
+newListPackagingGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListPackagingGroupsResponse
+newListPackagingGroupsResponse pHttpStatus_ =
+  ListPackagingGroupsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      packagingGroups = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A token that can be used to resume pagination from the end of the
+-- collection.
+listPackagingGroupsResponse_nextToken :: Lens.Lens' ListPackagingGroupsResponse (Prelude.Maybe Prelude.Text)
+listPackagingGroupsResponse_nextToken = Lens.lens (\ListPackagingGroupsResponse' {nextToken} -> nextToken) (\s@ListPackagingGroupsResponse' {} a -> s {nextToken = a} :: ListPackagingGroupsResponse)
+
+-- | A list of MediaPackage VOD PackagingGroup resources.
+listPackagingGroupsResponse_packagingGroups :: Lens.Lens' ListPackagingGroupsResponse (Prelude.Maybe [PackagingGroup])
+listPackagingGroupsResponse_packagingGroups = Lens.lens (\ListPackagingGroupsResponse' {packagingGroups} -> packagingGroups) (\s@ListPackagingGroupsResponse' {} a -> s {packagingGroups = a} :: ListPackagingGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listPackagingGroupsResponse_httpStatus :: Lens.Lens' ListPackagingGroupsResponse Prelude.Int
+listPackagingGroupsResponse_httpStatus = Lens.lens (\ListPackagingGroupsResponse' {httpStatus} -> httpStatus) (\s@ListPackagingGroupsResponse' {} a -> s {httpStatus = a} :: ListPackagingGroupsResponse)
+
+instance Prelude.NFData ListPackagingGroupsResponse where
+  rnf ListPackagingGroupsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf packagingGroups
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaPackageVOD/ListTagsForResource.hs b/gen/Amazonka/MediaPackageVOD/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/ListTagsForResource.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.MediaPackageVOD.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)
+--
+-- Returns a list of the tags assigned to the specified resource.
+module Amazonka.MediaPackageVOD.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.MediaPackageVOD.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) for the resource. You can get this from
+    -- the response to any request to the 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) for the resource. You can get this from
+-- the response to any request to the resource.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) for the resource. You can get this from
+-- the response to any request to the 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'
+  { -- | A collection of tags associated with a resource
+    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' - A collection of tags associated with a resource
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A collection of tags associated with a resource
+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/MediaPackageVOD/TagResource.hs b/gen/Amazonka/MediaPackageVOD/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/TagResource.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.MediaPackageVOD.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)
+--
+-- Adds tags to the specified resource. You can specify one or more tags to
+-- add.
+module Amazonka.MediaPackageVOD.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.MediaPackageVOD.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) for the resource. You can get this from
+    -- the response to any request to the resource.
+    resourceArn :: Prelude.Text,
+    -- | A collection of tags associated with a resource
+    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) for the resource. You can get this from
+-- the response to any request to the resource.
+--
+-- 'tags', 'tagResource_tags' - A collection of tags associated with a resource
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) for the resource. You can get this from
+-- the response to any request to the resource.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | A collection of tags associated with a resource
+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/MediaPackageVOD/Types.hs b/gen/Amazonka/MediaPackageVOD/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types.hs
@@ -0,0 +1,369 @@
+{-# 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.MediaPackageVOD.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.MediaPackageVOD.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _ForbiddenException,
+    _InternalServerErrorException,
+    _NotFoundException,
+    _ServiceUnavailableException,
+    _TooManyRequestsException,
+    _UnprocessableEntityException,
+
+    -- * AdMarkers
+    AdMarkers (..),
+
+    -- * EncryptionMethod
+    EncryptionMethod (..),
+
+    -- * ManifestLayout
+    ManifestLayout (..),
+
+    -- * PeriodTriggersElement
+    PeriodTriggersElement (..),
+
+    -- * PresetSpeke20Audio
+    PresetSpeke20Audio (..),
+
+    -- * PresetSpeke20Video
+    PresetSpeke20Video (..),
+
+    -- * Profile
+    Profile (..),
+
+    -- * ScteMarkersSource
+    ScteMarkersSource (..),
+
+    -- * SegmentTemplateFormat
+    SegmentTemplateFormat (..),
+
+    -- * StreamOrder
+    StreamOrder (..),
+
+    -- * AssetShallow
+    AssetShallow (..),
+    newAssetShallow,
+    assetShallow_arn,
+    assetShallow_createdAt,
+    assetShallow_id,
+    assetShallow_packagingGroupId,
+    assetShallow_resourceId,
+    assetShallow_sourceArn,
+    assetShallow_sourceRoleArn,
+    assetShallow_tags,
+
+    -- * Authorization
+    Authorization (..),
+    newAuthorization,
+    authorization_secretsRoleArn,
+    authorization_cdnIdentifierSecret,
+
+    -- * CmafEncryption
+    CmafEncryption (..),
+    newCmafEncryption,
+    cmafEncryption_constantInitializationVector,
+    cmafEncryption_spekeKeyProvider,
+
+    -- * CmafPackage
+    CmafPackage (..),
+    newCmafPackage,
+    cmafPackage_encryption,
+    cmafPackage_includeEncoderConfigurationInSegments,
+    cmafPackage_segmentDurationSeconds,
+    cmafPackage_hlsManifests,
+
+    -- * DashEncryption
+    DashEncryption (..),
+    newDashEncryption,
+    dashEncryption_spekeKeyProvider,
+
+    -- * DashManifest
+    DashManifest (..),
+    newDashManifest,
+    dashManifest_manifestLayout,
+    dashManifest_manifestName,
+    dashManifest_minBufferTimeSeconds,
+    dashManifest_profile,
+    dashManifest_scteMarkersSource,
+    dashManifest_streamSelection,
+
+    -- * DashPackage
+    DashPackage (..),
+    newDashPackage,
+    dashPackage_encryption,
+    dashPackage_includeEncoderConfigurationInSegments,
+    dashPackage_includeIframeOnlyStream,
+    dashPackage_periodTriggers,
+    dashPackage_segmentDurationSeconds,
+    dashPackage_segmentTemplateFormat,
+    dashPackage_dashManifests,
+
+    -- * EgressAccessLogs
+    EgressAccessLogs (..),
+    newEgressAccessLogs,
+    egressAccessLogs_logGroupName,
+
+    -- * EgressEndpoint
+    EgressEndpoint (..),
+    newEgressEndpoint,
+    egressEndpoint_packagingConfigurationId,
+    egressEndpoint_status,
+    egressEndpoint_url,
+
+    -- * EncryptionContractConfiguration
+    EncryptionContractConfiguration (..),
+    newEncryptionContractConfiguration,
+    encryptionContractConfiguration_presetSpeke20Audio,
+    encryptionContractConfiguration_presetSpeke20Video,
+
+    -- * HlsEncryption
+    HlsEncryption (..),
+    newHlsEncryption,
+    hlsEncryption_constantInitializationVector,
+    hlsEncryption_encryptionMethod,
+    hlsEncryption_spekeKeyProvider,
+
+    -- * HlsManifest
+    HlsManifest (..),
+    newHlsManifest,
+    hlsManifest_adMarkers,
+    hlsManifest_includeIframeOnlyStream,
+    hlsManifest_manifestName,
+    hlsManifest_programDateTimeIntervalSeconds,
+    hlsManifest_repeatExtXKey,
+    hlsManifest_streamSelection,
+
+    -- * HlsPackage
+    HlsPackage (..),
+    newHlsPackage,
+    hlsPackage_encryption,
+    hlsPackage_includeDvbSubtitles,
+    hlsPackage_segmentDurationSeconds,
+    hlsPackage_useAudioRenditionGroup,
+    hlsPackage_hlsManifests,
+
+    -- * MssEncryption
+    MssEncryption (..),
+    newMssEncryption,
+    mssEncryption_spekeKeyProvider,
+
+    -- * MssManifest
+    MssManifest (..),
+    newMssManifest,
+    mssManifest_manifestName,
+    mssManifest_streamSelection,
+
+    -- * MssPackage
+    MssPackage (..),
+    newMssPackage,
+    mssPackage_encryption,
+    mssPackage_segmentDurationSeconds,
+    mssPackage_mssManifests,
+
+    -- * PackagingConfiguration
+    PackagingConfiguration (..),
+    newPackagingConfiguration,
+    packagingConfiguration_arn,
+    packagingConfiguration_cmafPackage,
+    packagingConfiguration_dashPackage,
+    packagingConfiguration_hlsPackage,
+    packagingConfiguration_id,
+    packagingConfiguration_mssPackage,
+    packagingConfiguration_packagingGroupId,
+    packagingConfiguration_tags,
+
+    -- * PackagingGroup
+    PackagingGroup (..),
+    newPackagingGroup,
+    packagingGroup_approximateAssetCount,
+    packagingGroup_arn,
+    packagingGroup_authorization,
+    packagingGroup_domainName,
+    packagingGroup_egressAccessLogs,
+    packagingGroup_id,
+    packagingGroup_tags,
+
+    -- * SpekeKeyProvider
+    SpekeKeyProvider (..),
+    newSpekeKeyProvider,
+    spekeKeyProvider_encryptionContractConfiguration,
+    spekeKeyProvider_systemIds,
+    spekeKeyProvider_url,
+    spekeKeyProvider_roleArn,
+
+    -- * StreamSelection
+    StreamSelection (..),
+    newStreamSelection,
+    streamSelection_maxVideoBitsPerSecond,
+    streamSelection_minVideoBitsPerSecond,
+    streamSelection_streamOrder,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.MediaPackageVOD.Types.AdMarkers
+import Amazonka.MediaPackageVOD.Types.AssetShallow
+import Amazonka.MediaPackageVOD.Types.Authorization
+import Amazonka.MediaPackageVOD.Types.CmafEncryption
+import Amazonka.MediaPackageVOD.Types.CmafPackage
+import Amazonka.MediaPackageVOD.Types.DashEncryption
+import Amazonka.MediaPackageVOD.Types.DashManifest
+import Amazonka.MediaPackageVOD.Types.DashPackage
+import Amazonka.MediaPackageVOD.Types.EgressAccessLogs
+import Amazonka.MediaPackageVOD.Types.EgressEndpoint
+import Amazonka.MediaPackageVOD.Types.EncryptionContractConfiguration
+import Amazonka.MediaPackageVOD.Types.EncryptionMethod
+import Amazonka.MediaPackageVOD.Types.HlsEncryption
+import Amazonka.MediaPackageVOD.Types.HlsManifest
+import Amazonka.MediaPackageVOD.Types.HlsPackage
+import Amazonka.MediaPackageVOD.Types.ManifestLayout
+import Amazonka.MediaPackageVOD.Types.MssEncryption
+import Amazonka.MediaPackageVOD.Types.MssManifest
+import Amazonka.MediaPackageVOD.Types.MssPackage
+import Amazonka.MediaPackageVOD.Types.PackagingConfiguration
+import Amazonka.MediaPackageVOD.Types.PackagingGroup
+import Amazonka.MediaPackageVOD.Types.PeriodTriggersElement
+import Amazonka.MediaPackageVOD.Types.PresetSpeke20Audio
+import Amazonka.MediaPackageVOD.Types.PresetSpeke20Video
+import Amazonka.MediaPackageVOD.Types.Profile
+import Amazonka.MediaPackageVOD.Types.ScteMarkersSource
+import Amazonka.MediaPackageVOD.Types.SegmentTemplateFormat
+import Amazonka.MediaPackageVOD.Types.SpekeKeyProvider
+import Amazonka.MediaPackageVOD.Types.StreamOrder
+import Amazonka.MediaPackageVOD.Types.StreamSelection
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2018-11-07@ of the Amazon Elemental MediaPackage VOD SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "MediaPackageVOD",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "mediapackage-vod",
+      Core.signingName = "mediapackage-vod",
+      Core.version = "2018-11-07",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "MediaPackageVOD",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | The client is not authorized to access the requested resource.
+_ForbiddenException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ForbiddenException =
+  Core._MatchServiceError
+    defaultService
+    "ForbiddenException"
+    Prelude.. Core.hasStatus 403
+
+-- | An unexpected error occurred.
+_InternalServerErrorException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerErrorException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerErrorException"
+    Prelude.. Core.hasStatus 500
+
+-- | The requested resource does not exist.
+_NotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "NotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | An unexpected error occurred.
+_ServiceUnavailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceUnavailableException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceUnavailableException"
+    Prelude.. Core.hasStatus 503
+
+-- | The client has exceeded their resource or throttling limits.
+_TooManyRequestsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TooManyRequestsException =
+  Core._MatchServiceError
+    defaultService
+    "TooManyRequestsException"
+    Prelude.. Core.hasStatus 429
+
+-- | The parameters sent in the request are not valid.
+_UnprocessableEntityException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnprocessableEntityException =
+  Core._MatchServiceError
+    defaultService
+    "UnprocessableEntityException"
+    Prelude.. Core.hasStatus 422
diff --git a/gen/Amazonka/MediaPackageVOD/Types/AdMarkers.hs b/gen/Amazonka/MediaPackageVOD/Types/AdMarkers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/AdMarkers.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaPackageVOD.Types.AdMarkers
+-- 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.MediaPackageVOD.Types.AdMarkers
+  ( AdMarkers
+      ( ..,
+        AdMarkers_NONE,
+        AdMarkers_PASSTHROUGH,
+        AdMarkers_SCTE35_ENHANCED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AdMarkers = AdMarkers'
+  { fromAdMarkers ::
+      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 AdMarkers_NONE :: AdMarkers
+pattern AdMarkers_NONE = AdMarkers' "NONE"
+
+pattern AdMarkers_PASSTHROUGH :: AdMarkers
+pattern AdMarkers_PASSTHROUGH = AdMarkers' "PASSTHROUGH"
+
+pattern AdMarkers_SCTE35_ENHANCED :: AdMarkers
+pattern AdMarkers_SCTE35_ENHANCED = AdMarkers' "SCTE35_ENHANCED"
+
+{-# COMPLETE
+  AdMarkers_NONE,
+  AdMarkers_PASSTHROUGH,
+  AdMarkers_SCTE35_ENHANCED,
+  AdMarkers'
+  #-}
diff --git a/gen/Amazonka/MediaPackageVOD/Types/AssetShallow.hs b/gen/Amazonka/MediaPackageVOD/Types/AssetShallow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/AssetShallow.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaPackageVOD.Types.AssetShallow
+-- 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.MediaPackageVOD.Types.AssetShallow 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 MediaPackage VOD Asset resource.
+--
+-- /See:/ 'newAssetShallow' smart constructor.
+data AssetShallow = AssetShallow'
+  { -- | The ARN of the Asset.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time the Asset was initially submitted for Ingest.
+    createdAt :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the Asset.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the PackagingGroup for the Asset.
+    packagingGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The resource ID to include in SPEKE key requests.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | ARN of the source object in S3.
+    sourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The IAM role ARN used to access the source S3 bucket.
+    sourceRoleArn :: Prelude.Maybe Prelude.Text,
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssetShallow' 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', 'assetShallow_arn' - The ARN of the Asset.
+--
+-- 'createdAt', 'assetShallow_createdAt' - The time the Asset was initially submitted for Ingest.
+--
+-- 'id', 'assetShallow_id' - The unique identifier for the Asset.
+--
+-- 'packagingGroupId', 'assetShallow_packagingGroupId' - The ID of the PackagingGroup for the Asset.
+--
+-- 'resourceId', 'assetShallow_resourceId' - The resource ID to include in SPEKE key requests.
+--
+-- 'sourceArn', 'assetShallow_sourceArn' - ARN of the source object in S3.
+--
+-- 'sourceRoleArn', 'assetShallow_sourceRoleArn' - The IAM role ARN used to access the source S3 bucket.
+--
+-- 'tags', 'assetShallow_tags' - Undocumented member.
+newAssetShallow ::
+  AssetShallow
+newAssetShallow =
+  AssetShallow'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      id = Prelude.Nothing,
+      packagingGroupId = Prelude.Nothing,
+      resourceId = Prelude.Nothing,
+      sourceArn = Prelude.Nothing,
+      sourceRoleArn = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The ARN of the Asset.
+assetShallow_arn :: Lens.Lens' AssetShallow (Prelude.Maybe Prelude.Text)
+assetShallow_arn = Lens.lens (\AssetShallow' {arn} -> arn) (\s@AssetShallow' {} a -> s {arn = a} :: AssetShallow)
+
+-- | The time the Asset was initially submitted for Ingest.
+assetShallow_createdAt :: Lens.Lens' AssetShallow (Prelude.Maybe Prelude.Text)
+assetShallow_createdAt = Lens.lens (\AssetShallow' {createdAt} -> createdAt) (\s@AssetShallow' {} a -> s {createdAt = a} :: AssetShallow)
+
+-- | The unique identifier for the Asset.
+assetShallow_id :: Lens.Lens' AssetShallow (Prelude.Maybe Prelude.Text)
+assetShallow_id = Lens.lens (\AssetShallow' {id} -> id) (\s@AssetShallow' {} a -> s {id = a} :: AssetShallow)
+
+-- | The ID of the PackagingGroup for the Asset.
+assetShallow_packagingGroupId :: Lens.Lens' AssetShallow (Prelude.Maybe Prelude.Text)
+assetShallow_packagingGroupId = Lens.lens (\AssetShallow' {packagingGroupId} -> packagingGroupId) (\s@AssetShallow' {} a -> s {packagingGroupId = a} :: AssetShallow)
+
+-- | The resource ID to include in SPEKE key requests.
+assetShallow_resourceId :: Lens.Lens' AssetShallow (Prelude.Maybe Prelude.Text)
+assetShallow_resourceId = Lens.lens (\AssetShallow' {resourceId} -> resourceId) (\s@AssetShallow' {} a -> s {resourceId = a} :: AssetShallow)
+
+-- | ARN of the source object in S3.
+assetShallow_sourceArn :: Lens.Lens' AssetShallow (Prelude.Maybe Prelude.Text)
+assetShallow_sourceArn = Lens.lens (\AssetShallow' {sourceArn} -> sourceArn) (\s@AssetShallow' {} a -> s {sourceArn = a} :: AssetShallow)
+
+-- | The IAM role ARN used to access the source S3 bucket.
+assetShallow_sourceRoleArn :: Lens.Lens' AssetShallow (Prelude.Maybe Prelude.Text)
+assetShallow_sourceRoleArn = Lens.lens (\AssetShallow' {sourceRoleArn} -> sourceRoleArn) (\s@AssetShallow' {} a -> s {sourceRoleArn = a} :: AssetShallow)
+
+-- | Undocumented member.
+assetShallow_tags :: Lens.Lens' AssetShallow (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+assetShallow_tags = Lens.lens (\AssetShallow' {tags} -> tags) (\s@AssetShallow' {} a -> s {tags = a} :: AssetShallow) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON AssetShallow where
+  parseJSON =
+    Data.withObject
+      "AssetShallow"
+      ( \x ->
+          AssetShallow'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "packagingGroupId")
+            Prelude.<*> (x Data..:? "resourceId")
+            Prelude.<*> (x Data..:? "sourceArn")
+            Prelude.<*> (x Data..:? "sourceRoleArn")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable AssetShallow where
+  hashWithSalt _salt AssetShallow' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` packagingGroupId
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` sourceArn
+      `Prelude.hashWithSalt` sourceRoleArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData AssetShallow where
+  rnf AssetShallow' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf packagingGroupId
+      `Prelude.seq` Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf sourceArn
+      `Prelude.seq` Prelude.rnf sourceRoleArn
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/MediaPackageVOD/Types/Authorization.hs b/gen/Amazonka/MediaPackageVOD/Types/Authorization.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/Authorization.hs
@@ -0,0 +1,107 @@
+{-# 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.MediaPackageVOD.Types.Authorization
+-- 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.MediaPackageVOD.Types.Authorization 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
+
+-- | CDN Authorization credentials
+--
+-- /See:/ 'newAuthorization' smart constructor.
+data Authorization = Authorization'
+  { -- | The Amazon Resource Name (ARN) for the IAM role that allows MediaPackage
+    -- to communicate with AWS Secrets Manager.
+    secretsRoleArn :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) for the secret in AWS Secrets Manager
+    -- that is used for CDN authorization.
+    cdnIdentifierSecret :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Authorization' 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:
+--
+-- 'secretsRoleArn', 'authorization_secretsRoleArn' - The Amazon Resource Name (ARN) for the IAM role that allows MediaPackage
+-- to communicate with AWS Secrets Manager.
+--
+-- 'cdnIdentifierSecret', 'authorization_cdnIdentifierSecret' - The Amazon Resource Name (ARN) for the secret in AWS Secrets Manager
+-- that is used for CDN authorization.
+newAuthorization ::
+  -- | 'secretsRoleArn'
+  Prelude.Text ->
+  -- | 'cdnIdentifierSecret'
+  Prelude.Text ->
+  Authorization
+newAuthorization
+  pSecretsRoleArn_
+  pCdnIdentifierSecret_ =
+    Authorization'
+      { secretsRoleArn = pSecretsRoleArn_,
+        cdnIdentifierSecret = pCdnIdentifierSecret_
+      }
+
+-- | The Amazon Resource Name (ARN) for the IAM role that allows MediaPackage
+-- to communicate with AWS Secrets Manager.
+authorization_secretsRoleArn :: Lens.Lens' Authorization Prelude.Text
+authorization_secretsRoleArn = Lens.lens (\Authorization' {secretsRoleArn} -> secretsRoleArn) (\s@Authorization' {} a -> s {secretsRoleArn = a} :: Authorization)
+
+-- | The Amazon Resource Name (ARN) for the secret in AWS Secrets Manager
+-- that is used for CDN authorization.
+authorization_cdnIdentifierSecret :: Lens.Lens' Authorization Prelude.Text
+authorization_cdnIdentifierSecret = Lens.lens (\Authorization' {cdnIdentifierSecret} -> cdnIdentifierSecret) (\s@Authorization' {} a -> s {cdnIdentifierSecret = a} :: Authorization)
+
+instance Data.FromJSON Authorization where
+  parseJSON =
+    Data.withObject
+      "Authorization"
+      ( \x ->
+          Authorization'
+            Prelude.<$> (x Data..: "secretsRoleArn")
+            Prelude.<*> (x Data..: "cdnIdentifierSecret")
+      )
+
+instance Prelude.Hashable Authorization where
+  hashWithSalt _salt Authorization' {..} =
+    _salt
+      `Prelude.hashWithSalt` secretsRoleArn
+      `Prelude.hashWithSalt` cdnIdentifierSecret
+
+instance Prelude.NFData Authorization where
+  rnf Authorization' {..} =
+    Prelude.rnf secretsRoleArn
+      `Prelude.seq` Prelude.rnf cdnIdentifierSecret
+
+instance Data.ToJSON Authorization where
+  toJSON Authorization' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("secretsRoleArn" Data..= secretsRoleArn),
+            Prelude.Just
+              ("cdnIdentifierSecret" Data..= cdnIdentifierSecret)
+          ]
+      )
diff --git a/gen/Amazonka/MediaPackageVOD/Types/CmafEncryption.hs b/gen/Amazonka/MediaPackageVOD/Types/CmafEncryption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/CmafEncryption.hs
@@ -0,0 +1,107 @@
+{-# 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.MediaPackageVOD.Types.CmafEncryption
+-- 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.MediaPackageVOD.Types.CmafEncryption where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types.SpekeKeyProvider
+import qualified Amazonka.Prelude as Prelude
+
+-- | A CMAF encryption configuration.
+--
+-- /See:/ 'newCmafEncryption' smart constructor.
+data CmafEncryption = CmafEncryption'
+  { -- | An optional 128-bit, 16-byte hex value represented by a 32-character
+    -- string, used in conjunction with the key for encrypting blocks. If you
+    -- don\'t specify a value, then MediaPackage creates the constant
+    -- initialization vector (IV).
+    constantInitializationVector :: Prelude.Maybe Prelude.Text,
+    spekeKeyProvider :: SpekeKeyProvider
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CmafEncryption' 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:
+--
+-- 'constantInitializationVector', 'cmafEncryption_constantInitializationVector' - An optional 128-bit, 16-byte hex value represented by a 32-character
+-- string, used in conjunction with the key for encrypting blocks. If you
+-- don\'t specify a value, then MediaPackage creates the constant
+-- initialization vector (IV).
+--
+-- 'spekeKeyProvider', 'cmafEncryption_spekeKeyProvider' - Undocumented member.
+newCmafEncryption ::
+  -- | 'spekeKeyProvider'
+  SpekeKeyProvider ->
+  CmafEncryption
+newCmafEncryption pSpekeKeyProvider_ =
+  CmafEncryption'
+    { constantInitializationVector =
+        Prelude.Nothing,
+      spekeKeyProvider = pSpekeKeyProvider_
+    }
+
+-- | An optional 128-bit, 16-byte hex value represented by a 32-character
+-- string, used in conjunction with the key for encrypting blocks. If you
+-- don\'t specify a value, then MediaPackage creates the constant
+-- initialization vector (IV).
+cmafEncryption_constantInitializationVector :: Lens.Lens' CmafEncryption (Prelude.Maybe Prelude.Text)
+cmafEncryption_constantInitializationVector = Lens.lens (\CmafEncryption' {constantInitializationVector} -> constantInitializationVector) (\s@CmafEncryption' {} a -> s {constantInitializationVector = a} :: CmafEncryption)
+
+-- | Undocumented member.
+cmafEncryption_spekeKeyProvider :: Lens.Lens' CmafEncryption SpekeKeyProvider
+cmafEncryption_spekeKeyProvider = Lens.lens (\CmafEncryption' {spekeKeyProvider} -> spekeKeyProvider) (\s@CmafEncryption' {} a -> s {spekeKeyProvider = a} :: CmafEncryption)
+
+instance Data.FromJSON CmafEncryption where
+  parseJSON =
+    Data.withObject
+      "CmafEncryption"
+      ( \x ->
+          CmafEncryption'
+            Prelude.<$> (x Data..:? "constantInitializationVector")
+            Prelude.<*> (x Data..: "spekeKeyProvider")
+      )
+
+instance Prelude.Hashable CmafEncryption where
+  hashWithSalt _salt CmafEncryption' {..} =
+    _salt
+      `Prelude.hashWithSalt` constantInitializationVector
+      `Prelude.hashWithSalt` spekeKeyProvider
+
+instance Prelude.NFData CmafEncryption where
+  rnf CmafEncryption' {..} =
+    Prelude.rnf constantInitializationVector
+      `Prelude.seq` Prelude.rnf spekeKeyProvider
+
+instance Data.ToJSON CmafEncryption where
+  toJSON CmafEncryption' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("constantInitializationVector" Data..=)
+              Prelude.<$> constantInitializationVector,
+            Prelude.Just
+              ("spekeKeyProvider" Data..= spekeKeyProvider)
+          ]
+      )
diff --git a/gen/Amazonka/MediaPackageVOD/Types/CmafPackage.hs b/gen/Amazonka/MediaPackageVOD/Types/CmafPackage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/CmafPackage.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.MediaPackageVOD.Types.CmafPackage
+-- 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.MediaPackageVOD.Types.CmafPackage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types.CmafEncryption
+import Amazonka.MediaPackageVOD.Types.HlsManifest
+import qualified Amazonka.Prelude as Prelude
+
+-- | A CMAF packaging configuration.
+--
+-- /See:/ 'newCmafPackage' smart constructor.
+data CmafPackage = CmafPackage'
+  { encryption :: Prelude.Maybe CmafEncryption,
+    -- | When includeEncoderConfigurationInSegments is set to true, MediaPackage
+    -- places your encoder\'s Sequence Parameter Set (SPS), Picture Parameter
+    -- Set (PPS), and Video Parameter Set (VPS) metadata in every video segment
+    -- instead of in the init fragment. This lets you use different
+    -- SPS\/PPS\/VPS settings for your assets during content playback.
+    includeEncoderConfigurationInSegments :: Prelude.Maybe Prelude.Bool,
+    -- | Duration (in seconds) of each fragment. Actual fragments will be rounded
+    -- to the nearest multiple of the source fragment duration.
+    segmentDurationSeconds :: Prelude.Maybe Prelude.Int,
+    -- | A list of HLS manifest configurations.
+    hlsManifests :: [HlsManifest]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CmafPackage' 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:
+--
+-- 'encryption', 'cmafPackage_encryption' - Undocumented member.
+--
+-- 'includeEncoderConfigurationInSegments', 'cmafPackage_includeEncoderConfigurationInSegments' - When includeEncoderConfigurationInSegments is set to true, MediaPackage
+-- places your encoder\'s Sequence Parameter Set (SPS), Picture Parameter
+-- Set (PPS), and Video Parameter Set (VPS) metadata in every video segment
+-- instead of in the init fragment. This lets you use different
+-- SPS\/PPS\/VPS settings for your assets during content playback.
+--
+-- 'segmentDurationSeconds', 'cmafPackage_segmentDurationSeconds' - Duration (in seconds) of each fragment. Actual fragments will be rounded
+-- to the nearest multiple of the source fragment duration.
+--
+-- 'hlsManifests', 'cmafPackage_hlsManifests' - A list of HLS manifest configurations.
+newCmafPackage ::
+  CmafPackage
+newCmafPackage =
+  CmafPackage'
+    { encryption = Prelude.Nothing,
+      includeEncoderConfigurationInSegments =
+        Prelude.Nothing,
+      segmentDurationSeconds = Prelude.Nothing,
+      hlsManifests = Prelude.mempty
+    }
+
+-- | Undocumented member.
+cmafPackage_encryption :: Lens.Lens' CmafPackage (Prelude.Maybe CmafEncryption)
+cmafPackage_encryption = Lens.lens (\CmafPackage' {encryption} -> encryption) (\s@CmafPackage' {} a -> s {encryption = a} :: CmafPackage)
+
+-- | When includeEncoderConfigurationInSegments is set to true, MediaPackage
+-- places your encoder\'s Sequence Parameter Set (SPS), Picture Parameter
+-- Set (PPS), and Video Parameter Set (VPS) metadata in every video segment
+-- instead of in the init fragment. This lets you use different
+-- SPS\/PPS\/VPS settings for your assets during content playback.
+cmafPackage_includeEncoderConfigurationInSegments :: Lens.Lens' CmafPackage (Prelude.Maybe Prelude.Bool)
+cmafPackage_includeEncoderConfigurationInSegments = Lens.lens (\CmafPackage' {includeEncoderConfigurationInSegments} -> includeEncoderConfigurationInSegments) (\s@CmafPackage' {} a -> s {includeEncoderConfigurationInSegments = a} :: CmafPackage)
+
+-- | Duration (in seconds) of each fragment. Actual fragments will be rounded
+-- to the nearest multiple of the source fragment duration.
+cmafPackage_segmentDurationSeconds :: Lens.Lens' CmafPackage (Prelude.Maybe Prelude.Int)
+cmafPackage_segmentDurationSeconds = Lens.lens (\CmafPackage' {segmentDurationSeconds} -> segmentDurationSeconds) (\s@CmafPackage' {} a -> s {segmentDurationSeconds = a} :: CmafPackage)
+
+-- | A list of HLS manifest configurations.
+cmafPackage_hlsManifests :: Lens.Lens' CmafPackage [HlsManifest]
+cmafPackage_hlsManifests = Lens.lens (\CmafPackage' {hlsManifests} -> hlsManifests) (\s@CmafPackage' {} a -> s {hlsManifests = a} :: CmafPackage) Prelude.. Lens.coerced
+
+instance Data.FromJSON CmafPackage where
+  parseJSON =
+    Data.withObject
+      "CmafPackage"
+      ( \x ->
+          CmafPackage'
+            Prelude.<$> (x Data..:? "encryption")
+            Prelude.<*> (x Data..:? "includeEncoderConfigurationInSegments")
+            Prelude.<*> (x Data..:? "segmentDurationSeconds")
+            Prelude.<*> (x Data..:? "hlsManifests" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable CmafPackage where
+  hashWithSalt _salt CmafPackage' {..} =
+    _salt
+      `Prelude.hashWithSalt` encryption
+      `Prelude.hashWithSalt` includeEncoderConfigurationInSegments
+      `Prelude.hashWithSalt` segmentDurationSeconds
+      `Prelude.hashWithSalt` hlsManifests
+
+instance Prelude.NFData CmafPackage where
+  rnf CmafPackage' {..} =
+    Prelude.rnf encryption
+      `Prelude.seq` Prelude.rnf includeEncoderConfigurationInSegments
+      `Prelude.seq` Prelude.rnf segmentDurationSeconds
+      `Prelude.seq` Prelude.rnf hlsManifests
+
+instance Data.ToJSON CmafPackage where
+  toJSON CmafPackage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("encryption" Data..=) Prelude.<$> encryption,
+            ("includeEncoderConfigurationInSegments" Data..=)
+              Prelude.<$> includeEncoderConfigurationInSegments,
+            ("segmentDurationSeconds" Data..=)
+              Prelude.<$> segmentDurationSeconds,
+            Prelude.Just ("hlsManifests" Data..= hlsManifests)
+          ]
+      )
diff --git a/gen/Amazonka/MediaPackageVOD/Types/DashEncryption.hs b/gen/Amazonka/MediaPackageVOD/Types/DashEncryption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/DashEncryption.hs
@@ -0,0 +1,83 @@
+{-# 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.MediaPackageVOD.Types.DashEncryption
+-- 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.MediaPackageVOD.Types.DashEncryption where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types.SpekeKeyProvider
+import qualified Amazonka.Prelude as Prelude
+
+-- | A Dynamic Adaptive Streaming over HTTP (DASH) encryption configuration.
+--
+-- /See:/ 'newDashEncryption' smart constructor.
+data DashEncryption = DashEncryption'
+  { spekeKeyProvider :: SpekeKeyProvider
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DashEncryption' 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:
+--
+-- 'spekeKeyProvider', 'dashEncryption_spekeKeyProvider' - Undocumented member.
+newDashEncryption ::
+  -- | 'spekeKeyProvider'
+  SpekeKeyProvider ->
+  DashEncryption
+newDashEncryption pSpekeKeyProvider_ =
+  DashEncryption'
+    { spekeKeyProvider =
+        pSpekeKeyProvider_
+    }
+
+-- | Undocumented member.
+dashEncryption_spekeKeyProvider :: Lens.Lens' DashEncryption SpekeKeyProvider
+dashEncryption_spekeKeyProvider = Lens.lens (\DashEncryption' {spekeKeyProvider} -> spekeKeyProvider) (\s@DashEncryption' {} a -> s {spekeKeyProvider = a} :: DashEncryption)
+
+instance Data.FromJSON DashEncryption where
+  parseJSON =
+    Data.withObject
+      "DashEncryption"
+      ( \x ->
+          DashEncryption'
+            Prelude.<$> (x Data..: "spekeKeyProvider")
+      )
+
+instance Prelude.Hashable DashEncryption where
+  hashWithSalt _salt DashEncryption' {..} =
+    _salt `Prelude.hashWithSalt` spekeKeyProvider
+
+instance Prelude.NFData DashEncryption where
+  rnf DashEncryption' {..} =
+    Prelude.rnf spekeKeyProvider
+
+instance Data.ToJSON DashEncryption where
+  toJSON DashEncryption' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("spekeKeyProvider" Data..= spekeKeyProvider)
+          ]
+      )
diff --git a/gen/Amazonka/MediaPackageVOD/Types/DashManifest.hs b/gen/Amazonka/MediaPackageVOD/Types/DashManifest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/DashManifest.hs
@@ -0,0 +1,188 @@
+{-# 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.MediaPackageVOD.Types.DashManifest
+-- 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.MediaPackageVOD.Types.DashManifest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types.ManifestLayout
+import Amazonka.MediaPackageVOD.Types.Profile
+import Amazonka.MediaPackageVOD.Types.ScteMarkersSource
+import Amazonka.MediaPackageVOD.Types.StreamSelection
+import qualified Amazonka.Prelude as Prelude
+
+-- | A DASH manifest configuration.
+--
+-- /See:/ 'newDashManifest' smart constructor.
+data DashManifest = DashManifest'
+  { -- | Determines the position of some tags in the Media Presentation
+    -- Description (MPD). When set to FULL, elements like SegmentTemplate and
+    -- ContentProtection are included in each Representation. When set to
+    -- COMPACT, duplicate elements are combined and presented at the
+    -- AdaptationSet level.
+    manifestLayout :: Prelude.Maybe ManifestLayout,
+    -- | An optional string to include in the name of the manifest.
+    manifestName :: Prelude.Maybe Prelude.Text,
+    -- | Minimum duration (in seconds) that a player will buffer media before
+    -- starting the presentation.
+    minBufferTimeSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The Dynamic Adaptive Streaming over HTTP (DASH) profile type. When set
+    -- to \"HBBTV_1_5\", HbbTV 1.5 compliant output is enabled.
+    profile :: Prelude.Maybe Profile,
+    -- | The source of scte markers used. When set to SEGMENTS, the scte markers
+    -- are sourced from the segments of the ingested content. When set to
+    -- MANIFEST, the scte markers are sourced from the manifest of the ingested
+    -- content. The MANIFEST value is compatible with source HLS playlists
+    -- using the SCTE-35 Enhanced syntax (#EXT-OATCLS-SCTE35 tags). SCTE-35
+    -- Elemental and SCTE-35 Daterange syntaxes are not supported with this
+    -- option.
+    scteMarkersSource :: Prelude.Maybe ScteMarkersSource,
+    streamSelection :: Prelude.Maybe StreamSelection
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DashManifest' 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:
+--
+-- 'manifestLayout', 'dashManifest_manifestLayout' - Determines the position of some tags in the Media Presentation
+-- Description (MPD). When set to FULL, elements like SegmentTemplate and
+-- ContentProtection are included in each Representation. When set to
+-- COMPACT, duplicate elements are combined and presented at the
+-- AdaptationSet level.
+--
+-- 'manifestName', 'dashManifest_manifestName' - An optional string to include in the name of the manifest.
+--
+-- 'minBufferTimeSeconds', 'dashManifest_minBufferTimeSeconds' - Minimum duration (in seconds) that a player will buffer media before
+-- starting the presentation.
+--
+-- 'profile', 'dashManifest_profile' - The Dynamic Adaptive Streaming over HTTP (DASH) profile type. When set
+-- to \"HBBTV_1_5\", HbbTV 1.5 compliant output is enabled.
+--
+-- 'scteMarkersSource', 'dashManifest_scteMarkersSource' - The source of scte markers used. When set to SEGMENTS, the scte markers
+-- are sourced from the segments of the ingested content. When set to
+-- MANIFEST, the scte markers are sourced from the manifest of the ingested
+-- content. The MANIFEST value is compatible with source HLS playlists
+-- using the SCTE-35 Enhanced syntax (#EXT-OATCLS-SCTE35 tags). SCTE-35
+-- Elemental and SCTE-35 Daterange syntaxes are not supported with this
+-- option.
+--
+-- 'streamSelection', 'dashManifest_streamSelection' - Undocumented member.
+newDashManifest ::
+  DashManifest
+newDashManifest =
+  DashManifest'
+    { manifestLayout = Prelude.Nothing,
+      manifestName = Prelude.Nothing,
+      minBufferTimeSeconds = Prelude.Nothing,
+      profile = Prelude.Nothing,
+      scteMarkersSource = Prelude.Nothing,
+      streamSelection = Prelude.Nothing
+    }
+
+-- | Determines the position of some tags in the Media Presentation
+-- Description (MPD). When set to FULL, elements like SegmentTemplate and
+-- ContentProtection are included in each Representation. When set to
+-- COMPACT, duplicate elements are combined and presented at the
+-- AdaptationSet level.
+dashManifest_manifestLayout :: Lens.Lens' DashManifest (Prelude.Maybe ManifestLayout)
+dashManifest_manifestLayout = Lens.lens (\DashManifest' {manifestLayout} -> manifestLayout) (\s@DashManifest' {} a -> s {manifestLayout = a} :: DashManifest)
+
+-- | An optional string to include in the name of the manifest.
+dashManifest_manifestName :: Lens.Lens' DashManifest (Prelude.Maybe Prelude.Text)
+dashManifest_manifestName = Lens.lens (\DashManifest' {manifestName} -> manifestName) (\s@DashManifest' {} a -> s {manifestName = a} :: DashManifest)
+
+-- | Minimum duration (in seconds) that a player will buffer media before
+-- starting the presentation.
+dashManifest_minBufferTimeSeconds :: Lens.Lens' DashManifest (Prelude.Maybe Prelude.Int)
+dashManifest_minBufferTimeSeconds = Lens.lens (\DashManifest' {minBufferTimeSeconds} -> minBufferTimeSeconds) (\s@DashManifest' {} a -> s {minBufferTimeSeconds = a} :: DashManifest)
+
+-- | The Dynamic Adaptive Streaming over HTTP (DASH) profile type. When set
+-- to \"HBBTV_1_5\", HbbTV 1.5 compliant output is enabled.
+dashManifest_profile :: Lens.Lens' DashManifest (Prelude.Maybe Profile)
+dashManifest_profile = Lens.lens (\DashManifest' {profile} -> profile) (\s@DashManifest' {} a -> s {profile = a} :: DashManifest)
+
+-- | The source of scte markers used. When set to SEGMENTS, the scte markers
+-- are sourced from the segments of the ingested content. When set to
+-- MANIFEST, the scte markers are sourced from the manifest of the ingested
+-- content. The MANIFEST value is compatible with source HLS playlists
+-- using the SCTE-35 Enhanced syntax (#EXT-OATCLS-SCTE35 tags). SCTE-35
+-- Elemental and SCTE-35 Daterange syntaxes are not supported with this
+-- option.
+dashManifest_scteMarkersSource :: Lens.Lens' DashManifest (Prelude.Maybe ScteMarkersSource)
+dashManifest_scteMarkersSource = Lens.lens (\DashManifest' {scteMarkersSource} -> scteMarkersSource) (\s@DashManifest' {} a -> s {scteMarkersSource = a} :: DashManifest)
+
+-- | Undocumented member.
+dashManifest_streamSelection :: Lens.Lens' DashManifest (Prelude.Maybe StreamSelection)
+dashManifest_streamSelection = Lens.lens (\DashManifest' {streamSelection} -> streamSelection) (\s@DashManifest' {} a -> s {streamSelection = a} :: DashManifest)
+
+instance Data.FromJSON DashManifest where
+  parseJSON =
+    Data.withObject
+      "DashManifest"
+      ( \x ->
+          DashManifest'
+            Prelude.<$> (x Data..:? "manifestLayout")
+            Prelude.<*> (x Data..:? "manifestName")
+            Prelude.<*> (x Data..:? "minBufferTimeSeconds")
+            Prelude.<*> (x Data..:? "profile")
+            Prelude.<*> (x Data..:? "scteMarkersSource")
+            Prelude.<*> (x Data..:? "streamSelection")
+      )
+
+instance Prelude.Hashable DashManifest where
+  hashWithSalt _salt DashManifest' {..} =
+    _salt
+      `Prelude.hashWithSalt` manifestLayout
+      `Prelude.hashWithSalt` manifestName
+      `Prelude.hashWithSalt` minBufferTimeSeconds
+      `Prelude.hashWithSalt` profile
+      `Prelude.hashWithSalt` scteMarkersSource
+      `Prelude.hashWithSalt` streamSelection
+
+instance Prelude.NFData DashManifest where
+  rnf DashManifest' {..} =
+    Prelude.rnf manifestLayout
+      `Prelude.seq` Prelude.rnf manifestName
+      `Prelude.seq` Prelude.rnf minBufferTimeSeconds
+      `Prelude.seq` Prelude.rnf profile
+      `Prelude.seq` Prelude.rnf scteMarkersSource
+      `Prelude.seq` Prelude.rnf streamSelection
+
+instance Data.ToJSON DashManifest where
+  toJSON DashManifest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("manifestLayout" Data..=)
+              Prelude.<$> manifestLayout,
+            ("manifestName" Data..=) Prelude.<$> manifestName,
+            ("minBufferTimeSeconds" Data..=)
+              Prelude.<$> minBufferTimeSeconds,
+            ("profile" Data..=) Prelude.<$> profile,
+            ("scteMarkersSource" Data..=)
+              Prelude.<$> scteMarkersSource,
+            ("streamSelection" Data..=)
+              Prelude.<$> streamSelection
+          ]
+      )
diff --git a/gen/Amazonka/MediaPackageVOD/Types/DashPackage.hs b/gen/Amazonka/MediaPackageVOD/Types/DashPackage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/DashPackage.hs
@@ -0,0 +1,213 @@
+{-# 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.MediaPackageVOD.Types.DashPackage
+-- 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.MediaPackageVOD.Types.DashPackage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types.DashEncryption
+import Amazonka.MediaPackageVOD.Types.DashManifest
+import Amazonka.MediaPackageVOD.Types.PeriodTriggersElement
+import Amazonka.MediaPackageVOD.Types.SegmentTemplateFormat
+import qualified Amazonka.Prelude as Prelude
+
+-- | A Dynamic Adaptive Streaming over HTTP (DASH) packaging configuration.
+--
+-- /See:/ 'newDashPackage' smart constructor.
+data DashPackage = DashPackage'
+  { encryption :: Prelude.Maybe DashEncryption,
+    -- | When includeEncoderConfigurationInSegments is set to true, MediaPackage
+    -- places your encoder\'s Sequence Parameter Set (SPS), Picture Parameter
+    -- Set (PPS), and Video Parameter Set (VPS) metadata in every video segment
+    -- instead of in the init fragment. This lets you use different
+    -- SPS\/PPS\/VPS settings for your assets during content playback.
+    includeEncoderConfigurationInSegments :: Prelude.Maybe Prelude.Bool,
+    -- | When enabled, an I-Frame only stream will be included in the output.
+    includeIframeOnlyStream :: Prelude.Maybe Prelude.Bool,
+    -- | A list of triggers that controls when the outgoing Dynamic Adaptive
+    -- Streaming over HTTP (DASH) Media Presentation Description (MPD) will be
+    -- partitioned into multiple periods. If empty, the content will not be
+    -- partitioned into more than one period. If the list contains \"ADS\", new
+    -- periods will be created where the Asset contains SCTE-35 ad markers.
+    periodTriggers :: Prelude.Maybe [PeriodTriggersElement],
+    -- | Duration (in seconds) of each segment. Actual segments will be rounded
+    -- to the nearest multiple of the source segment duration.
+    segmentDurationSeconds :: Prelude.Maybe Prelude.Int,
+    -- | Determines the type of SegmentTemplate included in the Media
+    -- Presentation Description (MPD). When set to NUMBER_WITH_TIMELINE, a full
+    -- timeline is presented in each SegmentTemplate, with $Number$ media URLs.
+    -- When set to TIME_WITH_TIMELINE, a full timeline is presented in each
+    -- SegmentTemplate, with $Time$ media URLs. When set to
+    -- NUMBER_WITH_DURATION, only a duration is included in each
+    -- SegmentTemplate, with $Number$ media URLs.
+    segmentTemplateFormat :: Prelude.Maybe SegmentTemplateFormat,
+    -- | A list of DASH manifest configurations.
+    dashManifests :: [DashManifest]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DashPackage' 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:
+--
+-- 'encryption', 'dashPackage_encryption' - Undocumented member.
+--
+-- 'includeEncoderConfigurationInSegments', 'dashPackage_includeEncoderConfigurationInSegments' - When includeEncoderConfigurationInSegments is set to true, MediaPackage
+-- places your encoder\'s Sequence Parameter Set (SPS), Picture Parameter
+-- Set (PPS), and Video Parameter Set (VPS) metadata in every video segment
+-- instead of in the init fragment. This lets you use different
+-- SPS\/PPS\/VPS settings for your assets during content playback.
+--
+-- 'includeIframeOnlyStream', 'dashPackage_includeIframeOnlyStream' - When enabled, an I-Frame only stream will be included in the output.
+--
+-- 'periodTriggers', 'dashPackage_periodTriggers' - A list of triggers that controls when the outgoing Dynamic Adaptive
+-- Streaming over HTTP (DASH) Media Presentation Description (MPD) will be
+-- partitioned into multiple periods. If empty, the content will not be
+-- partitioned into more than one period. If the list contains \"ADS\", new
+-- periods will be created where the Asset contains SCTE-35 ad markers.
+--
+-- 'segmentDurationSeconds', 'dashPackage_segmentDurationSeconds' - Duration (in seconds) of each segment. Actual segments will be rounded
+-- to the nearest multiple of the source segment duration.
+--
+-- 'segmentTemplateFormat', 'dashPackage_segmentTemplateFormat' - Determines the type of SegmentTemplate included in the Media
+-- Presentation Description (MPD). When set to NUMBER_WITH_TIMELINE, a full
+-- timeline is presented in each SegmentTemplate, with $Number$ media URLs.
+-- When set to TIME_WITH_TIMELINE, a full timeline is presented in each
+-- SegmentTemplate, with $Time$ media URLs. When set to
+-- NUMBER_WITH_DURATION, only a duration is included in each
+-- SegmentTemplate, with $Number$ media URLs.
+--
+-- 'dashManifests', 'dashPackage_dashManifests' - A list of DASH manifest configurations.
+newDashPackage ::
+  DashPackage
+newDashPackage =
+  DashPackage'
+    { encryption = Prelude.Nothing,
+      includeEncoderConfigurationInSegments =
+        Prelude.Nothing,
+      includeIframeOnlyStream = Prelude.Nothing,
+      periodTriggers = Prelude.Nothing,
+      segmentDurationSeconds = Prelude.Nothing,
+      segmentTemplateFormat = Prelude.Nothing,
+      dashManifests = Prelude.mempty
+    }
+
+-- | Undocumented member.
+dashPackage_encryption :: Lens.Lens' DashPackage (Prelude.Maybe DashEncryption)
+dashPackage_encryption = Lens.lens (\DashPackage' {encryption} -> encryption) (\s@DashPackage' {} a -> s {encryption = a} :: DashPackage)
+
+-- | When includeEncoderConfigurationInSegments is set to true, MediaPackage
+-- places your encoder\'s Sequence Parameter Set (SPS), Picture Parameter
+-- Set (PPS), and Video Parameter Set (VPS) metadata in every video segment
+-- instead of in the init fragment. This lets you use different
+-- SPS\/PPS\/VPS settings for your assets during content playback.
+dashPackage_includeEncoderConfigurationInSegments :: Lens.Lens' DashPackage (Prelude.Maybe Prelude.Bool)
+dashPackage_includeEncoderConfigurationInSegments = Lens.lens (\DashPackage' {includeEncoderConfigurationInSegments} -> includeEncoderConfigurationInSegments) (\s@DashPackage' {} a -> s {includeEncoderConfigurationInSegments = a} :: DashPackage)
+
+-- | When enabled, an I-Frame only stream will be included in the output.
+dashPackage_includeIframeOnlyStream :: Lens.Lens' DashPackage (Prelude.Maybe Prelude.Bool)
+dashPackage_includeIframeOnlyStream = Lens.lens (\DashPackage' {includeIframeOnlyStream} -> includeIframeOnlyStream) (\s@DashPackage' {} a -> s {includeIframeOnlyStream = a} :: DashPackage)
+
+-- | A list of triggers that controls when the outgoing Dynamic Adaptive
+-- Streaming over HTTP (DASH) Media Presentation Description (MPD) will be
+-- partitioned into multiple periods. If empty, the content will not be
+-- partitioned into more than one period. If the list contains \"ADS\", new
+-- periods will be created where the Asset contains SCTE-35 ad markers.
+dashPackage_periodTriggers :: Lens.Lens' DashPackage (Prelude.Maybe [PeriodTriggersElement])
+dashPackage_periodTriggers = Lens.lens (\DashPackage' {periodTriggers} -> periodTriggers) (\s@DashPackage' {} a -> s {periodTriggers = a} :: DashPackage) Prelude.. Lens.mapping Lens.coerced
+
+-- | Duration (in seconds) of each segment. Actual segments will be rounded
+-- to the nearest multiple of the source segment duration.
+dashPackage_segmentDurationSeconds :: Lens.Lens' DashPackage (Prelude.Maybe Prelude.Int)
+dashPackage_segmentDurationSeconds = Lens.lens (\DashPackage' {segmentDurationSeconds} -> segmentDurationSeconds) (\s@DashPackage' {} a -> s {segmentDurationSeconds = a} :: DashPackage)
+
+-- | Determines the type of SegmentTemplate included in the Media
+-- Presentation Description (MPD). When set to NUMBER_WITH_TIMELINE, a full
+-- timeline is presented in each SegmentTemplate, with $Number$ media URLs.
+-- When set to TIME_WITH_TIMELINE, a full timeline is presented in each
+-- SegmentTemplate, with $Time$ media URLs. When set to
+-- NUMBER_WITH_DURATION, only a duration is included in each
+-- SegmentTemplate, with $Number$ media URLs.
+dashPackage_segmentTemplateFormat :: Lens.Lens' DashPackage (Prelude.Maybe SegmentTemplateFormat)
+dashPackage_segmentTemplateFormat = Lens.lens (\DashPackage' {segmentTemplateFormat} -> segmentTemplateFormat) (\s@DashPackage' {} a -> s {segmentTemplateFormat = a} :: DashPackage)
+
+-- | A list of DASH manifest configurations.
+dashPackage_dashManifests :: Lens.Lens' DashPackage [DashManifest]
+dashPackage_dashManifests = Lens.lens (\DashPackage' {dashManifests} -> dashManifests) (\s@DashPackage' {} a -> s {dashManifests = a} :: DashPackage) Prelude.. Lens.coerced
+
+instance Data.FromJSON DashPackage where
+  parseJSON =
+    Data.withObject
+      "DashPackage"
+      ( \x ->
+          DashPackage'
+            Prelude.<$> (x Data..:? "encryption")
+            Prelude.<*> (x Data..:? "includeEncoderConfigurationInSegments")
+            Prelude.<*> (x Data..:? "includeIframeOnlyStream")
+            Prelude.<*> (x Data..:? "periodTriggers" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "segmentDurationSeconds")
+            Prelude.<*> (x Data..:? "segmentTemplateFormat")
+            Prelude.<*> (x Data..:? "dashManifests" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable DashPackage where
+  hashWithSalt _salt DashPackage' {..} =
+    _salt
+      `Prelude.hashWithSalt` encryption
+      `Prelude.hashWithSalt` includeEncoderConfigurationInSegments
+      `Prelude.hashWithSalt` includeIframeOnlyStream
+      `Prelude.hashWithSalt` periodTriggers
+      `Prelude.hashWithSalt` segmentDurationSeconds
+      `Prelude.hashWithSalt` segmentTemplateFormat
+      `Prelude.hashWithSalt` dashManifests
+
+instance Prelude.NFData DashPackage where
+  rnf DashPackage' {..} =
+    Prelude.rnf encryption
+      `Prelude.seq` Prelude.rnf includeEncoderConfigurationInSegments
+      `Prelude.seq` Prelude.rnf includeIframeOnlyStream
+      `Prelude.seq` Prelude.rnf periodTriggers
+      `Prelude.seq` Prelude.rnf segmentDurationSeconds
+      `Prelude.seq` Prelude.rnf segmentTemplateFormat
+      `Prelude.seq` Prelude.rnf dashManifests
+
+instance Data.ToJSON DashPackage where
+  toJSON DashPackage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("encryption" Data..=) Prelude.<$> encryption,
+            ("includeEncoderConfigurationInSegments" Data..=)
+              Prelude.<$> includeEncoderConfigurationInSegments,
+            ("includeIframeOnlyStream" Data..=)
+              Prelude.<$> includeIframeOnlyStream,
+            ("periodTriggers" Data..=)
+              Prelude.<$> periodTriggers,
+            ("segmentDurationSeconds" Data..=)
+              Prelude.<$> segmentDurationSeconds,
+            ("segmentTemplateFormat" Data..=)
+              Prelude.<$> segmentTemplateFormat,
+            Prelude.Just
+              ("dashManifests" Data..= dashManifests)
+          ]
+      )
diff --git a/gen/Amazonka/MediaPackageVOD/Types/EgressAccessLogs.hs b/gen/Amazonka/MediaPackageVOD/Types/EgressAccessLogs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/EgressAccessLogs.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.MediaPackageVOD.Types.EgressAccessLogs
+-- 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.MediaPackageVOD.Types.EgressAccessLogs 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
+
+-- | Configure egress access logging.
+--
+-- /See:/ 'newEgressAccessLogs' smart constructor.
+data EgressAccessLogs = EgressAccessLogs'
+  { -- | Customize the log group name.
+    logGroupName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EgressAccessLogs' 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:
+--
+-- 'logGroupName', 'egressAccessLogs_logGroupName' - Customize the log group name.
+newEgressAccessLogs ::
+  EgressAccessLogs
+newEgressAccessLogs =
+  EgressAccessLogs' {logGroupName = Prelude.Nothing}
+
+-- | Customize the log group name.
+egressAccessLogs_logGroupName :: Lens.Lens' EgressAccessLogs (Prelude.Maybe Prelude.Text)
+egressAccessLogs_logGroupName = Lens.lens (\EgressAccessLogs' {logGroupName} -> logGroupName) (\s@EgressAccessLogs' {} a -> s {logGroupName = a} :: EgressAccessLogs)
+
+instance Data.FromJSON EgressAccessLogs where
+  parseJSON =
+    Data.withObject
+      "EgressAccessLogs"
+      ( \x ->
+          EgressAccessLogs'
+            Prelude.<$> (x Data..:? "logGroupName")
+      )
+
+instance Prelude.Hashable EgressAccessLogs where
+  hashWithSalt _salt EgressAccessLogs' {..} =
+    _salt `Prelude.hashWithSalt` logGroupName
+
+instance Prelude.NFData EgressAccessLogs where
+  rnf EgressAccessLogs' {..} = Prelude.rnf logGroupName
+
+instance Data.ToJSON EgressAccessLogs where
+  toJSON EgressAccessLogs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("logGroupName" Data..=) Prelude.<$> logGroupName]
+      )
diff --git a/gen/Amazonka/MediaPackageVOD/Types/EgressEndpoint.hs b/gen/Amazonka/MediaPackageVOD/Types/EgressEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/EgressEndpoint.hs
@@ -0,0 +1,107 @@
+{-# 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.MediaPackageVOD.Types.EgressEndpoint
+-- 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.MediaPackageVOD.Types.EgressEndpoint 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 endpoint URL used to access an Asset using one
+-- PackagingConfiguration.
+--
+-- /See:/ 'newEgressEndpoint' smart constructor.
+data EgressEndpoint = EgressEndpoint'
+  { -- | The ID of the PackagingConfiguration being applied to the Asset.
+    packagingConfigurationId :: Prelude.Maybe Prelude.Text,
+    -- | The current processing status of the asset used for the packaging
+    -- configuration. The status can be either QUEUED, PROCESSING, PLAYABLE, or
+    -- FAILED. Status information won\'t be available for most assets ingested
+    -- before 2021-09-30.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The URL of the parent manifest for the repackaged Asset.
+    url :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EgressEndpoint' 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:
+--
+-- 'packagingConfigurationId', 'egressEndpoint_packagingConfigurationId' - The ID of the PackagingConfiguration being applied to the Asset.
+--
+-- 'status', 'egressEndpoint_status' - The current processing status of the asset used for the packaging
+-- configuration. The status can be either QUEUED, PROCESSING, PLAYABLE, or
+-- FAILED. Status information won\'t be available for most assets ingested
+-- before 2021-09-30.
+--
+-- 'url', 'egressEndpoint_url' - The URL of the parent manifest for the repackaged Asset.
+newEgressEndpoint ::
+  EgressEndpoint
+newEgressEndpoint =
+  EgressEndpoint'
+    { packagingConfigurationId =
+        Prelude.Nothing,
+      status = Prelude.Nothing,
+      url = Prelude.Nothing
+    }
+
+-- | The ID of the PackagingConfiguration being applied to the Asset.
+egressEndpoint_packagingConfigurationId :: Lens.Lens' EgressEndpoint (Prelude.Maybe Prelude.Text)
+egressEndpoint_packagingConfigurationId = Lens.lens (\EgressEndpoint' {packagingConfigurationId} -> packagingConfigurationId) (\s@EgressEndpoint' {} a -> s {packagingConfigurationId = a} :: EgressEndpoint)
+
+-- | The current processing status of the asset used for the packaging
+-- configuration. The status can be either QUEUED, PROCESSING, PLAYABLE, or
+-- FAILED. Status information won\'t be available for most assets ingested
+-- before 2021-09-30.
+egressEndpoint_status :: Lens.Lens' EgressEndpoint (Prelude.Maybe Prelude.Text)
+egressEndpoint_status = Lens.lens (\EgressEndpoint' {status} -> status) (\s@EgressEndpoint' {} a -> s {status = a} :: EgressEndpoint)
+
+-- | The URL of the parent manifest for the repackaged Asset.
+egressEndpoint_url :: Lens.Lens' EgressEndpoint (Prelude.Maybe Prelude.Text)
+egressEndpoint_url = Lens.lens (\EgressEndpoint' {url} -> url) (\s@EgressEndpoint' {} a -> s {url = a} :: EgressEndpoint)
+
+instance Data.FromJSON EgressEndpoint where
+  parseJSON =
+    Data.withObject
+      "EgressEndpoint"
+      ( \x ->
+          EgressEndpoint'
+            Prelude.<$> (x Data..:? "packagingConfigurationId")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "url")
+      )
+
+instance Prelude.Hashable EgressEndpoint where
+  hashWithSalt _salt EgressEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` packagingConfigurationId
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` url
+
+instance Prelude.NFData EgressEndpoint where
+  rnf EgressEndpoint' {..} =
+    Prelude.rnf packagingConfigurationId
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf url
diff --git a/gen/Amazonka/MediaPackageVOD/Types/EncryptionContractConfiguration.hs b/gen/Amazonka/MediaPackageVOD/Types/EncryptionContractConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/EncryptionContractConfiguration.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaPackageVOD.Types.EncryptionContractConfiguration
+-- 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.MediaPackageVOD.Types.EncryptionContractConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types.PresetSpeke20Audio
+import Amazonka.MediaPackageVOD.Types.PresetSpeke20Video
+import qualified Amazonka.Prelude as Prelude
+
+-- | Use encryptionContractConfiguration to configure one or more content
+-- encryption keys for your endpoints that use SPEKE 2.0. The encryption
+-- contract defines which content keys are used to encrypt the audio and
+-- video tracks in your stream. To configure the encryption contract,
+-- specify which audio and video encryption presets to use. Note the
+-- following considerations when using encryptionContractConfiguration:
+-- encryptionContractConfiguration can be used for DASH endpoints that use
+-- SPEKE 2.0. SPEKE 2.0 relies on the CPIX 2.3 specification. You must
+-- disable key rotation for this endpoint by setting
+-- keyRotationIntervalSeconds to 0.
+--
+-- /See:/ 'newEncryptionContractConfiguration' smart constructor.
+data EncryptionContractConfiguration = EncryptionContractConfiguration'
+  { -- | A collection of audio encryption presets.
+    presetSpeke20Audio :: PresetSpeke20Audio,
+    -- | A collection of video encryption presets.
+    presetSpeke20Video :: PresetSpeke20Video
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EncryptionContractConfiguration' 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:
+--
+-- 'presetSpeke20Audio', 'encryptionContractConfiguration_presetSpeke20Audio' - A collection of audio encryption presets.
+--
+-- 'presetSpeke20Video', 'encryptionContractConfiguration_presetSpeke20Video' - A collection of video encryption presets.
+newEncryptionContractConfiguration ::
+  -- | 'presetSpeke20Audio'
+  PresetSpeke20Audio ->
+  -- | 'presetSpeke20Video'
+  PresetSpeke20Video ->
+  EncryptionContractConfiguration
+newEncryptionContractConfiguration
+  pPresetSpeke20Audio_
+  pPresetSpeke20Video_ =
+    EncryptionContractConfiguration'
+      { presetSpeke20Audio =
+          pPresetSpeke20Audio_,
+        presetSpeke20Video = pPresetSpeke20Video_
+      }
+
+-- | A collection of audio encryption presets.
+encryptionContractConfiguration_presetSpeke20Audio :: Lens.Lens' EncryptionContractConfiguration PresetSpeke20Audio
+encryptionContractConfiguration_presetSpeke20Audio = Lens.lens (\EncryptionContractConfiguration' {presetSpeke20Audio} -> presetSpeke20Audio) (\s@EncryptionContractConfiguration' {} a -> s {presetSpeke20Audio = a} :: EncryptionContractConfiguration)
+
+-- | A collection of video encryption presets.
+encryptionContractConfiguration_presetSpeke20Video :: Lens.Lens' EncryptionContractConfiguration PresetSpeke20Video
+encryptionContractConfiguration_presetSpeke20Video = Lens.lens (\EncryptionContractConfiguration' {presetSpeke20Video} -> presetSpeke20Video) (\s@EncryptionContractConfiguration' {} a -> s {presetSpeke20Video = a} :: EncryptionContractConfiguration)
+
+instance
+  Data.FromJSON
+    EncryptionContractConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "EncryptionContractConfiguration"
+      ( \x ->
+          EncryptionContractConfiguration'
+            Prelude.<$> (x Data..: "presetSpeke20Audio")
+            Prelude.<*> (x Data..: "presetSpeke20Video")
+      )
+
+instance
+  Prelude.Hashable
+    EncryptionContractConfiguration
+  where
+  hashWithSalt
+    _salt
+    EncryptionContractConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` presetSpeke20Audio
+        `Prelude.hashWithSalt` presetSpeke20Video
+
+instance
+  Prelude.NFData
+    EncryptionContractConfiguration
+  where
+  rnf EncryptionContractConfiguration' {..} =
+    Prelude.rnf presetSpeke20Audio
+      `Prelude.seq` Prelude.rnf presetSpeke20Video
+
+instance Data.ToJSON EncryptionContractConfiguration where
+  toJSON EncryptionContractConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("presetSpeke20Audio" Data..= presetSpeke20Audio),
+            Prelude.Just
+              ("presetSpeke20Video" Data..= presetSpeke20Video)
+          ]
+      )
diff --git a/gen/Amazonka/MediaPackageVOD/Types/EncryptionMethod.hs b/gen/Amazonka/MediaPackageVOD/Types/EncryptionMethod.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/EncryptionMethod.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.MediaPackageVOD.Types.EncryptionMethod
+-- 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.MediaPackageVOD.Types.EncryptionMethod
+  ( EncryptionMethod
+      ( ..,
+        EncryptionMethod_AES_128,
+        EncryptionMethod_SAMPLE_AES
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EncryptionMethod = EncryptionMethod'
+  { fromEncryptionMethod ::
+      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 EncryptionMethod_AES_128 :: EncryptionMethod
+pattern EncryptionMethod_AES_128 = EncryptionMethod' "AES_128"
+
+pattern EncryptionMethod_SAMPLE_AES :: EncryptionMethod
+pattern EncryptionMethod_SAMPLE_AES = EncryptionMethod' "SAMPLE_AES"
+
+{-# COMPLETE
+  EncryptionMethod_AES_128,
+  EncryptionMethod_SAMPLE_AES,
+  EncryptionMethod'
+  #-}
diff --git a/gen/Amazonka/MediaPackageVOD/Types/HlsEncryption.hs b/gen/Amazonka/MediaPackageVOD/Types/HlsEncryption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/HlsEncryption.hs
@@ -0,0 +1,116 @@
+{-# 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.MediaPackageVOD.Types.HlsEncryption
+-- 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.MediaPackageVOD.Types.HlsEncryption where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types.EncryptionMethod
+import Amazonka.MediaPackageVOD.Types.SpekeKeyProvider
+import qualified Amazonka.Prelude as Prelude
+
+-- | An HTTP Live Streaming (HLS) encryption configuration.
+--
+-- /See:/ 'newHlsEncryption' smart constructor.
+data HlsEncryption = HlsEncryption'
+  { -- | A constant initialization vector for encryption (optional). When not
+    -- specified the initialization vector will be periodically rotated.
+    constantInitializationVector :: Prelude.Maybe Prelude.Text,
+    -- | The encryption method to use.
+    encryptionMethod :: Prelude.Maybe EncryptionMethod,
+    spekeKeyProvider :: SpekeKeyProvider
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HlsEncryption' 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:
+--
+-- 'constantInitializationVector', 'hlsEncryption_constantInitializationVector' - A constant initialization vector for encryption (optional). When not
+-- specified the initialization vector will be periodically rotated.
+--
+-- 'encryptionMethod', 'hlsEncryption_encryptionMethod' - The encryption method to use.
+--
+-- 'spekeKeyProvider', 'hlsEncryption_spekeKeyProvider' - Undocumented member.
+newHlsEncryption ::
+  -- | 'spekeKeyProvider'
+  SpekeKeyProvider ->
+  HlsEncryption
+newHlsEncryption pSpekeKeyProvider_ =
+  HlsEncryption'
+    { constantInitializationVector =
+        Prelude.Nothing,
+      encryptionMethod = Prelude.Nothing,
+      spekeKeyProvider = pSpekeKeyProvider_
+    }
+
+-- | A constant initialization vector for encryption (optional). When not
+-- specified the initialization vector will be periodically rotated.
+hlsEncryption_constantInitializationVector :: Lens.Lens' HlsEncryption (Prelude.Maybe Prelude.Text)
+hlsEncryption_constantInitializationVector = Lens.lens (\HlsEncryption' {constantInitializationVector} -> constantInitializationVector) (\s@HlsEncryption' {} a -> s {constantInitializationVector = a} :: HlsEncryption)
+
+-- | The encryption method to use.
+hlsEncryption_encryptionMethod :: Lens.Lens' HlsEncryption (Prelude.Maybe EncryptionMethod)
+hlsEncryption_encryptionMethod = Lens.lens (\HlsEncryption' {encryptionMethod} -> encryptionMethod) (\s@HlsEncryption' {} a -> s {encryptionMethod = a} :: HlsEncryption)
+
+-- | Undocumented member.
+hlsEncryption_spekeKeyProvider :: Lens.Lens' HlsEncryption SpekeKeyProvider
+hlsEncryption_spekeKeyProvider = Lens.lens (\HlsEncryption' {spekeKeyProvider} -> spekeKeyProvider) (\s@HlsEncryption' {} a -> s {spekeKeyProvider = a} :: HlsEncryption)
+
+instance Data.FromJSON HlsEncryption where
+  parseJSON =
+    Data.withObject
+      "HlsEncryption"
+      ( \x ->
+          HlsEncryption'
+            Prelude.<$> (x Data..:? "constantInitializationVector")
+            Prelude.<*> (x Data..:? "encryptionMethod")
+            Prelude.<*> (x Data..: "spekeKeyProvider")
+      )
+
+instance Prelude.Hashable HlsEncryption where
+  hashWithSalt _salt HlsEncryption' {..} =
+    _salt
+      `Prelude.hashWithSalt` constantInitializationVector
+      `Prelude.hashWithSalt` encryptionMethod
+      `Prelude.hashWithSalt` spekeKeyProvider
+
+instance Prelude.NFData HlsEncryption where
+  rnf HlsEncryption' {..} =
+    Prelude.rnf constantInitializationVector
+      `Prelude.seq` Prelude.rnf encryptionMethod
+      `Prelude.seq` Prelude.rnf spekeKeyProvider
+
+instance Data.ToJSON HlsEncryption where
+  toJSON HlsEncryption' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("constantInitializationVector" Data..=)
+              Prelude.<$> constantInitializationVector,
+            ("encryptionMethod" Data..=)
+              Prelude.<$> encryptionMethod,
+            Prelude.Just
+              ("spekeKeyProvider" Data..= spekeKeyProvider)
+          ]
+      )
diff --git a/gen/Amazonka/MediaPackageVOD/Types/HlsManifest.hs b/gen/Amazonka/MediaPackageVOD/Types/HlsManifest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/HlsManifest.hs
@@ -0,0 +1,188 @@
+{-# 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.MediaPackageVOD.Types.HlsManifest
+-- 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.MediaPackageVOD.Types.HlsManifest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types.AdMarkers
+import Amazonka.MediaPackageVOD.Types.StreamSelection
+import qualified Amazonka.Prelude as Prelude
+
+-- | An HTTP Live Streaming (HLS) manifest configuration.
+--
+-- /See:/ 'newHlsManifest' smart constructor.
+data HlsManifest = HlsManifest'
+  { -- | This setting controls how ad markers are included in the packaged
+    -- OriginEndpoint. \"NONE\" will omit all SCTE-35 ad markers from the
+    -- output. \"PASSTHROUGH\" causes the manifest to contain a copy of the
+    -- SCTE-35 ad markers (comments) taken directly from the input HTTP Live
+    -- Streaming (HLS) manifest. \"SCTE35_ENHANCED\" generates ad markers and
+    -- blackout tags based on SCTE-35 messages in the input source.
+    adMarkers :: Prelude.Maybe AdMarkers,
+    -- | When enabled, an I-Frame only stream will be included in the output.
+    includeIframeOnlyStream :: Prelude.Maybe Prelude.Bool,
+    -- | An optional string to include in the name of the manifest.
+    manifestName :: Prelude.Maybe Prelude.Text,
+    -- | The interval (in seconds) between each EXT-X-PROGRAM-DATE-TIME tag
+    -- inserted into manifests. Additionally, when an interval is specified
+    -- ID3Timed Metadata messages will be generated every 5 seconds using the
+    -- ingest time of the content. If the interval is not specified, or set to
+    -- 0, then no EXT-X-PROGRAM-DATE-TIME tags will be inserted into manifests
+    -- and no ID3Timed Metadata messages will be generated. Note that
+    -- irrespective of this parameter, if any ID3 Timed Metadata is found in
+    -- HTTP Live Streaming (HLS) input, it will be passed through to HLS
+    -- output.
+    programDateTimeIntervalSeconds :: Prelude.Maybe Prelude.Int,
+    -- | When enabled, the EXT-X-KEY tag will be repeated in output manifests.
+    repeatExtXKey :: Prelude.Maybe Prelude.Bool,
+    streamSelection :: Prelude.Maybe StreamSelection
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HlsManifest' 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:
+--
+-- 'adMarkers', 'hlsManifest_adMarkers' - This setting controls how ad markers are included in the packaged
+-- OriginEndpoint. \"NONE\" will omit all SCTE-35 ad markers from the
+-- output. \"PASSTHROUGH\" causes the manifest to contain a copy of the
+-- SCTE-35 ad markers (comments) taken directly from the input HTTP Live
+-- Streaming (HLS) manifest. \"SCTE35_ENHANCED\" generates ad markers and
+-- blackout tags based on SCTE-35 messages in the input source.
+--
+-- 'includeIframeOnlyStream', 'hlsManifest_includeIframeOnlyStream' - When enabled, an I-Frame only stream will be included in the output.
+--
+-- 'manifestName', 'hlsManifest_manifestName' - An optional string to include in the name of the manifest.
+--
+-- 'programDateTimeIntervalSeconds', 'hlsManifest_programDateTimeIntervalSeconds' - The interval (in seconds) between each EXT-X-PROGRAM-DATE-TIME tag
+-- inserted into manifests. Additionally, when an interval is specified
+-- ID3Timed Metadata messages will be generated every 5 seconds using the
+-- ingest time of the content. If the interval is not specified, or set to
+-- 0, then no EXT-X-PROGRAM-DATE-TIME tags will be inserted into manifests
+-- and no ID3Timed Metadata messages will be generated. Note that
+-- irrespective of this parameter, if any ID3 Timed Metadata is found in
+-- HTTP Live Streaming (HLS) input, it will be passed through to HLS
+-- output.
+--
+-- 'repeatExtXKey', 'hlsManifest_repeatExtXKey' - When enabled, the EXT-X-KEY tag will be repeated in output manifests.
+--
+-- 'streamSelection', 'hlsManifest_streamSelection' - Undocumented member.
+newHlsManifest ::
+  HlsManifest
+newHlsManifest =
+  HlsManifest'
+    { adMarkers = Prelude.Nothing,
+      includeIframeOnlyStream = Prelude.Nothing,
+      manifestName = Prelude.Nothing,
+      programDateTimeIntervalSeconds = Prelude.Nothing,
+      repeatExtXKey = Prelude.Nothing,
+      streamSelection = Prelude.Nothing
+    }
+
+-- | This setting controls how ad markers are included in the packaged
+-- OriginEndpoint. \"NONE\" will omit all SCTE-35 ad markers from the
+-- output. \"PASSTHROUGH\" causes the manifest to contain a copy of the
+-- SCTE-35 ad markers (comments) taken directly from the input HTTP Live
+-- Streaming (HLS) manifest. \"SCTE35_ENHANCED\" generates ad markers and
+-- blackout tags based on SCTE-35 messages in the input source.
+hlsManifest_adMarkers :: Lens.Lens' HlsManifest (Prelude.Maybe AdMarkers)
+hlsManifest_adMarkers = Lens.lens (\HlsManifest' {adMarkers} -> adMarkers) (\s@HlsManifest' {} a -> s {adMarkers = a} :: HlsManifest)
+
+-- | When enabled, an I-Frame only stream will be included in the output.
+hlsManifest_includeIframeOnlyStream :: Lens.Lens' HlsManifest (Prelude.Maybe Prelude.Bool)
+hlsManifest_includeIframeOnlyStream = Lens.lens (\HlsManifest' {includeIframeOnlyStream} -> includeIframeOnlyStream) (\s@HlsManifest' {} a -> s {includeIframeOnlyStream = a} :: HlsManifest)
+
+-- | An optional string to include in the name of the manifest.
+hlsManifest_manifestName :: Lens.Lens' HlsManifest (Prelude.Maybe Prelude.Text)
+hlsManifest_manifestName = Lens.lens (\HlsManifest' {manifestName} -> manifestName) (\s@HlsManifest' {} a -> s {manifestName = a} :: HlsManifest)
+
+-- | The interval (in seconds) between each EXT-X-PROGRAM-DATE-TIME tag
+-- inserted into manifests. Additionally, when an interval is specified
+-- ID3Timed Metadata messages will be generated every 5 seconds using the
+-- ingest time of the content. If the interval is not specified, or set to
+-- 0, then no EXT-X-PROGRAM-DATE-TIME tags will be inserted into manifests
+-- and no ID3Timed Metadata messages will be generated. Note that
+-- irrespective of this parameter, if any ID3 Timed Metadata is found in
+-- HTTP Live Streaming (HLS) input, it will be passed through to HLS
+-- output.
+hlsManifest_programDateTimeIntervalSeconds :: Lens.Lens' HlsManifest (Prelude.Maybe Prelude.Int)
+hlsManifest_programDateTimeIntervalSeconds = Lens.lens (\HlsManifest' {programDateTimeIntervalSeconds} -> programDateTimeIntervalSeconds) (\s@HlsManifest' {} a -> s {programDateTimeIntervalSeconds = a} :: HlsManifest)
+
+-- | When enabled, the EXT-X-KEY tag will be repeated in output manifests.
+hlsManifest_repeatExtXKey :: Lens.Lens' HlsManifest (Prelude.Maybe Prelude.Bool)
+hlsManifest_repeatExtXKey = Lens.lens (\HlsManifest' {repeatExtXKey} -> repeatExtXKey) (\s@HlsManifest' {} a -> s {repeatExtXKey = a} :: HlsManifest)
+
+-- | Undocumented member.
+hlsManifest_streamSelection :: Lens.Lens' HlsManifest (Prelude.Maybe StreamSelection)
+hlsManifest_streamSelection = Lens.lens (\HlsManifest' {streamSelection} -> streamSelection) (\s@HlsManifest' {} a -> s {streamSelection = a} :: HlsManifest)
+
+instance Data.FromJSON HlsManifest where
+  parseJSON =
+    Data.withObject
+      "HlsManifest"
+      ( \x ->
+          HlsManifest'
+            Prelude.<$> (x Data..:? "adMarkers")
+            Prelude.<*> (x Data..:? "includeIframeOnlyStream")
+            Prelude.<*> (x Data..:? "manifestName")
+            Prelude.<*> (x Data..:? "programDateTimeIntervalSeconds")
+            Prelude.<*> (x Data..:? "repeatExtXKey")
+            Prelude.<*> (x Data..:? "streamSelection")
+      )
+
+instance Prelude.Hashable HlsManifest where
+  hashWithSalt _salt HlsManifest' {..} =
+    _salt
+      `Prelude.hashWithSalt` adMarkers
+      `Prelude.hashWithSalt` includeIframeOnlyStream
+      `Prelude.hashWithSalt` manifestName
+      `Prelude.hashWithSalt` programDateTimeIntervalSeconds
+      `Prelude.hashWithSalt` repeatExtXKey
+      `Prelude.hashWithSalt` streamSelection
+
+instance Prelude.NFData HlsManifest where
+  rnf HlsManifest' {..} =
+    Prelude.rnf adMarkers
+      `Prelude.seq` Prelude.rnf includeIframeOnlyStream
+      `Prelude.seq` Prelude.rnf manifestName
+      `Prelude.seq` Prelude.rnf programDateTimeIntervalSeconds
+      `Prelude.seq` Prelude.rnf repeatExtXKey
+      `Prelude.seq` Prelude.rnf streamSelection
+
+instance Data.ToJSON HlsManifest where
+  toJSON HlsManifest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("adMarkers" Data..=) Prelude.<$> adMarkers,
+            ("includeIframeOnlyStream" Data..=)
+              Prelude.<$> includeIframeOnlyStream,
+            ("manifestName" Data..=) Prelude.<$> manifestName,
+            ("programDateTimeIntervalSeconds" Data..=)
+              Prelude.<$> programDateTimeIntervalSeconds,
+            ("repeatExtXKey" Data..=) Prelude.<$> repeatExtXKey,
+            ("streamSelection" Data..=)
+              Prelude.<$> streamSelection
+          ]
+      )
diff --git a/gen/Amazonka/MediaPackageVOD/Types/HlsPackage.hs b/gen/Amazonka/MediaPackageVOD/Types/HlsPackage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/HlsPackage.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.MediaPackageVOD.Types.HlsPackage
+-- 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.MediaPackageVOD.Types.HlsPackage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types.HlsEncryption
+import Amazonka.MediaPackageVOD.Types.HlsManifest
+import qualified Amazonka.Prelude as Prelude
+
+-- | An HTTP Live Streaming (HLS) packaging configuration.
+--
+-- /See:/ 'newHlsPackage' smart constructor.
+data HlsPackage = HlsPackage'
+  { encryption :: Prelude.Maybe HlsEncryption,
+    -- | When enabled, MediaPackage passes through digital video broadcasting
+    -- (DVB) subtitles into the output.
+    includeDvbSubtitles :: Prelude.Maybe Prelude.Bool,
+    -- | Duration (in seconds) of each fragment. Actual fragments will be rounded
+    -- to the nearest multiple of the source fragment duration.
+    segmentDurationSeconds :: Prelude.Maybe Prelude.Int,
+    -- | When enabled, audio streams will be placed in rendition groups in the
+    -- output.
+    useAudioRenditionGroup :: Prelude.Maybe Prelude.Bool,
+    -- | A list of HLS manifest configurations.
+    hlsManifests :: [HlsManifest]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HlsPackage' 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:
+--
+-- 'encryption', 'hlsPackage_encryption' - Undocumented member.
+--
+-- 'includeDvbSubtitles', 'hlsPackage_includeDvbSubtitles' - When enabled, MediaPackage passes through digital video broadcasting
+-- (DVB) subtitles into the output.
+--
+-- 'segmentDurationSeconds', 'hlsPackage_segmentDurationSeconds' - Duration (in seconds) of each fragment. Actual fragments will be rounded
+-- to the nearest multiple of the source fragment duration.
+--
+-- 'useAudioRenditionGroup', 'hlsPackage_useAudioRenditionGroup' - When enabled, audio streams will be placed in rendition groups in the
+-- output.
+--
+-- 'hlsManifests', 'hlsPackage_hlsManifests' - A list of HLS manifest configurations.
+newHlsPackage ::
+  HlsPackage
+newHlsPackage =
+  HlsPackage'
+    { encryption = Prelude.Nothing,
+      includeDvbSubtitles = Prelude.Nothing,
+      segmentDurationSeconds = Prelude.Nothing,
+      useAudioRenditionGroup = Prelude.Nothing,
+      hlsManifests = Prelude.mempty
+    }
+
+-- | Undocumented member.
+hlsPackage_encryption :: Lens.Lens' HlsPackage (Prelude.Maybe HlsEncryption)
+hlsPackage_encryption = Lens.lens (\HlsPackage' {encryption} -> encryption) (\s@HlsPackage' {} a -> s {encryption = a} :: HlsPackage)
+
+-- | When enabled, MediaPackage passes through digital video broadcasting
+-- (DVB) subtitles into the output.
+hlsPackage_includeDvbSubtitles :: Lens.Lens' HlsPackage (Prelude.Maybe Prelude.Bool)
+hlsPackage_includeDvbSubtitles = Lens.lens (\HlsPackage' {includeDvbSubtitles} -> includeDvbSubtitles) (\s@HlsPackage' {} a -> s {includeDvbSubtitles = a} :: HlsPackage)
+
+-- | Duration (in seconds) of each fragment. Actual fragments will be rounded
+-- to the nearest multiple of the source fragment duration.
+hlsPackage_segmentDurationSeconds :: Lens.Lens' HlsPackage (Prelude.Maybe Prelude.Int)
+hlsPackage_segmentDurationSeconds = Lens.lens (\HlsPackage' {segmentDurationSeconds} -> segmentDurationSeconds) (\s@HlsPackage' {} a -> s {segmentDurationSeconds = a} :: HlsPackage)
+
+-- | When enabled, audio streams will be placed in rendition groups in the
+-- output.
+hlsPackage_useAudioRenditionGroup :: Lens.Lens' HlsPackage (Prelude.Maybe Prelude.Bool)
+hlsPackage_useAudioRenditionGroup = Lens.lens (\HlsPackage' {useAudioRenditionGroup} -> useAudioRenditionGroup) (\s@HlsPackage' {} a -> s {useAudioRenditionGroup = a} :: HlsPackage)
+
+-- | A list of HLS manifest configurations.
+hlsPackage_hlsManifests :: Lens.Lens' HlsPackage [HlsManifest]
+hlsPackage_hlsManifests = Lens.lens (\HlsPackage' {hlsManifests} -> hlsManifests) (\s@HlsPackage' {} a -> s {hlsManifests = a} :: HlsPackage) Prelude.. Lens.coerced
+
+instance Data.FromJSON HlsPackage where
+  parseJSON =
+    Data.withObject
+      "HlsPackage"
+      ( \x ->
+          HlsPackage'
+            Prelude.<$> (x Data..:? "encryption")
+            Prelude.<*> (x Data..:? "includeDvbSubtitles")
+            Prelude.<*> (x Data..:? "segmentDurationSeconds")
+            Prelude.<*> (x Data..:? "useAudioRenditionGroup")
+            Prelude.<*> (x Data..:? "hlsManifests" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable HlsPackage where
+  hashWithSalt _salt HlsPackage' {..} =
+    _salt
+      `Prelude.hashWithSalt` encryption
+      `Prelude.hashWithSalt` includeDvbSubtitles
+      `Prelude.hashWithSalt` segmentDurationSeconds
+      `Prelude.hashWithSalt` useAudioRenditionGroup
+      `Prelude.hashWithSalt` hlsManifests
+
+instance Prelude.NFData HlsPackage where
+  rnf HlsPackage' {..} =
+    Prelude.rnf encryption
+      `Prelude.seq` Prelude.rnf includeDvbSubtitles
+      `Prelude.seq` Prelude.rnf segmentDurationSeconds
+      `Prelude.seq` Prelude.rnf useAudioRenditionGroup
+      `Prelude.seq` Prelude.rnf hlsManifests
+
+instance Data.ToJSON HlsPackage where
+  toJSON HlsPackage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("encryption" Data..=) Prelude.<$> encryption,
+            ("includeDvbSubtitles" Data..=)
+              Prelude.<$> includeDvbSubtitles,
+            ("segmentDurationSeconds" Data..=)
+              Prelude.<$> segmentDurationSeconds,
+            ("useAudioRenditionGroup" Data..=)
+              Prelude.<$> useAudioRenditionGroup,
+            Prelude.Just ("hlsManifests" Data..= hlsManifests)
+          ]
+      )
diff --git a/gen/Amazonka/MediaPackageVOD/Types/ManifestLayout.hs b/gen/Amazonka/MediaPackageVOD/Types/ManifestLayout.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/ManifestLayout.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.MediaPackageVOD.Types.ManifestLayout
+-- 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.MediaPackageVOD.Types.ManifestLayout
+  ( ManifestLayout
+      ( ..,
+        ManifestLayout_COMPACT,
+        ManifestLayout_FULL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ManifestLayout = ManifestLayout'
+  { fromManifestLayout ::
+      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 ManifestLayout_COMPACT :: ManifestLayout
+pattern ManifestLayout_COMPACT = ManifestLayout' "COMPACT"
+
+pattern ManifestLayout_FULL :: ManifestLayout
+pattern ManifestLayout_FULL = ManifestLayout' "FULL"
+
+{-# COMPLETE
+  ManifestLayout_COMPACT,
+  ManifestLayout_FULL,
+  ManifestLayout'
+  #-}
diff --git a/gen/Amazonka/MediaPackageVOD/Types/MssEncryption.hs b/gen/Amazonka/MediaPackageVOD/Types/MssEncryption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/MssEncryption.hs
@@ -0,0 +1,82 @@
+{-# 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.MediaPackageVOD.Types.MssEncryption
+-- 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.MediaPackageVOD.Types.MssEncryption where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types.SpekeKeyProvider
+import qualified Amazonka.Prelude as Prelude
+
+-- | A Microsoft Smooth Streaming (MSS) encryption configuration.
+--
+-- /See:/ 'newMssEncryption' smart constructor.
+data MssEncryption = MssEncryption'
+  { spekeKeyProvider :: SpekeKeyProvider
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MssEncryption' 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:
+--
+-- 'spekeKeyProvider', 'mssEncryption_spekeKeyProvider' - Undocumented member.
+newMssEncryption ::
+  -- | 'spekeKeyProvider'
+  SpekeKeyProvider ->
+  MssEncryption
+newMssEncryption pSpekeKeyProvider_ =
+  MssEncryption'
+    { spekeKeyProvider =
+        pSpekeKeyProvider_
+    }
+
+-- | Undocumented member.
+mssEncryption_spekeKeyProvider :: Lens.Lens' MssEncryption SpekeKeyProvider
+mssEncryption_spekeKeyProvider = Lens.lens (\MssEncryption' {spekeKeyProvider} -> spekeKeyProvider) (\s@MssEncryption' {} a -> s {spekeKeyProvider = a} :: MssEncryption)
+
+instance Data.FromJSON MssEncryption where
+  parseJSON =
+    Data.withObject
+      "MssEncryption"
+      ( \x ->
+          MssEncryption'
+            Prelude.<$> (x Data..: "spekeKeyProvider")
+      )
+
+instance Prelude.Hashable MssEncryption where
+  hashWithSalt _salt MssEncryption' {..} =
+    _salt `Prelude.hashWithSalt` spekeKeyProvider
+
+instance Prelude.NFData MssEncryption where
+  rnf MssEncryption' {..} = Prelude.rnf spekeKeyProvider
+
+instance Data.ToJSON MssEncryption where
+  toJSON MssEncryption' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("spekeKeyProvider" Data..= spekeKeyProvider)
+          ]
+      )
diff --git a/gen/Amazonka/MediaPackageVOD/Types/MssManifest.hs b/gen/Amazonka/MediaPackageVOD/Types/MssManifest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/MssManifest.hs
@@ -0,0 +1,94 @@
+{-# 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.MediaPackageVOD.Types.MssManifest
+-- 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.MediaPackageVOD.Types.MssManifest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types.StreamSelection
+import qualified Amazonka.Prelude as Prelude
+
+-- | A Microsoft Smooth Streaming (MSS) manifest configuration.
+--
+-- /See:/ 'newMssManifest' smart constructor.
+data MssManifest = MssManifest'
+  { -- | An optional string to include in the name of the manifest.
+    manifestName :: Prelude.Maybe Prelude.Text,
+    streamSelection :: Prelude.Maybe StreamSelection
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MssManifest' 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:
+--
+-- 'manifestName', 'mssManifest_manifestName' - An optional string to include in the name of the manifest.
+--
+-- 'streamSelection', 'mssManifest_streamSelection' - Undocumented member.
+newMssManifest ::
+  MssManifest
+newMssManifest =
+  MssManifest'
+    { manifestName = Prelude.Nothing,
+      streamSelection = Prelude.Nothing
+    }
+
+-- | An optional string to include in the name of the manifest.
+mssManifest_manifestName :: Lens.Lens' MssManifest (Prelude.Maybe Prelude.Text)
+mssManifest_manifestName = Lens.lens (\MssManifest' {manifestName} -> manifestName) (\s@MssManifest' {} a -> s {manifestName = a} :: MssManifest)
+
+-- | Undocumented member.
+mssManifest_streamSelection :: Lens.Lens' MssManifest (Prelude.Maybe StreamSelection)
+mssManifest_streamSelection = Lens.lens (\MssManifest' {streamSelection} -> streamSelection) (\s@MssManifest' {} a -> s {streamSelection = a} :: MssManifest)
+
+instance Data.FromJSON MssManifest where
+  parseJSON =
+    Data.withObject
+      "MssManifest"
+      ( \x ->
+          MssManifest'
+            Prelude.<$> (x Data..:? "manifestName")
+            Prelude.<*> (x Data..:? "streamSelection")
+      )
+
+instance Prelude.Hashable MssManifest where
+  hashWithSalt _salt MssManifest' {..} =
+    _salt
+      `Prelude.hashWithSalt` manifestName
+      `Prelude.hashWithSalt` streamSelection
+
+instance Prelude.NFData MssManifest where
+  rnf MssManifest' {..} =
+    Prelude.rnf manifestName
+      `Prelude.seq` Prelude.rnf streamSelection
+
+instance Data.ToJSON MssManifest where
+  toJSON MssManifest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("manifestName" Data..=) Prelude.<$> manifestName,
+            ("streamSelection" Data..=)
+              Prelude.<$> streamSelection
+          ]
+      )
diff --git a/gen/Amazonka/MediaPackageVOD/Types/MssPackage.hs b/gen/Amazonka/MediaPackageVOD/Types/MssPackage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/MssPackage.hs
@@ -0,0 +1,108 @@
+{-# 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.MediaPackageVOD.Types.MssPackage
+-- 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.MediaPackageVOD.Types.MssPackage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types.MssEncryption
+import Amazonka.MediaPackageVOD.Types.MssManifest
+import qualified Amazonka.Prelude as Prelude
+
+-- | A Microsoft Smooth Streaming (MSS) PackagingConfiguration.
+--
+-- /See:/ 'newMssPackage' smart constructor.
+data MssPackage = MssPackage'
+  { encryption :: Prelude.Maybe MssEncryption,
+    -- | The duration (in seconds) of each segment.
+    segmentDurationSeconds :: Prelude.Maybe Prelude.Int,
+    -- | A list of MSS manifest configurations.
+    mssManifests :: [MssManifest]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MssPackage' 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:
+--
+-- 'encryption', 'mssPackage_encryption' - Undocumented member.
+--
+-- 'segmentDurationSeconds', 'mssPackage_segmentDurationSeconds' - The duration (in seconds) of each segment.
+--
+-- 'mssManifests', 'mssPackage_mssManifests' - A list of MSS manifest configurations.
+newMssPackage ::
+  MssPackage
+newMssPackage =
+  MssPackage'
+    { encryption = Prelude.Nothing,
+      segmentDurationSeconds = Prelude.Nothing,
+      mssManifests = Prelude.mempty
+    }
+
+-- | Undocumented member.
+mssPackage_encryption :: Lens.Lens' MssPackage (Prelude.Maybe MssEncryption)
+mssPackage_encryption = Lens.lens (\MssPackage' {encryption} -> encryption) (\s@MssPackage' {} a -> s {encryption = a} :: MssPackage)
+
+-- | The duration (in seconds) of each segment.
+mssPackage_segmentDurationSeconds :: Lens.Lens' MssPackage (Prelude.Maybe Prelude.Int)
+mssPackage_segmentDurationSeconds = Lens.lens (\MssPackage' {segmentDurationSeconds} -> segmentDurationSeconds) (\s@MssPackage' {} a -> s {segmentDurationSeconds = a} :: MssPackage)
+
+-- | A list of MSS manifest configurations.
+mssPackage_mssManifests :: Lens.Lens' MssPackage [MssManifest]
+mssPackage_mssManifests = Lens.lens (\MssPackage' {mssManifests} -> mssManifests) (\s@MssPackage' {} a -> s {mssManifests = a} :: MssPackage) Prelude.. Lens.coerced
+
+instance Data.FromJSON MssPackage where
+  parseJSON =
+    Data.withObject
+      "MssPackage"
+      ( \x ->
+          MssPackage'
+            Prelude.<$> (x Data..:? "encryption")
+            Prelude.<*> (x Data..:? "segmentDurationSeconds")
+            Prelude.<*> (x Data..:? "mssManifests" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable MssPackage where
+  hashWithSalt _salt MssPackage' {..} =
+    _salt
+      `Prelude.hashWithSalt` encryption
+      `Prelude.hashWithSalt` segmentDurationSeconds
+      `Prelude.hashWithSalt` mssManifests
+
+instance Prelude.NFData MssPackage where
+  rnf MssPackage' {..} =
+    Prelude.rnf encryption
+      `Prelude.seq` Prelude.rnf segmentDurationSeconds
+      `Prelude.seq` Prelude.rnf mssManifests
+
+instance Data.ToJSON MssPackage where
+  toJSON MssPackage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("encryption" Data..=) Prelude.<$> encryption,
+            ("segmentDurationSeconds" Data..=)
+              Prelude.<$> segmentDurationSeconds,
+            Prelude.Just ("mssManifests" Data..= mssManifests)
+          ]
+      )
diff --git a/gen/Amazonka/MediaPackageVOD/Types/PackagingConfiguration.hs b/gen/Amazonka/MediaPackageVOD/Types/PackagingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/PackagingConfiguration.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaPackageVOD.Types.PackagingConfiguration
+-- 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.MediaPackageVOD.Types.PackagingConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types.CmafPackage
+import Amazonka.MediaPackageVOD.Types.DashPackage
+import Amazonka.MediaPackageVOD.Types.HlsPackage
+import Amazonka.MediaPackageVOD.Types.MssPackage
+import qualified Amazonka.Prelude as Prelude
+
+-- | A MediaPackage VOD PackagingConfiguration resource.
+--
+-- /See:/ 'newPackagingConfiguration' smart constructor.
+data PackagingConfiguration = PackagingConfiguration'
+  { -- | The ARN of the PackagingConfiguration.
+    arn :: Prelude.Maybe Prelude.Text,
+    cmafPackage :: Prelude.Maybe CmafPackage,
+    dashPackage :: Prelude.Maybe DashPackage,
+    hlsPackage :: Prelude.Maybe HlsPackage,
+    -- | The ID of the PackagingConfiguration.
+    id :: Prelude.Maybe Prelude.Text,
+    mssPackage :: Prelude.Maybe MssPackage,
+    -- | The ID of a PackagingGroup.
+    packagingGroupId :: Prelude.Maybe Prelude.Text,
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PackagingConfiguration' 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', 'packagingConfiguration_arn' - The ARN of the PackagingConfiguration.
+--
+-- 'cmafPackage', 'packagingConfiguration_cmafPackage' - Undocumented member.
+--
+-- 'dashPackage', 'packagingConfiguration_dashPackage' - Undocumented member.
+--
+-- 'hlsPackage', 'packagingConfiguration_hlsPackage' - Undocumented member.
+--
+-- 'id', 'packagingConfiguration_id' - The ID of the PackagingConfiguration.
+--
+-- 'mssPackage', 'packagingConfiguration_mssPackage' - Undocumented member.
+--
+-- 'packagingGroupId', 'packagingConfiguration_packagingGroupId' - The ID of a PackagingGroup.
+--
+-- 'tags', 'packagingConfiguration_tags' - Undocumented member.
+newPackagingConfiguration ::
+  PackagingConfiguration
+newPackagingConfiguration =
+  PackagingConfiguration'
+    { arn = Prelude.Nothing,
+      cmafPackage = Prelude.Nothing,
+      dashPackage = Prelude.Nothing,
+      hlsPackage = Prelude.Nothing,
+      id = Prelude.Nothing,
+      mssPackage = Prelude.Nothing,
+      packagingGroupId = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The ARN of the PackagingConfiguration.
+packagingConfiguration_arn :: Lens.Lens' PackagingConfiguration (Prelude.Maybe Prelude.Text)
+packagingConfiguration_arn = Lens.lens (\PackagingConfiguration' {arn} -> arn) (\s@PackagingConfiguration' {} a -> s {arn = a} :: PackagingConfiguration)
+
+-- | Undocumented member.
+packagingConfiguration_cmafPackage :: Lens.Lens' PackagingConfiguration (Prelude.Maybe CmafPackage)
+packagingConfiguration_cmafPackage = Lens.lens (\PackagingConfiguration' {cmafPackage} -> cmafPackage) (\s@PackagingConfiguration' {} a -> s {cmafPackage = a} :: PackagingConfiguration)
+
+-- | Undocumented member.
+packagingConfiguration_dashPackage :: Lens.Lens' PackagingConfiguration (Prelude.Maybe DashPackage)
+packagingConfiguration_dashPackage = Lens.lens (\PackagingConfiguration' {dashPackage} -> dashPackage) (\s@PackagingConfiguration' {} a -> s {dashPackage = a} :: PackagingConfiguration)
+
+-- | Undocumented member.
+packagingConfiguration_hlsPackage :: Lens.Lens' PackagingConfiguration (Prelude.Maybe HlsPackage)
+packagingConfiguration_hlsPackage = Lens.lens (\PackagingConfiguration' {hlsPackage} -> hlsPackage) (\s@PackagingConfiguration' {} a -> s {hlsPackage = a} :: PackagingConfiguration)
+
+-- | The ID of the PackagingConfiguration.
+packagingConfiguration_id :: Lens.Lens' PackagingConfiguration (Prelude.Maybe Prelude.Text)
+packagingConfiguration_id = Lens.lens (\PackagingConfiguration' {id} -> id) (\s@PackagingConfiguration' {} a -> s {id = a} :: PackagingConfiguration)
+
+-- | Undocumented member.
+packagingConfiguration_mssPackage :: Lens.Lens' PackagingConfiguration (Prelude.Maybe MssPackage)
+packagingConfiguration_mssPackage = Lens.lens (\PackagingConfiguration' {mssPackage} -> mssPackage) (\s@PackagingConfiguration' {} a -> s {mssPackage = a} :: PackagingConfiguration)
+
+-- | The ID of a PackagingGroup.
+packagingConfiguration_packagingGroupId :: Lens.Lens' PackagingConfiguration (Prelude.Maybe Prelude.Text)
+packagingConfiguration_packagingGroupId = Lens.lens (\PackagingConfiguration' {packagingGroupId} -> packagingGroupId) (\s@PackagingConfiguration' {} a -> s {packagingGroupId = a} :: PackagingConfiguration)
+
+-- | Undocumented member.
+packagingConfiguration_tags :: Lens.Lens' PackagingConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+packagingConfiguration_tags = Lens.lens (\PackagingConfiguration' {tags} -> tags) (\s@PackagingConfiguration' {} a -> s {tags = a} :: PackagingConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON PackagingConfiguration where
+  parseJSON =
+    Data.withObject
+      "PackagingConfiguration"
+      ( \x ->
+          PackagingConfiguration'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "cmafPackage")
+            Prelude.<*> (x Data..:? "dashPackage")
+            Prelude.<*> (x Data..:? "hlsPackage")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "mssPackage")
+            Prelude.<*> (x Data..:? "packagingGroupId")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable PackagingConfiguration where
+  hashWithSalt _salt PackagingConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` cmafPackage
+      `Prelude.hashWithSalt` dashPackage
+      `Prelude.hashWithSalt` hlsPackage
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` mssPackage
+      `Prelude.hashWithSalt` packagingGroupId
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData PackagingConfiguration where
+  rnf PackagingConfiguration' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf cmafPackage
+      `Prelude.seq` Prelude.rnf dashPackage
+      `Prelude.seq` Prelude.rnf hlsPackage
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf mssPackage
+      `Prelude.seq` Prelude.rnf packagingGroupId
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/MediaPackageVOD/Types/PackagingGroup.hs b/gen/Amazonka/MediaPackageVOD/Types/PackagingGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/PackagingGroup.hs
@@ -0,0 +1,144 @@
+{-# 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.MediaPackageVOD.Types.PackagingGroup
+-- 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.MediaPackageVOD.Types.PackagingGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types.Authorization
+import Amazonka.MediaPackageVOD.Types.EgressAccessLogs
+import qualified Amazonka.Prelude as Prelude
+
+-- | A MediaPackage VOD PackagingGroup resource.
+--
+-- /See:/ 'newPackagingGroup' smart constructor.
+data PackagingGroup = PackagingGroup'
+  { -- | The approximate asset count of the PackagingGroup.
+    approximateAssetCount :: Prelude.Maybe Prelude.Int,
+    -- | The ARN of the PackagingGroup.
+    arn :: Prelude.Maybe Prelude.Text,
+    authorization :: Prelude.Maybe Authorization,
+    -- | The fully qualified domain name for Assets in the PackagingGroup.
+    domainName :: Prelude.Maybe Prelude.Text,
+    egressAccessLogs :: Prelude.Maybe EgressAccessLogs,
+    -- | The ID of the PackagingGroup.
+    id :: Prelude.Maybe Prelude.Text,
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PackagingGroup' 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:
+--
+-- 'approximateAssetCount', 'packagingGroup_approximateAssetCount' - The approximate asset count of the PackagingGroup.
+--
+-- 'arn', 'packagingGroup_arn' - The ARN of the PackagingGroup.
+--
+-- 'authorization', 'packagingGroup_authorization' - Undocumented member.
+--
+-- 'domainName', 'packagingGroup_domainName' - The fully qualified domain name for Assets in the PackagingGroup.
+--
+-- 'egressAccessLogs', 'packagingGroup_egressAccessLogs' - Undocumented member.
+--
+-- 'id', 'packagingGroup_id' - The ID of the PackagingGroup.
+--
+-- 'tags', 'packagingGroup_tags' - Undocumented member.
+newPackagingGroup ::
+  PackagingGroup
+newPackagingGroup =
+  PackagingGroup'
+    { approximateAssetCount =
+        Prelude.Nothing,
+      arn = Prelude.Nothing,
+      authorization = Prelude.Nothing,
+      domainName = Prelude.Nothing,
+      egressAccessLogs = Prelude.Nothing,
+      id = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The approximate asset count of the PackagingGroup.
+packagingGroup_approximateAssetCount :: Lens.Lens' PackagingGroup (Prelude.Maybe Prelude.Int)
+packagingGroup_approximateAssetCount = Lens.lens (\PackagingGroup' {approximateAssetCount} -> approximateAssetCount) (\s@PackagingGroup' {} a -> s {approximateAssetCount = a} :: PackagingGroup)
+
+-- | The ARN of the PackagingGroup.
+packagingGroup_arn :: Lens.Lens' PackagingGroup (Prelude.Maybe Prelude.Text)
+packagingGroup_arn = Lens.lens (\PackagingGroup' {arn} -> arn) (\s@PackagingGroup' {} a -> s {arn = a} :: PackagingGroup)
+
+-- | Undocumented member.
+packagingGroup_authorization :: Lens.Lens' PackagingGroup (Prelude.Maybe Authorization)
+packagingGroup_authorization = Lens.lens (\PackagingGroup' {authorization} -> authorization) (\s@PackagingGroup' {} a -> s {authorization = a} :: PackagingGroup)
+
+-- | The fully qualified domain name for Assets in the PackagingGroup.
+packagingGroup_domainName :: Lens.Lens' PackagingGroup (Prelude.Maybe Prelude.Text)
+packagingGroup_domainName = Lens.lens (\PackagingGroup' {domainName} -> domainName) (\s@PackagingGroup' {} a -> s {domainName = a} :: PackagingGroup)
+
+-- | Undocumented member.
+packagingGroup_egressAccessLogs :: Lens.Lens' PackagingGroup (Prelude.Maybe EgressAccessLogs)
+packagingGroup_egressAccessLogs = Lens.lens (\PackagingGroup' {egressAccessLogs} -> egressAccessLogs) (\s@PackagingGroup' {} a -> s {egressAccessLogs = a} :: PackagingGroup)
+
+-- | The ID of the PackagingGroup.
+packagingGroup_id :: Lens.Lens' PackagingGroup (Prelude.Maybe Prelude.Text)
+packagingGroup_id = Lens.lens (\PackagingGroup' {id} -> id) (\s@PackagingGroup' {} a -> s {id = a} :: PackagingGroup)
+
+-- | Undocumented member.
+packagingGroup_tags :: Lens.Lens' PackagingGroup (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+packagingGroup_tags = Lens.lens (\PackagingGroup' {tags} -> tags) (\s@PackagingGroup' {} a -> s {tags = a} :: PackagingGroup) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON PackagingGroup where
+  parseJSON =
+    Data.withObject
+      "PackagingGroup"
+      ( \x ->
+          PackagingGroup'
+            Prelude.<$> (x Data..:? "approximateAssetCount")
+            Prelude.<*> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "authorization")
+            Prelude.<*> (x Data..:? "domainName")
+            Prelude.<*> (x Data..:? "egressAccessLogs")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable PackagingGroup where
+  hashWithSalt _salt PackagingGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` approximateAssetCount
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` authorization
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` egressAccessLogs
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData PackagingGroup where
+  rnf PackagingGroup' {..} =
+    Prelude.rnf approximateAssetCount
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf authorization
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf egressAccessLogs
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/MediaPackageVOD/Types/PeriodTriggersElement.hs b/gen/Amazonka/MediaPackageVOD/Types/PeriodTriggersElement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/PeriodTriggersElement.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.MediaPackageVOD.Types.PeriodTriggersElement
+-- 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.MediaPackageVOD.Types.PeriodTriggersElement
+  ( PeriodTriggersElement
+      ( ..,
+        PeriodTriggersElement_ADS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PeriodTriggersElement = PeriodTriggersElement'
+  { fromPeriodTriggersElement ::
+      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 PeriodTriggersElement_ADS :: PeriodTriggersElement
+pattern PeriodTriggersElement_ADS = PeriodTriggersElement' "ADS"
+
+{-# COMPLETE
+  PeriodTriggersElement_ADS,
+  PeriodTriggersElement'
+  #-}
diff --git a/gen/Amazonka/MediaPackageVOD/Types/PresetSpeke20Audio.hs b/gen/Amazonka/MediaPackageVOD/Types/PresetSpeke20Audio.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/PresetSpeke20Audio.hs
@@ -0,0 +1,86 @@
+{-# 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.MediaPackageVOD.Types.PresetSpeke20Audio
+-- 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.MediaPackageVOD.Types.PresetSpeke20Audio
+  ( PresetSpeke20Audio
+      ( ..,
+        PresetSpeke20Audio_PRESET_AUDIO_1,
+        PresetSpeke20Audio_PRESET_AUDIO_2,
+        PresetSpeke20Audio_PRESET_AUDIO_3,
+        PresetSpeke20Audio_SHARED,
+        PresetSpeke20Audio_UNENCRYPTED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PresetSpeke20Audio = PresetSpeke20Audio'
+  { fromPresetSpeke20Audio ::
+      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 PresetSpeke20Audio_PRESET_AUDIO_1 :: PresetSpeke20Audio
+pattern PresetSpeke20Audio_PRESET_AUDIO_1 = PresetSpeke20Audio' "PRESET-AUDIO-1"
+
+pattern PresetSpeke20Audio_PRESET_AUDIO_2 :: PresetSpeke20Audio
+pattern PresetSpeke20Audio_PRESET_AUDIO_2 = PresetSpeke20Audio' "PRESET-AUDIO-2"
+
+pattern PresetSpeke20Audio_PRESET_AUDIO_3 :: PresetSpeke20Audio
+pattern PresetSpeke20Audio_PRESET_AUDIO_3 = PresetSpeke20Audio' "PRESET-AUDIO-3"
+
+pattern PresetSpeke20Audio_SHARED :: PresetSpeke20Audio
+pattern PresetSpeke20Audio_SHARED = PresetSpeke20Audio' "SHARED"
+
+pattern PresetSpeke20Audio_UNENCRYPTED :: PresetSpeke20Audio
+pattern PresetSpeke20Audio_UNENCRYPTED = PresetSpeke20Audio' "UNENCRYPTED"
+
+{-# COMPLETE
+  PresetSpeke20Audio_PRESET_AUDIO_1,
+  PresetSpeke20Audio_PRESET_AUDIO_2,
+  PresetSpeke20Audio_PRESET_AUDIO_3,
+  PresetSpeke20Audio_SHARED,
+  PresetSpeke20Audio_UNENCRYPTED,
+  PresetSpeke20Audio'
+  #-}
diff --git a/gen/Amazonka/MediaPackageVOD/Types/PresetSpeke20Video.hs b/gen/Amazonka/MediaPackageVOD/Types/PresetSpeke20Video.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/PresetSpeke20Video.hs
@@ -0,0 +1,111 @@
+{-# 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.MediaPackageVOD.Types.PresetSpeke20Video
+-- 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.MediaPackageVOD.Types.PresetSpeke20Video
+  ( PresetSpeke20Video
+      ( ..,
+        PresetSpeke20Video_PRESET_VIDEO_1,
+        PresetSpeke20Video_PRESET_VIDEO_2,
+        PresetSpeke20Video_PRESET_VIDEO_3,
+        PresetSpeke20Video_PRESET_VIDEO_4,
+        PresetSpeke20Video_PRESET_VIDEO_5,
+        PresetSpeke20Video_PRESET_VIDEO_6,
+        PresetSpeke20Video_PRESET_VIDEO_7,
+        PresetSpeke20Video_PRESET_VIDEO_8,
+        PresetSpeke20Video_SHARED,
+        PresetSpeke20Video_UNENCRYPTED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PresetSpeke20Video = PresetSpeke20Video'
+  { fromPresetSpeke20Video ::
+      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 PresetSpeke20Video_PRESET_VIDEO_1 :: PresetSpeke20Video
+pattern PresetSpeke20Video_PRESET_VIDEO_1 = PresetSpeke20Video' "PRESET-VIDEO-1"
+
+pattern PresetSpeke20Video_PRESET_VIDEO_2 :: PresetSpeke20Video
+pattern PresetSpeke20Video_PRESET_VIDEO_2 = PresetSpeke20Video' "PRESET-VIDEO-2"
+
+pattern PresetSpeke20Video_PRESET_VIDEO_3 :: PresetSpeke20Video
+pattern PresetSpeke20Video_PRESET_VIDEO_3 = PresetSpeke20Video' "PRESET-VIDEO-3"
+
+pattern PresetSpeke20Video_PRESET_VIDEO_4 :: PresetSpeke20Video
+pattern PresetSpeke20Video_PRESET_VIDEO_4 = PresetSpeke20Video' "PRESET-VIDEO-4"
+
+pattern PresetSpeke20Video_PRESET_VIDEO_5 :: PresetSpeke20Video
+pattern PresetSpeke20Video_PRESET_VIDEO_5 = PresetSpeke20Video' "PRESET-VIDEO-5"
+
+pattern PresetSpeke20Video_PRESET_VIDEO_6 :: PresetSpeke20Video
+pattern PresetSpeke20Video_PRESET_VIDEO_6 = PresetSpeke20Video' "PRESET-VIDEO-6"
+
+pattern PresetSpeke20Video_PRESET_VIDEO_7 :: PresetSpeke20Video
+pattern PresetSpeke20Video_PRESET_VIDEO_7 = PresetSpeke20Video' "PRESET-VIDEO-7"
+
+pattern PresetSpeke20Video_PRESET_VIDEO_8 :: PresetSpeke20Video
+pattern PresetSpeke20Video_PRESET_VIDEO_8 = PresetSpeke20Video' "PRESET-VIDEO-8"
+
+pattern PresetSpeke20Video_SHARED :: PresetSpeke20Video
+pattern PresetSpeke20Video_SHARED = PresetSpeke20Video' "SHARED"
+
+pattern PresetSpeke20Video_UNENCRYPTED :: PresetSpeke20Video
+pattern PresetSpeke20Video_UNENCRYPTED = PresetSpeke20Video' "UNENCRYPTED"
+
+{-# COMPLETE
+  PresetSpeke20Video_PRESET_VIDEO_1,
+  PresetSpeke20Video_PRESET_VIDEO_2,
+  PresetSpeke20Video_PRESET_VIDEO_3,
+  PresetSpeke20Video_PRESET_VIDEO_4,
+  PresetSpeke20Video_PRESET_VIDEO_5,
+  PresetSpeke20Video_PRESET_VIDEO_6,
+  PresetSpeke20Video_PRESET_VIDEO_7,
+  PresetSpeke20Video_PRESET_VIDEO_8,
+  PresetSpeke20Video_SHARED,
+  PresetSpeke20Video_UNENCRYPTED,
+  PresetSpeke20Video'
+  #-}
diff --git a/gen/Amazonka/MediaPackageVOD/Types/Profile.hs b/gen/Amazonka/MediaPackageVOD/Types/Profile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/Profile.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.MediaPackageVOD.Types.Profile
+-- 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.MediaPackageVOD.Types.Profile
+  ( Profile
+      ( ..,
+        Profile_HBBTV_1_5,
+        Profile_NONE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Profile = Profile' {fromProfile :: 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 Profile_HBBTV_1_5 :: Profile
+pattern Profile_HBBTV_1_5 = Profile' "HBBTV_1_5"
+
+pattern Profile_NONE :: Profile
+pattern Profile_NONE = Profile' "NONE"
+
+{-# COMPLETE
+  Profile_HBBTV_1_5,
+  Profile_NONE,
+  Profile'
+  #-}
diff --git a/gen/Amazonka/MediaPackageVOD/Types/ScteMarkersSource.hs b/gen/Amazonka/MediaPackageVOD/Types/ScteMarkersSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/ScteMarkersSource.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.MediaPackageVOD.Types.ScteMarkersSource
+-- 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.MediaPackageVOD.Types.ScteMarkersSource
+  ( ScteMarkersSource
+      ( ..,
+        ScteMarkersSource_MANIFEST,
+        ScteMarkersSource_SEGMENTS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ScteMarkersSource = ScteMarkersSource'
+  { fromScteMarkersSource ::
+      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 ScteMarkersSource_MANIFEST :: ScteMarkersSource
+pattern ScteMarkersSource_MANIFEST = ScteMarkersSource' "MANIFEST"
+
+pattern ScteMarkersSource_SEGMENTS :: ScteMarkersSource
+pattern ScteMarkersSource_SEGMENTS = ScteMarkersSource' "SEGMENTS"
+
+{-# COMPLETE
+  ScteMarkersSource_MANIFEST,
+  ScteMarkersSource_SEGMENTS,
+  ScteMarkersSource'
+  #-}
diff --git a/gen/Amazonka/MediaPackageVOD/Types/SegmentTemplateFormat.hs b/gen/Amazonka/MediaPackageVOD/Types/SegmentTemplateFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/SegmentTemplateFormat.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaPackageVOD.Types.SegmentTemplateFormat
+-- 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.MediaPackageVOD.Types.SegmentTemplateFormat
+  ( SegmentTemplateFormat
+      ( ..,
+        SegmentTemplateFormat_NUMBER_WITH_DURATION,
+        SegmentTemplateFormat_NUMBER_WITH_TIMELINE,
+        SegmentTemplateFormat_TIME_WITH_TIMELINE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SegmentTemplateFormat = SegmentTemplateFormat'
+  { fromSegmentTemplateFormat ::
+      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 SegmentTemplateFormat_NUMBER_WITH_DURATION :: SegmentTemplateFormat
+pattern SegmentTemplateFormat_NUMBER_WITH_DURATION = SegmentTemplateFormat' "NUMBER_WITH_DURATION"
+
+pattern SegmentTemplateFormat_NUMBER_WITH_TIMELINE :: SegmentTemplateFormat
+pattern SegmentTemplateFormat_NUMBER_WITH_TIMELINE = SegmentTemplateFormat' "NUMBER_WITH_TIMELINE"
+
+pattern SegmentTemplateFormat_TIME_WITH_TIMELINE :: SegmentTemplateFormat
+pattern SegmentTemplateFormat_TIME_WITH_TIMELINE = SegmentTemplateFormat' "TIME_WITH_TIMELINE"
+
+{-# COMPLETE
+  SegmentTemplateFormat_NUMBER_WITH_DURATION,
+  SegmentTemplateFormat_NUMBER_WITH_TIMELINE,
+  SegmentTemplateFormat_TIME_WITH_TIMELINE,
+  SegmentTemplateFormat'
+  #-}
diff --git a/gen/Amazonka/MediaPackageVOD/Types/SpekeKeyProvider.hs b/gen/Amazonka/MediaPackageVOD/Types/SpekeKeyProvider.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/SpekeKeyProvider.hs
@@ -0,0 +1,129 @@
+{-# 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.MediaPackageVOD.Types.SpekeKeyProvider
+-- 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.MediaPackageVOD.Types.SpekeKeyProvider where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types.EncryptionContractConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | A configuration for accessing an external Secure Packager and Encoder
+-- Key Exchange (SPEKE) service that will provide encryption keys.
+--
+-- /See:/ 'newSpekeKeyProvider' smart constructor.
+data SpekeKeyProvider = SpekeKeyProvider'
+  { encryptionContractConfiguration :: Prelude.Maybe EncryptionContractConfiguration,
+    -- | The system IDs to include in key requests.
+    systemIds :: [Prelude.Text],
+    -- | The URL of the external key provider service.
+    url :: Prelude.Text,
+    -- | An Amazon Resource Name (ARN) of an IAM role that AWS Elemental
+    -- MediaPackage will assume when accessing the key provider service.
+    roleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpekeKeyProvider' 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:
+--
+-- 'encryptionContractConfiguration', 'spekeKeyProvider_encryptionContractConfiguration' - Undocumented member.
+--
+-- 'systemIds', 'spekeKeyProvider_systemIds' - The system IDs to include in key requests.
+--
+-- 'url', 'spekeKeyProvider_url' - The URL of the external key provider service.
+--
+-- 'roleArn', 'spekeKeyProvider_roleArn' - An Amazon Resource Name (ARN) of an IAM role that AWS Elemental
+-- MediaPackage will assume when accessing the key provider service.
+newSpekeKeyProvider ::
+  -- | 'url'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  SpekeKeyProvider
+newSpekeKeyProvider pUrl_ pRoleArn_ =
+  SpekeKeyProvider'
+    { encryptionContractConfiguration =
+        Prelude.Nothing,
+      systemIds = Prelude.mempty,
+      url = pUrl_,
+      roleArn = pRoleArn_
+    }
+
+-- | Undocumented member.
+spekeKeyProvider_encryptionContractConfiguration :: Lens.Lens' SpekeKeyProvider (Prelude.Maybe EncryptionContractConfiguration)
+spekeKeyProvider_encryptionContractConfiguration = Lens.lens (\SpekeKeyProvider' {encryptionContractConfiguration} -> encryptionContractConfiguration) (\s@SpekeKeyProvider' {} a -> s {encryptionContractConfiguration = a} :: SpekeKeyProvider)
+
+-- | The system IDs to include in key requests.
+spekeKeyProvider_systemIds :: Lens.Lens' SpekeKeyProvider [Prelude.Text]
+spekeKeyProvider_systemIds = Lens.lens (\SpekeKeyProvider' {systemIds} -> systemIds) (\s@SpekeKeyProvider' {} a -> s {systemIds = a} :: SpekeKeyProvider) Prelude.. Lens.coerced
+
+-- | The URL of the external key provider service.
+spekeKeyProvider_url :: Lens.Lens' SpekeKeyProvider Prelude.Text
+spekeKeyProvider_url = Lens.lens (\SpekeKeyProvider' {url} -> url) (\s@SpekeKeyProvider' {} a -> s {url = a} :: SpekeKeyProvider)
+
+-- | An Amazon Resource Name (ARN) of an IAM role that AWS Elemental
+-- MediaPackage will assume when accessing the key provider service.
+spekeKeyProvider_roleArn :: Lens.Lens' SpekeKeyProvider Prelude.Text
+spekeKeyProvider_roleArn = Lens.lens (\SpekeKeyProvider' {roleArn} -> roleArn) (\s@SpekeKeyProvider' {} a -> s {roleArn = a} :: SpekeKeyProvider)
+
+instance Data.FromJSON SpekeKeyProvider where
+  parseJSON =
+    Data.withObject
+      "SpekeKeyProvider"
+      ( \x ->
+          SpekeKeyProvider'
+            Prelude.<$> (x Data..:? "encryptionContractConfiguration")
+            Prelude.<*> (x Data..:? "systemIds" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "url")
+            Prelude.<*> (x Data..: "roleArn")
+      )
+
+instance Prelude.Hashable SpekeKeyProvider where
+  hashWithSalt _salt SpekeKeyProvider' {..} =
+    _salt
+      `Prelude.hashWithSalt` encryptionContractConfiguration
+      `Prelude.hashWithSalt` systemIds
+      `Prelude.hashWithSalt` url
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData SpekeKeyProvider where
+  rnf SpekeKeyProvider' {..} =
+    Prelude.rnf encryptionContractConfiguration
+      `Prelude.seq` Prelude.rnf systemIds
+      `Prelude.seq` Prelude.rnf url
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance Data.ToJSON SpekeKeyProvider where
+  toJSON SpekeKeyProvider' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("encryptionContractConfiguration" Data..=)
+              Prelude.<$> encryptionContractConfiguration,
+            Prelude.Just ("systemIds" Data..= systemIds),
+            Prelude.Just ("url" Data..= url),
+            Prelude.Just ("roleArn" Data..= roleArn)
+          ]
+      )
diff --git a/gen/Amazonka/MediaPackageVOD/Types/StreamOrder.hs b/gen/Amazonka/MediaPackageVOD/Types/StreamOrder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/StreamOrder.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaPackageVOD.Types.StreamOrder
+-- 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.MediaPackageVOD.Types.StreamOrder
+  ( StreamOrder
+      ( ..,
+        StreamOrder_ORIGINAL,
+        StreamOrder_VIDEO_BITRATE_ASCENDING,
+        StreamOrder_VIDEO_BITRATE_DESCENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StreamOrder = StreamOrder'
+  { fromStreamOrder ::
+      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 StreamOrder_ORIGINAL :: StreamOrder
+pattern StreamOrder_ORIGINAL = StreamOrder' "ORIGINAL"
+
+pattern StreamOrder_VIDEO_BITRATE_ASCENDING :: StreamOrder
+pattern StreamOrder_VIDEO_BITRATE_ASCENDING = StreamOrder' "VIDEO_BITRATE_ASCENDING"
+
+pattern StreamOrder_VIDEO_BITRATE_DESCENDING :: StreamOrder
+pattern StreamOrder_VIDEO_BITRATE_DESCENDING = StreamOrder' "VIDEO_BITRATE_DESCENDING"
+
+{-# COMPLETE
+  StreamOrder_ORIGINAL,
+  StreamOrder_VIDEO_BITRATE_ASCENDING,
+  StreamOrder_VIDEO_BITRATE_DESCENDING,
+  StreamOrder'
+  #-}
diff --git a/gen/Amazonka/MediaPackageVOD/Types/StreamSelection.hs b/gen/Amazonka/MediaPackageVOD/Types/StreamSelection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/Types/StreamSelection.hs
@@ -0,0 +1,110 @@
+{-# 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.MediaPackageVOD.Types.StreamSelection
+-- 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.MediaPackageVOD.Types.StreamSelection where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types.StreamOrder
+import qualified Amazonka.Prelude as Prelude
+
+-- | A StreamSelection configuration.
+--
+-- /See:/ 'newStreamSelection' smart constructor.
+data StreamSelection = StreamSelection'
+  { -- | The maximum video bitrate (bps) to include in output.
+    maxVideoBitsPerSecond :: Prelude.Maybe Prelude.Int,
+    -- | The minimum video bitrate (bps) to include in output.
+    minVideoBitsPerSecond :: Prelude.Maybe Prelude.Int,
+    -- | A directive that determines the order of streams in the output.
+    streamOrder :: Prelude.Maybe StreamOrder
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StreamSelection' 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:
+--
+-- 'maxVideoBitsPerSecond', 'streamSelection_maxVideoBitsPerSecond' - The maximum video bitrate (bps) to include in output.
+--
+-- 'minVideoBitsPerSecond', 'streamSelection_minVideoBitsPerSecond' - The minimum video bitrate (bps) to include in output.
+--
+-- 'streamOrder', 'streamSelection_streamOrder' - A directive that determines the order of streams in the output.
+newStreamSelection ::
+  StreamSelection
+newStreamSelection =
+  StreamSelection'
+    { maxVideoBitsPerSecond =
+        Prelude.Nothing,
+      minVideoBitsPerSecond = Prelude.Nothing,
+      streamOrder = Prelude.Nothing
+    }
+
+-- | The maximum video bitrate (bps) to include in output.
+streamSelection_maxVideoBitsPerSecond :: Lens.Lens' StreamSelection (Prelude.Maybe Prelude.Int)
+streamSelection_maxVideoBitsPerSecond = Lens.lens (\StreamSelection' {maxVideoBitsPerSecond} -> maxVideoBitsPerSecond) (\s@StreamSelection' {} a -> s {maxVideoBitsPerSecond = a} :: StreamSelection)
+
+-- | The minimum video bitrate (bps) to include in output.
+streamSelection_minVideoBitsPerSecond :: Lens.Lens' StreamSelection (Prelude.Maybe Prelude.Int)
+streamSelection_minVideoBitsPerSecond = Lens.lens (\StreamSelection' {minVideoBitsPerSecond} -> minVideoBitsPerSecond) (\s@StreamSelection' {} a -> s {minVideoBitsPerSecond = a} :: StreamSelection)
+
+-- | A directive that determines the order of streams in the output.
+streamSelection_streamOrder :: Lens.Lens' StreamSelection (Prelude.Maybe StreamOrder)
+streamSelection_streamOrder = Lens.lens (\StreamSelection' {streamOrder} -> streamOrder) (\s@StreamSelection' {} a -> s {streamOrder = a} :: StreamSelection)
+
+instance Data.FromJSON StreamSelection where
+  parseJSON =
+    Data.withObject
+      "StreamSelection"
+      ( \x ->
+          StreamSelection'
+            Prelude.<$> (x Data..:? "maxVideoBitsPerSecond")
+            Prelude.<*> (x Data..:? "minVideoBitsPerSecond")
+            Prelude.<*> (x Data..:? "streamOrder")
+      )
+
+instance Prelude.Hashable StreamSelection where
+  hashWithSalt _salt StreamSelection' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxVideoBitsPerSecond
+      `Prelude.hashWithSalt` minVideoBitsPerSecond
+      `Prelude.hashWithSalt` streamOrder
+
+instance Prelude.NFData StreamSelection where
+  rnf StreamSelection' {..} =
+    Prelude.rnf maxVideoBitsPerSecond
+      `Prelude.seq` Prelude.rnf minVideoBitsPerSecond
+      `Prelude.seq` Prelude.rnf streamOrder
+
+instance Data.ToJSON StreamSelection where
+  toJSON StreamSelection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxVideoBitsPerSecond" Data..=)
+              Prelude.<$> maxVideoBitsPerSecond,
+            ("minVideoBitsPerSecond" Data..=)
+              Prelude.<$> minVideoBitsPerSecond,
+            ("streamOrder" Data..=) Prelude.<$> streamOrder
+          ]
+      )
diff --git a/gen/Amazonka/MediaPackageVOD/UntagResource.hs b/gen/Amazonka/MediaPackageVOD/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/UntagResource.hs
@@ -0,0 +1,144 @@
+{-# 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.MediaPackageVOD.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)
+--
+-- Removes tags from the specified resource. You can specify one or more
+-- tags to remove.
+module Amazonka.MediaPackageVOD.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_tagKeys,
+    untagResource_resourceArn,
+
+    -- * 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.MediaPackageVOD.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'
+  { -- | A comma-separated list of the tag keys to remove from the resource.
+    tagKeys :: [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) for the resource. You can get this from
+    -- the response to any request to the resource.
+    resourceArn :: 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:
+--
+-- 'tagKeys', 'untagResource_tagKeys' - A comma-separated list of the tag keys to remove from the resource.
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) for the resource. You can get this from
+-- the response to any request to the resource.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { tagKeys = Prelude.mempty,
+      resourceArn = pResourceArn_
+    }
+
+-- | A comma-separated list of the tag keys to remove from 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
+
+-- | The Amazon Resource Name (ARN) for the resource. You can get this from
+-- the response to any request to the resource.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+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` tagKeys
+      `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf tagKeys
+      `Prelude.seq` Prelude.rnf resourceArn
+
+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/MediaPackageVOD/UpdatePackagingGroup.hs b/gen/Amazonka/MediaPackageVOD/UpdatePackagingGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/UpdatePackagingGroup.hs
@@ -0,0 +1,256 @@
+{-# 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.MediaPackageVOD.UpdatePackagingGroup
+-- 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 specific packaging group. You can\'t change the id attribute
+-- or any other system-generated attributes.
+module Amazonka.MediaPackageVOD.UpdatePackagingGroup
+  ( -- * Creating a Request
+    UpdatePackagingGroup (..),
+    newUpdatePackagingGroup,
+
+    -- * Request Lenses
+    updatePackagingGroup_authorization,
+    updatePackagingGroup_id,
+
+    -- * Destructuring the Response
+    UpdatePackagingGroupResponse (..),
+    newUpdatePackagingGroupResponse,
+
+    -- * Response Lenses
+    updatePackagingGroupResponse_approximateAssetCount,
+    updatePackagingGroupResponse_arn,
+    updatePackagingGroupResponse_authorization,
+    updatePackagingGroupResponse_domainName,
+    updatePackagingGroupResponse_egressAccessLogs,
+    updatePackagingGroupResponse_id,
+    updatePackagingGroupResponse_tags,
+    updatePackagingGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A MediaPackage VOD PackagingGroup resource configuration.
+--
+-- /See:/ 'newUpdatePackagingGroup' smart constructor.
+data UpdatePackagingGroup = UpdatePackagingGroup'
+  { authorization :: Prelude.Maybe Authorization,
+    -- | The ID of a MediaPackage VOD PackagingGroup resource.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdatePackagingGroup' 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:
+--
+-- 'authorization', 'updatePackagingGroup_authorization' - Undocumented member.
+--
+-- 'id', 'updatePackagingGroup_id' - The ID of a MediaPackage VOD PackagingGroup resource.
+newUpdatePackagingGroup ::
+  -- | 'id'
+  Prelude.Text ->
+  UpdatePackagingGroup
+newUpdatePackagingGroup pId_ =
+  UpdatePackagingGroup'
+    { authorization =
+        Prelude.Nothing,
+      id = pId_
+    }
+
+-- | Undocumented member.
+updatePackagingGroup_authorization :: Lens.Lens' UpdatePackagingGroup (Prelude.Maybe Authorization)
+updatePackagingGroup_authorization = Lens.lens (\UpdatePackagingGroup' {authorization} -> authorization) (\s@UpdatePackagingGroup' {} a -> s {authorization = a} :: UpdatePackagingGroup)
+
+-- | The ID of a MediaPackage VOD PackagingGroup resource.
+updatePackagingGroup_id :: Lens.Lens' UpdatePackagingGroup Prelude.Text
+updatePackagingGroup_id = Lens.lens (\UpdatePackagingGroup' {id} -> id) (\s@UpdatePackagingGroup' {} a -> s {id = a} :: UpdatePackagingGroup)
+
+instance Core.AWSRequest UpdatePackagingGroup where
+  type
+    AWSResponse UpdatePackagingGroup =
+      UpdatePackagingGroupResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdatePackagingGroupResponse'
+            Prelude.<$> (x Data..?> "approximateAssetCount")
+            Prelude.<*> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "authorization")
+            Prelude.<*> (x Data..?> "domainName")
+            Prelude.<*> (x Data..?> "egressAccessLogs")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdatePackagingGroup where
+  hashWithSalt _salt UpdatePackagingGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` authorization
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdatePackagingGroup where
+  rnf UpdatePackagingGroup' {..} =
+    Prelude.rnf authorization
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdatePackagingGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdatePackagingGroup where
+  toJSON UpdatePackagingGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("authorization" Data..=)
+              Prelude.<$> authorization
+          ]
+      )
+
+instance Data.ToPath UpdatePackagingGroup where
+  toPath UpdatePackagingGroup' {..} =
+    Prelude.mconcat
+      ["/packaging_groups/", Data.toBS id]
+
+instance Data.ToQuery UpdatePackagingGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdatePackagingGroupResponse' smart constructor.
+data UpdatePackagingGroupResponse = UpdatePackagingGroupResponse'
+  { -- | The approximate asset count of the PackagingGroup.
+    approximateAssetCount :: Prelude.Maybe Prelude.Int,
+    -- | The ARN of the PackagingGroup.
+    arn :: Prelude.Maybe Prelude.Text,
+    authorization :: Prelude.Maybe Authorization,
+    -- | The fully qualified domain name for Assets in the PackagingGroup.
+    domainName :: Prelude.Maybe Prelude.Text,
+    egressAccessLogs :: Prelude.Maybe EgressAccessLogs,
+    -- | The ID of the PackagingGroup.
+    id :: Prelude.Maybe Prelude.Text,
+    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 'UpdatePackagingGroupResponse' 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:
+--
+-- 'approximateAssetCount', 'updatePackagingGroupResponse_approximateAssetCount' - The approximate asset count of the PackagingGroup.
+--
+-- 'arn', 'updatePackagingGroupResponse_arn' - The ARN of the PackagingGroup.
+--
+-- 'authorization', 'updatePackagingGroupResponse_authorization' - Undocumented member.
+--
+-- 'domainName', 'updatePackagingGroupResponse_domainName' - The fully qualified domain name for Assets in the PackagingGroup.
+--
+-- 'egressAccessLogs', 'updatePackagingGroupResponse_egressAccessLogs' - Undocumented member.
+--
+-- 'id', 'updatePackagingGroupResponse_id' - The ID of the PackagingGroup.
+--
+-- 'tags', 'updatePackagingGroupResponse_tags' - Undocumented member.
+--
+-- 'httpStatus', 'updatePackagingGroupResponse_httpStatus' - The response's http status code.
+newUpdatePackagingGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdatePackagingGroupResponse
+newUpdatePackagingGroupResponse pHttpStatus_ =
+  UpdatePackagingGroupResponse'
+    { approximateAssetCount =
+        Prelude.Nothing,
+      arn = Prelude.Nothing,
+      authorization = Prelude.Nothing,
+      domainName = Prelude.Nothing,
+      egressAccessLogs = Prelude.Nothing,
+      id = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The approximate asset count of the PackagingGroup.
+updatePackagingGroupResponse_approximateAssetCount :: Lens.Lens' UpdatePackagingGroupResponse (Prelude.Maybe Prelude.Int)
+updatePackagingGroupResponse_approximateAssetCount = Lens.lens (\UpdatePackagingGroupResponse' {approximateAssetCount} -> approximateAssetCount) (\s@UpdatePackagingGroupResponse' {} a -> s {approximateAssetCount = a} :: UpdatePackagingGroupResponse)
+
+-- | The ARN of the PackagingGroup.
+updatePackagingGroupResponse_arn :: Lens.Lens' UpdatePackagingGroupResponse (Prelude.Maybe Prelude.Text)
+updatePackagingGroupResponse_arn = Lens.lens (\UpdatePackagingGroupResponse' {arn} -> arn) (\s@UpdatePackagingGroupResponse' {} a -> s {arn = a} :: UpdatePackagingGroupResponse)
+
+-- | Undocumented member.
+updatePackagingGroupResponse_authorization :: Lens.Lens' UpdatePackagingGroupResponse (Prelude.Maybe Authorization)
+updatePackagingGroupResponse_authorization = Lens.lens (\UpdatePackagingGroupResponse' {authorization} -> authorization) (\s@UpdatePackagingGroupResponse' {} a -> s {authorization = a} :: UpdatePackagingGroupResponse)
+
+-- | The fully qualified domain name for Assets in the PackagingGroup.
+updatePackagingGroupResponse_domainName :: Lens.Lens' UpdatePackagingGroupResponse (Prelude.Maybe Prelude.Text)
+updatePackagingGroupResponse_domainName = Lens.lens (\UpdatePackagingGroupResponse' {domainName} -> domainName) (\s@UpdatePackagingGroupResponse' {} a -> s {domainName = a} :: UpdatePackagingGroupResponse)
+
+-- | Undocumented member.
+updatePackagingGroupResponse_egressAccessLogs :: Lens.Lens' UpdatePackagingGroupResponse (Prelude.Maybe EgressAccessLogs)
+updatePackagingGroupResponse_egressAccessLogs = Lens.lens (\UpdatePackagingGroupResponse' {egressAccessLogs} -> egressAccessLogs) (\s@UpdatePackagingGroupResponse' {} a -> s {egressAccessLogs = a} :: UpdatePackagingGroupResponse)
+
+-- | The ID of the PackagingGroup.
+updatePackagingGroupResponse_id :: Lens.Lens' UpdatePackagingGroupResponse (Prelude.Maybe Prelude.Text)
+updatePackagingGroupResponse_id = Lens.lens (\UpdatePackagingGroupResponse' {id} -> id) (\s@UpdatePackagingGroupResponse' {} a -> s {id = a} :: UpdatePackagingGroupResponse)
+
+-- | Undocumented member.
+updatePackagingGroupResponse_tags :: Lens.Lens' UpdatePackagingGroupResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updatePackagingGroupResponse_tags = Lens.lens (\UpdatePackagingGroupResponse' {tags} -> tags) (\s@UpdatePackagingGroupResponse' {} a -> s {tags = a} :: UpdatePackagingGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+updatePackagingGroupResponse_httpStatus :: Lens.Lens' UpdatePackagingGroupResponse Prelude.Int
+updatePackagingGroupResponse_httpStatus = Lens.lens (\UpdatePackagingGroupResponse' {httpStatus} -> httpStatus) (\s@UpdatePackagingGroupResponse' {} a -> s {httpStatus = a} :: UpdatePackagingGroupResponse)
+
+instance Prelude.NFData UpdatePackagingGroupResponse where
+  rnf UpdatePackagingGroupResponse' {..} =
+    Prelude.rnf approximateAssetCount
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf authorization
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf egressAccessLogs
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaPackageVOD/Waiters.hs b/gen/Amazonka/MediaPackageVOD/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaPackageVOD/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.MediaPackageVOD.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.MediaPackageVOD.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaPackageVOD.Lens
+import Amazonka.MediaPackageVOD.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.MediaPackageVOD
+import Test.Amazonka.MediaPackageVOD.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "MediaPackageVOD"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/MediaPackageVOD.hs b/test/Test/Amazonka/Gen/MediaPackageVOD.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/MediaPackageVOD.hs
@@ -0,0 +1,378 @@
+{-# 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.MediaPackageVOD
+-- 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.MediaPackageVOD where
+
+import Amazonka.MediaPackageVOD
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.MediaPackageVOD.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"
+--         [ requestConfigureLogs $
+--             newConfigureLogs
+--
+--         , requestCreateAsset $
+--             newCreateAsset
+--
+--         , requestCreatePackagingConfiguration $
+--             newCreatePackagingConfiguration
+--
+--         , requestCreatePackagingGroup $
+--             newCreatePackagingGroup
+--
+--         , requestDeleteAsset $
+--             newDeleteAsset
+--
+--         , requestDeletePackagingConfiguration $
+--             newDeletePackagingConfiguration
+--
+--         , requestDeletePackagingGroup $
+--             newDeletePackagingGroup
+--
+--         , requestDescribeAsset $
+--             newDescribeAsset
+--
+--         , requestDescribePackagingConfiguration $
+--             newDescribePackagingConfiguration
+--
+--         , requestDescribePackagingGroup $
+--             newDescribePackagingGroup
+--
+--         , requestListAssets $
+--             newListAssets
+--
+--         , requestListPackagingConfigurations $
+--             newListPackagingConfigurations
+--
+--         , requestListPackagingGroups $
+--             newListPackagingGroups
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdatePackagingGroup $
+--             newUpdatePackagingGroup
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseConfigureLogs $
+--             newConfigureLogsResponse
+--
+--         , responseCreateAsset $
+--             newCreateAssetResponse
+--
+--         , responseCreatePackagingConfiguration $
+--             newCreatePackagingConfigurationResponse
+--
+--         , responseCreatePackagingGroup $
+--             newCreatePackagingGroupResponse
+--
+--         , responseDeleteAsset $
+--             newDeleteAssetResponse
+--
+--         , responseDeletePackagingConfiguration $
+--             newDeletePackagingConfigurationResponse
+--
+--         , responseDeletePackagingGroup $
+--             newDeletePackagingGroupResponse
+--
+--         , responseDescribeAsset $
+--             newDescribeAssetResponse
+--
+--         , responseDescribePackagingConfiguration $
+--             newDescribePackagingConfigurationResponse
+--
+--         , responseDescribePackagingGroup $
+--             newDescribePackagingGroupResponse
+--
+--         , responseListAssets $
+--             newListAssetsResponse
+--
+--         , responseListPackagingConfigurations $
+--             newListPackagingConfigurationsResponse
+--
+--         , responseListPackagingGroups $
+--             newListPackagingGroupsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdatePackagingGroup $
+--             newUpdatePackagingGroupResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestConfigureLogs :: ConfigureLogs -> TestTree
+requestConfigureLogs =
+  req
+    "ConfigureLogs"
+    "fixture/ConfigureLogs.yaml"
+
+requestCreateAsset :: CreateAsset -> TestTree
+requestCreateAsset =
+  req
+    "CreateAsset"
+    "fixture/CreateAsset.yaml"
+
+requestCreatePackagingConfiguration :: CreatePackagingConfiguration -> TestTree
+requestCreatePackagingConfiguration =
+  req
+    "CreatePackagingConfiguration"
+    "fixture/CreatePackagingConfiguration.yaml"
+
+requestCreatePackagingGroup :: CreatePackagingGroup -> TestTree
+requestCreatePackagingGroup =
+  req
+    "CreatePackagingGroup"
+    "fixture/CreatePackagingGroup.yaml"
+
+requestDeleteAsset :: DeleteAsset -> TestTree
+requestDeleteAsset =
+  req
+    "DeleteAsset"
+    "fixture/DeleteAsset.yaml"
+
+requestDeletePackagingConfiguration :: DeletePackagingConfiguration -> TestTree
+requestDeletePackagingConfiguration =
+  req
+    "DeletePackagingConfiguration"
+    "fixture/DeletePackagingConfiguration.yaml"
+
+requestDeletePackagingGroup :: DeletePackagingGroup -> TestTree
+requestDeletePackagingGroup =
+  req
+    "DeletePackagingGroup"
+    "fixture/DeletePackagingGroup.yaml"
+
+requestDescribeAsset :: DescribeAsset -> TestTree
+requestDescribeAsset =
+  req
+    "DescribeAsset"
+    "fixture/DescribeAsset.yaml"
+
+requestDescribePackagingConfiguration :: DescribePackagingConfiguration -> TestTree
+requestDescribePackagingConfiguration =
+  req
+    "DescribePackagingConfiguration"
+    "fixture/DescribePackagingConfiguration.yaml"
+
+requestDescribePackagingGroup :: DescribePackagingGroup -> TestTree
+requestDescribePackagingGroup =
+  req
+    "DescribePackagingGroup"
+    "fixture/DescribePackagingGroup.yaml"
+
+requestListAssets :: ListAssets -> TestTree
+requestListAssets =
+  req
+    "ListAssets"
+    "fixture/ListAssets.yaml"
+
+requestListPackagingConfigurations :: ListPackagingConfigurations -> TestTree
+requestListPackagingConfigurations =
+  req
+    "ListPackagingConfigurations"
+    "fixture/ListPackagingConfigurations.yaml"
+
+requestListPackagingGroups :: ListPackagingGroups -> TestTree
+requestListPackagingGroups =
+  req
+    "ListPackagingGroups"
+    "fixture/ListPackagingGroups.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdatePackagingGroup :: UpdatePackagingGroup -> TestTree
+requestUpdatePackagingGroup =
+  req
+    "UpdatePackagingGroup"
+    "fixture/UpdatePackagingGroup.yaml"
+
+-- Responses
+
+responseConfigureLogs :: ConfigureLogsResponse -> TestTree
+responseConfigureLogs =
+  res
+    "ConfigureLogsResponse"
+    "fixture/ConfigureLogsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ConfigureLogs)
+
+responseCreateAsset :: CreateAssetResponse -> TestTree
+responseCreateAsset =
+  res
+    "CreateAssetResponse"
+    "fixture/CreateAssetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAsset)
+
+responseCreatePackagingConfiguration :: CreatePackagingConfigurationResponse -> TestTree
+responseCreatePackagingConfiguration =
+  res
+    "CreatePackagingConfigurationResponse"
+    "fixture/CreatePackagingConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreatePackagingConfiguration)
+
+responseCreatePackagingGroup :: CreatePackagingGroupResponse -> TestTree
+responseCreatePackagingGroup =
+  res
+    "CreatePackagingGroupResponse"
+    "fixture/CreatePackagingGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreatePackagingGroup)
+
+responseDeleteAsset :: DeleteAssetResponse -> TestTree
+responseDeleteAsset =
+  res
+    "DeleteAssetResponse"
+    "fixture/DeleteAssetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAsset)
+
+responseDeletePackagingConfiguration :: DeletePackagingConfigurationResponse -> TestTree
+responseDeletePackagingConfiguration =
+  res
+    "DeletePackagingConfigurationResponse"
+    "fixture/DeletePackagingConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeletePackagingConfiguration)
+
+responseDeletePackagingGroup :: DeletePackagingGroupResponse -> TestTree
+responseDeletePackagingGroup =
+  res
+    "DeletePackagingGroupResponse"
+    "fixture/DeletePackagingGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeletePackagingGroup)
+
+responseDescribeAsset :: DescribeAssetResponse -> TestTree
+responseDescribeAsset =
+  res
+    "DescribeAssetResponse"
+    "fixture/DescribeAssetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAsset)
+
+responseDescribePackagingConfiguration :: DescribePackagingConfigurationResponse -> TestTree
+responseDescribePackagingConfiguration =
+  res
+    "DescribePackagingConfigurationResponse"
+    "fixture/DescribePackagingConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribePackagingConfiguration)
+
+responseDescribePackagingGroup :: DescribePackagingGroupResponse -> TestTree
+responseDescribePackagingGroup =
+  res
+    "DescribePackagingGroupResponse"
+    "fixture/DescribePackagingGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribePackagingGroup)
+
+responseListAssets :: ListAssetsResponse -> TestTree
+responseListAssets =
+  res
+    "ListAssetsResponse"
+    "fixture/ListAssetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAssets)
+
+responseListPackagingConfigurations :: ListPackagingConfigurationsResponse -> TestTree
+responseListPackagingConfigurations =
+  res
+    "ListPackagingConfigurationsResponse"
+    "fixture/ListPackagingConfigurationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListPackagingConfigurations)
+
+responseListPackagingGroups :: ListPackagingGroupsResponse -> TestTree
+responseListPackagingGroups =
+  res
+    "ListPackagingGroupsResponse"
+    "fixture/ListPackagingGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListPackagingGroups)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+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)
+
+responseUpdatePackagingGroup :: UpdatePackagingGroupResponse -> TestTree
+responseUpdatePackagingGroup =
+  res
+    "UpdatePackagingGroupResponse"
+    "fixture/UpdatePackagingGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdatePackagingGroup)
diff --git a/test/Test/Amazonka/MediaPackageVOD.hs b/test/Test/Amazonka/MediaPackageVOD.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/MediaPackageVOD.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.MediaPackageVOD
+-- 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.MediaPackageVOD
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/MediaPackageVOD/Internal.hs b/test/Test/Amazonka/MediaPackageVOD/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/MediaPackageVOD/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.MediaPackageVOD.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.MediaPackageVOD.Internal where
